//自学过pascal和python的皮毛,正在读SICP,斗胆写一篇这样的文章,欢迎指教。
在了解什么是 细胞自动机后,我就决定去学编程了。那时想的只是自己实现一下 生命游戏。后来也确实在Lazarus的帮助下成功实现。后来觉得这门语言太过冷门,也太原始,便跳槽去了python。
在python的世界里,我见证了 以实用性为主导进行设计的编程语言 是什么样的。python完全就是以便于使用为目的进行而设计的,所以,如人们所见,它有大量便于‘开箱即用’的模块(= =我知道这个词语的原意不是这样。。),而且还有一个至关重要的特质——可以跟C模块连接。Python应该算是代表了编程语言的一种发展方向:越来越易于使用,而且能兼顾脚本和常规应用。
我后来又跳槽到了Lisp。因为我想要学习的并不是怎么更好更快地作出应用程序,而是编程的实质,还有蕴含在编程语言中的理性化,条理化的思维模式。
在lisp中玩了一段时间后,我发现她跟我之前学过的两种编程语言都有很大的不同。简单的说,我刚开始学python时觉得pascal弱爆了,看了lisp又觉得它们都弱爆了。比较有趣的是,我觉得pascal比python是因为python的语法便捷还有可以对一切具有序性质的对象进行迭代,然而它们之所以在我心中被lisp比下去,是因为lisp的思维。更有意思的是 lisp比pascal还要古老,而python是最年轻的。(希望我对lisp的好感不要太强烈地影响我的理性)我觉得lisp代表了编程语言的终极形态,或者说,编程语言的另一种发展方向吧——深入思维和逻辑的本质。
之前看过一本书,认为程序是对人脑思维的模仿,而电脑是人脑的镜子。其实不完全是这样。虽然前文所说的三门语言都是 命令式编程,但我们根据语法和内置函数、模块可以发现它们之间是相互有所不同的。
在python中人们需要描述的内容十分少,大部分的处理都交给了解释器。这实质就是人们只需给出更加简单的命令,也就是命令被打包了,抽象了。沿着python的路继续走下去,有一天我们可以把命令包裹到变成一个目标,也就转变成了 声明式编程。
pascal的思维算是比较低等级的命令式编程。lisp更加低级,但因为它足够低级,所以可以从十分基础的结构构建出几乎任意的程序。如果拿现实世界来比喻,python的最终形态会像是一个私人秘书,你只需要很概要地描述一下工作内容,她就会帮你完成,无需你操心。而用lisp我们则可以作出像是纳米机器人的东西——在原子的基础上构陷大型物体。或许有人会说,汇编不是比lisp更底层吗?然而汇编跟硬件的关系太紧密了,硬件架构会不断发展,汇编指令也会跟着改变。唯有思维是永恒的。
用人工智能领域的术语来说,python是人们从上往下的探索,而lisp代表的是从下往上的可能,注意,只是“可能”。如果我们要作出像是生物一般可以自我进化的程序,并为它设计一套可以容易被修改以进化的语言,那么lisp是比较接近那个理想语言的。这大概是lisp在AI领域如此流行的原因之一吧。