[eiffel 翻译]Matz 关于技术的对话
注: Matz 就是著名的编程语言 Ruby 的创始人(日本人)
这段对话翻译自 artima.com 网站对 Matz 的访谈的第四部分。
英文文章原址: http://www.artima.com/intv/craft.html
未经本人同意,不要任何地方转载这篇翻译文章(最先发表在本人的网站 http://www.eiffelqiu.com/index.jsp?date=20040131)。
关于技术
Bill Venners:
在一次CIPS Connections的交流中,你曾经说:” 我读过很多开放源码软件的源码,
例如,Perl,Python,和很多风格LISP解释器的源码,我知道在写Ruby 之前我应该了
解他们“ 你觉得程序员通过读源码可以得到哪些益处?
Yukihiro Matsumoto:
程序员通过读源码可以收益颇多。你无法简单的告诉别人如何成为一个好的程序员,你
可以向他们提供一些好的编程原则,你可以向他们描述一些你自己的一些好的设计经验,
但是你无法给予他们如果成为一个好程序员的实际知识。我相信获取这些实际知识的最
好方法就是读代码。写代码当然可以帮助你成为一个好的程序员,但是读代码这种方式
更好一些。
Bill Venners:
为什么
Yukihiro Matsumoto:
因为成为一个好的程序员实际上是跟经验有关,代码是对程序员思想,态度,想法的表
达。通过读代码,你不仅可以了解程序员要完成一个什么特殊的任务以及知道他们是如
何实现的,而且你也可以通过他们的思考方式而增长见识。这就是为什么读程序可以让
你成为更好的程序员的原因。
除此之外,如果你想知道如何用代码实现一些东西,你可以打开一本计算机科学方面的
书籍,书本可以向你解释算法,但是如果你想更快的了解算法,那么读代码将是最好的
方式。此外,你可以执行代码以实现算法。你可以在代码执行算法的时候使用一个调试
器来观察它。这种方式要远比读书本要好。
Bill Venners: 在CIPS Connection的交流中, 你给出了程序员的十个技巧。其
中之一是: ” 学不只一种程序语言,最好是不同风格的,比如脚本语言,面向对象语
言,函数式语言,逻辑式语言,等等“,学习多种程序语言有什么好处?
Yukihiro Matsumoto:
每个程序或者系统都有它自己的文化。每种语言或者系统都有自己的核心概念。这些
概念中大多数是好的,但是他们是不同的,通过学习多种语言和系统,你可以接受不
同的想法,进而增强你自己的观点。
例如,如果你不了解Prolog语言,你就不会了解目标指导性编程的威力
(通过应用指定规则描述要解决的问题来编程的方式)。这是一个非常有趣的概念,
是一种不同的思考方法。但是如果你不了解Prolog或者谓词逻辑的话,很难自己发现
这种思考方式。了解其他的系统和范式将会扩展自己头脑中的世界。这就是为什么我
极力推荐学习多种语言的原因
Bill Venners:
在你的十个最高技巧中你也说过:”不要太过多的关注于工具,工具是会变化的,而
算法和基本概念不会“,你这是什么意思。
Yukihiro Matsumoto:
部分是关于以人为本而不是以机器的观点。人的变化非常的慢,但是系统变化的非
常快。100 年前的人们和现在没什么太大的不同。 100 年前我们没有计算机,50
年前我们拥有了计算机,但是他们非常原始。从今之后的20年,我无法想象计算
机将会是什么样子的,但是我可以想象的出20年后的人们将会如何思考。
另外一个例子是数学。数学拥有非常悠久的历史。它是非常成熟的科学,但是计算
机科学不是。所以从数学中获取思想是非常好的。
工具会随着时间的流逝轻易的变化。如果你太多的关注现在的工具,那么你的努力只
能得到短期的回报。如果你想获得持久的收益,你应该更关注一些基础的东西。关注
数学和人类心理学。关注那些已经建立起来的科学和已经建立起来的思维方式。
懒惰:
Bill Venners:
你曾经在你的十大技巧中提到:”懒惰,机器将会服务于人类。经常程序员会不经意
的服务于机器。让机器服务于你。尽可能做哪些让你懒惰的事情“,为什么我们要设
法变得懒惰?
Yukihiro Matsumoto:
因为你想变得懒惰。你要做任何可以减轻自己工作的事情,我努力工作来减轻自己
的工作,变得懒惰。
Bill Venners:
我相信这点
Yukihiro Matsumoto:
我非常渴望变得懒惰。
考虑接口
Bill Venners:
你在十大技巧中也提到了:”对他人友好,首先考虑接口: 人对人,人对机器和机器
对机器的接口。再次记住人的因素是非常重要的 “ ,你这是什么意思,”首先考虑接
口?“
Yukihiro Matsumoto:
接口是我们作为一个用户所看到的一切。如果我的计算机正在内部做非常复杂的事情
,但是复杂性并没有表露在外面,我不在乎。我不在乎计算机是否在内部辛苦的工作。
我只要以好的方式呈现正确的结果。这就是说接口就是一切,至少对于普通的计算机
用户使用计算机的时候,情况就是如此,那就是为什么我们要关注接口的原因。
一些软件人士,比如天气预报员,数字计算者,他们更多的是了解事物的内部,但是
他们所处的是非常有限的计算机科学领域。大多数程序员需要关注表面,接口,因为
对他们来说那才是最重要的。
Bill Venners:
你也提到了机器对机器的接口,你的意思是不是仅仅是对用户的接口或者机器的接口
Yukihiro Matsumoto:
不只是用户接口。当机器之间通过一个协议互相对话的时候,他们不在乎对方内部是
如何实现的,最重要的是通过恰当的协议正确的传递恰当的结果,这才是最重要的。
如果你有的系统有一个好的接口,足够的时间和财务预算,你可以继续工作在你的系
统上。如果你的系统有错误或者是太慢,那么你可以改进它。但是如果你的系统有一
个糟糕的接口,那么你就基本上是一无所有了。内部实现有多高的技巧并不重要。如
果你的系统有一个糟糕的接口,没有人会使用它。所以接口或者系统的表面特征,无
论是对用户还是对其他机器来说,都是非常重要的。
邱海峰(eiffelqiu)
mail: eiffel_q@163.com
weblog: http://mulder.5d.cn