编程巨星的唯一秘诀
在软件的所有法则之前,在软件的目的之前,在软件设计科学本身之前,有一个单一的事实决定了软件开发者的成功或失败。这个事实区分了似乎能在一天内掌握新语言的高级工程师和挣扎十年只为挣薪水、编程他人设计且从未改进到足以获得晋升的初级开发者。它区分了糟糕的程序员和优秀的程序员,优秀的程序员和伟大的程序员,以及伟大的程序员和那些凭借技能创立了数十亿美元帝国的“摇滚明星”程序员。
这并不复杂,也不是难以知晓的事情。它不是你只有天生具备特殊才能或“编程好的魔法能力”才能做到的事情。个人的天性并不决定他们是否会成为优秀的程序员或糟糕的程序员。
只有一个单一的事实:你越理解你在做什么,你就会做得越好。
摇滚明星程序员对他们所做的事情的理解远远超过普通或平庸的程序员。这就是全部。
要成为一名优秀的程序员,你只需要完全理解你在做什么。
有些人可能会说他们已经理解了一切。测试在于他们是否能应用它。他们是否生产出架构优美、维护愉快的系统?他们是否以几乎让普通程序员难以想象的速度解决编程问题?当被求助时,他们是否用简单的概念清晰地解释一切?那么他们就是优秀的程序员,他们很好地理解事物。
然而,比相信他们“无所不知”更常见的是,许多程序员(包括我自己)经常感觉像是被锁在一场与压倒性信息海洋的史诗般的战斗中。有太多要知道的东西,一个人 literally 可以花余生学习,但仍然只掌握计算机领域所有数据的90%。
在这场史诗般的战斗中的秘密武器,计算知识的Excalibur,是理解。你对你领域最基础层次的理解越好,学习下一层次就越容易。你对该层次的理解越好,之后的下一层次就越容易,依此类推。然后,一旦你从最基础的简单性走到最高的复杂性,你可以重新开始,并惊人地发现在最最底层还有更多要知道的东西。
这似乎简单得不像真的,但事实确实如此。成为一名优秀程序员的路径就是充分和完全的理解,从对基础的深刻掌握开始,逐步到对最先进数据的牢固控制。
我不会对你撒谎——这有时是一条漫长的道路。但它是值得的。在道路的尽头,你可能会发现自己突然成为那个每个人都来寻求建议的惊人高级工程师。你可能是那个解决一切问题、被所有同行钦佩的不可思议的程序员。你甚至可能成为一个“摇滚明星”,拥有数百万美元和一个极其成功的产品。谁知道呢?我不能告诉你该做什么或成为什么。我只能指出一些我发现真实且有价值的信息。你用它做什么取决于你。
-Max
评论精选
Antonio Marcus 说: 2009年11月10日下午3:50
他们还必须真正热爱他们的手艺。承认吧,他们爱它。他们生活并呼吸着它。这是他们的全部存在。哈哈。但是是的,理解更多……以及理解软件行业的游戏……真的对摇滚明星有贡献。
Tbee 说: 2009年11月11日上午3:08
我完全同意;这就是为什么我相信编译器和操作系统的内部是任何软件开发教育中最重要的课程之一。因为真正理解你的代码最终是如何执行的(知道触发器可能有点过于详细),一条指令最终如何分配内存,字节如何通过网络传输……每一段代码都归结到那个层次,一旦你理解它是如何工作的,就很容易将不同的方法映射到那个基础知识上。
不幸的是,大多数教育都在取消这种“原始”课程,以支持例如GUI设计技术。也相关,当然,但不是代替。
Michael 说: 2011年11月18日下午7:34
虽然学习计算机如何在低层次执行你的指令有优势,特别是对于系统和微控制器编程,但最好的程序员更 consistently 具备的技能是抽象问题的复杂性并在更高层次解决问题的能力。好的程序员让事情对自己容易,因为当你必须一次在头脑中保持大量状态时,你会犯导致错误的错误。提供好的抽象也使你的代码更容易被他人维护和扩展。
正如一位发帖人也提到的,经验很重要。我与该领域最好和最聪明的人一起工作(免责声明:我是谷歌的软件工程师),我想不出这里有谁编码时间少于十年。我自己已经编码19年——我生命的大部分时间。没有替代投入时间和编写代码的方法。阅读书籍不是编写代码的替代品。阅读他人的代码可以教你宝贵的教训并给你洞察,但除非你使用它们编写代码,否则它们会很快消失。
最终,编码是一个直观的过程。掌握不是从书籍或他人那里学习规则和模式,而是内化解决问题所需的思维模式,以至于你可以不思考地设计大多数解决方案。过了一段时间,你就知道如何做了。是编写真实代码和解决真实问题的实践让你到达那里。
Erick R. B. 说: 2019年1月17日下午5:19
什么是基础?我应该学习什么?计算机架构?操作系统?计算机网络?算法?数据结构?
Mike W. 说: 2019年1月17日下午5:22
那真的取决于你在做什么。
(你是真的在问这个问题吗?还是只是在说明一个观点?很难说。)