2006年9月25日

作研究的编码功底

近几日有幸和Google的几位工程师有了两次面对面的交流,感觉收获颇丰,不敢独享,欢迎拍砖!

对于作研究,编码能力需要到什么境界才算够用?这是我从2003年开始不如研究行当以来一直在思考而且长时间没有答案的问题。原本的认识是掌握一些基本的编程技术就够了,读博士需要的编码能力是很低的。自己在本科时代留下了莫大的遗憾,那就是没有做过ACM OJ的题目。想2004年的时候曾经打算开始在学校的ACM网站(http://acm.hit.edu.cn)上作些题目的,没想到废了九牛二虎之力(当时不知道1002可以用long long,硬是用加法拼接的方法完成)做完前两道题目后卡在第三题了。随后由于事务繁多便忘了这回事了。前一阵子,参加了一次学校ACM集训队的内部会议,在场上感受到了大家对ACM的执着和热情。昨天上午,学校Google Camp开营的上午是Google HCPC的比赛。我被营长桑俊俊叫去观战。在现场看到了如此壮观的场面。这是我第一次亲临ACM比赛现场。大家的那种对编程的执着深深的感染了我。又一次在老友刘禹的指点下,我开始了自己的ACM生涯(呵呵,从零开始),我给自己帐号的自我描述是“初学ACM!弥补多年的遗憾!”。还好昨天完成了两道题,今天又完成了两道。现在渐渐找到了自己在ACM上做题的感觉,希望自己能够坚持下去,至少每日一题。

呵呵,上面是自己对ACM的一个认识过程。在有幸和Google的三位工程师一起吃饭的时候,我了解到了他们对编程的看法,以及Google内部对于作研究需要掌握编程能力到何种境界的答案。和MSRA不一样的是,Google北京的研究和开发不是相对独立的,而是紧密结合在一起的。在那里的研发人员,每人都要求有非常高的编码能力。以C++为例,他们需要考虑C++的各个编码细节,甚至是代码的汇编指令以及对Cache的访问频度。对于Python那就抠得更细了。因为一个刚入门的人和一个高手写Python,实际的效果是一个在天上一个在地下的。对于Python我是有这个体验的。Google要求每位研发人员都是全能型的人员,从底层的编码实现,到顶层的产品推广,以及分析问题研究问题,甚至于最后的撰写论文。这种模式,使得Google的产品能够以较快的速度从迸发想法到最终呈现在用户面前。这样的要求是有好处的,因为只有熟知各个细节的人才能真正做好事情。我感觉对于作研究,编码的能力没有上限,越强越好。

每天练习一下编程对于作研究是有好处的。首先,它会使得你不会因为长时间没有写程序而忘掉那些常见的编程规发和编程细节。所谓温故而知新就是这个道理。其次,只有对编程保持敏感才能在做研究的时候不会因为卡在编码实现阶段而推迟研究成果的诞生。

作为计算机系的博士生,编码是一定要过关的,而且需要达到非常高的水平,否则亏对计算机系博士生的称呼呀!内心有愧,后悔自己本科时代以及研究生时代没有接触ACM。但是感觉现在还不算晚,保持对编程练习的热情和执着,每天继续下去。相信有一天我会渐渐向我的偶像陈儒和我的老友刘禹的编程水平靠拢吧。

引用亚杰和我常说的话:AZa AZa, Fighting!

9 条评论:

Bill Lang 说...

Comment's author: Chen
09/26/2006 11:32:12 AM
这句话:AZa AZa, Fighting!是不是很流行?我已经看到很多人用了。

Bill Lang 说...

Comment's author: Bill_Lang
09/26/2006 02:31:18 PM
这是韩剧《浪漫满屋》中的经典台词,意思是“加油加油!”

Bill Lang 说...

Comment's author: Yang Zhang
09/27/2006 09:36:14 AM
朗朗生日快乐哈

通过这篇文章,我也管中窥豹,了解了一些。真的是写得很好

Bill Lang 说...

Comment's author: magic
09/27/2006 02:12:09 PM
师兄,happy birthday!

Bill Lang 说...

Comment's author: zhu
09/28/2006 09:34:51 PM
but, what's the relaton between ACM and programming? ACM can only improve one respect of your programming ability, right?

Bill Lang 说...

Comment's author: Bill_Lang
09/29/2006 08:51:56 AM
Hi! Lao Zhu, nice to see your comment here. My msn account is crashed. So I can not comment on your blog now. I will try to solve this problem. In our campus, ACM means the online judge programming. I believe ACM can improve your algorithm design ability. Meanwhile, algorithm is the core of our computer science. It is very important to our research. Do you think so?

Bill Lang 说...

Comment's author: zhu
09/30/2006 08:52:10 PM
Yes, I can not agree more. Software development is critical to research work. Seems you are good at programming. :D.

Bill Lang 说...

Comment's author: Zhao
10/03/2006 03:27:16 PM
顺着HIT的IR实验室论坛链接到你这里的,看了你的blog,写得很好,受益匪浅。

Bill Lang 说...

Comment's author: Bill_Lang
10/03/2006 07:13:04 PM
谢谢UnivMercury!看了你的blog,也很不错的哦!共同进步!