Common Lisp学起来不容易,很多人花了很久时间然而效果有限。为什么呢?我来试着总结一下原因。首先来看语言自身的原因:
1. Common Lisp是一个允许高度定制的语言,在语言的不同层面,都提供了定制机制,这使得它具有很大的灵活性和不确定性。
2. 为了当时的实现厂商的原因,语言设计存在妥协,过多寄希望于“一个聪明的实现可以做如下优化”的可能性。
3. Common Lisp中充斥着从前辈方言中继承而来的遗产,很多命名和设计比较晦涩。存在着大量的细节上的不一致和瑕疵。
然后是语言生态上的原因:
1. 语言生态发展较慢,高质量的库和工具比较稀少。
2. 文档的匮乏。浅显的基础入门书(如《ANSI Common Lisp》)和标准化文档(ANSI 226、CLHS)之间的资料巨大断层。对于一些基本概念、框架设计,没有针对初学者的教程。同时几乎没有高质量的本地化文档。
最后是学习者的自身原因:
1. 语言的灵活和晦涩,以及lint工具的缺乏,使得一般学习者无法容易的分辨“正确的做法”和“错误的做法”,在尝试中前行时极易陷入细节和UB陷阱。
2. 语言的不一致和瑕疵,学习者在思维模型上经常与语言本身的设计不一致,学习者经常会尝试自行脑补简单一致然而不符合实际的设计模型。
3. 较差的语言生态环境,使得学习者长期与生产环境、现有项目、高质量代码隔离,无法从中学习。
4. 学习者一些不切实际的自我膨胀心态。