我所认识的优秀程序员们:一些开发者的共同特质
我所认识的优秀程序员们
发布于 2025年4月4日 · 更新于 2025年4月7日
我一生中遇到过很多开发者。最近,我问自己:“成为最优秀的人需要什么?他们有什么共同点?”
我希望这篇文章能给一些人带来启发,我写下了我在我们行业中最杰出的人身上观察到的特质。我希望在我刚开始的时候就能有这样一份清单。如果我遵循这条路,就能节省我很多时间。
阅读参考文档
如果说我年轻的时候应该做一件事,那就是_阅读我正在使用的东西的参考文档_。例如,阅读 Apache Webserver Documentation,Python Standard Library,或者 TOML spec。
不要去 Stack Overflow,不要问 LLM,不要_猜测_,直接去看源头。通常情况下,它们出人意料地易于访问且编写良好。
非常了解你的工具
伟大的开发者在根本层面上理解他们使用的技术。
能够_使用_一个工具是一回事,真正_理解_(grok)它完全是另一回事。仅仅是使用者会摸索,很容易感到困惑,错误地使用它,并且不会优化配置。
专家会深入(在阅读了参考文档之后!)并坐下来为他们理解每一行的工具编写配置,并且可以向同事解释它。这不容置疑!
要了解一个工具,你必须了解:
- 它的历史:谁创造了它?为什么?为了解决什么问题?
- 它的现状:谁维护它?他们在哪里工作?做什么?
- 它的局限性:什么时候这个工具不合适?什么时候它会崩溃?
- 它的生态系统:存在哪些库?谁在使用它?有哪些插件?
例如,如果你是一个后端工程师,并且大量使用 Kafka,我希望你对 Kafka 有很多了解——不仅仅是你从 Reddit 上读到的东西。至少如果你想成为最优秀的工程师之一,我希望你如此。
阅读错误信息
就像真正阅读错误信息并尝试理解其中写的内容一样。事实证明,如果你只是坐下来冥想关于错误信息,它就会开始与你对话。最优秀的工程师可以从非常少的上下文中推断出大量信息。仅仅通过阅读错误信息,你就可以自己解决大部分问题。
如果你帮助一个不具备这种技能的人,也会感觉像是一种超能力。就像“从杯子里读取”一样。
分解问题
每个人都会有卡住的时候。最优秀的人知道如何摆脱困境。他们简化问题,直到它们变得易于消化。这是一项很难学习的技能,需要大量的经验。或者,你只是拥有出色的问题解决能力,例如,你很聪明。如果没有,你可以训练它,但没有办法绕过分解难题。世界上有些问题对于任何参与者来说都太难一次性解决。
如果你作为一名专业的开发者工作,那么这就是你获得报酬的大部分工作:分解问题。如果你做得对,你会觉得像作弊:你只是解决了简单的问题,直到完成。
不要害怕弄脏你的手
我认识的最优秀的开发者阅读大量的代码,并且他们不害怕接触它。他们从不说“那不适合我”或“我在这里帮不了你”。相反,他们只是开始并学习。代码_只是代码_。他们只需花费时间和精力就可以掌握任何需要的技能。在你意识到之前,他们就成为了团队中任何他们接触过的东西的首选人员。主要是因为他们是唯一一个一开始就不害怕接触它的人。
总是帮助别人
一个相关的观点。伟大的工程师需求量很大,并且总是很忙,但他们总是尝试提供帮助。这是因为他们天生好奇,并且他们的支持性思维是使他们成为伟大的工程师的原因。拥有他们在你的团队中是一种纯粹的乐趣,因为他们是问题解决者。
写作
大多数优秀的工程师都口才很好,并且乐于分享知识。
最优秀的人会为他们的想法寻找一些出口:博客、演讲、开源或这些的组合。
我认为写作技巧和编程之间存在很强的相关性。我认识的所有最优秀的工程师都至少精通一种人类语言——通常更多。掌握你的写作方式就是掌握你的思考方式,反之亦然。一个人的写作风格说明了他们的思考方式。如果它令人困惑且缺乏结构,他们的编码风格也会如此。如果它简洁、具有教育意义、结构良好且有时机智,他们的代码也会如此。
优秀的程序员乐于玩弄文字。
永不止步地学习
我认识的一些最优秀的开发者已经60多岁了。他们可以让我望尘莫及。部分原因是他们不断学习。如果有什么他们没有尝试过的新工具或他们喜欢的语言,他们会学习它。这样,他们总是可以轻松地掌握事物。
这并不是理所当然的:很多人在大学毕业或开始他们的第一份工作后很快就停止学习。他们固执地认为他们在学校学到的东西是做事情的“正确”方式。一切新的东西都是坏的,不值得他们花时间。因此,有25岁的“精神上退休”的人和68岁的头脑仍然清醒的人。我努力有一天能属于后者。
有点相关的是,最优秀的工程师不追随潮流,但他们总是仔细评估新技术的益处。如果他们拒绝它,他们可以准确地告诉你_为什么_,什么时候该技术是一个不错的选择,以及有哪些替代方案。
状态并不重要
最优秀的开发者与首席工程师和初级开发者交谈。没有等级制度。他们尝试向每个人学习,无论老少。新人通常还没有陷入办公室政治,并且仍然有清新的头脑。他们不知道为什么事情很_难_,因此他们提出了创造性的解决方案。也许过去的障碍不再存在,这使得这些人成为了灵感的来源。
建立声誉
如果你做得好,你就可以成为一名扎实的工程师,但只有当你因你的好工作而闻名时,你才能成为最优秀的人之一;至少在一个(更大的)组织内。
有很多方法可以为自己建立声誉:
- 你为一个(更大的)组织构建并交付了一项关键服务。
- 你编写了一个著名的工具
- 你为一个流行的开源工具做出了贡献
- 你写了一本经常被提及的书
为什么我认为因你的工作而闻名很重要?以上所有都是扩大你在社区中的影响范围的方式。著名的开发者比不出名的开发者影响更多的人。你能编写的代码是有限的。如果你想“扩展”你的影响力,你必须成为一个思想领袖。
建立声誉是一个长期的目标。它不会在一夜之间发生,也不必如此。它也不会偶然发生。你每天都出现并完成工作。随着时间的推移,工作会说明一切。更多的人会信任你和你的工作,他们会想与你合作。你将参与更负盛名的项目,并且圈子会扩大。
我曾经听说过这样一种观点,即你最新的工作应该盖过你以前所做的一切。这是一个你走在正确轨道上的好兆头。
保持耐心
你需要对计算机和人类保持耐心。特别是对自己。并非一切都会立即奏效,人们需要时间来学习。并不是你周围的人很笨;他们只是掌握的信息不完整。没有耐心,你会觉得世界与你作对,你周围的每个人都只是无能。那是一个悲惨的地方。你太聪明了,聪明过了头。
要成为最优秀的人之一,你需要令人难以置信的耐心、专注和奉献精神。如果你想解决难题,你不能轻易分心。你必须回到键盘前才能克服它。你必须努力工作才能将项目推过终点线。如果你能做到这一点而不成为一个傲慢的混蛋,那就更好了。这就是区分最好的人和其他人的原因。
永远不要责怪计算机
大多数开发者将软件、其他人、他们的狗或天气归咎于不稳定的、看似“随机”的错误。
最优秀的人不会。
无论计算机的行为看起来多么不稳定或恶作剧,都_总是_有一个合乎逻辑的解释:你只是还没有找到它!
最优秀的人会继续挖掘,直到找到原因。他们可能不会立即找到原因,他们可能永远不会找到它,但他们从不责怪外部环境。
有了这种态度,他们能够取得令人难以置信的进步并学习其他人无法学到的东西。当你将错误误认为是难以理解的魔法时,魔法将永远是魔法。
不要害怕说“我不知道”
在面试中,我极力促使候选人至少说一次“我不知道”。原因不是我想看起来更优秀(虽然有些人确实有这种印象)。不,我想达到他们知识的边界。我想和他们一起站在他们认为自己知道的边缘。通常,我自己也不知道答案。老实说,我并不关心答案。我关心的是当人们在面试中胡说八道时。
最优秀的候选人会说“嗯,我不知道,但这是一个有趣的问题!如果我不得不猜测,我会说……”然后他们会开始推断答案。这是一个你有潜力成为一名伟大的工程师的标志。
如果你害怕说“我不知道”,你就会带着傲慢或防御的姿态出现。我不喜欢团队里的吹牛者。最好承认你不可能什么都知道。一旦你接受了这一点,你就可以让自己学习。“重要的是你不要停止提问,”阿尔伯特·爱因斯坦说。
不要猜测
“面对含糊不清,拒绝猜测的诱惑”这是我在 PEP 20 – The Zen of Python 中最喜欢的规则之一。
而且猜测是如此、如此诱人!
我经历过很多次,并且我自己的野心失败了。
当你猜测时,可能会发生两件事:
- 在最好的情况下,你是错的,你错误的假设会导致一个错误。
- 在最坏的情况下,你是对的……你永远不会停止并重新审视自己。你根据错误的假设建立你的心理模型。这可能会困扰你很长时间。
再次,抵制猜测的冲动。提出问题,阅读参考文档,使用调试器,彻底地进行。尽一切努力来获得答案。
保持简单
聪明的工程师编写聪明的代码。杰出的工程师编写简单的代码。
这是因为大多数时候,简单就足够了。而且简单比复杂更容易维护。有时候把事情做对_确实_很重要,但知道区别是什么将最好的人和其他人区分开来。
通过保持简单,你可以取得很大的成就。专注于正确的事情。
最后的想法
以上不是一个清单或比赛;伟大的工程不是一场比赛。
只是不要自欺欺人地认为你可以跳过努力工作。没有捷径。祝你旅途愉快。
感谢阅读!我主要写关于 Rust 和我的(开源)项目。如果你想自动接收以后的文章,你可以通过 RSS 订阅。