选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:信息科学技术学院 |
课程层次:通修 | 学分:4.0 |
李卫海老师的《计算机程序设计A》是面向能力较强学生的进阶班课程,旨在提供高于普通班水平的编程教育。本课程假设学生有竞赛基础或较强的编程能力,但也有部分同学基础薄弱,因此学习压力较大。课程内容涵盖C语言基础,并在部分内容上有所拓展,帮助学生在程序设计上进行深层次的探索。
课程作业分为四个部分: - A题:基础编程题,一些题目难度较大,需在OJ上提交,包含复杂的测试用例。 - B题:选做内容,涉及难度较高的问题,由同学自愿上台讲解。 - C题:两个大作业选一个完成。C1涉及大数质数判断,需求较高的算法实现能力;C2为nerdle游戏的实现,考验算法和界面设计。 - D题:自由大作业,小组合作或独立完成,常见为软件或工具开发,要求较高的项目开发能力。
通过完成这些作业,学生在工程实践、设计思维和问题解决能力上获得显著提升。但有些作业要求较高,对基础薄弱的学生挑战较大。
李卫海老师及助教团队高效组织课程,提供有针对性且友好的指导。班级氛围活跃,课程中不乏讨论,助教和往届学生对项目和编程问题的讨论都有助于学生间的互相学习。尽管部分学生因入门难度感受到压力,但大多数学生在挑战过程中收获颇丰。
考试相对普通班没有显著差异,但班级不限制优秀率。考试成绩和作业成绩各占总评的50%。多选题部分较难,学生需合理复习并重点训练手写代码能力。给分相对宽裕,优秀率高,李老师在成绩上有所倾斜,帮助学生取得良好的绩点。
总得来说,《计算机程序设计A》进阶班对有一定编程背景或学习意愿强烈的学生是个很好的选择,通过课程学生不仅提升了编程能力,也在团队合作、工程思维上获得了宝贵经验。然而,课程难度较大,选择需谨慎。考前适当复习基础知识点,以及手写代码的训练对取得好成绩十分重要。
这是进阶班(.H2)。一定程度上,这门课的定位导致其学习是辛苦的,但是在这个过程中收获也很大。Why not? 期末卷得分95.72(似乎是rank 1),讲了两次B“题”,平时正常,C2做完,总评给了98(4.3)。
给分是非常不错的,据说别的课堂可能会往回调。我们这个应该不会。
Quote: “这可能是因为进阶班现在开了两个,人数变多,于是有事实上基础更不扎实,或没有接触过竞赛,或对于复杂过程的实现没有足够敏锐度的同学进入班级。”(@erchius)
必须强调的是,C和D两个大作业是非常考验一个人的工程思维的。尤其是如果D题选择了小组合作,(而且还自己是coordinator的情况)。这个过程中,除对个人的编程能力要求挺高外,对于一个复杂任务的分解、前期设计、实施、测试以及中间的checkpoint的设置都是很要技巧的。真正经历了这个过程自然也收获了很多。
本人是3年前(退了)的OI选手,主要C++编程(到现在是7年),C是后来学的(),后来也搞了一些C#,反正前前后后都是带个C字的。
这个班是开学考分进来的,基本同学们都是有相当好的计算机应用基础。在这个学期中,通过怪异Test case的A题,一些B“题”的上台讲解,C题nerdle solver的折磨和D题的放飞自我,再加上各位班上的dalao的耐心讲解和群里的各种聊天,我自己的C/C++的能力,以及对计算机这个学科中其他技术的了解确实提升了不少。
感谢任课老师(李卫海老师) ,以及三位zjgg(“猪脚”):
std::set<std::string> zjgg{ "jzy", "gf", "oybd" }
这半年的认真和努力(zjgg在各种ddl的时候大概率会受到DDoS,我下次再不去赶ddl了),也感谢班上的各位dalao让我看到了程设这门课别样的风景(从大家这里确实学到了很多新东西,也对之前学的知识理解得更好了)。谢谢你们!这是大一上整个学期中始终收获巨大,且上课相当舒适的一门课。这也是(或许吧)在妮可少有的能不那么拼成绩的地方。大一阶段在繁重的学业中遇到这么一门课真的很好。
我也上去讲了两次C的相关知识(实际上嘛,也有点计算机组成原理,硬件这一块的内容),放出ppt给看看:
上面两个pdf比较大,就是讲课的ppt。老师说有一部分内容可能是outdated,也有一些我自己知识上的问题,仅供参考。
我们组是TeX++ Working Group(Git托管在https://git.lug.ustc.edu.cn/texpp),做的大作业就叫做TeX++,定位于现代且灵活的排版系统,下面是一个大饼:
Note: pksq似乎会吞掉“
<std::string>
”这种模版参数。哦,现在不吞了!Many thanks
这个班是程序设计的进阶班,大部分同学是在入学考试的时候取得比较高的成绩而置课进入,其余个别同学是自行选入(一定要慎重!!!)
所以这个课在设计的时候就是默认同学有竞赛基础或者有很强的编程能力。
作业分为A、B、C、D。
A题是小型的编程题,只不过其中的部分放在普通班足以当作大作业了。今年我出的A1比较有意思,但是也没考虑到有的同学基础确实薄弱。A18是一道老题,难度确实有点大(主要在一种情况的处理),希望明年的助教可以改简单一点(不考虑换行)。
B题只有几个很强的同学上台讲了,不是必做。
C题分C1(大质数判断)和C2(nerdle游戏)。大部分同学还是写的C1。基础好的同学有一个月不到就满分的,但是我也看到了有基础不好的同学一步一步自己弄了出来,其实蛮有成就感的。
D题就是自由发挥,每年都会看到很惊艳的作品。
其实这次考试我感觉部分同学发挥的不太理想,主要在考试技巧上。选择题纯是硬功夫,做做往年题基本就有感觉。但是同学们经常由于自己的知识面过广,考虑问题的时候考虑很多,没有做到从“普通班同学的视角做题”。即使最后考虑多的那个选项我们也算对了,但是在时间上浪费了很多(那道多选直接排除两个最水最错的选项就行了)。程序填空和写结果题我们班同学做的很不错(因为实力在这)。编程题我认为很多不该错的地方,比如要求查找就写二分查找。化简分数正常硬除就行了偏用辗转相除法。问题是很多同学还写错了。。。其实这上面浪费了很多的时间,非常不合适。但是也有我们助教的原因,我们可能高估了大家的能力,并没有在这方面进行强调(因为每年进阶班都是不会有考试习题课的,今年我的习题课也只focus on了我认为大家会薄弱的选择)。
这个班是不限优秀率的,但是不代表你不做作业考试考的还不到普通班的挂科线还不会挂科。所以对于选入本班的同学或者基础薄弱只是入学考超常发挥/爆卷入学考往年题的同学一定要慎重慎重再慎重!因为在普通班可能会学的很舒适,在进阶班会被作业暴捶+全班大部分都会的知识点讲的很快+有限时间的课堂却讲了很多深入的知识。最后期末复习的时候可能还需要肝DDL导致不如入学的时候按部就班跟普通班。
自吹自擂:本班课堂活跃,老师助教友善。jzy助教为了一门课搭建一个OJ,此处必须膜!
感谢李老师,这个课程给了我很不错的带助教体验。
我和jzy、gf是当年2021秋进阶班李老师的学生,我们也在当时那个班上认识之后一起带2023年的助教,合作得十分愉快!(周常上机实验后吃夜宵)
感谢同学们的配合,也收获了很多友情。
也感谢自己在这次助教经历中提升了很多包括沟通的能力之类的~
最后附上一个大家的共同回忆(嘿嘿嘿):
1.18晚更新
看了某位老师的逆天给分 建议想要绩点的25届xdx还是挑好普通班去狠狠炸鱼
1.劝退环节
本班是进阶班 优势在于讨论氛围会更好(注意不是上课氛围 大多数同学都有很好的语言基础 所以上课互动其实并不多 但你如果没有基础 可以坐前排体会小班教学/笑)然而在这么一个高手云集的地方 你的光芒会被一群省奖or牌佬掩盖 所以会有一定概率出现同样的成绩在平行班能赋满而在H班不行(数据来源于pksq&身边 某些平行班的老师实在“过于”奶了)
2.成绩构成 (50%平时+50%期末)
2.1 平时作业
intro:难度会高于平行班 想要拿满分(不调分的情况下)显然是具有一定挑战性的
共分为ABCD四档:
A是十五道基础题 在OJ上完成(OJ评测感觉有点小问题 如果实在实在评测不过 记得及时找助教!);
B是选做 讲题可以加分;
C是给定主题的大作业 C1 C2只需选一题完成 C1不太清楚是什么了 C2是nerdle的实现以及本地/线上的解题;
D是自由大作业 建议尽早开始确定主题 此外如果选择合作完成 尽量选择与自己水平差不多而且知根知底的同学组队 这样会更舒服 减少磨合花费的精力;
P.S. 一定要注意截止时间!!!本人理所当然地以为C题截止时间晚于A题 没想到居然不是 导致C2的线上解题没来得及完成(ToT)
2.2 期末考试
全年级统考同份卷子 但H班并不能建立对平行班的绝对优势 有高分也有低分 感觉方差相当恐怖(顺便吐槽一句 今年考的这张简直烂透了 盲目加题量不加质量😑
3.课堂内容
考虑到相当一部分的同学基础相对薄弱 老师上课仍是讲C语言基础 相比平行班拔高的地方应该是大家的B题交流环节 理解有一定难度 但同时也会伴随相当多的收获。
4.给分情况
苯人期末90,平时还有点小扣分,mmt老师还是给我小捞了一手。伟大无需多言!
第二年带助教(可能应该也是最后一年了
先罪己:我的问题,今年确实没有去年用心和尽力了(花时间tla去了x
今年还拉了漂亮lwjj来一起当助教,可惜好像lwjj和进阶班氛围不是很融合,所以我个人感觉也没有达到预想的把lwjj捧成“网红”的效果,自然班级的凝聚力程度就下降了,应该也达到不了21级那时的效果。
今年分了两个进阶班,进阶班平均水平自然就被拉下来了,有好几个同学做C1和C2都遇到不少麻烦然后摆烂了,看的还是挺难受的,毕竟教学目的是为了让同学们学东西,那有的人摆烂了自然就学不到啥...
今年还有一个比较大的改动是,想着不让大家卷美工,把C2明确指出图形界面和字符界面地位等价,本意是想让大家更好去设计和钻研算法的。为此,我们为了保证工作量不要太小也为了想让有的同学们不要抱着大腿混,所以又从之前的组队完成改为了单人完成。
组数多了倒是出现了不少问题,一是答辩的时间大大增加了,二是我们评分的工作量也翻了个倍,三是同学们的工作量也增加了,四是能力不太强基础比较薄弱的同学这回连大腿都没得抱了。本来就分了两个进阶班,人均水平就被“稀释”了,还要独立完成,对极个别同学来说可能确实困难太大了,他们摆烂也有我们的问题在内。
当然,大部分同学的大作业都做的很好,事实上我也没想到有人单人就能真的做出游戏内的联机和通信,没想到有人单人就能搞个这么好的物理引擎,还有不少挺有特色和富有想法的游戏设计,有些宣传展示视频也剪的很不错,印象深的有不少这里就不列举了。
当然后来有些同学A题交的代码一模一样,有些同学C1做的时灵时不灵,有几个同学临时改为了二人组队,还有的同学对自己做出来的东西支支吾吾说不出来是啥,这些我们都尽量睁一只眼闭一只眼过去了。
加上2022后半年的疫情变动太大了,动不动就封,最后又突然放开了,上课一下网课一下又恢复线下,高新区还被封过一次,这政策反复抽插下来加之学期又短,学生上课又上的也没啥学习的感觉很难进入状态, 学期末大家又不可避免地陆陆续续阳,最后线上答辩效果也就那样。
但是,期末卷面倒是居然考得不错(难道是寒假大家都有在家好好复习?我不信。至少优秀率我看了一下应该82%往上走
还要在这里感谢我的科大APP对往年卷和一些相关资料的整理和提供,感谢2021级那届进阶班的同学有帮忙答疑,我看群消息少了,没有做到去年那样秒回,倒是21级那几个混进群的弟弟答疑得很及时,还答了一些我都不会的硬核问题。今年的心态比起去年更老了,看着他们水平高了,我也甚是欣慰。
期末考的话,如果最后卷子没做完,那可能会很亏。因为这帮进阶班的孩子最后的写程序大题共40分的,基本上做了就能拿满分,有些也就小错误扣一两分。至于丢分重灾区多选题,本身就有不少题是让助教做甚至让老师做也很难说做全对的,我改卷的时候改到一整个班都没有一个多选满分的,也看到有的同学甚至6道题只对了一道题。
多选题出的太玄乎,我觉得不用太在意,我们的主要目标还是学习知识,不是应付考试,那些太偏的知识点不会也就罢了,考试的这几分也不需要太关心。(倒是可以给后来人一些忠告,别在前面太纠结而导致花费太多时间了)
总体来看,还是不错的,毕竟人均水平低了,优秀率貌似还高了嘛。
如果你想对课程有更多更细致的了解,还是欢迎看去年我的评课,
今年最后的分还没出,暂时先空着,回头再补
——————————————分割线——————————————
出分了,可能是卷改的比较松,大家卷面比较高,今年调分力度不佳,平时分基本上49+,猜测公式基本是五五开+向上进位。
因此,大概大约可能应该或许是卷面89分是4.3线,69分是3.7线,79分是4.0线。
(88就是94,但是88.5好像就可以95了)
最后给个卷面分布,全班共51人,90分以上12人(23.53%),88.5分以上18人(35.29%),80分以上37人(72.55%),70分以上45人(88.23%)
第一次带助教,有功有过吧(
可能是因为评课社区的评论凸显了给分好、能学到东西,但没有展示出在没有基础时这个班实际上面临的压力很大;
而传统的劝退环节,有不少同学来询问助教的意见,而这个过程中我的态度以鼓励为主(我确实没想到有这么艰难),因此咨询我的一部分同学最终的结果是被我忽悠着痛苦地学习。
当然了你肯花时间,肯自己学的话,你的收获一定很大,而且你收获的是别的班型这个期间难以收获的实践经验,但是这个过程确实可能很折磨。
因此我希望在这次评分中,将课程难度这一点凸显出来。
每年的作业变化趋势都在希望减轻大家的负担(也可能是在希望减轻大家的痛苦)。
这可能是因为进阶班现在开了两个,人数变多,于是有事实上基础更不扎实,或没有接触过竞赛,或对于复杂过程的实现没有足够敏锐度的同学进入班级。
今年的作业改成四个部分:
总得来说,很成功地完成了作业减负的任务,但作为进阶班,愿意去深挖的同学变少是否也代表着这个班存在的意义没有以往大了呢;
另外,今年作业采取统一ddl,虽然老师是希望给大家每个问题都有更充裕的时间,但确实产生了一些让大家感觉不到压力的效果……
助教手搓的,除了校园网隔离和身份验证没有任何安全防护(假设你们不会在oj跑恶意代码)的非常裸的oj。提供monaco editor作为编辑工具(本意是希望大家可以在本地写完提交后快速地进行一些小修小补,但实际产生的效果更近似于一个对大家必须用校园网才能连接oj的限制,加上网页端的一些固有问题,monaco editor实际上给大家带来的体验比起vscode还是差了非常非常多……)。
来说说为什么这么选择:由于在校园网的封闭环境内,加上认为不会有同学离谱到在可提交时间段内跑来攻击oj,加上有不少新接触这些程序设计(或者说这些有巨大坑的程序设计)的同学,我觉得在提交后能迅速得到一个反馈是对于这些同学们来说非常重要的一点。相比用其它oj必然存在的排队问题,以及docker给我留下了始终慢得离谱的印象(好像后来有人说docker的速度其实也是可以接受的),我觉得我们牺牲的是一个可以接受的安全风险,但换来了极高的体验提升。
存在的几个问题是:
主要的问题根源可能是我对于oj加入了太多个人偏好的选择
本来打算C题要求用git提交,并且指定CI进行评测,结果gitlug不能连接校园网应用
更新:原来是我n8n环境变量没设置好,谢罪了
对下一届用git重拳出击
还想写关于一个啥来着,忘了,想起来再补
杂项:
本来预期lwjj会再带一年助教来着,结果lwjj说是看错了上机时间以为冲突,就去了另一个班(
进阶班的小透明一枚。
先说总评:无论你渴望寄点,还是希望真的学到一些东西,都很推荐。
我最初学习编程纯粹是为了游戏制作,当时为了制作游戏去学习了 Unity 和 C#,后来慢慢接触的 C 语言和 Python。
高中的时候陆陆续续有做些小项目,不过都中途夭折了。后来因为学业繁重,游戏制作的事情也就放到了一边。
因此,我并没有什么竞赛基础。关于进阶班的事情,我也是通过新生广场的讨论才了解的。
当时看到了往年几届的 C2 项目视频,看到大佬们做出的五花八门的软件和游戏,不禁有所触动。
于是那个埋在心里的游戏开发的想法又一次生根发芽,我也通过入学考试来到了进阶班。
However,刚进来的时候入了群就发觉不太对:群里的似乎都是各路信竞神仙,有互相交流技术的(我根本听不懂 QAQ),也有互相膜的,气氛很热闹,大家都很积极。后来群号好像流出去了,还进来了许多往届的大佬,就更热闹了。不过我还是觉得自己似乎来错了地方,有点后悔当初的这个决定。
Anyway,最后还是留下来了,也度过了一段难忘的时光。
下面先说课程本身。进阶班的课程比起其它班级,教的知识点应该是大致相同的,不过有的内容会有所拓展(但不会考)。
课件很棒,知识点覆盖很到位,在末尾还有一些程序员段子😂,毛毛兔老师也很可爱,经常和我们一起水群,讨论一些技术性的问题。
我本人正如开篇所说的是个小透明。我没怎么在群里发过言,但群里大家的每一句讨论我都会去看。虽然有很多是我听不懂的知识,但还是很喜欢这样的氛围。
助教 csgg 和 lwjj 很负责,也很体贴,会帮我们解答很多问题,也会和我们一起水群(bushi)。后来在 C2 项目的报告上面,助教都很耐心,能好多天连着几个小时听我们报告自己的项目(我待了几次就待不下去了,超时比较严重),这里再一次向你们致敬!
(出分前 lwjj 还帮我们调整心态,❤了)
再来说作业。A 组题虽然涉及内容基础,但是 csgg 还是用他 玄妙的、令人拍案叫绝的,甚至有些 unfathomable 的输入,一次次把我上交的程序干碎(当然也有我太久没接触 C 语言的缘故),让我最印象深刻的就是某一个晚上,我反复上交程序,补了这个 bug,又出了另一个 bug,实在是哭笑不得。(那时 csgg 就叮嘱我要细心,到最后的考试我还是没做到,对不起)
(每天早上起来第一件事就是看反馈和修 bug,乐)
然后就是 C1。听说和上届一样也是大数,通过 Miller Rabin 算法生成1024位质数,然后用它们构造一个更大的数。同时对生成的时间有要求,需要一定程度的优化。
本质是考察大数和质数判断。但是刚听到这个作业的时候我人是傻的——我连这算法是个啥都不知道。
于是就是连续几天的恶补,搜尽 CSDN、博客园,学习(x,实际是抄)Miller Rabin、快速幂、大数四则等等算法。
经过筛选才出来的网站,方便 reference(抄)
由于我想空出更多时间给 C2,就开始的比较早。在大概 10 月初的时候基本完成了 C1,但在完成之前的那一个月每天查资料、修 bug、跑程序的日子我永远不会忘。
10 月初 C2 立项,到 11 月底差不多基本完工,用的素材有自己以前项目的废弃素材,也有后来自己脑袋一拍出稿立马画的素材。我原先给 C2 定下了很宏大的目标,但到后来愈发发现自己的能力和理想不匹配(这大概也是最遗憾的一件事情),于是不断删改删改,准备完工了又听说 AI 方面要写的好一些,于是又临时加入一些逻辑,最终修修补补也算是完成了。
然后为了写报告、剪视频又去学了 Latex,玩了玩剪辑。。
最后就是考试。进阶班的试卷和其他同学没有差别,不过它不会限制优秀率。
这次的选择题数量减少,多选题怪得离谱,后面的题变多了,还考了之前没遇到过的流程图(这又是我的锅,我明知道考点会考流程图和伪代码但是抱着侥幸心理)。而且手写代码的不便也使得速度大大降低,没有时间检查。也正因为这些,我最后还是没能记住 csgg 的叮嘱做到细心(我是班里唯一一个第一道编程题写错的,现在想想估计是让我求 min 我求了 max。。)
因此,复习考试一定要完整过一遍考点,而且一定要练习手写代码!!!
所幸最后给捞到了 4.0,在这里再给助教和老师磕个头。不过在 4.3 和 4.0 横行的进阶班,这也只是个很普通的成绩了。
但是,进阶班圆了我几年来游戏开发的梦,还让我学到了不少东西。和它们相比,寄点又算得了什么呢?
(第一次写评论,如有不妥,敬请谅解)
懒得复习数分,来简要评价一下。
开学考靠着OI基础进了进阶班,没多久就发现自己也只是会一点算法,在编程上比不过班里的很多人。不过好在这个班并没有优秀率限制,也不需要卷,尽自己能力把作业做好,考试再随便复习一下,应该就能取得不错的成绩了。不过想要做好作业,大概还是需要花费很多时间和精力的,C2和D的工作量都并不小。
感觉这个班的意义就在于挑战自己、开阔眼界、结识大佬。只要认真做作业,应该还是能有所收获的。至少对我来说,这些收获似乎比GPA更重要吧。
其他能说的东西别的评价都说完了,我也不会说得比他们更好。最后希望进阶班能越办越好吧。
PS:关于“作业多少”这一栏,并不是很认同目前的“很少”啊😡。选个“超多”拉一下平均值😡
出分了,4.3!
原本我以为,这个进阶班在这个班上是学不到什么东西的,但实际上我错了。今年新的大作业C2 nerdle,如果采用网络交互形式的话,难度是不亚于hackergame中档题的。很可惜我为了分数只能重写一遍C1了。
作业采用OJ是极好的。虽然OJ是助教手搓的,偶尔也会有回档把AC卡没的现象,但是用起来也没有那么差劲。唯一的缺点是助教想设坑结果把数据造错了,导致大家都很不满,最后才改回来。
关于自己上台讲B题,如果有OI基础强烈建议去讲点东西:可以很好地防止期末考试爆炸(笑)
D题(小游戏)大部分上台演示的时候是画大饼,感觉真的上台做演示的人并不多。
期末考试确实是一言难尽,喜欢考很多基本语法概念,包括运算优先级之类的东西。编程题要注意一些细节:
+ fopen一定要搭配fclose!
+ malloc声明了空间一定要free掉!
今年考了流程图,也需要将流程图的概念背一背。
给分超奶!可能是 期末/2 +52 并上取整 本人期末74.5→4.0
上课和上机都不用去也好评!
曾经是个 OI 选手,于是就被分到了进阶班。
本学期分数构成:A组15%+C1 15%+C2 15%+参与分5%(白送)+期末50%
A组一共16题,难度较低,虽然有些题莫名dirt,我大概交了两三版。
B组是一些OI题,不算分,同学自愿上去讲题,由于我比较懒(bai),没怎么参与。
C1是生成大素数,问了上一届的同学说写出来基本就能过,于是在图书馆花了一晚上时间按十进制写了一版,调了调发现好像有点慢。由于ddl尚早就放在那里没管,后来群里讨论的时候看到一个优化的思路(小素数预先检验),加上之后就快了不少。(虽然给csgg第一次看的时候脸黑2min没跑出来,又跑了一次就30s了)
C2是自己做个游戏,我自己学习了一下unity和C#的用法,大概做了一周时间,主要时间用在和unity界面斗智斗勇,快要完成的时候还因为误操作导致很多操作被清空了,最后只能手工重做了一遍。
期末考试前带着普通班的室友复习,我主要看了看malloc的用法和链表(此前都是用数组模拟的)。
期末考试难度不大,但是手写代码属实**,写了巨大多代码;多选题有点迷惑,基本凭感觉写。最后期末卷面89.5总评95,喜提4.3。
因为羟基的原因以后跟计算机科学大概是没缘分了,能在这个课堂学习一些未曾接触过的知识已经很开心了,谢谢李老师和两位助教一个学期的陪伴,大家都有光明的未来(雾
感觉进阶班的意义在于让各位去学一点有用的东西,而不是依靠自己多年的积累去炸鱼,不论对OIer还是小白都是好事。