【连载】编程的本质(一)——Ruby之父《代码的未来》

生气的散人 发布于 2013/05/21 11:07
阅读 1K+
收藏 9



人类的力量是有限的,无法完全通晓未来,因此我们并不能确切地知 道明天、明年究竟会发生什么事。

不过,仅就技术来说,一夜之间就冒出个新东西,这样的情况是非常 罕见的,而大多数新技术都是沿着从过去到现在的技术轨迹逐步发展起来 的。在IT 的世界中,这样的倾向尤其显著。

《代码的未来》综述了我当前掌握的IT 趋势,书中就摩尔定律、编程 语言、多核、NoSQL 等在未来几年中将备受关注的领域,介绍了相关的 现状和基础知识。

当然,没人知道书中涉及的这些技术在更久远的未来是否还依然有用, 但至少在不远的将来,它们应该是非常值得关注的技术。这些内容可以成 为学习新技术的基础,对于想要成为优秀工程师、程序员的各位读者来说, 这样的基础则能够成为生存竞争中的有力武器。

也许还有一些读者并非专职的程序员,但我认为本书同样值得他们一 看。所谓技术,就是用来解决现实问题的手段。与现实问题展开的这场拉 锯战,本身就是一件非常刺激和快乐的事,而这份快乐,也正是带动未来 创新的源动力。

互联网和开源降低了参与创新的门槛。即便没有高学历,即便不属于 任何一家企业,只要有技术和点子就有机会。可以想象,未来的创新就应 该是这样。就IT 方面来说,我认为大多数的创新应该都不外乎是本书介 绍的这些技术的延伸。

有人说21 世纪是亚洲的世纪。作为一个亚洲人,我开发的Ruby 语言 已经在全世界获得了广泛的应用,这也许从某种程度上印证了这种说法。 这本书中包含了我的一些思考和见解,如果它能够对亚洲(恐怕应该是吧) 各位读者的创新有所帮助,我会感到荣幸之至。

最后,希望中国的各位读者能够从本书中获益。

松本行弘

2013 年4 月

编程的本质

在一部古老的电影《星际迷航4:抢救未来》 1中有这样一个镜头:从23 世纪的未来穿越 时空来到现代(1986 年)的“进取号”乘务员,为了操作计算机(Classic Mac)而手持鼠标与“计 算机”讲话。看来在星际迷航的世界中,用人类语言作为操作界面就可以指挥计算机工作了。 不过,现代的计算机还无法完全理解人类的语言。市面上也有一些可以用日语来操作的软 件,但距离实用的程度还差得很远。计算机本来是为了运行由0 和1 组成的机器语言而设计的, 但与此同时,对于人类来说,要理解这种二进制位所构成的序列到底代表什么意思,却是非常 困难的。

1电影原题为Star Trek IV: The Voyage Home,是著名的《星际迷航》系列科幻电影的第4部作品,上映于1986 年。 (若无特殊说明,本书的脚注均为译者注)

因此,创造出一种人类和计算机都能够理解的语言(编程语言),并通过这样的语言将人类 的意图传达给计算机,这样的行为就叫做编程。

话虽如此,但是将编程仅仅认为是“因为计算机无法理解人类语言才产生的替代品”,我觉 得也是不合适的。人类的语言其实非常模糊,有时根本就不符合逻辑。

Time flies like an arrow.

这句话的意思是“光阴似箭”(时间像箭一样飞走了),不过flies 也有“苍蝇”(复数形态) 的意思,因此如果你非要解释成“时蝇喜箭”也未尝不可,只要你别去纠结“时蝇”到底是啥 这种朴素的问题就好了。

另一方面,和自然语言(人类的语言)不同,编程语言在设计的时候就避免了模糊性,因 此不会产生这样的歧义。使用编程语言,就可以将步骤更加严密地描述出来。

用编程语言将计算机需要执行的操作步骤详细描述出来,就成了软件。计算机的软件,无 论是像文字处理工具和Web 浏览器这样的大型软件,还是像操作系统这样的底层软件,全部都 是用编程语言编写出来的。

编程的本质是思考

由于我几乎一整天都对着计算机,因此我的家人可能认为我的工作是和计算机打交道。然而, 将编程这个行为理解成“向计算机传达要处理的内容”是片面的。这样的理解方式,和实际的 状态并不完全一致。

的确,程序员都是对着计算机工作的,但作为其工 作成果的软件(中的大部分)都是为了完成人类所要完 成的工作而设计出来的(图1)。因此,“人们到底想要 什么?想要这些东西的本质又是什么?要实现这个目的 严格来说需要怎样的操作步骤?”思考并解决这些问题, 才是软件开发中最重要的工作。换句话说,编程的本质 在于“思考”。


图1  编程不是和计算机打交道,而是和人打交道

尽管看上去是和计算机打交道的工作,但实际上编程 的对象还是人类,因此这是个非常“有人味”的工作。个 人认为,编程是需要人来完成的工作,因此我不相信在将 来计算机可以自己来编程。

我是从初三的时候开始接触编程的。当时父亲买了一台夏普的袖珍计算机(PC-1210),可 以使用BASIC 来编程。虽然这台袖珍计算机只能输入400 个步骤,但看到计算机可以按照我的 命令来运行,仿佛自己什么都能做到,一种“万能感”便油然而生。

加载中
0
重度恐高症
重度恐高症
第一句话,没看到那个‘人’字,直接是‘类的本质’。。。
0
生气的散人
生气的散人

引用来自“张三爷”的答案

第一句话,没看到那个‘人’字,直接是‘类的本质’。。。
在上一行,和图并排放一起了,看不出来,我给移下来了,多谢
0
乖猫的老公
乖猫的老公
嗯,不错的文章
0
sevk
sevk
因此我不相信在将 来计算机可以自己来编程.
我觉得可以。
0
sevk
sevk

至少在今天,已经可以用 ruby 生成一些 *.h 头文件 ; 还有把某个语言的代码自动转换成其他语言的代码 . 还有自动从网上查找别人写好的类和方法拿来用也是可以的, 虽然还不是最优代码,也可能跑不起来 .


0
H
Hisui
所以说这是人类的世界,一切的一切,以人为准
0
joek
joek

不错的文章,编程的本质在于逻辑思考

0
1
1689LiYong

引用来自“sevk”的评论

因此我不相信在将 来计算机可以自己来编程.
我觉得可以。

我也觉得觉得是可能的。《计算与人脑》中冯若依曼猜测人脑是混合型的,既有逻辑的、也有模拟的。模拟计算有一个缺点就是精确度不够,但是人脑通过统计的方法来规避个别的错误。同样的,人的语言也有许多错误(歧义等),但是通过统计的方法,机器是可以把握其中歧义背后真正含义,甚至能理解双关这种模棱两可的状态。现在的ML的趋势,背后就是这种统计的原理。

返回顶部
顶部