长期以来,“软件业”一直被视为“智力密集”型的“朝阳”产业,大多数从业者都受过高等教育,其平均素质居于社会各行业的前列,这个产业的顶尖人物被公众视为“知识英雄”,比如微软公司的创始人比尔盖茨雄据世界首富之位多年,更是为人“津津乐道”。
2. 凡是复杂的,都是错误的。
在美国的白人中,生于占人口5%的最低层的穷孩子,日后生活在贫困线以下的可能比那些生于占人口5%的最富裕阶层的孩子要高8倍。但是,那些智商属于最低的5%的孩子,则比那些智商属于最高的5%的孩子日后生活于贫困线以下的可能性高15倍。也就是说,你的脑子是否好使,比你的家庭是否富裕对你的未来重要得多。
智商重要还是努力重要?
1. 程序员不能每天都完全做项目,每天都要有一点时间学习新的技术。
美国大学本科生的中等智商为118,学士学位获得者的中等智商为123,优秀毕业生的中等智商为133,物理学博士的平均智商为140。而在一般的人口中,中等智商为100。也就是说,你的智商如低于100分,你就属于偏笨的人,高于此线,就属于偏聪明的了。
——薛涌《天才是训练出来的》读后感
对这个问题,我的观点和薛涌先生在《天才是训练出来的》这本书中所表达的观点是一致的:
完全可以。
我们需要解决的问题是“如何努力”的问题。
薛涌先生在书中介绍了一种名为“处心积虑的训练(deliberation practice)”的天才训练方法,这种方法是由天才研究的权威人士Ericsson教授提出的,简称为“深练(deep practice)”,其意思是一般人练得浅,水平自然平庸,天才则练得深,所以能超出凡人之上。
普通人如果能科学地深练,虽然不能成为天才,但成为“半个”天才是完全可能的。
有关“深练”的介绍,朋友们可以自行去看《天才是训练出来的》这本书。就我多年自学软件技术和8年的教学经验,我并不觉得“深练”有何奇特之处,我将“深练”总结为以下几句话:
(1)织网:分解软件技术的大块知识为多个小的知识点,各个击破,将新知识与老知识联系起来,构造一张完整的可动态扩充的知识之网
(2)训练:将开发技能给拆分为多个小的步骤或子技能,针对每个步骤或子技能反复地严格地训练,然后再这些步骤或子技能组合起来,以达到职业的水准。
(3)探究性的学习与实践:要将被动的学习转换为主动的探索,要通过开发实践把一切给“激活”。
我写了不少文章表达过自己针对软件技术学习的看法,在个人所写的几本书的前言中也比较系统地表达过类似的观点,这里就不再重复了,这些文章在我的上都可以找到。
而我也将在日后的开发与教学实践中应用这些原则,探索更有效的学习与训练方法。
下面,我们来看另一个很困扰人的问题:
周一,组长还在给我们分配任务。周二,组长和领导谈完话,就突然离职了,一天的时间就办完了所有手续,走人了。周三,就开始要适应没有组长的生活了。
国外心理学的统计数据明确无误地说明了智商的重要性,但这里有一个问题:就算是具有“天才”浅质的人在总人员的比例很少,但人类有数十亿之多,“天才”应该不少啊?怎么数千年来,公认 “天才”的就是牛顿等那几个?
1973年,诺贝尔经济学奖得言、人工智能研究的开拓者Herbert Simon和William Chase在研究国际象棋大师的成长规律时发现:再大的天才,也需要10年修炼成器。
音乐天才莫扎特似乎打破了这个“十年定律”。5岁做曲,10岁登台演出,一生创作了数百部传世之作。尽管如此,西方学者们还是发现,传奇1.76,莫扎特6岁时就已经和父亲一起训练了3500个小时,他第一部达到大师水平的作品,创作年纪是21岁,实际上已经经历了18年的严格训练。
聪明的脑瓜是必要的,但仅有它也是不够的。
我引用了这么多的资料,其实只为了说明一个结果:
不经“十年寒窗”,“天才”不可能出来。
本身具有高智商的人是这样,在平均智商上下的人更应该努力。
现在很好解释当下的一些现象了:
(1)“程序员”为何是“IT民工”?因为这些所谓的“程序员”本身就没有具备从事软件开发的基本知识与基本技能,加上人数众多,可替换性强,怎么会不成为“IT民工”?
(2)计算机专业学生为何就业难?很简单,一个计算机专业本科生,四年下来至少应该有4~6万行的代码量,但就我观察,达到这个要求的不到10%。
尽管软件开发行业需要较高的智商,但在平均学历为本科的软件开发行业,从业者已经过高考的筛选,智商并不是问题关键,之所以“IT民工”多和计算机专业学生就业难,主要问题是“懒”和“训练不得法”。
下图是我总结的一个靠技术吃饭的“程序员”知识与能力增长路线图:
在新公司半年了,期间陆续有人离职。有测试人员,也有开发人员;有最底层的小员工,也有组长级别的人物。
16年前我下决心开始学习计算机技术的时候,对这个行业也充满了自豪感。
看来,即使是创业公司,也是出出进进,人员流动也很大的。
我是知道我成不了天才,但为何我也没成“人材”?我可从没偷懒过啊!

图 2
说句实话,这个图虽然“挂一漏万”,但列出来的知识点与需要掌握的技能之多已经很“恐怖”了,对于一个需要掌握这么多知识与技术才能胜任与干好的工作,非要认为它是一个“低级”的 “民工”就可以干的活,想必持这种观点的人一定知识丰富如汪洋大海,属“白骨精(白领-骨干-精英)”一族。
需要掌握这么多的知识,才有资格当一名合格的“CRUD”程序员,“IT民工”的“门槛”其实挺高的,不是吗?
事实也如此,软件开发行业从业人员的平均学历我估计至少是大专,很可能是“本科”,其中固然有一些只有“高中”甚至更低学历的“奇才”,但这仅是少数,而且这些人,虽然学历低,但绝不会是一个低智商的人。这说明软件开发行业从业者的“平均智商”应该是挺高的。
我在旅美学者写的《天才是训练出来的》一书中找到了美国的一些统计数据: