+8613426109659
webmaster@21cto.com

林纳斯·托瓦茲:编程之美

技术人生 5 83 2天前
图片

导读:本篇编译取自林纳斯·托瓦茲 Linus Torvalds)的自传《 Just for Fun:一个例外革命者的故事》。

我不知道该如何真正解释我对编程的热爱,但我会尽力。

对于从事编程的人们来说,编程是世界上最有趣的事情。它比国际象棋更复杂,你可以制定自己的规则,最终结果取决于你所能创造的一切。

然而从外部来看,它似乎是地球上最无聊的东西。

编程最初让人兴奋的部分原因很容易解释:只要你告诉计算机做某件事,它就会照做。准确无误——永远,毫无怨言。

这本身就很有趣。

然而,盲目服从本身,虽然一开始很吸引人,但显然不会成为一个讨人喜欢的伙伴。编程之所以如此引人入胜,是因为虽然你可以让计算机按照你的意愿行事,但你必须弄清楚如何去做。

我个人认为计算机科学与物理学有很多共通之处。两者都是在相当基础的层面上研究世界是如何运作的。当然,区别在于,物理学让你弄清楚世界是如何构成的,而计算机科学让你创造世界。在计算机的框架内,你就是创造者。你最终可以控制发生的一切。如果你足够优秀,你甚至可以成为上帝,只是在一个小范围内。

我这样说可能冒犯了地球上大约一半的人口。

但这是真的。你可以创造自己的世界,唯一限制你能力的只有机器的能力,以及如今越来越常见的你自己的能力。

可以想象一下树屋。你可以建造一个功能齐全、带有活板门且稳定的树屋。但每个人都知道,单纯坚固的树屋和充分利用树木的美观树屋之间存在着区别。这关乎艺术与工程的结合。这也是编程如此引人入胜、令人回味无穷的原因之一。功能性往往比趣味性、美观性或震撼性更重要。

S Treehouse Hardware Kit for 1-2 Trees, Tribeam V90

树屋的设计

(图片来源:https://thetreehouse.shop/en/products/s-treehouse-hardware-kit-1-2-trees

这是一次创造力的锻炼。

最初吸引我进入编程领域的,是我想弄清楚计算机工作原理的过程。最大的乐趣之一,就是了解到了计算机就像数学:你可以用它自己的规则构建自己的世界。在物理学中,你会受到现有规则的约束。但在数学中,就如同编程中一样,只要自洽,任何事情都可以。数学不必受任何外部逻辑的约束,但它本身必须合乎逻辑。正如任何数学家所知,你确实可以得到一组三加三等于二的数学等式。事实上,你可以做任何你想做的事情,但随着复杂性的增加,你必须小心,不要创造出与你创造的世界不一致的东西。为了让这个世界变得美丽,它不能包含任何缺陷,这是编程的工作原理。

人们如此迷恋计算机的原因之一是,它们能让你体验自己创造的新世界,并掌握其中的可能性。

在数学中,你可以进行”脑力体操“,思考可能发生的事情。例如,大多数人想到几何时,都会想到欧几里得几何。但是计算机帮助人们将不同的几何图形可视化,这些几何图形根本不是欧几里得几何图形。有了计算机,你可以把这些虚构的世界真实地呈现出来。还记得曼德布洛特集吗?——基于本华·曼德布洛特(Benoit Mandelbrot)方程的分形图像?这些都是纯数学世界的视觉呈现,在计算机出现之前,这个世界是不可能被可视化的。曼德布洛特只是随意地为这个世界编造了一些规则,这些规则并不存在,与现实毫无关联。但事实证明,这些规则创造出了迷人的图案。借助计算机和编程,你可以构建新的世界,有的图案真的很美。

然而,大多数时候我们并没有这样做,你只是在编写一个程序来完成某项任务。在这种情况下,你不是在创造一个新的世界,而是在解决计算机世界中的一个问题。问题通过思考就能得到解决。只有特定类型的人才能坐在电脑前,盯着屏幕,把事情想透彻。

只有像我这样呆头呆脑的极客才能做到。

操作系统是机器中所有其他功能的基础,而创建操作系统则是一项终极挑战。创建操作系统,就等于创建了一个所有运行计算机的程序赖以生存的世界——本质上,你将制定哪些行为可以接受、哪些行为不能做的规则。每个程序都是如此,但操作系统是最基础的。这就像为你所创造的这片土地制定一部宪法,而计算机上运行的所有其他程序都只是普通的规则。

有时法律本身并无道理。但道理正是你所追求的。你希望能够审视解决方案,并意识到自己以正确的方式找到了正确的答案。

还记得学校里那个总能答对的学生吗?他比其他人答得快得多,因为他/她根本没去尝试。他/她没有学习过这道题的解法,只是用正确的方式思考。一旦你听到答案,就会觉得它完全合理。

计算机科学领域也是如此。你可以用蛮力解决问题,用那种愚蠢的、把问题不断推到不再是问题的方法,或者你也可以找到正确的方法,问题突然就消失了。你换个角度看待问题,然后顿悟:它之所以是个问题,只是因为你用错了角度。

或许,这方面最典型的例子并非来自计算机科学领域,而是来自数学。据说,伟大的德国数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在学校里时,他的老师觉得无聊,为了让学生专心,就让他们把 1 到 100 之间的所有数字加起来。老师以为这些年轻人会花一整天时间做这件事。但这位崭露头角的数学家五分钟后就给出了正确答案:5050。答案并不是真的把所有数字加起来,因为那样既令人沮丧又愚蠢。他发现,1 加 100 等于 101;然后,2 加 99 等于 101;3 加 98 等于 101。所以 50 加 51 等于 101。几秒钟之内,他就发现有 50 对 101,所以答案就是 5050。

这个故事或许是有点离谱,但其要点很明确:伟大的数学家不会用冗长乏味的方法解决问题,因为他洞察了问题背后的真正模式,并运用这种模式以更好的方式找到答案。计算机科学领域也同样如此。当然,你可以直接编写一个程序来计算数字的和。在如今的计算机上,这简直易如反掌。但伟大的程序员只需凭借聪明才智就能知道答案。他知道如何编写一个优美的程序,以一种最终正确的新方法解决问题。

至今仍难以解释,为什么会有人如此着迷,连续三天苦苦思索,始终在找更好、更美的解决方法。

一旦你找到了方法,那感觉真是世界上最美妙的事。

作者:林纳斯·托瓦兹

来源:

《 Just for Fun:一个例外革命者的故事》( HarperCollins 出版社)

网址:

https://www.brynmawr.edu/inside/academic-information/departments-programs/computer-science/beauty-programming

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。