《架构师》2021年6月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

卷首语

我不知道该如何清楚地描述我对编程的痴迷。对编程的人来说,这是世界上最有趣的事情。这是一个比国际象棋更复杂的游戏,在这个游戏中,你可以制定自己的规则,并基于这些规则得到最终的结果。

然而,从表面上看,它似乎是地球上最无聊的东西。编程最初令人感到兴奋的地方在于,当你告诉计算机要做什么,它就会按照你的意思去做,分毫不差,马不停蹄,毫无怨言。

这本身就很有趣。但是,尽管最初令人着迷,单靠盲目顺从显然并不能让编程成为讨人喜欢的伴侣。让编程变得如此吸引人的是:你可以让计算机按照你的意思执行任务,但你必须先弄清楚如何执行。

我认为,计算机科学与物理学有很多共同之处。两者都是关于世界是如何在一个基本层面上运作。当然,它们的不同之处在于,物理学要弄清楚世界是如何构成的,而计算机科学是要创造世界。在计算机世界里,你是创造者,最终将控制发生的一切。如果足够优秀,你可以成为某个领域的上帝。

我这么说可能冒犯了地球上一半的人。但真的是这样。

你要创造自己的世界,唯一能限制你的是机器的能力和你自己的能力。

想象一下你要建造一个实用的树屋,它有一个活板门,而且很稳固。但是,每个人都知道简单稳固的树屋和漂亮树屋之间的区别是什么。它是艺术和工程的结合。这就是为什么编程可以如此迷人的一个原因。与有趣、漂亮和令人惊艳相比,功能就变得次要了。这是一种创造性的活动。

最初吸引我接触编程的是我想要弄清楚计算机的工作原理。我最大的一个乐趣是知道了计算机就像数学一样:你可以用自己的规则来构建自己的世界。

在物理学里,你会受到已有规则的约束。但在数学和编程领域,不管是什么,只要它是自洽的就行。数学不必受任何外部逻辑的约束,只要它本身具有逻辑性。数学家们都知道,你可以定义一组数学方程式,让3加3等于2。你可以做任何你想做的事,只是在不断增加复杂性的同时,要小心不要创造出与你所创造的世界不协调的东西。一个美丽的世界不能包含任何瑕疵,编程就是这样。

人们之所以如此迷恋计算机,其中一个原因是计算机可以让你体验你创造出来的世界,并了解一切可能的东西。

在数学里,你需要通过大脑进行想象。例如,当大多数人想到几何时,他们想到的是欧几里得几何。但是,计算机可以帮助人们可视化不同的几何图形,甚至是那些非欧几里得图形。有了计算机,你就可以看到这些虚构的世界是什么样子的。还记得曼德尔布罗特集合的分形几何图形吗?这些都是纯粹数学世界的视觉表现,在计算机出现之前是无法被可视化的。曼德尔布罗特只是制定了这些关于一个不存在的世界的规则,这些规则与现实毫无关联,但事实证明,它们创造了迷人的图案。有了计算机和编程,你就可以创造新世界。有时候,这些图案真的很漂亮。

但在大多数时候你并不是在创造世界,你只是通过写程序来完成某个特定的任务。这个时候,你不是在创造新世界,而是在解决计算机世界里的某个问题。你通过思考来解决问题。只有某一种类型的人能坐在那里盯着电脑屏幕思考问题,比如像我这样的书呆子。

操作系统是计算机的基础,而开发操作系统是一个终极挑战。开发操作系统就是在创造一个世界,所有的程序都在这个世界里运行,规则由你来制定,比如什么是可接受的、什么可以做、什么不能做。每个程序都遵循这些规则,而操作系统是基础。操作系统就像是你所创造的世界的宪法,其他程序则是普通法律。

有时候,法律本身没有意义,意义本身才是你要追求的东西。你希望用正确的方法得到正确的答案。

还记得学校里总能得到正确答案的那个人吗?那个人之所以比其他人更快得到答案,是因为他(她)并没有尝试去得到答案。那个人不知道该如何解决这个问题,但他(她)会用正确的方式思考问题。

计算机也是如此。你可以用蛮力或愚蠢的方式尝试寻找答案,或者你找到了正确的方法,问题就迎刃而解了。如果从另一个角度看问题,你就会顿悟:问题之所以是问题,是因为你看问题的方式不对。

也许,这方面最好的例子不是来自计算机领域,而数学领域。

有这样一个故事:伟大的德国数学家卡尔·弗里德里希·高在学校的时候,他的老师讲课索然无味,为了让学生们全神贯注,他要学生们把1到100之间所有的数字加起来。老师希望这些年轻人花一整天时间来算出这些数字的和。但五分钟之后,这位数学家就给出了正确答案:5050。他的解决办法不是把所有数字加起来,因为那样做太愚蠢了。他发现1+100=101,2+99=101,3+98=101……最后是50+51=101。很快,他得出总共是50个101,所以答案是5050。

也许这个故事是虚构的,但寓意很明显:一个伟大的数学家不会用漫长而无聊的方法来解决问题,因为他会看到隐藏在问题背后的模式,然后用这些模式找到答案。在计算机科学领域也是如此。当然,你也可以编写一个程序来计算数字的和。在现在的计算机上完成这个任务是件非常容易的。但是一个伟大的程序员,只要想一想就知道答案是什么,他也知道如何写出一个漂亮的程序,用一种新的并且是正确的方法来解决问题。

当你不知道该如何以更好、更漂亮的方式解决问题,可能为此冥思苦想了三天三夜。很难解释为什么这个过程会让人着迷,但一旦你找到了正确的方法,那种感觉将是无与伦比的

来源:Linux之父:编程之美