编程教材中的数学物理


编程和数学多多少少是相关的。虽然数学并不是编程,但显然编程的理论基础一部分来自数学。在有的编程教材里(比如,各种《21天精通xxx》,《xx从入门到精通》,甚至《java编程思想》)都不会谈及太多关于电脑之外的东西。这种印象在我阅读了《计算机程序的构造与解释》还有《the little schemer》之后发生了改观。

程序和相对论

我到目前为止并没有读完《SICP》,其中一个原因是它并不是教你什么编程语言的,他只是在用scheme传递一般的编程思想,而其中有的思想我已经知道了,还有的我觉得兴趣不大。不过在读到关于流式计算的章节的时候这本书关于同步性和相对论的论述还是震撼了我。简单来说,它阐述了一个同步性问题。假设你有很多服务器分布在很多不同的地区,怎么保证这些服务器所读写的数据是同步的?即使在网络连接速度比较慢的情况下。这本书给出了一个答案–那就是没有办法完全同步。它举例说同一个银行在不同的国家查询同一个账号的余额,结果是不一样的。之所以信息没有办法同步,是因为遇到了类似与相对论中的困难。稍微知道一些相对论的人应该知道,在相对论之中,位置不同的两点,实际上是不存在“同一时刻”的,根据相对论,信息传输的速度也一定是有限(光速)的。由此已经说明其实完全的数据同步是做不到的。貌似在某处看见过一个定理说,可用性,同步性,还有一个什么性是不可兼得的。

《SICP》第一次发行于1985年,确实是一本不折不扣的经典。只有顶级教授级别的作者才能写出这样的书。而那些只知道将代码用于商业的人则只会整天琢磨语法和工具,而不是艺术。

sheme和停机问题

《the little schemer》我觉得是一本很难的书。它说自己是一本用于在一个星期速成Scheme的书(虽然我确实在一个星期内看完了并且几乎完成了它的例题)。虽然此书一开始也说它只是将Scheme作为教学工具(上一本是SICP),但它对于Scheme这个语言的关注是明显多于《SICP》的。《the little schemer》同样也有很多地方流露着数学和物理痕迹。其中包括著名的“停机问题”。停机问题简单来说,就是有没有一种算法,它能够在有限的时间内结束,并且能判断别的算法能不能在有限的时间内结束。我曾经看过停机问题的证明(不过现在已经忘记了),结论是不存在这种算法。而《the little schemer》用了一个简单的例子就使用Scheme作为一种形式化语言证明了停机问题。那一瞬间我感觉非常震撼,这才是教授写的书嘛,你是不可能从Java之类的语言之中寻找到这样的好书的。某种程度上是因为Java实际上不是为了大学教授而是为了那些码农而设计的。

《the little schemer》中的另一句话“所有动物生而平等,但有的动物比另一些更平等”(中文版搞错了乔治?奥威尔的出生日期。但是由于勘误奖励实在太低了我并没有去勘误)。

下面进入黑java时间

对于我来说,对于java这个算是我的第一门编程语言的学习过程也就是一个上当受骗的过程。我把很多时间去琢磨设计模式,去琢磨Java的语法为什么是这样,去考虑java的thinking到底是怎样的,到最后却发现这些不是没什么卵用就是在java中是绕来绕去的。更为重要的是,在学习java这个编程语言的时候,我发现所有的书都想要把我的思维局限在这一种编程语言或者技术当中。

后来我发现如果你真的想要去了解java就应该看看java之外的东西是怎么做的。scheme会迫使我(相信也是每一个第一次见识scheme或者接近scheme的语言的人)重新思考编程,计算和计算机科学的本质,它会让我有一个更加开放的视野,而我一直觉得java在企图把我的眼界限制在java当中,让我去研究java里面那些各种旮沓里的细节,把时间花在java里面或好或坏的语法,配置繁琐的框架和类库,绕来绕去的记不完的而且没什么卵用的design pattern之中,而它还会暗示我这些东西都是好的,本来就是这样的… …


文章作者: Gregor
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gregor !
 上一篇
使用emacs创建的第一个文件 使用emacs创建的第一个文件
Emacs随着我开始写markdown文档以及想要接触scheme或者haskell之类的函数编程语言,我发现我开始需要一个足够强大的通用编辑器,另外我看见那个《haskell函数式编程》说,haskell最好的编辑器是emacs,这也
2018-01-24
下一篇 
Python和函数式编程 Python和函数式编程
最近QQ挂着Python Logo在某QQ群吹水,有人说Python语法反直觉,又有人说要举个实例而那个说Python语法混乱的人八成也说不出Python语法哪里混乱。而这个时候借着我在某培训班重新看了一遍Python的字符串和列表语法随口
  目录