|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 sun_ic 于 2011-3-10 14:53 编辑
海外一个论坛上的软件高手写的博客。虽然跟电路不搭界,但感觉有些感想还是很有共鸣的。转贴在此共享。
原文出处:
Blue_Diamond的博客
http://blog.wenxuecity.com/blogview.php?date=201103&postID=7104
我所见到的编程高手的故事和一些回忆(上)
编程语言五花八门.所以,同为程序员,又用同种编程语言工作,才真正算是同行.在我所干的这一行中,能够在编程语言的某个方面或在某个细节上有独到见解,从而能发表论文作交流,或有同等能力的,大约只占5%到10%.也就是1/10到1/20.
先定义程序员的能力系数,如果把从职场上随机选取的N名同行的程序员按水平从高到低排序.而你是第m名,那么,当N很大时(以几百上千为宜),你的能力系数为:k=N/m.
再定义编程任务的难度系数,如果一项编程任务的难易程度正好适合一个能力系数为k的程序员在全面发挥其水平的条件下做出,那么,这项编程任务的难度系数是:k
能力系数大到10,可称为准高手。能力系数大到20,必为高手。我要讲的就是这类人的故事。
我去东岸一家中型公司工作时,遇到高手X,中国人,理工科出身,10年工作经验,宏编程能力超强。我工作到3个月,也被刮目相看,派去做QC。不久,就开始给他的产品(程序)作QC。‘行家一出手,就知有没有’,我见过他的代码,简洁流畅。我评出他的能力系数:30。他是我熟悉的人中能力最高的。
后来,我又给别人QC,就发现公司其他人中,还有个西人,能力系数曾接近于10。但以做管理为主,编程时间不到50%,能力就降下来了。而公司里较难的编程任务的难度系数多在10与20之间,从而,程序员们错误百出,QC特别费时。因为原产品没做好,该公司的QC任务更难,难度系数有时达到30以上,这在以后的职业生涯中也没遇到过。程序员走了2个,于是,QC任务都压过来还有时限,只好加班。我每周常常工作70小时,公司付加班费。结果,各个项目接连完成。不久,冒出一项难题,几经他人试做与推逶,就交给了我。一上手,很难,我干脆又接受了一项附加要求,难度系数增加到60。当我完成后,已被誉为作图专家。又作了几个形态各异的图后,6个月合同期满。公司说要再续半年,可我说累了,执意要回家,走了。
一睡就是一个月。我一睡醒,猎头们来了。旧猎头问我过得怎么样.我说,睡觉,拉小提琴,或逛曼哈顿。他说:好了,接着干吧,有家公司免面试。我就说这可前所未闻。他说免面试仅对你,就是你刚干过的那家公司。我说别的都行,那家公司干得太累就免了吧。他说可以涨工资。我考虑到上班近,就又从了。
当我回到原公司,看到了7个新招的程序员,其中两个西人老头。高手X还在,廋了。我奇怪:有这样疯招的吗?他说:近期公司编程项目进展不顺,没能按时完成,统计师也坐立不安,只好乱招人。又问:老头子行吗?他说:其实不行,公司又外包部分任务到一家外州的CRO,他们有3个程序员由我们遥控。
我先是给那3个远程程序员做QC,他们的能力系数都小于5。完成后,新任务是给一个30多的西人程序员J作QC,这人谢顶,有些列宁的风度.我问X:J 行吗?答道,新招的里面,他是最好的。QC开始,这人竟把代码藏着,看不到。别以为我没能耐,我可以不知道机器的运行状况,而照样把关产品质量。渐渐我觉得这人不差。但即使聪明,也常出错,那是因为任务的难度系数达到了20。不久得知,此人擅长宏编程,10年工作经验,自己开有小公司并雇有2人(怪不得来公司如同三天打鱼,两天晒网.),也爱写论文参加会议交流。我给此人当时的能力系数评为15。他是我熟悉的西人中能力最高的.(后来,我曾见到他2010年的会议交流论文和他的公司网站,3年了,想必能力系数应增长到20,或再高点。)
再不久,X生病住院了,还要开刀。打电话问他,他说干得太累了,尤其是我不在的那个月。我开始自责我那一个月的长觉。
继续与J配对工作,此人编程快,但我QC也快。J渐渐很听我这QC程序员的劝告,因为我指出他的问题,一般十有八九为真。我下班总是很晚,恐怕是大厦清洁工最熟的面孔了。笔记本电脑上又安了软件,偶而可在家编码。如果你看到一个程序的存盘时间是清晨5点,你知道那是我通宵编程做的?还是早起编程做的?
不知不觉又快半年了,我必须离开,而公司合同也只能聘11个月。又有新任务计划了,但我已不在那计划之中。一次,讨论该计划,J竟说要独挑编程产品的大梁,让另外4,5个程序员去给他作QC。其中一位会后叹道,J乃狂人发狂言,200多个报表,他能那么快完成?我知道, 没有好的QC程序员,J会孤掌难鸣的.
恰巧,一位上次无功而返的猎头找到我,电话中一阵嘘寒问暖后,便与我伊妹儿频频,并急忙为我联系面试.还关心地问这是否是我近期唯一的面试。我说那当然,因为我只对这一个工作机会感兴趣阿。终于,程序员们开始感叹:他就要离开公司了。
多年后,当我看到这家公司的股票5年走势图,心中总有些微感慨在那峰谷之间。
我所见到的编程高手的故事和一些回忆(下)
记得那年刚来加州,最大的感概就是那蓝天白云,阳光灿烂.对比而言,新州的冬天,是令人苦不堪言的.
这次我是在加州的一个大公司工作,光程序员就上百人.有不少高手,而一般的高手在这儿并不出众.我在一个有约20名程序员的编程部门里工作.有一位高手是我过去的同事的中国同事,能力系数约为25.是我知道的最善于图形编程的.
在大公司里工作的好处是,有很多可用的宏.就我所知,多数宏写得平平,经过多人改写,代码支离破碎,且少有定期维护.除非非用不可,我以少用为妙.依我看来, 宏是应是由一人编写,以后也要由编写者本人维护,除非编写者力所不逮才可换人.
很快,有一个不可不用的宏引起了我的注意.这个宏专用于把一个文件转为另一类文件,我称之为宏R.宏R可称为QC程序员的眼镜.用了它,成百上千页的文件可由电脑程序自行对比检查完成.不过这个宏也常出问题,另有几种擅自的修改版本,也还不顶用.我开始问别人了,答复是,即使用法正确,问题仍会发生,不怪宏编得不好,而是所要处理的文件太复杂多变了.
宏R的原作者是程序员M.我研究过宏R的代码,编得确有许多闪光之处,能够正确组织代码应付如此复杂的数据处理问题,的确是大手笔.又上网查相关方面的论文,能搜到的不多,倒是有一篇论文读了很切题.再看作者,正是M.查本公司网站,见到M相片,并知道还在同一栋楼工作.--若有机会见到他,我估计我会说:我拜读过你的论文,受益匪浅.
据后来我知道的,M是本公司昔日编程头号高手,大概来自欧洲,颇有编程天才.后荣升为经理.他的宏编程能力绝佳,他的能力系数定为:80.是我知道的人中能力最高的.
为工作需要,我盟生了擅自改一改的念头.再加以研究后,发现了其代码上的得与失.有数据处理流程细节上的把握失当,也有算法上的低效问题.而注解中见得着后来的修改者(为何不由原作者来维护?),但从根本上来说,修改又于事无补.
我干脆吸取宏R的长处,重写了一个宏(姑且称为R1)为我所用.R1的运行极快,为R的10倍.且运行得更平稳.不久,部门组织2人测试来R1并要求将R1的功能加码,宏R1完成后也成为公司的正式版本.因有多项附加的功能,成为宏R的替代品.宏R1的难度系数:90.
不久,本部门又来一个程序员Y,工作经验近10年.编程上见解独到,代码分析细致入微.高手,能力系数:20.
一天,经理交给我一项任务,编一个宏(姑且称为G),为每个程序员所使用.要求它自行测出当前程序文件名和路径,找到最近的输入/输出数据存放处….总之,就是在每个程序的开头都使用这个宏,让它去做它所能做的一切.我是宏G的编程者,Y为宏G的两名测试者之一.没想到,在我刚开始编时,Y就给我两个好建议,进度加快了.开始测试后,他又有好的改进意见.就这样,编程,测试,讨论,直至顺利完成.宏G的难度系数:70
终于,一道作图难题悄悄地来了.说它是悄悄的,是因为没有人提出让我做.但谁都知道那是困扰本公司多年的一大难题.曾有人尝试过换用另一种编程语言去作这类图,不大成功.更关健的是,要想一次编成,反复使用,必须用编程的手段把它做成一个宏.也就是,要编一个作图宏.而作图宏的难度系数几乎为一般作图程序的两倍.
我就有挑战难题的习性.于是,抽空跟经理说(我的谦虚精神不够,大概是这样说的):我在以前的一家公司,有人称我为作图专家呢,公司不是有个作图难题吗,现在我想把它做出来,怎么样?她说,你做了,我们还得有人力花时间来给你测试.这要有个计划,以免耽误日常编程工作.等等看,先别急.
这倒像是我扁担挑子一头热呢.没关系,就当我吹牛吧.不过,在下个月的会议桌上,这项任务真的就提出来了并交给了我.这个宏可称为宏P,很快就成立了一个小组,我负责编程,有5个人作测试,另有一人专写用户指南.另外还有不少要求来自统计师,无非就是说:你要把图画成这样的或那样的,再就是除了正确,图还得要好看才成。这些要求我都答应下来了,难度可能增大一点.同时,也听到有人轻笑几声,我想那是在提醒我:“说得容易,做起来难”。
做宏P的难度和复杂程度在不久后就展现开来,往往是过了一个难关,就又看到了下一个难点.无怪乎有人曾认为这是个令人生畏的难题.当我还在开发宏P的半途中,得不到成功的喜悦,只得凭着耐心向前探索.几经修改,我的代码仍旧组织得有条不紊,而在编程流程上我心中也有慎密的规划.我在心里鼓励自己:过去用计算机解决难题无数从未失手,这次一定要战胜困难走向光明.
做为一个程序员,他的工作就是凭着计算机来不断地解决难题。有些公司是没有高手的,或只有能说会道但动手编程能力差的所谓高手。遇到做不出的难题,就会抱怨那是人力所不可及的。若公司非做不可,就得采取分工合作的方式,费时费力。而产品即使成功,多半性能不佳,首先,各模块间配合不良易出错,另一个问题是代码量大,运行慢。
终于,宏P开发成功了,测试顺利通过,用户指南也有人写了。这是我在工作中所做的最难的一个作图宏。宏P的难度系数:150.后来,宏P在公司各部门推广使用并深受欢迎,因为这种复杂多变的图形,正是统计分析师所需要的。成为本部门的一项引以为傲的成果。
后来,我除了日常编程,时而,还负责宏R1,G,P的维护与改进工作。我另外又完成了两个难度约为100的作图宏。
程序员从手指尖流出一个个的键盘符号.当这些键盘符号以最巧妙的排列方式组成程序代码时,计算机就会又快又准地为你工作.放眼望去,我真想说:宇宙不过就是几行程序代码呢。
以前的漫谈:
电路设计漫谈之 1~9
http://bbs.eetop.cn/thread-178347-1-1.html
电路设计漫谈之10: 接地(1)
http://bbs.eetop.cn/thread-197205-1-1.html
电路设计漫谈之11:物联网大跃进http://bbs.eetop.cn/thread-251965-1-1.html
电路设计漫谈之12:高频喜欢低感抗,低频喜欢低(电)阻抗 - 再谈接地。http://bbs.eetop.cn/thread-253126-1-1.html
电路设计漫谈之13 - Accuracy/Precision 和数模系统的参数选择
http://bbs.eetop.cn/thread-257967-1-1.html
电路设计漫谈之14 - 放大器漫谈
http://bbs.eetop.cn/thread-260935-1-1.html
电路设计漫谈之15 - 同步/异步设计及metastability
http://bbs.eetop.cn/viewthread.php?tid=262937&highlight=%B5%E7%C2%B7%C9%E8%BC%C6%C2%FE%CC%B8%D6%AE15
|
|