算法旅人
2022年1月21日
进入寒假,终于可以休养生息一会了。虽然还有托福,SRTP, MCM美赛在等着我。220也出分了,赞美Pavel,被打捞了(感恩)于此简单总结一下这个学期经过的苦,吃过的亏。
首先对ECE220这门课进行打分的话,我想可以评 8/10分,他的确不愧于UIUC 计算机第一的实力,与ECE110,120 链接,真正做到了“从零开始学计算机”,将计算机系统掀开了一角,供我们窥伺这庞大精巧神奇的人造世界。
一,Machine Problem
一个学期下来,我们在高压下学习了:
【汇编(LC-3丐版)+ C语言(小大) +CPP(类的基础)】
内容可以说是包罗万象了,大量的代码训练(MP)让我们体会到未来做程序开放的辛酸与困难,但算法运行成功的那个瞬间的快乐也令人无法忘怀。
对了,这门课证明了,想要学好计算机,还是需要一台性能好的电脑的。更多的内存和CPU核数可以给虚拟机预留更多空间,免得因为大型程序的错误设计导致内存溢出而崩机。
折磨人的MP们
其实很遗憾自己这个学期做的不好的一点:没有提前一周写MP,早期的决策失误导致每次都需要肝DDL,心里紧张也没法好好写代码。看到这篇文章的学弟学妹一定要早点写啊,那剩下来的时间就可以用来更充分的自学和探索.
MP的指导我已经写在之前的文章了,详情可以看这个专栏,此处不再赘述。不过综合而言,其实大部分MP的目的都只是翻译Lumetta这个 “需求经理”的要求:
Let us translate human language into machine's language, which is the process we call it programming.
二,编程知识学习的思考:
我认为ECE220并不完美,其一在于syllabus过多的知识范围导致教授被迫用很快的速度教授大量的知识,而我们也被迫在短时间内吸收他们(比方说,一周速成C++,半个学期把本部的C小程C大程学了)确实有厉害的人可以做到完全吸收他们,但实际上大部分人只能勉强渡过MP。
这就引出了第二个关键问题:lecture lacks a strong relationship between MP and Exam.
我很赞赏ECE120的模式,紧密的课程之后有对应的每周homework 以及discussion. 讨论课上TA们可以再带领我们深入学习计算机基础原理。这就为困难的MP做好了准备。但是220就极度糟糕了:缺失的讨论课松懈了我们和TA,大部分人都不参加lecture 和lab, 互相摆烂的行为激化了学生和TA以及prof之间的矛盾(主要问题在MP的批改似乎因为自动化软件损坏,拖延极其严重)
结果就是,我们大部分人都在黑暗中抱团行走,勉强渡过MP难关。最后大部分人的原始分数几乎都是D 和E,这就极其离谱了。。。一门课可以难,但不应该难在不科学的课程设置方面。强烈建议参考UIUC,参考ECE120和CS101
无论如何,我还是很开心能学到很多有趣的计算机知识,implement many interesting cs skills
但是remake?饶了我吧()
三,Github版本管理
学习ECE220的过程不单是学习语言的过程,更是跟GITHUB, SHELL 做斗争的问题。在这门课,我们第一次正式接触了现代的文件管理机制和命令行管理模式。如果有不规范的文件传输,比如拖拽上传了代码文件,就会生成大量的bug和不匹配问题,需要debug。
其实解决问题的方法除了问TA和老师,更好的是上BING搜索(因为实际上很多细小的bug,TA和教授都是不清楚的, 他们自己也要搜索)往往你在优快云 or STACKOVERFLOW上能看到很妙的解决方案以及原理说明,学好版本管理是成熟的程序员的第一步
Here is some useful and unforgetful CML code:
//QUALITY TRIPLE COMBINATION
git fetch release
git merge release/master -m "<some comment>"
git push origin master
//Verify the network
export GIT_SSL_NO_VERIFY=1
//Kill local github, making it nearest save point
//要注意,shell 会自动报错,但是不完全能让你明白根源所在的时候,这个方法是最暴力但最好用的
//使用前保存好你的代码文件到安全的位置(不在本地github里面)
git reset --hard "FETCH_HEAD"
//Commit homework
git status
git add <your_work>
#Maybe for several times
git commit -a -m "<some comment>"
git push origin master
祝屏幕前的朋友,算法无bug,编译无error ~