
当我听到”高级开发者”时,我想到的是已经掌握了编程技艺的人。我想到的是一个能够设计、编码和测试系统的人。他们能够谈论系统架构或组件设计。他们理解并使用设计模式。这个人能够预见性能瓶颈,但知道不要过度优化。这个人会在适当的时候利用异步编程、队列、缓存、日志记录、安全性和持久化。当被问及时,他们能够详细解释自己的选择以及优缺点。在大多数情况下,他们已经掌握了面向对象编程和设计,这不是绝对的,其他语言如javascript、F#、scheme也很强大,但本质上不是面向对象的。他们精通风险管理,最重要的是,他们能够向同行传达上述内容。
什么是掌握?有一个普遍接受的观点,即要掌握任何一项技能,人体和大脑需要10,000小时的重复练习才能理解和内化一项技能。这在马尔科姆·格拉德威尔的书《异类》中有详细论述。
马尔科姆·格拉德威尔《异类》中的一些例子:
莫扎特在21岁的年轻年龄创作了他的第一首协奏曲。乍一看似乎很年轻,但他从11岁就开始作曲了。
披头士乐队最初被拒绝。他们被告知没有天赋,应该考虑换个职业。他们在德国度过了3年,在不同场所演出了大约1200次,每次演出时长5到8小时。他们重新出现时就是我们今天所知道和喜爱的披头士乐队。
最后,比尔·盖茨在20岁时从哈佛辍学创立了微软。对一些人来说这可能看起来很愚蠢,但考虑到20岁时他已经花了近一半的年轻生命在编程上。在1975年,世界上可能只有50个人拥有他那样的经验。他的经验给了他预见微软未来的远见。
彼得·诺维格在他的文章”十年学会编程”中也讨论了10,000小时法则。
在乔治·伦纳德的书《掌握》中,详细介绍了如何掌握一项技能。必须一遍又一遍地练习这项技能。重复得越多,你就越能意识到每次重复的差异。只有有了这种洞察力,你才能变得更好。
软件行业的职位头衔(初级、中级和高级)具有误导性,并且在不同组织之间不一致。我曾与一些公司合作过,他们将高级开发者定义为拥有5年或更多经验的人。没有提及经验的质量,只是说他们在电脑前坐了5年。在与这些人合作时,他们中的许多人还没有掌握面向对象编程,但他们被认为是高级开发者。
必须有一种更好、更客观的方式来衡量软件工程师的技能集。约翰·豪格兰提出了一个计算机程序员技能矩阵。它提供了一种通用、客观的方式来衡量程序员的技能水平,否则主要依靠直觉感受。
在看软件工程师时,我看到4个技能层次:权威、高级、中级和初级。
**权威(10年以上)**是掌握了一项技能并着手改进其相应学科的人。一些例子包括:泰德·纽沃德、鲍勃大叔马丁、唐纳德·克努特、奥伦·艾尼、彼得·诺维格、林纳斯·托瓦兹。这取决于你的技能集。
**高级(7到10年以上,第3级)**是在特定领域花费了最后10,000小时编程的人。对设计模式有深刻理解,他们在适当的时候利用异步编程、队列、缓存、日志记录、安全性和持久化。
高级开发者很可能永远不会达到权威级别。权威级别的人经常被发现在演讲和写作。他们积极尝试影响他们的学科。
**中级(4到6年,第2级)**是理解日常编程的人。他们独立工作并创建稳健的解决方案。然而,他们还没有经历过创建或维护大型或复杂系统。一般来说,中级开发者在组件级开发方面很出色。
**初级(1到3年,第1级)**是理解编程基础的人。他们要么拥有软件工程或计算机科学学位,要么是自学成才。他们的代码会持续接受审查。在算法、可维护性和结构方面会得到指导。
作者:Chuck Conway 专注于软件工程和生成式人工智能。在社交媒体上与他联系:X (@chuckconway) 或访问他的 YouTube。