【转】对攻读计算机研究生的学弟妹的建议

谈谈我对攻读计算机研究生的看法

就我自己的理解,谈谈我对读研和软件学院的看法,不妥之 处一笑了之即可。 如果你有实际开发工作经验,感觉自己的水平和实力进 入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯 一选择。因为计算机学院才能让你在理论上更上一层楼。软件学 院从教学计划上就没有把你往这方面带。当然能不能更上一层楼 最终还是完全取决于你自己。

需要特别说明的是,工作经验并不 一定等于开发经验,我见过很多工作 2-3 年的人,但是没有一点 开发经验。 你说:“他们都有很强的开发能力,只是不太喜欢读书,也只 是希望混个学历对今后在岗位上晋升有好处”, 我可以向你保证, 你所说的人绝对不是开发能力很强的人。因为,1)高手不可能不 喜欢读书;2)高手不可能想去混一个学历;3)高手不可能认为 晋升是因为学历的原因。

还需要说明的是,考计算机的人未必个个都是高手,严 格来说,大部分都不会编程序。也就是说,庸庸碌碌之辈仍然占 绝大多数。研究生毕业的师兄只拿 2500 元左右的比比皆是,所以 不要寄希望于拿一张研究生文凭出去赚高薪。但是,对于有实际 开发工作经验的人, 要想自己在 3 年之中有一个真正的提高的话, 计算机学院提供了广阔的平台。就我所知,每一个月拿 2 万以上 的也有(上海育碧,图形特效算法设计)。所以,同为研究生毕 业,能力的差距是极大的。所以,不要去问“研究生毕业能拿多 少?”,要问“像我这种水平的人,研究生毕业能拿多少钱?” 这样人家才能够准确地回答你。

所谓“有实际开发工作经验”是指你目前已经具备下列能力:

1)你已经认为 C++和汇编语言都是很简单的语言,并能够自如地 运用;

2)你能够在 30 分钟之内想到正确的五子棋 AI 算法设计思 路和方向;

3)你完全理解 STL 为什么这么重要;

4)你能够独立 地解决所有的编译与链接问题,哪怕你从来没有遇到的问题,你 也不需要询问任何人;

5)英文网站是你的首要信息来源;

6)能 够读懂英语写成的国际标准,比如 NTFS 磁盘格式标准。

7)你经 常站在集合论的角度思考算法问题;

8)能够理解一个简单的驱动 程序,能够理解一个简单 3D 交互程序;

9)你能够认识到线性代 数和概率论在实际编程工作中的极端重要性;

10)你完全理解 COM  的设计思想,尤其能够理解 COM 为什么要设计成这样;

11)当我 说到虚函数的重要作用时,你不会急着去找书来翻;

12)你能够 说出 C++为什么比其他语言优秀的理由,记住这种理由应该来自 于你的开发体会,而不是因为其他人都这么说。

此外还有很多判 断标准,但如果你同时具备 5 条以上,可以认为你已经具备相应 的开发经验了。

在这种状态下读研, 你将取得读研效益的最大值。 读研最重要的是要明白你自己要干什么,不能等导师来 告诉你你应该干什么。研究生的优势在于理论功底深厚,思维具 有穿透力,当然编程能力首先要过关,不要读完研究生还不知道 MFC 程序的 WinMain 函数在哪里。所以,研究生期间,你一定要 做有理论深度的算法设计,比如大规模数据的搜索算法,性能是 首要考虑因素,不要奢望 SQL 函数能够帮你解决问题,所有的问 题你都必须自己解决,你必须解决内外存交换的性能瓶颈。再比 如极品飞车的 3D 场景生成,图形变换,碰撞检测,物性模拟,纹 理映射,灯光模型等等,这些都是可以保证你能拿到 2 万以上月 薪的技术。如果你认为这些东西太难,不可能做得出来的话,那 么你就不适合读研。真的,要是你认为读研之后还是要去搞一般 的程序设计,如信息管理系统之类的软件,那么你读研的价值就 完全不会得到体现,因为这些工作根本就不需要读研。

