学习理论的实用意义

来源:互联网 发布:php base64 解码失败 编辑:程序博客网 时间:2024/04/28 01:00

为什么要学CS理论呢?成天研究MSO=MSO0一类的问题对一个程序员的职业发展到底有什么好处呢?知道Ranked Tree Automata和Unranked Tree Automata的互换又怎么样呢? 不知不觉学习形式化方法一年多了,学了一大堆数理逻辑和自动机理论,可计算性和复杂性理论也多学了不少。 这些理论除了有趣,有没有什么实用的价值呢?我不过是一小小程序员,没有能力也没有打算在CS理论方面一展身手。既然这样,难道这一年多来在工作之余狂读论文不过是出于个人兴趣?我好像还没有那么纯洁吧?  还好,随着学习的逐渐深入,我好像悟到了一些理论的现实意义:

1。学习理论能拓展我们总结一般规律的能力。一个优美的理论总能用很少的元素涵盖广泛的现象,包括理论产生时还没有出现的情况(实际上,合格的理论必须有预见能力)。比如虽然Lambda Calculus只有7条公理,但它的表达能力和图灵机等价。换句话说,实现了Lambda Calculus的编程语言(比如LISP)尽管句法简单,却能和基于图灵机的语言(比如C++)一样强大。而在程序设计方面,一个好的设计也应该能处理一般情况,而不是一堆特例。比如如果一个程序里有大量分散而臃肿的case..switch或者if..else,这个程序多半有问题。进一步说,理论学习能训练我们抽象的能力。关于抽象能力和理论的关系,这篇文章说得很清楚。

2。学习理论能训练我们洞察不同事物间联系的能力。很多时候,我们编程的目的无非是把一种形式的信息转化为另一种形式的信息,而且这种转换往往受到计算资源的限制。理论恰恰关注事物间的联系。比如讨论树的时候,能不能只讨论二叉树,或者NFA是否很DFA等价。

3。学习理论让我们能迅速掌握计算机的前沿动态。没办法,现在发表的论文往往用形式化的方法表达研究结果。没有一定的理论只是,还真看不懂,更不用说和论文的作者讨论了。别告诉我看论文不重要。要开发出别人开发不出的软件,广看Dr. Dobb's Journal 是远远不够的。

嗯,能想到就这么多了。哪位高人来指点一下迷津就好了。