选课类别:基础 | 教学类型:理论实验课 |
课程类别:研究生课程 | 开课单位:计算机科学与技术系 |
课程层次:本研贯通 | 学分:3.5 |
|
别选!!
别选!!!
别选!!!
这门课真的太烂了, 为了凑基础课学分选这门课真是大错特错了, 完全可以选算法, 县长的计算机应用数学或者计算机系统来凑. 这门课没有个什么大纲架构, 完全是老师拼凑的各种内容在一起. 课程主页上直接给你甩一脸的链接, 一点开就是又臭又长的文档. 抱着深入理解语言的底层, 探索各种编程语言共通的本质的目的来选的这门课, 结果是完全学不到东西, 课时又长, 作业实验巨多, 而且实验要求什么的也讲不清楚. 这门课要不是学这个方向的, 没必要接触, 要想学好这门课投入的精力和收获完全不成正比, 性价比极低. 选这门课的人一共不到 20 , 是有原因的. 当然这门课给分杀手, 要不是没有其他两门基础课的高分拉一下, 基础课均分就完了. 后悔, 后悔当事人现在就是很后悔.
update: fix typo
为了凑学分选的,虽然看评课有点哈人但最后上完也没这么不堪,作业确实不多,凑学分大胆选,所以稍微往上拉一点。
上课在高新区,老师经常忘记开网课,但是课程主页上 PPT 和参考教材的 pdf 都有,其实听课也就是刷个脸。
今年先上的程序语言部分(参考教材 PFPL),再上的程序分析。程序语言部分主要是一些函数式和类型系统相关的内容,讲了几种语言系统的静态语义(类型如何确定)和动态语义(求值规则)。主要收获大概就是如何用一堆希腊文表达一个用自然语言描述起来很简单的道理。
程序分析部分(参考教材 SPA)重点是基于格(代数结构中的那个 lattice)的约束建立和求解(即,刻画每个变量执行过程中满足什么约束),和基于程序流图的过程间分析,也有一些指针分析等内容。学期初似乎还讲了 Hoare 逻辑(即分析循环不变式)这种比较形式化的内容。
考试全开卷,且基本完全不用复习,理解了概念就行,但是题量有点大,正常写应该写不完,算是延续了老师编译的风格了。
总而言之,前置要求学过代数结构、数理逻辑和一点函数式语言应该就够了。学过编译会让程序分析部分轻松不少(尤其是如果你写过一些类似常量传播优化的东西),但应该也不是必须的。
给分按照老师的惯例应该是不调分的,不过大三同学应该也没这么在意 GPA 了,所以有兴趣的可以试试。
最后丢一段 SICP 的前言。
我认为在计算机科学中保持计算的趣味是至关重要的, 这门学科在刚开始的时候是十分有趣的。 当然, 那些为此付账的客户常常感觉自己受了欺骗, 以至于我们在一段时间之后开始严肃地看待他们的抱怨, 觉得自己似乎真的有责任完美无缺地使用这些机器。 然而我并不认为我们能够做到这一点—— 我认为我们的责任是扩展这一领域, 将它引领至新的方向, 并在业余时间保持它的趣味性。 我希望计算机科学领域永远不要失去趣味性, 更重要的是, 我希望我们不要变成传教士, 不要把自己看作是圣经的推销员, 这种人在世界上已经有太多太多了。 你所知晓的计算机知识别人也能够学会, 不要以为成功实施计算的钥匙只掌握在你手上。1 你所拥有的, 也是我所期望的, 就是智慧: 只有掌握了超越机器本身的能力, 你才能够将它向前推进。
Alan J. Perlis (1922 年 4 月 1 日 - 1990 年 2 月 7 日)
这门课本科生和研究生都可以选,本科生在西区上网课,研究生则是在高新区。
课程分两部分,第一部分是静态程序分析,第二部分是编程语言理论。
考试开卷,我那个时候PL的部分没怎么复习,到最后没做完。
程序分析部分的参考教材是这个https://users-cs.au.dk/amoeller/spa/,老师的ppt基本都是从这里复制的。然后这个教材的配套实验一个也没做,作业基本是手动分析一些程序。考试时考了别名分析的一个算法,作业没出。
PL部分应该是参考harper的http://www.cs.cmu.edu/~rwh/pfpl/, 考试好像考了一些static和dynamic,还有lambda演算的reduction,以及lexical scope和dynamic scope。PL部分作业一点没出,实验也完全没有。
学期初被张昱老师找过去聊天,她说会有oneAPI相关的实验,不知道为什么后面也没有。感觉老师并不是很在意这门课,老师翻译的PFPL也刚出版,希望老本行PL能更重视点啊。
从学习知识的角度看,这门课并没有学到太多东西;如果是为了水学分,我认为还是可以的,这门课基本不占用太多时间(就三次作业,在本部的话可以听网课,而且还有3.5学分),给分似乎还行(我是本科生,不知道研究生的情况)
(吐槽一下,PL 明明是 theory 张老师却在课上讲了好多次 system!)