写点什么

Linux 之父:编程之美

  • 2021-05-07
  • 本文字数:2158 字

    阅读完需:约 7 分钟

Linux之父:编程之美

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


然而,从表面上看,它似乎是地球上最无聊的东西。


编程最初令人感到兴奋的地方在于,当你告诉计算机要做什么,它就会按照你的意思去做,分毫不差,马不停蹄,毫无怨言。


这本身就很有趣。


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


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


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


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


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


这是一种创造性的活动。


最初吸引我接触编程的是我想要弄清楚计算机的工作原理,其中最大的一个乐趣是知道了计算机就像数学一样:你可以用自己的规则来构建自己的世界。在物理学里,你会受到已有规则的约束。但在数学和编程领域,不管是什么,只要它是自洽(self-consistent)的就行。数学不必受任何外部逻辑的约束,只要它本身具有逻辑性。数学家们都知道,你可以定义一组数学方程式,让 3 加 3 等于 2。你可以做任何你想做的事,只是在不断增加复杂性的同时,要小心不要创造出与你所创造的世界不协调的东西。一个美丽的世界,不能包含任何瑕疵,而编程就是这样的。


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




曼德尔布罗特集合


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


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


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


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


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


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


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


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


原文链接:


https://www.brynmawr.edu/cs/resources/beauty-of-programming?fileGuid=kxiSzjaRxbcskaHI

2021-05-07 16:5312003
用户头像

发布了 114 篇内容, 共 46.8 次阅读, 收获喜欢 313 次。

关注

评论 10 条评论

发布
用户头像
不过对比原文,翻译还补充了“曼德尔布罗特集合”图,态度还是有的。
2021-05-17 10:41
回复
但是这个“曼德尔布罗特集合”还是翻译不准确
2021-05-20 08:14
回复
用户头像
虽然 Linus Torvalds 你是我心中的神,但是这篇文章对于阅读者来说没有什么帮助,至少我是这样觉得的。感觉但凡是有点本事的大神,都喜欢聊些虚无缥缈的内容,也许这就是高处不胜寒吧。
2021-05-10 16:09
回复
你觉得没用其实只是你没到那个高度罢了,Linus很明确的说出了计算机的本质是什么。技术这个东西一旦上升到一定的程度一定会哲学化,你会去探寻本质的东西
2021-05-22 11:43
回复
扯淡吧,牛顿后半生研究神学去了,神存在吗?走火入魔了吧我怕
2021-05-26 09:04
回复
别装B了,自己都不知道自己在说什么吧?
2021-06-30 15:54
回复
用户头像
该评论已删除
2021-05-10 14:04
回复
自洽才是合适的,大部分人一看就理解这是指逻辑上能互相印证,没有矛盾。“一致性”是什么玩意,百度,google的翻译都是“自洽”,deepl是“自相吻合”,都是和自洽一个意思。只有一个台湾那边的文档管这个叫“自相一致性”。
2021-05-22 11:50
回复
用户头像
翻译得不怎么样,其中“卡尔・弗里德里希・高”译为“高斯”就可以了,他这则故事家户喻晓,“高斯”这个名字人人都知道,却硬要翻译成“卡尔・弗里德里希・高”(况且这个译名还没有复制全,全名是:约翰・卡尔 · 弗里德里希 · 高斯)
2021-05-10 13:37
回复
深有同感。
2021-05-11 16:54
回复
是的,高斯才是通用的名字,就算大学高数没学好,也能知道这个名字会让你挂科
2021-05-17 11:55
回复
没有更多了
发现更多内容

Git技巧小能手

西门阿杰

git 版本控制

TASKCTL 资源树刷新、重载和重置的不同区别

敏捷调度TASKCTL

DevOps 分布式 敏捷开发 自动化运维 大数据运维

显卡是什么?显卡和Graphics的区别在哪里?

Finovy Cloud

人工智能 算法 云服务器 GPU服务器 显卡、gpu

OceanBase 参编金科联盟标准发布,推动数据库产业规范化发展

OceanBase 数据库

oceanbase

深入解析require源码,知其根,洞其源

战场小包

前端 Node 4月月更

Mybatis-plus在项目中的应用

Rubble

4月日更 4月月更

报告解读下载 | 首份《中国数据库行业分析报告》重磅发布!

墨天轮

数据库 国产数据库 达梦 polarDB gbase8a

HDFS小文件分析实践

移动云大数据

hdfs 小文件

阿里云发布中国云原生数据湖应用洞察白皮书

阿里云大数据AI技术

大数据 数据湖

行业大咖齐聚 多元主题碰撞 OpenHarmony技术日等你来

Geek_283163

OpenAtom OpenHarmony

Build On 活动预告 | 构建你的第一个基于知识图谱的推荐模型

亚马逊云科技 (Amazon Web Services)

云计算

Apache ShardingSphere 如何实现分布式事务

SphereEx

Apache 数据库 ShardingSphere SphereEx

制约国内企业知识管理发展的因素

小炮

知识管理 企业知识管理 企业知识管理工具

华为云GaussDB(for Influx)揭密:数据分级存储

华为云开发者联盟

华为云 GaussDB(for Influx) 时序数据 数据分级存储 Influx

区块链+数字资产,未来财富的新起点

易观分析

区块链 数字经济

Linux驱动框架与杂项字符设备框架介绍

DS小龙哥

4月月更

GAIA-IR: GraphScope 上的并行化图查询引擎

6979阿强

大数据 并行计算 图计算 GraphScope 图分析

预备,请关注!DingOS先导小视频发布!

鼎道智联

百度小程序包流式下载安装优化

百度Geek说

小程序

面试突击41:notify是随机唤醒吗?

王磊

Java java面试

spring-cloud-kubernetes与SpringCloud Gateway

程序员欣宸

Java spring-cloud 4月月更

组件容器化Statefulset与Deployment的选型与实践

移动云大数据

Deployment statefulset

为什么需要可编程代理

Flomesh

负载均衡 代理 Pipy 可编程代理

【高并发】如何解决可见性和有序性问题?这次彻底懂了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

玩转LiteOS组件:玩转Librws

华为云开发者联盟

TCP websocket LiteOS LiteOS组件 Librws

Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

北京好雨科技有限公司

叮咚!请查收来自一线数据科学家和大数据工程师的实战经验| IDP Meetup No.02 回顾

Baihai IDP

Python 大数据 AI 算法 数据科学

湖仓一体,Hologres加速云数据湖DLF技术原理解析

阿里云大数据AI技术

sql 大数据 分布式计算 Cloud Native MaxCompute

什么是域名(Domain Name ) ?

源字节1号

TASKCTL 消息订阅参数设置说明

敏捷调度TASKCTL

DevOps 分布式 敏捷开发 ETL任务 自动化运维

流程图太大? 来个流程收缩展开功能

相续心

前端 工作流 流程图 SOP

Linux之父:编程之美_语言 & 开发_Linus Torvalds_InfoQ精选文章