Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

译 《The beauty of Programming by Linus Torvalds》 #53

Open
WyattJia opened this issue Oct 18, 2018 · 0 comments
Open

译 《The beauty of Programming by Linus Torvalds》 #53

WyattJia opened this issue Oct 18, 2018 · 0 comments

Comments

@WyattJia
Copy link
Owner

WyattJia commented Oct 18, 2018

原文地址: The Beauty of Programming


编程之美

我不知道如何来解释编程对于我的吸引力,但是我会尽力尝试表达。对于某些爱好编程的人来说,这是世界上最有趣的一件事。这是一个比象棋更具吸引力的游戏,一个能够让你制定自己的规则并最终得到你想要结果的游戏。

当然,从其他人的角度来讲,编程可能是地球上最无聊的事了。

初入编程时的激动感很容易表达:事实上就是你告诉计算机做某件事,然后计算机准确无误的照做了,而且它永远也不会有任何抱怨。

这本身就很有趣。

但是盲目服从自己的指令,只会在起初的时候吸引人,显然不会成为一个讨人喜欢的‘伴侣’。编程真正让你感兴趣的原因是,你不但可以让计算机做你想要做的事,而且你还可以彻底搞清楚其中的原理。

我个人坚信计算机科学和物理学之间有着许多共同点。两者关注的都是世界是如何运行在一个较为基本的层级上。当然,两者间的区别是,在物理学中,你的重点更应该是搞清楚世界是如何构成的,而计算机科学中重点是你创造了什么‘世界’。在计算机的范围内,你就是造物主。你将从根本上控制会发生的任何事情。如果你足够优秀,你可以成为一个神,在小规模的范围内。

我这么说可能粗鄙地冒犯了地球上将近一半的人口。

但是这是事实。你可以创造你自己的世界,唯一可以限制你的就是计算机的性能,以及创造世界这些天来,你自己的能力。

假想我们要做一个树屋。你可以建造一个功能齐全、具有活板门并且稳定的树屋。但是每个人都知道建造简单扎实树屋和漂亮的树屋之间区别,这取决于在一棵树上花费的创造效果。是一件混合着艺术和工程文化的事。这是编程如此动人有趣的原因之一。功能实现次于更加有趣,更加漂亮或者更加令人震惊。

这是一种创造性的练习。

吸引我喜欢上编程的第一个地方就是搞清楚计算机是如何运行的。其中最大的满足感之一是学习计算机想学习数学一样:你用你自己的规则建造自己的世界。在物理学中,你被限制只能用现有的规则。但是在数学中,像编程一样,如果形成自洽的话,任何事情都有有可能发生。数学不需要被任何额外的逻辑所限制,但是它本身必须是合乎逻辑的。正如所有数学家所知道的一样,你确实可以有一组数学方程式让其中的 3 + 3 = 2 。你可以做任何你想做的是,事实上,当你给你创造的世界增加复杂度的时候,必须小心,不要创造一些前后矛盾的事物出来。创造出来的世界是如此美丽,容不得一丝瑕疵。这就是编程的工作原理。

人们对电脑如此着迷的原因之一,就是能从中获得自己创造一个新世界的体验,并能从中了解到它到底能够成为什么样子。在数学中,你可以使用内心来想象新世界会变成怎样。比如, 说到几何时,大部分人想的是欧几里得几何学。但是计算机却可以帮助 人们形象化不同的几何,并不仅仅是欧几里得几何学。在计算机的帮助下,人们可以形象化这 些虚构的世界,看到那些世界到底是什么样子。还记得 Mandelbrot set 吗――基于 Benoit Mandelbrot 等式的 fractal images。要不是计算机,纯粹的数学世界绝不能这样形象地展示出来。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant