给程序员新手的一些建议
前段时间因为实习生计划花了很多时间做了实习生招聘的工作,产生的一些想法,写在这里。
这次招聘过程中,我发现我们在校的学生有下面的这些特点:
1)NB的项目。当说到自己做过的项目时, 我发现他们做的事都是很NB。要么是研究Linux的底层内核,要么是图像识别处理,要么是推荐算法,要么做高性能计算,要么做数据挖掘,要么是移动方面的协议,还有一些很高深的课题我听不太懂的项目。这让我想起当年我在学校里的实习,对比起我用Java Applet 和 HTML做操作系统的教学课件,或是在公司里用Delphi/PowerBuilder做的那些MIS系统。让我觉得有些汗颜。
2)OK的解决问题能力。当问到算法题时,我发现他们的问题解决能力还OK。我一般问1到2个中低难度的算法题和1个基本的面向对象设计的题,都不难。我相信只要在学校里好好学习的人都应该答得出来。无非就是一些基本的算法和基本数据结构操作的问题,和比较基础的面向对象设计的题,说白了就是作业题。可惜的是,只有5%不到的同学能够在不给提示的情况下答出来,70%的人可以在给一定的提示下答出来,15%左右的同学需要提示到几乎给出答案才能答出来,还有10%的同学怎么给提示都答不出来。
3)WTF的编码能力。老实说,对于解算法题,我还是比较可以接受的,因为80%左右的同学在给予提示后都能描述出解题的算法,于是,我让他们把这个算法用他们最熟悉的语言写出来。但结果让我出乎意料,一段在解法很清楚的情况下只需要不到30行代码的小算法题,只有一个人能在10分钟几写完,其它的人基本所有的需要30分钟左右(甚至40分钟),有2、3个人居然写不出来。有一个比较极端的case是——有个同学花了十分钟都写不出从一个整型数组中找到最小的正数的代码。这个事让我觉得很惊讶,难道大家在做项目的时候不编程吗?
对于这种情况,我想给大家以下后一些建议:
- 我感到我们在校的学生正如“为什么中国的网页这么烂”中所说的——他们习惯于获取大量的知识,而从不对这些知识进行思考和总结。问题不是我们知道多少东西,问题是我们在获取这些知识的时候会不会去思考这些知识后的东西?比如:为什么会有这么多经典的数据结构,数组,链表,树,哈希表,图这些数据结构主要用来解决什么样的问题,他们的优势和劣势是什么?没有思考过,就不算真正的懂,没有思考过,你将无法应对万变的问题,没有思考过,你将成为书呆子。
- 多多实践而不是研究。编程不是在实验室做科研搞理论啊,计算机这本就是一个实践性很强的的学科啊,这不是数学,这需要你多多的实践啊。我们不要真以为读的是——计算机科学(Computer Science )就是搞理论的了,这里面需要很多很多的Engineering的工作。(我实在是很难想像,居然有这么多人写一般难度的程序居然会是那么痛苦的事)
- 我在我的新浪微博(@左耳朵耗子)里说的,我们不要以为做过项目,会写程序,我们就是程序员了。如果你只是在按部就班地写代码,你就是Coder,江湖叫“码农”,不要把自己当成“码农”,我们一定要对自己的代码,自己的设计不停地反思和总结,并精益求精,写程序本来就是一件有价值的事,这就像写篇作文人人都会写,但并不是人人都能把文章写好。编程和写作都是一样的,这都是在搞创作啊。想做“码农”还是想做“程序员”?自己决定吧。
- 我们的教育的确很“废柴”,但这不是我们成为“废柴”的原因。如果我们的学习还停留在“别人给我什么我就学什么”的被动学习阶段,那么你真的不懂怎么是学习。虽然,我们的学校里并没有教你什么是“Version Control”,什么是“Coding Style”,什么是“Refactory”,什么是“Code Review”,什么是“Unit Test”,也没有告诉你一些经典的设计的和架构,等等,等等,但是这是什么年代了?这个时代不是像我上学那时——学校机房里上机用的电脑连内存和硬盘都没有,用5寸的低密软盘面对绿色显示器的286,上网还要“猫”,而且贵的要死(一小时22元),而且网上什么都没有时代了。我们身边有很多很多优秀的人,网上有很多优秀的文章,书店里也有很多不错的书,而且我们的软件开发日趋成熟,如果我们还学不好的话,那么我们就是在犯罪!
最后,和大家说一下公司的实习生招聘。这个事情其实是毕业生招聘的一个组成部分,也就是说,因为我国教育的问题,再加上学生自己的问题,导致毕业生量多质次的情况很严重,对于公司,其很难从学校招到一个比较不错的毕业生,这种情况已经不是新问题了,所以,也有很多公司都不招刚毕业的学生。因此,通过实习机会了解并招聘毕业生成了很多公司的毕业生招聘的手段。所以,在这里想告诉在校的同学们,千万不要以为实习计划就是字面上的实习。其实,这和正式的招聘没有什么差别,同样也要看你的能力的。
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《给程序员新手的一些建议》的相关评论
楼主去 IBM 或者微软的研究院看看就知道了,中国这边的风气就这样,都在写论文,代码都交给外派的小工写,让人无语。
@aisensiy
倘若能进一个IT的好公司,为什么要奖学金(还没一个月工资多),为什么要考研(三年的工资,比起浪费在教授身上学不到东西的那些破项目)?
招一个合适的人真的很难,毕业生就更难了。可老板们偏偏愿意招毕业生,便宜啊。无奈。
仰慕 牛人。。。已很久
@隐士
毕业生招聘的时候,考察的一般来说都是比较基础的问题,比如语言基础、数据结构和算法、操作系统、数据库原理、计算机原理等等,这一点 @陈皓 也写明了。编程是计算机专业最基础的课程,如果连学得最久、后续每门课程都会使用到的编程能力都不行,怎么能证明真正掌握了其他课程呢?总不能说我熟悉各种算法,但是一个都写不出来吧?
@elephant_liu
考虑一下你自己是自我定位过高还是对方面试不合理,如果能找到正确定位和良好机会的话,可能还是能够找到更合适的工作岗位的。
有些东西难道公司一点也不需要内部培训嘛?拿来即用真方便的想法不仅是学生,其实公司不是也是这么想?你所认为的基础的东西,培训一下能花多久?舍不得这点芝麻,于是就满腹抱怨地守株待兔.
说不清楚,道不明白
哎呀,如文中10分钟都找不出最小整数的学生,但如果他基础够好的话,下一次他只需要30秒,而一个月后他就能以接近正式员工的效率去开发了 至于svn,code style 这些,也就几句话点拨一下的事
而如果一个学校里所谓的实践很强的学生,整天到外边收网站做写写flash做做html而不好好的上算法课编译课,那你跟他讲上下文无关语法讲动态规划,估计他琢磨两个月都琢磨不出来吧
while(true){alert(“aaa”);}
@dogliu vczh是我们学校很牛的的师兄….
我始终都认为,算法和动手能力都很重要!!
面试程序员的时候不在乎这个人是否是能很精通算法,数据结构;关键是这个人的做事,和学习的能力;要的是一种态度,就算是新手,他什么都不懂,没关系; 关键是你作为领导者,怎么去领导这一群人去做一件非常棒的项目;我有我最佩服的人,他的学生是一群17,18的毛头小子;在去年的时候给蒙牛做了一个百万级的项目,做的非常好;他无非是在做项目的过程中引导和培养这些学生的学习和理解能力;所以不要说实习生就一定不行,或许他们是可以的,不错的;
我就不得不说了,那些十分钟都找不出最小数的,他学了吗?大一开C语言就有冒泡排序了,冒泡一下总可以了吧,不用选择。还有大二的数据结构,算法设计,连基本的算法都不会,那些研究,说白了就是在打酱油,说那些NB项目头头是道的,你要真让他把那个项目的开发文档写出来看看,你就知道是真是假了。
大哥。。。找个最小数,用for循环遍历一次就够了。@隼人
如何花两年时间面试一个人
老大可以搜搜这篇文章, 本质是引导这些未熟者进入业界环境, 而不是在他们对自己所学感到迷茫, 学校放弃社会责任的情况下逼迫这些年轻人. 我想老大的公司如果能在大一到大二的时点接触这些学生, 引导他们去实践(给一系列课题, 每个领域给一本经典, 参与github的项目), 也就是重载掉学校的教育, 这些家伙还是可以在毕业的时候给你惊喜的.
总觉得老大这篇文章是在对大学呕气, 何必呢 ……
@陈皓
英文不好
这篇文章写到的观点好像和《我是怎么招聘程序员的》相反啊,这边要求把程序写对,那边说阶梯思路才重要。。。
感谢大神
+后悔这么晚才看到前辈的文章,刚毕业的我体会颇深呀
确实,大学这块是完全没有任何编码实践的。只有彻头彻尾的理论学习