2007年6月2日星期六

6月2号

在前面一篇日记中忘记了说一件事情,在水木上frostyblade的回帖。
大意就是写程序要落笔就成,没有错误,不需要调试就可以运行,不要依赖各种IDE来查错,这样在面试中会有很大优势。
而这个问题主要是在写程序前缺乏对整个程序整体的认识,只是修修改改,然后再试,这是一个错误的编程思想。
我很同意这个观点,但还没达到这种境界,对于编程,我只是初涉,对于很多东西都还是不懂的。要学习很多。

今天上午本科答辩,马马虎虎,讲的马马虎虎,问的问题答的马马虎虎,希望老师手下留情,不要给分太低啊。

在google 黑板报上有篇文章,"对学生朋友的建议",google中国工程研究院的 工程师 方坤写的,说的是在招聘过程中学生的问题,
实站,缺乏实站,是现今学生的通病,我也一样,所以读个研究生老缓冲一下,补充实践经验。

"于一个未来的软件工程师来说,实际编程经验是相当重要的。我们会要求应聘者在紧凑的时间内编写大量的代码,从中考察应聘者的分析能力,编码速度,代码可读 性,对所用编程语言的掌握程度,对边界条件与异常状况的处理,数据结构与函数接口的定义,程序运行的效率和应聘者查错纠错的能力等等"

"我记得开复对于青年学子们有一个建议,大学四年,至少要编写 10 万行代码。不是每一个人都期望进入谷歌这样的顶级技术公司,但即使对开复的建议打个三折,也还有 3 万行呢,不努力,能行嘛。前来应聘的学生们在编写代码时暴露出这样那样的问题,大都可以归结到同一个原因:锻炼太少。比如"for (int i = 0; i < strlen(s); ++i)",没有实战经验的人,怎么可能意识到暗藏其间的效率陷阱。再比如内存泄漏,就和初恋一样,没有亲身经历过的人,不会有刻骨铭心的感受,而一旦经 历,终身难忘,根本用不着你有多聪明。遗憾的是,我看到许多相当聪颖的学生写出来的代码只能用惨不忍睹来形容,真让我怀疑这是不是就是他们的第一次。大家 不要怪谷歌要求高,恕我直言,如果不能持之以恒,下点儿苦功夫,不光谷歌一家,其它公司恐怕也是进不去的。"

for (int i = 0; i < strlen(s); ++i),这句话什么问题呢,初一看貌似可以,我第一眼看,感觉这样没错啊,可以跑啊。但是忘记了一点,效率,在每次循环我们都要调用strlen,多么耗时啊,完全可以将其先行求出,再循环。这就是经验的问题了。

内存泄漏的问题,我感觉在我们项目中存在很多,编程经验啊。才写过几行程序啊。10万行代码,我一年能写这么多吗,一年365天,每天要写300多行啊。

"前不久我在西安遇到一个学生,他半年来一直坚持在北京大学的 ACM 网站上参赛、做题,我看他写出来的程序就确实比他大多数同学都要好一些。我相信,只要他能够持之以恒,还会取得更大的进步。我听说浙江大学的 ACM 网站、TopCoder 网站也都是不错的教育资源,感兴趣的同学不妨一看;虽说做竞赛题距离真正的软件开发还有着显著差别,但也不失为一个不错的出发点。"

我要向这位同学学习,ACM,TopCoder,都要做。

"到了这个阶段,我推荐大家读一些经典的进阶书籍,例如《Effective C++》、《Effective Java》等,即使地处偏远地区,也可通过网上书店买到。(我建议编码量太少的同学就先不要读了,会走火入魔的。我见过有学生连引用和指针都没搞清楚,就 在那里重载操作符的。)交流也很重要,如果能够与网上网下志同道合的朋友互相帮助,共同进步,当收事半功倍之效。"

我算编码量少的吗,会走火入魔吗?

"一家外包公司或许会满足于雇佣仅能从事简单的、机械性的重复劳动的软件蓝领,而让谷歌苦苦寻觅的,乃是最优秀的软件工程师兼计算机科学家――是的,在谷歌,研究与开发融为一体,软件工程师与计算机科学家当然也合二为一。"

我不是CS科班出身,怎么办呢

"遍历一个数组或链表的时间复杂度是多少?对于这样一个不是问题的问题,竟然各地都有相当数量的学生回答说是 O(logN)!有一次我实在忍不住了,提示应聘的学生说:"你是如何理解'遍历'一词的涵义呢?"他立刻做恍然大悟状,回答说:"哦,对,应该是 O(NlogN)"。"

这个问题怎么回事?遍历?不就是走一遍吗,O(N)不可以吗,O(logN),O(NlogN)怎么回事呢?

诚信为本

"试中偶尔也能遇到诚信堪忧的学生。有一次我出了一道题,前来应聘的学生明明以前见过这道题,却告诉我说没见过,自以为得计,可他那一纵即逝的狡黠一笑哪里 逃得过我洞若观火的锐利眼神。大哥,你又不是专业演员,为什么要玩这样的花招?我每年面试的求职者在百人以上,捣鬼是过不了我这一关的。两点之间直线最 短,说真话最简单。"

没有评论: