学编程的人不能不看的好文章[转载]

水煮蛙 2002-08-01 10:41:15
[这个贴子最后由SilverSand在 2002/07/18 09:39am 编辑]

前两天在考研网上看到这么一篇文章,是枣子原创的。
很受感动,她说出了我们当中很多程序员的思维惯式,提出了一个表面不若人注意,但实质上又是很深刻的问题。
这样好的东西,不可以独享。
大家看完了,也许会有很多感想,但这只是我同意枣子的个人观点。
好了,我不多说,以下文字均摘自www.kaoyan.com 或
http://bbs.kaoyan.com/newsdetail.asp?id=1107919

考研网也有很多讨论,大家也可以去参加。

(枣子原创--www.vcroad.net wutao8@263.net)

做为一名大四的学生,我面试过不少的单位,有成功的也有失败的,但是对我来说所有的失败在某种意义上都是一种成功,特别是我下面写的这些,写这篇文章的时候,我已经签了南京的一家软件公司,但是想起今年2月21日我面试苏州台湾的IT公司的经历联想到我们现在
学习编程的一些情况我真的深有感触,这次面试使我深深的体会到了失败但也收获了很多。我要说的将分成三部分,1.是
我面试的具体经过2.是由面试想到的3.现今我应该做的。当然这些话很大程度上是我个人的意见,不可能完全得到大家的赞同,所以
在某些观点上如果哪位朋友觉得跟我的有很大出入,请不要介意,也不要对我攻击,就当我没有说过,欢迎和我联系共同探讨这些问题!我的EMAIL:wutao8@263.net

1.面试经过
大约在年前我接到了台湾瑞晟(Realtek)苏州公司的面试通知,通知我2月21日到苏州工业园区面试,接到面试后的几天我把一些专业
课温习了一遍,特别是C++和数据结构,由于大学几年里,我一直专研这些方面,加上通过了高级程序员的考试,对于一些常用的算法
我差不多也达到了烂熟于胸的地步,当时的感觉是如果问了我这些方面的问题我应该是没有问题的!
21日那天我被安排在4:30面试,由一位技术人员单独给我面试,在问了一些简单的问题之后他给我出了一道编程题目,题目是这样的:
(由于具体面试的题目比较烦琐,我将其核心思想提取出来分解成了两个独立的简单的问题,有可能问题分解的不当,请大家见谅,实际面试了一个的问题但比其复杂很多,而且涉及一些高等数学变换)
1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
哼,我的心里冷笑一声!没想到这么简单,我有点紧张的心情顿时放松起来!
于是很快我给出我的解法:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
搞定!当我用期待的目光看着面试官的时候,他微笑着跟我说,执行结果肯定是没有问题!但当n很大的时候我这个程序执行效率很低,
在嵌入式系统的开发中,程序的运行效率很重要,能让CPU少执行一条指令都是好的,他让我看看这个程序还有什么可以修改的地方,
把程序优化一下!听了这些话,我的心情当时变的有点沉重,没想到他的要求很严格,之后我对程序进行了严格的分析,给出了改进了的方案!
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
虽然我不敢保证我这个算法是最优的,但是比起上一个程序,我将所有涉及到乘法指令的语句改为执行加法指令,既达到要题目的要求而且
运算时间上缩短了很多!而代价仅仅是增加了一个整型变量!但是我现在的信心已经受了一点打击,我将信将疑的看者面试官,他还是微笑着
跟我说:“不错,这个程序确实在效率上有的很大的提高!”我心里一阵暗喜!但他接着说这个程序仍然不能达到他的要求,要我给出更优的
方案!天啊!还有优化!我当时真的有点崩溃了,想了一会后,我请求他给出他的方案!然后他很爽快的给出了他的程序!
long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}

搞笑,当时我目瞪口呆,没想到他是这个意思,这么简单的代码我真的不会写吗,但是我为什么没有往那方面上想呢!他说的没有错,在n很大很大的时候这三个程序运行时间的差别简直是天壤之别!当我刚想开口说点什么的时候,他却先开口了:“不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们
程序员服务的!”多么精辟的语言,我已经不想再说什么了!接着是第二个问题:



--------------------------------------------------------------------------------
我哭过,我笑过,这个我爱的世界我来过!
...全文
112 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxbcxl 2002-09-05
  • 打赏
  • 举报
回复
学习
grt 2002-08-25
  • 打赏
  • 举报
回复
程序执行的效率有时能决定事情的成败。
现在企业情况都不好,不可能去买高档的设备,就是P4机,面对日益增大的数据库中的数据,如果没有高效率的程序是不行的,不是SQL 语言的问题,从数据库的设计,数据流向,表字段的设计都要认真考虑效率,而不能满足于少量数据时得出的正确结果。这是我做系统时的体会。
newskysoft 2002-08-21
  • 打赏
  • 举报
回复
只要一接到笔试的通知我都比较失望,因为象楼主那样被拷问的一般情况下也就意味着低收入
xing_xing 2002-08-21
  • 打赏
  • 举报
回复
哎。很受启发。想到自己编的程序真是一陀屎。

jdsnhan 2002-08-21
  • 打赏
  • 举报
回复
心声,佩服,努力,谢谢
flyerlxg 2002-08-21
  • 打赏
  • 举报
回复
启发很大!
程序不是能运行就了事而是要从易用性、可读性以及高效率方面深入优化
seasideboy 2002-08-18
  • 打赏
  • 举报
回复
看来俺真的只是民工。。。
ihfvw 2002-08-18
  • 打赏
  • 举报
回复
看来我得努力。。。
arch_zhh 2002-08-18
  • 打赏
  • 举报
回复
心声
wuming0 2002-08-18
  • 打赏
  • 举报
回复
真的没白来,谢谢
banalman 2002-08-18
  • 打赏
  • 举报
回复
借鉴
yuxuan 2002-08-17
  • 打赏
  • 举报
回复
我在做程序时遇到类似的事情,当时我给移动公司做程序,不要小看SQL语句,学问大着呢,数据量小可能看不出差别,当数据量达到100万条以上时差别就出来了,我们做程序的要不断精益求精,才能写出好程序。我们一起努力吧!:)
tiger201 2002-08-14
  • 打赏
  • 举报
回复
:)
ferbruary 2002-08-14
  • 打赏
  • 举报
回复
谢谢
liqingyang 2002-08-14
  • 打赏
  • 举报
回复
谢谢。
iwithyou 2002-08-14
  • 打赏
  • 举报
回复
o,yeah ;)
pbsql 2002-08-06
  • 打赏
  • 举报
回复
有道理
人生如梦 2002-08-06
  • 打赏
  • 举报
回复
有则改之,无则加冕~~
tsting 2002-08-06
  • 打赏
  • 举报
回复
启发很大。感谢贴出这样的贴子,大家是该加加油。
albert_qhd 2002-08-06
  • 打赏
  • 举报
回复
mark
加载更多回复(8)

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