软件学院宣称培养软件开发人才,恕我直言,我从来没 有看见那个高手是培训成功的。 成为软件开发高手的路只有一条: 自学!软件开发中需要大量的编程实践和独立思考,只有在此过 程中, 你才能够逐步成长起来。 软件学院宣称培养软件项目经理, 这更是搞笑,在某种意义上这是欺骗行为。学院里面能够培养出 软件开发经理更是十足的谎言,软件项目经理必须,或者说更强 调从战争中学会战争。没有实践经验的项目经理就是绣花枕头一 个。 实话实说,软件学院就是一个蒙钱的机构,公关工作做 得很好,善于打广告,而且都是打着高薪的幌子,就如同外面的 什么北大青鸟培训班一样。两个字:蒙钱!四个字:还是蒙钱! 总之一句话,如果你只想成为软件开发高手(比如认为 会编驱动程序或杀毒软件就是高手的那种),建议工作,不要考 研;完全没有工作经验的,也不建议考研,你进来了只有瞎混一 通。如果你有上述工作经验且想成为高级软件工程师(能够独立 理解并设计出快速傅立叶变换算法的那种软件工程师)的话,那 么强烈建议考研。考研让你有 3 年放松思考的机会,也有 3 年让 你思想和技术积累沉淀的机会。非常难得的机会。不考研的话, 这种机会就是一种奢侈,可望而不可及的那么一种奢侈。 所以,不管你是哪一种情况,都不建议考软件学院。除 非你是女生,把能够成为一个研究生当着一生最大满足的那种女 生。

 1)关于读书的机会成本问题。读研的机会成本的确是很 高。任何人都可以简单地计算出来。所以,我也不赞成所有的人 都去读研。 读研只适合那些痛感数学在编程中的极端重要性的人。 如果对理论工具和理论思维的极端重要性没有切肤的认识,那么 读研的价值几乎为 0;读研的好处在于:A,把你自己放在一个学 术和工程的交叉点上;B,让你具备了进入微软等世界顶级软件研 发机构的可能性; 记住只是可能性。 但是不读研这种可能性为 0; C,如前所述,如果没有读研的机会,你也就没有静下心来好好钻 研几年理论的机会; 一边工作拿高薪, 一边深入地学习各种理论, 诸位认为这可能吗?我反正认为不可能,我觉得学习钻研理论最 需要的就是一个长期安静独处的环境,一边工作一边读书是不可 能有这样的环境的,你会觉得每天都在疲于奔命。而读研正好可 以提供这样一个环境。 我同时还反对整天跟着导师的屁股后面跑, 这样会浪费很多时间。读计算机的研究生,主要依靠自己去查阅 最新文献,自己去研读文献,和导师的口头交流一个月一次就足 够了,前提还需要导师的水平足够牛。如果导师的水平不牛,这 也没关系,不理他就是了,自己做好自己的事情即可。

 2)关于研究生教学质量问题。坦白地说,全国都是“洪桐 县中无好人”,尤其在计算科学领域,大牛极少。那为什么还要去 读研?大问哉!把读研的收获寄托在名校或名师的名气上,我认 为是注定要失败的。读研全靠自学,研究生之间的差距全部体现 在自学能力上面。又有人问,既然是自学,为什么非要读研?回 答是:因为读研就是为你买一份保险,就是买一份你自学三年之 后不会失业的保险。这份保险主要是一种心理上的后盾,让你在 自学过程中经得起诱惑,能够从容镇定地去追寻计算机理论发展 的坚实足迹,从欧拉,费马,高斯,康托,图灵等巨匠那里寻找 方法论的珠宝。倘若没有这份保证,你在家里面自学 3 个月,保 证你会被失业的压力压得喘不过气来,何谈安心学习? ?

 3)关于实战经验与理论学习的优劣问题。这没有定论, 如前所述,管理信息系统,设备驱动开发,工具软件开发,软件 病毒剖析等等这些工作不太需要创造性,需要的是耐心和经验, 需要的是对既有规范的准确理解,这类开发工作最适合在实战中 提高,理论学习没什么作用。但是在人工智能,模式识别,图像 压缩,虚拟现实,巨量数据检索,自然语言理解,计算机图形学 等等领域,理论学习就占据着绝对的统治地位!这些领域的突破 对人类的生活的影响是极其巨大而深刻的。某些领域处于一个极 其快速发展的态势之中,比如计算机图形学,相信诸君能够从众 多 3D 游戏的灿烂辉煌中体认到我的这种说法。 在这些领域, 如果 没有扎实的理论功底,一切都是那么遥远,不管你花了多少时间 在编程上面。+?Y)? ?

