河南省工程建设协会网站青建设厅官方网站海省
web/
2025/10/1 4:38:45/
文章来源:
河南省工程建设协会网站,青建设厅官方网站海省,图片素材网站哪个最多,手机旅游网站建设摘要#xff1a;我们每个人都是工具的奴隶。随着我们的学习#xff0c;我们不断的加深自己对工具的认识#xff0c;从而从它们里面解脱出来。现在我就来说一下我作为各种工具的奴隶#xff0c;以及逐渐摆脱它们的思想控制的历史吧。 当我高中毕业进入大学计算机系的时候我们每个人都是工具的奴隶。随着我们的学习我们不断的加深自己对工具的认识从而从它们里面解脱出来。现在我就来说一下我作为各种工具的奴隶以及逐渐摆脱它们的思想控制的历史吧。 当我高中毕业进入大学计算机系的时候辅导员对我们说“你们不要只学书本知识也要多见识一下业界的动态比如去电脑城看看人家怎么装机。”当然他说我们要多动手多长见识这是对的。不过如果成天就研究怎么“装机”研究哪种主板配哪种 CPU 之类的东西你恐怕以后就只有去电脑城卖电脑了。
本科的时候我经常发现一些同学不来上数学课。后来却发现他们在宿舍自己写程序对MFC之类的东西津津乐道引以为豪。当然会用MFC没有什么不好可是如果你完全沉迷于这些东西恐怕就完全局限于Windows的一些表面现象了。
所以我在大学的时候就开始折腾Linux因为它貌似让我能够“深入”到计算机内部。那个时候书店里只有一本 Linux 的书封面非常简陋。这是一本非常古老的书它教的是怎样得到Slackware Linux然后把它从二三十张软盘装到电脑上。总之我就是这样开始使用Linux的。后来我就走火入魔了有时候上课居然在看GCC的内部结构文档。后来我又开始折腾TeX把TeXbook都看了两遍恁是用它写了我的本科毕业论文。
后来进了清华因为不满意有人嘲笑我用Linux这种“像DOS的东西”以及国内网站都对Windows和IE进行“优化”的情况就写了个“完全用Linux工作”。确实会Linux的人现在更容易找到工作更容易被人当成高手。但是那些工具同样的奴役了我经常以一些雕虫小技而自豪让我看不到如何才能设计出新的更好的东西。当它们的设计改变的时候我就会像奴隶一样被牵着鼻子走。
这也许就是为什么我在清华的图书馆发现《SICP》的时候如此的欣喜。那本书是崭新的后面的借书记录几乎是空白的。这些看似简单的东西教会我的却比那些大部头和各种 HOWTO 教会我的更多因为它们教会我的是WHY而不只是HOW。当时我就发现虽然自认为是一个“资深”的研究生学过那么多种程序语言各种系统工具甚至内核实现可是相对于SICP的认识深度我其实几乎完全不会写程序在第三章SICP 教会了我如何实现一个面向对象系统。这是我第一次感觉到自己真正的在开始认识和控制自己所用的工具。
因为通常人们认为Scheme不是一个“实用”的语言没有很多“库”可以用效率也不高而Common Lisp是“工业标准”再加上Paul Graham文章的怂恿所以我就开始了解Common Lisp。在那段时间我看了Paul Graham的《On Lisp》和Peter Norvig的 《Paradigms of Artificial Intelligence Programming》。怎么说呢当时我以为自己学到很多可是现在看来它们教会我的并没有《SICP》的东西那么精髓和深刻。开头以为一山还有一山高最后回头望去其实复杂的东西并不比简单的好。现在当我再看Paul Graham和Peter Norvig的文章就觉得相当幼稚了而且有很大的宗教成分。
进入Cornell之后因为Cornell的程序语言课是用SML的我才真正的开始学习“静态类型”的函数式语言。之前在清华的时候有个同学建议我试试ML和Haskell可是因为我对Lisp 的执着把他的话当成了耳边风。当然现在用上SML就免不了发现ML的类型系统的一些挠人的问题所以我就开始了解Haskell并且由于它看似优美的设计我把“终极语言”的希望寄托于它。我开始着迷一些像monadstype classlazy evaluation 一类的东西看Simon Peyton Jones的一些关于函数式语言编译器的书。以至于走火入魔对其它一切“常规”语言都持鄙视态度看到什么都说“那只不过是个monad”。虽然有些语言被鄙视是合理的有些却是被错怪了的。后来我也发现monad, type class, lazy evaluation这些东西其实并不是什么包治百病的灵丹妙药。
但是我很不喜欢Cornell的压抑气氛所以最后决定离开。在不知何去何从的时候我发了一封email给曾经给过我fellowship的IU教授Doug Hofstadter《GEB》的作者。我说我不知道该怎么办后悔来了 Cornell我现在对函数式语言感兴趣。他跟我说IU的Dan Friedman就是做函数式语言的啊你跟他联系一下就说是我介绍你来的。我开头看过一点The Little Schemer跟小人书似的所以还以为Friedman是个年轻小伙。当我联系上Friedman的时候他貌似早就认识我了一样。他说当年你的申请材料非常impressive可惜你最后没有选择我们。你要知道世界上最重要的不是名气而是找到赏识你能够跟你融洽共事的人。你的材料都还在我会请委员会重新考虑你的申请。IU 的名气实在不大而Friedman 实在是太谦虚了所以连跟他打电话都没有明确表态想来IU只是说“我考虑一下……”这就是我怎么进入IU的。
Friedman的教学真的有一手。虽然每个人对他看法不同但是有几个最重要的地方他的指点是帮了我大忙的。有人可能想象不到在Scheme这种动态类型语言的“老槽”其实有人对“静态类型系统”的理解如此深刻。也就是在Friedman的指点下我发现类型推导系统不过是一种“抽象解释”而各种所谓的“typing rule”不过是抽象解释器里面的分支语句。我后来就通过这个“直觉”再加上Friedman的逻辑语言miniKanren里面对逻辑变量和unification的实现做出了一个Hindley-Milner类型推导系统HM 系统也就是ML和 Haskell的类型系统。虽然我在Cornell的课程作业里实现过一个HM系统但是直到Friedman的提点我才明白了它“为什么”是那个样子以至于达到更加优美的实现。后来经他一句话点拨我又写出了一个lazy evaluation的解释器也就是Haskell的语义才发现原来SPJ的书里所谓的“graph reduction”不过就是如此简单的思想。只不过在SPJ的书里细节掩盖了本质。后来我在之前的HM系统之上做了一个非常小的改动就实现了type class的功能并且比Haskell的实现更加灵活。所以就此我基本上掌握了ML和Haskell的理论精髓。
可是类型系统却貌似一个无止境的东西。在ML的系统之上还有System FFwMLFMartin Lof Type TheoryCIC……怎么没完没了我一直觉得这些东西过度复杂有那个必要吗直到Amal Ahmed来到IU我才相信了自己的感觉。然而这却是以一种“反面”的方式达到的。
Amal是著名的Andrew Appel“虎书”的作者的学生在类型系统和编译器的逻辑验证方面做过很多工作。可是她比较让人受不了她总是显得好像自己是这里唯一懂得类型的人而其他人都是类型白痴。她不时的提到跟Bob Harper, Benjamin Pierce等类型大牛一起合作的事情。如果你问她什么问题她经常会回答你“Bob Harper说……”她提到一个术语的时候总是把它说得无比神奇把它的提出者的名字叫得异常响亮。有一次她上课给我们讲System F我问她为什么这个系统有两个“binder”貌似太复杂了为什么不能只用一个她没有正面回答而是嘲讽似的说“不是你说可以就可以的。它就是这个样子的。”后来我却发现其实有另外一个系统它只有一个binder而且设计得更加简洁。后来我又在课程的 ailing list 了一个问题质疑一个编译器验证方面的概念。本来是纯粹的学术讨论却发现这封email根本没有发到全班同学信箱里被Amal给moderate掉了
看到这种种诡异的行为我才意识到原来学术界存在各种“帮派”。即使一些人的理论完全被更简单的理论超越他们也会为“自己人”的理论说话让你搞不清到底什么好什么不好。所以后来我对一些类型系统以及Hoare Logic一类的“程序逻辑”产生了怀疑。我的课程project报告就是指出Hoare Logic和Separation Logic所能完成的功能其实用“符号执行”或者“model checking”就能完成。而这些程序逻辑所做的事情不过是把程序翻译成了等价的逻辑表达式而已。到时候你要得知这些逻辑表达式的真伪又必须经过一个类似程序分析的过程所以这些逻辑只不过让你白走了一些弯路。当Amal听完我的报告勉强的笑着说“你告诉了我们这个结论可是你能用它来做什么呢”我才发现原来透彻的看法并不一定能带来认同。人们都太喜欢“发明”东西却不喜欢“归并”和“简化”东西。
可是这类型系统的迷雾却始终没有散去像一座大山压在我头上。我不满意Haskell和ML的类型系统又觉得System F等过于复杂。可是由于它们的“理论性”和它们创造者的“权威”我不敢断定自己的看法就不是偏颇的。对付疑惑和恐惧的办法就是面对它们看透它们消灭它们。于是我利用一个independent study的时间独立实现了一个类型系统。我试图让它极度的简单却又“包罗万象”。经过一番努力这个类型系统“涵盖”了System F, MLF 以及另外一些类似系统的推导功能却不直接“实现”他们。后来我就开始试图让它涵盖一种非常强大的类型系统叫做intersection types。这种类型系统的研究已经进行了20多年它不需要程序员写任何类型标记却可以给任何“停机”的程序以类型。著名的Benjamin Pierce当年的博士论文就是有关intersection types的。没几天我就对自己的系统稍作改动让它涵盖了一种最强大的intersection type系统System I的所有功能。然而我却很快发现这个系统是不能实用的因为它在进行类型推导的时候相当于是在运行这个程序这样类型推导的计算复杂度就会跟这个程序一样。这肯定是完全不能接受的。后来我才发现原来已经有人指出了 System I 的这个问题。但是由于我事先实现了这个系统所以我直接的看到了这个结论而不需要通过繁琐的证明。
所以我对类型推导的探索就这样到达了一个终点。我的类型系统是如此的简单以至于我看到了类型推导的本质而不需要记住复杂的符号和推理规则。我的系统在去掉了intersection type之后仍然比System F和MLF都要强大。我也看到了Hindley-Milner系统里面的一个严重问题它导致了这几十年来很多对于相关类型系统的研究其实是在解决一个根本不存在的问题。而自动定理证明的研究者们却直接的“绕过”了这个问题。这也就是我为什么开始对自动定理证明开始感兴趣。
后来对自动定理证明Partial Evaluation 和 supercompilation的探索让我看到那些看似高深的Martin Lof Type Theory, Linear Logic等概念其实不过也就是用不同的说法来重复相同的话题。具体的内容我现在还不想谈但是我清楚的看到在“形式化”的美丽外衣下其实有很多等价的重复的无聊的东西。与其继续“钻研”它们反复的叨咕差不多的内容还不如用它们的“精髓”来做点有用的事情。
所以到现在我已经基本上摆脱了几乎所有程序语言编译器类型系统操作系统逻辑推理系统给我设置的思维障碍。它们对我来说不再是什么神物它们的设计者对我来说也不再是高不可攀的权威。我很开心经过这段漫长的探索让我自己的思想得到了解放翻身成为了这些工具的主人。虽然我看到某些理论工具的研究恐怕早就已经到达路的尽头然而它们里面隐含的美却是无价和永恒的。这种美让我对这个世界的许多其它方面有了焕然一新的看法。一个工具的价值不在于它自己而在于你如何利用它创造出对人有益的东西以及如何让更多的人掌握它。这就是我打算现在去做的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84853.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!