很久以前,我写了一篇关于“为什么计算机很烂”(最终称为“计算机”和“计算机有什么问题 ”)的文章 [该链接在原始文档中是断开的,因此是网络归档的副本-译者注 ]的另外两个版本,原来的名字就没出现过)。 这篇文章足够长,但其实质可以归结为计算机是垃圾的,这是由于程序员创建了其他人无法理解的最疯狂的复杂事物,并且因为只要每个人都可以实现更高的复杂性,程序的方面将不会变得难以管理。

从这里开始
当时我不知道的是程序员为什么要这样做。 很明显,他们正在这样做 ; 但是,为什么软件行业会创建如此众多的 ,复杂且无法读取的代码? 为什么即使在开发人员似乎应该从最初的负面经验中学到后,为什么这种情况仍会继续呢? 是什么使程序员不仅编写了不好的代码,而且还在不断地编写代码?
好吧,这对我来说是个谜,但是起初我并不特别担心。 “不良程序来自不良程序员”这一想法是如此简单和明显,以至于它成为整个编程领域研究的基础,最终取得了良好的结果(主要在本博客中进行介绍,也是本主题的主题)。当前正在写的书)。 发现了问题(造成复杂性的不良程序员),乍一看,她有了解决方案(为防止这种情况创建软件开发规则),这对我来说已经足够了。
但是我仍然想知道,尽管在软件开发技术的教学方面有数十年的经验,但举世闻名的大学,技术学校和教育计划会毕业如此糟糕的程序员。 当然,程序设计的许多原理从未被保密过,许多好的技巧指日可待,其中许多是非常通用的。 即使人们不上学,他们也没有阅读任何此类建议吗?
好吧,真相超出了我的想象,在众多开发人员的参与下,花了将近五年的时间在Bugzilla项目中工作,所以有一天,我突然意识到了一个可怕的事实:
绝大多数(90%或更多)的程序员都不知道自己在做什么。
不是说他们没有阅读任何有关软件开发的内容(尽管很可能没有)。 并不是说编程语言太复杂了(尽管确实如此)。 事实是,大多数程序员都不知道他们实际上在做什么。 他们只是在模仿其他程序员的错误-在计算机上复制代码并在计算机上打印或多或少有意义的咒语,以希望其行为与他们期望的类似,而无需真正了解计算机的原理,软件开发的原理或价值。他们输入计算机的每个单词和符号。
这是一个大胆,令人震惊和侮辱性的说法,但我的经验证实了这一点。 我亲自浏览并评估了数十位程序员的代码。 我读了很多其他人的代码。 我与许多程序员讨论了软件开发问题,并阅读了数百名开发人员的文章。 真正了解自己的工作的人数仅占我曾经与之交谈,合作或听说过的所有程序员的10%。
开源开发人员是最好的。 这些人即使在业余时间也想编程。 即便如此,我还是要说,只有约20%的开源开发人员真正擅长于自己的工作。
但是为什么呢? 怎么了 怎么会有这么多人在这个行业工作,却不知道自己在做什么?
好吧,看来他们在某种程度上是“愚蠢的”。 但是什么是愚蠢? 人们不会仅仅因为不了解某些东西而变得愚蠢。 并非所有人都知道很多。 但这并不能使他们变得愚蠢。 这使他们对某些事情一无所知,但并不愚蠢。 不,愚蠢,真正的愚蠢-这意味着不知道自己不了解某些东西 。 愚蠢的人认为他们知道某事,尽管他们不知道 ,或者他们没有意识到知识领域比他们想像的要广得多 。
这种“愚蠢”几乎可以在任何领域找到,软件开发也不例外。 许多程序员根本没有意识到软件开发可能存在某些法律或一般原则,因此他们甚至没有尝试找到它们。 许多软件公司都没有尝试提高对使用的编程语言开发人员的了解。 也许这是因为管理层认为程序员应该“已经知道了这一切,因为他们被雇用去做这件事”。
不幸的是,这种观点在开发软件时是有害的,因为如果您想成为一名真正的优秀程序员,则需要了解很多知识 。 任何认为自己知道一切的人(或拥有“盲点”,因此他看不到要学习的东西)的人-在缺乏知识的情况下模糊其理想代码-关于他们不知道的存在的知识他们知道 ,甚至没有意识到缺乏知识的事实 。
无论您知道多少, 任何领域中总会有其他事物,编程也不例外。 因此,以为您知道一切总是错误的。
有时很难确定您需要学习什么 。 数据太多,但是您从哪里开始呢? 为了解决这个问题,我提出了几个问题,我需要问自己或其他人,以确定哪些领域需要进一步研究:
- 您是否了解代码每一页上每个单词和每个字符所能提供的一切?
- 您是否已阅读并完全了解所使用的每个功能的文档?
- 您对软件开发的基本原理是否有很好的理解-如此好以至于可以向组织中的新手程序员解释它?
- 您了解计算机的每个组件如何工作以及它们如何协同工作吗?
- 您是否了解计算机的历史以及它们将如何进一步发展以便了解您的代码将如何在将来创建的计算机上执行?
- 您是否了解编程语言的历史,以了解您使用的语言是如何演变的, 为什么会这样工作?
- 您是否了解其他编程语言,其他编程方法和计算机类型,这些与您用来了解哪种工具最适合每个任务的方法不同?
- 自上而下列出了对于程序员来说,了解他编写的代码最重要的事情。 如果您能对所有这些问题诚实地回答“是”,那么您绝对是一名出色的程序员。
列表的长度可能令人沮丧。 “哇,请阅读每个功能的文档吗? 是的,这将需要很多时间!” 好吧,您知道还会花费很多时间吗? 无需阅读文档即可成为一名优秀的程序员。 你知道多少? 永恒 ,因为这永远不会发生。
仅仅复制别人的代码并祈祷它会为您服务,您将永远无法成为一名优秀的程序员。 但更重要的是,在培训上投入时间意味着要成为一名优秀的[ 程序员-大约。 翻译者 ]。 现在所花费的时间将使您成为将来更快的程序员。 如果您在学习新技术的前三个月中花费大量时间阅读,那么在接下来的10年中,您可能会比不阅读任何内容就匆匆使用它的人快10倍。
我想立即澄清-当然, 仅仅阅读三个月并成为一名优秀的程序员是行不通的。 首先,这太无聊了-没有人想在没有任何实践的情况下塞满三个月的理论。 很少有人能做到如此长的时间甚至可以成为一名程序员,更不用说一次就成为好人了。 因此,我想立即指出,理解来自实践 ,而不仅仅是理论。 但是, 如果不学习理论,就可能根本无法理解。 因此,在实际程序设计和理论之间取得平衡非常重要。
我不是在攻击我亲自工作过的任何程序员,也不是在攻击一般的任何特定程序员。 我钦佩几乎我曾经认识的每个程序员,如果我遇到他们,我希望钦佩其他人。 相反,我敦促所有程序员对新事物开放思想,以便总是有一些新知识,理论和实践是精通掌握的关键,并且不了解任何东西都不可耻-如果您您知道您一无所知。 只要花点时间找出必要的时间。
从翻译者那里:我试图以一种文学风格进行翻译,所以由于希望使翻译更具可读性,所以一些原著中的陈述或想法被歪曲了。 如果是这样,请不要开车撒小碎布,而要写PM。