目录

计算机科学中的逻辑学题记

题记

上了三周袁梦霆老师的计算机科学中的逻辑学课程,不得不说是一节开拓视野的课程,从逻辑学的角度看待计算机非常有意思。第一节课的时候老师开玩笑的提到了计算机学界里面的鄙视链和编程的三个境界,给我感触很深。

鄙视链具体说什么我已经忘了,大概意思就是做理论的(主要指四个方向logic, formal language即如何用数学方法描述问题, computability即是否可计算, complexity)处于鄙视链的顶层,所以能发会议名字带T(Theory, 如STOC)、带F(Foundation, 如FOCS)的人各种意义上来说都很强,因为他们甚至可以不用编程实践来看做的对不对,比性能好不好,直接数学理论上就可以证明算法好不好. 而那些做实验的通常只能通过性能对比(一堆图表各种指标那种)来发文章. 打个比方,做实验的就是在证明1个苹果+1个苹果=2个苹果,然后换一群人在那里看1个橘子+1个橘子=2个橘子吗, 直到有一个搞理论证明出1+1=2,做实验的就不能再玩这个了.

当然, 鄙视链其实更多是自嘲吧,毕竟又有多少人有资格真正玩理论的東西呢, 另一方面靠实验做出的成果也未必全是1个苹果+1个苹果=2个苹果跟风式的東西,举个数理统计课上老师讲了两次的案例,一个博士生靠实验做出了一个技术,甚至在模拟数据上验证这种技术很好,但是到了要写文章的时候写不出来,因为他自己没办法数学推导,就请了我们数理统计的老师合作,一步步推导出来,确实从数学上是可行的. 所以说实验和理论还是不一样,应该说是相辅相成,或者说其实就是工科和理科的区别吧,但是培养数学素养总是没错的.

编程的三个境界就是1. It works 你的代码没毛病 2. It works well 你的代码不仅没毛病跑得还很快 3. It is correct 你的代码是最优的. 说起来很直观,但是很多时候不容易,第三点有一个专门的议题叫programming verification程序准确性验证,老师举了个例子,华为的一个芯片,设计完了之后要检验是没有问题的,还要专门找国外的一家公司花大价钱用专门的工具来测,测完通过了才敢大范围使用.

那么为什么学计算机科学中的逻辑学呢,其一是Try to think at a higher abstraction level(逻辑学对思考能力有帮助),其二是Learn to argue formally(写文章和高手交流的时候要专业一点,不然都不在一个频道上),其三就是Open another perspective to programming(和第一点意思差不多,说不定到时候有个想法灵光一现刚好数学上有一种方法能解决),两相结合就实现了. 逻辑学重要的是思想,那些套路什么的只是启发式的介绍,说不定以后自己都能创建一套逻辑规则.

相关内容

  • 命题逻辑的语义
  • 谓词逻辑