现代计算机硬件令人惊叹。制造商已经将数十亿个硅片编排成极其复杂和高效的结构,这些结构扫描电子穿过无数纠结的路径、分支和团聚,唯一的目的就是以每秒超过10亿次的速度执行计算。这一令人敬畏的计算奇迹拥有数十亿个独特的可寻址硅板,它可以将数百万次计算的结果存储在几个几乎消失的小芯片阵列中。所有这些硬件,虽然每个部件通常距离其他部件不超过7或8厘米,但循环速度如此之快,以至于光速(宇宙的物理定律)限制了它们相互通信的速度。
为什么你的操作系统需要10秒,30秒,1分钟才能启动?当您在云上保存文档时,为什么文字处理器会冻结?为什么你的网络浏览器需要3,4,10秒来加载一个网页?为什么你的手机很难同时打开几个以上的应用程序呢?为什么每次更新都会以某种方式使问题变得更糟?
不一定是你,不一定是我,不一定是任何一个人。但是我们,软件开发社区,因为忽视了我们职业的基本现实而使它变得缓慢。我们编写代码,在计算机上运行的代码。具有中央处理单元、随机存取存储器、硬盘驱动器和显示缓冲器的真实计算机。真正的计算机,有整数和按位数学和浮点单元,以及二级缓存,有线程和内核,以及到其他10亿台计算机的微不足道的网络连接。真正的计算机不是为了便于人类理解而建造的,而是为了令人眼花缭乱、令人无法理解的快速速度而建造的。
在我们匆忙地把我们的产品、我们的项目、我们的手头和脑海的作品送到尽可能多的人手中时,我们走了捷径。我们做假设。我们概括和抽象,并假设仅仅因为这些问题以前已经解决过,它们就再也不需要解决了。我们构建抽象层,然后忘记我们构建的抽象层,在上面构建更多的抽象层。
的确,我们中的许多人认为我们没有时间、金钱和精神带宽来总是详细地考虑这些事情,这一点是真实的,我们中的许多人都认为我们没有时间、金钱和精神带宽来总是详细地考虑这些事情。最后期限快到了,或者房租到期了,或者我们要交税,一位经理在我们身后,有人问我们为什么总是在办公室花这么多时间,我们只需要把图书馆、虚拟机或垃圾收集器放在那里,就可以掩盖我们现在想不起来的地方。
我们中的其他人从未被教导去思考计算机本身。我们了解了对象、类和模板,以及如何使我们的代码干净美观。我们学习了如何编写代码来让客户、经理或教师满意,但却让处理器变得混乱。因为我们这样做了,我们被赋予的那种惊人的速度被我们浪费了,在一千个抽象层的死亡中被我们浪费了。
我们中的一些人多走了几步进入覆盖的区域,轮子一动不动地坐在我们身后的一堆,检查他们的设计,并决定有一个更好的方法。我们中越有经验的人越记得软件过去是怎样的,我们知道计算机程序存在的潜力是有用的、通用的和高效的。我们中的其他人厌倦了我们应该毫无怨言地使用的工具,但这些工具一次又一次地让我们失望。我们中的一些人只是好奇,不知道什么对我们有好处。不要相信别人告诉我们的对我们有好处。
我们坐下来看了看我们的硬件,检查了我们的数据,并思考如何使用其中一个来转换另一个。我们修修补补,测量,阅读,比较,写作,改进,修改,一遍又一遍地测量,直到我们发现我们建造了同样的东西,但速度快了10倍,对我们为之设计的人更有用。我们是手工建造的。
这就是手工制作的意思。它不是一种技术、一种语言或一种管理战略,它不是一个公式、一个图书馆或一个抽象概念。这是个好主意。我们可以构建与计算机协同工作的软件,而不是与之对抗的想法。有时一个单独的程序员可以比一个大团队更有效率,一个小团队可以比一大群软件工程师做得更多,并且“做得更好”。我们认为编程就是转换数据,我们使用代码,这是我们用来将数据屈从于我们的意愿的工具。
它不需要学位,不需要毕业论文,也不需要十年的工作经验。你不需要昂贵的电脑或证书,甚至不需要先验知识。你所需要的就是开放的心态和好奇心。剩下的事我们会帮你做的。