为什么研究生都走光了

研究生走光图

今天是7月23日,距离这次.NET Training A班开始的日子整整3周。当初一共有16名同学,其中的4名研究生到这周为止已全部放弃。剩下的14名本科生,除了1名因为违反安全规则和触犯诚信价值观被离开,其余都各自为自己的Training project坚持奋斗中。

我在跟同学们群聊和私聊中了解到,大家都不约而同的发现一个现象:放弃的恰好都是研究生。面对这些研究生的放弃,剩下的同学并没有表现出因为他们的放弃而影响士气,反而有了一种另外的自信。无疑,研究生和本科生的话题再次被端上了大家午饭和晚饭的饭桌上。

这4个研究生都很典型,是一个很好的案例集。

研究生A,男,计算机专业。在开班的第一天,他宣称不知道为何被分到.NET来了,他说他学习Java编程“好久了”(大概看了2个月的书),强烈要求换到Java组。考虑到他的技术基础还不错,又有强烈愿望做Java,于是联系总部费尽周折将他调进Java组,不久后离职。原因不详。

研究生B,女,很少看见过笑容,脸总是皱的。原来学Matlab,C/C++,通信相关专业,.NET技术或者说软件技术基本为0。原来的C/C++仅限于课堂老师布置的作业(上过大学的你们都懂的),学习态度也不太认真,对基本企业的安全流程也掌握的不好,作业质量更差。在Project Plan的评审会议上,我跟大家一个个过作业。她的作业被拿出作为很差的案例,差不仅在方法,还在态度。结果出乎我的意料,她已经在前一天交完作业后就再也没来公司,第二天早上打了个电话给经理说学校导师不让来了。她就再也没出现过。

研究生C,男,非计算机专业,一个很帅很高的小伙子。以前学通信,技术基础为0,连类都不知道(看来面试后到现在根本就没学过)。很努力的去完成作业,QA的作业质量还算高。可是就在交项目设计文档的deadline前半个小时,找我谈话说对.NET开发没有兴趣,自己想还是从事自己的本专业C/C++,起初是想进企业实习为自己的论文服务,后来发现相距甚远。果断放行。

研究生D,女,非计算机专业,一个看上去很纯的女孩子。以前学Matlab,C/C++。她听课的态度还不错,但是基本听不懂。作业质量很差。在交需求设计文档的第二版头天晚上,她发了一封中文邮件给我说要放弃,回家跟父母想想。第二天恢复上班说要坚持下去。最后,在交UT code作业的前两个小时里,找我谈话,说她还是决定做她自己的专业,自己的兴趣点确实不在软件开发上面。放行。

上面的4位研究生很典型, 我相信这4个人至少反映了当今校园的一部分研究生同学,不管是技术基础还是职场心态,都和企业所需要的标准相差甚远。他们常常会有的几个想法:
1. 来公司实习是来学东西的。
其实来公司实习不是学东西的,你到学校读研究生才是学东西的,来企业实习是用来产生价值的。从企业角度看,招聘实习生是为了解决当前的需要或者为了满足将来的正式入职的需要,宁愿付工资给你哪怕你现在还没有达到正式入职的标准而以实习生的身份存在;从个人角度看,企业在我没有能够产生标准价值前付工资,理应更加抓紧时间去在工作中拼命学习提升自己,从而产生价值回报。没有一个企业会傻到为只为学习不产生价值的人买单,因为不是所有的企业都是红十字会。

2. 来公司实习应该和研究生学习一样轻松快乐的,至少不能相差太大。
我们的企业很注重人力资源的充分利用,不会养闲人,这可能跟一些大外企或者红会有些不一样。这点从Training Project开始就不太一样,很多人在来实习之前充满憧憬,每天朝九晚五,压力不会很大,有经验的人带你,做不好的工作有人会帮你解决。可是来了之后发现情况不太一样,企业开始玩真的,就给你一个需求,从0开始做一个项目,你在这个项目中扮演所有的角色从项目经理,到设计,到开发,到测试都要体验一遍。很多东西你从来就没认识过,如果你真心想把这个项目做好,真心想珍惜实习机会,你一定会全力以赴,那这个过程绝对不是轻松快乐的。还是一样,企业不会将你的实习项目中的任何代码用于商业项目,但却为你付工资。

3. 我的学历比本科生高,能力应该也是。
这个想法恐怕是产生上述放弃事例的一个重要原因之一,而由此带来的失望也是最大的之一。试试想想这么一个状况,你和比你小3岁的本科同学生坐在一起,结果你没有他努力,你没有他更有态度,你的Trainer在上面表扬他的作业但是展示你的糟糕作业,你是不是觉得特别丢脸?因为你身上的负担太重,你拿着研究生的学历但是实际上你的能力和你2,3年前大学毕业时差不多,甚至丧失了一些遇到挫折百折不饶以及钻研的精神。这个深究下去会扯到中国的教育制度,但是那就扯远了。
“我的学历比本科生高,能力应该也是”,这个观点不仅你在想,企业也在想。所以企业给研究生的工资要比本科生高,当然,期望就更高。即使你的表现跟本科生差不多,在企业眼中你的表现就不够好甚至很差。那你说,现在教育和就业就这样,那我要求和本科生一样的工资好吧,别对我的期望那么高。这样的话,企业又会担心你的心态能不能坚持这样的想法走很远。
基于这样的事实,我一直很担心研究生在两年读研时间里和大学时期一样混过去,这样教育制度会给你个帽子以及硕士学位,但是中间是空的!说句不好听的话,这就跟现在的牛奶,瘦肉精一样,买东西的人(雇主)花那么多钱,但是没有达到效果,当然会不满意了。
 
