本文翻译自:https://endler.dev/2025/best-programmers/

Published on 4th of April, 2025 · Updated on 18th of April, 2025

我一生中遇到过许多开发者。最近我在思考:“怎样才能成为最优秀的程序员?他们有哪些共同特质?”

基于对业内顶尖人才的观察,我整理出了这些特质。希望这份清单能给正在成长中的开发者启发,若我职业生涯早期能有这样的指引,定能节省大量时间。

阅读官方文档

年轻程序员最应该做的一件事,就是直接阅读你所使用技术的官方文档。比如,Apache Webserver 文档、Python 标准库、TOML 规范。

不要依赖 Stack Overflow,不要询问 LLM,不要猜测,直奔源头。官方文档往往出人意料地通俗易懂。

深度掌握你的工具

顶尖开发者对技术栈有着根本性理解。

能够使用工具是一回事,而真正摸透(理解)它是另一回事。普通用户可能操作工具时手忙脚乱,很容易混淆,用错方法并且不会优化配置。

但专家(在阅读文档后)坐下来能写出每行配置都了然于胸的配置文件,并能清楚的解释给同事听。这毋庸置疑。

要真正掌握一个工具,你需要了解:

  • 它的历史:谁创造的?为什么?解决了什么问题?
  • 它的现状:谁在维护?他们在哪里工作?负责什么?
  • 它的局限:何时不适合使用?何时会出问题?
  • 它的生态:有哪些相关库?谁在使用?有什么插件?

例如,作为重度使用 Kafka 的后端工程师,你不仅需要了解 Reddit 上的讨论,更要深入掌握 Kafka 内核——这才是顶尖工程师应有的素养,这是我所期望的!

真正阅读错误信息

真正去阅读错误消息并尝试理解所写的内容。事实证明,如果你只是坐下来静心研读错误消息,它就会开口说话。最优秀的工程师可以从很少的上下文中推断出大量信息。只需阅读错误消息,您就可以自行解决大部分问题。

问题拆解能力

所有人都会遇到瓶颈,顶尖程序员擅长将复杂问题分解为可消化的小块。这是一种难以掌握的能力,需要大量经验积累。或者,你天生就有很棒的解决问题的能力,例如,你很聪明。如果你不是这样,你可以通过训练来提升,但无法避免解决难题。这个世界上有一些问题对于任何参与其中的人来说都很难。

如果你是一名职业开发者,这正是你被雇佣的核心能力:分解问题。如果你做对了,那感觉就像开挂:你只需要不断解决拆解过后的简单问题,直到你完成。

勇于动手实践

我所认识的最优秀的开发者会大量阅读代码,而且他们不畏改变。他们从不说“这不归我管”或“我帮不上忙”。相反,他们会直接动手去学习。代码终究只是代码。通过投入时间精力,他们能掌握任何所需技能。在不知不觉中,他们就会成为团队中他们接触过的任何东西的首选人物。往往只是因为他们是唯一敢于尝试的人。

乐于助人

这是一个与上一条相关的特质。优秀的工程师非常抢手,而且非常忙碌,但他们始终保持助人之心。这是因为他们天生好奇,这种天然的求知欲和协作精神,正是他们成为伟大工程师的首要原因。有他们在你的团队里是件极其幸运的事,因为他们是问题解决者。

写作

最优秀的工程师通常都善于表达,并乐于分享知识。

他们通过博客、技术演讲、开源项目或这些方式的结合等形式输出观点。

我认为写作能力和编程能力之间有很强的相关性。我认识的所有最优秀的工程师都至少精通一种人类语言——很多时候还可能是多种。写作风格反映思维模式,反之亦然。一个人的写作风格在很大程度上说明了他们的思维方式。如果行文令人困惑且缺乏结构,那他们的编码风格也会如此。如果行文简洁、富有启发、结构合理且有时诙谐幽默,他们的代码也会如此。

优秀的程序员往往能在文字中找到乐趣。

终身学习

我认识的最优秀的开发者中不乏 60 岁以上的前辈,但他们的技术能力可以轻松超越我。部分原因在于他们持续学习。如果遇到没有尝试过的新工具或喜欢的语言,他们就会学习它。这样,他们总是毫不费力地保持与时俱进。

这并不是理所当然的:很多人在大学毕业或开始第一份工作后很快就停止了学习。固守着学校所学的“正确”方法。所有新事物都是糟糕的,不值得他们花时间学习。因此,有些 25 岁的人已经“精神退休”,也有 68 岁的人仍然思维活跃。我试图成为后者。

与此相关的是,最优秀的工程师不盲目追随潮流,但会审慎评估新技术价值。即使否定某项技术,他们也能清晰解释原因、适用场景及替代方案。

地位无关紧要

