
当我听到”高级开发者”这个词时,我想到的是一个已经掌握了编程技艺的人。我想到的是一个能够设计、编码和测试系统的人。他们可以讨论系统架构或组件设计。他们理解并使用设计模式。这样的人能够预见性能瓶颈,但知道不要过度优化。这样的人会在适当的时候利用异步编程、队列、缓存、日志、安全和持久化。当被问及时,他们能够详细解释他们的选择以及利弊。在大多数情况下,他们已经掌握了面向对象编程和设计,虽然这不是绝对的,因为其他语言如JavaScript、F#、Scheme等功能强大,但本质上并不是面向对象的。他们擅长风险管理,最重要的是,他们能够与同行沟通上述所有内容。
什么是掌握?有一个普遍接受的观点,即要掌握任何一项技能,人的身体和心智需要10,000小时的重复练习才能掌握并内化这项技能。这在Malcolm Gladwell的著作《异类》中有详细阐述。
Malcolm Gladwell《异类》中的一些例子:
莫扎特在21岁这个年纪创作了他的第一部协奏曲。乍一看这似乎很年轻,但他从11岁就开始作曲了。
披头士乐队最初遭到冷遇。他们被告知没有天赋,应该考虑从事其他工作。他们在德国花了3年时间,在不同的场地演出约1200次,每次演出长度为5到8小时。他们后来重新出现,成为了我们今天所认识和喜爱的披头士乐队。
最后,比尔·盖茨在20岁时从哈佛大学辍学创办了微软。对某些人来说,这似乎很愚蠢,但考虑到他在20岁时已经花了近半生的时间进行编程。在1975年,世界上可能只有50个人拥有他那样的经验。他的经验使他能够预见微软的未来。
Peter Norvig在他的文章《十年自学编程》中也讨论了10,000小时法则。
在George Leonard的著作《掌握:成功和长期满足的关键》中,详细阐述了如何掌握一项技能。一个人必须一遍又一遍地练习这项技能。重复次数越多,你就越能意识到每次重复中的差异。只有通过这种洞察,你才能变得更好。
软件行业的职位名称(初级、中级和高级)具有误导性,且在不同组织之间不一致。我曾与一些公司合作,他们将高级开发者定义为拥有5年或以上经验的人。对经验的质量没有任何提及,只是说他们在电脑前坐了5年。在与这些人合作时,他们中许多人还没有掌握面向对象编程,但他们被认为是高级开发者。
必须有一种更好、更客观的方式来衡量软件工程师的技能集。John Haugeland提出了一个计算机程序员技能矩阵。它提供了一种通用、客观的方式来衡量程序员的技能水平,否则这通常取决于直觉。
在观察软件工程师时,我看到了4个技能等级:杰出人物、高级、中级和初级。
**杰出人物(10年以上)**是指已经掌握了一项技能并致力于改进其所在领域的人。一些例子包括:Ted Neward、Uncle Bob Martin、Donald Knuth、Oren Eini、Peter Norvig、Linus Torvalds。这取决于你的技能集。
**高级(7到10年以上,第3级)**是指在特定领域花费了10,000小时编程的人。他们对设计模式有深刻的理解。他们在适当的时候利用异步编程、队列、缓存、日志、安全和持久化。
高级开发者很可能永远无法达到杰出人物的水平。杰出人物经常出现在演讲和写作中。他们积极尝试影响他们的领域。
**中级(4到6年,第2级)**是指理解日常编程的人。他们独立工作并创建健壮的解决方案。然而,他们还没有经历过创建或维护大型或复杂系统的经验。一般来说,中级开发者在组件级开发方面表现出色。
**初级(1到3年,第1级)**是指理解编程基础的人。他们要么拥有软件工程或计算机科学学位,要么是自学成才。他们的代码不断被审查。在算法、可维护性和结构方面给予指导。
作者:Chuck Conway 是一位 AI 工程师,拥有近 30 年的软件工程经验。他构建实用的 AI 系统——内容管道、基础设施代理和解决实际问题的工具——并分享他沿途的学习成果。在社交媒体上与他联系:X (@chuckconway) 或访问他的 YouTube 和 SubStack。