2019年/12月/14日
编程之魂-lua
这篇文章来自于一本书《编程之魂》,关于Lua,由于书中的翻译不是很好,被云风重译了,已经是十年前的事情了。
你为什么选择 table 作为 Lua 中的统一数据结构?
Roberto:从我的角度,灵感来自于VDM(一个主要用于软件规范的形式化方法),当我们开始创建 Lua 时,有一些东西吸引了我的兴趣。VDM 提供三种数据聚合的方式:set、sequence 和 map。不过,set 和 sequence 都很容易用 map 来表达,因此我有了用 map 作为统一结构的想法。Luiz 也有他自己的原因。
Luiz:没错,我非常喜欢 AWK ,特别是它的联合数组。
对于成为一名优秀的程序员,你有什么建议?
Luiz:永远不要害怕重新开始,这当然是说到容易做到难。永远不要低估需要注意的细节。你认为未来可能会用到的功能,就不要马上添加了:现在增加这个功能只会让你日后真的需要这个东西时,那些更好的特性很难加入。最后,永远追求更为简洁的解决方案。诚如爱因斯坦所言:尽量简洁,然过犹不及 ( As simple as possible, but not simpler. )。
Roberto:学习新的编程语言,不过一定要读好书!Haskell 是所有程序员都应该学会的一种语言。学习计算机科学:新算法、新形式体系(如果你还不了解,可以看一下 Lambda 演算,或是 pi 演算,CSP 等等)持续改进你的代码。
数学在计算机科学,特别是编程方面,起到一个什么作用?
Luiz:好吧,我是一位数学家。对我来说,数学无处不在。我之所以被编程所吸引,很可能是因为它具有数学的特性:精确、抽象和优雅。编写一个程序有如对一个复杂定理的证明,你可以持续不断地精炼和改进,而且它还能干点实际的事情!
当然,我在编程时根本没想这些,不过我认为,数学的学习对于编程是非常重要的。它有助于带你进入一种特定的心境当中。如果你习惯以抽象事物的自身法则去思考问题,编程就变得更简单。
Roberto:按照 Christos H. Papadimitriou 的说法,“计算机科学是新的数学”。一名程序员如果没有数学功底,就很难有大的作为。从更广的视野来看,数学和编程都具有一些共同的思想原则:抽象。它们都使用同一个关键工具:形式逻辑。优秀的程序员任何时候都在使用“数学”,利用它来确立 code invariants 以及接口模型等。
很多编程语言都是数学家创建的——或许这就是编程困难的原因所在!
Roberto:我会把这个问题留给我们的数学家。
Luiz:好的,此前我已经说过,编程绝对具有数学品质:精确、抽象、优雅。对我来说,设计编程语言就像是构建一种数学理论:你提供了功能强大的工具,其他人可以使用它来做很出色的工作。我一直被那些规模小而功能强的编程语言所吸引。强大的原语和结构之美如同强大的定义和基本理论之美。