必读网 - 人生必读的书

TXT下载此书 | 书籍信息


(双击鼠标开启屏幕滚动,鼠标上下控制速度) 返回首页
选择背景色:
浏览字体:[ ]  
字体颜色: 双击鼠标滚屏: (1最慢,10最快)

我是一只IT小小鸟

胡江堂(当代)
我是一只IT小小鸟
作者序
2009年3月的某个晚上,我跟侯磊同学在万柳宿舍卧谈。我们聊起初来北大软件学院时的志向与苦闷,我们梳理影响自己的人和事,说各自的实习感受和找工作的风风雨雨,说学校的教育制度和各个公司的文化。一夜痛快淋漓地说下来,我们不由总结出,要是研一或更早,有师兄师姐能够这么提醒我们,这一路我们可能就会走得更从容、更自觉。
现在我们都成师兄师姐了,或许我们能够在毕业之前把这些经验教训留下,以期给师弟师妹们一些借鉴与帮助。我联系上博文视点的周筠老师(查看Gtalk记录,是3月16日),说我想召集些身边的计算机背景的应届生朋友,在毕业之前,讲讲自己求学、实习、找工作等的经历与感悟,对本身也是一个"立此存照"和反思自己的好机会。
接下来就是跟周老师还有许莹等编辑朋友的面对面交流,然后与各位编辑一道,去向身边的朋友、向朋友的朋友约稿。为了体现IT从业人员的层次,出版方还特意邀请了几位有工作经验的朋友加入作者群,他们对IT产业与职场的认识,能够丰富我们的视野。
关于这本书的成书过程,有一些事情要说明。我忝列主编之名,其实不过是作为作者群体与出版方之间的联络人,对本书的贡献寥寥,自然不敢贪功。我最先联系的作者是侯磊与唐雅薇,之后大多数在北京的应届生作者,都由他们联系;而北京之外的应届生作者,以及几位有工作经验的朋友,都是由出版方邀请过来的。各位作者贡献初稿后,接下来的编辑统筹工作,也多由出版方的周筠老师、许莹编辑、夏青编辑、白爱萍编辑完成。我们各自零乱的文字,到现在终于集结成书,除了要感谢上面提到的各位编辑老师辛勤有效的工作,还需要提到的是《编程之美--微软技术面试心得》的两位作者:邹欣老师,他一直关心本书的进度,并提出不少中肯的建议;刘铁锋,本来也在本书邀请的作者之列,后由于个人原因撤稿,但他积极参与了本书的前期准备工作--跟侯磊一样,虽然书中没能见到他们的文字,但他们于幕后为本书做的不少工作是应该被提及并感谢的。
人所处的人生阶段不同,立场或视角就不一样。现在我们都已毕业,再要回顾自己的求学历程,可能会用三言两语就把它打发掉,但这些毕业之前的文字,写的都是自己作为学生感兴趣的东西,是自己作为学生认为重要的东西。这种体验很难再现--所幸我们留下的文字不是事后的点评,而是亲历现场的记录。这个集子里记录下的,是我们大学生活所不能绕过的东西:
专业/技术方向选择
社团活动
竞赛
实验室
实习
找工作
出国
技术社区
人际交往
时间管理
压力管理
我们具有各自的独特性--我们兴趣各异,有不同的家庭背景,不同的知识储备,不同的思维方式……但在现实中,我们也会碰到类似的人生选择的关口,我们会犯类似的错误,有类似的迷惘,也会为类似的精彩鼓掌,而且很明显的,我们是类似的一群人--都跟IT沾边。
因此对每个作者而言,这本书既写给自己,也写给所有有类似经历的师弟师妹们。
胡江堂
2009年8月于北京
推荐序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的时候,在管理咨询师和产品经理之间,我考虑的因素主要包括以下(按重要性降序):
个人兴趣;
学习发展机会;
平台及其影响力;
生活方式和待遇。
第一重要的是兴趣,对我来说,兴趣是我全身心工作的基础,也是成功的必要条件。
我很看重薪水和生活方式,但我没有把它放在第二重要的位置上,因为我更看重的是五年后、十年后的薪水,而不是起薪。有一位师兄跟我说过,对于事业起步的年轻人而言,决定未来薪水的,就是你能在这份工作中学到什么,以及拥有这份工作后你能积累什么作为以后的资本。我非常认同这样的见解。因此,我把学习和发展的机会放在了仅次于个人兴趣的位置上。
企业是个人发展的最主要平台。平台的好坏不仅由其大小决定,也在于个人是否适合平台的整体文化和氛围。即使在同一行业中,不同公司的文化差异也是很大的。谷歌相对宽松的氛围和鼓励创新的文化正是我所追求的,我相信这样的文化能够有助于我发挥潜能。
结语:骑单车快乐向前
回顾自己大学本科和研究生的七年,不同的阶段有着不同的目标。不管是学习基础、钻研技术还是找工作,当自己的方向与目标存在偏差,或者向着目标前进的速度不理想时,我总会想方设法地拷问自身,从朋友身上获得经验,对自己做出调整,然后避开弯路,更加接近自己的目标。工作之后是一个新的起点,有着新的目标,我希望自己能够继续适应新的环境,也希望所有看到这个故事的朋友都能在学习、生活中不断地校正自己的方向,骑上单车快乐地向前。
四、唐雅薇 再难也要向前爬
等待阳光静静看着它的脸
重重的壳挂着轻轻的仰望
下一页 尾页 共2页
返回书籍页