一点感想

来源:互联网 发布:node.js视频教程 网盘 编辑:程序博客网 时间:2024/03/28 16:37

 

 这学期修的程序分析课没有作业,没有考试。唯一要做的就是积极参加课堂讨论和主讲一堂课。这周轮到我讲。题目是程序分析里的shape analysis,也就是讨论怎么分析程序里堆的变化,用来回答诸如链表是否有环,会不会出现解析空指针的错误这类和堆管理有关的问题。 这个题目的相关阅读资料是的第2.6节,和。本以为会很吃力,没想到比预计的轻松。讲解时出乎意料地流畅。想来有几个原因: 这学期修的程序分析课没有作业,没有考试。唯一要做的就是积极参加课堂讨论和主讲一堂课。这周轮到我讲。题目是程序分析里的shape analysis,也就是讨论怎么分析程序里堆的变化,用来回答诸如链表是否有环,会不会出现解析空指针的错误这类和堆管理有关的问题。 这个题目的相关阅读资料是这本书的第2.6节,和一篇78页的巨型论文。本以为会很吃力,没想到比预计的轻松。讲解时出乎意料地流畅。想来有几个原因:

  • 有个好朋友。这学期和一个好朋友长谈了很多次。他不厌其烦地解答了困扰我很久的疑问,尤其是格点理论和定点理论在模型验证里的直观意义(没办法,俺基础差,老卡在这些基本问题上),以及抽象解释(Abstraction Interpretation)的重要性。这些基本问题疏通后,书里鼓吹的单调框架(Monotonic Framework)一下就显得脉路清晰了。Shape analysis也就成了单调框架里一个应用。而三值逻辑用于shape analysis也是抽象解释的一个直观应用。理解了更高程度的抽象,具体应用自然变得容易理解。
  • 论文写得好。Knuth在他的书Mathematical Writing里洞见道,面向普通读者写作,你的文章能被专家读懂;面向专家写作,你的文章谁都读不懂。这篇论文颇有Knuth提倡的写作风格。论文先用了16页细述文章脉络,理清用三值逻辑(不是黎鸣那个搞笑东东哈)做shape analysis的思路和直观意义。论文里虽然充满各式公式,但几乎每个公式前后都有清晰的解释和例子。看来还是发在期刊里的论文好读,毕竟有足够的篇幅详细讨论。相比之下,会议论文虽然即时,限于篇幅,就没有那么好读了。
  • 心态变了。自从搞明白了几个关键问题后,慢慢开始理解形式化方法在CS研究中的重要性。一旦抵触情绪消失,注意力就集中了,那些符号也没那么难懂了。
  • 换了新方法。其实都是达人们用惯了的,不过对我这个菜鸟来说还新鲜。Danny Hillis有篇极为动人的文章,讲述费因曼在Connection Machine Inc时的传奇故事。文章里提到费因曼把每个问题当成一个游戏,总是从“给我一个最简单的例子”这样的问题入手,一直到把一个大问题简化成一系列他能解决的小问题为止。我套用了一下,效果还不错。另外就是把注意力集中在公式的直观意义,尤其是同数据流图的对应关系上。很多复杂公式一下就清晰了。这个手段其实从学数学就开始用。也许本科前的数学本来就直观,俺根本没有注意。后来学到真正抽象的东西时,反而忘记了本质的东西,成天去琢磨操纵符号的技巧了。华英雄罗庚曾说读书之道由薄至厚再薄。最近照着这个思路读论文,循环式地增进理解,收效颇好。
原创粉丝点击