选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业核心 | 学分:4.0 |
This course considers the principles that underlie a wide variety of compilers, and focuses on the problem of translating programs written in a high-level language into semantically equivalent programs written in low-level machine code. After taking this course, students are expected to understand the principles of designing and implementing modern programming languages, and to implement a working compiler using standard compiler tools.
李诚老师被评价为教学水平高、认真负责,讲课清晰、有逻辑,PPT质量高且富有细节。课程内容涵盖编译器技术的各个方面,包括词法分析、语法分析、中间代码生成、优化等,学生通过课程可以深入理解编译原理,掌握C++等相关技术。
课程作业通常来自课本习题,旨在帮助学生复习和理解课程内容。实验是课程的核心部分,涉及实现一个Cminus编译器,使用LLVM为框架。这些实验被评价为既有挑战性又富有启发性,如:“通过学习这一门课,同学们不仅能够学习到编译原理的知识,还可以学习到包括且不限于C++语法、git的使用、gdb调试等”。不过实验难度较大,尤其是Lab4.2(GVN优化)被指出“自由度高,难以入手”,调试耗时,需大量时间投入。Gitlab平台用于作业和实验的提交,助教负责体验良好,提供积极帮助。
给分在学生中引发了争议。有学生表示期望值较高的情况下成绩较低,抱怨期中考试的权重被大大降低,而期末成绩的重要性被提高。不过也有观点认为给分合理,“通过实验和努力得到了应得的分数”。总体来说,成绩分布取决于学生在实验中的表现,表现好的学生普遍能获取满意的分数。
李诚老师被学生普遍认为具有亲和力,能够理解学生需要,答疑及时。此外,助教团队被评价为“非常负责”,设计实验花费了大量精力,提供的支持和指导丰富了学生的学习体验。
课程还提供课外的发展机会,例如“建木杯编译器创新比赛”,为有意在编译方向深入发展的学生提供了一个很好的平台。
李诚老师的《编译原理和技术》课程在课堂质量、实验设计和助教团队上被称赞为计科里最佳之一,但对于实验的高难度和给分问题存在一定的争议。对于想要学习和深入理解编译技术的学生,这门课值得推荐,但对实验和工作量有预期的重要性。
22fall助教前来评课。
作业不要抄袭
这学期的实验框架绝大部分沿用去年的,最重要的改动是指令链表的数据结构:由std::list<Instruction*>
改为llvm::ilist<Instruction>
,LLVM侵入式链表在erase成员时会自动delete,因此解决了去年框架存在的内存泄漏。
关于intrusive list,可以参考这篇博客,选用ilist还有一个好处是可以通过一个指令直接得到其迭代器(不需要在链表中查找),非常方便后续需要插入新指令的优化Pass,不过后续实验并没有用到这个功能。
我和另一位助教设计了新的实验Lab4.2 GVN。会选择这个版本的GVN是因为
给代码挖空的时候我们就决定,不要让同学们被代码框架限制住思路,实验后期大家陆续完成实验,看到一些有趣的思路感觉很好;不过自由度过高也让很多学生无从下手,甚至去猜提供的框架为什么是这样写的,这样会让实验乐趣大打折扣。
过程中有些同学还说”没办法用C++实现伪代码“或者提到了C++水平不够的问题,我一开始担心Lab4.2本末倒置变成cpp编程练习,但是现在想想我多虑了:就算解决了coding的困难,调试仍然非常耗费时间,GVN还是会给大家留下深刻印象。另外,相信下一届负责gvn的助教会增加测试样例,这学期的testcase确实少了些。
实验答疑平台由QQ改到了希冀论坛,有几个好处
吐槽:设计新实验的工作量实在是太太太大了,然后又overworked and underpaid。从开始设计实验到发布,到ddl再到评测改报告,大概有两三个月,好在是终于结束了。
这是我第一次带助教,从老师、同学、其他助教那学到了很多作为学生不会注意到的事,这次经历还是非常宝贵的。
想听李老师讲怎么找研究生学姐°꒰๑'ꀾ'๑꒱°
结课update。诚哥一学期也没有讲怎么找研究生学姐扣一分,不过蹭了诚哥很多顿饭再加回来。诚哥确实是一位学术水平很高对教学也非常负责的老师,对于本门课程无脑选就完事了。另外诚哥确实是我心目中完美的老师,学术水平顶尖,没有一点架子,对于人才培养也是非常用心。学弟学妹之后若选修了诚哥的课程下课可以多向诚哥请教各方面的问题,我每次和诚哥聊都有很大的收获。
先给这门课一个总体的评价吧:
中科大计科院设计的最好的一批课程之一。
细说:
内容:通过学习这一门课,同学们不仅能够学习到编译原理的知识,还可以学习到包括且不限于C++语法、git的使用、markdown文字处理、软件工程实践、gdb调试等许多在大一大二学习中缺失的内容。
讲课:李老师讲课还是很不错的,不会太跑偏也很清晰。而且ppt中给了很多过程性的描述,可以让大家很生动地理解各个知识点。
作业(20%):相比前几年应该减少了不少。。。我反正每周就花了2个小时。。。
实验(40%):又大又硬。lab123算是热身性质的,基本大家都能拿满(不要学我,lab1遍历字符串的时候从i=1开始了),lab4是独立完成一个CminusF编译器,当时真的差点没把我干碎…我们组完成后的工程差不多有600行代码,大家可以想一下自己调那些不到100行的小代码的时间,然后大概估计一下调这个玩意的时间…lab5是完成3个中间代码优化pass,这个实验感觉就简单多了,稍微注意一点大家都能拿到不错的成绩。
总之一步一步把各种各样的东西都调通还是很有成就感的一件事情,而且说实话这个实验应当是大家这辈子唯一一次接触中间代码生成的编写,所以好好做一做还是很好玩的。另外lab和课程的知识点的结合也很紧密,我后期复习考试的时候就只要通过回忆一下实验,很多内容就明白了。
考试(40%):本门课程包含期中期末两场考试。期中开卷,有手就行;期末闭卷,做了实验基本随便写吧。没有概念解释和优缺点分析,基本上好好做了实验也是有手就行。
这门课我个人认为基本上是最能体现理论与实践相结合的一门理论实验课。老师的授课思路很清晰;作业出的题都是需要自己思考的题目,而不是机械性地去查书;实验非常硬核且很有意思,而且能够让擅长实验的同学可以获得一些领先(而不是像COD、OS的实验大家都满分只能拼考试);考试不需要特别看书上的文字,通过复习考试让大家更加熟悉编译器、运行时的各种东西。
另外助教真的都是神仙。。。回答问题、反馈作业都很及时和准确,而且可以看出助教在实验设计上付出了比我们多得多得多的时间,也为此再次感谢各位助教。
关于成绩:
因为不知道期末具体成绩不予评价。不过我个人感觉实验好好做了肯定不会差。
关于bonus:
两个bonus我都加了分了。但我很卷吗?
有些人嫌发issue卷。认识我的人都知道我老咸鱼了,就把正常需要问的问题在git上发了一下而已,怎么就卷了?
有些人嫌bonus实验卷,先不说总共就加两分,你要是愿意在考试上多花时间复习涨个两分一点都不难;更何况写一个bonus pass一个组基本上就只需要3个小时,然后就直接能拿到2分啊?分明是你自己懒吧?
特别是这一堆评分基本上组和组之间都是独立的,而且也不存在所谓某几个组因为做得好导致老师提升评分标准,卷啥了啊?
更何况开学就提了实验和考试占相同比例,明知道的情况下还不努力?
补充:
我看某些同学嫌别人卷
您配么?
合着是愿意花时间在实验上是错误的?你愿意花2个小时背书我愿意花2个小时写代码我就不配高分?
另外我们这次实验真的是军备竞赛么?先不说按照2人组均分50%评分一个同学想拿满分完成分只需要80分,也就是说只要完成了助教在文档里提示到的所有点就可以拿到满分。就这都能叫卷?是不是实验就只配printf一个helloworld然后大家都满分才和您的意?
就应该给你们出点int a[][2][2]={1,{2},{3},4,5,{6},{7},8,9}然后大家一起军备竞赛复习?再出点LR1、LALR、SLR的优点缺点写不对就全扣?
另外我倒看着好多同学抱断别人大腿的样子很靓仔哦。
前排提醒:这篇评论预计较长且可能夹带强烈的个人主观情感,对于纠结是否要选这门课的同学,我给出的建议是:想轻松一点拿到高G的慎选;对自己代码能力有自信的(适应lyk老师的os实验强度)同学可以放心选;对于受够了计科课程成绩总是由文科期末决定的也可以选(但要做好写实验的准备)。
ok,那我的评课正式开始。
作业量其实不多,不过如果是想做成电子版的话可能需要花的时间会多一些,会有很多的表和状态机之类的要做,所以不擅长的同学可以直接手写拍照,助教不会根据这个扣分的。
作业的给分助教也不会为难,没有什么大的错误的话一般都是扣0.5分意思意思,这方面不用担心。
以我个人的体验,李老师的上课水平一直在线,思路清晰,而且PPT也很清晰、精美,和答辩课本形成了强烈的对比,有李老师的PPT在我一学期基本没翻过答辩课本。这学期唯一一段感到上课质量有些下滑的时间只有疫情上网课的那段时间。可能是缺少了面对面的反馈的原因,那段时间上课节奏有些过快,而且那时讲的还是标号回填这一部分难点,上完网课我还是有些懵懵懂懂的。不过以后应该不会再有上网课的情况了,这一部分不用担心。
除开传统知识点的讲授外,李老师学期末还会介绍一些当前业界的前沿知识,最后一节课邀请了相关技术人员来介绍AI编译,听完还是有很大收获的。
李老师yyds!先把了解到的情况放在这里以供参考:我期末发挥较差(全班35%左右)+39.2/40的GVN实验=4.0,而且了解到的写了实验的同学的情况,基本都狠狠地被捞了。基本上来说,只要GVN的分数达到了36/40以上都会有一口巨大的奶,而且这一目标其实不是那么难达成,只要通过了助教的公开样例其实就能拿到36左右的评测分数了,隐藏样例的分数即使没有全部拿到也不会影响李老师的奶分力度的。
关于给分这块其实很感慨,毕竟当初在选课时看到前面一届同学被下调分数的惨痛经历我是犹豫过要不要换班的,现在情况的反差让当初的自己显得有些可笑了。而且从后面与李老师的交谈中会发现李老师已经逐渐地把课程的重心往实验上靠了 ,所以相信在以后的学期中下调分数的情况应该是不会再出现了,如果是因为看到前面一届同学的评论而犹豫的同学可以放心大胆地选。(李老师在答辩会的交流环节曾开玩笑地说,不就是分嘛,要多少给多少,但是你们认真地完成实验才是我最想看到的。大概意思是这样,说错了踢我:)。李老师yyds!)
实验是这门课程的重中之重,而且难度确实不低,不过只要时间给够的话,相信大部分人都是能拿到大部分的实验分数的。而且李老师不会在时间上为难大家的,学弟学妹们如果觉得实验时间太短的话(比如lab4.2级别的一开始只有两周,噔噔咚)是可以大胆地去找老师延长一段时间的,我们这一届最后延期了大概一个多月,时间是相当充足的。
对于实验内容大伙说得都差不多了,这里写一下对实验难度的看法:lab1和lab2是相对简单的,按李老师的说法就是热热身;lab3的实验难度会急剧飙升,不过lab1、lab2和lab3都是进行后续实验前必经的一步(换句话来说,就是和往届一样,你懂的),所以最后花的时间其实不太多,快一点的三天左右,慢一点的一周左右也能完成。那么"轻松"地完成lab1、lab2、lab3之后,我们就能愉悦地开始lab4的工作了。开始正式的代码编写之前,会先有一个小的文科工作lab4.1,带你深入浅出地了解lab4.2的原理。个人认为这个设计还是很好的,可以先缓冲一下,不过里面具体的知识理解还是到具体写lab4.2的时候才有深入了解。
开始lab4.2之前,要做好需要投入大量时间的心理准备。在这一过程中你可能会经历:较简略的实验文档,伪代码难以实现,Segmentation Fault, 好不容易码完代码后公开样例只对一半的苦恼以及好不容易通过公开样例后对着不知助教往后面藏了什么东西的隐藏样例发呆半天的烦恼。但是不要着急,这些问题都是可以被解决滴,简略的实验文档和伪代码难以实现的问题会由五星级助教勤恳的回答issue来解决;对于调试,助教提供了gdb调试和日志两种方法任君选择;至于隐藏样例问题,......我没满分你问我?大伙可以把它当做挑战自己的bonus,毕竟即使不是全满李老师的捞人力度也是不会减轻的。在这里我的教训是一开始觉得使用日志调试要多填不少代码,所以按助教的gdb说明文档使用了vscode+gdb调试,但是在样例逐渐复杂的情况下debug难度也会不断增加,而且也难以发现自己程序中潜藏的bug而不知作何修改来通过隐藏样例。隐藏样例的一处需要判断pure function的坑就是一起写实验的不偷懒的哥们用日志发现的,所以这里含泪推荐大伙使用日志调试。
lab4.2虽然难度大,但是写代码的过程还是非常愉悦的,尤其是在寒假写代码的过程,尤记得当初在截止日的最后两天实在拿隐藏样例没办法,和一起写实验的哥们开tx会议互相找对方代码的坑、互相指指点点和编恶心的样例来测试对方的代码,整个tx会议里洋溢着快乐的气息。结果也是相当喜人:前面七天:36.6->36.6,截止日前两天36.6->39.2,果然ddl是第一生产力。
另外按照李老师的说法,编译是最容易搞出新花样的课,所以明年最难的实验大概率不会是GVN而是另外的优化算法了,从网上可能找不到多少资源,决定坚持的同学做好准备,干就完了。反正助教会被要求先实现一遍,多多少少有点心理安慰。
对于我来说,经历完前面的一切只是经历了这门课的一半,还有另一半课程的精髓在lab5上。今年的lab5简单来说是实现从IR到龙芯汇编语言的翻译,实验的分数由一下三部分组成:
实验的工程量不小,我只完成了适配GVN的寄存器分配策略,没有做更多相关的优化的情况下代码量也在1200+,而且写代码的时间还不及debug时间的一半,所以整个实验走下来肯定是不轻松的。但是这个实验的难度梯度设计得相当好,所给样例和实验文档推荐使用的方法的难度都是逐级递增,而且递增得非常丝滑,回头看的时候有一种慢慢从底层把积木搭高的感觉,以我个人评价,整体体验是优于lab4.2的。而且这个实验和课程内容联系得相当紧密,其中能够用到的方法和课程相关性很强,例如活跃变量分析、循环、支配节点等等知识都能在其中发挥作用,给人一种自己学的知识终于有用了的感觉,体验非常良好。除此以外,它还帮你揭开了慢慢知识海洋的神秘一角,在实现了基本的栈分配策略翻译后,你会忍不住想栈分配策略是不是太粗糙了,换成寄存器分配策略效果会不会更好;在实现了寄存器分配策略后,你会忍不住想会不会是IR没有开启优化导致效果不好,让框架适配GVN优化的IR会不会更好;在修改了框架适配GVN优化生成的IR后,你会忍不住想有没有更好、更多的优化算法......可惜本人在寒假太摆,在想要去进一步优化的时候已经没有时间了,这也是我在这一课程中最遗憾的事了。
仅仅是实验难度和设计是不足够形容lab5的优秀的,lab5最后的答辩演讲会才是整个课程最后的高潮。我以前是没有经历过答辩演讲的,所以一直都有一种害怕与畏惧。但是李老师在整个答辩流程中对我们充满了鼓励与宽容,面对没有完成全部样例的同学李老师会给予鼓励,面对优化效果非常显著的大佬们李老师也毫不吝惜自己的赞美。整个答辩演讲会走下来,不仅增长了我自己的勇气,大佬们优秀的思路也给我一种醍醐灌顶的感觉。会议结束后李老师还请客吃了饭,整个流程真的给人一种技术涌动的感觉。
最后也非常希望来年学弟学妹们能够多多参加bonus实验,毕竟这是在科大为数不多的拿得出手的项目了,而且整个实验走完的收获是相当巨大的,即使没有能够完成得很好李老师也不会怪罪,为何不来嫖免费的小奖品呢:)
我是非常喜欢老师今把bonus实验从GPA中完全割离开的决定的,我认为开启一个与GPA完全无关且难度不小的实验是相当需要勇气的。这一方面体现了李老师对自己教学质量的自信(毕竟如果是mjh出一个与GPA完全无关的bonus实验我是肯定不会鸟他),也让选择完成bonus实验的同学的收获更加纯粹,同学互相的交流也更加纯粹不带功利性,这种体验在充斥着GPA的科大真的是非常难得的,让人受益匪浅。
从前面几届的评论,bonus实验从一开始的加GPA实验变成现在的额外奖励型实验,可以看出李老师也在不断地想改进自己的课程质量,在不断地思考如何让自己的课程变得更好,这一点在科大真是非常难得的。这学期在经历了这一课程后看到pksq的这条评论真的感触颇深:
(出处忘记了,就在手机上留了一张图,这里对原文作者表示歉意)
看到这条评论深有同感,同时我也认为lc老师就是可到为数不多的满足该条评论要求的好老师,在lab5的答辩会议结束后李老师还向我们透露改天要启程去南京学习南京大学计组老师的课堂,李老师对于课堂的用心是让人非常钦佩的。
最后非常感谢老师和助教这一个学期的付出,也感谢能忍住我六年级作文的水平看到这里的你,同时也想对这位同学说:
别灰心,你想遇到的老师就在大三上等你。
补充:记录一下2021秋出分前后的经过,以免学弟学妹看到该学期很多又吹又黑的评论一脸懵逼(
1.28 课程出分,给分与原有比例计算结果相比下调严重(该课程所有给分和考试及平时分占比全部公示),大部分同学都比预期低一档,且期中期末占比相差过于悬殊,引发众怒,并进一步质疑李诚老师信用问题。
1.29 李诚老师声明,之前ppt上的占比只是预期占比,不是最终比例。
1.29深夜 李诚老师撤回给分。
2.15左右 李诚老师声明在争取中,并说明不会低于之前给分。
2.18 课程再次出分,于原始给分相比平均增加了两分,与原有比例计算结果相比下调四到五分。部分同学质疑此为先涨价再降价的策略。
虽然给分似乎让大部分同学满意了,但如果是为了给实验没能拉开差距善后的话,这是治标不治本的。实验内容逐渐稳定,github参考资料越来越多,新实验如加分实验的设计没能收获普遍认同,这个问题只会越来越严重。
以下为原答案
优点和缺点都过于突出的课程。
除去新加入的加分实验lab5,实验设计是科大计院所有课程最优秀的之一(甚至可以去掉之一)。除了对编译原理知识的应用,还可以学习gitlab的使用,C++数据结构和算法的设计等等,对锻炼工程能力有巨大帮助。与ics的大跃进不同,实验层层递进,设计非常合理。具体可以参考2021秋之前的评价,如李诚老师所言,这确实是能学到很多知识的硬课。
讲课和作业都较为合理,可能唯一的瑕疵是后端部分讲的没有前端部分好,不过这可能也和课程安排有关。
优点很多评价说的很充分了,主要说下缺点
1.使用gitlab,不建立qq群,理由是qq群会有人经常水群且不稳定(??????)。使用gitlab熟悉git使用本身非常好,但是gitlab只能校园网访问且频繁崩溃(高新区电缆又双叒叕断了甚至成了一个梗),这就舍本逐末了。服务器相关的问题应当在课程安排之初就解决。
2.实验文档和讲解的部分凡尔赛言论对刚接触的新同学非常不友好。包括但不限于“写了这么多了,大家都会了吧!”,“访问者模式非常简单”,“这个特性实现较为简单,bonus不会很多(结果该赛道没有人写)”。这些知识掌握后确实会发现很简单,但周围很多同学因为这些内容破防放弃实验。
3.诡异的发issue总评加分。发个vscode教程/指出实验文档路径错误可以加分,这加分和lab5一比就离谱,而且我服务器都上不去发个鬼issue。强烈建议取消。
4.给分杀手,普遍向下调分6分左右,大部分同学都比预期低一档,卷面总评算上bonus破百的同学也没拿到4.3,重视gpa的同学需要注意。
这门课更像是李诚老师实验室的招生课,而不是一门理解原理的计算机专业课(笑)。尽管给了较低的评分,但总体还是倾向于推荐的。以上。
这应该是本人大学四年上过的各方面体验最好的一门课(因为提前修了Web,并且大三下上了两周课,尚未感到有更好的,以及web没给我100)
老师,实验,考试,课程平台,以及助教团队在我看来都是值得给满分的。但这门课的工作量和实验难度也确实值得一个H课,劝对这方面不感兴趣的同学慎选,不如换个班划划水、去上上机器学习啥的。接下来开始细说。
李诚老师yyds。
本学期的实验跟以往不同,总共分了五部分,并且每一部分(大概除了3)都与课程内容高度相关
词法分析,FLEX带你走进编译的大门。
语法分析,用bison将你lab1的成果种出一棵大树
IR接口学习,承上启下,为接下来的工作做好准备
builder,现在有了FLEX,bison,有了API,有了课程第七章PPT,现在开始做你的编译器吧!
优化,开启-o模式(看了助教的比赛代码才知道我们做的真少((
前三个实验可以说是铺垫和准备,就和别的课程的普通课程实验差不多。而第四个实验就是这门课程最亮眼的地方,要不然这门课只能叫编译原理,不能加上这个技术
首先说下文档,因为上学期有门课做大作业时需要参考CUDA C的文档,我是感觉晦涩难懂还冗长,并且有些参数我根本不需要,但又不得不去看解释。相比之下,虽然我一开始两个屏幕,一个看源码一个看文档都没看懂,但助教提供的Light IR不仅是中文的,而且就几页,没有什么复杂或多余的参数设置,就这些就能完成所有功能,还要啥自行车(我没了解LLVM源码,就只说个人感受)
接着说一下内容。就是根据助教提供的文档,在语法树结点上填写生成IR的代码。而相关的方法基本上课程内容中或多或少都有提及。当然,学习曲线是V形的,起码我要想很久才能写下第一行代码,中间填结点的过程是很愉快的,但是后面debug的过程又很麻烦。
对于评分,也是目前为止我见过最好的评分方式。首先组队实验,三人队两人队均可,分数设置也是用心考虑过的(不像web我一个人全干了还没加分);第4,5个实验实际上是一个没有排行榜的军备竞赛,需要去猜测助教会出什么样的测试样例,当然不全对也能拿满分(我就没考虑到作用域导致没全对)。但是很多同学好像觉得pass基本样例就行了,然后说测试样例太难,问题是只完成这12个测试样例甚至有个留空的函数都不用写,这明显不合理啊(((
工作量:工作量自然是很大,应该是本人写过最长的一个程序。老师助教也好心给我们延了一周,那段时间我基本天天课上敲代码「太菜了qaq」(幸好延期了,不然一周写三门大实验真就要暴毙了
此处@一波计网,趁早由信院接管吧,虽然貌似信院实验也不大好(
实验带给我的收获是很大的,从零开始学了点cpp、gdb,也加深了对整个编译这门课的理解。但真的有很大工作量,且如果像我一样没有cpp基础的话,想要做好就得从早码到晚。Lab5老师延了救命3天,当时我勉强写完公选课论文+Web实验2,然后从早肝到晚,取外卖的路上满脑子都是流图(此处建议不要做ddl战士
收获大意味着需要花很多时间,如果对写代码做实验不感兴趣,最好不要选,不然看着文档和一堆留空的代码段真的头疼。如果抱着一门水课的心态来,我认为这门课确实0分。总不能指望老师助教又负责、课又水吧。
和课程实验联系十分紧密,教了什么,就考什么,重点划了什么,就考什么
不考概念不考背书,看懂了算法会做作业就行,甚至不用背它(有题怕我们弄混都给出来了),和计网形成鲜明对比
考的实验其实不难,但是如果没有对照过.ll代码debug的话确实很难下手。
没建官方QQ群,使用的是gitlab。老师希望大家在gitlab上踊跃提issue,并设置了bonus加分,在我看来效果还是不错的,毕竟是实名但带马甲问问题,在过于水和过于冷之间有个平衡。每次做实验都比较晚,开始做的时候刷一遍issue,能少走很多很多弯路。
有关实验环境也是由助教进行提供,本人使用docker,体验很好。但身边的人或多或少都出现过一些问题,这里建议下次助教一步到位,把vscode remote ssh也教上((
作业实验都是直接git commit,并且对文件夹格式都有一定的需求,直接push我们去学习git,我认为还是很有帮助的,不管是工作还是科研,只要在计算机领域都会用到版本控制吧。(但很多人都很排斥?
最后大力赞美我们的助教团队,可以说这是我大学三年来见过最负责任的助教们(真的自愧不如
自己设计的实验文档和接口(虽然好像就是沿用了比赛的接口),对各种疑问的及时反馈(我提个文档缩进问题都改了)以及优秀的业务能力。
挑一些刺。。
PPT版本有些奇怪,经常有加长版和后续版之类的,对于异步学习的同学不太友好
不知道是不是有意为之,lab4倘若给一个example会更好一点,我看到builder空着的十几个函数看了一天,过了好几遍文档才写出第一行代码,这样对萌新属实不友好。
实验文档和实验细则更新太快,lab5尤为显著
公告栏隔三岔五更新
lab5有个样例明明issue已经提过了,但评分时没有更改(发邮件提醒后更改了)
当然,lab5是新增的实验,出些差错也挺正常的((
可能有人会说我是既得利益者,但我也确实花了很多很多时间(包括卷bonus实验也会占用算法复习时间),并且卷的这些东西都是有用的(起码在我看来比卷实验报告,数学物理和背书大赛有用),我认为这是应得的(逃。有付出就有回报,能切实提升自己各方面能力,老师助教尽心尽力,让我这个几乎0基础的同学也能做好东西,这样的课,上到就是赚到。
刚好有位浙大同学今天给我发了条消息:
欢迎大家来喷我(>ω<)
本学期⑦助教之一
本学期课程主页:http://staff.ustc.edu.cn/~chengli7/courses/compiler19/
本学期决定不用qq群,而改用gitlab的issue
------------
欢迎吐槽
出分前内心已经把这课封神了,可惜出完分觉得自己像小丑,毕竟不能免俗,大家姑且一看吧
课程和实验:上之前不少学长说编译工作量会很大,但实际体验下来觉得海星,收获也是真的大,可以给满分
给分:我就不多做评价了,给一些收集的数据吧(来源是官方和各种群的讨论,如觉不妥我立马删)
首先是期中期末以及给分比例:
期中平均分75.45 中位数78
期末平均分65.85 中位数69 最高分89
平时考核15% 实验45% 考试40% 另外有bonus加分,直接加到总评:Lab5最高可加5分,有效issue和上课回答问题最高可加5分
下面是一些dp:
98 70 86
96 69 84
86 75 84
92 70 84
50 70 82
91 75 88 (1分bonus)
90+ 80+ 93 (5分bonus)
80+ 80+ 90
85 83 90
89 77 87
74 77 87
94 73 87
94+ 74 89
给分很好!老师很敬业!助教也很敬业! 但如果让我重来一次,宁可去隔壁班被卡绩也不要再来这个班。
--------------------------分割线
我才发现自己被挂辽(
说一下不想再来这个班的原因。感觉这个课给我一种莫名的高级感。“你瞧,实验文档看不懂吧?/实验很难不会做吧?看不懂/不会做就对了,这才是高级”。
就先说实验文档,明明可以用很清楚,通俗易懂的方式讲出来的东西不懂为什么要搞的那么难,一度以为自己语文水平不好。助教难道不能将文档以一种初学者能够理解的方式去布置吗?我觉得编译的实验文档是我在科大读三年书遇到最晦涩的,我物理很差,但大雾的实验文档都没有这么夸张。这个实验文档我无法用语言描述。以后学弟学妹在上这门课的时候就能理解我现在在说什么。
再说实验,我不是来吐槽卷的。实验很难。难到从布置的第一天到交的前一分钟一直一直在焦虑在发愁。更何况一个实验没做完另一个就布置下来,焦虑感加倍。我的队友不是划水的,我们两个就是普通水平,踏踏实实做实验真的要了我们的老命了。我们也和大佬/中上水平同学一样,努力钻研文档,努力做实验,但时间就那么多,以我的能力真的不能那么好的完成。当时刚开始选课看评课社区说实验很难,不会做,还想,只要我好好学应该没有大问题。omg,真的有大问题!逃,赶紧逃。
我不反对说计院的实验就应该难,这门核心课就应该难的说法。但对不起,我就是菜,我不想太难。我来学编译只是了解基础的,不是要在上面钻研多深,还要学其他基础课。它本身和计组和操作系统一样的,但却成了我最头疼的课。本菜鸡当时觉得计算机组成原理难,但现在想想,相比这门课,那门课的不论是实验还是理论课真的恰到好处,难得地方也会让人有一种花时间就能搞懂的信心,但这门课对我来说,过于难了,学到后面就有点自暴自弃毫无兴趣。别骂了别骂了,已经努力了,孩子就是菜。
考试和作业都很正常。李老师有多好,上面的同学已经夸过了。每一届的助教可能不太一样,我不过多评价,没有意义。据说李老师开学会劝退,挺好的,希望学弟学妹认清自己,不要像我一样逞强。
不欢迎喷。各有各的追求。我是废物,我追求快乐。
课程还没结束,先来小声吐槽一下。(给分好坏未知,但是必须要填,就随便写一个)李诚老师很认真,大家可能学的都很好也很开心,但是并不包括我qwq
九分是因为老师很敬业不忍心打低分,但是真的太累了(哭
可能之前来评价的都是大佬,个人感觉实验量真的太大了,一个实验还没结束另一个实验又放出来了,最近平均每两周一个实验,每次实验花费5天+。
我这学期一共6门课,如果每门课都像这样留实验/作业,我14天得当成30天才够用((((不睡觉可能时间差不多。
然后上课发言有加分issue提问有加分,感觉自己什么都没懂什么都没开始做,周围的人就全都会了qwq(从期中考试来看真的是大家分都巨高,满分十几个((((
虽然选课前做好了充足的心理准备,现在学期中了还是觉得压力好大,这门课对我来说真的是上课巨难、实验巨难、压力好大qwqqq。老师的本意是好的,期末占比调低,几乎和实验占比一样。但是现在转念一想期末只是承担两个星期的压力就好了qwqqq,现在一学期都陷入焦虑,不停写实验.jpg
已经毕业了,突然想到再来补充一下回答。最后拿了一个很差的分数,因为后半学期自暴自弃了,在这门课上还是花了巨大多时间。强烈建议改成选修课,内容过于专业,花费时间过多,个人认为AI方向学这个实在没有必要。
第一次评课,一个星给李诚老师的讲课,一个星给给分上。首先就得讲课完全没有问题,但是有的助教的表现和实验真的很难对这个课有好评。首先是实验问题,实验过多过难是公认的,实验量大是可以接受的,毕竟以前那么多学期,模电还有算法都是有很多实验的,但是实验的评价方法真的难以让我理解。因为不是所有人都想搞编译,学编译只是这是门必修课,所以为什么实验要搞得那么难,把一些对应初学者很难第一遍搞明白的东西强加给别人呢,占用大家大量的时间而且还不一定能做出来呢,实验4,实验5搞成前面3个实验那样不是更容易让大家接受吗?横向对比一下,模电实验同样和这门课是一学分的实验学时,模电实验的实验文档就思路很清晰,而且每周有固定的时间可以到机房做实验,和助教交流,而这门课的实验文档对于一个初学者真的费解,但最不能接受的是有的助教却总说认真阅读实验文档就可以轻松完成实验(真的怀疑他有没有从一个初学者的角度看过,可能我智商不够),加上实验文档和源码反反复复的改变,然后就耗费了大量时间。感觉同样是一学分的实验课,为什么不能搞成每周有固定的时间可以统一沟通呢。最后再吐槽一下习题课上的有的助教,我大一大二俩年所有习题课几乎都参加了,助教水平确实参差不齐,但是第一次见有人戴个帽子上习题课,然后感觉比谁都着急(真的感觉到了不尊重)。在课上,我确实感受到了李诚老师对于编译原理这门课的付出和热情(但是有些助教又把这种感觉搞没了),所以这门课可能更适合一些同样在编译原理上有着相同追求的同学吧。
总评94,有点小伤心,不过自己期末考的怎么样也是有数的。
实在是想狠狠的夸一夸李诚老师,要不是我对系统和分布式兴趣不大,我一定和李老师跟到博士(你在想peach)
多说一句,如果大家在各课程看到一位新加入科大的教授(而且比较年轻),建议去试一试,甚至能在实验室里混到一席之地吧(为什么我就没有这样的命运嘤嘤嘤)
闲话不扯了,建议大家来。
最后大言不惭的谈两句对这门课程的看法:我实在觉得这是相比本学期其他课程以外,最简单的课了
1. 有清晰的算法、概念、计算步骤与思路;没有十分困难的设计和灵光的闪现。
2. 教材(龙书)讲解的很好,如果要精炼一点,昱姐的紫书也还可以(但我至今认为它就是在抄龙书还抄的不咋地);相比其他同年课程(随机过程,遍地都是错;微机原理,废话太多书还绝版)要好得多了。
3. 课堂与考试最为接近,这点与计算方法和随机过程相比尤为显著。
4. 李老师单独出题,考点鲜明,也不为难人,看懂书学会算法绝对能拿好成绩。
lab4.2好难(爆哭)写破防了
----------------------------------------
1.12 刚写完lab4.2,总体耗时80~100h,虽然没拿到全分但39.2/40也可以接受,而且感觉要阳发烧估计也写不了了。这实验难度忒大,自由度贼高,弄得每个人结构都不一样,有啥不明白的互相问都问不到一块,属实是写麻了。而且这个实验原本的时间非常接近期末考试,把这个难度的实验放在期末就变成了地狱难度的心理战(当然放在假期可以说是监狱级别难度,有点难受但时间充裕也能写个差不多)
建议下一届不要给这么高的自由度,或者给一个更详细的伪代码(我最后代码和伪代码可以说是有关系但不完全有关系,什么叫面目全非啊)以及增加ValueExpr,ValuePhiFunc函数的解释说明。论坛答疑很好,但还是希望上面一些基础的内容随着Readme一起发放。
------------------------------------------
期末排百分之三十左右,总评90,感恩诚哥捞捞!
诚然,科大学生大都以gpa为核心导向,但多年以后回想起来,这也许是你在科大计科上过最好的一门课
课程群人设:群班主任 时不时探头看看群友lab写完了没
先给李老师一个十分,不过按照李老师第一节课从低分评课开始读的风格,我这个评课大概是不会被看到的,那就随便扯点吧。
本学期四个必做lab,第一个是简单的词法分析和语法分析填空,基本上是复制,第二个是手写一点中间代码,并且了解怎么用C++写中间代码的builder。在这俩相对简单的lab之后,第三个是完成自动生成中间代码的程序,就有一定的难度了(个人觉得最难的是迈出第一步,知道大概需要干嘛,这和课堂知识关系颇为密切;而之后复杂的是考虑各种corner case,就依赖助教给出的细致的测试样例了,可以一点点通过样例来想清楚类型转换等问题)。
最值得一提的是lab4,4.1是阅读理解,搞清楚mem2reg优化(也就是一些变量不用丢进存储,直接在寄存器解决)在干什么,最难的就是假期需要在家完成的4.2,GVN。需要通过论文有些模糊的伪代码设计出C++具体实现的办法。个人是在和别人简单讨论的情况下花了两天时间(应该算是非常快了 也是写代码的时候运气好 不然两周de不出bug都很正常),不过真的看到跑出来优化的那一刻也确实非常爽,深感实验设计的巧妙。
四个lab后是一个不算分的选做lab,主要涉及到如何将三地址码转换成真正的汇编码,粗看涉及很多COD的知识(身为这学期组原助教,提醒大家学好组原.jpg),不过由于辅修人的时间安排问题,我没有做,也没去最后的分享会,错过了看各路大仙显神通的机会)
最后说说平时、考试和给分。平时课程还是挺难理解的,不过结合上课讲的和作业写的具体例子,基本还是能知道在干嘛。考试总体来说不容易,也考察比较全面,可能是由于我们这届出于疫情导致期中没了,有期中分散内容大概能好不少。给分目测不错,看其他评课可以验证这个结论,不过考虑到lab,或许应该慎重选择(?(但个人角度还是推荐,毕竟zql的lab实在是没什么意思(笑
在计科乃至科大上过的最好的一门课程, 没有之一.
讲课:继图论许老师和模数陈老师后,终于又见到一个专业课讲课好的老师
作业:作业改的很严,平时分很难拿满(不过应该是自己太菜了)
实验:前三个实验都非常简单,lab4-2 难度很大(刚开始是要求在考试周不远时2个星期内做完,后因同学们匿名开冲导致延期了接近一个月,所以还是很难想象明年这个实验会是什么要求)最后这个实验只有一半人交且不全是满分。另外,实验会查重,所以建议大家不要抄github上的开源代码,后果很严重
助教:助教很负责,应该都是老师实验室的,且老师是诚心想办好这门课的,所以个人感觉助教应该是被push的很负责(🤣🤣🤣🤣
给分:很好
总结:想学知识的话非常推荐,不想学知识或想拿高g可以去隔壁班(因为隔壁班更容易拿高g
李老师会看评课社区,我还是隐藏一些个人信息hhhhh
-------后续--------
《杀手的评课社区风评两极分化》
《叔叔硬整issue不合理加分》
《李诚实验较往年未见新意》
《lc出分后遭评课社区怒批》
《李诚老师貌似撤回了原有总评》
《伟大的李•课程设计之王•ppt之神•亲民之代表•GPA之父•诚抵达他忠诚的评课社区》
整个活,以下正经:
大年三十晚上撤回成绩,今晚重新登入教务系统
貌似全员+2(存疑,大部分+2);并且提高了优秀率(存在84卡绩升到86)
这回大概是原有公式-3/4左右,为了平衡优秀率算是可以接受的降分(比如隔壁计网的给分方式就很可取,而且不会被炎上)
这回跟期望值相近了,李诚老师用实际行动表明了他还是很关注同学们的意见的。
原答案的缺点依旧存在,已经更改为情绪平稳版本。
---------------------
没有qq群 -1
gitlab平台经常上不去(被挖电缆 -1
issue的bonus给得不合理,有个vscode教程还给了0.5的加分 -1
最终调整比例下调近6分并极其偏重期末(此条属于过去式,删除
说的满但做不到心里落差大(此条属于过去式,删除
实验文档不适合初学者的现象仍然存在,希望优化下实验文档,这点其他同学亦有提及 -1
课讲的好,老师的ppt和讲课确实算上是数一数二的了 +2
实验不错,最后完成项目后成就感很强,但是前几年也是一样的东西没什么改变,导致得满分的人特别多 前+1,后-1
最终得分 8
srds平衡下评分(yysy评课不应该年份越新评分占比越大才合理么)
只今年来看给分相比隔壁杀手不堪
课程本身比较辛苦,所以我在分数上不会亏待你们
(x)
叔叔我啊,是真的要挂你们了
当然课是绝对的好课,与隔壁《C魔法进阶》更是天壤之别。不再赘述
套用隔壁评论区的话
想摸鱼去zql,想卷/学东西来lc
句号
老师年前撤回了成绩,现在快开学jwc出了,补个档
大家的总评都升了,有的甚至进了一档,学弟学妹们今后有招对付老师了^_^ (假的这是个陷阱先杀手然后再调上来一点就有一堆人认lc老师干爹)(然而少院且没进档壬表示如此自己相当于是受害者hhh)
然而客观上给分还是平平,不过至少可以看出老师还是对自己的承诺有重视并采取了行动
故不太好意思再保持1分了www [后注:这时候评了两分]
提前doge
lc老师的编译原理和技术是我上过最棒的课,课程本身没有任何缺点,gitlab维护时间长是为了更好的使用体验,交作业前维护也很正常只是我没见过世面,页面进不去是我网络问题,服务器如丝般顺滑,不设QQ群是害怕QQ服务器出问题,实验3人合作高效又快捷,不仅如此助教还积极回复issue,issue奖励丰富又不严,每个实验都有测试脚本体验极好,是所有实验课之鉴,文档排版非常整洁,测试案例十分有效,思考题队友做得也很完美,实验难度适中,体验非常好。llvm找不出错是我眼睛不尖,套娃语法树画不完是我手不熟练,push老失败是我寝室没通校园网。
END
心情平复下来了;也不平什么衡给分了。按给分评分难免有情绪因素。现在这个分是给课程本身的。
一分可能扣在某同学多次因上课吃早餐被老师点人批评,屡教不改,说明老师在课堂纪律上不够有威慑力(雾)
TRUE END
三分给到实验和讲课吧,平心而论,实验够难,质量还可以,老师讲课看得出是用了心的。 好话说完了,接下来就是吐槽了。这门课程的实验难度远远高于平行班,导致你在学这门课时需要使用大量的集中时间,助教甚至给的测评也不完善,有时用助教给出的测评完全通过,最后却只能得到实验一半的分数。考试的话,lc非常喜欢在期末出一些它所谓的实验知识,包括但不限于肉眼看.ll文件。 总而言之,这是一门你所得到的分数与你所付出的努力完全不成正比的课程。你辛辛苦苦地努力了一个学期,最后却得到一个平均下调了7分左右的总评,学期中lc为了拉开差距设置了大量bonus,但是最后又把所有人的成绩下调如此之多,我也只能说呵呵了。 除开成绩,实验的弊病也不想多吐槽了,可能助教都是大牛,不太能理解一些没学过编译人的想法。实验文档不少的地方云里雾里,要完成的任务对于还没接触过的人而言,最开始几个小时完全不知所云,完成一个实验,即使是组队实验,平均花费时间也至少在30个小时以上,也可能是我太弱鸡了。 综上,如果成绩上有照顾我们一些,可能我会给更高一些分数吧。但是这恶心的下调简直是在告诉我:你的努力在我们看来不算什么。害,弱鸡不配有挣扎的权利。
课程
主要是紫书上的内容,优化部分夹带了一点私活(菜鸡并没有看龙书,全靠紫书和PPT),期末的时候发现诚哥的PPT很香
本学期主要讲了词法分析、语法分析、语法制导的翻译、中间代码生成、运行时存储空间的组织和管理、独立于机器的优化、代码生成
作业
平时的Homework主要是紫书课后题,多数都有答案(一部分是龙书课后题,谷歌有答案)
助教作业给分也很好,只要不是错的太离谱都有A/A+
实验
实名反对楼上"萝卜萝卜萝卜"说实验文档不行(ta 貌似删除了),作为一个混了三年的菜鸡,自认为助教给的文档已经很全面了,至少放眼三年多的实验课,也就2020的CG可以与之媲美。不过“文言文”倒是真的有一点,第一遍读可能会云里雾里不知所云,但一般来说读三遍就看懂了,且实验中遇到的问题都能在文档中找到,如果没有,那大可能是没仔细看文档(我在Lab3做类型转换的时候没看到助教给的文档,自己想了很久,后来才发现助教在另一个文档中都提示过了)
请注意我的意思是:我赞同助教文档不便于理解阅读,但我并不赞同助教文档不全面
关于环境,不是很明白为什么觉得不用助教的环境除了问题还需要助教负责的,至少本人自己双系统完全按照助教文档配置的环境完成所有实验没有任何bug
请注意我的意思是:我并不赞同 由于采用非标准实验环境而导致实验问题说实验环境有问题,而若自己环境有问题,应去gitlab提出issue, 我相信助教和老师会帮助你解决的,而不是在评课社区说。
关于接口问题,确实觉得助教封装过度,但这一点应该在Lab5 bonus之前看不出来的,本人除了bouns看了一点llvm源码,改了一下助教的代码,其余都是用助教封装好的库做的,菜鸡确实认为助教封装的代码节约了我很多时间(
而且诚哥班实验设计非常好,循序渐进,不像隔壁班直接做一个编译器出来(
本学期实验内容主要是
(不好意思忘了一个,等晚上补)
前三个工程量比较小,差不多半天+一晚上就可以完工。
第四个实验差不多花了三天两夜,但难度感觉也不算大,认真学相关知识,提前构思好逻辑,分块debug,主要是代码量过大,至于隐藏测试,个人觉得,很多隐藏测试自己其实都应该测得出来的,随便搞个快速排序就差不多了,虽然我由于漏了测!=导致一个bug没测出来。
第五个实验应该是我最肝的实验,因为确实对优化感兴趣,所以就去卷了一下bonus, 做了两个优化,bonus总耗时约七天
关于github参考,请问那些参考的同学,是真的“参考”吗, 如果认为参考就是大段复制粘贴别人的代码,那我无话可说,据我所知,有两组相似度有“96%”, 我们组也适当参考了github, moss查重结果是11%, 没有任何扣分(
总而言之我认为是一个很适合正常学生学习,练习的实验过程, 并且在练习完对知识会有更深的理解(尤其是Pass优化那里)
除此之外,诚哥还会考虑到学生的期中时间、天气因素,突然就延迟ddl(赶ddl星人狂喜)
考试
期中印象里比较简单,但要细心,特别是正则表达式那里(毕竟开卷嘛)
期末。。其实也不难,可惜我SLR没背,直接丢了10分。期末之前诚哥给了个复习PPT,差不多就是画考点了, 范围很稳,而且我一直害怕的翻译也出的很简单。然后全学期实验考了20多分(大概这个分), 好好做实验的话没什么问题。在见到期末卷子之前,我一直很害怕诚哥出大面积背诵内容,鱼的记忆完全背不住( 诚哥出卷真的很考验理解,水准高!其实整张卷子觉得需要记的只有SLR。
给分
作为一个期中不到平均分期末80的人,最后总评91。。。这到底是怎么给的分啊(诚哥,yyds!)
相关:作业几乎都是A/A+,实验是二人组,非队长,CminusF 88/100,Lab5不清楚,但bonus拿到了满分,没有卷任何issue, 上课没有回答
总结
这是第二门我在科大体验极其愉快的理论实验课,同时也是第二门让我觉得只要付出就一定有回报的课,也是我愿意写在cv上的第二个课设。 老师水平高且体恤学生,助教也都是神仙,还要啥自行车呢(
课程:
有点难度,但毕竟不是H班,还是能接受的。词法部分不难,语法最难的地方就是搞清三种LR的构造/区别,还有就是判断/写出上下文无关文法,二义文法(习题集好多难题);语法制导定义/语法制导的翻译(蜜汁中文翻译),两个概念一开始还分不清楚,自上而下/自下而上的继承属性的计算,写出栈操作代码也是有点难度;类型检查,数理逻辑再现。。中间代码生成,就是设计翻译方案来生成代码,涉及短路计算/代码回填;运行时存储分配,学习了之后对实际编程还是挺有用的;代码生成和机器无关的优化,简单介绍基本块和流图,数据流分析,考试时会有计算题
课本还是一如既往的科大风格,难啃,感觉大部分和龙书上差不多,一学期下来大概只上了半本多,后面更难的部分没有上
作业是部分课后习题,答案大部分在配套习题集上有,次数很多,但交了就有分(当然,要认真完成
实验是实现PL0编译器,三人一组,会学习使用git。助教给了一个框架,其后几次实验实现词法、语法、错误检测/功能拓展、代码生成。和隔壁班的略有不同。
考试是两个班老师合出,隔壁班老师喜欢考复杂的指针和PL0相关的,考前可以看看隔壁班老师主页上的题
老师:
科研水平很高,年纪轻轻就是正教授,我等楷模
教学水平,虽然是第一次上课,但真是比一些ppt播放机强多了,课件也很用心在做,但有时候试图解释某个概念/想法时并不是很清楚(可能书上有些词就是不好解释)
上课时还会关心一下同学们,分享一些人生经验/故事,课件末尾也会有名言警句,可以说是很棒了
最后给分也非常好,付出努力的都不会差
助教们:
很负责,有一位助教专门更新网站,每次上传课件都会发邮件通知
其他助教分别负责一次实验,会根据同学们的反馈更新实验要求
开学初就建立了Google的邮件群组,有通知和反馈都会收到邮件,很赞
首先定一个基调吧:学完这门课在编译知识和代码能力方面收获一定很大,但代价是高难度的实验。
先说实验,下面很多人说了lab4-2的GVN实验很难。确实很难,而且2022秋上这门课时网上没有任何前人的代码,但之后不一定了。所以,如果是自己写这个实验,对大多数而言,是十分困难的。
然后说一下考试吧。老师最后给的复习ppt上面的所有题型都能熟练做出来,期末考试的非实验部分基本就没有问题了。期末还会考察曾经做的实验,形式大概是给一个实例,问怎么优化之类的,不会考察你写过的抽象的代码,反而更像是考察算法。
李老师是一位十分优秀的老师,总是和我们在qq群里交流感受,听取我们的建议并根据合适的建议进行课程/实验的调整,也偶尔在qq群里答疑,十分平易近人。助教老师们在答疑方面也一直做的很好。
总之,不怕实验难的同学们,这门课闭眼选;编程能力不太强的同学慎选。
最后,再次感谢李老师和助教们这学期的陪伴!(本来想按照惯例提一点建议的,但就我的体验而言真的提不出建议了,这样就很好)
————————————————————————————————————
放一个Github上的2018年期中试卷,其他的找不到了,2022年考过的忘了,供有需要的同学参考:2018期中考试试题与参考答案.pdf
被实验4.2鲨疯 助教给的文档就是依托答辩
花了大功夫写出来的一坨东西跑不动 因Mac下的Docker环境无法使用gdb无法调试 本地lldb也无法调试 搜索引擎查烂了也没找到解决方法 只能对着几千行代码茫然
先插个眼,希望老师给分能奶一点。
隔壁 zql 已经做好表率了
根据教务处发布的2022届本科毕业生教学质量问卷调查结果,李诚老师荣登2022届本科生最喜欢的教师榜首。
学生评语摘录:
“李诚老师不但是我大三阶段的一门授课老师,更是陪伴与支持我四年的优秀班主任。自李老师担任班主任起就对学生的健康,学业,生活,个人发展等各方面尽职尽责。虽为教员一职,但却毫无刻意疏远与学生间的距离,与学生们保持亦师亦友的良好关系。愿意对学生的疑惑和犹豫出谋划策,无论是否能完成最终目标,总是尽可能的为学生提供信息和经验,令其门下的学生在这四年里受益良多。李诚老师对于学术的认真态度和潜心研究的毅力更是为所有人树立了榜样。让我对学术有了更深刻的见解,即不求及时回报,能够潜心沉淀,极致的自律等等。李老师是我大学美好回忆开始的序章,而在毕业以后也将深深影响我的未来。”
实验难度较大,而且有很多bonus,最适合上这门课的应该是英才班的巨佬们,而且完成了那么多实验最终结果却不尽人意是大部分人难以接受的原因。
其次,李诚老师上课质量确实挺不错的,很多很难以理解的地方都会重复讲解。即使上课时无法理解, 这门课超高质量的ppt在期末复习的时候也起到了很大的作用。(不得不吐槽一下上学期离谱的快1000+页全英文晦涩难懂的OSppt)。
再者,希望对编译方向感兴趣的同学不要因为我们这一年的评价而错过了一门很好的课(这门课是大家公认的计科质量前几的课)。
最后,吐槽一下bonus。希望明年lc老师可以适当调整bonus分数。对于低质量的bonus给0.5或者不给分。高质量的1分之类的。合理的bonus应该是对这门课更深的理解和对实验代码的改进,而不是对着ppt使劲找问题。
一点题外话:这学期开学不久,某老哥发现诚哥有点像陈睿。。。然后大家就开始叫诚哥叔叔
期中85期末83无bonus总评90,自己对于这个成绩还算满意,什么比例我不知道,可以看别人的评价,有拟合的
课程质量相当高(虽然我上课听得少,基本期末速成) 实验个人觉得真的设计的很好。难度考虑到组队后平摊的每个人身上其实也就那样。实验框架我看来很有学习价值 。 gitlab上的bonus和组队的队长加分我建议取消掉。没啥意义 。 另外gitlab服务器确实有问题。线缆日常被挖(虽然不怪叔叔)。无法公网访问确实是个问题,还不如qq群真的。
前面几位同学已经把课程的优缺点分析的差不多了,我就稍微讲一下自己踩过或者看别人踩过的坑的一些解决方案吧,权当做个入坑指南。
课程中使用的工具性质的前置知识:
重要性自上而下依次递减,因为上课的时候这些知识的覆盖率是越往下越大,比如modern C++的特性助教有给一篇介绍http://211.86.152.198:8080/staff/2021fall-compiler_cminus/-/blob/master/Documentations/common/simple_cpp.md-,但是指望课上教你ls, cd, mkdir的用法不太可能。据我观察,相当一部分同学实验做到心态爆炸的原因是Linux太难用了,光是把实验环境折腾出来就已经裂开了。这边强烈建议把前一个学期操作系统课上用过的虚拟机留着,个人经验:一个稳定可靠的Linux环境至少对应20+h的工作量。
注意事项:
给课程的一些建议(不知道老师看不看得到)
虽然以上列举了很多课程的缺点,但是我总体还是推荐李诚老师的课的。其实我个人最看重的一点是实验框架,它本身是一个经过了3年迭代,4000+行modern C++代码,拥有大量文档、测试和完整的构建系统的软件,非常适合拿来入门C++和软件工程。在软工课惨遭阉割的情况下,有一门课可以实际的拿出一个中等规模的软件系统给大家参考实际是一个很好的资源。另外前端部分教的regular expression、递归下降等技能整合进日常工作流还是很香的。
p.s基于一些对实验框架的不满,寒假正在尝试用Rust重写这个项目,目标是支持大部分C89(虽然才写了一个lexer QwQ),如果没有咕的话到时候会发到github上
更新:统计了一下整个实验的规模,仅做参考
整体:8000+行
文档:约2500行
需要完成的部分:约1300行
和其他几个评课差不多,虽然是能够理解分数下调的,但大家都是抱着“期末只占20%”的心态备考的...
好几个学期前就听说了这门编译课非常非常好,想象中的李老师是个“只要同学们学的好,就一定能扛着教务处压力给大家满意的分数”的超人,有点把这门课神化了,以至于出分前完全没想过会下调。
客观地讲,这门课的教案、实验、助教水平和态度都是一流,相信有志于编译且认真做lab5然后参加编译大赛再进李老师实验室最后越走越远的人会很有收获。但就我而言,暂时还是没有直接感受到这门课上李老师相对于别的老师而言能带给我的额外的东西。
想起一件不得不说的事情
期末最后一题考了实验,给了一段实验可能生成的IR代码,要求纠错。以后的同学一定记得要复习实验细节。
我实验都是认真完成的,但可能是因为完成得太早,考试的时候什么都想不起来了。做实验的时候都是靠报错纠的错,考试真的有必要把所有格式细节都记清楚吗...
实验题0分是不是代表我没做实验呢?
撤回后又加了一些分,不知道是调了比例还是直接奶
发评课前没有想过成绩会撤回的,发现撤回后才意识到老师可能看到了评课,有点哈斯噶系
之前忘记说了,李老师本身是个很有人格魅力的人,这种出分后因为学生的反馈而撤回的行为都是其表现。其实从issue加分上就能很明显地看出他很想鼓励学生间形成讨论的氛围。只不过学生们并非都和李老师是一样的人呀。
这门课确实挺好的,对于我这种摸摸人但又想学到真知识的人来说。
先说给分,平时和实验占60%,考试占40%,所以平时好好干就肯定能及格。但没说期中与期末的占比,根据推测,期中估计就占10%,由于大家的分数实在是太高了,这种权重倒也不是说不过去。我期中考56(平均分有76,80分的人数最多),期末70都能3.3,简直不要太爽好吧。
讲课、作业、实验根本挑不出缺点(唯一的缺点大概是实验每年都一样(?)),这门课也可以称为C++集成之课,学会使用了很多C++的容器以及类的虚函数等等。作业和实验通过git提交,这下又学会使用了github(雾)
当然缺点也是有的,为啥gitlab只能使用校园网访问呢??在家就只能用屑wvpn了。。。还有莫名其妙的课堂互动加分(一次加0.5分,最多加5分,结果全被三人承包了),gitlab上含金量一般的分享也能加分,别人在课下指出过的ppt错误被另一个人分享在了gitlab上也能加分,强烈建议以后根据点赞量加分!!!
此外,这学期卷王基本上全跑这个班了(选课时zql风评很差),这个班又有很多加分(卷翻天了),并且隔壁zql班给分实在太好让人觉得很不公平(隔壁班是真的摸,zql这学期好像给了很多4.0,并且隔壁班不卷,有个室友直接认zql做爹了,我却只能喊lc叔叔)
老师讲课很好,实验也很好,就是最后总评计算有点迷惑,之前是说期中期末分别占20,但是最后出分比算出来低了六分,期中比例应该很低,难受😭
虽然就上调了两分,但是诚哥这波操作很舒服,唉呀这加g多是一件美事呀🤤
弱智服务器
学习体验极差
---
TMD期末成绩出了查个分又在这恶心人是吧?100多人查分都能把你这服务器冲烂?
没那个实力就别装那个逼,老老实实用QQ,或者学校的BB平台就行了。非得给学生喂屎是吧?
喂屎其实倒也没啥。最让人反感的是一边喂一边说屎是香的。
对于 https://icourse.club/course/14088/#review-43274的回复 由于超过500字,放在自己这里。
个人观点,缺点一二就是一件事情的体现:傲慢+没有自知之明。有的人真的是觉得自己牛逼上天。嫌人家QQ这个那个,你那个小破服务器有QQ一亿分之一好用?讲个实验文档觉得自己牛的不行。难者不会会者不难的道理都不懂也配来教别人东西?说实话就计算机这个专业我没看到任何东西是有本质性难度的。除了算法设计比较需要发散思维,其他都是跟儿童百科全书一样的。有的人就是自己看了两页百科全书就在别的小朋友面前吹的不可一世了。不知道优越感哪里来的。会用个git就优越了?这东西任何一个智商正常的50岁大爷都能学会好吧。工具性的东西比别人多会一点真的不知道有啥好优越的。另外别把锅推给电缆,自己做的决定又推锅给别人。你投资股票赔了你咋不赖国家呢?真尼玛傲慢到让人恶心。计算机行业的发展靠的是开放共享,靠的就是让傻子也能编程,别说中科大的同学们都不是傻子,就是都是傻子,你也没啥好看不起傻子的。别抱着你那学究式的傲慢来恶心人了。C为什么胜过了LISP?JAVA为什么大行其道?我劝有的人还是自己好好想想吧。另外,你也不配有学究式的傲慢好吧。你教给别人的东西要是你发明的,你写文档说非常简单。我服你,好不好?自己当个二道贩子还牛逼哄哄的。望能看到这段话的话好好想想。Linus竖中指是因为他配,你配吗?配钥匙去吧你。
老师讲得很好,但实验真的太难了(也可能是我太菜),上个学期有一段时间一回宿舍就是做编译实验,严重影响了其他课的学习。此前其他课的实验都是做完就给满分,编译实验做完(通过助教给出的部分测试集)只能得基础分,还要再由助教进行测试来决定最终得分,艰难做完的实验,最后测试挂了一半的感觉实在不好。 推荐对编译感兴趣,想确实学到知识的人选这门课。
看到今年的评价不太多,所以来说说今年课程的主要内容。
今年主要使用 gitlab 发布课程信息、作业、PPT以及问题讨论,地址是 http://210.45.114.30/,据老师和助教的想法是这样比较能避免水群的问题,而且有信息和问题大家能一起讨论。实际体验还不错(除了有些你特别着急的时候可能无法及时得到回复,但是一般 ddl 时间都留的比较够,这种情况一般不太会发生),大多数情况下助教和老师的回复都很及时(这里赞李老师,真的是到目前为止大学见过最负责的老师,会经常看 issue 并及时回复)。
课程主要内容和之前的变化应该不太大,还是那些东西,我基本上就只看了 PPT (大雾,期中考试之前才买了龙书,但考试的时候也没看),PPT 很细致,会把讲的例子的步骤一页一页的呈现,并且还有不同颜色标注重点,真的很赞。
实验内容今年变化比较大,今年是写一个 C- 语言的编译器,使用 LLVM 作为中间层,一共 4 个实验:
具体的实验内容可以参考 gitlab。实验一比较简单,唯一的难点可能是匹配多行注释,这个在网上有很多资料可以参考;实验二还是得吐槽一下,助教的目录结构特别混乱,给的教程质量也不高,导致很多同学把大量的时间花在了 merge 更改和把 lex 和 yacc 结合在一起,而不是实验本身;实验三是综合来说最难的一个实验,但好在实验有比较详细的教程和铺垫,并且是组队实验(ps:选个靠谱的队友!),大家认真合作一下还是能完成的不错的;实验四的写阅读报告其实我感觉也挺难的,这个比较考验查找 LLVM 文档的能力,源码中的有些变量挺迷的,最后也接近考试复习了,于是就口糊了一下(雾)。总之实验的质量还是很高的,如果要提建议的话,建议下次助教之间好好协商一下目录安排、实验内容这类比较影响全局体验的东西上,否则就有可能出现这一个助教觉得上一个助教的东西比较乱于是直接推翻重写了一套的情况(也不是不行,但是感觉不是很连贯,最终也没有把自己写的几个实验结合在一起变成一个真的编译器),不过影响其实不大。
作业:课程前一部分作业布置的不少(我感觉其实还好),有同学反映作业太多之后,老师的作业量立即变少(真的很考虑学生的感受),不过还是涵盖了重点。唯一觉得可能需要改进的一点是作业的批改和正确答案的公布可以再及时一些。
考试内容:期中开卷(但不可以带紫书答案),除了第一题需要将一个很复杂的 NFA 转成 DFA 是真的很麻烦(因为我这类题本身做的比较慢,所以写出来 NFA 之后直接跳了,有些没跳的同学后面的时间不太够了,所以需要自己权衡一下),其他的题都是很正的题,如果熟练的话基本不需要看带的资料;期末考试闭卷,今年没考数据流分析,考的都是重点和老师强调过的知识点,没有偏题怪题,建议听老师期末之前的复习课,课上老师会讲考试范围、重点,帮大家复习一下(PPT 当然也会上传),还考察了实验相关的内容,建议每次实验出分之后好好看一下自己出错的地方。
最后,这门课的体验是真的很好,这应该是大三上我所上的课中听课人数最多的一门课(雾),李老师是真的很负责,水平也很高,助教也很负责。
综上,给这门课点赞~
李诚老师实在是太棒啦!幽默风趣,讲课一流!
但是这门课属实是这学期负担最重的一门课。实验是写一个cminus编译器和llvm代码阅读,总共有6次,难度不小,每一次实验都得花两三天来做。作业其实也不少,总共布置了13次。
最后,李诚老师其实给分很好啊,如果自己成绩不行的话,就扪心自问一下自己学得到底怎么样吧。
更新:看到这门课因为“给分不好”和“实验太难”被打了好几个低分,分降了很多,其实有点难受。(甚至有说是水军的,有点夸张。) 实际上,课程难度和课程质量本身就是矛盾的。这门课课程质量本身很高,这两年实验又做了很多改进(当然难度也增加了),必然会导致一部分想要划水的人无法遂愿,何况编译本来就是比较困难的内容(有人说不做编译器就不用学,那事实上大部分人CS三大课体系结构操作系统编译原理都不用学了,那不如去培训机构3个月速成java好了,有区别吗?)。这门课从一开始口碑就是“难但是好”,只能说选课前大家自己掂量掂量吧。 如果有想学但确实水平有限的学生,可以给老师和助教建议让给分平滑一些。(虽然我印象中这门课评分已经挺平滑的了。)
大学以来上得最舒服的一门课。
李诚老师很年轻,有激情、有理想、有抱负,同时又脚踏实地、认真负责,课上得也很棒。
编译原理应该是本科期间较难的一门课程,但是相比于张昱老师的编译(H)(也是口碑非常好的一门课),给非英才班准备的这门课程总体上难度一般,也只是涉及了编译原理最基础的部分,可以说不存在什么本质上的困难(也可能是李诚老师教得太好了)。
实验设计得很好,循序渐进很有成就感。实验过程中老师和助教也在和我们交流,根据反馈调整实验,不像某些课实验布置后助教就失踪。实验基础要求很简单,但有很多拓展选项,最后评分标准也很清晰,总之给人体验是非常好的。
最后给分也很好,实在是挑不出毛病的一门课。
编译原理为什么好,在于其丰富的理论与工程内涵。
希望作业和考试不要再出现画 LR(1) 分析表的题目了。
科大6个学期收获最大的一门课
实验质量相当高,这也许是计科专业课第一门主要实验以C++为主的课
学期内的实验没有什么选做这种可卷空间,所以好好做拿满也不需要担心会被附加这种东西卷烂
同时学期结束后感兴趣的同学可以参加 建木杯(编译创新比赛)也相当有趣,可以补上很多ir优化的pass实现,并自己手写一遍ast,设计mir等等
slides质量也很好,有很多丰富的例子去理解一些数据流的算法。中文ppt,英文不好的同学也不用担心
lecture也听得很舒服,诚哥人也十分nice(
给分的话,这一届貌似没怎么调分。不过实验作业占比很大(60%左右?),考试也没有很难,虽然还是喜提卡绩😭
如果只是想摆烂,建议左转隔壁zql。如果想要认真学好一些东西,那这门课大概率不会辜负你的期待。
记录一件难绷的事情(不是本人发的):
这个课给我的感觉是挺迷惑的,而且后期也没好好学,成绩也一般。个人感觉给分一般,尤其是结合我上午我自己的调分经历来看,属实是差了一些。
这门课给我的一个很大的收获是,认识到自己不仅菜而且这么菜。
建议去隔壁班。
授课内容为编译原理课本到机器无关优化那一段。
老师人还是不错的,挺有想法也挺努力,PPT做的很认真,也是挺希望同学学的好的。讲课确实有水平,看起来像是比隔壁班讲的好一些。之前也和老师聊过,能看得出来老师也挺上心。
不过……老师所谓“课程改革,重新设计实验”,然后变成了以往实验除了最后一个变难了其他的都不变,而且往年2人做一份实验到今年变成了1人份?迷惑行为。
今年没有往年的 issue 提问,也新建了 QQ 群,这点支持。
上课基本无点名无小测。
取消了期中,期末考试题量巨大,试卷阴间。
总之不太愿意给高分,但是老师也确实比较努力,也是感情复杂的一门课。
爹!
过几天后,决定还是认真写一下评课。
编译是大学目前体验最好的课程,没有之一,从老师到助教到实验的设计,体验都是极佳的。
老师的讲课水平毋庸置疑,但个人比较喜欢摸鱼,以至于期末看到三十多个ppt之后表示非常傻眼。助教水平很高,能设计出这种复杂但不冗余的实验,显然是很有水平的。再到实验,应该是目前我在科大上过的第一门支持本地和线上评测的实验,与世界接轨!我感觉还可以加入类似于CS61A的答案唯一的填空题,每次实验之前,先检查对实验的理解是否正确。可能老师设计实验4.1的本意也是如此,但可能概念的东西还是多了,多一些实际的例子可能更便于理解,比如我在进行4.2时,对copy-statement的理解不正确,导致手动模拟的数据流分析等价类就是错误的,实验时走了很多弯路。
对于我这种考试困难户来说(有的同学就很会考试,我属于非常不会考试),我更乐意这种将课程的一部分重点放在实验上,而不是大家都拿满平时分,完全靠期末考定成绩的模式。
关于考试:
1. 画DFA,根据DFA写文法
2. 根据题目要求写正则表达式
3. LL(1)文法,画分析表,大概吧,不记得了
4. LR还是SLR文法来着,画分析表,记不清了
5. 画递归栈
6. 分析树,标号回填
7. 手算数据流分析,到达定值分析那几个东西,具体考的哪个不记得了
8. 根据代码写汇编,再进行一定程度优化
9. Lab3相关内容,认真写实验是送分
10. Lab4.2相关内容,认真写实验是送分
11. 对课程实验的感想,白送5分,何尝不是件美事
## 可能题目顺序记得有问题,但差不多考察了这么多点
最后说一下可能大多数人更关心的给分问题,作业大概平均八点几分,实验4.2:40/40,前面部分实验扣了一点问答题的分(写的太简略了),期末比平均分高十几分,总评4.0。
遗憾这门很喜欢的课程没有取得更好的成绩,感谢lc老师,感谢助教。
选这门课之前就听师兄说李诚老师有段时间潜心钻研教学,教学水平非常高(据说是因为那段时间科研失意),这学期来上这门课果真如此。课上基本所有难点的方法都会举实例模拟一遍,所以理解起来也不难,上课跟了课的基本考试上90没问题。
作业方面,助教下手有点重,到后面就不敢乱写了qwq,怕平时分被鲨光。
实验分4次计分实验和1次附加实验,附加实验等开春写完再评。4次计分实验是两次前段,一次中端和一次后端。个人感觉第二次实验比较难写,其原因在于第二次实验只给了lightIR的大致概括,而没有给一个详细的成员函数的定义,很多时候你可能需要用某个类的成员函数,然后你得花一定时间打开对应的.hpp文件去找,有时候用的又是继承的成员函数,你可能打开对应的hpp也找不到你想用的函数,这就更花时间了。实验本身是一个只要肯花力气就完全没问题的东西,有cpp和gdb的使用经验做起来非常简单,但是找成员函数体验非常不好,所以-1。希望明年的助教能详细补充IR库的成员信息。
李老师上课前会把使用的PPT发给大家,讲课的时候会有板书辅助理解,老师的PPT做得还是不错的,复习的时候过一遍基本上对内容可以有不错的了解。
老师讲课很认真,听课体验还是挺不错的。
不过老师对于听课这件事的态度比较老派,觉得学生必须到教室,个人觉得这点不算太合理。不过老师好像也只点过两三次,其中应该也就一次把每个人都点了一遍。
整体课堂逻辑基于教材,不过部分内容的顺序有些区别,基本是按照从前端解析到中间代码生成到后端翻译的逻辑走下来,之后还讲了一些优化的方式,最后一周还请了龙芯和华为相关的人来做了讲座。
作业一共七次,是一些课本上的习题,基本都属于考试会考的体型。
实验是这门课的精髓,这学期的实验是完成一个 Cminusf 的编译器,助教提供了框架,lab1 使用 Flex 和 Bison 完成解析,lab2 实现中间代码 LightIR 生成,lab3 完成中间代码到龙芯后端汇编的翻译,lab4 是基于 mem2reg 的优化。每个实验都有公开的测试样例,难当然是难的,但做完之后也能学习到很多。
期中考试开卷,期末考试闭卷,考试全都是大题,没有概念题。
以下是期末题型回忆版:
1.(5) DFA 化简, PPT 原题
2.(10) 正则表达式表示固定电话号码
3.(5) 左递归消除
4.(10) LL 分析表,PPT 原题
5.给出 C 语言代码,(10) 画出注释分析树 (5) 翻译成对应的三地址代码
6.(15) 给出一段三地址代码,画出流图,进行活跃变量分析
7.(10) 给出一段三地址代码,画出 DAG,并化简优化
8.(20) 实验题,考察 lab3,中间代码中 GetElementPtr,Ret 如何翻译成龙芯汇编,以及函数调用时栈 SP 的变化
9.(5) 实验题,考察lab4,mem2reg 中 phi 指令如何翻译
10.(5) 印象最深的实验及感想
不谈别的,单是实验中学习使用的之前从未用过的 C++ 语法等就值得一个 10 分,更何况还学了那么多的编译相关知识。
要问推不推荐选李老师,那当然是推荐的。不过如果你觉得编译没意思,或者觉得自己不需要用这门课来学习 C++ 那也可以考虑隔壁郑老师 (C 魔法不也很有趣嘛)。
这是这学期的课程主页,PPT、作业、实验应该是都发布在上面了:USTC 编译原理和技术 2023
感觉李老师听起来很别扭,可能是叔叔叫多了吧。
以下内容不计入评课:
助教:这门课有九位助教,每次作业都会有讲解,实验框架应该也都是助教负责编写改进的。
给分:期中考试好像总体情况不算好,期末改卷应该是放了水的,最后给分应该是按照给分公式来给的。
一些资料分享:compile.rar
实验考试都很难,给分也一般,作业扣分较多有点名,平时分很难拿高分,最后给分也没调分,但课程内容质量还是可以的,不想卷的还是去别的平行班
确实是计科培养方案里称得上是数一数二的好课
想水的同学不是特别推荐,实验还是挺困难的。(尤其是今年新加的的GVN,看实验说明都有些吃力)但是给分嘎嘎好,我觉得考的不好,GVN也没做,结果总评还可以,高兴坏了
李老师上课蛮有趣,课程不会枯燥;讲得还十分细致,but:上课一旦走神的话可能就跟不上了(痛,太痛了……)助教们也很负责,都会给予最及时的解答,课程体验非常好。本学期无小测,无bonus
平时作业不算特别多,但是实验会很花时间,课程很硬,如果要选建议做好心理准备
本学期由于特殊原因没有期中(故期末题量大);又因为提前放假,所以GVN的ddl推迟了一个多月:这些都是老师开匿名在群里接受了大家的意见的结果。李老师一直是以学生的课程体验为主,这样负责的老师真的是蛮少的……
最后感谢老师和助教的付出!
大三上除了算法课外又遇到的一位神仙老师~
上课:后期没有认真听课,但是复习的时候发现李老师PPT很精炼又不失全面性(本菜鸡到期末复习才真正理解语法分析里LR是在干什么,当时写作业的时候只会无脑跑算法orz)。李老师讲课水平自然是极好的,不局限于理论,也会有大量的例子(无关废话:有点好奇李老师为什么现在临下课的时候不在黑板上写今日要点了,据说往届都是有的~
作业:一共只有7次,基本全是人脑跑算法,助教改的挺严(
实验:本课程最大亮点,从lab3开始难度陡增,lab4.2gvn简直难出天际,断断续续写了一个月,不过最后还是有成就感的~实验或许占比挺大?反正想在这门课上节省时间拿高g的建议直接润去隔壁班,李老师实验难度有种H课的感觉……
考试:疫情原因期中取消,导致期末题量暴涨(10个题一题平均2~3问),考了两个半小时还感觉时间紧张,个人感觉题目分值不太合理,比如描述分析树种标号回填的详细过程这种要写半天,结果才3分;LR语法分析从画dfa(十几个状态)到画出整个分析表一共画了快20min一共10分等等。本弱鸡上来第一题nfa少画一条边直接导致期末减10(估计导致总评降一档吧),不知道考试的时候脑子在想啥www
给分:感觉期末考试改的算比较松了。给分不好不坏,优秀率应该满了?
助教:cqy助教哥哥解答问题十分耐心(好评qwq),不过也有助教解答问题解答到一半直接失踪的……但是总体来说比某算法班助教要好很多了~
总之,这课应该是科大cs本科非H课中最硬核的一门课了能看出李老师在这门课上所付出的心血,虽然以后不准备做系统方向,但是认识李老师很荣幸!希望这课越来越好~
(感觉这门课因为给分这学期被喷得有点惨)我感觉自己的给分还行,如果有同学要算一下可以提供数据:期中87期末87,实验分满分平时作业大部分是A+少部分是A(不知道有没有差别),bonus+2总评94。但是现在成绩又撤回去了可能是太多同学吐槽了。
开学前一天成绩又出了,上调到了95,看来李诚老师和 jwc argue 赢了(不是
---
上课的质量其他评论里已经说得蛮清楚了,这里就不提了,说一些自己碰到的问题。实验还是挺花时间的,实验文档有些地方也不够细(必须吐槽一下相当多的助教设计的 API 都没有任何注释,访问者模式刚开始也简单介绍就带过了(我提了以后助教加了一些描述))。导致有些地方不太能看懂,甚至参考了上个学期的实现才弄明白一些 API 的用法。不过这次实验队友比较给力,我自己的实验分拿满了,但是队友少了组长加分被扣了一点点(复查发现是我写的部分错了,对不住了 orz)。
Lab5 最后因为在考试周比较忙就放弃了,靠 Gitlab 回答问题拿了2分加分。我觉得相当困难的 Lab5 和回答问题加分有相同上限确实不太合适,不过因为平台全在 Gitlab,没有QQ群,靠这样鼓励同学互助的想法还是不错的。有些评论质疑回答问题太简单了,但是要知道这个加分在学期初就已经提出来了,平时大可以用这个简单的方法来拿到分数,马后炮我觉得没有必要。
总的来说一学期学下来还是比较累的(不过主要是因为妮可的课程设计,编译课的一些前置没有单独讲导致编译需要一揽子包了,比如文法),而且看评论大家都好卷啊2333(不知道是不是幸存者偏差)。
相关:今年几乎只看期末成绩和加分,实验必做部分lab1-4全满,期中90+,期末由于考试密集取舍之下没管编译。最后期中几乎不占比,总评爆炸。
吐槽:考前还说会按照之前比例给分,让同学们相信李老师的人品,然后结果就是全看期末?不能理解。同时还给一些莫名奇妙的issue加分,指出显而易见的错误和csdn教程搬运也能加分,每处加总评0.5,流汗黄豆。相比之下,做lab5的同学在期末周花费大量时间最后普遍也就加2-3分。
总的来说李老师讲课不错,整个课程学下来还是有很大收获的。不过,感觉不如zql ... 划水&给分。
那就平衡一下两个班评分吧,不代表实际评价。
-------------------------------------------
同学反馈之后修改了分数,基本都上调一个档,可以可以。
照以往的习惯,上来应该是:“先说重点,给分很好。”
但显然,这门课的总评和平时付出的功力严格正相关。
课堂:
老师每次都会提前到教室准备 ppt 和 bb 在线课堂。讲课逻辑清晰、有节奏(很少犯困)。
ppt 做的很精致,最后复习的时候可以采用 PPT+ 紫书 套餐,真香。
作业:
一周一次,老师推荐使用 markdown 文档撰写作业内容,并强制要求提交在 gitlab 上。
作为妮可计科人,感觉工具链的学习和使用还是很有必要的,在此感谢诚哥督促我练习 git
实验:
作为本学期总评占比最大的部分,实验部分当然需要你付出一定(大量)的精力啦。
前三次实验都比较简单,仔细阅读助教写的实验文档,结合课上讲的理论知识,按照要求一步步来即可。
有的时候可能会看不懂实验文档要求我干什么,此时我就会去逛逛 issue 区找找灵感 + 再读几遍文档 + 和同学讨论一下,实在不行可以自己提 issue(在此感谢助教,有次我提了 issue,十分钟左右就得到了助教的有效回复,助教辛苦了!希望诚哥能给你们加鸡腿~)。
第四次和第五次实验是要求组队完成的。
在这里提醒大家,一两个靠谱的队友很重要!
不过如果队友比较划水的话,你可能会收获更多知识和能力(笑)
小小的建议:希望下次编译组队实验之前,老师能给一些 team work 的建议,给学妹学弟们节省一些进程间通信的开销 2333
最后实验五有额外的选做内容,做了的话加分会直接加在总评上(最多加两分),个人感觉这个加分设置的还可以,因为加的不多,可能也没有那么卷吧(我猜的
考试:
期中考试侧重前三章的算法练习,大家考试之前一定要多写点题目,别像我一样,考后诸葛亮。
期末同样侧重算法练习,另外考察了实验的内容,可怜孩子实验忘了看,过了一个寒假之后都忘得差不多了orz,大家千万不要学这个粗心的学姐啊啊啊啊
------------------------------------------------------------------------------------------------
最后的最后:
编译原理作为计算机系的专业课本来就是一门具有挑战性的学科,在学期内占用的时间多一些也是可以理解的,讲真我大三上学期感觉真的只学了编译和算法,其他科目都是考前速成的 orz
总评给的也是合情合理,真的和你平时的工作量有很大关系。不过如果单论最后成绩横向对比的话,你确实可以在隔壁班更轻松的获得同样的分数,但相对应的,对编译这门课了解的深度也随之减少啦~
所以,想要挑战自己 || 对编译感兴趣 || 想锻炼自己的动手能力 && 文档阅读能力 的同学可以来选!!!
---------------------表白助教!-------------你们值得我尊敬!-----------------
说实话这课考试部分我都是用HIT的网课速成的,大三上期确实有点放松了。
诚哥这门课我想说说实验部分,首先实验设计的都很棒,对于我这种水平非常具有挑战性,在这里感谢我的两位队友兢兢业业与我一起完成了所有实验,并且基本都得到了满分。实验会教你使用cpp,git,markdown,gdb等非常好的工具,就算以后接触不到编译原理,这些东西我想都会在计算机的学习道路上一直陪伴我。但是实验任务量远远大于zql老师班,不过助教还是非常尽心尽责,上次看到这么尽心的助教还是我的光原课和大一还在数学系的时候上的淑芬A1
总体来说真的很不错,给个9分吧!多一分怕骄傲啦
课程体验很好,李老师人很 nice,十分推荐!
课程没有 QQ 群,课程讨论和实验、作业提交都是用自建的 GitLab 平台,大家有问题在上面提 issue,助教和老师很负责,回复的一般都很快。
实验部分改动较大,今年的任务是完成一个 C- 编译器(其他评论有详细说明)。在实验前期有过一些小风波,但是处理的很不错。
最后再补充一下李老师的个人魅力,除去教学、科研这种“本行”不说,老师还人品好、情商高,十分关心同学。就我自己来说,除了课程知识本身,还有很多课程外的收获。还享受过一次私人专车接送服务(我住东区,老师在西区讲完习题课问有没有同学要回东区,我就顺路搭车了 \笑哭)。
(可能唯一的遗憾就是,两场考试,由于自己比较浪考的都不算理想,有点愧对李老师 \囧)
刚刚开始这门课的时候确实觉得可能有一点相性不合(后期也不太合),实验、作业相对另一个班负担重很多,也接触了很多完全没有接触过的东西。但李诚老师值得满分,不只是学术上的导师,人生的导师,生活中的朋友,“我们应该去做一些有挑战的事情”。
总之,如果选了这个班,开头会后悔,中期会后悔,但最后一定会感念遇到诚哥的(个人真实经历……)
如果你想问给分的话,给分是真的好!
其实课程很难,实验也很难。但是说真的,给分不错。平时多去issue区发一些有价值的问题,是巨佬的话可以去回答问题,这可以使得你的总评有直接的提升(也许会有老师给予的无形提分)
怎么说呢,又被1楼说得差不多了,那我就补充几点吧:
1. 李诚老师上课的热情、专业能力、三观等等真的都超好,举个栗子——我认识的一个大佬因为上了这门课去了他的实验室;再举个粒子——老师有次课前几分钟说 :" 我常常在实验室看到,很多同学很晚还在赶报告,或者周末都在实验室。有时候我自己也会这样,但是我后来想明白了,我们首先得做人,该洗澡的时候洗澡,该打球的时候打球,不能因为事情就连最基本的人的需求都不好好处理了”。(记得不太清楚了,反正这么个意思)
2. 美中不足之一:有一些概念解释的时候,老师思路会不太顺畅,还是很难听懂,不过结合实验慢慢就能理解了。
3. 美中不足之二:实验某几个阶段负责的助教不是很认真吧?实验要求写得很简略,然后有些地方会设计错。我们小组写实验时的一大乐趣就是“口嗨喷助教”
第一次写评课决定给这门课。虽然大概这个班级的课程没有隔壁H班那么难,但是我觉得老师的讲课水平也是非常不错的。上课认真的同时不会跑题,下了课会看课程群并且回答群里的问题(这个我觉得能做到的老师大概不多),对待同学们的态度非常随和,但是又不会失去严谨性和严肃性。
实验的话,本学期实验是把一个PL0语言分析器拆成三部分写(PL0语言可以认为是Pascal的简化版),分别是词法分析器,语法分析器,语义分析器。实验是分组完成的,助教会教不熟悉linux的同学如何从零开始使用git。本人也是这学期刚刚学会使用git。感谢组长没有抛弃burden(
给分的话,在下作为科大底层人民,过了,表示很感激。
先给个均分占坑喵
学不完了学不完了😭😭
这门课课程内容,实验设计,教学水平都是很高的,实验难度没有想象的高,倒是平时作业比较折磨。最后给分没有按照开学承诺的比例,但是整体来说还可以接受,推荐想了解编译相关技术的同学选修
李诚老师上课nice大家都夸过了我就不多说了,这门课我收获最多的其实是实验部分。
实验是真的耗时间
本人没有项目经历,没有参加额外的比赛,这门课的实验算是第一次写这种大项目,前两三次的实验室体力活,到再往后的其实刚开始会一筹莫展,想通了会很好写,改bug就是痛并快乐着。学期结束觉得自己确实多会了不少东西。
最后总评3.7,可能是期末考炸了还不自知。(虽然可能考的不好,但是考的都很基础)哦对,没有写过优化的bonus,也没卷过issue,虽然没有感受到诚哥的给分像大家说的那么好,但是这门课真的体验很nice了,不说绝对,至少老师和助教要好过我上过的90%的课,还是十分推荐的。
lc老师人很好,上课体验极佳,内容很充实,强烈推荐喜欢靠听课学习的人选。
作业基本每星期都有吧,都是课上讲过的东西,都搞懂了期末基本无问题。
实验量挺大,难点主要在于搞懂到底要做什么,有什么可以用的。一般做着做着就会了。lab4主要难在测试和团队协作,导致某些极端情况没想到而出错。lab5就是卷王自由发挥的场所了,反正我是没做额外pass。
期末考试占比很少,简单的复习一下就可以了(由于种种原因所以只复习了一天)。理论部分都不难,实验部分因为有涉及到非自己做的部分可能略难,不过也能猜个7788。
总而言之这门课还是很值得选的。多亏了编译实验,让我写CV的时候没科研经历的时候就用这个拿来凑数。