给程序员新手的一些建议

给程序员新手的一些建议

前段时间因为实习生计划花了很多时间做了实习生招聘的工作,产生的一些想法,写在这里。

这次招聘过程中,我发现我们在校的学生有下面的这些特点:

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 ,请勿用于任何商业用途)

好烂啊有点差凑合看看还不错很精彩 (62 人打了分,平均分: 4.48 )
Loading...

给程序员新手的一些建议》的相关评论

  1. @陈皓 说出了我的心声,本人大二,相信能力论。我看到周围一些同学成绩很高(卷面分数),但其实他们是不会编程的,他们只要背题目,背理论,考试就能拿高分,能高分毕业,甚至可以说根本不需要很懂编程就可以拿到一张不代表能力的文凭,这可能解释了为什么出现上文所提及的“有个同学花了十分钟都写不出从一个整型数组中找到最小的正数的代码”。对于大学的教育不想说太多了,说多了无用,倒不如自己做好更为实际。

  2. 作为求职者也挺郁闷,面试时想试出真实能力感觉真不容易
    会coding,欠缺理想的词藻忽悠面试官

  3. 招聘就招聘,还搞出这么多的道道。呵呵~~我觉得网上给新手的建议都太多了,干了几年就要给新手提建议,新手不一定能看得过来呀~~:) 对于需要招聘人才的公司,比较糟糕的情况就是招聘新人怕风险,招聘熟手有没足够资本能吸引人家过去~其实不光新手程序员,我觉得招聘公司同样也要务实些才好。
    PS:观点归观点,博主的文章不错经常有一些原创的想法,我经常看~

  4. 现在招募的实习生很少有自学能力的,一般都要手把手的教,一个点没教到,自己也不会融会贯通,举一反三的。别举一反三了,能举一反一我就谢天谢地了。

    很多实习生离职的时候,理由就一个:我在这里学不到东西。
    公司的培训固然很重要,自学也很重要啊。等着别人喂饭是永远都长不大的。
    想当年我刚工作的时候,那个废寝忘食啊,那个勤奋好学啊。
    现在的实习生进公司半年,会的还是刚进公司的时候的那些。
    唉,一提起实习生我就怒不可遏。

  5. 隐士 :
    因为大学没有教育出刚毕业, 公司就能用的人才, 就说中国大学教育失败, 好像不对吧.
    高校本来的就是要教育通用型人才, 不是为某某公司教育人才, 那样的人才是职业技校出来的.
    如果一个学生在校的基本理论知识很好, 对于编程这种事, 花半来个月就OK了, 个人理解.

    不得不说,你不适合来这个博客,这里的文章你看了没用。

  6. 我对大学教育也不太感冒啊,虽然我还是一个傻逼呵呵的中学生,自己学学算法。但暑假了,隔壁的计算机专业生回来了,似乎他的大脑比我还空啊(偷偷笑)

  7. @隐士
    Hi, 隐士 : I bet you are not an engineer yourself. Engineering is very hands-on. And it takes years of practice to be a good software engineer. To say you can master the art of programming in half a month is like learning driving by reading driver’s handbook for 4 years and sitting behind the wheel for two weeks. College degree by itself does not necessarily warranty you to be a good programmer. As you know, there are a lot of reckless drivers who own driver’s license.

  8. 嗯,我感觉我都是被面一些非技术的问题,然后不过的。我唯一过的一家,就是因为它考我的上机了。每每看到有博主说被面的人怎样的不会实际写程序,我就灰常的纠结呀。

  9. 哈哈,本人从来就没有去上过什么科,除了C语言其它纯属图书馆自学。反正我们母校大学老师多数不务正业!

  10. 学计算机,不从敲写代码开始,以后就悲剧了。面试就能看出来啦,那么简单的代码,说得头头是道,就是写不出来。
    对于书上的一定要实践!

  11. 我以前喜欢面试的题目有用C写出一个能编译执行,能上生产线的打印”Hello World”的程序。有写不出来。写出来丢三拉四的有的是。

  12. 很不喜欢,语法写错了的人,例如C/C++里落了分号的,说:编译器可以差出来。好比记者写稿让总编差错字。

  13. linzhi :
    感觉你能力还是蛮强的,建议你去外面闯一闯。IT的 北京 上海 深圳 杭州 武汉 广州。这样 你的路会宽阔很多@elephant_liu

    我觉得我还是很菜B的。回这个帖完全是一时冲动。听了一些大牛的建议,我还是老老实实在大连扫地吧。

  14. 我在的公司还好,当初面试也没出多难的题目,不过公司里做的东西很不一样,做模式识别的.还有一个是应用方面的.原来我打算做应用的,不过老大偏要我搞模式识别.现在基本上还是学的阶段,最近在看MIT的<>http://www.verycd.com/topics/2866957/

  15. 我觉得倒是也不能怪那些没有自学能力的实习生们。实际他们不见得真的没有自学能力,而是对于计算机这块的知识没有而已。而且很可能也不是没有自学的能力,而是没有自学的兴趣,也许他们看到编程环境,就烦得要死。他们在高考填报志愿的时候,根本就对计算机科学没有什么热情,也许他们知道的,只是这个行业目前比较好找工作,平均薪水比较高而已。虽然在大学里也能取得不错的成绩,那也只是应试教育的延续。对于抱着这样心态的芸芸众生们,又能要求他们什么呢。要怪就怪现在的教育太龌龊,太泯灭人性和理想。

  16. 看了您之前写的“别的程序员是怎么读你的简历的”与“我是怎么招聘程序员的”才发现自己简历有很大问题,是说自己简历被刷率一直这么高,果断觉得自己应当改简历了。

  17. eric :
    code review 是不是一个冗余的过程呢?只要你Unit test 写好了,我PASS了,那还有什么问题。

    对于编程风格、易维护性、效率等等方便的考虑,unit test是无能为力的

  18. 您说的是不是太片面了?我在的学校(就不说名字了吧),我本身是数学专业的信息与计算科学的,针对您说的问题,我有如下感觉。我觉得,第一,现在在和一个老师做项目。却是,弄的是比较前端的东西。要么,学校不给批准呀。具体研究什么成果。要看指导老师,有的老师负责,当然就懂得多。我认识一个别的学校的同学,虽然没做过什么项目,但却是对linux很了解。第二,我觉得算法这个东西吧,看个人,并不看专业,很多非计算机专业的人都很好的。反而,计算机专业的学生出来以后,连个quicksort都写不出来。应该是看兴趣,这里我并没有鄙视计算机专业的学生。他们有他们的注重点吧。第三,您说的第三点是不是有点夸张?至少对我来说,和我对周围同学的了解,确实是。虽然说,很多人会去混,但是那些不混的人,也没那么少 吧。

  19. @mrseacow
    对,同意你的看法。估计,只有那些中下游的同学才会毕业了去找个公司,当然,我说的是大部分。好点的,要么出国,要么继续读书去了。

  20. 学生在学校首先是要毕业,毕不了业什么都是扯淡,企业必须考虑这点。而为了毕业,本科生就是要学习学校琳琅满目的各类综合性课程,修满学分,然后就是毕业设计找工作,基本上没什么实际编码能力;而研究生,平时的项目是要跟老师走,满足老师的论文和科研需求为首,否则也是毕不了业的。能否在实际应用中练习编码能力也有很大一部分看项目和科研任务,可是谁能保证真的有那么多锻炼编码能力的项目呢,所以用人企业也应该现实点,不要总想坐享其成的招到很多现成的劳动力。人家那些大型跨国公司,不管多小的岗位都会至少给其员工进行三个月以上的入门培训的,而且在工作过程中每隔一段时间也会组织技能培训,这是公司为了发展应该付出的成本。不要贪婪到只想获得眼前劳动力和暴利,要规规矩矩的搞经营和人力培养才是王道。

  21. 要求还真高,如果什么都会,就不会去你们公司当实习生(去学点东西了),不如把这时间花在考托考G,留学/移民等事宜去了,反正都会了,毕业直接找个好公司挣高薪去了,反正公司要求的技能都会了。

  22. @dogliu
    咱也读过大学,而且也不是烂的大学。毕业很容易的,一门课复习两天就好了。那每一个学期剩下的200天你干啥,不编程?那倘若你不编程,那配不上人家公司你也只能怨自己了是不?

  23. @dogliu
    然后倘若喜爱编程,怎么说放假出去玩以外也顺便折腾几天是吧。那四年本科下来,就有1000天了。每天5个小时,距离人家的成为NB的人的10000小时,也已经一半了啊。因此我觉得那些破面试题,倘若你没有瞬间秒掉他们,你是对不起列祖列宗的。

  24. @dogliu
    你看这要求多低,一年365天,你可以休息115天,好好编程250天,每天5小时,很轻松地把。一天24小时,8小时睡觉,4小时吃饭洗澡,还有9小时可以去玩游戏泡妞干这个干那个,我觉得一点都不辛苦的。

  25. @dogliu
    那你说这么多大学生连破面试题都答不上来,你不觉得这是他们的耻辱吗?倘若他们立志将来不当程序员就罢了,那他们可以不去找程序员的工作的,这样就无可厚非了——那只是读错专业,不能怪他们高考的时候犯下的错误的。

  26. @vczh 一门课复习两天,那你真正好好学习这门课了吗,要知道基础很重要,对于科研尤其重要。难道你认为大学就是为了培养技术工人?如果没有扎实的理论基础和在此基础上的科研创新,中国的科技创新和自主研发谈何实现,就凭这些山寨外国创意的企业吗?不要满脑子里面都是盯着钱和利润,中国现在如此乱象就是拜金主义和唯利是图造成的!!

  27. @vczh 你觉得大学教育都是编程吗?大学时科研机构,不是培养熟练技工,更主要的事对于新领域和新事物的探索,还有培养各种综合素质,包括思想道德和艺术情操。大学不是给企业制造立即可用的零件的工厂,大学是对一个人一生和方向的塑造。每天光编些代码是不能塑造一个人的人性和品德的,只能早就书呆子和过劳死的IT工人。

  28. @dogliu
    要面对现实,倘若你在大学获得不了这些教育,还不编程的话,跟自暴自弃没有区别。而且你等到了大学才塑造人性和品德你不觉得太晚了吗?

  29. vczh 和 dogliu 的评论,其实很在点子上。
    本来大学本科级以上的教育,就不是培养技工的,但是本国的现实是,职业教育完全跟不上,高等教育水平低但毕业生又相对过剩。本来就没地方去科研,而需要技工的地方也少得可怜。所以大学毕业生就很尴尬,典型的牺牲品。
    至于说在学校编程,说白了,刚入学时,谁知道自己毕业能干什么,又有几个人上的大学真是自己想上的,学的又是自己想学的专业。
    我在大学时算是vczh推崇的那种类型的,写了很多代码,大三开始跟着老师做项目,大四和学院一博导手下的博士生一起干活,毕业找的工作在同学中想必也是较好的。但是,同批来公司的人当中,也有很多连stl是什么都不知道,3个月试用+培训过后,其实工作都能拿得下来。
    能写算法,能做算法分析,我并不觉得跟那些本来啥的不会的人比起来有什么优势。
    说这么多,想说的是,其实现在的公司就是不缺人而已,职位绝大多数没有任何技术含量,极少的真有技术含量的职位,也根本不会找应届生做。面试笔试神马算法,神马能力,都是扯淡。面试官只是凭自己比较感兴趣的东西,或者看到文凭很硬甚至全凭心情决定了职位给谁不给谁,但是,那份职位到底要多高能力,真不见得

  30. 还想说点儿,博主提到的所谓实现一个算法,不知道是什么编码复杂度的。记得博主过去的文章还提到过倾向于让应聘者用笔和纸写程序,这纯粹都是个人脾气问题。我就很很很恶心用纸写代码。可以下算法思路还可以,直接用纸写,估计要用键盘的3倍时间都不一定。最大的问题是不能往前面写过的代码行中插入东西,总要返工或者改变代码结构,很影响流畅度。
    再说了,30多行代码的算法并不见得就很好写,比如用二分查找的思路找出数组中第N大的数,这个ITA中很basic的算法,包含了循环,递归,边界条件检查,不是正好刚写过实现来面试的话,直接用纸,10分钟能做完绝对是人才。
    招聘嘛,你在那个位子上了,有话语权了而已,想怎么面是你的事,但不要说的那么高深变态

  31. 看了博主没接触到什么好的学生,一个上海紫竹科学园内最大IT公司的实习生飘过。

  32. @Daniel
    我08年的时候也在紫竹科技园最大的IT公司当实习生,然后轻松转正,然后觉得上海的生活跟我格格不入,然后现在是中关村最大的IT公司……话说博主编程功力了得,想去做一个FTE显然是不费吹灰之力的。人家跟您的理念不合可不能是您质疑人家水平的理由啊。话说求alias……

  33. @shuiren
    这证明了您远远超过了公司所需要的人的水平,那您是否可以考虑一下另谋高就,总会有地方可以让您的长处变为优势的……

  34. @dogliu
    甭扯淡,谁没念过大学?
    “本科生就是要学习学校琳琅满目的各类综合性课程,修满学分,然后就是毕业设计找工作,基本上没什么实际编码能力”
    这样的大学生真是辛苦啊,可惜啊,真人版本闻所未闻,这话就跟我念大学忽悠我爸生活费的借口差不多,不断的告诉他我学业多忙,挂了电话该睡睡该玩玩。骗谁啊。

  35. 那些学校里面所谓的”NB的项目”很多都是经不起敲打的,我是一个学生,参与过所谓的NB项目,大多数都没什么难度,只是非要往高科技绕罢了。事实上很多项目都做的一塌糊涂,连基础工作的有问题,上层建筑怎么能做得好。

  36. @威晒
    我也不建议你的放弃所有学校的东西去自学,我觉得你的内行不能够那么强大。且不说每年的奖学金可能没你的事儿了,等到大四上保研考研的时候你就傻眼了。我是很有体会的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注