编程之美

作者:Linus Torvalds (Linux的创造者)

我不知道如何解释我对编程的迷恋,但我会努力的. 对于从事这项工作的人来说,这是世界上最有趣的事情. 这是一个比国际象棋复杂得多的游戏, 在这个游戏中,你可以制定自己的规则,最终结果取决于你自己的想法.

然而,在外界看来,它似乎是地球上最无聊的东西.

编程最初令人兴奋的部分原因很容易解释:当你告诉计算机去做某事时, 它会做到的. 正确地. 永远. 毫无怨言.

这本身就很有趣.

而是盲目的服从本身, 虽然一开始很迷人, 显然不是个讨人喜欢的伴侣. 是什么让编程如此吸引人呢, 而你可以让电脑做你想做的事, 你得想办法.

我个人认为计算机科学与物理学有很多共同之处. 两者都是关于世界如何在一个相当基本的层面上运行. 的区别, 当然, 难道在学习物理的时候你就应该弄清楚世界是如何构成的吗, 在计算机科学中,你创造了世界. 在电脑的范围内,你就是创造者. 你最终控制了发生的一切. 如果你足够优秀,你可以成为上帝. 小规模的.

我这么说可能冒犯了地球上大约一半的人.

但这是真的. 你可以创造自己的世界, 唯一限制你能做的就是机器的能力, 最近越来越频繁了, 你自己的能力.

想想树屋. 你可以建造一个功能齐全、有活板门且稳定的树屋. 但是每个人都知道简单坚固的树屋和漂亮的树屋之间的区别, 这就利用了树的创造性优势. 这是艺术与工程相结合的问题. 这就是编程如此迷人和有益的原因之一. 功能通常次于有趣、美观或令人震惊.

这是对创造力的锻炼.

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

人们如此迷恋计算机的原因之一是,它们使你能够体验你可以创造的新世界, 去了解什么是可能的. 在数学中,你可以对可能发生的事情进行心理体操. 例如,当大多数人想到几何时,他们想到的是欧几里得几何. 但是计算机已经帮助人们将不同的几何图形可视化, 那些完全不是欧几里得的. 有了电脑,你可以把这些虚构的世界变成真实的样子. 还记得Mandelbrot集合吗?这是基于Benoit Mandelbrot方程的分形图像? 这些都是纯数学世界的视觉表现,在计算机出现之前是不可能被可视化的. 曼德布洛特只是对这个不存在的世界制定了这些武断的规则, 这与现实毫无关系, 但事实证明,它们创造了迷人的图案. 有了计算机和编程,你可以建立新的世界,有时模式真的很美.

大多数时候你不会这么做. 你只是写一个程序来完成一个特定的任务. 在这种情况下, 你不是在创造一个新世界,而是在计算机世界里解决一个问题. 问题通过思考得到解决. 只有一种人能够坐下来盯着屏幕思考问题. 只有像我这样的书呆子.

操作系统是机器中其他一切操作的基础. 而创造一个是终极挑战. 当您创建操作系统时, 你正在创造一个世界,所有运行计算机的程序基本上都在其中运行, 你在制定什么是可以接受的,什么是可以做的,什么是不可以做的规则. 每个程序都这样做,但操作系统是最基本的. 这就像在创造你正在创造的土地的宪法, 所有在电脑上运行的其他程序都只是普通的程序.

有时候法律没有意义. 但理智才是你努力追求的. 你希望能够看到解决方案,并意识到你以正确的方式得到了正确的答案.

还记得学校里那个总能得到正确答案的人吗? 那个人做得比其他人快得多,而且是因为他或她没有试图去做. 那个人不知道该怎么解决这个问题,但是, 而不是, 只是用正确的方式思考了这个问题. 一旦你听到了答案,你就明白了.

在计算机领域也是如此. 你可以用蛮力的方法, 愚蠢的, grind-the-problem-down-until-it 's-not-a-problem-anymore方式, 或者你可以找到正确的方法,突然间问题就消失了. 你从另一个角度看问题, 你会顿悟:这只是一个问题,因为你看问题的方式不对.

最好的例子可能不是来自计算机,而是来自数学. 故事是这样的:伟大的德国数学家卡尔·弗里德里希·高斯上学时,他的老师很无聊, 为了让学生集中注意力,他让他们把1到100之间的数字加起来. 老师希望年轻人花一整天做那件事. 但是这位崭露头角的数学家在五分钟后得出了正确的答案:5050. 解决办法并不是把所有的数字都加起来,因为那样做既令人沮丧又愚蠢. 他发现1加100等于101. 2加99等于101. 3加98等于101. 50加51等于101. 几秒钟后,他注意到这是50对101,所以答案是5050.

也许这个故事是杜撰的, 但重点很清楚:一个伟大的数学家不会用冗长乏味的方法解决问题,因为他看到了问题背后的真正模式, 并应用这种模式以更好的方式找到答案. 在计算机科学领域也是如此. 当然,你可以写一个程序来计算和. 在今天的电脑上,这简直是小菜一碟. 但是一个优秀的程序员只要聪明就知道答案是什么. 他会知道写一个漂亮的程序用一种新的方式来解决问题, 最后, 是正确的方式吗?.

我还是很难解释,连续三天头撞墙到底有什么吸引人的地方, 不知道如何更好地解决问题, 美丽的方式. 但一旦你找到了那条路,那是世界上最美妙的感觉.

***

经许可转载 《推荐全球十大博彩公司排行榜》 作者:Linus Torvalds (Linux的创造者)和David Diamond, HarperCollins, 2001.