“码农”和计算机工程师其实并没有明确的界限,他们每天都在和计算机代码打 交道。只不过前者多少带点儿贬义,毕竟今天能写几行代码的人随处可见。计算机工 程师在某种程度上是自己往自己脸上贴金,在外人眼里他们再普通不过了。
但是, 同样是计算机工程师, 不同人的水平、贡献和影响力可谓有天壤之别。有 些读者读过我之前写的一些书,知道我喜欢用朗道的方法,将计算机工程师分为五 级。一级工程师的贡献是二级的 10 倍,二级是三级的 10 倍,以此类推。当然,他 们的贡献和收入常常存在指数上的差别。
五级: 能够独立解决问题,完成工程工作。一个能够独立工作、很好完成任务的 工程师,属于五级工程师,Google、微软和 Facebook 里面一半左右的工程师属于这 一级。部分 IT 企业里写代码的人,很多还达不到五级工程师的要求,因此被称为“码农”也不算太过分。
四级:能够用已知的最优方法(state of the art )解决问题,并指导和带领其他人 一同完成更有影响力的工作。很多公司里所谓的技术专家、技术大拿,大致就是这个 水平。
三级:能够解决前人未解决的问题,并且能独立设计和实现产品,在市场上获得 成功。目前普遍的情况是,在大部分 IT 企业中能够达到这个水平的人非常少,他们 通常是企业里的总工程师或者总架构师。这个级别的工程师在 Google 或者微软里却 不少见。
二级:能够提出重要的计算机理论和实践中的新问题,并解决它们,还能设计和 实现别人做不出的产品,也就是说这一级的人的作用很难取代。
一级:能够开创一个产业,或者奠定一个学科的基础。
每一级在各个维度差出 10 倍。
关于五级工程师的理论,我多年前就在很多场合讲过,在这个行业里很多人都知 道。很多人毫不谦虚地把自己定在了四级或者三级,这其实是高估了自己,或许是因 为过去给出的计算机工程师最低的一级是五级。一些刚毕业进入大计算机公司的人和 我讲,我现在是五级,争取两年内达到四级的水平。我说,“不,你现在最多算是六 级,先要达到五级的水平”,于是我在五级的下面又加入了两级。
六级:能在他人指导下完成计算机工程师的工作。那些水平还不错的大学的计算 机专业硕士毕业生,或者在一流计算机公司里工作过半年、过了见习期的新人,大约 就是这个水平。
七级:本科毕业自水平不错的大学的计算机专业,但没有参加过六个月以上实习 的学生。也就是说课程的内容都学过了,就能达到这个水平。当然,从小就接触编程 的计算机天才,他们可能在高中就达到了这个水平。
以上内容摘自吴军博士的《计算之魂》中的前言部分。
对计算机科学的掌握程度,决定了一个计算机行业从业者能走多远。在本书中,作者将人文历史与计算机科学相结合,通过一些具体的例题,分10个主题系统地讲解了计算机科学的精髓。这些例题是作者面试求职者时用到的考题,或是头部计算机公司和金融企业的面试题。
作者在书中结合自己对计算机工程师的五级分级标准,详细讲解了每类题目不同层次的解决方法、不同水平的人大约能思考到什么样的深度,深度阐述题目背后的计算机科学精髓。通过对比优化解题思路,读者不仅可以衡量自己的水平,在职业的发展道路上走得更快,更可以深刻理解并掌握计算机科学和计算思维,逐渐把握计算机科学这门艺术,获得重复性成功。
对于所有有志于了解或学习科技,特别是计算机科学的人来讲,本书不仅有助于了解计算机科学,更有助于了解 IT 产业的技术特点、培养一些特殊的思维方式、掌握信息时代特殊的做事方法,通过具体的例子,从“术”的层面获得“道”的层面的提升。
异步君此时刚好打开了《善工利器:程序员管理范式》的第一章,感觉也有必要分享一下,对这个问答也是有参考意义的。
程序员里的领袖人物认为,把程序员 比喻为“工匠”更为合适。工匠并非与生俱来的高手,他们需要经历多年学徒生 涯的磨炼,在证明了自己的技能水平并且取得成绩之后才能赢得高手的称号。用 知识、经验和过往的成功案例来认证程序员比较切合实际,而所谓的“认证计划” 则难以令人信服。所以,我们认为“工匠”这个比喻比其他称谓更适合用来称呼 我们所说的那种“卓越的程序员”。
卓越的程序员从何而来?他们仅仅具备程序设计方面的天赋是远远不够的。卓越的程序员都是大师级的人物,做事有条不紊、严于律己。他们能够仅凭直觉就组 织好代码和程序结构,能够使自己总是在编写代码之前先设计好,能够在较短的时 间内编写出清晰、简洁、实用、高质量的代码并获得预期的结果,他们通常还会编 写测试用例以确保代码能够正常运行。换言之,卓越的程序员都是大师级的匠人。
如果程序员的内驱力主要来自时间计划表、管理层压力或者报酬,那么他 就不能成为一名卓越的程序员。事实上,对于大多数卓越的程序员而言,他们 的内驱力来源于更高层次的目标:做出对人们生活切实有用的程序,做出改变 世界的杰出产品。卓越的程序员希望为具有世界影响力的项目工作,这也是他 们的自我价值实现的需要,他们希望能够体会到自己的工作是有意义的,即使 只是在某个很小的方面。卓越的程序员偏爱能够满足他们提出的更高要求的公 司和项目,他们非常在意自己所做的事情,常常为了得到期待已久的结果而付 出超乎寻常的努力。
卓越的程序员的工作效率往往比普通程序员的工作效率高一个数量级(即 10 倍以上)。
然而,现实中卓越的程序员实在太少了,不可能每个项目团队都拥有。而且, 多数团队也只能“容忍”队伍中拥有一两名卓越的程序员。我们发现,大多数程序或项目主要依靠的还是普通的程序员。普通的程序员通常也是称职、能干的, 拥有很高的职业素养,然而他们往往只会把程序设计视为一项工作。
于是,我们面临的挑战就是,即便大部分甚至所有程序员仅能称得上称职, 也要努力思考如何组织一支训练有素的程序员队伍,如何激励并培养其中一部分 人成为卓越的程序员,如何管理好其他程序员以达成圆满的结果,以及如何持续提高团队绩效。
大多数程序员凭直觉就能判断出同行之间的身手高低,并不需要借助那些花 里胡哨的排名或者头衔。但是,如果能够把程序员的类型与等级正式记录下来, 并且对每一种类型与等级的职位要求与能力需求做一个简单描述(类似表 2-1 那 样),那么管理者的工作将会轻松许多。这份列表能够帮助团队和项目经理轻而易 举地找到匹配各种任务和项目的最佳人选,还能帮助高层管理者建立起对组织结 构更为深刻的洞察力。
表 2-2 展示了对前面讨论过的不同类型的程序员应该如何定义程序设计能力等级。
制定一套能够与程序员的成长相适应的、梯级要求的程序员能力等级评估标准非常重要。表2-3给出了针对前端程序员的等级评判标准。
《善工利器:程序员管理范式》的内容就分享到这里。
关于《善工利器:程序员管理范式》的这本书
程序设计经理、IT项目管理者的团队管理手册!2位作者集80余年编程和管理实践经验教训,总结300余条千锤百炼的经验法则与至理名言,破解管理难题,打造高效团队!
这是一本系统阐述在面对容易失控的软件开发团队时,如何管理、建设和赋能团队,以及成功交付开发成果的书。本书总结了两位作者多年的软件开发实践经验和软件团队管理经验,通过深刻的观察和分析,围绕软件开发管理的核心问题——人的管理,讲解如何真正理解程序员、如何找到合适的程序员、如何与程序员顺畅地沟通等困扰大家已久的问题,进而扩展到如何以人为本地建设团队、管理人员、管理项目。相较于第1 版(《告别失控:软件开发团队管理必读
》),第2 版(本书)增加了如何招聘和培养程序员,并搭建卓有成效的团队的相关内容。