我从小就对编程不感兴趣,高中毕业时一心想报的志愿是数学或者物理专业,但被做数学教授的父亲逼着填报了计算机专业——他出于很多理由,不想让儿子走他的老路。后来我听说计算机专业居然也有一种不需要编程的职业——做教授!从此我对做教授无限向往,于是坚持读完了博士。
我的硕士生导师倪明选教授(现任澳门大学副校长)曾经有一位及门高弟,在倪教授问其为何读博士的时候回答:“我妈妈要求我拿到博士学位,我博士毕业以后就去赚钱。”这位传说中的师兄如今已是国内某著名IT公司的高层领导。
与形形色色的读博理由相对应,这些博士(生)人生的道路也各不相同。有成为国内外大学教授者,有在公司做技术骨干者,有做一般的工程师者,也有读博期间遇到困难及时退学去工作者,也有苦苦支撑到毕业然后去工作者。当然,他们都比梁山好汉们的结局好得多了。
经常有朋友或者学弟学妹问我:“你觉得读博士好不好?”“你觉得我是否应该读博士?”这些都是相当难回答的问题。
而我们在选择是否读博的时候,往往是对这个专业还没有足够的了解,比如大三、大四时。在中国学生中有一种典型的“羊群效应”:如果周围同学(尤其是学习标兵们)都在准备出国或准备在国内读博,那大家都会效仿,觉得读博很有面子。如果大家都说读博没意义,即使对科研感兴趣的同学,也可能会因为面子问题而不去读博士。
10年前,我也曾经与同学一起去面试微软的工程师职位,甚至宝洁的销售经理职位。现在想想,那些职位既不是我所长,也不是我的兴趣所在,可当年我又如何去判断呢?
我想通过对一些博士人生道路的回溯分析,给计算机专业的学生一些建议,帮助他们选择是否要读博士,鼓励他们通过独立思考来选择自己的道路。
读博士不仅是学习知识和技术,也能培养其他职业技能。读博所收获的并不仅是那几页论文,还有写论文过程中学到的东西。对于中国学生来说,工作中并不缺乏解决问题和编程的能力,而是欠缺表达和沟通能力。比方说你有一个想法能让公司某软件的性能提升一倍,那么你需要说服公司高层领导,让他认为你的想法是有意义的、值得投入资源去开发。实现这个目标所需要的能力是中国学生一直欠缺的,但是可以通过读博得到锻炼。如果公司高层领导对某软件的性能完全不感兴趣,你当然就不能提出提升软件性能的想法。你要知道公司目前最需要什么技术和产品。这个能力并不是天生就有的,而是慢慢揣摩、锻炼出来的。在读博过程中,你必须知道你的导师喜欢和擅长的课题,摸透审稿人喜欢的表述方法和结果。这都是你极好的锻炼机会,因为在读博的时候,允许失败;但是在职场上,失败的代价非常高。我在香港学习期间,与我相熟的刘云浩教授(现任清华大学软件学院院长)反复强调表达能力的重要性。作为一个科研工作者,你要写出能说服别人的论文;作为一个软件工程师,你要写出能体现你贡献的技术文档;作为一个项目负责人,你要写出好的项目申请书和总结报告,让公司知道你的价值。很多中国学生的语言表达能力很弱,这与外语水平并不是非常相关,而是由于没有经过写作的准确性和逻辑性训练。而读博写论文的过程就能培养逻辑表达能力。被别人拒绝很伤自尊。作为天之骄子的大学生,除了追求异性,恐怕很少遭受被人拒绝的经历。而残酷的职场里到处充满拒绝的情形。如何能够以正确的心态来面对这些事情,也是可以通过读博来训练的。当第一次投稿的论文被无情拒绝后,很多学生都非常愤怒和羞愧。甚至有不少聪明的学生在论文被拒几次之后,一气之下放弃了搞学术。其实,论文被拒稿原因并不一定是你的工作做得不好,很可能只是差了一点运气和工作的完整性。在职场里,求职和升职也可能会被拒绝,原因也并不一定是自身的不足。读博能帮助你认识和理解这些事情,并以平常心来面对挫折。我认为读博士并不需要天生的特殊能力或者后天的条件。我们平常所说的能力,诸如编程、数学和英语,都只能叫做读博士的催化剂,而不是发生化学反应的“反应物”。所以,问题并不是“什么人适合读博士”,而是“什么人不适合读博士”。
一个计算机专业的博士,需要在自己的研究方向上成为世界级的专家。没有人能在短时间内成为专家,即使我们看到有些博士生在第一年或第二年就发表了顶级论文,但他们其实并没有从总体上完全理解该方向,选题有可能是靠导师帮忙,甚至就是导师指定的。大部分重要的工作,尤其是涉及系统的领域(比如操作系统、网络、分布式系统、体系结构、编程语言),并不是在短时间内就能做出成果的。一篇重要的系统方面的论文,通常需要花费近一年的时间去做实验与写作,而之前知识的积累则需要更久。文章发表之前的一段时间是最难熬的,大部分失败的博士生都是跌倒在了这个阶段。而能够熬过这个阶段的,不论之前的背景如何,大部分都能继续发表更多的论文。“耐心”是读博最重要的条件。一个成功的计算机博士要懂得欣赏(或者至少愿意欣赏)他人发表的优秀成果,欣赏教科书上的经典设计,欣赏自己或者导师提出的重要问题和解决办法。如果你对科技完全不欣赏,那么是不可能做出好的科研成果的。导师与一个博士生的命运休戚相关。相同条件的两位博士生如果遇上不同的导师,可能会产生截然不同的命运。每个导师的背景不同,手上的资源也不同,而他愿意给学生的资源数量也不同。假如某资深教授A的资源为10,某年轻教授B的资源为5。但是A教授有一个10个学生的庞大实验室,能给你的资源只有1;而B教授仅有你一个学生,给你的资源可以是5。显然B教授是更理想的选择。当然实际情况并不是如此简单。比如在美国,通常资深和年轻教授的资源差距不大。在中国,资源差别可能很大——当然目前这种差距在逐渐缩小。也有可能你在同门中表现突出,资深教授特别中意你,能给你8个资源。还有可能年轻教授长袖善舞,与许多同行和工业界的关系非常紧密,这时他的资源反而超过资深教授。因此如何选择导师,绝对不是看资深与否或者脾气好不好这么简单。同领域里可以选择的课题有天壤之别。有些课题没有研究价值。有些课题很难,即使认真做了,也不一定能做出好的成果。我的建议是,博士生应该经常阅读顶级会议的论文。即使课题组历史上从没在顶级会议上发表过论文,即使导师不做要求,即使你不在顶级会议上发表论文也能毕业,你还是要去了解。否则研究容易和现实脱节,自然不会得到认可。我认为读计算机专业的博士是一个“进可攻退可守”的选择。因为在计算机领域,学术界和产业界联系紧密,任何一行都离不开计算,读博士的职业选择相当多样化。
我在德州大学的博士师兄师姐们有的成为常青藤大学的终身教授,有的成为贝尔实验室的主任,有的成为谷歌公司的项目负责人,也有的成为初创公司的创始人。我在香港科技大学的博士师兄师姐们有的成为摩根大通银行(JPMorgan Chase)的副总裁,有的成为国内名校的新贵,有的在公安部研究所担任重要职务。计算机专业的博士即便职业选择再不如意,也很少有为生计烦恼的,在其他专业的人看来这些人都是各行菁英。如果你没有虚度光阴,在读博士过程中学到的知识在未来的职业生涯中都会发挥作用。如果你的优势是写论文,你可以选择成为大学教授;如果你的优势是解决技术难题,你可以选择成为公司的研究员;如果你的优势是编程,你可以成为软件工程师;如果你的优势是建模,你可以加入金融公司等。计算机专业的知识都是实用性的,这是计算机专业一个得天独厚的优势。即使读博的过程非常不如意,也可以及时跳出“止损”,社会不会把你当成一个失败者,公司依旧非常欢迎博士退学者——因为他们也学到了技术。如果说一百零八位好汉在踏上梁山的那一刻就注定了此生命运坎坷,那么与之相反,读计算机专业的博士却可以保证你未来的生活,并且在此基础上会有多样性的选择来发挥你的优势。