作者序
2009年3月的某个晚上,我跟侯磊同学在万柳宿舍卧谈。我们聊起初来北大软件学院时的志向与苦闷,我们梳理影响自己的人和事,说各自的实习感受和找工作的风风雨雨,说学校的教育制度和各个公司的文化。一夜痛快淋漓地说下来,我们不由总结出,要是研一或更早,有师兄师姐能够这么提醒我们,这一路我们可能就会走得更从容、更自觉。
现在我们都成师兄师姐了,或许我们能够在毕业之前把这些经验教训留下,以期给师弟师妹们一些借鉴与帮助。我联系上博文视点的周筠老师(查看Gtalk记录,是3月16日),说我想召集些身边的计算机背景的应届生朋友,在毕业之前,讲讲自己求学、实习、找工作等的经历与感悟,对本身也是一个"立此存照"和反思自己的好机会。
接下来就是跟周老师还有许莹等编辑朋友的面对面交流,然后与各位编辑一道,去向身边的朋友、向朋友的朋友约稿。为了体现IT从业人员的层次,出版方还特意邀请了几位有工作经验的朋友加入作者群,他们对IT产业与职场的认识,能够丰富我们的视野。
关于这本书的成书过程,有一些事情要说明。我忝列主编之名,其实不过是作为作者群体与出版方之间的联络人,对本书的贡献寥寥,自然不敢贪功。我最先联系的作者是侯磊与唐雅薇,之后大多数在北京的应届生作者,都由他们联系;而北京之外的应届生作者,以及几位有工作经验的朋友,都是由出版方邀请过来的。各位作者贡献初稿后,接下来的编辑统筹工作,也多由出版方的周筠老师、许莹编辑、夏青编辑、白爱萍编辑完成。我们各自零乱的文字,到现在终于集结成书,除了要感谢上面提到的各位编辑老师辛勤有效的工作,还需要提到的是《编程之美--微软技术面试心得》的两位作者:邹欣老师,他一直关心本书的进度,并提出不少中肯的建议;刘铁锋,本来也在本书邀请的作者之列,后由于个人原因撤稿,但他积极参与了本书的前期准备工作--跟侯磊一样,虽然书中没能见到他们的文字,但他们于幕后为本书做的不少工作是应该被提及并感谢的。
人所处的人生阶段不同,立场或视角就不一样。现在我们都已毕业,再要回顾自己的求学历程,可能会用三言两语就把它打发掉,但这些毕业之前的文字,写的都是自己作为学生感兴趣的东西,是自己作为学生认为重要的东西。这种体验很难再现--所幸我们留下的文字不是事后的点评,而是亲历现场的记录。这个集子里记录下的,是我们大学生活所不能绕过的东西:
专业/技术方向选择
社团活动
竞赛
实验室
实习
找工作
出国
技术社区
人际交往
时间管理
压力管理
我们具有各自的独特性--我们兴趣各异,有不同的家庭背景,不同的知识储备,不同的思维方式……但在现实中,我们也会碰到类似的人生选择的关口,我们会犯类似的错误,有类似的迷惘,也会为类似的精彩鼓掌,而且很明显的,我们是类似的一群人--都跟IT沾边。
因此对每个作者而言,这本书既写给自己,也写给所有有类似经历的师弟师妹们。
胡江堂
2009年8月于北京
作者简介
蒋宇东 现就职于上海某公司(C++程序员)博客:http://blog.csdn.net/NewNebuladream
居振梁 现待业,夯实基本功 博客:http://wargrey.yo2.cn
刘帅 现就职于Amazon(SDE-Test)博客:http://lsthu.spaces.live.com/
李成 现就职于北京飞维美地信息技术有限公司(软件工程师)博客:http://www.perlfect.org
温卫斌 现就职于中国农业银行软件开发中心 博客:http://terry-pekingssm.spaces.live.com
胡江堂 现就职于赛诺菲巴斯德(SAS程序员)博客:http://li-and-jiang.com/blog/
辜新星 现就职于Google(助理产品经理)博客:http://guxinxing.blogbus.com/
刘未鹏 现就职于微软亚洲研究院(程序员)博客:http://mindhacks.cn
唐雅薇 现就职于IBM中国研发中心(上海)博客:http://cubbyvivi.blogbus.com/
张弦 现就职于百度(软件工程师)博客:http://stonefish9.blogbus.com/
秦琴 现就职于中国银行 博客:http://clalietsin.spaces.live.com/
张凯峰 现就职于IBM中国软件开发中心(软件工程师)博客:http://www.zhangkf.com
庄表伟 博客:http://www.zhuangbiaowei.cn
宋劲杉 现就职于北京亚嵌教育研究中心(讲师)博客:http://songjinshan.is-programmer.com
程露 博客:http://roburite.spaces.live.com/
黄小明 现就职于某外资企业(软件开发及项目管理)博客:http://blog.csdn.net/view1024
易晓东 现就职于某电子商务网站(运营负责人)博客:http://www.tomcat521.com
简朝阳 现就职于阿里巴巴(MySQL & Oracle DBA)博客:http://www.jianzhaoyang.com
林健 现于中国科学院计算技术研究所就读(硕博连读)博客:http://blog.linjian.org
高昂 现于中科院地理所攻读博士学位 博客:http://www.gaoang.com/
徐宥 现于Washington University 就读(博士)博客:http://blog.youxu.info
推荐序I
从2006年开始,我在微软亚洲研究院参与了实习生培训、新员工招聘与培训等工作;也走访了十多所大学的计算机系和软件学院,还在几个学校讲授《软件工程》这门课。在此期间,有幸结识了不少有想法的大学生朋友。他们中的一些人,就是这本书的作者。
中国的高等教育体系中,大约有10%的学生在学习与IT相关的专业(计算机科学、软件、MIS等)。这些学生在接受了4~6年左右的教育之后,对这个教育系统有些什么反馈呢?IT教育迫切要改变的做法是什么?根据我个人的经验和同学们的反馈,下面是一些建议:
和实践结合。软件教育离不开实践,不要太强调闭卷考试,老师一定要让学生实践、实习。
做真实的项目和幻想的项目是有很大区别的。
自己从头写程序和维护正在使用中的代码是有很大区别的。
没有真实的需求,没有软件的增量开发,没有真实的团队合作,程序设计和软件工程中的大部分理论都沦为空谈。遗憾的是,很多学生就这样以空对空,也混毕业了。
和各种学科的结合。现在专业分得太细,一个专业清一色背景的学生在一起,和其他年级、其他专业的同学有交流么?没有!
希望计算机科学教育能把别的学科的知识联系起来,比如,和工业设计、用户体验设计、艺术设计、自动控制,甚至心理学、商学联系起来;
希望把计算机有趣的发展历史放进来,讲讲图灵,讲讲冯o诺依曼,讲讲各种语言的源头和流派分支,讲讲IT企业有趣的真实故事等等。培养学生对这个行业的兴趣、热情和敏感度。提倡互动,介绍同学上相关的论坛、网站,开拓视野。
如何教创新?在学校里听领导的报告,会听到很多次和"创新"相关的词汇。你会觉得这个学校的领导的确非常想创新。但是另一方面,我听到一些同学反映教材、教案、教学方法都是几年甚至十多年不变的老一套,和实际脱节得厉害。
怎么教创新?除了让学生打下坚实的专业基础之外,学校可以做的一件事就是--
允许学生试验,失败,再试验,再失败。
创新不是公式推导,不是一旦学好例题,就能模仿炮制的解题方法,要给同学们试验和失败的机会。有人问,学生失败了,上课怎么给分呢?我说,如果同学们能够认真总结经验教训。同样也可以得到比较好的分数。经验教训能帮助他们更好地创新。我的《软件工程》课程的评分标准大致是:
1.有创新的想法,并成功实现:优。
2.有创新的想法,失败了,能认真总结:优。
3.无创新的想法,最多只能得:良好。
当学校和老师鼓励同学们没有后顾之忧地去创新、去失败的时候,很多同学的动力、热情会大大增加,从"要我学"、"要我做"变成"我要学"、"我要做"。无论创新成败与否,同学们都会收获良多。
作为一个"业界人士",我讲了这么多意见和建议,其实很多老师、学校领导也早就意识到了这些和其他许多问题。提意见总是容易的,难的是尽自己的能力改变现实。这本书里的很多主人公并没有停留在提意见或埋怨,而是自己行动起来,改变现状。作为一个"客座讲师",我正在课程中实践我上面提到的想法,有学生喜欢,也有学生不爽--因为课不好混了。
书中的许多故事常常让我幻想--如果我们的教育系统能多帮助他们一下,也许会有更多的学生能少走弯路,成为IT业快乐的小小鸟,甚至大鹏鸟!
希望更多学生、老师在看到这本书之后,能一起动手,让梦想早日成为现实。
邹欣
研发经理 | 微软亚洲研究院技术创新中心
2009年8月于北京
============================================================
推荐序II
博文视点计划出版一本讲述IT人成长经历的书--《我是一只IT小小鸟》,邀请了20多名IT行业在职人员、研究生和本科生写一下自己的成长经历。一滴水中见世界,从这些作者的亲身经历和人生感悟中,可以看到中国IT业的进步,以及在饱受国人责骂中艰难前行的中国IT教育。
在此,我向中国数百万在校IT相关专业学子推荐此书。
我也算是一只"IT小小鸟"了。1993年我从广西大学本科毕业,机缘巧合下从1994年开始自学计算机,并跳槽到IT公司工作,于1999年考入北京理工大学计算机学院读研。期间四处打工,毕业后留校在计算机学院任教至今,十多年了,始终没有脱离IT这个圈子。因此,书中各位作者的成长经历引起我的很多共鸣。
我一直在关注和思索国内软件技术的应用推广及IT人才的培养问题。2003年,我在CSDN"程序人生"论坛发表了一篇长长的自传--《一个普通IT人的十年回顾》,全面回顾与总结了自己这段人生经历,集中表述我对这一问题的思考,引起了许多学生和IT行业在职人士的强烈共鸣和激烈反响。此文在网络上被四处转贴,甚至被转贴到海外的华人论坛,而我个人也收到近千封邮件。2006年下半年,因自己在计算机软件教学实践中受挫,于是在个人博客上发表《我被中国计算机教育的现实打败了》一文,出乎意料,这篇其实不过是发牢骚的文章竟也引发了一场激烈的论战,一场有关计算机学习与计算机教育方式的论战--"理论先行"还是"实践第一"。足见大家对这些问题的关注程度。
我曾经是一名"四处打工"的程序员,先后在十多家软件企业"露过面"、"干过活",毕业后又当了七年计算机专业的教师,接触了大量的本科生和研究生,在思索与实践的过程中,渐渐对一些问题有了更深入的认识,而我的一些观点,在本书所选取的这些"IT小小鸟"的成长经历中也得到了验证,我把其中一些要点"过滤"出来,希望能对本书读者,尤其是那些还在校学习的大学生们有所帮助。
1. 兴趣是第一原则。
如果你仔细阅读本书所有文章,一定会发现一个特点:几乎所有作者都对计算机技术或IT行业有兴趣。这种强烈的兴趣,是他们持续努力并最终成长为优秀IT人才的强大推动力。然而很不幸,对于刚进大学且对所学专业并不了解的学生,偏僵化和脱离实际的中国高等教育*,恰恰在"扼杀"学生对本专业兴趣的方面"效率极高"。
在此,我鼓励所有在校大学生,一定要尝试发现你的兴趣所在、特长所在,然后围绕这些来确定发展方向,不要盲目从众和跟风。
另一个在学生中很常见的问题是:"我不知道我的特长在哪里,我也不知道干哪个工作最有可能出成绩。"其实大学就是让你思索和解决这个问题的最佳场所之一,你可以放心大胆地进行各种尝试,在实践中逐渐了解自己。另外,尝试从另一个角度思考问题:"我不知道喜欢干什么工作,那我知不知道不喜欢干什么工作?",去掉你不喜欢的,是不是就接近了你所喜欢的?
读者不妨仔细分析一下,书中这些IT人最初是如何形成对IT的兴趣的,相信一定会有所启发。
2. 他山之石,可以攻玉,但不可照搬。
本书介绍了许多人的成长经历,对读者而言,的确是"他山之石,可以攻玉"。但另一方面,没有一个人的经历是可以复制的,因为环境不同,时代不同。更重要的是每个人都是独一无二的,而且世上万物时时刻刻都在变化当中。对于青年学生而言,不要看到书中某人做某件事有较大收获,然后你也想来个原样照搬。要仔细分析作者的个性、拥有的独特经历,再结合他当时所处的环境,弄明白他当时为何会做出某个决定。
写到这里,我不禁联想到中学语文课本中收录的名篇--《庖丁解牛》中庖丁所说的话:臣之所好者,道也;进乎技矣。
大道无术,其实成功的基本原则是相对稳定的,而走向成功的具体方法则因人因时因地而异。重读《庖丁解牛》,再看看书中各位作者的人生经历,是挺有意思的一件事。
3. 软件技术的学习方法。
前面谈到2006年我在CSDN引发的针对软件技术学习是"理论先行"还是"实践第一"的论战。其实大家只要看看书中诸位作者的成长经历,能找到几位是"理论先行"的?大多是"实践先行",然后在实战之后,再开始补上"理论"这一基础。
对于在校学生,我建议在本科低年级(大一或大二)就要开始了解一种主流的软件开发与运行平台,熟练掌握一种开发工具,这样你就具备了进行开发实践的前提。然后,用你所掌握的技能和工具去大量实践,在实践中真正地理解和掌握计算机科学相关理论,发现自己在知识和技能上的不足,然后有意识地加以弥补。更重要的,要在实践中找到一种"感觉"、一个"方向"。读者不妨分析书中各位作者在这点上是如何做的,相信会有启发。
近年来,软件技术在飞速发展,许多技术领域都已发展出一个庞大而复杂的体系,在技术背后,需要大量计算机科学理论作为根基和灵魂。在这种时代背景下,"如何高效地学习软件技术"成了一个需要严肃对待和认真思考的问题。
就软件技术而言,我所看到的是一张庞大的"知识之网",其结构类似于互联网中相互链接的网页,各种知识和技术之间都有直接或间接的联系。而任何一个人,穷其一生之力,恐怕也只能掌握这张"大网"中的一小块区域。
对个人而言,面对客观存在的"软件技术大网",大脑中要形成一个"小网"--一个活生生的、可动态扩充的"知识之网"。这个小网是大网的映射,但不是机械的映射,而是建立在个人能动性基础之上的动态的"知识之网"。能否形成这一知识之网,对学习软件技术至关重要。
这张"知识小网"上的"节点",就是你掌握的"已经建立了彼此联系"的具体知识。在学习新知识、培养新技能时,只要能找到新旧知识的结合点,就可以让新知识成为新节点,从而扩充你的"知识之网"。
软件学习的过程,就是你"织网"的过程。如果在学习过程中未能织成这一知识之网,你学到的就只是零散的、没多少用的知识,这种知识学再多意义也不大。
我建议读者仔细看一下书中作者是如何"编织"自己的"知识之网"的,这对读者构造有个人特色的知识之网是有帮助的。
4.名校效应。
书中作者大多出身"名门",有北大、清华、南大、华工等国内知名院校。一般而言,由于要挤进"名校"大门不易,能进入这里的人大多已经具有相当的潜力,加上名校一般都具有独特的学习和科研氛围,其中的老师和同学大都满怀理想,积极进取,在这种环境中学习,人就容易成才。
然而,中国优质的教学资源并不多,而且高度集中于少数几个大城市,大多数学生无缘进入名校,这是客观事实。
我的本科学业是在一所普通大学完成的,而研究生学业则在北理工这样一所重点大学完成。后来又接触了一些北京其他重点高校的老师和学生。的确,重点大学与普通高校在学习氛围和总体环境上
是有差异的,我也曾对此大为感慨,但我也要指出,尽管"名校效应"的确存在,但最终起决定作用的还是你自己!
身处"不入流"的普通高校,只有大专或中专学历、走自考之路或是非科班出身……这些外在的不利条件都不是决定性的。一个有志气的人,总能在环境的束缚中,通过默默积聚实力,最终突破环境的限制,登上一个新台阶。
也许你付出了很大努力,仍发现由于起点和机遇的不同,有的人远远地领先于你,而你看上去"永远"也无法追上他,达到他的高度。即使这样,也不要气馁,你只要尽力,也就无愧于心了。
我一直非常欣赏这样一段话:
人生如同打牌,能抓到一手好牌固然是运气好,但重要的是,你不能靠运气生活,而要琢磨怎样把手上这把看上去"不怎么样"的牌打好。
事实上,你可以从历史中找到无数例子,这些一开始并没有抓到好牌的人最终却取得很大的成就,做出了重大贡献。
很多时候,个人所处的生存和发展环境不能自主选择,由于环境的限制和其他因素的影响,也许别人可以当个架构设计师,而你只能当个"底层"的普通程序员,这没有关系,大家在人格上都是平等的,只不过能力有高低罢了。再普通的工作,如果能做到精益求精,也很了不起,也是一种成功,关键是你有没有这样一种思想:
即使我"落魄"到在街边摆摊卖豆浆,也要努力成为这条街上"最好"的"豆浆摊"!
最后,引用庄子《逍遥游》中那飞扬的文字作为本文结尾:
北冥有鱼,其名为鲲。鲲之大,不知其几千里也。化而为鸟,其名为鹏。鹏之背,不知其几千里也。怒而飞,其翼若垂天之云。
……
鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里,去以六月息者也。
希望书中这些"IT小小鸟",最终都能成长为"遨游于九天之上"的"鲲鹏"。
也希望所有的读者,都能从书中受益,迈出人生向上的步伐!
金旭亮
北京理工大学计算机学院
2009年8月于北京
=============================================================
一、蒋宇东 梦断计院,
我和我最后的倔强
握紧双手绝对不放
下一站是不是天堂
就算失望不能绝望
--五月天《倔强》
引子:我的感悟,我的忏悔
我曾就读的沈阳航空工业学院的计算机科班(05级),属于二本院校的一本专业。我的大部分同学都是高考重点大学的落榜生调剂而来,算是高考中的失败者吧。毕业后去了上海一家IT创业公司。
没有可以向人炫耀的面经,没有华丽的背景,只有一点点学习的感悟,和几分失败的忏悔,与大家分享。
上篇•梦断计院
大学生活马上就要结束了,不禁感叹时光飞逝,物是人非……
刚踏入大学校门的时候,踌躇满志,虽然那时甚至不知道C语言是什么东西,但是仍然对自己四年后的形象充满了无限的憧憬:拥有雄厚的基础知识、良好的学术能力、出众的技术才华,是未来的科学栋梁……
如今的现状却是:为了得到一个可以糊口的IT民工职位抓破头皮,在郁闷与苦恼中为获得一个工作机会而暗自庆幸,至于什么专心学术、什么科学栋梁,似乎距离自己越来越遥远。
直到此刻,我仍然不认为自己的大学生活是完全堕落的,我也不认为自己读的书是无用的,我更不认为自己没有学习计算机科学的资质,那么问题究竟出现在什么地方?我想这里有很多原因,大部分是自己的,但也绝对不能忽视环境对人的影响。
对环境的反思
1. 计院的第一大问题--学生普遍基础薄弱
在我东奔西走找工作的时候,才真正体会到自己原来喜欢炫耀的基础知识是多么薄弱,而它们又是那么重要。我曾经在面试时因为说不清进程间的通信机制而当场被无情BS,也因为对于自己能力的不自信而放弃一家很牛的公司的研发部提供的笔试机会。
先要说说我所在的计院的第一大问题--专心做学问的人太少了,学生普遍基础薄弱。
本科四年,在这里能看到的真正对计算机感兴趣,并且肯专心研究搞学术的学生真是凤毛麟角。计院的大环境是网游成风,"腐败"猖獗。没有几个人肯安下心来读书,即使那几个老老实实听课的"好学生"也只不过是为了一个高高的GPA,一个可以在家长同学面前显摆的奖学金证书。而真正希望学东西、做学问的人太少了。我找工作时,手里握着一摞奖学金证书,后来被证明绝对是废纸,任凭你怎么吹嘘自己的成绩,没有哪个公司会真的拿来仔细看上一眼。
回归正题,什么才是真正的基础扎实?我的理解是,不仅要牢牢掌握大学课本中关于计算机核心课程的理论知识,而且还要深入实践;对于该方向非常重要的技术思想、概念名词、技术要点都要有良好的把握,比如可以随手写出快速排序、哈希查找等经典的常用算法,熟记线程与进程的概念、它们的差别,并且能够解释清楚诸如僵尸进程之类的问题;会Linux的不仅仅是就会几条Shell命令,或者干脆就会装个系统;用C++的不仅仅要会语法(不知道这是不是绝大多数计算机专业毕业生对于C++的理解程度),起码要了解一些常用的标准库,知道什么是STL,了解些基本的OO思维方法;学过网络的最起码要用过Socket;了解数据库的不能仅仅就会写几个SQL语句、背两条范式等。
说到这里不禁有点激动,前几天在一个IT论坛上看到一个关于大学读书无用论的帖子,说读书无用的人恐怕这些基础知识掌握得也不怎么样,连基础的东西都没弄明白怎么好意思说自己读过书?没读过书怎么好意思说读书没用?!其实不是读书无用,是肯安心读书的人太少,而书读得足够多的人更少。
倘若没有这些基础,仅仅会用这个工具、那个框架,充其量也不过是个IT民工,今后的发展必定受到制约,选择只有三条:a.做一辈子IT民工;b.将大学时欠下来的债补上;c.改行。
这里我不想说太多,话归正题。如果要我重新去选择,我一定会在学习每一门课程的同时尽量找到相关的资料,扩展每一个话题。同时,将一些最常用的思想、技术、方法记录下来,并且苦练到可以熟练应用的地步,并且时常加以回顾。
真正基础雄厚的人应该是可以将常用的基础性知识熟记成诵的人,提到一个基本的名词或话题能够将其来龙去脉解释清楚的人。
2. 计院的第二大问题--学风不正,涣散成性
计院的学风不正,涣散成性,早已名声在外。我想一方面要怪罪于我们学生自己,对前途不负责任,将大好的宝贵时光都用在了网游、泡妞、喝酒等事情上;可另一方面,计院的领导及老师就真的没责任了吗?
如今的老师大都想着自己的小项目能赚多少钱,如今的领导多数考虑自己负责的这一块不要出问题而影响到头上的乌纱帽。"一切为了学生",表面看起来冠冕堂皇,实则是句空话。老师根本没时间或没水平备课,上课照本宣科念幻灯片,考试之前为了保证及格率不忘帮大家"划划范围"。
记得大学一年级的"计算机导论"课,一个老头足足念了一个学期的PPT,内容就是"C语言基础、"数字逻辑"、"离散数学"课程的前1/3……内容巨枯燥,而且朗读水平超级差劲。也难怪很多人从一开始就认为进入计院如同进入火坑。大学四年学下来不知道计算机专业的学完了究竟能做什么。
到了毕业时,领导开始担心就业率了,早就内外成患,以涣散、颓废为风的计算机学院又岂能在短时间里奋发起来?这个时候开始埋怨学生这个不是、那个不对,仿佛一切问题都是学生的,我想问问你们早干什么来的?之前有那么多时间不好好调教你的学生,为什么这个时候才想起来教育?
在这样的学习环境下,除了主动自学,多多上网搜集信息、泡图书馆,还能有什么选择呢?但话说回来我没完全做到,最终问题还出在自己:不够坚定,有时会随着大环境一起堕落,浪费了很多时间。
3. 计院第三大问题--实践环节薄弱,人才位置错放
看着自己简历中可怜的实践经验,面对人才市场上实践经验黄金般的价格,自己不禁暗自悔恨……
很多人都在用理论扎实来搪塞自己实践方面的低能,我想这个借口根本站不住脚。首先,计算机这个学科的性质就决定了没有实践,理论几乎没法理解得扎实透彻。就好比熟记骑自行车要领的人可能根本不会骑车一样。我们不排除有未来的图灵、Knuth一类的大牛,即使不写什么重要的代码,理论也是巨牛无比。但是对大多数学过数据结构与算法的人来说,能用C写个Dijkstra 最短路算法就算不错了,你要给他个什么城市公交线路选择问题,他保准晕菜,当场崩溃(这样的例子我见多了)。
其实我们的同学中真的有些非常出色,只不过是放错了位置,尤其是女生,我觉得大多数都不适合去编程。倘若不是在计院,可能他们已经凭借着自己其他方面出色的能力在他们适合的领域崭露头角了。我不只听到一个人抱怨自己不适合编程,当然一些人是纯粹为自己的涣散找借口--这些人估计换个环境也还是那样。
但是大一大二的时候,我们的老师、我们的领导又在干啥呢?一些必要的引导总是你们的职责吧,干嘛叫这些同学走过了大学四年才意识到自己不适合学计算机?
总之,种种因素所致,大多数同学四年没编过几行代码,课程设计不过草草了事(据说某些老师甚至推荐同学去校外找人代做毕设),所以毕业时,之前做过的东西根本不敢往简历里写,因为根本没啥技术含量,都是Copy的。
对自身的反思
1. 项目反思
当我向面试官夸夸其谈自己所谓有技术含量的项目经验时,不住地冒虚汗,甚至还被一个考官当场揭穿并遭到无情BS。现在想想,更加悔恨不已……
我也曾经意识到实践的问题,也曾经雄心勃勃地要写有技术含量的代码。大学里我自己写过两个自认为是比较有技术含量的项目。不过两个项目皆因打不完的补丁、层出不穷的新Bug、臃肿而杂乱的代码,导致自己对于继续开发与维护失去信心与兴趣,最终搁浅失败。
究其原因,主要是自己太浮躁。这个问题在应届毕业生人群中及IT行业里是普遍存在的。刚刚会编程就开始YY自己能写出多牛逼的程序,做多牛逼的软件。事实证明,任何牛逼的软件都不是一下子就那么牛逼的,必须要循序渐进地展开。当时,刚刚背熟了C++的语法,就萌生了要写一个牛逼系统证明自己的想法。其实这个想法没有错,错就错在我们没有进行必要的积累,而且缺乏对于系统模块逐步开发并测试的耐心。在网上下载了点别人的设计经验,自己就开始照猫画虎地写代码。其结果可想而知,调试了n久代码才能勉强地运行,而且极其不稳定。整个项目乱成一团,打一个补丁又出两个Bug那种。
这个时候其实应该吸取经验,对代码进行重写,对系统进行改进,甚至有必要重新设计。而我又开始浮躁了,觉得这个算不了什么,吸取教训,再写个更有技术含量的牛逼程序一定成功。于是竟然无厘头地放弃了那一堆研究了将近一个月的代码,开始了新的项目设计。这个项目的结果更加可笑,我最终甚至都没有完整运行整个程序,因为无论我怎么调试,程序到一半的时候都会莫名其妙地崩溃,而杂乱的设计与垃圾代码使得我想赶紧将这些破玩意儿放入回收站。这时我一方面感觉自己也没啥能力写软件,估计再写也就是九流货色,没啥发展;另一方面开始责怪学校,为什么没有一丁点儿编程的氛围,那样也不至于我孤军奋战。我还傻了吧唧地郁闷了好一阵子,之后做了一个我虽然不后悔,但是却觉得很幼稚的决定--加入考G大军,并专门学习一年的英语。
其实现在想想那时真是愚蠢得很,明知道做软件一次成功是不可能的,还偏偏犯这种错误。为什么呢?答案就是当时太急功近利了,以为自己多牛逼,写个程序不费事。但实际遇到困难的时候,又没有耐心与毅力去解决,甚至感觉之前的工作是在浪费时间。虽然现在想想可笑,但是此刻很多人(可能我也在内)还在犯着同样的错误。
总之,急功近利很容易导致莫名的失败感,并且会为自己的失败(其实这个不能叫失败)找各种借口,然后在借口的安慰下完全放纵自己。这一点也体现在了我考G的过程中。
2. 个性反思
当时项目上的挫败感使得我对于计算机学院完全失去了信心,眼看就是最最关键的大三了,这将决定我今后的出路,我该如何是好?
这个时候我是这样想的,如果考研,恐怕会从一个火坑跳到另外一个火坑。从而可能会与许多和我一样迷茫的同学一起继续两年"打酱油"的生活。因为种种幻想以及对自己不准确的定位,导致我想到了考G出国。于是花了1000多在新东方报名,成天夹着厚厚的"红宝书"去图书馆……现在来看,我不后悔当初的决定,因为我确实在这个过程中学到了很多知识,也认识了很多朋友。而且我觉得,如果当时因为害怕而没有去尝试,自己会在悔恨中度过前半生。但是我觉得当时的考G绝对是泡沫,它让我产生了种种幻觉,以为自己因为考G水平就高了不少。这个泡沫膨胀了半年多,最后以一个失败的分数为标志迅速地破灭,就好像金融危机一样。
其实,如果这个时候,我能意识到前面问题的严重性,最差也应该把握住得考G这个机会。然而,我又没有做到。回顾整个考G的过程,我在不断为自己找借口:
我埋怨背单词太苦,于是经常为自己开小差(游泳、看杂书、电影等);
我做题受到打击时,埋怨周围没有人跟我一起准备;
我还以考G为借口,糊弄自己的专业课,糊弄自己的课设,糊弄自己的前程!
而每当被天书般的GRE习题打击之后,总是自己傻了吧唧地郁闷,而没有用心去总结,去努力提升自己,因此浪费了不少时间。虽然,在此期间我从没有放纵过自己,每天都尽可能地坚持呆在图书馆或自习室里,但是对于本身英语基础就很薄弱的我来说,面对这样大的挑战,如此糟糕的状态又怎么能成功呢?
最后的结果可想而知,我用了一年的时间专门学习英语,虽然英文水平有了一些进步,但是与巨额的开销,以及自己辛苦的付出绝对不成比例。现在我的GRE单词也忘得差不多了,不知道这个曾经的美丽留学梦会不会随着我的科学梦一起从此破灭呢……
下篇•为梦前行
又是五月,去年的这个时候我还捧着厚厚的红宝书,乘坐熟悉的217路公交车赶去新东方学GRE;前年的这个时候,我忙碌于ACM-ICPC和数学建模竞赛……
今年五月,我坐在实验室中,筹划着自己的毕业设计,追寻着自己的梦想与未来……
大一:问自己--这个专业到底要学什么
记得上大学前的那个假期,看过一个我们学校学生拍的DV,名叫《完美动物》,其中还算是比较真实地反映了现在大学生的学习与生活状况。看着片中主人公毕业前声嘶力竭的忏悔,我暗暗告诉自己,决不能荒废掉宝贵的大学时光。
之前一直有志于从事核物理与工程的研究,不料,高考却使我阴错阳差来到了计算机学院。之前,我对计算机没什么了解,更不知道C语言究竟是哪一国的语言……不过,我的内心却强烈希望自己能学有所成,成为一个领域的牛人。
大一,我花了一年的时间去探询计算机科学与技术专业到底要学什么,我对这些是否有兴趣,将来要从事什么工作。听人家说计算机专业的学生要首先掌握一门编程语言,于是我自己跑到书店,随便挑了一本很厚的C++教材,开始啃了起来。就这样,C++成为了我的入门编程语言--没想到四年后的今天,我还要靠着它混饭吃。
我大量翻看各种杂志与人物访谈,希望能够在其中找到我的未来。大一的时光很快就过去了,这期间,我努力培养自己对计算机的兴趣,努力去寻找自己未来的方向。
"计算机专业到底要学什么",这个问题经过大一一年的探索渐渐地清晰起来。我从网络及图书馆里学到了很多的知识,看到了一个新的天地,我也深深地为这个世界着迷。此时,我发现学校里的课程教育和我对计算机科学与技术专业的理解有很大的差别。课堂上多数老师都在重复着幻灯片里的文字,一部分希望上进的同学耐心地接受着这种方式的"科普"教育,考试之前花费大把的时间对老师划的"范围"里的知识进行机械地记忆,之后考出一个令人瞠目结舌的高分(信不信由你,我们班有平均分95以上的);另一部分同学则将自己的大好时光寄托于网络游戏,或是花天酒地终日穿梭于声色场所……
这段时间我觉得自己是那么的孤独,我试图融入周围学习比较认真的同学当中,我希望他们和我一起去探索那个未知的天地。但是,我发现没有人可以与我一起去探讨计算机问题,也没有人和我一起去做程序。我不断问自己,为什么这种教育方式得到了这么多老师以及身边这么多同学的认可,难道是我错了?杂志上、访谈中那些名人的学习经历难道仅仅是天才的专利?是不是要成为高手一开始都要去背概念、去考高分,去经历这个"乏味的"阶段,至于动手编程要等把这些都做好了以后再练……
直到大二上学期结束,我终于确定,学校的教育并不合理,多数老师讲的是"垃圾",照本宣科的很有可能是他们自己都没学明白的东西。而计算机科学与技术也不是仅仅学学概念就可以成为高手的,况且按照学校的这种方式学下去,似乎概念都学不好,充其量不过是个记忆高手罢了。
这里插一句,事实也证明了我的这种说法。我的考试成绩虽然不是非常突出,却也还算过得去,每个学期基本上都能拿到院里的二等或三等奖学金。但是在我后来求职的时候,这些靠背概念就能拿到的奖学金证书并没有起到什么作用。以我的面试经历来看,我简历当中最打动面试官的地方恰恰是我利用课余时间及逃课所写的程序,还有利用背考试题的时间所读的课外书。这里请大一大二的学弟学妹们好好考虑一下:时间有限的情况下,在高高的GPA和实际编程能力的训练之间我们应该如何权衡。
大二~大三:为了心中的理想拼搏--准备编程竞赛
在新东方,我发现自己是井底之蛙
大二的寒假我没有回家,在沈阳新东方报了个TOEFL班,初衷并不是想出国,而是要利用假期恶补一下英语。但是到了新东方我发现到这里并不仅仅是学习英语,我接触到了很多新的思想,认识了很多有理想的同学,"留学"在这里更多的是理想的代名词。我被这种氛围深深地吸引了,我开始意识到自己之前好像一只坐在井底的青蛙,外面却是更加广阔的世界。这时我拼命学习,不仅仅是英语,还有编程。因为学校要到大三才开设数据结构课程,而我知道要编写好的程序必须熟练掌握这门课。于是我弄来了清华大学严蔚敏的《数据结构(C语言版)》教材,先是去努力理解里面的概念与理论,然后再将练习册中的习题逐个地编程解决。这时我还知道了有一个叫做ACM-ICPC的编程竞赛,有很多大学生都参加,为了练习,我经常到浙大的在线评判系统上去答题。总之,这个假期我没有休息,努力去学习英语和编程。
开学之后,我开始"心安理得"地逃课,对于一些听了让人"坏脑子"的课程我基本不听,甚至不去,而且心里不再有从前逃课时的"负罪感"了。这里要插一句,请大家不要误解为大学里没有好老师,没有值得听的课。其实还是有一些比较负责的老师,他们的课程丰富有趣,讲解得透彻易懂,而且包含着很多经验之谈。举个例子,我们大三时开设的"操作系统"课程就非常不错,尽管当时我在备战GRE,但是整个学期我没有落过一节课。
刻苦练习,准备参赛
我把大部分的时间都用来练习编程、学习算法,因为我们学校第一次有资格去参加区域性的ACM竞赛。我发现仅仅是那本数据结构书并不能满足ACM的要求,我就到MIT的OpenCourseWare去学他们的算法导论,正好还可以顺便练练听力。ACM的题目要求有较强的数学建模能力及Coding能力,有些题目难得让人根本找不到思路,还有一些看似简单的经典算法题目其中却暗含着大量的陷阱。
我每天坚持至少8个小时的算法理论学习及编程练习,多则长达14个小时。这段时间可以说是我编程能力提高最快的时光。我学到了很多的知识,其中最大的收获就是对于一种陌生的算法或形式化描述,我能很快地理解,并用程序去模拟它的流程。其实大多数看似非常复杂的算法都是由这些最基本的算法思想演化而来的,扎实的算法理论基础对于今后的相关课程学习是非常有帮助的。对于现在程序员中流行的"算法无用论",因为我还没有接触到正规的企业开发,所以暂时不予评论,但是我相信:要想成为优秀的程序员,对于基本算法有深入与精确的理解应该是一项必需的基本技能。
然而,虽然我进行了近三个月的刻苦努力,但是比赛的结果却仍以失败告终。原因有很多,有外部的,但更多的是自己的,比起更多的程序高手,我只不过是个普通的Coder,资质一般,接触编程的时间不如他们长,训练的强度也不如他们大,用"脚后跟"想想就知道结果了吧。其实当时我将更多的希望放在了明年的比赛上,不过后来因为备考GRE而放弃了。
参加数学建模竞赛
参加数学建模竞赛是我大学生活当中比较有意义的经历,也是在这里,我找到了和我有共同爱好的同学,我们可以进行交流,对问题进行争论甚至争吵,我体会到了与别人合作的快乐。数学建模竞赛实际上就是一个迷你的科研过程。别人提出一个问题,这个问题可能出自于不同的领域,而且大都目前没有得到很好的解决。参赛者用三天的时间搜集与查阅资料,针对问题提出合理的数学模型进行解释,通过实验得出数据进行验证,最后写成论文。我很喜欢这种完全不同于课堂与考试的研究方式,我也非常喜欢用学过的数学知识去解决一些实际的问题。
从大二开始,我参加了两次全国比赛,一次美国的比赛。得了一个省级二等奖,一个国际二等奖。结果一般,但我觉得过程更重要(决定比赛结果的往往有很多原因)。这个过程中我学会了很多,包括一些有用的数学知识,分析问题的方法,数学建模的一些技巧;我试着去学习如何快速地掌握一个陌生的理论并将它运用在建模中,如何与队友配合,如何发挥团队每个成员的最大优势等。
依然清晰地记得2008年的那个寒假,我们留在学校参加美国建模竞赛的情景。我的一个队友是我的同班同学,他的文笔非常好,英文水平也不错,主要负责参赛论文的写作;另一个是数学系的学生,当时还是我们学校建模协会的主席,他的数学功力不错,主要是进行模型的分析及公式的推导;我则主要负责问题分析与计算机求解等方面的工作。我们的配合非常默契,而且也都渴望能够取得好的成绩。我们队是所有组里最刻苦的,通常是早上6点起床去实验室,直到晚上10点才回去。记得当时做了不少练习题,阅读并分析了近几年来MCM的Outstanding论文,而且逐渐形成了我们自己的配合与交流方式及解题风格。经过了将近三个星期的集训,我们满怀信心与激情地开始准备比赛。但事事难料,竞赛的前一天半夜,我竟然高烧39度,队友冒着严寒(那时的沈阳格外冷),半夜陪我跑到附近的医院打点滴,照顾我休息,一直陪我到第二天清晨才回去。这让我非常感动,同时也深深感到了有好的团队与氛围是多么重要。之后的竞赛,我发挥一般,不过通过我们齐心协力的配合,拼了四天三夜,总算按时完成了那篇一万多词的英文论文。虽然最终的结果没有达到我们为学校创造历史的期望,但遗憾却无法掩盖这难忘的美好经历。我忘不了那段奋斗的日子,忘不了大家一起通宵讨论数学模型,忘不了生病时队友的关怀,忘不了单老师的耐心指导,忘不了朱老师每次总是在最后多发一盒饭给我,更忘不了大家为了同一目标一起拼搏的时光!
大三~大四:考G与求职
大三下学期,我决定加入考G大军。当初决定考G的原因有很多,不过简单来说就是对现状的失望与逃避,以及对自己梦想的憧憬与向往,我并没有对自身的条件及现实情况做足够的评估,这从某种程度上已经决定了失败的结果。这个决定是草率的,但是我却从来没有后悔过,因为在整个备考的过程中我付出了很大的努力,虽然努力得还不够;也收获了很多,我甚至因为这段时间的英文积累在后来的求职过程中得到了一个去外企工作的机会。
虽然有足够的心理准备,但是此次北京之行仍给了我很大的触动。本来以为虽然外界形势不太乐观,拥有"中国硅谷"的北京会受到一些影响,机会仍会很多,但我在北京转了将近一周的时间,发现在规模最大的招聘会上也仅仅有很少的几家公司,而且竞争异常激烈。直到现在我还清晰地记得招聘会上拥挤的人群,诸多求职者焦急的神情……
在求职的过程中,我曾经很多次遭遇因为学校不是重点大学而被HR当场拒收简历的尴尬,我也经受了在网上投了几十份简历而杳无音信的焦虑,以及在某公司的面试现场被人毫不留情鄙视的无奈。总之,找工作的过程中经历了不少挫折,同时也带给我很多的思考。
凭借着还算流畅的英文口语,我得到了去北京一家软件外企做技术支持的机会。为时一年的GT备考并没有得到我想要的结果,这个机会也算是对于那一阶段努力的一个结果与回报吧。另外,因为自己课余做的两个不是很成功但却有一点点技术含量的小项目,我还得到了去上海一家做游戏的创业公司做C++开发的机会。
技术支持主要是与客户进行沟通,帮助他们解决产品使用过程中的一些技术性问题。这个职位需要比较强的交际能力,以及英文口语能力(公司产品主要面对的是欧美客户),但是对于技术方面可能会涉及得比较少,而且几乎不需要去写什么代码。
那个C++开发职位则需要一些实际的编码能力,工作中更多的时间将会是与机器打交道。出于对自己实际情况的考虑,我选择了去上海的那家创业公司。这主要是因为我更喜欢从事技术开发方面的工作,并且在与人交往方面不是很擅长。这家创业公司里的员工基本都是80后,感觉大家工作都很有激情,而且工作环境也比较开放*,这也正是我想要的工作。这里要说一下,很多人都认为技术支持或销售不如程序开发工作"好",我对此观点向来不是很认同。在我看来,每个岗位提供的机会都是一样的,只不过是工作环境的不同而已。而每个人的特点与爱好不同,所以并不是所有的计算机专业学生都要去做开发。特别是一些交际能力很强而对技术不是非常感兴趣的同学,可能技术支持或销售等方面的职位更加适合他们。选择了适合自己的环境,不仅会工作得很愉快,而且可能很快就会在这个岗位上崭露头角,我想这要比做一个每天闷闷不乐的"代码民工"好得多吧。
结语:我想对师弟师妹们说
一定要弄清楚上大学首要的任务。明白自己是来干什么的,走出这里的时候自己要收获什么,自己希望成为什么样的人。每个人都必须要有明确的目标,除非你想过四年打酱油的生活。这一点我做到了,虽然做得不好,走了弯路,但是我没有白白荒废四年的时间。
要有扎实的学科基础。不要将自己局限在得一个高分的狭小范围内,仅仅看到眼前的荣誉无疑是目光短浅的表现。要注意学习的扩展性,要努力去理解并掌握本专业常用的的核心思想与技术,达到熟记于胸的程度。
发现自己的优势,选择适合自己的出路。不要仅仅看中程序员的高薪水,做最适合自己的方向的工作才是最最重要的。
学过理论要注重实践。可以自己做一些力所能及的小东西,有意从事计算机方向的同学需要熟练掌握一门程序设计语言、一个开发工具、一个系统平台和一种编程思想。自己动手做一些有一定技术含量的项目。
最好是能够利用好假期的时间,出去实习。实习经历将是毕业时"卖身"的有力筹码。
切忌浮躁、急功近利。假如以你的实力可以通过五年的时间成为一个领域的高手,如果自己期望缩短到三年的时间或更短,最终很可能要用八年、十年的时间,甚至可能永远都做不到。
目标要坚定。对于自己已经决定的选择,要执著地追求,直到在其中获得了你满意的成果。
做事情不为自己找借口,借口==失败。
以前听别人说"要有自己的理想,并坚持自己的理想",总感觉说得很"空",但是现在我却从内心深处认同这种说法。刚上大学的时候,我也曾彷徨过很长时间,我不知道自己究竟要干什么,看不清何处才是自己的未来。后来,我看了很多广为流传的成功人士的故事及他们的心得体会,对我影响最大的两个人是李开复和苹果的Steve Jobs。
开复老师的那本《做最好的自己》我不知道究竟读过了多少遍,而且每一次读都有更深的体会与强烈的认同。其实对于外部环境的困惑与不满也使得我苦闷、彷徨甚至想放弃,但读过开复老师的书,我懂得了对于自己无法改变的事物,要有接受它的胸怀;而对于自己可以改变的事物,要不遗余力地去改变它。每到我感觉苦闷无助的时候,我总是努力地提醒自己:无论外界环境如何,我所能做的就是尽自己的力量,利用周围有利的环境,去追寻理想。要做到这一点的确很难,所以要时常提醒自己、督促自己。
Steve Jobs那句著名的"你是要继续卖糖水,还是要改变世界"曾无数次激发我追求理想的激情与决心。一次偶然的机会,在YouTube上,我看到了一段Steve Jobs在Stanford的演讲视频。从此,每当缺乏Follow My Heart的勇气时,我都会去听这段演讲(可能已经听过上百遍了),有时甚至会听得热泪盈眶。与大家分享这段话:
Your time is limited, so don't waste it living in someone else's life. Don't be trapped by dogma which is living with the results of other people's thinking. Don't let the noise of others' opinions drown out your own inner voice. And the most important, have the courage to your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.
愿和每一个有梦想的同学一道,Follow Our Heart,实现我们的梦想!
网友跟帖
Tiny fool︱Apr 1, 2009 @ 10:37 am
我的看法是,核心问题在于眼界。计算机专业的课程都学好了(我的意思是不要限于考试的标准),其实是很不错的。我看到过很多例子,很多人很努力,但是水平原地打转,甚至慢慢地就落后于他的朋友们。原因在于,就他所学,他已经不知道自己该继续往什么方向努力了。
在学校的学生的不幸在于,我们曾经是一个非常仰视大学的国家,我们的父母老师,天天告诉我们考上大学一切就OK了。然而现在社会发展了,大学门槛也低了,我们到处都可以看到大学生了,用人单位的门槛也高了。自学的朋友也一样,你学会了贝叶斯,开始流行hmm,你学会了hmm,开始流行rcf。但是,我们每个人都不是*,我们天生就有每天都上升的空间,只是我们的眼界太窄,看不到路在何方而已。
小马xioama︱Apr 1, 2009 @10:01 am
作为一个毕业15年的过来人,我也来说几句,其实进了大学,一切都是靠自学。我一直在说的一句话就是"在大学里能学习到的唯一的东西就是学习"。因为毕业后,根本不可能靠在大学里课堂上学习到的东西混饭吃,新毕业的人在用人单位看来,等于一张白纸,所不同的就是这张纸的吸墨能力有多强。
221.233.24.*︱Apr 6, 2009 @2:31 pm
说些什么呢?似乎想说的话有太多太多,却又无从说起!
我没过四级,不是因为我不努力,我努力过了。我也挂过很多课,不是因为我不好学,是因为我觉得好多课程根本没有用。曾经也无数次的彷徨迷茫过,但是我从没有放弃过。四年我唯一没变的是一颗上进心,一份责任心,一颗感恩的心,一份信心。
记住不要放弃自己!
221.233.24.*︱Apr 7, 2009 @02:27 am
文章中说的大学中的种种弊病,我觉得是几乎每一个大学每一个学院和每一个大学生都有可能遇到的。不单单在我们计算机。我觉得你这篇文章蛮有哲理的,但更多的是对现实的不满,但发泄不满没有任何意义。因为现实就是现实。
与其为这些烦恼,厌烦,不如考虑一下如何在现实的情况下通过自己最大的努力去取得成功会好些。
我觉得梦归根到底是梦,回顾和反省应该更多地关心自己,因为环境不是我们说了算的,我们说得算的只有自己。
Jeffrey Zhao︱Apr 1, 2009@20:44 am
大风气真的那么重要吗?的确大风气很不好,我也承认,但是我绝对相信你能找出10个志同道合的人,再退一步,认真治学的老师和同学出来,这样的小团体还不够吗? 现在互联网那么发达,到处都能交流,资源之充沛只会让人接受不完,我觉得没有理由怪什么精神不精神,资源不资源。
当看不清世界发展,那么可以看清过去的发展啊,过去有哪些是不变的,很少变的,一般以后改变的可能性也不大。把时间投资在这些方面,一般总是有很大好处的--尤其是周围的人都不怎么投资的时候。至于方向:交流、交流、交流……
fang xu︱Apr 2, 2009@10:44 am
我很反感这种一味拿主观能动性来说事的。事情哪有这么极端。牛人和庸人都是少数,他们可以很少受环境影响,但是在正态分布中心附近的大多数是很容易被塑造的。大学生虽然不是小孩子,但依然缺乏磨练不够成熟。
虽然不管怎样,学生的能力分布也会是个正态分布,但好的向导会使平均值提高。基因自身可以发生遗传突变,但是环境会对其进行筛选或是诱发突变。人也是一样。
Kaiix︱Apr 3, 2009@11:10 am
我不知道同在这种情况的朋友怎样想,对这几年反思,有抱怨,有自责。抱怨环境,没有人能够在我稍偏出方向时给我一声提醒;抱怨没有可以一同讨论、研究技术的同伴, 哪怕一个也好;抱怨老师好像透明人,这几年没有几个老师让我记住名字;抱怨自己,恍恍惚惚,似乎学了很多,其实学到很少。
总是告诉自己除了自己的问题其他的一切都是借口。环境真的那么重要吗,难道我真的不能够享受这份孤独?我认为除非有非常好的自制力和强大的目标驱动,想做到这点真的很难,非常同意能够享受思维的孤独是更为贵重的品质。
今年也大四了,回顾过往,遗憾很多。但可喜的是在学校最后一年时自己的思想成熟很多,"朝闻道,夕可死",整理心情,继续向前走。
二、刘 帅 在失望中寻找希望
曾经多少次跌倒在路上
曾经多少次折断过翅膀
如今我已不再感到彷徨
我想超越这平凡的生活
--汪峰《怒放的生命》
引子:失望中有希望么
我是为数不多的本科毕业工作三年后再读研究生的人。上本科以来的十年,却大部分是在茫然中度过的。我迷迷糊糊,跌跌撞撞。痛苦中有奋斗,挣扎中有快乐。
高中的理想如此简单:上清华,考北大
我的高中绝对是在盲目自负中浓墨重彩地走过的,因为自己的勤奋和对数理化的热爱,班级第一名的头衔时刻挂在自己身上,结果除了清华北大之外,对任何学校都不怎么关心,再加上学校对于学生除了考出好成绩之外什么都不关心的教学方式,使得自己对于大学、专业、前途等一切的一切都处于超级茫然状态,仿佛自己的一生只是为了去清华北大读书,仅此而已。多么可笑的理想与人生目标,但也正是这样的目标促使自己在高中阶段不断努力、永不放弃。然而,我一个初中同学的成绩一直排在我前面,我没有任何办法超越他,因此,高考估完分数后,知道清华已经没有希望,于是就不知道自己的下一个目标是哪里了。
那时,对其他学校认知的匮乏让自己无助起来,最后的抉择,是希望选择一个好的专业,于是比较热门的计算机科学与技术和通信工程专业成了自己的首选。计算机这种奇妙的东西,相信没有哪个学理工科的男孩子不热爱吧,于是我就选择了计算机作为自己的专业。根据专业来选择学校,按道理说也算是一种策略吧,但我了解的学校资源实在太少,再加上自己当时是个不愿意与任何人交流的人,于是最终,听从了亲戚的安排,去了西安电子科技大学,一所电子类的相当专而小的学校。
我的母校--西安电子科技大学,被国外教授礼节性地夸赞为"中国的MIT",但显然,我们都清楚,这种赞誉实在是过了。现在想想,本科时候的自己是多么的不合群,多么的2。当时自己的价值观念是读书为要,一切让道,完全套用自己的高中思维来应对大学生活,最终到处碰壁。
清晰记得几个经典段子
军训时,宿舍其他同学闲暇时听的歌曲以流行、摇滚为主,当时,著名的爱华(后来被SONY收购)和SONY的超薄Walkman还是一种奢侈品。罗大佑、唐朝乐队等的音乐在宿舍里面回荡,而我当时出校一次,带回了一盘《歌唱祖国》的磁带,回来后遭到了几乎所有人的唏嘘,此时自己才发现,原来我和别人的差异是如此的大。但当初哪里会认为是自己的问题啊,一如既往地认为所有人都很2,坚持着自己的风格,一如既往地跟大家不太合。
还清晰地记得,当时军训结束,几乎所有人都脱掉军装穿上带有自己个性的衣服去开学院的一次全体会议,唯有我一个人穿着军装进去,结果被所有人视为异类--而且我不仅穿着军装进去,还挂着肩上的领花横杠,一切的一切都印证着一个农村来的孩子,接受着最最红色的正统教育,他的入校阶段的生活会是多么的尴尬!
本科四年 定调:迷迷糊糊、庸庸碌碌地拿着奖学金
我是科班--却没学懂计算机
我是传统意义上的计算机科班出身,学过数据结构、编译原理、操作系统、汇编语言、计算机原理、计算机系统结构、离散数学、概率论、计算机网络、数据库、单片机、算法设计、数理统计、高级语言程序设计、面向对象程序设计,从DOS的Tubro Pascal时代学起,一直学到VC6。然而,我却并没有学懂计算机。
本科时,自己的考试成绩一直排在前面,但几乎所有的时间和精力都花在了犯迷糊、做作业和游戏上。本科阶段是我们精力最最充沛、时间最最富裕、最最容易跟其他人拉开距离的阶段,如何处理这段生活,将会造成最后的千差万别,遗憾的是,当时却没有人告诉我这一点。我像高中阶段一样,只学习那一点点可怜的上课讲的知识,几乎不看教材、不怎么看课外资料,课后的作业基本是独立完成,却从来不是主动地思考、从各个可能的角度出发寻找到解决问题的方法,而是沿着老师讲过的固定的模式,或者寻找类似的解答方法,然后稍微变换,从而完成解答。我总是认真听老师讲课,每次上课从来不预习,从来不会计划这学期我要干什么、这堂课我要干什么,我机械地听着每一节课,机械地在迷糊中重复着作业、考试,我几乎每一个学期都会拿到奖学金,可那又怎么样呢?
拿数据结构这门课程为例,严蔚敏老师的经典教材相信几乎学过计算机的人都是耳熟能详的,这本书上的算法和数据结构短小精悍。我们的授课老师,却只讲最简单的概念和不深的理论描述,给我的感觉就是,"数据结构"几乎是门和"离散数学"差不多的数学课--他用最肤浅的知识,"成功地"告诉了我们"数据结构"是门几乎不用动手写程序的课程,只用上课听听就好了。于是乎,一门需要动手实践、将会极大地提高我们编程素养和思维能力的课程,就被我们这样迷迷糊糊上完了。
震撼:在清华听朱仲涛老师的"数据结构"课
2005年准备研究生考试的时候,我旁听了朱仲涛老师的"数据结构"课,当时的感觉只能用两个字来形容:震撼。在他的课上,我对数据结构有了全新的认识,对计算机也有了一点与以往不同的了解。
他的讲课风格非常独特,他只用1/5的时间简述一下要讲的内容,剩下的时间都是当场写程序。著名的约瑟夫环、Dijkstra算法、Prime算法、快速排序、堆排序、锦标赛排序、Tarjin强连通分量、Convex Hull等深的浅的,教材上有的没有的,全部在课堂上从0开始实现:每遇到一个算法,一边写程序,一边讲解,不懂就将程序的运行结构拿出来分析,并不时地穿插离散数学、概率论、内存管理、C语言、汇编语言等知识,几乎将我们学到的东西非常恰到好处地拿出来,让我们从心里面觉得原来所有的知识是连贯的,我们之前的积累都是有用的,并且富有成就感。
我清晰地记得他在工业工程系课堂上讲"栈"的时候,用计算几何中的Convex Hull(计算几何中求凸包的算法,由美国ACM大牛Graham发明,该算法通过nlogn复杂度求出平面中一堆点的最外层包围矩形边界)来显示栈的使用。这个算法在A4纸上写说明最少也要两页,加上里面具体的技术,个人觉得可以给3个小时的时间来考查一个训练有素的程序员是否合格。而朱老师在1.5小时的时间里,一边讲,一边写,用最优雅的方式,完整地实现了这个算法,写完程序,一个编译错误也没有,成功运行,随机的点,优雅的边界,当时全班鼓掌两分钟。他说:"我很自信,即使是最*的程序员,也不能将我的代码优化多少了。"
他的课让我明白:"数据结构",以及一切计算的课程里面,凡是自己不理解的东西,自己说不清道不明的东西,其实有很多人是理解的。我的老师没有给我必要的关键性指导,但,不可否认有一些同学,他们总是先知先觉,他们总是会问"为什么这门课程要这么上",他们总是会思考自己是不是走在正确的路上,于是他们大量丰富自己的实践,从而也优雅地完成了本科学业。但遗憾的是,我和大部分我的同学们,就这样,因为缺乏必要的指导,迷迷糊糊、庸庸碌碌地过完了本科。
现在回想过去,才发现自己当时多么无知、多么机械。其实,不懂的时候,不管任何时候,你都可以去问老师、同学,从而节省大量的时间和精力。我们必须在年轻的时候有意地培养自己独立思考的能力,经常想一想,我要的是什么、为什么要做这件事、做这件事有什么好方法、这样做有什么好处和坏处、如何改进等,也要与人交流、沟通,讲出自己的想法,请别人指正。我们需要培养的是自己的思考方式,而不是简单地获取知识。
计算机专业需要大量时间,需要付出大量精力,也需要极大的耐心。但大部分像我一样的80后都做不到。而做到的,现在几乎没有例外地都找到了很好的工作。
公司不重视技术--与我的兴趣冲突
本科毕业后我就参加了工作,一干就是三年。
我工作的地方是个典型的国有企业转制后的股份制公司,计算机公司,以系统集成和网络为主,软件是副业。我的项目经理和部门经理对我很好,现在我依然感谢他们。只是,我实在无法接受这样的工作状况:待遇一般,沟通匮乏,无视积累,没有传承,频繁的软件部门高层更换预示着软件的步履维艰。也许,我们把软件业务全部外包会更好,但是那么多为公司辛勤工作的员工将何去何从呢?
工作阶段,我的角色还真不少,有点需求分析,有点系统设计,大量的软件开发,大量的系统实施,一点点知识探索,一点点售前支持。既是典型的多面手,又是行行肤浅的门外汉。很少有人能从技术上指导我,不是因为我很牛,只是因为我们实在不是个以技术见长的公司,而我自己,却十分喜欢技术,喜欢和计算机打交道,喜欢盯着计算机的输出而后体会其无穷的美感。这是我喜欢做的事,但工作却不允许我这么做。
考研•读研 定调:开始改变思维习惯,化机械记忆为主动思考
若只有机械思维--上了清华又如何
工作的第三年,我准备考研了。我的如意算盘是,当2006年8月我的工作合同到期的时候,能自然而顺利地过渡到研究生阶段。
当时我设想了4种结果:
上清华计算机系的研究生,将来去Microsoft或IBM工作;
调剂到清华软件学院,依然可以去好的外企工作;
调剂到其他院校;
考研失败,就当什么都没发生过,继续工作,或者从头再来。
以上的每一个结局,我都能承受,不算破釜沉舟,但绝对全力以赴。在每一个下班的晚上,在每一个周末的分分秒秒,我蹬着自行车冲到清华,吃饭、看书,回来睡觉,利用工作的间隙继续看书。就这样,没有任何杂念,没有任何包袱,风风雨雨地跑着,简简单单地过着。带着对未来的期盼,和对现有生活的改变,坚持着。也曾经偶尔想过放弃,但更多的是受理想的驱使。
考研的结果,我进了清华大学软件学院。但仔细回想考研的过程,我却依然没有摆脱思维的局限--以机械记忆为主的学习方式。也许是我觉得时间太宝贵,也许是真的连思考的时间都没有了,我每看到一个题目,总是会先看答案,让答案来指引我的思路,而不是用自己的脑子想问题。
这种学习方式在短期内的确会取得很大的成果,但却贻害无穷。长此以往,会使人丧失判断力、理解力和交流能力,只留下可怜的记忆力--这样的人难有大成。这样的学习方式会使我们的思考方式沦为简单地重复和机械地回忆,胆子变小,创新力几乎丧失--对于计算机这种快速变化和要求很高的学科来说,显然没有什么价值。
读研之后我终于正视了自己思维的机械与缺乏活力的问题。我有意识地努力尝试去改变。看书的时候,我每看一会儿就想想作者在说什么,以训练自己的概括能力;看看作者表述得是否合理,以训练自己的怀疑能力;勤于反思,以训练自己提出问题的能力。但习惯是长久养成的,显然改变也是需要一段时间的。
实习之门 定调:快想,快说,快干
IBM实习:和以前的工作不一样呢
IBMCRL的环境不错,普通员工的办公场所也算宽敞:电脑两台,都是高配置。空调很凉快,*宽松,但人们的工作非常紧凑、忙碌,压力大,追求高效。
作为一个曾有过工作经验的实习生,在这里体会到了完全不一样的感觉。
工作效率高、速度快。CRL的整体工作节奏不太像IBM这种巨人的风格。Mentor是个急性子的女博士,脑子非常聪明,解决问题的能力很强。同样的新问题,她能够很大胆地想出新办法。CRL要求员工讲话简短,注重效率,跟人沟通开门见山,且从来不喜欢重复。我在这里体会到,很多时候,如果不能在头三句话里就把一个问题说清楚,后面就可能永远没有开口的机会了。
对新问题的反应快。这里的正式员工论智商,确实赶上了清华排名10%~30%的人才了。没办法,只能以勤补拙了。
工作量大。这里一天的工作量,相当于在以前单位工作一个星期。像战争一样的生活,让我每次下班后见墙就想靠,见床就想睡。不过感觉也非常充实。
没有心计,人比较单纯。有什么说什么,不用耍心眼,不用藏着掖着。可以把辛苦的差事,努力做得简单而快乐。
配套设施不错。运动场所还行,咖啡好喝。
求职之路 定调:再次痛感基本功的重要
"完美时空"面试的不完美经历
--崩溃之余也反思
有了本科时找工作的教训,现在,我一心就想找个重视技术、团队氛围很好、周围人水平都比较高的地方,于是投简历基本上都以外企和好的技术公司为主。找工作到现在,我一共面试了17个公司,拒掉5家,被拒11家,最终签下Amazon。挂掉的原因无非是这几个:英语,思维习惯,扎实的算法,兴趣点。其中挂掉的比较典型的公司之一是"完美时空"--我认真地准备了差不多两个星期,可以算是全力以赴,却一无所获,下面讲的就是我面试"完美时空"的不完美经历。
工作场所在一个角落里,问了半天才找到地方,上去一看,傻眼了,完全不像想象的那样:大大的工作场所,有休息的地方,装饰豪华,反而像一个稍微大点的机房,大家紧张地工作着,梦想、实现、进度等在这个局促的环境下显得尤为珍贵。可以肯定地讲,以前同学说的招人不怎么做事的想法是多么的幼稚,哪个创业阶段的公司会用1万多的月薪供着一个不干活的主儿?经过3层楼的寻找,终于在7楼找到一间没有被占用的会议室,HR让我等下,自己去叫程序部的两位Manager下来,我当时以为技术面试应该会限于我做过的几个题目,而那几个题目我已经翻来覆去地想过了。但很遗憾,针对题目问的问题很少,而且我基本上不知所措。
一个Manager先问我当时为什么把题目全部做了,然后让我挑一个,说说做得怎么样?我就把自己实际考虑的、怎么样做会更完美等一系列想法都讲出来,接着他问,题目是这么要求的吗?你从题目能看出来要求什么?我就说要将客户端和服务器端放在一起,要用多线程,界面不能死,要处理异常等,最好启用log记录。然后他问,哪些是题目要求的?你认为最重要的是什么,等等?我就又讲了用TCP和发送接收文本信息等。貌似他还是不满意,他一直强调我将一个简单的问题考虑复杂了,貌似我一直没有抓住重点,很郁闷。
之后问const的问题,问我是不是想过,Java是不是精通,我说是,又被问到,Java如何实现const,Java的const和C++一样吗?怎么实现的?这个问题又让我崩溃了。
再然后,开始随便问了,打击更大。先问,是否玩过游戏,都玩过哪些,自然答玩过。谈到网游,突然问有没有想过升级算法怎么设计,我思考的时候,直接被打断,"考虑过没有",答"考虑过"。"怎么实现?",我沿用暴雪的魔兽的算法基本上讲了一下,也不知道答得咋样。此后因为我星际玩得最多,问如何保证种族的平衡性,这个我又傻了,居然说了根据实际运作的过程来反馈,以及提了一点攻击属性和兵种等。这个问题又答得很差,其实还是平时没有怎么去想,脑子之前没有转过,现场去转总会犯傻的。下来想想,应该是保证各个种族的兵种基本上都既有对应兵种,又有相克兵种,每一个兵种攻击都设计它的强项和弱项,每一种战术都有相克的战术,如果考虑到这些,应该就能保证基本的平衡了。不知道这样回答对不对,至少比当场回答得好。
又问,如果让你设计口袋西游,你怎么设计?这个问题估计我又扯淡了,没答到点子上,全凭自己的想象来。再后面就是项目经验的回顾了,这次比以往每次都来得深入。同样被问到,lucence的文件索引怎么实现的?唉,知其然不知其所以然,这是我一贯的问题,NB的公司总是问到我的软肋。答曰,没看过。又问,如果不用lucence,你怎么办?有没有替代方案,你觉得整个项目你最引人瞩目的地方是什么,你最愿意展示的是什么?我曾经讲过无数遍这个项目,不同的公司关注点很不一样,像这样被抓住问的还是第一次。之后谈到在IBM做的项目,谈到了一点测试,直接被问到,你觉得自动化测试框架怎么设计?如果这样设计性能不好怎么办?怎么优化?我对测试本来就不怎么懂,这样面下来又崩溃了。然后问平时我的项目大概有多少,怎么做的测试,答曰较少。用到了Junit,被问到Junit哪些地方不好等,所有关于测试的这些东西基本全挂。
终于不问问题了,估计也不需要再问了,我有多少水分他们应该知道了,他们理想的人应该不是我。他们希望招聘到精通游戏设计,精通并且思考过很多游戏及相关系统底层,并且对测试比较熟悉的人,很遗憾我不是。本以为我会面数据安全部,结果程序部C++部门的两个人下来把我面傻了……游戏设计,游戏中的设计,以及一些底层的问题、测试框架和相关东西,基本上每一个问题都答不好,HR问,你自己给自己打几分,我说80,他忽悠了我一下,我又说70~80,然后边上的Manager诡异地一笑,我意识到不对,看来真的是很惨,可能不及格……曾经寄予了太多的希望,曾经抱着无数的幻想,现在看来,我不属于完美。这次挂掉,对我来说意义很大。其实这是必然的。
好的外企或好的技术公司希望招聘到的学生是做事超级投入,特别乐意思考,充满活力,并且具备一定的行业知识的。因此,在面试准备的时候,应该充分了解自己应聘的公司,多思考,多关注架构等背后的东西,才能应付比较深层次的技术面试。
另外,谦虚、和善、愿意向别人学习、擅长理性思维,是技术类工作面试中的加分项。
结语:总能看见希望的亮光
跌跌撞撞地前行中,还是能悟出一些道理,与大家分享。
1.珍惜每一个生命阶段。每一个人的生活都是精彩的,没有必要厚此薄彼,也没有必要给自己太多的打击。每个人独立地拥有时间,也许我很笨,也许我很穷,所以我需要花费比别人更多的宝贵时间,仅此而已,我要的是--享受过程。
2.做自己的主人。不要辜负上帝给我们的聪慧的大脑,用它来独立地想问题,用自己的眼睛来看世界,用自己的心灵来感受,用自己的金口来提问。不要害怕,不要退缩。
3.加强实践与执行力。不要欠生活,不要欠工作。出来混,总是要还的,你不会的知识,你懒于想通的东西,总是会在一个必要的时候提醒你、惩罚你。将没有搞懂的、希望做到的东西,写在纸上、贴在面前,认真实践,当你做到的越来越多的时候,你就会越来越自信,你的层次会提高的。相信我,人与人之间的差距很大,原因在于自我控制力有差距
三、辜新星 时刻调整方向:找到人生的蓝海
我想知道流星的美丽 是否值得去寻求
于是我心狂奔 羽化成黑夜的彩虹
蜕变成月光的清风 幸福了我很久
-- 郑钧《流星》
引子:骑单车的故事
小时候看过一个关于单车的故事:爸爸教儿子骑单车,儿子总也学不会。爸爸看出了问题所在,于是在再一次示范后让儿子看身后弯弯曲曲的车轮印,并语重心长地说:我儿,虽然你看见别人骑车时车头很直,但那也是因为他在时刻调整方向,才能顺利前进啊!
故事里的儿子有没有学会骑车我不得而知,但这个故事一直都能让我在回顾自己的成长历程时想起,显然是个好故事。
本科四年 定调:大一有点瞎忙,而后自己做主
大一我是社团狂
2002 年,我考入北京大学计算机系。能进入梦寐以求的大学,学习我当时觉得最酷的专业,自然非常高兴。进入北大后,我就一心追逐起自己梦想中的大学生活:加入了校团委社团文体部,跟着一帮虽然只比我高一两届但说话做事明显成熟很多的师兄师姐们,忙着认识各个学院的朋友,忙着办各种文艺晚会,忙着管理北大超过100个学生社团;拿了把吉他就拉人组成表演团体,参加了北大校内最火的新生文艺汇演,在北大百周年讲堂的舞台上过了一把主唱瘾;成为了学院团校的积极分子,每期不落地参加所有的活动;还担任了团支部的职务。我非常清楚地记得,大一期间,我每周光各种例会就有三个半。然而,大一也是学习压力最大的时期,不仅各种基础课程数量多、难度大,而且几乎所有的新生都要面临转变学习方式以适应大学学习的问题。所以,我当时的生活特别紧张,任何时候的感受都是一个字:忙。
很快,瞎忙的结果就白纸黑字地送到我的面前,我的"高等数学"期中考试只考了不到80分。一纸惊醒梦中人,我突然意识到,我曾经梦想的*自在的大学生活,也不是那么无拘无束,至少还有分数这样的硬指标在衡量着我的前进或退步,提醒我不要迷失方向。在初高中,我从老师、父母那里听到了太多次一个美丽的"传说":现在努力学习吧,过了高考,一切就都解脱了,大学将是你*发展的天堂。现在看来,事实要让很多将这"传说"当作最后一根稻草的高中生失望了。
大学的确提供了非常丰富的能力培养机会和广阔的个人发展空间,但归根结底,学习和进步才是大学的主题,荒废其中任何一个都不能让大学生活过得充实而完整。
好学长赐我财富
既然已经觉醒,那就改变吧。我开始把大量精力投入到课程学习上:像高中一样进行课前预习,增加了课后自习的时间,每天都在三教或图书馆待到关门。但是,我仍然感觉时间不够用,学习的时候总感觉各种事情纷至沓来、压迫我的大脑,巴不得能并行作业同时完成若干件任务。我很困惑,跟一个同样做学生会工作的师兄聊天诉苦,谈我面临的问题。他很干脆地给了一个建议:做好短期时间规划。具体而言,要把每天把要做的事情分成A、B、C、D四类:
A--紧迫且重要;B--重要不紧迫;C--紧迫不重要;D--不重要不紧迫。
然后按顺序为每件事情安排一段专属的处理时间。关键的是,一定要在专属时间内专心致志地做好当前的事情,不受其他任务的干扰,这样才能提高效率。
这是我从学长那儿获得的第一笔真正意义上的财富,立刻从善如流,受益匪浅。大学期间,我每年都能获得奖学金,并且因为良好的学生工作表现,获得了北京市三好学生、北京大学优秀学生*等荣誉。
理解专业,痛并快乐着
最早接触计算机是在小学毕业的暑假,被家人送到市科委的计算机培训班。说是计算机培训,其实就是一帮小孩在386 的电脑上学五笔,用当时算是先进的Windows 3.1操作系统。即便如此,计算机也让我大开眼界。当时我最喜欢的当属最流行的指法练习软件TT和Windows 自带的扫雷游戏,看着不断掉下的单词块被击碎或是鼠标轻轻一点就消去一大片方格,心里总会大呼过瘾。等到初中毕业有了自己的奔腾Ⅱ电脑,就不满足于玩玩游戏了,开始各种折腾。那时候最喜欢做的是优化系统性能,各种电脑相关报刊上的系统优化方法是我的最爱,从调整虚拟内存、优化注册表到更新驱动、刷BIOS,危险的、不危险的全都要亲自动手尝试一下,仿佛不调整系统就慢得难以忍受一样。那时候我对计算机专业的认识基本上可以归纳为三条:用Visual Studio写程序,学习Windows系统(尤其是注册表),DIY攒机。甚至在大一回答一份关于课程设置的调查问卷时,我到现在还清楚地记得我在建议一栏里写上了:开设Photoshop课程--真土啊!囧
转变的过程漫长而艰难。当大一下学期开始增强对编程的要求时,我缺乏编程基础的弱点就明显暴露出来。加上身边还有不少熟悉编程语言甚至有过计算机竞赛经验的同学,我跟他们的差距就越发明显:常常自己调试半天找不出Bug所在,而有经验的同学一眼就能告诉我答案。有差距,就要追。怎么追--
买书,编程的,大部头,很多。从编程语言到编程风格,再到数据结构和算法,几乎每本书我都是从头到尾抱着仔细读完的。
坚持在读书的时候把代码一行行亲手敲出来并编译通过。这种学习方法很需要毅力,毕竟当你看着书上的代码觉得很容易懂的时候往往懒于动手,但也只有动手才能发现各种问题,比如用C++写class总是忘了最后的分号,缩进不一致导致少写一边大括号,等等。
提前做知识储备。在学习编程技术的时候,我还提前了解了一些编译器和计算机体系结构的知识,对于我理解程序的运行和性能的瓶颈有了很大帮助。
贵人指路,事半功倍。CSDN、Joel On Software等网站上的程序员,他们在博客上无私分享的心得和在论坛提供的及时帮助不仅让我获得了知识,也给了我极大的鼓励,让我能坚持艰苦的学习。
我和侯捷老师的忘年交
尤其让我难忘并受益颇深的是*的侯捷老师。当我大二开始学习Windows编程时,无意中访问到了侯老师的网站,在这里,我非常惊异地发现,侯老师公布了他的畅销书《深入浅出MFC(第二版)》的PDF全文。当时我知道国外有些作者如Bruce Eckel,会把自己的书的电子版无偿地提供给所有需要的人下载,但是在国内,尤其这样一本如此出名的畅销书,我还是第一次看到作者将全文贡献出来。我立即下载了这本书,开始随着侯老师的笔触进入Windows编程的世界,并大胆地给侯老师发了一封电子邮件表示感谢。没想到侯老师很快给了我回信,向我询问大陆尤其是北大的计算机教育方式,并且鼓励我踏踏实实地打好基础 ,而不要被层出不穷的新技术遮蔽了视线。我很难想象这样一位翻译、写作的名家在工作繁忙之中能抽空回信,而且态度谦和平易,心里受到了极大的鼓舞。后来,我跟侯老师聊了我的困惑,包括如何学习计算机,以及如何取舍出国和保研,侯老师则侃侃而谈,以自己的亲身经历给出了建议。再后来,侯老师与我在北京见了几次面,为计算机系的同学开了一次讲座,还饶有兴趣地"旁听"了一节"数据结构"课程,我也协助侯老师翻译了《C++ Primer》等书籍。不管是什么形式的交流,侯老师总像个稍微年长的朋友,风趣平和,并且十分乐意把自己的感悟和经验与人分享,这种宝贵的态度正是我以侯老师为目标需要继续学习的地方。
生活需要忘年交
袁 岳
我把年龄相差12~15岁以上并成为朋友的人称为忘年交,基本上指的是与不是同一时代的人交往做朋友。我把与年长于己者交往称为上行忘年交,与年幼于己者交往称为下行忘年交。
忘年交的价值我称之为"纵向经验突破"。我们一般人多与同年横向交流经验(通常那是最为人乐于或者自然接受的一种模式),而与上辈和下辈之间缺乏自然、平等、放松、随意的交流。这是代际的自然差别效应,同时也导致了代际分隔与冲突。忘年交则在心理上接受与自己有显著年龄差异者为平等的交往对象,从而改变了双方间经验、信息、知识的差距,增大了交流的信息量并提高了双方对彼此意见的认可度,因而显著地减少了矛盾。除此之外,忘年交还增加了对交往对象产生代际文化影响的可能性,冲淡了代沟色彩。
忘年交提出了一个跨代学习模式的问题。忘年交的数量与水平,在一定程度上的确是个人纵向学习能力的一个重要标志,也是个人亲和性与表现魅力的重要指标。
求职之路 定调:结合兴趣,目标明确,准备充分,一举中的
再来谈谈我的求职过程。从第一次面试,到选定工作Offer,前后只有短短四个多月的时间。但是为了得到自己喜欢的工作,我从确立兴趣方向、进行各种准备到应对面试、最后选择职业发展道路,付出的时间和精力比这要多出许多。
确立求职目标:IT业的产品经理和管理咨询业的分析师
整个求职过程中,我一共只投了十家公司:谷歌(产品经理)、微软(项目经理)和百度(工程师),六家管理咨询公司及中国移动(产品设计岗)。在年后才拿到最终Offer的同学中,这算是非常少了,主要原因是我在求职季节到来之前就立下了明确的求职目标,即IT业的产品经理和管理咨询业的分析师,并且针对这个目标进行了充分准备。
为求职目标做好各种准备
针对不同的职位,我分别做了不同的准备。
1. 针对技术职位
1) 越早准备越好。我在面试的半年前就开始做知识回顾和储备。
2) 复习基础知识,主要包括:算法、数据结构、操作系统、体系结构等。此外,对于互联网公司离不开的网络以及分布式系统的相关知识,我也会特别关注。
3) 复习的方法。
a. 回顾基本理论;
b. 动手写代码,尤其是基本的数据结构和相关算法,一定要动手写出来并编译通过。原因是,一来面试常常会面试到基本数据结构的细节,或者从基本数据结构出发,要求做出改进以满足一些特殊条件;二来即使如删除链表头节点这样简单得不能再简单的操作,如果不熟悉,在实现上也容易发生错误。
推荐阅读:《编程之美--微软技术面试心得》。如果能把这本书里一些题目的来龙去脉搞清楚,面试数据结构和算法方面的题目时会有更强的底气。
c. 要关心实际系统。《程序员》杂志和CSDN网站经常会有实际的大型网站架构分析文章,关注这样的实际系统能够加深对分布式大型系统的理解,对于面试很有帮助。听说博文视点会组织出版系列大型网站架构分析方面的图书,值得关注。
2. 针对产品经理职位
相对技术类"靠硬本事吃饭"的职位,产品经理的评估指标更加软性一些,相对也不容易特别有针对性地准备。我做的准备主要包括:了解IT产品经理的工作,增强对产品和行业的了解,锻炼逻辑思维能力,提升英语听力与口语水平。
去微软实习,切身了解IT产品经理的工作,确定自己的选择。
当我开始考虑自己适合做程序员、产品经理,还是项目经理时,我对PM的了解还仅限于师兄们口口相传的一些"轶事"。为此我申请了微软Office 部门的项目经理实习,亲身体验了PM的工作。与工程师的工作相比,PM的工作需要面对更多的不确定性和模糊性,如何将模糊而不确定的事情制定成明确的目标,这是PM工作中最具有挑战性和最有趣的地方。我的工作是协助提高一个SDK产品的可用性,首先需要决定如何度量和测定可用性。为了解决这个问题,我查阅了大量的资料,并和微软的多位专家进行了多次沟通和交流,最后成功地完成了任务。在这个过程中,我曾因为完全没有头绪而压抑苦恼,但找到合适的解决方案给我带来的快乐和成就感更大,让我在工程师和 PM职位之间做出了明确的选择。
自己给自己一次次出题模拟面试,增强对产品和行业的了解。
申请产品经理的职位自然要对产品和行业非常了解,为此我很早就开始广泛地关注和尝试新的互联网产品。我关心的产品不仅包括谷歌、雅虎等互联网巨头的大部分服务,还从TechCrunch、Wired等网站上了解到硅谷最新的产品和服务。当然,了解只是第一步,之后我会花更多的精力来思考很多问题,比如:这个新产品解决了什么问题,这个问题以前是否存在,是对所有人都存在还是只针对部分用户,如何发现这个问题,还有什么问题没有解决,等等。这样的思考过程有时候很艰难,但是每一次思考都是对自己的磨练,也相当于一次模拟面试。
通过准备咨询业的案例面试训练逻辑思维,尤其是结构化思维。
逻辑思维的训练是在准备咨询业的案例面试中获得的副产品。咨询行业是以观察和推理来得出问题解决方案的行业,对逻辑严密性要求很高,多了解一些相关的知识和方法,能够帮助我们训练思维和表达。例如,咨询行业常用的框架,如4C、4P等,有助于我们形成结构化的思维模式;而根据其更重要的分析原则,如MECE(不重复,不遗漏),则能让我们脱离框架的机械化思路,根据实际问题进行有条不紊、逻辑严密的分析和论述。
坚持长期训练,坚持有针对性的训练,闯过英语关。
对于外企中需要与人大量沟通的职位,英语太重要了。没有顺畅的理解和较为流利的表达,很难想象我能顺利通过七轮以英语为母语的考官的面试。英语的训练是个长期的过程,但如果找一个水平较高的语伴坚持完全用英语交流,加上有针对性的练习(比如,用英语回答我上面提到的关于产品的问题),在较短时间内达到英语面试要求的水平是很有可能的。
简历不是写出来的,是改出来的
好的简历:形式上美观大方,清晰明了;内容上充实有料,主次分明,针对性强。
1. 如何解决形式问题
使用合适的模板。模板只有一份,但是,针对不同的职位及个人经历,应该对模板进行适当地修改,使之适合目标职位的具体要求。比如:
1) 针对IT职位,可以将"工作经验"换成"实习经历"或"项目经历"。
2) 将"个人信息"换成"职业技能",填写自己熟悉的计算机语言和获得的认证,等等。
3) 要申请外企经管类的职位,"课外活动"或"交流活动"则是必不可少的要点。
另外,每个人的情况不同,要根据自己的经历和特点来修改简历模板。例如,学术上成果比较多的,可以单独加一项"专利论文",而获奖学金奖励多的,也可以单列出来以突出。
2. 如何解决内容问题
简历更重要的是内容。
1) 内容要能体现求职者的能力和经历,满足目标职位的需要。这就要求我们仔细地挖掘相关的经历,并加以适当的总结和提升,最后用书面化的语言表达出来。
2) 内容应该能反映出作者训练有素的逻辑思维。注意:一段经历需要有三到四个要点来支持,重要的就在于如何选择几个要点的内容,以及如何对它们进行排序。一般而言,可以选择如下两种策略:
a. 第一种,首先简明扼要地说明是一段什么经历,然后用一到两个要点来说明自己(注意!不是项目组)具体完成了哪些工作,最后一个要点说明工作效果或自己的收获。
b. 第二种,对于事情多且杂的经历,应该选取最具有代表性的事务,按照其重要性递减的次序分别描述出来。
即使针对同一类型的职位,我的简历前后经过不下数十次修改,小到把中文逗号改为英文逗号,大到增删一段个人经历,目的只是为了使得简历更加符合雇主的需要,顺利通过求职第一关。
我的面试故事
第一回 面试百度︱研发工程师
9月底,我的第一次面试是应聘百度Web新产品部门的工程师。
当天共面试了两轮,一周后加一轮经理面之后就顺利拿到了Offer。百度的技术面试一向难度不小,但幸运的是,一面的面试官虽然年轻,却很有面试经验。他从几个简单的问题开始入手,逐渐加大问题难度,给了我充分的时间来给大脑热身。
【剧透与面经】
该部门的面试题特点:跟实际系统结合得很紧,分布式系统的题目很多。由于热身充分,等到真正的难题出现的时候,我已经能够放松紧张的神经,全力思考问题的各种解决方案,评估方案的优劣,并试图优化方案,比较顺利地解决了大部分问题--这也告诉我们,遇上一个有经验的面试官是多么的重要。成功的面试是考官和被面试者双方共同的成功!面试官也很满意,咨询我的意见后,直接叫来另一位工程师进行第二次面试。
值得一提的是最后的经理面,提的第一个问题竟然是:"你在前面面试中有哪题没回答上来,回去后是否思考了,答案是怎样?"这题看似没有问新的问题,但它直接考察了求职者是否具有积极学习和孜孜求解的态度,如果抱着考完拉倒的心态,估计很难让这位经理满意。
技术面试中很难保证不碰到难题,在不能立即回答出最优答案的时候,需要使用一些面试技巧来应对。我的经验是分四步走,即理解题目、原始算法、优化算法、复杂度/ 性能分析。首先要确认问题的细节,通过跟面试官的沟通来彻底理解题目要求和限制条件等。然后,在最短的时间内提出自己的原始算法,并进行计算复杂度分析,如果是系统设计,则进行系统性能以及优缺点分析。一般来说,原始算法很容易想到,但几乎不是考官需要考察的最优解。因此,应该利用理解题目和描述原始算法的时间,脑子里积极开动脑筋,通过联想类似的系统或问题的解决思路,快速形成优化算法的基本思路。在提出优化算法之后,还应进行复杂度和性能评估。
第二回 微软︱项目经理
11月下旬,我参加了微软MBDC部门Office组的项目经理面试。由于在微软做过项目经理实习生,因此我熟悉公司对PM的要求,因此面试得比较顺利,一个下午连续接受四位项目经理的面试,大约耗时五小时。
【剧透与面经】
面试主要围绕着产品设计和项目管理展开,考察应聘者是否具备开阔的思路、对产品开发流程是否理解及对产品进度是否能够掌控。例如,有一位面试官问到了如何对待产品Bug的问题。这个问题考察你是否理解Bug解决的代价、可能带来的风险,以及在不同的产品开发阶段应对Bug的不同方式。如果简单地回答解决Bug,那说明对产品开发的经验和理解太过欠缺,也说明思考问题不够全面,不适合这个职位。就我看来,这些要求,恰恰体现了微软作为全世界软件(狭义的软件,区别于互联网等)业老大所最擅长和最看重的特质:稳定压倒一切。
第三回 谷歌︱助理产品经理
从去年10月份到今年1月份的四个月期间,我参加了谷歌助理产品经理的职位申请。产品经理是谷歌一个非常特殊的角色,一个产品除了开发和测试之外的事情,基本都由产品经理主导。其中最重要也是最令人激动的是产品功能设计,也就是说,你对产品功能的任何合理的想法,都可以在产品经理这个平台上得到实现,最终被全球数以亿计的网民使用,改变他们的生活!这样的影响力是吸引我的最主要原因。另外,足够大的学习平台、世界水准的开发团队和优良的工作环境与待遇,也使我心向往之。
【剧透与面经】
助理产品经理是面向工作经验两年以下的产品经理申请者的一个为期两年的培训生计划,工作内容与产品经理基本一样。也由于产品经理的重要性,谷歌这个职位的招聘流程非常之长,先后面试过我的人一共超过10人次,面试官涵盖了从普通产品经理到负责搜索产品与用户体验的全球副总裁,所以,需要得到自上而下各个层级的同事的认可,才能拿到这个工作机会。
在面试过程中,面试官既考查了产品具体特性、设计能力及对技术的了解,也看重创造性、个性,以及对产品和行业的理解。既有比较细节的产品设计问题,又有一些与产品设计、与互联网、与软件甚至与IT业都完全无关的问题,但这些开放性问题却能考察求职者的个性、逻辑思维与表达、创新性,以及对互联网领域的理解。
兴趣是我全身心工作的基础
对不少人来说,第一份工作可能就决定了以后的职业发展道路和生活方式。因此,选择目标职位和Offer其实比面试更为重要。
对比工程师和PM实习经历,我发现了自己的如下特点:
喜欢做较高层的思考胜于具体实现,相对于很多技术天才关心"怎么做"并从中获得极大满足,带给我更多快乐是"做什么"的问题;
对IT新产品、新特性有着莫大的兴趣;
常常换位思考,试图从管理层、开发者和用户等不同角度来看待一个产品;
在技术工程师中具有沟通优势,在管理人员中具有技术优势。
这样,我发现了自己的兴趣和"比较优势"--也就是我的蓝海,同时也就明确了自己的求职目标。这些结论若非通过亲身体验,是很难从别人口中得到的。另外,不同公司的PM职位性质和内容都不尽相同,因此我会通过搜索引擎详细地了解我关心的公司对PM的要求,并从中选择自己最适合的职位。
选择Offer的时候,在管理咨询师和产品经理之间,我考虑的因素主要包括以下(按重要性降序):
个人兴趣;
学习发展机会;
平台及其影响力;
生活方式和待遇。
第一重要的是兴趣,对我来说,兴趣是我全身心工作的基础,也是成功的必要条件。
我很看重薪水和生活方式,但我没有把它放在第二重要的位置上,因为我更看重的是五年后、十年后的薪水,而不是起薪。有一位师兄跟我说过,对于事业起步的年轻人而言,决定未来薪水的,就是你能在这份工作中学到什么,以及拥有这份工作后你能积累什么作为以后的资本。我非常认同这样的见解。因此,我把学习和发展的机会放在了仅次于个人兴趣的位置上。
企业是个人发展的最主要平台。平台的好坏不仅由其大小决定,也在于个人是否适合平台的整体文化和氛围。即使在同一行业中,不同公司的文化差异也是很大的。谷歌相对宽松的氛围和鼓励创新的文化正是我所追求的,我相信这样的文化能够有助于我发挥潜能。
结语:骑单车快乐向前
回顾自己大学本科和研究生的七年,不同的阶段有着不同的目标。不管是学习基础、钻研技术还是找工作,当自己的方向与目标存在偏差,或者向着目标前进的速度不理想时,我总会想方设法地拷问自身,从朋友身上获得经验,对自己做出调整,然后避开弯路,更加接近自己的目标。工作之后是一个新的起点,有着新的目标,我希望自己能够继续适应新的环境,也希望所有看到这个故事的朋友都能在学习、生活中不断地校正自己的方向,骑上单车快乐地向前。
四、唐雅薇 再难也要向前爬
等待阳光静静看着它的脸
重重的壳挂着轻轻的仰望
让风吹干流过的泪和汗
总有一天我要属于我的天
--周杰伦《蜗牛》
引子:我是普通女生
首先要说明两点:我是女生,我不是牛人。引用一个朋友的签名档:"用了20多年,生活只告诉了我一件事情:我只是一个智商正常、耐力一般、身体凑合、相貌平平的最一般的人。"
本科四年 定调:把握自己,向往外面的世界
我本科来自中国地质大学(武汉),学习的是地理信息系统专业。算是勉强能和计算机够得着一点边儿吧。
前传:一直都是乖乖女
其实我打小就不太擅长学习理科,在我念高中的时候,我的语文,地理、历史学得特别好,而数学、物理、化学总是让我觉得很头大。我当时觉得,就这么一直把文科学下去是一件多么理所当然的事情啊。眨眼到了文理科分班,按照我的兴趣,我非常希望选择文科作为我的起点,但是家里的亲戚们听说了要分文理科,就轮番打电话给我,对我进行了一番规劝,言语各不相同,但总体思想就是:"学理科我会后悔三年,学文科我将后悔一辈子"。我是一个典型的乖乖女,虽然心里不愿意,但我想,长辈们走过的路比我走过的桥还多,听他们的话总归是没错的,所以最终选择了理科。分班后第一次班级报到,几个要好的姐妹看见我惊讶极了,对我说:"唐雅薇,你怎么来理科班了?我们都以为你选的是文科呢!你的文科学得那么好!"面对她们,我也只是笑笑,什么都没说。
接受家里的安排也不是第一次了,又有什么好说的呢?那个时候的我,是一个不太有主见的人。就这样,我带着强烈的抗拒而又迷茫的心理开始了我的理科生涯。三年后,我勉强考上了大学,再一次面临了专业的选择。本科的专业也是我父母选的,理由是:"打听过了,这个专业好。"听着父母的话,我也就是跟着点点头。至于更具体的,比如:"什么是地理信息系统?"、"地理占多大比例,信息系统又占多少比例?"、"这个专业好在哪里?"我一概不知,至于和IT的关系,更是一点概念没有了。这个专业对我唯一的一个意义就是:我又听说了一个没听过的名词,而且,它将成为我的职业起步。
初入大学:努力追赶,我只比你们慢三年
高考的失败把我一棒子打醒了,我觉得自己不应该再像高中那样浑浑噩噩下去,既然已经走到了理科的阵营,就没有回头路了,至少在短时间内是没有了。难道一直这样抗拒下去吗?我想,即使是理科的内容,也应该能学得更好吧,而且,这已经不是高中了,现在的专业是我将来的饭碗啊!于是我下定决心开始好好学习。在同学们轰轰烈烈地投入到美好的大学生活的时候,我则在教室里恶补着各类基础知识。经过一年的恶补,我终于跟上了大学班上同学的脚步,同时也终于明白了我这个专业到底是干什么的,以及它和计算机的关系。
或许大家会问,你这不是相当于是科班出身嘛。坦率地说,我本科学习的专业课程是相当杂的,制图、计算机、软件、GPS、RS,甚至是测量,各类和GIS沾边的专业课都要学。所以这个专业真正和计算机相关的内容只占计算机系课程的很少一部分,不精,也不深。像软件工程、体系结构、编译原理、算法,这些就更接触不到了。
虽然学习的内容很杂,但是我还是对这个专业持有一定的兴趣,并且,我不希望自己再次成为班级的尾巴,所以一直非常认真地在学习,说出来可能大家不会相信,我大学没有逃过一节课,作业都是自己做。而这一切最原始的动机是:我深知自己基础太差,其他同学已经获取的知识,我没有,其他同学可以自学的知识,我不能。
大二的时候,我参加了许多社团活动,认识了很多牛人,他们会经常在我面前畅谈自己的理想和抱负,以及对未来生活的种种期待。听着他们高谈阔论,看着他们自信的眼神,我意识到,自己的世界实在是太窄了。就在那一年,我给自己定下了一个目标:不管用什么方式,不管付出多少努力,我一定要走出去看一看外面的世界,我要和他们一样,活得畅快而精彩。
考研•读研 定调:起初迷茫,但思考之门已开,行动更加迅速
放弃保研:我要自己做主
大四上学期,我获得了一个保送本校的名额。父母和亲戚知道后开心极了,纷纷打电话来向我祝贺。而我却怎么也开心不起来。我已经不是高中的我了,在大学的四年,我亲眼目睹别人活得多么精彩,反观自己,觉得很不甘心。我是高校子弟,从小到大都在这个学校,一旦保研,接下来很可能是在本校读博,然后留校、教书,就此在这个学校待一辈子。诚然,成为一名大学老师,在很多人眼里是一个相当好的归属,家人也这么认为。可是每每想起我将在这里窝一辈子的时候,我的心里别提多难受了。
我不想过这样的生活!我要做出自己的选择!经过一番慎重思考,我告诉家人我决定放弃保研,自己考。他们听到后惊讶极了,于是家里又上演了我高中文理分班那年的电话攻守战场景。只是这一次我的态度十分坚决。妈妈很担心,但我告诉她:"失败,也是我的选择,如果失败了,我就去工作。我真的不想再待在这个院子里了。"
我的志愿是武汉大学的一个重点实验室,武汉大学是名校,我想,在名校生活,我就是睡着觉也一定可以进步。尽管我努力复习,但是那一年我所填报的招录单位名额骤然减少了很多,分数线陡然提高,我果然如我妈所言,失败了。
考研失利,调剂不放弃:去名校学习,睡觉也能进步
考研失败后,我听说北京大学软件与微电子学院在招收调剂生,条件是只发单证(只有学位证,没有毕业证)。思考了很久,我决定去试试看。当家里听说只发一个证的时候,又是一阵"腥风血雨"。因为在此之前,我获得了北京另一个学校(不是特别有名)的调剂名额,双证齐全,学费低廉,还有补助。家里觉得,作为一个女孩子,还是各种证件齐全一些比较好,等到需要的时候才不会手忙脚乱。可是当时的我却不这么认为。我觉得,双证齐全是很重要,但是为了一个研究生证去一个我不喜欢的地方待三年,这样的代价是不是太大了?我不要为了一个证而去念书。而且,我一直觉得,在名校生活,我就是睡着觉也一定可以进步。和那么多的优秀人才一同学习,这是多么吸引我的事情!而且我还可以转双嘛!要是成功了,不就是两证齐全了吗?
带着赌一把的心情,我来到了软院。开始了一个崭新的旅程。
刚来这里我就面临了很现实的问题:专业背景不符。我调剂过来的专业是软件工程,主修软件开发。不是我想要放弃原来的专业,而是实在没有多少选择空间。我原本以为自己也算是半个IT人了,应该能够对付这些事情,但是来了之后才发现,和那些从文科专业调剂过来的纯跨专业的人比,我也只是比他们多知道些C语言和数据结构的基础知识,而且我也只是个半吊子。真正的IT世界,我只是刚刚打开一道门而已,可能连门都没打开,只是抠开了一个门缝,从缝里向IT世界里瞅了瞅。
也正是由于这个原因,刚开始的第一年显得尤为艰难。我们的课业任务很重,老师上课的时候会缺省认为学生学过"编译原理",学过"软件体系结构",但是这些专业课我并没有学过,只好私下里恶补。那会儿每个人还要承担课程项目,给我恶补的时间少而又少,所以压力很大。而且软件学院身处大兴,是一个偏僻的小角落,本来就没有什么丰富的业余生活,而身边的同学们又无时无刻地谈论技术,这让我觉得很受不了,而更让我觉得难受的是,同学们讨论的技术话题大部分我都听不懂,在他们面前,我就是个彻底的外行。同时在第一年,我还在转双,每天奔波在课堂和自习教室之间,在恶补计算机知识的同时还要时刻保持着对研究生考试内容的温度……
但这些并不是让我觉得最难熬的地方。随着对IT行业了解的深入,我发现我对IT行业没什么感觉,我不讨厌它,但仅此而已,并没有达到那种很热爱的程度。我开始对我的未来感到相当的迷茫,这让我非常苦恼。继续以前的专业已经不太现实了,但是,作为一个女生,我在IT领域的优势是什么?作为女孩子,如何在IT领域更好的发挥自己的优势?这些我并不清楚。
但是对于要不要入行,入行以后怎么办,我有些自己的思考。
1. 对于跨专业入行的同学,请问自己几个问题:
1)我真的了解这个行业吗?这个行业值得我放弃原来的专业吗?
2)我以后想成为怎样的人?这个新的行业真能帮助我成为这样的人吗?
2. 如果已经入行,还是应该将技术本身掌握得牢一些。只要还在IT混,技术这道关是绕不开的。你可以做的也很多,例如选课的时候,多咨询师兄师姐,并结合自己的需要来选,这样才不会花冤枉钱。
我是一个目标驱动型的人,一旦目标明确,认准某种事情,会一直努力下去从而达到目标,但是对自己怀疑的东西,就不会那么有动力。所以在这三重压力下,我转双失败了。但是由于很多师兄师姐都跟我说单双证差别不大,因此我也没有过于在意。每天的生活还是上课、学习,对于本硕专业不同的鸿沟,我也是本着"既学之则好之"的原则,尽我最大的努力去填平。但是,我将来能干什么?怎么才能从事到能发挥我特长的职业?对于这些问题,我一直没有停止过思考。
实习之门 定调:有泪有欢笑,心智更成熟
我和IBM的三次邂逅
--想说爱你不容易
第一次邂逅
仓促的实习准备
已经是4月份了。同屋两个女孩接连拿到了不错的Offer。当时的我本来就对自己的能力充满了各种各样的怀疑,现在看到同屋的姐妹们都顺利找到了实习,我开始着急了。在这种错误的焦虑心态下,我一通狂投,但回音寥寥。我越发觉得压力大了,投简历比以前更加疯狂了,到最后几乎是个实习就投。没有任何调查,没有任何考虑。在这种焦虑心态下,我对简历本身也没有下太多功夫,显然,这样是没什么结果的。
8月初,我得知IBM中国研究院的一个项目组在招实习生,于是我投了简历。几天之后我得到了面试通知。拿到面试通知后,我疯狂地复习了两个星期,心里相当紧张。同时,我还咨询了好些已经拿到Offer的同学,当时所有人都跟我说面试IBM很容易,谈谈项目一个小时很快就过去了,不会很难。听了他们的话,我心里有了底。
预料之外的面试
面试那天我精神饱满地踏进了IBM的大门。面试官相当和善。我掏出了简历,心里暗自酝酿着该重点介绍哪个项目。可还没来得及给他,他就递给我一张纸,对我说:"把上面的算法做了吧,上机实现。我给你两个小时的时间。"我当时就愣在那里了,我在心里预想过千万次面试的场景,可是万万没有想到会是这样的。好像其他同学找实习的时候很少有上机的呀。但是既然已经来了,就硬着头皮上吧。
可是真正坐在电脑前的时候我的大脑还是一片空白。后来我实在是急得不行了,就偷偷给GG打电话。他安慰我说,这会儿千万不能紧张,你要是做不出来,可以给面试官讲思路,很多面试官看中的是解题思路而不是编程的结果。听了他的话,我定了定神,回到了机器旁边。两个小时后,我就和面试官说了说解题的思路,给他看了看我的代码,看上去他还挺满意的。
在经历了两个星期漫长的煎熬等待后,我终于等来了IBM的实习Offer,拿到Offer的时候我相当兴奋,因为这或多或少证明了我的能力。我的自信心得到了极大的提高。
高兴归高兴,但是对于这份实习本身,我是相当"稀里糊涂"的,完全不知道那个组干的什么事、用的什么技术、Mentor带实习生的风格如何……种种关于这份实习的实质性的内容,我一概不知。当时的我也根本没有意识去调查,只是觉得自己好不容易找到实习了,一定要抓住机会。
被动的实习过程
在盲目的开心中,我带着种种美好的憧憬开开心心地入职了。我的Mentor并不是面试我的人。简单的自我介绍后,她把我带到一个会议室,拿出一张纸说,你的任务就是把这个算法实现了,我们要用在我们的系统里。我接过纸,一头扎进Lab开始钻研,心想一定要好好写,开个好头,给Mentor一个好印象。由于算法和系统非常复杂,而且我对系统的其他部分不了解,也没有文档说明,于是花了三天把算法完成(包括调试),但是Mentor还是责怪我花的时间太久了。当时的我觉得很委屈,但我想,自己来实习就是学东西的,Mentor说我做得慢了就一定有她的道理,我还是要虚心接受才行。
后来我才发现,我的Mentor是一个完美主义者,凡事求好,而且越快越好,这样的带人风格对于菜鸟级的我来说,显然是不合适的。我后来又做了几个小项目,所用的技术是我完全不熟悉的,有的连听都没听过。Mentor是个智商非常高的人,但她习惯以她的标准来衡量我,给我的学习时间通常很少。我初入职场,表现得战战兢兢,明知时间不够也不敢说,通常是硬着头皮就开始做了。本来领域知识就薄弱,项目的前期学习又严重不足,结果开发时间总是不够,每天工作都很辛苦,干到夜里12点多,早晨7点刚过又爬起来上班了。但比起辛苦,最难受的是干得被动,这种被动又导致Mentor对我的不满,施加的压力也越发大了。虽然最后项目做出来了,自己也觉得项目做的还不错,但是Mentor就是觉得我做得不好,觉得代码质量不高,觉得慢。在这样的情况下,我逐渐达到了心理和生理崩溃的边缘。三个月后,我决定离职了。
我哭:第一次实习失败了
就在我准备向Mentor提出离职申请的时候,Mentor主动找我谈话了。那天,她把我叫到一个小会议室,对我说:"唐雅薇,你回去把项目的文档好好写一下,然后看看有没有别的实习机会吧。"我愣了,这不就是宣布我下岗吗,听了她的话,我什么都没说,Mentor见我没大的反应,就出去了。她前脚刚离开会议室,我就开始嚎啕大哭,连日来的辛苦、被动、压抑……各类委屈一起涌上心头。
哭完之后,我回到Lab写了文档,然后收拾了一下,回到学校。
第二次邂逅
回到学校后,我十分沮丧也感觉到十分丢脸,开始重新质疑自己的IT能力。就这样在宿舍颓废了两个星期,一份新简历都没投。一方面我想休息一下,另一方面,我实在是失去了再战的勇气。两周之后,我觉得不能再这么颓废下去了。我对自己说:"再给自己一个机会吧,试一试,勇敢点。"于是,我又重新开始了寻找实习的旅程。
同样的失败,我决不让它重来
吃一堑长一智,这一次我没有急着投递简历,而是仔细回顾了第一份实习的经历。那会儿我最大的感触就是"被动",这种"被动"固然和Mentor的性格有着不可分割的联系,但我自己也要负相当一部分的责任。对于这份实习,我没有做任何的调研就去了,感不感兴趣倒先不提,甚至连是否适合自己都没有弄清楚。学习的东西和自己所擅长的严重不符,学习起来又发现没有多大的兴趣,更不懂得勇敢地为自己争取多一些的学习时间,这些都是我的失败之处。
这些失败,我决不让它再重来一次
新一轮的实习简历投递之前,我重点关注了所招职位的技术要求和项目介绍。不巧的是,我这回投实习是在青黄不接的时候,大公司开放的职位非常少,所以,连着大半个月,我都没有找到实习,不过由于经历过一次失败的实习,我已经感受到了着急的代价,所以当时心态还好
我笑:自信回来了
某天,一个同学告诉我IBM CRL的另一个组在招实习生,要求有地理信息系统和软件开发的背景。我觉得有些别扭。但是,现阶段没有多少实习机会,像这种比较适合我的更是少而又少。我说服自己说,为什么不先去试一下呢?于是在详细了解了那个组的情况,并对简历进行了修改之后,我投递了简历。一番面试之后,我得到了这个实习机会。我心里很犹豫,一方面,我不知道如何面对原来的Mentor,另一方面,我实在是觉得这是个很好的机会。我想,我不能够再逃避了。于是,收拾了一下心情,我去上班了。
新的座位还是在原来的Lab里,刚来的头几个星期,我都躲在我的小角落默默编程,生怕被原来的Mentor看见,直到后来她发现了我。我们友善地打了招呼。突然间我觉得,从前的不愉快都已经过去了。
新的实习由于比较符合我的背景,干起来一点不被动。由于专业相关,即使是学习新的技术,概念的共通性也使我不觉得学习新东西的过程很吃力,加班的现象自然少了很多。新组的氛围也很好,同事之间关系很融洽。
这份实习一共持续了近七个月。失去的自信也慢慢地回来了。
两次出入CRL,我认识到不管干什么,一定要找适合自己的东西,对要干的事情要所有了解,才不容易被动。不过这也有一定的坏处,特别是在实习期。实习的主要目的是学习,如果总是做自己擅长的事情,就容易把技术限制在一个范围内,对拓展视野不利。但是,只凭激情去挑战自己的不熟悉的领域,也不是特别好,还要讲究技巧才是。我的第一次CRL之旅就给出了惨败的例子。
第三次邂逅
我觉得缘分是一种很奇妙的东西,它总是在不经意之间显示出它的力量。至少在实习结束之后,我以为我和IBM缘分就此止步,但事实远非如此。
2008年9月,我开始了求职之路。12月中旬,由于个人原因,我最终将求职目标转移到上海。可我一直没投过上海的职位,而此时招聘的黄金时期早已过去。
说到这里,不得不提到软院的优势。软院鼓励大家实习,而同学们实习的单位五花八门,大部分的主流公司里面都有我们的师兄弟,这样,我们可以从内部获得第一手的招聘信息,同时,还可以通过他们打听到招聘职位的基本信息。
于是,我开始在同学们之间打听上海公司空缺的职位。一个同学告诉我上海IBM最近开放了一个名额,问我是否有兴趣。由于时间紧迫,我大概了解了一下情况就请同学推荐了。过了几天,那个部门和我预约了电面的时间。
面对面,让我拿到这个Offer
这次电面是我经历过的最正规的一次电面,电话那头有三个人,各自负责了不同的部分,他们的问题主要从简历出发,然后根据一个点逐渐深入。过了几天,上海IBM的电话又打进来了。HR说,可以有两种方法继续下面的环节,一是继续电面,二是我亲自去上海跑一趟,我想了想,选择了后者。我不是随便做出这样的选择的,之前的一个姐妹告诉我说,他们公司以前电面过一个外地学校的大牛,实力非常强,一至三面虽然都是电面,但却是一路绿灯,但是Manager面试给否了,Manager给出的理由是:"No show"。
我心想,面对面可以让Manager对我有直观的认识,而且在尴尬的时候至少可以笑一笑缓和气氛嘛……所以还是亲自去一趟比较好。只是开销大点,不过能用小钱解决的问题都不是问题,拿到Offer才是王道。
或许是心理状态比较好,加上之前积累了很多面试的经验,再或许是我亲自出现的行为也给自己加了分,整个面试的过程都很顺畅,上午开始面试,中午就给我发了Offer。
在发Offer的时候,Manager问我会不会拒掉这个Offer,我并没有给她一个肯定的答复。因为我的心里有犹豫,并不是因为怕现在签了,以后会失去更好的机会,而是因为那会儿我并不十分清楚这个组是干什么的,我怕重蹈覆辙,再犯第一次实习的错误。回来后的一个星期内,我所有的工作是通过各种渠道了解这个组,得到的结论是:这个组还不错。我在这里可以锻炼交流能力,也可以看到产品全貌,还可以锻炼开发能力,这些技能都符合我的职业规划。
至此,我的找工作历程也就尘埃落定,我和IBM也缔结了更加长久的缘分。
我的实习心得
实习的时机。实习密集期集中在4、5、6月份,暑期实习,4月份以前比较少,11月、12月会有一次,而8、9、10月份不会有太多实习机会。
实习的方向。建议多找工程性的实习项目。虽然这些地方很难有机会看到所谓的"未来的技术,思想的火花",但是这里能练到扎实的基本功。
实习怎么做。实习的时候不能只凭激情,刚去的时候大家都有激情,这时靠的是踏实和认真思考。等到大家干累的时候,这时拼的才是激情。有困难要及时提出来,不要怕。害怕的后果只是让自己越来越被动。
求职之路 定调:不打无准备之仗,但准备还是不足
找准个人定位:迈出求职第一步
不得不提的是我找工作的经历。尤其是在金融危机的大环境下。
9月份,摩根的宣讲会宣告了我找工作历程的开始。摩根的宣讲会相当不错,听了之后我就告诉自己一定要加入好公司。不过不管加入什么样的公司,投简历始终是第一步。
有人说,找工作要海投简历,以增加命中率。我又想起第一次找实习的时候,就是因为海投,没有针对性,才落得个失败而归的下场。一个朋友告诉我,找工作就如同婚姻,一定要找到适合自己的,千万不能海投,到时候一个你不喜欢的公司给了你Offer而且还逼签,你喜欢的公司又迟迟没有回音,这个时候是签还是不签呢?与其那个时候痛苦,不如从一开始就选择好目标。而且,找工作和实习不同,实习不喜欢可以走人,但是工作是不行的。可见海投并不好。可是投什么好呢?一个简单的答案是:选择自己喜欢的,选择适合自己的。
答案简单,但现实中却没那么容易。相信很多同学都和我一样,并不清楚自己真正喜欢什么。第一份实习结束后,我曾认真思考过自己的未来,研一时对自己女生角色定位的迷茫又重新回来了。那会儿在求职网站上看到的职位只有开发、测试,还有一些则是搞研究,我当时就想,当研究员哪是我干的活呀。不过我又能干什么呢?难道我要写一辈子Code吗?这是我想要的生活吗?自己的职业道路究竟该怎么走?没想清楚这些问题,我不敢贸然投递简历。不是不敢尝试,也不是害怕试错,只是我觉得,人的精力有限,校园招聘的机会又是如此宝贵,我不可以把有限的精力浪费在无意义的职位上。
调研很重要:确立大方向
在修改简历的时候,我突然回想起自己曾经在一门课的小组项目中扮演PM的角色,并率领小组拿到了第一名。这里的PM,究竟是不是一个我可以走的方向呢?于是,我开始对PM这个职位进行调研,因为我发现,每个公司对于PM的需求、职责都有区别,有些我喜欢,有些我则没太大感觉。在调研中,我尽量去了解每个公司的PM的定义,了解各类PM对技术能力的要求程度,以及对沟通能力的要求。
一番调研之后,我心里有底了。我开始对我要投递的公司和职位进行类别划分,并分析了优缺点:
划分好之后,我开始给每个职位做记录,并就每个职位分别写简历。就这样,我投递了我的第一批简历。事实证明,我的这些前期调研和有针对性的修改很有效。我的简历通过率很高,只要是自己研究调查过的职位,基本都有回音。
虽然心里大致确定了PM为自己的一个发展方向,但总还是觉得有些不踏实,思前想后,我才发现,我对自己的这个发展方向其实想得并不透彻,比如:我究竟有哪些特长符合这个方向?除了这个方向,我的特长是否可以带领我走到别的发展道路上?如何将特长更好地和我的技术背景结合起来?如果选择了一个方向,未来会是怎样的?这些我都不是太清楚。
在这里,我要感激一个人,她是微软的郭蓓菁女士,是她回答了我心里最后的疑问。
未来会怎样:与郭蓓菁女士的亲密接触
我去参加微软"2009校园招聘宣讲会"时,看到海报上关于郭蓓菁女士的文章。她是微软资深PM,她的魅力在于,她干任何事情都目标明确,而且事业和家庭生活有着很好的平衡。
另外,在这篇文章里她讲了怎样才能成为一个好PM,都有什么素质要求。看了这些文字,我当时就觉得有人在我的脑子里拍了一下。醒了!宣讲会一结束。我就往讲台冲,拦住了正欲离去的郭蓓菁。我告诉了她我的苦恼,问她觉得女生在IT行业的优势是什么。她说,女生沟通能力好,表达能力通常也很强,适合PM的职位。我告诉她,我想做PM,但是今年光景不好,竞争很激烈,我如果成为不了PM怎么办?郭蓓菁笑了笑,回答我说:你在找工作的时候找一些比较包容的公司,去了后就和Mentor谈职业规划,让他帮你安排一些适合这个目标的工作,虽然可能久一些,但是可以"曲线救国",可以达到你的目标。
郭女士的话仿佛给我点了一盏灯,我心中的疑惑被解开了。
经过这次宣讲会,我的目标更明确了。我调动了一切可以调动的资源:在互联网上查找、在同学之间询问。我知道自己已经开始走入正轨了,我开始相信自己在IT业也可以活得精彩。
我的面试故事
第一次面试--Micro Strategy
经历了一系列的思考,虽然我知道了女生能干什么,并且现在知道也怎么寻找了,但我始终不知道自己面试的时候应该具备什么样的精神面貌,换句话说,我找不到自己的面试风格。学长们告诉我们说面试要不卑不亢,什么叫不卑不亢?怎样就是卑?怎样就是亢呢?学长们还说对面试官的问题要积极并富有策略地回答。但是这个"度"怎么把握?这些我都不知道。
我的第一个面试是Micro Strategy,面试来得很突然,还没做好心理准备,我就匆匆忙忙地去面了。接待我的是一个香港人,说的却是流利的英文,我的英文水平一般,加上之前几乎没有求职经验,立马就被吓住了。一路坑坑巴巴,说的最多的词是"er…",那个香港人倒是很有风度,一直耐心听我说,只是我的表现实在是太差了,而且越说越没自信,越来越紧张,这直接导致我犯了好几个无比低级的错误。面试结束后面试官和我握了握手,我心里知道,没戏了。
自那以后的很长时间,我都找不到属于我的面试风格,不知道怎样才能把自己的水平发挥出来,直到我面试阿里巴巴。
第一个Offer--阿里巴巴
我面试的职位是需求分析工程师,由于面试前被告知这个职位不在北京,所以对于当时一心留京的我来说,已经没有吸引力了,因此,紧张的心情一下子就放松了下来。
带着这种轻松的心情,我见到了面试官。面试官的每一个问题都是围绕职位展开的。他先和我简单谈了一下项目的事情,然后就开始让我分析我所做的其中一个项目的需求过程,还让画了不少图表。不巧的,他关心的那个项目里面并没有多少需求的内容,可是他却一直发问。我心想,难道就这样任由他牵着鼻子走?那我岂不是要越说越干?由于我当时心态非常放松,所以胆子也大了,我打住他的话,对他说:"不好意思,这个项目由于是研究型的项目,所以严格意义上的需求过程占比不大,不过我有一个非常有意思的项目,需求和开发过程衔接的非常好,你想不想听啊?不过这个项目没写在简历上。"面试官有点惊讶,继而点头微笑。于是我开始阐述我熟悉的项目,一口气讲了十几分钟。他对我的阐述很满意,让我先不要走,到外面的大厅等待。我知道这次有戏了。
随后我迎来了阿里的二、三面及HR面,套路和一面差不多,有了一面的经验,加上心态无敌好,能够冷静地思考,所以后面几次面试也出乎意料地顺利。
两天后,阿里HR给我打了电话,通知我去谈Offer。这是我第一个Offer,其意义可想而知,让我觉得更奇妙的是,这个Offer我原本丝毫不在意,最后竟然到了我手上。这里一定是有些奥妙的。我仔细分析了一下,发现这次阿里的面试和以前的有很大不同。
调整心态。没有什么必须要得到的观念,只是顺其自然,这样我非常放松,少了急躁,能够冷静的思考。
化被动为主动。主动秀出擅长的东西,整个人自信了许多,自然可以加分。
通过阿里巴巴的面试,我终于找到了适合自己的面试风格,总而言之就是:放轻松,多自信,把面试官当朋友来看待,享受每一次过程,哪怕是被鄙视的过程。
随后的面试轻松很多。我养成了一个习惯:记录每次面试的题目,并总结教训。在接下来的面试前,我都会看看我的总结,提醒自己不要在同一个地方跌倒。
最心痛的一次失利--网易有道
尽管找到了我的面试风格,但也不是次次面试都是顺利的。
我投了有道的PM,并顺利通过了笔试,进入面试环节,出于对有道的向往,我在面试前也做了充足的准备,调查了有道的每一个产品,做了同类产品分析,并提出了许多新的设想,洋洋洒洒几大页。
一面、二面非常顺利,可到三面的时候问题就来了。面试官要我做了一个产品策划,给我提出了一个非常奇怪的产品,我做得十分费劲。在他对我的设计进行总结时,我仔细观察了他的表情,感觉他对我不太满意,可是有道是我很喜欢的公司,我很想要这个Offer,于是我掏出了我之前总结的有道产品文档,啪的摆在他面前,那个面试官都已经准备起身走人了,看到我的文档十分惊奇,马上读了起来,边读边点头。面试结束后面试官送我出门,他冲我笑了笑,说:祝你接下来的面试顺利。就这样,我通过了三面。
四面的经历我永远都忘不了,我倒在了第四次面试。四面的面试官相当严肃,从头到尾没有露出一丝笑容,这样的面试官是最让我发怵的了。心理上立马弱了一大截。这个面试官给我出的题目是我最不擅长的逻辑分析题。我当时看到题目就想:完了。在这样的心理暗示下,我根本不能专心思考。最后自然就挂掉了。
分析这次面试,我做得好的地方在于:在面试前,对公司认真调研,写产品分析报告。而我最大的错误在于:我不应该那么早就给自己下结论,遇到不会的、不擅长的要积极应对,而不是在第一时间就示弱。
再后来,我迎来了和IBM的第三次邂逅,有了前面多次的"血的教训",这次,我顺利通过了面试,宣告了我职业生涯的开始。
我的求职技巧
及时总结:记录每次笔试和面试的题目,并在下一次笔试和面试来临之前认真复习。
循序渐进:笔试中,遇到不会的题或是很难的题,先写一个笨方法上去,然后逐步深入。绝对不要什么都不写。对于拿不准的题目或复杂的题目,最好使用铅笔作答,保持卷面整洁,可以降低笔试的误杀率。
主动出击:多参加公司的宣讲会,并等待最后的面对面交流环节。主动和嘉宾介绍自己,让他对你感兴趣。从而增加面试机会。很多同学在这个环节开始前就回去了,其实这是错误的,后面才是宣讲会的精华之处。
想对IT女生说
务必自信,适合女生的职位其实很多。千万不要随便否定自己。
简单举例如下:PM、技术销售工程师、项目管理、测试、IT咨询、技术支持,还有银行的信息部门,这些都是不错的选择。
务必好好学技术。
即便是开发岗位,只要能够进入一个成熟的产品组,工作起来应该也不会有过大的难度,是完全可以胜任的。但不要以为能说会道就足够了。就算是PM,也是拿开发人员的标准来招的。
曲线救国,总会找到出路。
如果实在不喜欢纯粹的IT,那就试着去学习一些可能会感兴趣的学科吧,比如金融,比如城市规划。看看能否做学科交叉。复合型人才也是社会急缺的。
结语:收获与遗憾--写给未来的自己
在北大的这三年,我看到了很多的牛人,他(她)们对我有很大的帮助。我从一个对计算机不太开窍的小菜鸟,逐渐成长为对技术不再害怕的准IT人。在这三年,经过一次又一次地思考、实践与挫折,我找到了适合自己的方向,发现了自己的优势。最重要的是,我变得自信了。另外,我认识了一群挚友,他(她)们是我最大的收获也是最宝贵的财富。
我的遗憾有很多。虽然我顶着北大的旗号,但事实上,我却没有更多地去体验北大的文化,没有参与感兴趣的社团,这些是我最大的遗憾。如果给我再来一次的机会,我会更多地活跃在美丽的燕园中。
我的座右铭是我的最坏情况理论--做事情之前先考虑一下最坏结果,如果发现最坏结果和不做这事完全一样,那就不要再顾虑,大胆做吧。这个理论在相当多的场合帮助了我。有很多同学在找实习和找工作的时候存在着"不敢投、不敢面"的现象,我觉得这是大可不必的。很多公司的用人条件写着吓人,但事实上,他们往往更看重的是你是否具有很好的资质,是否能够在未来的工作中主动学习,而不是你现在掌握了多少。试一试,又何妨?当然,如果决定试了,还是要全力以赴,不要只是走马观花地就过去了,Do or not do, there is no "try"。
总之,清晰的目标加上努力与坚持,即便是普通的IT女生,也一定可以成功。
以马云说过的一句话作为结束,这句话我很欣赏,与大家共勉:
今天很残酷,明天更残酷。但后天很美好,大部分人将死在明天晚上,看不到后天的太阳。
五、徐宥 掉进读书的兔子洞
莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。
回首向来萧瑟处,归去,也无风雨也无晴。
--苏轼《定风波》
引子:一件小事影响了我一生
大学中的一切,其实都和大学前的经历和学习习惯有关。因此,我还是从我小学时的一件对我以后的人生,包括大学影响巨大的小事说起吧。
大学前:数理化,好老爸
一本小书的出现
我的小学是在农村里和爷爷奶奶一起度过的。我的父母住在小镇上,两人平时都要工作,没空照看我和弟弟。所以,我只有周末和放假才到镇上,和父母弟弟在一起。四年级升五年级那个暑假,我到了镇上,和父母在一起。因为一起抓鱼钓虾的玩伴都在老家,百无聊赖的我开始乱翻父亲的书橱,找书看。某天,我翻出了一本叫做《平面几何一题多解》的书,那是本封面很好看的书。我把整本书翻下来,每个汉字我都认识,但每个符号我都不懂。于是我好奇地问父亲,这个书讲的是什么呀,怎么从来没见过这些奇怪的符号呢?他就告诉我说,书里讲解的这个东西,叫平面几何。他接着问我说:"平面几何是个很有趣的东西,你想不想学呢?"我说:"当然想啊!"那时的我,其实只是一个好奇的小学生,迫切想知道这本书里的图画和符号的意思。我肯定不会想到,这个很随意的决定,改变了我其后的整个人生。
11岁,开始享受独立思考的快乐
听了我肯定的回答,父亲立即从书橱里层(我家书太多了,书橱太小,书橱里书分里层外层,外层的书挡住了内层的书脊,我从来都不知道里面还有宝贝)变戏法一般地翻出了本《数理化自学丛书--平面几何》。对于我父亲这一代人来说,《数理化自学丛书》是代表着知识、荣耀和梦想的。我感觉他翻出这本书的时候的动作是虔诚的,但当时的我并不知道父亲在这套书上寄托的希冀和梦想。我只记得他告诉我,当年这套书,用去了他大半个月工资。就这样,从五年级开始,我就在父亲的指点下,开始蹒跚前进地学习《平面几何》。从一开始不知道什么叫"证明",需要他一字一句帮我厘清逻辑关系,到后来全是自学不需要他教,我很快就喜欢上了自学这种学习方式,每天自己看书并且做八道题。暑假过完后,我就回到了爷爷奶奶的老家。父亲让我继续自学,并且布置我一周做八道题。我在爷爷奶奶家,每天放学回来不做家庭作业也不看动画片,就赶紧做一道几何题。做几何题的妙趣,不融入其中的人是不能理解的。比起小学里的抄生字、抄课文这种作业,做几何题是脑力和体力的双重享受。当时,我周围没人可以讨论切磋,全靠自己。遇到不会的题目,我只能自己冥思苦想,或者熬到周末和父亲讨论,因此,常常被一道难题从周一折腾到周日。好在这套书是粉碎*后出的第一版,当年学生的数学水平比不上现在的学生,而这本书又以自学为主要切入点,所以题目也相对简单,我冥思苦想几天后大体上也能想到解题思路。因此,我能够常常体验百思而得解的愉悦感。
我觉得,这种时常拜访的愉悦感,让我很早就开始相信独立思考的力量。
每个周末,父亲都用吱吱作响的自行车带我到镇上洗澡、理发,然后批改上周我做的几何题。在自行车上的时候,他常常信马由缰随口说些初中物理和初中代数知识,比如看到船就说浮力,看到马就说做功,看到三角形就说余弦定理等。我也就半懂不懂地听,有时候插几句话,有时候能睡着了,没有丝毫的压力和拘束。很早就被中学数学、物理知识装备的一个小学生是可怕的,我那时候觉得知识就是力量,因此我一定要用自己的数学、物理知识做一台柴油机,我很自信地认为自己懂得做柴油机和机动车的一切知识,说不定还能做出第二类永动机。父亲屡次告诉我不可行,而我却反过来屡次告诉他,你是个没有理想的人。父亲不愿意打消我的理想,只是扔给我更多的书,希望能够打击我制造柴油机和永动机的热情,而我的知识理想,在读了更加多的书以后,变得更加的坚固了,我相信,学习知识是我人生第一重要事,有了知识,虽然不一定能做柴油机,但一定能做更多强大的事情。同时,我通过学习几何和其他的一些父亲扔给我的书,开始对自己的学习能力有了自信,我相信,找书自学是学知识的好方法,同时,把题从头到尾做一遍是很好的自学方法。
所以,我带着三个理念进入了大学:第一是什么东西都可以自学,第二是慢即是快,笨笨地做一遍题是学习的捷径;第三是知识理想主义,知识就是力量,而读书学知识能够消除蒙昧,掌握改变世界的力量,所以是一件快乐的事情。
大一~大二上:极端自负,极度自卑
专业选择的失意让我暂时迷失了自己
我的高考成绩很不错,高中时还拿了一个数学联赛一等奖,所以,我是带着对自己数学知识(为了准备数学竞赛,我看了很多闲书,有很多就是大学数学系的教材)和学习方法的自信满满,和对南大数学系这个相对不好的选择的遗憾和自卑(当时的高考分数可以填报更加好的学校或更加喜欢的专业)来到大学的。当时我的心理状态可以用八个字概括:极端自负,极度自卑。这种心态,一直笼罩了我上大学的头两年,而且总是以一个季度为周期,在两极之间交替变化。我在学期开始往往很自负,到期中考试左右很自卑,然后再自负,再自卑,不断反复。
在我看来,极端自负这个心态,其实不是因为自信,而是因为极度自卑生出的应激反应--为了掩盖自卑,只好用自负来掩饰。为什么我极度自卑呢,大体有两个方面的因素:一个是我的成绩排名在高中都是很靠前的,但是到了大学就20名开外了,尽管我觉得自己的数学水平很不错,考试却总是不怎么样,觉得考试考不出真水平;另一个是觉得自己没有在一个自己满意的系--我喜欢能动手的工科,当时我觉得比起计算机系和电子系这样的"牛"系,数学系并不"牛",可即使在不"牛"的系,我都不能做到前十,更别说看上去更加"牛"的计算机系了。为了掩饰自卑,就自然生出了极端自负。那时候,我上课根本不听讲,理由是"书上的东西太简单了"。为了证明自己智商还可以,我总是坐在最后一排,显示自己并不热衷于老师讲课。这样持续了两年,以至于到最后,我连班上每次都坐在前面的几个同学的名字都不知道。这样的心态明明是错的,我却缺少一个很好的动因来改变它。
我开始一行行敲经典书上的程序样例代码
不过最原始的三个理念还是在的,我告诫自己,即使上课不听讲,也不能浪费时间。所以,我把在听课、做作业上节省下来的时间,用在了看喜欢的计算机书和学习编程上了。于是,整个大一大二,我凭借着简单的自学的理念,开始了两件事情,敲《Thinking in Java》(TIJ)和《The TeXbook》上的每一个样例。
敲TIJ的机缘其实很简单,我是在软件学院听课的时候看到他们教Java,但是他们用的《Java 大学教程》太贵了,我舍不得买。 我在网上搜了一圈,发现《Thinking in Java》是一本免费的英文电子书。于是,我就在数学系的机房,每天下午和晚上,开着一台计算机,屏幕上放着这个电子书,再用我很土的笔记本,运行着未注册的 JCreator,一个字母一个字母地敲TIJ上面的程序。我很偏激地认为拷贝粘帖的程序记不住,所以每个字母都自己动手敲。就这样,花了一个学期,居然就把所有的程序敲完了,基本上Java 的方方面面,我也了然于胸了。
敲完《Thinking in Java》之后没几天,我们就期末考试了。那一次考试的试题是用LaTeX 排版的,而不是手写的。我考试的时候就问监考老师这玩意怎么排版出来的,因为我知道Word软件做不到这个效果。 监考老师除了对我不认真考试表示不满外, 还算仁慈,告诉了我LaTeX 这个名词。寒假里,我就买了一本LaTeX教程。然后,突然认识到,原来TeX 居然是我最热爱的Knuth的杰作,于是我就疯狂地开始学TeX。我的方法还是一样,敲例子。记得《The TeXbook》上有一个程序,Knuth让大家自己照着敲入计算机,然后还很幽默地说,实验证明,只有很少的人会按照他说的敲入这个程序,而这部分人,却是学TeX学得最好的人。看到这里我会心一笑,觉得自己的方法原来也不算笨。从此,一字不漏敲入一本书的程序成了我推荐别人学习语言的最好办法。后来大四时我又敲了《A Byte of Python》,前段时间又敲完了《The Awk Book》,都是不到一个月立即从初学者成长为细节很熟、代码顺手拈来的熟练使用者。顺着这个方法,大二我把《组合数学引论》和上海交通大学出版社出版的一本《离散数学》上的题目都做一题不漏地做完了。当时选这两本书也没有特别的目的,就觉得这东西应该是计算机的数学基础。这些积累,在大四全部都显现了出来。
我个人认为,《Thinking in Java》和《The TeXbook》都算得上是理论和实践结合的精品书,是经典的英文原版书。我一上来就读了这两本书,阅读品位就上升了不少,而且变得"崇洋媚外"了,任何时候都以英文原版书为第一选项了。也正因为此,虽然我自学的过程中没有高人指点,但自学最重要的一个环节--选书--的盲目性就大大减少了。我记得当时我看得最多的书是华章引进的书,黑封面的,我们图书馆里有将近半书架。这些书如果一一细读,穷尽四年都看不完。但华章的书也并非本本经典,我开始注意选择,细读开头十几页后,基本能决定一本书该不该看。所以即使当时没人指点,全靠自学,读的书还算过得去。那时候南大计算机系的教材,有的我看,有的我觉得不适合自己,就找替代品了。我觉得在选书这个事情上,因为有前两本书的标杆,我少走了不少弯路。从这两本书开始,我疯狂的读书生涯就开始了。那时候南大浦口校区的硬件条件并不好,唯一有空调且可以上自习的地方恰好是图书馆。因此我每个暑假,基本上都是很早就过去占位,晚上很晚回去睡觉。我对小说等其他书也不感兴趣,就整天看自己觉得好的计算机书和数学书,做笔记。某天,我开始了一个雄心勃勃的计划:读完TP312(计算机理论和编程)书架。
大二下:两个榜样,三个要求
大一大二基本上就是在不断的心态波动中前进。我学会了Java,也做了不少题,但是考试成绩一直不是很好,为此我比较苦闷,迫切想要改变这种状态,我的想法是,要么转系,要么好好学习数学。但是转系阻力重重,我又不愿意耐心去学习数学提高考试分数,所以我一度非常纠结。但是大二下学期,我遇到了两个对我人生产生影响的人,这两个人让我从正弦曲线般的心态沉浮中跳了出来,让我一下子变得目标坚定了。
第一个人是我的同学及非常好的搭档,现在在 IBM 工作的李获鼎,另一个是我的叔叔。他们让我变得沉稳,消除了原有的浮躁,学业和心态都走向了正轨。
大二上学期快要结束的时候,我们数学系的学生会主席一次无意中对我说,在下次数学系搞的文化节上,我们懂编程的同学要维护一个叫做"模拟股市"的软件。这个软件是学长用 ASP 写的,运行的时候有一些问题,所以需要专人看着运行。我那时候特自信,就说,干脆明年我用 Java 重写一个吧。后来我记不得是我找获鼎还是他找我了,反正两个人一拍即合,决定一起搞。寒假他在家自学 JSP, 我就在家看 JDBC 和 SQL。 开学没多久,我们就开工了,他负责写前端 JSP,我写 JavaBean。两个人编程比一个人好多了,可以相互看代码,而且可以轮流工作,克服浮躁感。我写程序比较粗线条,基本上功能有了,细节就不管了。获鼎比我可认真细致多了,前端一个表格的宽度和颜色都要调好久。在他的影响和"胁迫"下,我做事情也变得细致起来,因为我不细致,他的前端就没法正常工作。那时候他也是一边写一边学,对着书一行一行地敲 JSP,态度比我敲 TIJ 时候还认真。和他在一起工作了 20 天,把这个玩具项目写完后,我从他那里学来了耐心,自己也变得踏实起来。"模拟股市"这个小程序发布后,玩这个系统的同学都挺喜欢的,我的自信心也就有了。加上心态也平稳了,态度也踏实了,自然地,原先的自卑心理就没了。随着自卑的消失,极端的自负也自然消失了。我心态变得正常了。这时候,虽然还有点小迷茫,但一切已经走上正轨,我开始思考以后干什么的问题了,听课、做作业也比以前认真不少,成绩也上去了不少。
我的另一个榜样是我的叔叔。和他不能算是遇到,算是再发现吧。我叔叔是个很有冒险精神的人,具有不折不扣的企业家精神。我非常小的时候,他帮人家修电视,然后借着摆弄电子产品的背景,迅速就搞了计算机。他买了可能是我们全江都市第一台 486。搞了很多年计算机以后,他又自学了单片机,以写汇编为乐。这期间他还搞过印刷等其他的项目,我记得小时候最喜欢的就是到他的工作室里面玩各种各样新奇的玩意。因为他总是不停地尝试新东西,所以我对我叔叔一直的印象都是"善于抓住机会", 倒没有把他和"耐得寂寞"这个词很紧密的地联系在一起。大二有段时间,我突然对单片机很感兴趣,就找了一本 8051 的书在看。恰好被他看到了,他就告诉我,他现在就是做这个的,一周后还送了我一个AVR 的开发版及一系列的玩单片机的电子器件。我从来没有意识到我叔叔在写单片机程序,所以当我听他说这些的时候,惊讶得眼睛瞪得比灯泡还大,好像是突然发现了新大陆。我一直对和硬件打交道有一种畏惧感,并且体验过 Linux 设备驱动编程,知道这些和硬件打交道的地方需要极度的耐心和细心。在这些底层编程上,C 我都觉得不顺当,更不要说单片机上的汇编了。在资源受限的系统上做出工业强度的产品,已经远远超过我能力范围了。而我叔叔,在没有任何科班训练的背景下,完全半路出家,全靠自学,一个人用几年时间,就把这条路走通了。他现在写的汇编程序,运行在千家万户的水表中,可以说完全是坐冷板凳积累出来的硬功夫。可以想象,他当时给我的震撼是巨大的。我一度怀疑自己的自学能力,觉得有些事情,我永远没法做到,就像童年想做的柴油机一样,只是幻想。而我叔叔,在这时候,给了我一剂强心针。
受获鼎和我叔叔这样两个踏实勤奋的人的影响,我一改以前轻浮的习惯。在大二下学期,我给自己定了三个简单的要求:a. 更加多看书,看好书,并且一定一定要做笔记;b. 多编程,多积累;c. 不怕困难,开始背 GRE 单词。就这样,我就开始了疯狂学习的大三。
大三:深度迷茫,深入积累
大三是我看书最多、思考最多、积累最多的时候。大三我主要是沉稳冷静地做事情,用不断地做事情、看书和思考,压抑心底深处的对前途的迷茫。其实整个大三,我都不知道自己要干什么、能干什么,只知道像一个运动员一样一直往前奔。早在大二的时候,我们班很多同学就开始准备 GRE 了,我也就跟风准备 GRE,在大三的时候花了很多时间在背单词上。说实话,当时我捧起红宝书的时候,出国的动机并不强烈。那时候我并没有对美国和中国在各方面的差距有清晰的认识,且过于小看环境对人的影响。潜意识中,我想读计算机的研究生,考研可比出国转读计算机专业要简单多了,学长也告诉我,申请计算机专业很难,我们数学系也鲜有先例。因为正方面没有很强的激励,反方面又觉得困难重重,我就不太把出国当回事,除了背背单词,主要的精力都放在了读计算机书上。我专门扫荡 TP312(计算机理论和编程)那个分类,同时看了很多英文原版书。TP312 中的大部分书,我都是囫囵吞枣地看,做一些总结性的笔记,只有少数几本,如《计算机程序设计艺术》、《编程珠玑》,是认认真真看的。这时候的我已经没有时间,或者说耐不下性子一条一条做题了,只能浏览一些题。即使这样浏览,也让我在后来大四的工作面试中占了很多优势。
我喜欢记笔记,很注意整理自己的既得知识
我有一个从高中就开始的习惯,就是把每天胡思乱想的东西记在一个笔记本上,算是思维快照。我还常常翻回去自省,看看过去和现在的变化。大一大二的时候,这本笔记本上记载着的是和生活和感情有关的琐碎小事,或者宏大空泛的目标和叙事。而大三时记录的内容明显具体起来,比如这周看完了什么书、下周去图书馆借什么书等。但当时我写下的这些计划之间,是没有很具体的头绪的。在这些要做的事情后面,并没有一个明确的线索串起来,而是像无头苍蝇一样到处尝试、到处碰壁。举例来说,我的笔记本里清楚地记下某周要看操作系统,可是那周还没看完操作系统的时候,又记下本周不看操作系统了,看编译原理。就这样,好似饥饿的狗熊在掰玉米棒子,看上去很勤奋地在掰,掰下来,啃两口,扔掉。当时我能感觉到一种永远存在的知识饥饿感,一种永远填不满的饥饿感。不过,我又总觉得前方应该有那么一个终极玉米棒子,能够最终填满自己的饥饿感,所以,我就一直向前奔跑。其实这种奔跑,不管多勤奋、多刻苦,因为不够踏实、深入,永远都是事倍功半的。好在我在不求甚解的同时,很注意整理自己的既得知识,写在小本子上。后来我到大四的时候,写论文也好,考研、找工作也罢,很多知识我都是临时突击的--好在有这么一本小本子,我可以按图索骥地去深入强化当时如无头苍蝇般乱看的一些书。如果用搜索引擎的工作原理打一个比方,我觉得我大三疯狂地读书和学习,就好比是在建索引,等大四要搜索结果的时候,就再也不需要每本书全文检索了,直接按照本子上的索引找到当时看的书。
踏实和勤奋这两个从我叔叔和获鼎身上借来的优秀品质,加上取之不尽的TP312书架和背不完的单词,使我没有再一次被深度迷茫拉入自信和自卑的反复中,相反,随着这些积累越来越多,我变得越来越自信了,虽然这种对积累的自信尚未被现实验证过。
大四:书到用时,无心插柳
大三的迷茫让我不确定以后的方向,未被现实验证的自信又让我蠢蠢欲动,所以,我就自然地产生了"赌一把"的心态。如果以赌博为喻,我就是在所有的盘口上都了下注,要不全输光,要不总能赚,而我相信至少能赢一盘。
所以,大四甫一开始,我就拟了一个时间表,自信满满地想要在考研、找工作和出国的三条战线上都有所突破。我设想11月之前弄完出国材料,并且把简历弄漂亮,顺带找工作;1月前寄材料,套磁,准备考研,4月前搞定一切,等Offer;5~6 月我就写写毕业论文,然后周游中国了,等我周游回来,至少三个机会让我碰到一个吧,我就从了那个就行了。从这个狂妄的计划中可以看到当时的我的自信,不过我这个自信倒是有一定根据的,因为我研究了考研的模拟题和找工作的不少案例,我当时想,好好准备,应该可以上南大的研究生,工作应该可以进腾讯,出国我倒没什么底,所以我也想用前面两个来保底。
大四我们搬到了鼓楼校区,课表上又只有一门课,所以我就在鼓楼这个新环境里乱跑、乱逛。学校有国际会议,我就跑去和老外搭讪;鼓楼有关于佛教的演讲,我也跑去听;IT 公司的宣讲会和笔试,遇到好的我也去参加参加。如果没事,我就上自习,继续读鼓楼图书馆的书。就这样,我遇到了一个又一个的机会,基本上不管成功失败,都算是有付出就有回报,当然运气成分也不少。
面试题怎么都那么熟悉
10月左右,微软(MSN)来我们学校面试。这是我第一次面试,很紧张,前一天看书看到1点多,第二天午觉就睡过了13点,加上箱子里唯一的一件衬衫皱巴巴的完全不能穿,所以干脆就穿着拖鞋和 T 恤冲去了。面试的人很友好,面试也很顺利,有的同学还在等第二轮的时候,我的四轮就结束了。我当时的感觉是,微软的面试题太简单了,除了问我南京市新街口周边有多少辆车外,其他题目都是中规中矩的计算机面试题。面试出来之后,我和一个软院的同学在食堂讨论题,他说:"题怎么这么难啊?" 我就很奇怪,说:"这些题《编程珠玑》上不都有的么?" 后来我才知道,其实看过《编程珠玑》的人,不是我想象的那么多,而我也是在书架上乱翻才偶然看到《编程珠玑》。在2005年的时候,没有Web 2.0 和社会化推荐,我的世界,就只有面前的书架那么大,我幸运地在那么大的书架上遇到了几本经典书,并且细读了,吸收了。
很快,微软给了我一个在上海做测试的职位。当时我一心要去北京,就没要这个Offer。不过有了这一轮,我也知道面试怎么回事了,这次面试,更加强化了我的自信,于是我又开始比较狂妄了,觉得自己能进当时互联网中最热的、宣称招 50 个李开复博士的关门弟子的公司-- Google 中国。
利用比较优势选择考研目标
找工作还没完全展开的时候,我就准备考研报名了。我选择了北大生物系的生物信息学专业。其实这是一个让我可以到北京的小聪明,而不是一个全面慎重思考的结果。当时我看到,这个专业只招两个人,而且试题是和计算机系一样,于是我想,除了我这样的一门心思想去北京的,哪个人会绕这么大一个弯子去学生物而不去学计算机呢?其实我自己也不敢挑战计算机系,因为我知道难度太大了,但是我又很想到北京去,就想了这个暗度陈仓的办法。我当时还想,考上了,要是不爽,读一年俺就退学找工作。2005 年末的大环境和现在是不一样的,那时候Web 2.0的呼声很高,让我觉得创业比读研有前途多了。不管怎样,我自认为很小聪明,就报名了,当然考完才知道,就为了这两个名额,有40多个人来考。
我要感谢当时同系的两个同学苗文建和王琨,他们都是准备考北大计算机系的,即和我考同样的试卷。他们资料很全,我就和他们一起上自习,蹭他们的看。大四我买书花钱很多,到了考研这时候真是舍不得花七八十块钱买自己看不上的辅导材料和教材,所以就借他们的看。那时候考研的教材是北大的"操作系统"和"离散数学"教材。其中操作系统的教材,行家都知道这本教材参考了不少 Tanenbaum 的作品,我也看过就不大愿意再买一本。前面我提到过,我大一大二做过一本离散数学教材上所有的习题,所以离散数学根本不需要花太多精力。至于政治,我是经历过 3+X 高考的人。基本上考过政治的人都知道,政治考好考差和复习不复习无关,至于和什么有关我就不在这里多说了,总之这个东西并没有深奥的学问,就只是那么几句话车轱辘话翻来倒去而已,命题套路也很容易掌握。做到比命题者更加聪明,对于受过大学教育的考生,是件很简单的事情。我最后考研成绩还不错,撞大运考了个专业总分第一,其中数学完全是离散数学的功底,考了136;英语也是靠准备 GRE 托福的底子,考了差不多80;政治也差不多80;专业课运气很好,正好90分搭线。于是就这样糊里糊涂地考上了。
考研这个事情,我至今觉得运气远大于真正的付出,结果也非常出乎我的预料。记得结果刚出来,同学帮我查分的时候,我根本不相信自己考这么好,还放话说如果考这么好,请全宿舍吃饭(我记得当时兜里面只有200块钱,根本没法请人吃饭,后来还是借钱请客的)。考研结果出来之后,迷茫的我得到了一个非常好的保底,我就比较得陇望蜀了。其实在当时我的心里,我并没有认真想过以后要具体干什么,只是隐隐约约觉得要不去北京,要不就去美国。有了北大这个机会,我就调高了自己的心理标杆,定下了两个大的具体目标,或者说是圣杯,一个是进 Google 中国,一个是到美国名校读计算机,有了考研这个保底,在2月份过完年,我就不慌不忙地认真准备这两件事情了。
面试题怎么还是那么熟悉
我10月份的时候给 Google 投了一份简历,很快在11月份就被拒了。而我的搭档李获鼎在签了 IBM Offer 的第二天,却收到了 Google 的面试邀请(我相信凭他的实力,如果晚一天签 IBM,他现在也应该在 Google 了)。我听了之后觉得很奇怪,按说我们两个,做的项目是一样的,学的科目也一样的,写的简历互相也看过,背景也都差不多,我被拒了,他被邀请去面试了,我隐隐觉得有什么地方不对。我的不服气,反应在行动上,就是每天上网看 Google 中国最近又招了几个人、怎么招的。那时候互联网上盛传的故事是一个人给李开复用很多不同的邮箱发邮件,以保证简历能够万无一失到达,结果瞬间被录用了。这个故事的内容和合理性放在一边,我对故事主人公的精神很感兴趣。我觉得我也可以再试试,说不定坚持就是胜利。正好那个时候,Google 的一些副总裁到北大有个宣讲活动,说好了现场接收简历的。我从当时在北大的女友那里得到了这个消息,回来把简历梳理了一下,让她帮忙打出来,又交了一次。这一次,简历直接交给了某个副总裁,成功了!几周后,Google 中国的 HR 就给我打电话,安排机票和宾馆,让我去北京面试。
面试的过程其实平淡无奇,题目不是《编程珠玑》上的,就是《计算机程序设计艺术》上的,再不然就是网上贴出来的。我个人感觉,面试题就那么多,多做做基本上就了然于胸了。我从找工作一开始,就做了个有心人,每天都上网看面试题。 这次面试前,我又把《编程珠玑》这些书复习了一遍。同时我知道自己在面向对象编程方面很欠缺,又看到有面试过的人说面向对象也考,就顺带看了《设计模式》。我还比较有心,花了几个晚上,捣鼓了一个移植于 Mac 的、基于 MVC 的可以当场演示的 Java 小游戏,面试当天我还给面试官演示了这个小游戏的架构和用到的设计模式,这样,我感觉,自己面向对象开发方面的弱点就让这个小游戏的演示给弥补了,面试官也一致说好玩。
很快,四轮面试结束后,HR带我去见李开复博士。李开复博士是个风趣的,或者说很善于观察人的人。他见到我的第一句话竟然是半调侃的"小伙子,我们 Google 不能解决北京户口啊",我承认当时的确穿得很民工,因为网上说Google 是个很随意的公司,我是继续以凉鞋装备和鸟巢一样的头发去面试的,但是我还真的不是为了北京户口才去 Google 面试的:。我之前也做了一些功课,了解了一些李开复博士早年做的工作,所以谈话进行得很顺利。说了一会儿后,我就抛出了为什么 Google 拒我一次又让我再面试这个问题,他说这事情还很罕见,要是我再网申,基本上简历是不可能浮出水面的, 因为数据库里面已经有标记了,不过我这样二进宫算是精神可嘉。这时候我才回忆起面试的一个MM手上拿的简历,的确是我第二次提交书面简历的复印件,而不是网申的打印版,可见还是坚持再投一次好(这个坚持,我也是和搭档李获鼎学到的,IBM 二面就有拒他的意思,他要求面试官再给一次终面的机会,结果他的终面刚结束,面试官就和他握手恭喜他加入 IBM 了,所以面试这个事情,坚持到最后的才是胜利者)。当天和李开复谈完出来,HR 冲我笑笑,握握手,说,就你和他谈的时间最长。我基本上知道,这个事情成了。
误打误撞,选择了出国深造
在找工作的同时,我出国的事情也没闲。我觉得直接靠寄材料申请计算机希望渺茫(我先前直接申请了几家数学和计算机,都是拒信飞飞),所以我就押宝在套磁上。在寒假之前,我就觉要写篇有点质量的论文发表一下,才能让申请材料有分量,否则招生的未必看得上我这个数学系的、没有任何计算机背景、成绩又不特别顶尖的学生。于是,我就回忆以前乱读的一些论文集和书,再找看有没有最新的值得跟的工作。就这样不着边际地乱找,还真的就碰到了一个感兴趣的题目、一个不大成熟的想法和一个正在征稿的会议。于是,我迅速地开工。凭着数学功底、编程功底和 LaTeX 熟练程度,几天就完成了文章主要结果和写作,然后就是写程序、做实验,并且不断地改很烂的英语写作。我的运气很好,选择的题目也不是很难,所以七天之后,我压着截至时间前几分钟,把文章提交了。2005 年的 LNCS 还是被 SCI-E 索引的,所以我觉得这篇论文分量还可以,更新了自己的简历,一边准备考研,一边开始和美国的教授套磁。
我现在的导师 Yixin Chen 是一个非常杰出的年轻教授(科大少年班出身),我和他套磁的时候,他刚刚从事教职,因此很需要学生。我之前给他发了几封信,有过短暂的接触。到了4月15日美国大学招生的截止日期前几天的时候,他的另一个原来录取的学生因为某些原因去不了了。因此,当时他就联系我了,告诉我说,我可以过来美国读书,做他的 Research Assistant。那时候我还在等 Google 中国的 Offer。Dr. Chen 就对我说:"拿 Google 的 Offer 不难,我也拿过。 你读了书以后也可以拿美国 Google 的 Offer ,但来美国读书的机会就这么一次。"那时候我想问题并没有现在这么深刻,加上比较想去北京,因此一直犹豫不决,还在催 Google 的 HR 快发 Offer,心想你们哪个 Offer 先到我就从了哪个算了。我父亲、我叔叔都不含糊,一个一个地轮番教育我,加上我导师后来说了上面这番话,我就不再犹豫,承诺他我一定接受这个 Offer。接着,我告诉了 Google 的 HR,说我不去了。就这样,我所有的自己认真谋划、认真准备的路都没有走,反而最后通过误打误撞和套磁,来到了美国。
结语:非没用,兔子洞
总的来说,面试也好,考研也好,写论文写好,之所以能够比较顺利,我觉得都是大一大二一个键一个键敲出来的,也是大三一本书一本书读出来的。我写这篇文章的时候,把相关的前因后果放到了一起,是为了解释有些事情的前因后果。不过我不想给读者一个误解,即我恰好运气特别好,一路直行没有任何弯路。相反,我觉得我走了不少弯路,但是我很高兴走这些弯路。比如说,我上大学的时候,很多精力花在了做数论题上,《现代数论经典引论》这本书的习题我差不多一题一题都做完了,但是我出国申请学习数论没拿到中意的 Offer, 现在也不从事相关的研究,所以这些积累至今没看到有什么直接的作用;我一度认为自己要做一个电子工程师,我大一大二还旁听了电子系的模拟电路、数字电路,还混到电子系实验室学 ARM 开发板, 但是现在这些除了吹牛外也没什么作用,学到的一点皮毛也还给老师了。我是个兴趣很广泛的人,看过的杂书、做过的笔记,最后有用的,我觉得有十分之一就已经很好了。大学的时候,为了让自己精力不耗散, 我限定自己每次借书,一定要保证四本计算机/数学,外带一本社科人文书,还有一本任意的书,而且那四本一定要做笔记精读。 因为这样,我才能够最终没把有限的人生耗费在无限的浅尝辄止上。
即便这样,如果纯按照现在需要的知识看,我在"没用"的东西上浪费的时间还是很多。不过我倒不愿意称这些为浪费,在我看来,成长路径中有很多的偶然,没人知道在一些关键时候需要什么样的知识储备,所以踏实地多储备一些是好事。我在大四的经历和其他的一些经历都告诉我,以前通过看书、自学,彻底地弄懂的一样知识,会在某个不经意的时候,突然被用到。这时候对当年积累的庆幸和再发现的快乐,就像蓦然回首见到灯火阑珊处的秋水伊人一样,是没法用文字描绘的。另外,我有个切身的教训,就是要踏实地积累。我读书涉猎很广,很多东西我都能大概知道怎么回事,但是就是学得不深刻,所以即使当时花了很多力气,需要的时候还要花大功夫重头捡起。所以我的教训就是,与其两个半瓶水,不如一个满瓶水。这个道理用在读书上就是说,一本好书读两次要胜过两本好书各读一次。要是大学能重新来过一次,我会少读一些书,多读透一些书,这可能是我觉得当年猛读书的唯一遗憾。
小时候我嗜书如命,我爸爸老是担心我会成为一个不懂人事的书呆子。大学中的我,几乎天天泡在图书馆,可以说是个不折不扣的书呆子。其实除了读书外,我的大学生活的其他方面也是很快乐的。我有玩得非常好的同学们;靠着帅哥室友们的魅力,我还常常和他们一起,和联谊寝室那些青春活泼的姑娘们打球、打牌。我还谈了一次恋爱,让我对感情的事情有了深刻的认识。这些事情,交替地穿插在我这个书呆子平淡无华的大学四年中,让我的大学生活如此美好,但这些细碎的星星点点的人生经历,都不足为外人道了。
我的大学四年,一头扑入了读书中, 就像掉入了兔子洞的爱丽丝。在读书这个兔子洞里,那些经历的迷茫、挫折和奇遇,都是上大学之前的我不曾想象的!我不算一个合格的学生,我忘了不少任课老师,忘了我的学号,忘了班上不少美丽的女同学的样子,却没有忘记某个夏天的中午,汗流浃背的我冲进图书馆,跳入一阵凉爽的书香;以及某个春天,我在草坪上读书入了迷,喷水龙头把我后背全打湿了还浑然不觉。这就是我对兔子洞的最美好的记忆。
网友跟帖
Hu Yiqun said,Aug 8, 5:34 pm
我总结类似你和刘未鹏他们成长的经历,有几个共性是相通的:1. 恒心,十年如一日,坚持做一件事,自然就能成为这方面的专家; 2.兴趣,兴趣是你的契机,坚持做一件事,自然会遇到挫折,只有兴趣可以使人坚持,进而突破。
Peng said,August 6, 2009 @ 11:11 pm
作者和很多大学生一样,情绪在自卑和自负间波动,常因看不到未来而迷茫,作者没有选择逃避或在游戏或者小说的虚拟世界里麻醉自己,而是踏踏实实的在努力进步,所以当机遇到来时自然迎来了收获。
Jun Yang said, Aug 7, 9:19 am
作者应该写一些不太成功的和如何从不成功向成功转变的经历,以及相应的心态转变的过程。这篇文章对"弯路"的着墨较少,容易让人在读完这篇文章以后,只关注成功的一面,而忽略了成功背后的努力和弯路。成长不是一件轻松的事情,如果读者过分关注成长后的结果,忽视了对成长之前的过程的关注,容易被误导。对你的成长影响最大的是:1.儿时的父亲启蒙;2.大二时同学和叔叔的影响。第一点大多数人无法复制,第二点机遇,也和第一点直接相关。至于,其他的结果,我倒觉得是水到渠成的事情了。
laihj said,Aug 7, 9:26 am
我倒觉得无所谓复制,一个人的经历本来就只是参考而已,笑来老师就写过"小心所谓的成功学"。写的人把自己的经历写出来,看的人看了觉得有点教益很好,完全没有教益也不必放在心上。真正的学习本来也不是完全通过他人的经历获得的。有那么一些可以借鉴的地方就够了。对我而言,怎么借书这段就可以借鉴。
陈华 said,August 6, 2009 @ 11:59 pm
我觉得作者很大程度上得益于小时候的家庭环境。家里丰富的藏书、和作为知识分子的父亲都能对成长起很大作用。我父母都是农民,上初中一起没有机会碰到任何有益的书籍。独立思考和勤奋上进的能力不是与生俱来的,后天的环境太重要了,等我知道这一点,我已经坐在高三无数参考书堆前面了。到了大学,更是疲于应付各种琐事,只能边看作者的博客暗想以后有孩子了要怎样。
Mikster.Z said,Aug @7, 3:02 pm
对我来说,我经历过挫折。时机错过的始终是错过了,与其修补过去的缺憾,不如开创新的目标。家庭背景这种东西,没有就是没有,我们能掌控的就是我们的现在。