4. 我的专业是A语言,我就对A语言有兴趣。
 其实一个研究生的级别根本就谈不上任何的“方向”,诚然你的专业确实是一种方向,但是一谈到你真正能够产生价值却处处没有方向。我们已经很久没有谈论.NET 和 Java哪个好,因为大家都懂的只有真正利用语言实现价值的才能够好。作为一个有志成为软件工程师的人,可以有自己的一个语言方向,但是目标要是把事情做好,而不是纠结于语言本身。
 
5. 我做不好这个是因为我没有兴趣,我只对我有兴趣的东西做得好。
我当时问了某位研究生一个问题,如果我再给你出个Training Project要求你用C/C++实现,你会放弃吗?答案会是一样放弃。因为虽然你做的是.NET项目,但是做项目计划可跟.NET语言本身没有任何关系,我们对设计文档的高质量要求也不会随着项目所需语言的变化而变化。到时候你会遇到同样的挫折,你还是会放弃。也就是说,坚持和放弃之间的选择不是“有没有兴趣”,而是“碰到挫折和困难后的态度”。
 
 这样的结果也给所有的面试官们上了一课,那就是谨慎招聘“跨专业的研究生”,除非他有明显本专业的项目经历或者私下用大量时间研究学习,否则只为拿一些实习经历或者为论文做准备的大可不必浪费双方的时间,这个也是对面试者和企业双方负责。
 
 

新手编程常犯的两种错误

最近做一个项目,带着团队里面的两个新人。两个新人在平时的评价都是非常聪明,学东西很快,可是因为项目原因不得已一直在做一些维护项目,只是修复下软件缺陷,从来没有做过新的项目。而这次恰好赶上我工作比较忙,便有了这次机会。

前两天,随着我开始做代码评审,发现项目上的质量问题越来越多,最后导致其中的一位新人昨晚通宵了,因为他做的一个模块被我看了之后需要全部重写。另外一个新人虽然没有通宵,只是因为他的模块在之前看过,结果也是全部重写。这两个新人的错误很有代表性,在这里马克一下,我认为这些是很多新人编程容易犯的错误。

1. 不读懂需求就开始写代码。

在他开始开发模块之前就强调了N遍,一定将需求仔细读熟之后再动手写代码,磨刀不误砍柴工。那究竟怎么读需求?

拿到需求文档后,首先第一遍要粗略(general)看一遍,知道有哪些模块,揣测项目的模块和现实的联系等等。随后第二遍便细读每一个章节,同时旁边备好问题列表(question list, 通常是由一个excel),争取通读一遍下来便可以在问题列表上有价值的问题。此时此刻,问题列表在这里是为了迫使阅读者提问题,能够提出问题的阅读才是高质量的阅读,因为除阅读外一定伴随着思考。通常第三遍,就会拿到客户的反馈再对照需求文档,甚至在需求文档上做更新,做批注。这时候熟悉的人估计已经将大体框架和具体逻辑线了然胸中,新手的话继续读N遍,一直读到放下需求文档可以独自在白板上演示业务逻辑的程度。最后,再开始动手写代码之前,再针对性地看需开发的功能模块细节描述,同时设计出具体的技术方案,比如什么时候数据从db里面取,什么时候从内存中取,用什集合(collection)更适合存数据,在屏幕加载的时候应该做什么东东等等,这些技术方案可以在脑中,在电脑上新建文本文档,不过我最喜欢的还是在白纸上划,个人觉得思考过程更接近本质。然后,就可以写代码了。你会发现这时候写代码就跟着之前的方案写了,好像在做翻译工作,因为非常重要的设计工作已经做完了。

不可否认,很多时候新手在写代码之前无法将设计工作做到很好,因为本身对代码技术就不太熟悉,这个时候不可避免地要边写代码边设计。但我还是建议设计在前,为代码铺路。

如何检测出这样的情况?一般的黑盒测试就够了,配上QA的问询,马上显原型。这个时候QA讨论需求答不上来,黑盒测试发现和需求不一样,很快就可以得出质量的总体印象。

2. 写代码没有任何思考。

这类同学会仔细读懂需求,但是在实现的时候不会考虑任何代码优化,架构设计,总之一句话:实现就好。这种类型在黑盒测试以及配合少数据量的时候一般测不出来,所以QA会觉得“没什么bug”。一旦上白盒测试,代码评审,那马上会让你七窍生烟。爱循环,也爱遍历,不爱重构,也不考虑性能,做完就好。最后代码评审自然就重写了。

对于这类人,最好的办法便是强调在开发前的设计方案。可以先让他把技术实现方案说给高级工程师听,做到前期评审,这样后期也不会有重写的代价了。不过,对于新人,吃一回亏,呛一口水是好事。在出事之前的任何建议都像教条一样,只有在出事后,知道自己的问题,加班熬夜甚至通宵过后,才会留下难以磨灭的印象,第二次就会重视很多。似乎软件工程师都会有加班熬夜的经历?我的办公室 夜日志