`
cuijiemin
  • 浏览: 264094 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

软件天才与技术民工

阅读更多
——薛涌《天才是训练出来的》读后感

金旭亮

    长期以来,“软件业”一直被视为“智力密集”型的“朝阳”产业,大多数从业者都受过高等教育,其平均素质居于社会各行业的前列,这个产业的顶尖人物被公众视为“知识英雄”,比如微软公司的创始人比尔盖茨雄据世界首富之位多年,更是为人“津津乐道”。

    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)命运:
    幸运的是,你生在中国! 你没生在阿富汗和非洲,那里天天子弹飞,饿肚子,闹瘟疫,这种环境下你还能学计算机,编程序?
    倒霉的是,你也生在中国! 如果你生在美国,你就可以摆脱那因为千军万马过独木桥而喘不过气来的中小学应试体制,上了大学,也可以得到比较好的专业引导和教育,避开那因为“行政化”而“弊端从生”的中国高等教育体制。中国这个大环境你个人是改不了的。
    最倒霉的是,你不仅生在中国,而且你爸不是李刚 ,你家在很远的地方,那地方很穷, 家里买不起电脑,更别说上网了,你可能要到大学才第一次接触到电脑……,让你雪上加霜的是:你竞争不过那些学习条件好的同学,虽然你不笨,也很努力,但在起点就落后了,结果你没上到好大学,没碰到好老师,一步晚,步步晚……
    这不是你的责任,真的,不是你的责任!

    再追问下去,就要去宗教中寻找归宿了。
    路在何方?
    你手上抓的牌不太好,这没办法,这是命运问题,老子说过:天地不仁,以万物为刍狗……
    别想那么多了,不抱怨不等待,积极努力,想办法把手头抓的这副“坏牌”打好,这是最现实最正确的选择。
    只要个人努力了,其他的丢给命运吧!你还能怎的?
分享到:
评论

相关推荐

    U盘量产工具SM3280&3281&3282-AvidiaV0209整合版

    U盘量产工具FLASH量产工具SM3280&3281&3282-AvidiaV0209整合版

    java课程期末考试.zip

    java课程期末考试

    分布式消息中间件,参考kafka,未完成.zip

    分布式消息中间件,参考kafka,未完成

    修木工施工规范及流程.docx

    修木工施工规范及流程.docx

    汽车电子中MICROSAR OBD协议栈解决方案及其应用

    内容概要:本文详细介绍了VECTOR提供的MICROSAR OBD协议栈解决方案,涵盖了OBD模块、ECU支持、监控功能和服务请求等方面的内容。此外,还讨论了OBD在不同国家和地区的技术标准与法规要求,以及MICROSAR OBD解决方案的优势,如适应不同项目的需求和高度集成于AUTOSAR 4平台。 适合人群:汽车电子工程师、软件开发者、汽车制造商及相关行业从业人员。 使用场景及目标:① 适用于车辆诊断系统的开发和维护;②帮助工程师理解和掌握OBD协议的具体实施方法和应用场景;③ 提供了一个成熟、可扩展的解决方案,用于满足OBD相关标准和法规的要求。 其他说明:本文不仅提供了技术层面的详细解析,还探讨了实际操作过程中可能遇到的问题和解决方案。同时强调了屏蔽信息过载的重要性,提醒工程师保持内心平静,专注做好本职工作。

    适用于 Python 的 LINE 消息 API SDK.zip

    适用于 Python 的 LINE 消息 API SDK适用于 Python 的 LINE Messaging API 的 SDK。介绍适用于 Python 的 LINE Messaging API SDK 可以轻松使用 LINE Messaging API 开发机器人,您可以在几分钟内创建一个示例机器人。文档请参阅官方 API 文档了解更多信息英语https //developers.line.biz/en/docs/messaging-api/overview/日语https://developers.line.biz/ja/docs/messaging-api/overview/要求Python >= 3.9安装$ pip 安装 line-bot-sdk概要用法from flask import Flask, request, abortfrom linebot.v3 import ( WebhookHandler)from linebot.v3.exceptions import ( InvalidSig

    Java字节码工程工具包.zip

    Java字节码工程工具包Javassist 版本 3版权所有 (C) 1999-2023 Shigeru Chiba,保留所有权利。Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是一个用于编辑 Java 字节码的类库它使 Java 程序能够在运行时定义新类并在 JVM 加载类文件时对其进行修改。与其他类似的字节码编辑器不同,Javassist 提供两个级别的 API源代码级别和字节码级别。如果用户使用源代码级别 API,他们可以编辑类文件而无需了解 Java 字节码的规范。整个 API 仅使用 Java 语言的词汇表进行设计。您甚至可以以源文本的形式指定插入的字节码Javassist 会即时编译它。另一方面,字节码级别 API 允许用户像其他编辑器一样直接编辑类文件。该软件根据 Mozilla 公共许可证版本 1.1、GNU 宽通用公共许可证版本 2.1 或更高版本或 Apache 许可证版本 2.0 分发。文件README.md 此自述文件。Changes.md 发行说明。License.html 许可证文件。tuto

    毕设源码-基于python的西西家居全屋定制系统的设计与实现_ijsj--论文-期末大作业+说明文档.rar

    本项目是基于Python语言开发的西西家居全屋定制系统,旨在为家居行业提供一个高效、智能的定制解决方案。项目涵盖了从客户需求分析、设计方案生成、材料选购到最终订单生成的全过程,力求实现家居定制的数字化和智能化。 在主要功能方面,系统具备强大的客户管理模块,能够详细记录和分析客户的定制需求。设计模块则采用先进的三维建模技术,为客户提供直观、真实的家居设计方案预览。此外,系统还整合了丰富的材料数据库,方便客户根据自身喜好和预算进行材料选择。 框架方面,项目采用了B/S架构,确保了系统的稳定性和可扩展性。后端使用Python的Django框架,前端则结合了HTML、CSS和JavaScript等技术,实现了用户界面的友好和响应速度。 开发此项目的目的,不仅是为了满足家居行业对个性化定制的需求,也为计算机相关专业的学生提供了一个实践和学习的平台,有助于提升他们的实际开发能力。

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念 .zip

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念。Basecamp JavascriptJavascript 是数字化创新的起点,是语言的基础,也是基本概念。嵌套存储库,可作为启动项下待办事项的实践活动。

    已弃用 - Coinbase Python API.zip

    已弃用 — Coinbase Python APICoinbase Coinbase API V2的官方 Python 库。重要提示此库当前针对的是 API V2,而 OAuth 客户端需要 V2 权限(即wallet:accounts:read)。如果您仍在使用 API V1,请使用此库的旧版本。特征接近 100% 的测试覆盖率。支持API Key + Secret和OAuth 2身份验证。调用 API 的便捷方法 - 为您打包 JSON!自动将 API 响应解析为相关的 Python 对象。使用IPython时,所有对象都具有可制表完成的方法和属性。安装coinbase可以在PYPI上使用。使用以下命令安装pippip install coinbase或者easy_installeasy_install coinbase该库目前针对 Python 版本 2.7 和 3.4+ 进行了测试。注意此软件包名称过去是指George Sibble维护的非官方 coinbase_python 库。George 慷慨地允许我们使用此软件包

    基于RBAC权限控制的基础后台.zip

    基于RBAC权限控制的基础后台

    毕设源码-python-基于Python爬虫的网络小说数据分析系统的设计与实现-期末大作业+说明文档.rar

    本项目是基于Python爬虫的网络小说数据分析系统的设计与实现,旨在为计算机相关专业的大学生提供一个实践平台,特别是在毕业设计和项目实战练习方面。项目通过Python强大的网络爬虫技术,从流行的网络小说网站自动抓取数据,包括书籍信息、章节内容、用户评论等。 主要功能涵盖数据采集、数据清洗、数据存储和数据分析。数据采集模块利用Scrapy等爬虫框架高效抓取网页内容;数据清洗模块确保数据的准确性和一致性;数据存储则采用MySQL等数据库系统,便于数据管理和查询;数据分析模块通过Pandas、NumPy等工具进行数据处理和分析,生成多维度的统计报告和可视化图表。 此项目不仅帮助学生掌握Python编程和网络爬虫技术,还能让他们深入了解数据分析的全过程,提升解决实际问题的能力。同时,系统的实现和应用也反映了现代信息技术在文学创作和消费领域的应用价值和潜力。

    ssm框架Java项目源码-基于Java的在线日语培训平台的设计与实现+jsp毕设-大作业.zip

    本项目是一个基于Java的在线日语培训平台的设计与实现,采用SSM框架(Spring+SpringMVC+MyBatis)进行开发,旨在为计算机相关专业的学生提供一个实践和学习的平台,同时也为日语学习者提供一个在线学习的空间。项目中主要功能涵盖了用户管理、课程管理、学习资源上传下载、在线测试与反馈等多个方面。通过该平台,教师能够轻松管理课程内容和学生信息,学生则可以随时随地访问学习资源,参与在线课程和测试,从而提高学习效率和兴趣。 在开发此项目的过程中,我们重点关注了系统的可维护性和可扩展性,确保代码结构清晰,便于后续的功能迭代和优化。此外,通过使用SSM框架,实现了前后端的分离,提高了开发效率和系统的响应速度。该项目不仅能够满足毕设的需求,还能作为Java学习者提升编程能力和实践经验的实用工具。

    基于java的机票管理系统设计与实现.docx

    基于java的机票管理系统设计与实现.docx

    基于Java实现的数据结构设计源码学习指南

    该项目为《基于Java实现的数据结构设计源码》,共包含51个文件,主要由46个Java源文件构成,辅以2个文本文件、1个Git忽略文件、1个许可证文件以及1个XML文件,全面涵盖了数据结构设计的核心内容。

    绿色食品 水稻生产操作规程.docx

    绿色食品 水稻生产操作规程.docx

    这款出色的应用程序可以纠正您之前的控制台命令 .zip

    他妈的 Fuck是一款出色的应用程序,其灵感来自@liamosaur 的 推文,它可以纠正以前控制台命令中的错误。The Fuck太慢了吗?试试实验性的即时模式!更多示例➜ apt-get install vimE: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?➜ fucksudo apt-get install vim [enter/↑/↓/ctrl+c][sudo] password for nvbn:Reading package lists... Done...➜ git pushfatal: The current branch master has no upstream branch.To push the current branch and set the remote

    全国大学生FPGA创新设计竞赛作品 泡罩包装药品质量在线检测平台.zip

    全国大学生FPGA创新设计竞赛作品 “泡罩包装药品质量在线检测平台“.zip

    桃苗木质量基本要求表.docx

    桃苗木质量基本要求表.docx

    使用 Python 漂亮地打印表格数据,这是一个库和一个命令行实用程序 存储库从 bitbucket.org,astanin,python-tabulate 迁移而来 .zip

    使用 Python 漂亮地打印表格数据,这是一个库和一个命令行实用程序。存储库从 bitbucket.org/astanin/python-tabulate 迁移而来。python-tabulate使用 Python、库和命令行实用程序漂亮地打印表格数据。该库的主要用例是轻松打印小表格只需一个函数调用,格式由数据本身引导为轻量级纯文本标记创作表格数据多种输出格式适合进一步编辑或转换混合文本和数字数据的可读表示智能列对齐、可配置数字格式、小数点对齐安装要安装 Python 库和命令行实用程序,请运行pip install tabulate命令行实用程序将在 Linux 上安装为(例如tabulate)或者在 Windows 上的 Python 安装中安装为(例如)。bin/usr/bintabulate.exeScriptsC:\Python39\Scripts\tabulate.exe您可以考虑仅为当前用户安装该库pip install tabulate --user在这种情况下,命令行实用程序将安装到 ~/.local/bin/tabula

Global site tag (gtag.js) - Google Analytics