最优秀的开发中与首席工程师和新人交流时一视同仁。他们试图向每个人学习,无论老少。新人未被办公室政治污染,常能提出突破性的解决方案。也许过去的障碍已经不复存在,这使得新人成为灵感的重要来源。

建立声誉

如果你能做好工作,那么你可以成为一名可靠的工程师,但如果你出色的工作广为人知时,你能成为最优秀的工程师之一;至少在一个(更大的)组织内是这样。

建立个人声誉的方式有很多:

  • 你为(大型)组织开发并交付关键系统。
  • 你开发了一个知名工具。
  • 你为流行的开源项目做出了贡献。
  • 你写了一本广为流传的技术书籍。

为什么我认为因为工作出名很重要?以上都是扩大你在社区中影响力的方法。知名开发者比普通开发者能影响更多的人。你可以编写的代码是有限的。如果您你想“扩大”你的影响力,你必须成为思想领袖。

建立声誉是一个长期目标。它不会在一夜之间发生,也不必如此急于求成。而且这不会偶然发生。你需要日复一日的付出。随着时间的推移,这项工作的成果将不言自明。更多的人会信任你和你的工作,他们会想和你合作。你将参与更有声望的项目,并且你的影响力会随之扩大。

我曾经听说过这样一个说法,你最新的工作成果应该让你之前的所有成就都黯然失色。这是一个好兆头,说明你走在正确的路上。

保持耐心

对计算机和人都要保持耐心,尤其是对自己。不是所有事情都能立即奏效,学习需要时间。并不是说你周围的人都很笨;他们只是掌握的信息不完整。缺少耐心,你会觉得整个世界都在与你作对,你周围的人都很无能。那是很悲催的。你可能会聪明反被聪明误。

如果你想成为最优秀的人,你需要惊人的耐心、专注和奉献精神。要想解决难题,你就不能轻易分心。你必须回到键盘前才能克服它。你必须投入精力,把一个项目推过终点线。如果你能做到这一点,而不是像个傲慢的家伙,那就更好了。这就是最优秀的人和其他人的差异。

永远不归咎于计算机

大多数开发者遇到诡异、看似”随机”的 bug 时,会责怪软件、他人、他们的狗,甚至是天气。

但顶尖开发者不会。

无论计算机的行为看起来多么反复无常或捉摸不定,背后必定存在逻辑解释:你只是尚未发现而已!

最优秀的开发者会持续深挖直至找到原因。他们可能不会立即找到答案,甚至永远找不到,但永远不会归咎于外部环境。

秉持这种态度,他们能取得惊人的进步,掌握其他人无法理解的奥秘。当你将 bug 误认为是不可理解的魔法时,它就会永远以魔法的形式困扰你。

敢于承认“我不知道”

在面试中,我常刻意追求让候选人至少说一次“我不知道”。这并不是为了彰显优越感(尽管某些人确实会产生这种误解)。不,这是为了触及他们的认知边界。我希望与他们共同站在已知领域的边缘地带。很多时候,我自己也不知道答案。坦白说,答案本身并不重要,真正重要的是候选人是否在面试中胡编乱造。

最出色的候选人会这样回应:“嗯,这个我不知道,但这个问题很有趣!如果让我推测的话,我认为…”随后他们会开始推导答案。这种表现正是成为杰出工程师的潜质标志。

不敢说“我不知道”的人,往往源于傲慢或防备心理。我绝不容忍团队中存在信口开河的人。承认认知局限才是明智之举。唯有接受未知,才能开启学习之路。正如爱因斯坦所言:“重要的是,永远不要停止发问。”

拒绝猜测

“面对歧义,拒绝猜测的诱惑” —— 这是《PEP 20——Python之禅》中我最钟爱的准则。

猜测的诱惑实在太大了!

我曾多次深陷其中,并且最终没能抵制住诱惑。

当你选择猜测时,必然会产生两种后果:

  • 最佳情况是,你猜错了,你的错误假设导致产生了一个 bug。
  • 最坏情况是,你猜对了…你却因此停止质疑。你基于错误假设构建的心智模型,将会长期如影随形地困扰你。

再次强调:务必抵制猜测的冲动。提出问题,查阅官方文档,使用调试器,刨根问底——采取一切必要手段获取正确答案。

保持简单

聪明的工程师编写精巧的代码。卓越的工程师编写简洁的代码。

这是因为大多数时候,简洁就足够了。而简洁比复杂更容易维护。有时追求正确性确实重要,但懂得区分何时需要复杂方案,何时适可而止,正是优秀工程师与普通工程师的分水岭。

保持简洁,你就能达成非凡的成就。专注于那些正确的事情。

结语

上述特质既不是检查清单,也不是竞赛准则;卓越的工程实践更不是赛跑。

只是不要欺骗自己,以为可以绕过艰苦努力。没有什么捷径可走。祝你的技术之路顺利前行。