4)关于高级研发人员的知识结构问题。首先声明,我不 是一个纯粹理论激进分子, 即认为除了理论之外, 一切都不重要。 我认为,纯熟的编程技能是最基本但也是最必不可少的技能。没 有这个基础,一切计算机理论就是空谈(研究图灵可计算性理论 的研究者除外)。有了这个基础之后,下列理论学习方向必须重 点突破:?

1,科学哲学。这是核心中的核心!可惜国内不开这 门课。不但不开课,而且还作为批判对象来引用,实在是遗憾至 极!这是一门教你如何“钓鱼”的学科,在一切科学研究中居于最 核心的地位。它是古今科研方法和思维方法的集大成者,很难想 象一个成熟的研究者没有一套自己的方法论体系。科学哲学最需 要的是领会与总结,它的思想与启示会伴随我们的一生。 ?

2,康托集合论,矩阵方法,离散结构,图论方法,群论 方法之间的紧密关系。最重要的认识这些理论对实践的重要启示 和方法引导。我始终认为,如果你学了一门理论之后,却不知道 这门理论有什么作用,那么你的理论就白学了,你什么东西都没 有捞着。所以,学习任何理论之前,先问自己:它有什么用?在 哪里用?如何用?带着这些问题去学习理论,你才会真正地学到 东西。用这三个问题去问你的理论课老师,他的回答就是判断其 实际水平的最佳标准。 ?

 3,思维要有极强的穿透力,学会看透文献作者没有写出 来的动机。绝大部分大师都有隐瞒自己最具有方法论启示意义的 思考环节的习惯。牛顿和华罗庚先生都有这个坏习惯。这让大家 认为他们是天才,因为很多问题他想到了,我们想不到。但是为 什么他们能想到,我们想不到?他们是怎样想到的?没有人告诉 我们牛顿发现万有引力定律时的思考过程,当然,牛顿可以慷慨 地把他的思考结果告诉我们, 但是, 他那可以点石成金的“金手指” 却没有教给我们。我们的任务就是要培养透过文章看穿作者背后 意图和动机的能力, 在这方面, 台湾的侯捷和美国的 Donbox 是绝 佳典范。 这两只老狐狸 (呵呵, 是爱称) 凭着其猎犬一般的嗅觉, 抽丝剥茧, 一个把 COM 背后的幕后设计动机揭开并暴露到了光天 化日之下,另一个把 MFC 的宏观架构做了一次完美的外科手术。 其非凡的思维穿透力令人惊叹。$?n2?Z ?

 4,英语。英语本身不重要,但是用英语写成的文献就极 其重要了。所以,专门把英语作为一个重头戏列出来。大家不要 相信英语无用论的鬼话。对于搞计算机的而言,英语就是你的母 语! ?

5,其它的具体理论还有很多,但是都不如这三个方面重 要,因为我觉得这三个方面是最具有根本性,全局性的能力培养 环节。需要指出的是,很多高深理论对你的工作是无意义的,当 心时间陷进去。一定要把效率最高的时间段用在最具有决定性意 义的理论学习上。 ?

 5) 关于读研之后的出路是否光明的问题。 我们应该承认, 读研之后,你的工作机会不是变多了,而是变少了。而且越是高 手,他的工作机会和工作范围就越少。这是因为,越是搞前沿研 发的公司,其数量越少,在这个圈子的人也就越少。你找工作的 范围就越小,试问:如果微软的 OS 设计专家出来找工作,能够让 他选择的公司能有几家?但是,这种公司数量的减少是以工资待 遇的急剧上升为补偿的,同时,你在工作中所受到的充分尊重也 是在一般公司中体会不到的。所以不要担心学了高科技用不上, 呵呵,你只会越来越感觉自己学的不够用。相信接到过猎头公司 电话的人会体会得到。真正的高手从来就不会担心工作的问题, 也从来不会到人才市场上去找工作。既然选择了理论深入,那么 就应该把眼光放得更远。?

posted @ 2011-04-12 11:13  lucyjiayou  阅读(914)  评论(0编辑  收藏  举报