今天读了Paul Graham的文章《书呆子的复仇》(节选自《黑客与画家》),作者详细列举了Lisp语言的优势。这是我第一次接触Lisp,原来Lisp语言可以写一个能编程序的程序?太酷了!这不正是我以前经常想的问题吗——为什么程序不能修改自己呢?
因为程序只能修改数据,不能直接修改自己。所以我那时构想了一种用数据来表示程序语句的方法,大致上是可以用有限状态机来实现的。我觉得把表达式和语句都变成数据完全可行。但是我到今天才发现,原来lisp已经这样做了,而且几十年前就做了。
为什么要程序修改自己呢?
我以前做了一些机器人,那时我一直想,如果机器人能够在实践中不断改进自己,那该有多酷啊!机器学习看上去正在做这一点,但实际上,现在的机器学习只是面向数据层面的。它更像是在给定模型下寻找最好的参数,但对于模型本身和程序本身,它是无能为力的。至少目前是这样。而真正的质变,往往发生在模型和程序本身的改进上。
试想一台服务器,可以通过收集客户端或者用户的bug反馈,来自己改进自己的程序,这听上去并不荒唐吧。那么,一台机器,通过自己对环境的探索得到的反馈,来改进自己的程序,也应该是可行的。
这些东西现在之所以听上去还不太好实现,我想可能是因为现在的程序员并不习惯用程序去生成和修改程序。除了Lisp、Ruby之类的,大多语言可能都做不到这一点。但一旦这一点成为潮流,我相信上面说的那些功能必然应运而生。