宝玉xp 25-09-28 10:36
微博认证:前微软Asp.Net最有价值专家 2025微博年度新知博主 科技博主

编程之美
作者:Linus Torvalds (Linux 创始人)

我不知道该如何向你解释编程的魅力,但我愿意试一试。对于懂它的人来说,编程是这世上最有趣的事情。它就像一场游戏,但比国际象棋要复杂得多。在这场游戏里,你可以自己创造规则,而最终能得到什么,全凭你的想象和本事。

然而,在外人看来,这可能是地球上最无聊的事情了。

编程最初的乐趣其实不难解释:当你告诉计算机去做某件事,它就会一丝不苟地去执行。永远如此,从不抱怨。

这本身就很有意思了。

但是,盲目的服从虽然一开始很吸引人,却显然不能成为一个讨人喜欢的伙伴。编程之所以如此迷人,是因为虽然你能让计算机按你的意愿行事,但你必须先想出如何实现。

我个人深信,计算机科学和物理学有很多共通之处。它们都研究世界在相当基础的层面是如何运作的。当然,区别在于,物理学研究的是世界本来的构造,而计算机科学则是让你创造世界。在计算机的方寸之间,你就是造物主。你最终掌控着发生的一切。如果你足够厉害,你就可以成为上帝——虽然只是在一个很小的尺度上。

说出这话,我大概已经冒犯了地球上一半的人口。

但这是事实。你可以创造一个属于自己的世界,唯一能限制你的,只有机器的性能,以及如今越来越常见的——你自身的能力。

想象一下树屋。你可以造一个功能齐全、有活板门、结构稳固的树屋。但谁都分得清,一个仅仅是“结实”的树屋,和一个巧妙利用树木本身、充满美感的树屋,两者之间有天壤之别。这关乎艺术与工程的结合。这也是编程如此引人入胜、回报丰厚的原因之一。有趣、优美或震撼,这些特质的优先级,往往高于功能本身。

这是一种创造力的锻炼。

当初吸引我投身编程的,正是探索计算机工作原理的过程。我最大的乐趣之一,是发现计算机就像数学:你可以创造一个拥有专属规则的世界。在物理学里,你受限于既有规则;但在数学和编程中,只要能自圆其说,一切皆有可能。数学不必受任何外部逻辑的约束,但其本身必须逻辑自洽。任何一个数学家都知道,你完全可以建立一套数学方程,让三加三等于二。事实上,你想做什么都可以,但随着复杂度的增加,你必须小心,不要在你创造的世界里引入内在的矛盾。一个美丽的世界,不能有任何瑕疵。编程也是如此。

人们之所以对计算机如此着迷,原因之一是它让你能体验自己创造的新世界,并探索其中的可能性。在数学里,你可以对各种可能性进行思维体操。比如,大多数人一想到几何,就是欧几里得几何。但计算机帮助人们将不同的几何形态可视化,那些完全非欧几里得的几何。有了计算机,你可以将这些虚构的世界变成现实,亲眼看看它们的样子。还记得曼德博集合(Mandelbrot set)吗?那些基于伯努瓦·曼德博方程的分形图像?它们是一个纯粹数学世界的视觉呈现,在计算机出现之前是无法想象的。曼德博只是为这个不存在的世界随意设定了一些规则,这些规则与现实毫无关系,结果却创造出了令人着迷的图案。借助计算机和编程,你可以构建新世界,有时这些世界里的图景真的美得惊人。

当然,大多数时候你干的不是这个。你只是在写一个程序来完成某个特定任务。在这种情况下,你不是在创造一个新世界,而是在计算机的世界里解决一个问题。解决问题靠的是思考。只有特定类型的人才能坐下来,盯着屏幕,把事情想通透。只有像我这样呆呆的、有点极客范儿的人才行。

操作系统是一台机器里所有其他程序运行的基础。创造一个操作系统,是终极的挑战。当你创造一个操作系统时,你就在创造一个世界,所有运行在这台计算机上的程序都将生活在这个世界里——基本上,你在制定规则,规定什么是可以接受的、可以做的,以及什么是不能做的。每个程序都在做类似的事,但操作系统是最根本的。这就像为你创造的国度制定一部宪法,而运行在计算机上的所有其他程序,都只是普通法律。

有时候,这些“法律”显得不合逻辑。但“合乎情理”正是你追求的目标。你希望看到解决方案时,能由衷地感到,自己用正确的方式得出了正确的答案。

还记得上学时班里那个总能答对题的人吗?他解题的速度比谁都快,原因恰恰是他没有“刻意”去解。他不是去死记硬背解题步骤,而是用正确的方式去思考问题本身。一旦你听到他的答案,一切都显得豁然开朗。

计算机领域也是如此。你可以用蛮力,用那种把问题硬生生磨掉的笨办法;或者,你可以找到那个巧妙的切入点,然后问题瞬间就消失了。你换个角度看问题,就会有顿悟的时刻:原来它之所以成为一个问题,只是因为你看待它的方式错了。

关于这一点,最经典的例子可能不是来自计算机领域,而是数学。据说,伟大的德国数学家卡尔·弗里德里希·高斯上学时,他的老师觉得无聊,想给学生们找点事做,就让他们把从1到100的所有数字加起来。老师以为这群孩子得算上一整天。但这位崭露头角的数学家只用了五分钟就带着正确答案回来了:5050。解法并非真的把所有数字一个个加起来,因为那既麻烦又愚蠢。他发现,1加100等于101,2加99也等于101,3加98还是101,以此类推,50加51也是101。在几秒钟内,他意识到这其实是50对101,所以答案就是5050。

这个故事或许是杜撰的,但它传达的道理很清楚:一个伟大的数学家不会用冗长乏味的方式去解决问题,因为他能看穿问题背后的真正模式,并利用这个模式,用一种更优美的方式找到答案。在计算机科学里,这一定律同样适用。当然,你可以写个程序直接把所有数加起来。在今天的计算机上,这不过是弹指一挥间的事。但一个伟大的程序员会凭着自己的聪明才智直接知道答案。他会知道如何写一个优美的程序,用一种全新的方式去解决问题,而这种方式,最终被证明是正确的方式。

你很难向别人解释,为什么会有人愿意为了寻找一个更优美、更巧妙的解法而绞尽脑汁、苦思冥想三天三夜,那种感觉究竟有什么好。但是,一旦你找到了那个方法,那种感觉,就是这世上最美妙的。

转载自 Linus Torvalds (Linux 创始人) 与 David Diamond 合著的《只为好玩:一个意外的革命家》(Just for Fun: The Story of an Accidental Revolutionary),哈珀柯林斯出版社,2001年。

发布于 美国