软件天才与技术民工 长期以来“软件业”一直被视为“智力密集”型的“朝阳”产业大多数从业者都受过高等教育其平均素质居于社会各行业的前列这个产业的顶尖人物被公众视为“知识英雄”比如微软公司的创始人比尔盖茨雄据世界首富之位多年更是为人“津津乐道”。16年前我下决心开始学习计算机技术的时候对这个行业也充满了自豪感。然而世事难料在2009年高考刚刚结束之际中国权威出版机构社会科学文献出版社于2009年6月10日发布首部《中国大学毕业生就业报告2009》其中“计算机专业”荣登 “就业最困难的十大专业”光荣榜。大约从2003年开始我在北京理工大学这所211、985重点大学开设.NET课程这件事后来给某些人“炮轰”--说我要将重点大学学生培养成IT民工也曾有技术牛人谆谆教诲年青学生--想学软件离金某人远些……“程序员”何时变成了“IT民工”仅仅十多年“程序员”就从“精英”沦落为“民工”这也未免太戏剧性了吧“程序员”真的是“IT民工”在中国不少程序员都是“CRUD”程序员这不能怪他们因为中国多数项目都是CRUD的。所以CRUD似乎成为了“IT民工”身上的标签问题是CRUD这活真的象在建筑工地上倒水泥一样不需要太高的智商和较多的训练下面分析一下需要从事这个CRUD的工作的程序员到底需要哪些知识和技能。我大致地思索了一下画了以下这个图展示出一名 “.NET程序员民工”要顺利参与一个CRUD的数据库应用项目开发所大致需要掌握的知识与技能图 1说句实话这个图虽然“挂一漏万”但列出来的知识点与需要掌握的技能之多已经很“恐怖”了对于一个需要掌握这么多知识与技术才能胜任与干好的工作非要认为它是一个“低级”的 “民工”就可以干的活想必持这种观点的人一定知识丰富如汪洋大海属“白骨精白领-骨干-精英”一族。需要掌握这么多的知识才有资格当一名合格的“CRUD”程序员“IT民工”的“门槛”其实挺高的不是吗事实也如此软件开发行业从业人员的平均学历我估计至少是大专很可能是“本科”其中固然有一些只有“高中”甚至更低学历的“奇才”但这仅是少数而且这些人虽然学历低但绝不会是一个低智商的人。这说明软件开发行业从业者的“平均智商”应该是挺高的。我在旅美学者薛涌写的《天才是训练出来的》一书中找到了美国的一些统计数据美国大学本科生的中等智商为118学士学位获得者的中等智商为123优秀毕业生的中等智商为133物理学博士的平均智商为140。而在一般的人口中中等智商为100。也就是说你的智商如低于100分你就属于偏笨的人高于此线就属于偏聪明的了。老外依据数据得出结论要把书读懂读好智商还真的得达到一定的水准。所以能上大学并且顺利拿到学位的人基本上是属于比较聪明的那一批人。我们中国也有类似的观点比如经常可以听到某家长叹息其小孩子成绩不好我家的那个小祖宗看来根本就不是读书的那块料套用老外的观点就是说这个小孩可能智商达不到上大学的基本要求。老外什么都喜欢数字化所以动不动就来个什么“智商”测试而中国虽然不讲智商这一套但其实高考就可以看成是一次智商测试。在80、90年代那时的大学生经常都是百里挑一、几十里挑一记得89年我参加高考那年我们省的录取率还是十几取一。所以那个时代的大学生被称为“天之娇子”并非“空穴来风”。重大的变化发生于1999年从这一年开始中国大学开始扩招尤其是计算机专业更是扩招的重点其规模迅速膨胀录取率大大地提高其结果是用一句打趣的话说“阿猫阿狗都去读大学了”中国大学没有做智商测试的制度不然我想应该会看到21世纪在校大学生的平均智商比上世纪80、90年代的在校大学生的平均智商要低。但扩招对一些历史悠久声誉良好的重点大学的影响就没那么大因为不管你怎么扩招能进名校比如北大清华的学生智商是不会低的因为其入学竞争仍然十分激烈各方面差一点的根本就没这个机会。老外还给出了一些著名科学家的智商牛顿190伽利略195开普勒175达尔文165哥白尼160。我对这些数据抱有怀疑牛顿和伽利略等的那个时代有智商测试吗这些数据是从哪计算出来的但这些著名科学的智商高于普通人我想不会有人怀疑。现在回到软件开发这个行业其从业者平均学历为大专以上应该说明这个行业需要的是整个人群中比较聪明的那一批。这个观点与我的实际感受是一致的。我在IT业“混”了十多年深感这个行业牛人辈出别说这个行业的“顶尖”级别人物就是在许多普通的IT企业、科研院所中也有不少的让人佩服的牛人。我在北理工教了8年书“笨”的学生实在没见着而不少学生的聪明程度和学习能力等都比我在他们这个年纪时要强得多还有一些学生真的很聪明悟性好能举一反三在技术上没多久就可以跑到我前面去了。所以软件开发应该是一个需要有较高智商的行业我觉得不会有太大疑义。为什么智商重要我在薛涌 写的《天才是训练出来的》找到了以下描述在美国的白人中生于占人口5%的最低层的穷孩子日后生活在贫困线以下的可能比那些生于占人口5%的最富裕阶层的孩子要高8倍。但是那些智商属于最低的5%的孩子则比那些智商属于最高的5%的孩子日后生活于贫困线以下的可能性高15倍。也就是说你的脑子是否好使比你的家庭是否富裕对你的未来重要得多。中国人有句俗话三百六十行行行出状元。这些“状元”的出身并不重要但他们应该接近100%的都有高的智商。智商这个东西非常奇特老外研究了这么多年也没研究明白很多关键问题比如智商是不是纯天生的后天不能提高如果能那能提高多少如何解释一些高智商的人一辈子成就平平如何解释某些天才在某个领域内出类拔萃在其他领域却连普通人都比不上还有更重要的一点普通人付出艰苦的努力能成为天才吗我不是心理学家下面我仅就想针对软件开发来聊聊自己对这个问题的看法。你能成为软件天才吗在整个计算机领域有一些老外的名字如雷贯耳冯诺依曼图灵比尔盖茨、Anders Hejlsberg在中国诸如“求伯君”、“柳传志”、“李开复”等名人的故事也是众人皆知虽然我们拿不到其智商测试的分数但相信他们个个都是聪明人。“高智商”其实是成为“天才”的必要条件。相应的另一个结论就是普通人再怎么努力也成不了天才。这话看上去令人泄气但这是客观事实。天才在各自领域内所达到的高度大多数普通人是永远达不到的比如如果有某人告诉我你只要努力就可以比Anders Hejlsberg还牛。我一定会认为他在开一个让我很生气的玩笑。回想起当年的高考我费了九牛二虎之力总分才刚够重点大学的最低分数线后来的考研我要考3次才侥幸过关我也曾参过北大的博士生入学考试结果惨败而回以后知趣地不再尝试……我就这智商普通人一个所以您就别忽悠我了我才不信天天坚持跑步日后就可以参加奥运会的马拉松比赛呢个体间智商的差异是客观存在的。但成为不了天才不能成为躺倒不干的理由。因为这里有一个引发了巨大争论的问题……智商重要还是努力重要国外心理学的统计数据明确无误地说明了智商的重要性但这里有一个问题就算是具有“天才”浅质的人在总人员的比例很少但人类有数十亿之多“天才”应该不少啊怎么数千年来公认 “天才”的就是牛顿等那几个1973年诺贝尔经济学奖得主、人工智能研究的开拓者Herbert Simon和William Chase在研究国际象棋大师的成长规律时发现再大的天才也需要10年修炼成器。音乐天才莫扎特似乎打破了这个“十年定律”。5岁做曲10岁登台演出一生创作了数百部传世之作。尽管如此西方学者们还是发现莫扎特6岁时就已经和父亲一起训练了3500个小时他第一部达到大师水平的作品创作年纪是21岁实际上已经经历了18年的严格训练。聪明的脑瓜是必要的但仅有它也是不够的。我引用了这么多的资料其实只为了说明一个结果不经“十年寒窗”“天才”不可能出来。本身具有高智商的人是这样在平均智商上下的人更应该努力。现在很好解释当下的一些现象了1“程序员”为何是“IT民工”因为这些所谓的“程序员”本身就没有具备从事软件开发的基本知识与基本技能加上人数众多可替换性强怎么会不成为“IT民工”2计算机专业学生为何就业难很简单一个计算机专业本科生四年下来至少应该有4~6万行的代码量但就我观察达到这个要求的不到10%。尽管软件开发行业需要较高的智商但在平均学历为本科的软件开发行业从业者已经过高考的筛选智商并不是问题关键之所以“IT民工”多和计算机专业学生就业难主要问题是“懒”和“训练不得法”。下图是我总结的一个靠技术吃饭的“程序员”知识与能力增长路线图图 2这个图不是针对“天才”设计的而是针对一个普通的计算机专业大学生可能的主要人生经历绘制的虽然经过了大量的简化但主线还是很清楚的。我成不了天才那成为“人材”可以吗对这个问题我的观点和薛涌先生在《天才是训练出来的》这本书中所表达的观点是一致的完全可以。我们需要解决的问题是“如何努力”的问题。薛涌先生在书中介绍了一种名为“处心积虑的训练deliberation practice”的天才训练方法这种方法是由天才研究的权威人士Ericsson教授提出的简称为“深练deep practice”其意思是一般人练得浅水平自然平庸天才则练得深所以能超出凡人之上。普通人如果能科学地深练虽然不能成为天才但成为“半个”天才是完全可能的。有关“深练”的介绍朋友们可以自行去看《天才是训练出来的》这本书。就我多年自学软件技术和8年的教学经验我并不觉得“深练”有何奇特之处我将“深练”总结为以下几句话1织网分解软件技术的大块知识为多个小的知识点各个击破将新知识与老知识联系起来构造一张完整的可动态扩充的知识之网2训练将开发技能给拆分为多个小的步骤或子技能针对每个步骤或子技能反复地严格地训练然后再这些步骤或子技能组合起来以达到职业的水准。3探究性的学习与实践要将被动的学习转换为主动的探索要通过开发实践把一切给“激活”。我写了不少文章表达过自己针对软件技术学习的看法在个人所写的几本书的前言中也比较系统地表达过类似的观点这里就不再重复了这些文章在我的个人博客上都可以找到。而我也将在日后的开发与教学实践中应用这些原则探索更有效的学习与训练方法。下面我们来看另一个很困扰人的问题我是知道我成不了天才但为何我也没成“人材”我可从没偷懒过啊这个问题太有中国特色了这里面关键有几点1你错过了“学习天窗”。任何一种知识和技能都有学习与培养它的最佳时间段我们将它称为“学习天窗”比如一个两三岁的小孩子可以轻而易举地学会两三种语言而且不会有口音而一个成人就够呛了以英语为例我们都受够了难听无比的“日本英语”和“印度英语”“中国英语”也好不到哪去。拿软件技术而言最佳的学习时间是大学的这几年18岁~25岁左右精力、体力、智力无不处于高峰你这时不学拿这个时间去玩游戏看大片QQ海聊上网乱逛……等到30岁以后再学会发现你花3个小时才能记住的东西10年以前可能1.5个小时甚至更少的时间就能记住了。后悔也晚了。这也只能怪你自己。2命运幸运的是你生在中国你没生在阿富汗和非洲那里天天子弹飞饿肚子闹瘟疫这种环境下你还能学计算机编程序倒霉的是你也生在中国如果你生在美国你就可以摆脱那因为千军万马过独木桥而喘不过气来的中小学应试体制上了大学也可以得到比较好的专业引导和教育避开那因为“行政化”而“弊端从生”的中国高等教育体制。中国这个大环境你个人是改不了的。最倒霉的是你不仅生在中国而且你爸不是李刚你家在很远的地方那地方很穷家里买不起电脑更别说上网了你可能要到大学才第一次接触到电脑……让你雪上加霜的是你竞争不过那些学习条件好的同学虽然你不笨也很努力但在起点就落后了结果你没上到好大学没碰到好老师一步晚步步晚……这不是你的责任真的不是你的责任但不要追问是谁的责任。再追问下去你可能就要去宗教中寻找归宿了。