来源:http://www.docin.com/p-1438933894.html
今天在CSDN看了一篇文章——《一个假程序员的心里话》,本来以为是谈假程序员和真程序员的区别,谁知一看之下,满篇都在批驳master和doctor。实在是忍不住了,想要为master和doctor说两句公道话。
我现在是一名在读研二学生,在成都一所电子方面还不错的学校读书,学的不是计算机专业,而是信号与信息处理。但由于课题和平时兴趣,计算机方面知识还是有点,不过在那篇文章作者眼里,我连假程序员都不是。
先来说说现今研究生教育。普通研究生入学后,一般第一年学基础课,第二年进教研室做课题,第三年第一学期开始找工作,第二学期忙答辩。总的算下来,真正做课题的时间也就是一年左右。大家都是本科毕业出来,水平也差不多,第一年学的基础课基本上是理论方面的,真正动手的也不过一年时间,而这一年的时间大部分精力都花在了课题上,和课题相关的当然了解就比较多了,其它方面最多也就比本科生多一点。你想别人在一年时间内成为全才吗?
相比之下,如果本科毕业就进了家好点的公司工作,三年的时间都不断做项目,动手能力绝对比一个刚毕业的master多。这没什么好稀奇的,我们从来不认为比有几年工作经验的老手强,相反,我们对他们都很尊敬,知道要学的东西还很多。
但是,光从这点就否认研究生教育,那就大错特错。我们的基础课理论不是白学的。工作很多地方用到的都是应用方面的知识,就算不会,也可以边学边做,但是基础不是那么容易学的。举个例子,我认识一位在深圳某公司工作的程序员,月收入过万,在我看来很牛了,他自称有独立编写10万行代码的经验。现在在搞图像处理,大叹难以下手,还在狠补信号理论,模式识别的几种方法基本不会。自学吧,看公式都可把你看吐血。所以说,虽然我们在动手方面还有不足,但我们有基础,学一样东西可以很快上手,这就是学习能力的差别。当然,和智商无关,取决于基础。
文章作者还说到,面试了很多master和doctor,觉得很失望,说别人不懂数据结构算法。那我要告诉你,你很可能面试的不是计算机科班出生的master。像我们这个专业,要用计算机方面的知识很多,但也停留在应用方面,没有过多的去考虑底层实现问题。就像我们做项目,导师反复强调的是项目算法的重要性,至于你用什么实现,在他看来都是小问题,编程嘛,本来就是件工具。那么,对于我们来说,有可用的现成算法(我是指编程方面的),就不会自己再去做一遍。现在很多公司面试都喜欢考排序算法。我觉得很奇怪,懂几个排序就表明功底强吗?我不认为自己写出来的排序会比c++中的泛型算法强。如果我在面试前看几个例子,对答如流了,就证明我编程功底提高了吗?自欺欺人而已。还有,说我们不懂算法是很不负责任的,至少在我们专业,搞算法的最多,只是我们搞的你不懂而已。这次我们一个师兄面试一家公司,把一个排序算法搞错了,面试人员很鄙视的问:你到底懂不懂算法啊?我听说后很是气愤,我师兄课题是《基于外辐射源的无源雷达定位》,一年多时间全花在算法上了,结果最后被别人鄙视说不懂算法。我问师兄,你当时怎么不反问他懂不懂,让他去推个公式看看,不说7倍音速的导弹,他能推出3倍音速我就拜他为师。所以不要认为懂了几个编程中的简单算法就以为很了不起了,买本书看看大家都会。而有些算法,把公式推导出来你也不一定编的出来。
再说数据结构,说实话,我不是科班出身的,懂的也很少,就几个最基本的你让我表述一遍我都给不出准确的定义。但是,在用到的时候我也能查资料写出来,这本来就不是很难的事情。反而有些面试官,比我们还浮躁。也是个例子,我们教研室一个师兄去面试中兴,他课题是在ARM上做一个消防控制的终端,自己写了个微核操作系统,主要做任务调度。结果面试时还没讲完,一个30岁左右自认为很牛的面试官就不让师兄说了,说别人不懂堆和栈的区别。师兄出来后也很郁闷,说我连内存管理都做了,能不懂这两者的区别吗!我估计师兄是面试时没能把两者的准确定义给出来,所以被鄙视了。但实际上,师兄做这个操作系统时很细心,在做内存动态分配时,想省一个4字节的指针所占的空间,和我讨论了好久。说我们浮躁,真不知道是谁在浮躁。
这也反应出一个问题,就是中国现在的IT行业眼光实在狭窄了点。仿佛要搞IT个个都必须是程序员,没有一个公司重视理论方面研究。而中国的研究生教育仍是苏联模式,着重于理论。像我现在在做一个VOIP网关,想毕业也必须把毕业课题放在《网络性能与自适应纠错》上。教育和市场脱节,却单纯的指责我们混日子、虚度青春,实在是不负责。这样说的人,让他来天天推公式,用matlab仿真一年的算法,就知道这日子也不好混了。
再说说其它的。《一个假程序员的心里话》作者说到写c编译器,好像要会这个才像个程序员。诚然,写一个编译器会对编程的认识有很大的提高,但一定是必须的吗?反正我是没这个兴趣。一方面人笨,怕弄不出来闹笑话;另外也确实没这个时间。但我旁边牛人多,一个同学用FPGA实现了java虚拟机,虽然借助了国外一位博士的经验,但我觉得也够牛了。我对java了解不多,FPGA也只是用过,不精通。不知道一个java虚拟机和一个c编译器谁难,但我认为能用硬件实现,做成个专门的微处理器,实现了几十条伪指令,应该有J2ME的功能了吧。呵呵,这方面我的确不懂,说错了请各位高手指点。
说了这么多,都是说我们非计算机科班的。但我想,既然我们非科班出身的都能做到这些,科班出生的master、doctor就更不用说了。至少我不相信别人连几个排序算法都不会。
最后再说两句语言之争,虽然事实证明了争论这个毫无意义。但因为我最早学的是vb,所以看到有人说它坏话还是忍不住想说两句。《假》一文作者说道:“我真的不敢叫他们是程序员,以为会点vb,能拖一些控件在上面就能叫程序?如果这样想,真的完了!”会点vb就不能是程序员了吗?程序员这个头衔有什么值得炫耀的吗?我是5年前学的vb,3年前转做c++了。我就是只会用vb拖点控件写程序,因为我实在想不出用vb不用控件干嘛。用sub main写个不要窗口的程序吗?那我不如用vc写,毕竟在vb里用api远不如用vc来的方便。但是,vb写出的程序一样可以很优秀。我这个连假程序员都不是的人也可以拖几个控件写一个单片机的开发平台,虽然编译器不是我写的,我也写不出来,用的是keil c里汇编和c的编译器,但我至少完成一个开发平台的功能,还具有某种程度上的软仿真。我觉得,用vb完成的一些复杂程序反而比用c++完成的更应该受人尊重。毕竟能在语言有所限制的情况下做出复杂的程序,往往更能体现出编程人员的水平。比如我们现在做的一个消防监控中心,就是用vb写的,里面的电子地图囊括了矢量图操作大部分功能,而矢量地图编辑器也是vb做的,这难道就不是一个真正程序员做的吗?人家李维老师对Delphi如此精通,Delphi也不见得比vb高级到哪儿去,你能说别人不是程序员吗?
再补充一点,搞IT的不只是程序员,没硬件你程序哪儿跑去。可能也只有中国才简单的把IT=程序员。果真如此的话,我们那10几块DSP组成的运算阵列不知道算是什么。
好了,说了这么多,肯定有很多偏颇之处,只是小弟个人的一些观点,不吐不快。说很多master连专科生都不如,那是可能的。至少我知道有些学计算机的master(不是我们学校的)搞了一个月也没用sockets发出信息,但这毕竟是少数。中国有个古老的成语,是这样说的:如果你用一把牛刀去杀一只鸡,会发现反而不如一把菜刀好使。同样,有些工作只需要专科生做,你让一个研究生去,也不要指望他就一定比专科生做的好。但是反过来,你见过用菜刀杀牛的吗?
**********************************************************************************************************
附: 一个假程序员的心里话
我从事程序开发三年了,不算长,也不算短。在别人眼里或许可以认为高手,但我自己明白,我什么也算不了。
记得还没毕业时,会用tc写几个cai软件,过了语言关,就以为自己是程序员了,很自喜,但毕业后去单位才发现,自己对于程序员这个行当来说仅是一个没入门的newbie.
很幸运的是遇到了张哥等校友,教了我很多,其间学会了web开发,数据库,也略懂了一些tcp/ip协议,以为自己懂很多了。其间到一家小公司作了一年技术总监,感觉不错。后来公司破产,换到一家外企。
在这里又有一番天地,发现自己什么也不是。编程? PHp方面我比他们走得早,会一些。说实话,语言这东西就象英语,很容易过去,关键是思维方式和经验(当然包括算法)。网络方面?在这里才开眼,我先前的那点功底只能算入门级,这个公司ccie就有4个,ccnp一堆。 接触了一些unix,专用服务器,大型数据库。 后来跳到一家网安公司,作了一些驱动。现在在一家公司负责产品研发管理,同时也兼作开发人员。时常也有自己感觉不明白的东西,计算机这东西,需要学的太多,而且你不能学会了再用,一边学,一边用,用完了就扔掉。
以前在和luo谈话时有一些共识,现在的所谓程序员好多根本不懂算法,数据结构一塌糊涂。我真的不敢叫他们是程序员,以为会点vb,能拖一些控件在上面就能叫程序?如果这样想,真的完了!
首先声明: 我本人学历不高,只能算是半个本科,也就是比专科高点,比本科差点。 但现在的教育好象真的是“教育”,面试了不少研究生,真的不敢恭维,水平不如好多专科生。
我并不是贬低学历,我本人也为学历吃了很多苦,现在还很辛苦地为了成为真正的本科,以至master而努力。但我觉得,好多人对不起头上的硕士帽。怪不得在新浪上看到,现在的硕士生只能相当于十年前的本科生,现在的doctor只能当二十年前的master. 特别是那些不入流的学校,大部分人简直在混时间。偶然看过几场master毕业答辩,真的是欲哭无泪。青春无价,为什么要混?
当然,水平高的 bachelor,master,doctor也有。就象也有没有文凭的高手。 但总体素质真的很差。好多连c++都搞不明白(应聘c++程序员). 我面试人决不会出怪题,我会考虑水平和细心程度,但令我失望的太多。
这儿又让我想起了各种it认证。首先声明的是,我不会参加任何认。 mcse,ocp这些认证不差吧? sorry,老外看不懂国人。明明是含金量很高的认证,到了中国就成了废纸。我认为国内真正能看出水平的就是ccie认证。不为别的,它的lib exam 不是每个人都能轻易过的,没有真本事绝不过了。 我想起了木匠认证: 一个实际水平有八级的木匠考了六级,而一个不会的人考了八级。
我不知道是主考人的悲哀还是木匠的悲哀。 好多有ocp证书的人连一些基本的oracle知道都不具备,就象一个文科学生,背了两个月题过了mcse. 所以我理解为什么我以前的外企只要你一说你过了mcse,一切免谈。首先是你这个人的动机有问题。
给驱动开发的网友:
驱动开发没什么神秘的,大家都知道,无非就是ms的api和frame.但它的精髓部分在于一种仔细的工作态度和百折不挠的精神,以及浑厚的底蕴。 就象做应用层的人,写个hello world很容易,写个编译器?不是每个人都能办到的。 不要告诉我你写了一个basic 什么的解释器,如果你真想觉得你有水平,写个c的就行了.我不行,但我相信大部分人也不行。不是我们智力有问题,是太浮了。
本身就是一个浮澡的人,但我不希望大家一样浮,到最后我们什么也没有,只是人家的劳工。
所有,我觉得,做程序员,不说你要把 三卷看完,至少也要看过几本数据结构的书,写过一些东西。 实际做过一些项目.有认真的工作态度.并且你要做过一些比较复杂的程序,把自己的思维进行一些必要的训练.
思维方式是很主要的.而且程序员这行需要有天赋,天赋的兴趣.没有兴趣是什么也做不好的. 没这方面的素质,我劝你早点改行.
我记得我在从原来的公司离职时,听得最多的是测试人员的赞赏.不为别的,只为我的认真. 我觉得,不管做什么事情都要对得起自己的良心,对于程序员来说,要有职业道德。
我知道我还算不上一个合格的程序,但我不得不说上面的话,就象好多master不行,但不能认为master本身有问题,关键是人! 我还在为成为master而努力,我希望得到的最好的结果是: 人家会认为我具有的素质是一个master应该具有的,那天我会很高兴的。
如果大家都踏实点,一切都不再是浮躁的!
《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均有发售。