在CSDN论坛上,曾有一篇主题为“这里90%的程序员根本就不算程序员”的热帖,其中谈到,很多自称程序员的人其实都不算程序员:
不会电脑的人不算程序员——很多搞Web开发的人没有上过几个优秀网站;搞桌面开发的Word都用不熟练;甚至连自己电脑里面有没有病毒都不清楚的人不算程序员。
除了C++、Java和.NET以外不知道别的工具的不是程序员。 把C#和ASP.NET画等号的不是程序员。 不理解计算机体系结构的不是程序员。
不理解数据结构的不是程序员。
对设计模式一窍不通的不是程序员。
将设计模式视为圣经,并且过度设计的不是程序员。
没有软件工程意识的程序员不是程序员。
在这里提问却错字连天的不是程序员。人类的语言都掌握不了,面对呆板的计算机,你写的代码会错漏百出。
在这里提出简单问题,别人给出方法,却连搜索和尝试都懒得做的不是程序员。程序员面对的是挑战性的工作,至少是踏实的工作。
在这里寻找免费代码,或者干脆提出一个庞大软件需求,等待别人直接奉献成品的不是程序员。不理解自己工作价值的人,不会干好工作。
不会沟通的人不算程序员,程序员的工作就是帮助一般人和计算机沟通。
用过编程语言,知道很多平台,但是写不出高质量代码的人,不算程序员。
花一个月编写一个简单数据库程序的人不算程序员——他们的开发效率和代码质量不如代码生成器。
收入在5000元以下(发达地区10000元)的不算程序员——程序员是智慧的群体,如果用你的智慧都达不到脑力劳动者的中等收入,怎么能算程序员。
最关键的一点:不热爱这一行的不算程序员。
其中虽然有一些说法比较偏激,但是总体上是经过深入思考的产物,发人深省。
无独有偶,国外一家技术公司RethinkDB在其官方博客上也谈到这个问题,抱怨了找到一个真正符合要求的程序员是多么艰难。外刊IT评论编译了这篇博文,全文如下:
我们积极的对外招聘已经有四个多月了,如果要问从这次经历中有哪些收获,我只能说,我终于明白,Jeff Atwood在FizzBuzz这篇文章里说的并不是玩笑话。(译者:这篇文章里说程序员不会编程)。
在新成立的公司中,我们RethinkDB公司因面试过程最为苛刻而出名。这是事实——我们对面试过程不会有半点妥协。我们期望通过最大范围的筛选来建立一个高质量的开发团队。对于这个初衷,我在之前的一些文章里提到过多次。在过去的几个月里,我们遇到不少人认为我们的要求高的有些离谱,以为我们是在招聘同时具有量子力学和计算科学双学位的火箭专家。这是误解。我们只希望招的能编程的程序员。
为了满足大众的好奇,我们公布了一些冒烟测试过程(smoke test),这个过程只是半个小时内的一次电话交流,大概20个候选人中有19人通不过这个测试。(这些候选人都是经过简历审查筛选出来的)。我们并没有要求他们对一个复杂的算法提出解决方案。我们并没有让他们去做脑筋急转弯问题。我们并没有让他们做复杂的指针算法和操作。就像下面的这个问题,绝大多数的应聘者都不能正确的解答,甚至做满半个小时,甚至给了大量的提示的情况下:
请写出一个C函数,实现反转一个单向链接表的功能。
就这样的一道题。我们选了一些简历写的让人不可抗拒的应聘者(包括做内核开发的,编译器设计的,还有一个哲学博士学位的),没有人能正确的编写出来,不管给他们多少时间。
我们当然也问了些其它问题。把N个元素插入到一个Vector里(或者ArrayList,或其它的你所选择的语言里被称作动态数组的东西),最坏的最复杂的一种运算情况是怎样的?我们并不是考察应聘者对这个数据结构的了解程度,我们只是希望他们用自己的见解阐述一下。我们会告诉他们vector的内部工作原理。你们知道吗,我们甚至接受O(N log N)次这样的答案。
如何实现一个读-写锁?我们并不要你通过电话编写出这样一个程序。只是说说方案,如果你的方案里能提到饥饿矛盾问题(starvation issues),那我们就算你中了头彩了。我们真的希望老天能不拘一格降人才,可是我们真的没有找到这样的人。
我们试探着询问多任务运行的合作模式和抢先模式的区别。我们试探着询问条件变量的工作原理。20个人中有19个人从头至尾一句话都没说出来。
为什么我们会询问这些很特别的问题?因为这些知识对一个大学毕业生来说是他们所学的全部课程中最核心的部分,因为这些知识在我们的日常工作中会以这 样或那样的形式被使用。而且,在这四个月的招聘中,我们发现,如果你能理解线程和协调进程的区别,你就能知道如何反转一个链接表,如果你对条件变量有了基 本的了解,你就能获得更多的机会在众多的应聘者中证明你是个更好的程序员。很多的人都做不到这些。
我们希望所雇佣的程序员拥有比我们上面所说的技能更多的能力,而且我们不认为这些要求很过分。只是希望你们对基础知识有扎实的掌 握,有潜力去完成艰巨的任务,对你们所开发的程序有虔诚的热爱。引用我的同事第一次听到FizzBuzz里的言论时的反应:“如果他们不能编程,他们能干什么?”挑选简历需要好几个小时,每个应聘者需要20多分钟进行冒烟测试。然后面试过程每个人需要45分钟。整个过程差不多要15个小时的工作。这占用了一个懂技术的工程师大量的时间去发现一个可用的候选人。
真正的程序员,请你站出来!