Record 5 200203
这一段经历了奇妙的曲径:
前半段1912到2001初学Ruby「通过一本设计模式的书」,并做了Python和Java的练习,加深了对不同编程语言的认识。
一月初在车上偶然再次看到某人的博客,其对数学、逻辑和编程语言的论述给我提了很多探索的方向,按照一些思路我进一步看了编程语言研究相关的书。同时在获得Oberon的线索后浏览了以Component Object Model为代表的操作系统「这个其实不是最理想的设计理念」,在Niklaus Wirth、Dijkstra等人的论述中等认识到了操作系统这种级别的事物本质也是程序设计「算法+数据结构」后按照获知的和数理逻辑有关的线索浏览和读了数学、逻辑、编程语言设计(包括编译原理)的书「还在进行」。
Alonzo Church的Introduction to Mathematical Logic介绍部分「多达70多页」已经读完,回答了我长期关注的很多问题,简而言之,形式语言(Formalised Languages)有自洽性(作者称之为effectiveness)的严格要求,目前达到四个要求的貌似没有,勉强达到前两个并兼有部分第三个特征的极少,而且我能想到的只有编程语言。这从一个重要角度反映了编程和数学的关系:由于基于低级语言的高级语言/高级语言落实在低级语言的严密语义系统的自洽性,编程可以从非常基础的数值建构一些复杂系统(比如 银行帐号的对象);然而数学目前则只能主要提供直接的数值运算的支持,Introduction to Topology (Adams Franzosa)第一章有一句话The topology T generated by a basis B is a topology 「pp30」,经历公理化一百多年、自称非常严密的拓扑学基础尚且存在这种自相矛盾的表达「在编程语言中类似正确的表达是 An object o generated (composed/derived from...) by a basic class b is also an instance of class b.」
同时我也认识到了所谓的“形式语义”大多是缘木求鱼,之前翻过Larch : languages and tools for formal specification /Guttag, John 这本书觉得怪怪的「不知道是不是巧合,我看过的所有MIT人的书都非常糟糕,反而Princeton和Stanford的都不错」当时我的想法是“人家C和Pascal已经把什么都描述清了,再来一个外在语义需要特别学习的语言来附加描述,其意义值得怀疑”,看到邱奇的书之后意识到这是一个形式语言(包括语义)本身设计的问题。
之前非常感兴趣的symbolic computing现在看来其变得黯淡是非常正常的,源头就是数理逻辑基础上的形式语言特征。
在这些认识基础上,重新思考概率论和统计学产生了新的收获,帮助比较大的是Binmore的Rational Decisions让我重新审视「或者说第一次正视」了概率尤其是贝叶斯主义。——如果形式语言连接着需要“人”独立解释的外部系统,其可靠性和模型解释都要依赖这个外部系统。
很多之前涉及编程语言、算法等方面的问题都有了新的更坚实的考量思路。当然也包括“数据科学”。
具体对“数据科学”的启发是:计算要基于编程语言本身,高于数值计算的“高阶”算法要多考虑形式语言系统本身,哪些能搞哪些不能搞的根子在形式系统内。