个人经历
记录下个人在 USTC CS 的学习经历,感觉还蛮好玩的。
DISCLAIMER:
本文采取
open("file.txt", "a")
方式增量更新,内容可能不具备时效性和准确性。| ω・´)
大一
2020.9 梦开始的地方。
一秋
这个阶段可能没啥好说的,C 语言入门。
第一次接触编程,上课听的还是蛮认真的。
入门阶段很推荐上 洛谷 做点题,从最简单的开始做起,做的时候注意命名风格和代码质量,把基础搞好。
这一年程序设计的助教很不错,出的一些简单算法题很有味道,一上来一些基本的编程实践还是很有用的。
寒假
摸了,有点后悔。
但是一想到 20 年的暑假因为疫情只有一个月(碎碎念)又觉得快乐一个寒假也挺好。
一春
程序设计二,这个时候大概还没有对计算机整体以及一些互联网技术有所认知吧,还是在抱着 C++ 粗粗的黑框框玩(不是)。
这门课马老师对图形化的执念很深,我大作业做的是一个图形化的数独,算是第一次接触到了 OOP 的概念(当然现在已经掉进别的语言各种接口各种函数式的坑里了 xd)。
这个阶段培养一些抽象的概念还是很好的,由于马老师对图形化的执念我也好奇各种各样的 GUI 界面到底是咋做的,虽然大作业用了 QT,但这似乎并不是一个良好有效的解决 GUI 界面的方案,于是就入了前端的深坑。
一开始是凭着兴趣看小甲鱼的 html+css 视频,不得不说他讲课确实很好玩,配合花里胡哨的 html+css 界面效果也很能吸引人。
接着就是 js 语言,这是一门脚本语言,但对于当时只学过 C 语言的我来说对脚本语言以及基本的一些概念(比如环境)都没有了解,甚至在想 js 的 main 函数是什么。
然后就是前端实践,不得不说前端工程化做的很良好,这个阶段我接触了 linux 和 git, nodejs(因为在用 hexo 搭一个博客,各种改主题玩),算是对啥事一个工程有了一个比较直观的理解。
暑假
这个暑假就有点摸了,看了 oiwiki,了解了一些基本的数据结构和算法。不得不说这玩意更像一本工具书而不是教科书,单纯看确实有点枯燥。
还有就是 Missing Semester of CS Education,被誉为神课,不过中文翻译不全,但是总归是要接触英语课的,对着字幕嗯啃也算是能加深对 Linux 和编程的认识。
大二
二秋
这个时候计科专业课基本铺开了,妮可计科当然是体系结构特别扎实,这个学期课内上的是 ICS, 相比别的学校上 CSAPP, 妮可上 Introduction to Computing Systems, 这书内容比较少,只详细介绍了一个简单的 ISA: LC-3,课程内容基本是体系结构子集,但也算是能让人对计算机有一个底层的认识,因为助教没搞 autograder,自己用 js 写了个本地的 autograder 并开源,算是做了点微小的贡献。
此外模数也是门底层的课,数电实验还是挺有意思的,最后写了个小 CPU。
课内的数据结构比较无聊,没有强调抽象的概念,真是上成了一门文科课,不过自己利用之前的 js 积累,和网上找的一个 C++ 服务器框架,写了一个前后端分离的小 订票 web app,感觉还是挺有意思的,另外一个 哈夫曼压缩 的实验也能锻炼 OOP 能力。
这学期收获最大的应该是把 CS61A 看完了,正儿八经看完的第一个英文课,真的是神课,连带着我到现在都对 SICP 这书有一种蜜汁崇拜,这课讲函数式和各种抽象的编程范式讲的很好,建议早看,大一暑假是一个很合适的时间,看完也算是对 Python 入门了(我觉得比看 python 入门网课要强不少)。
寒假
接触了正儿八经的项目开发,在前端技术栈上,用熟了原生 js 后也该考虑用框架了。帮助 Verilog OJ (我校的一个项目) 做了个评论系统,用的 Vue2,挺顺手。
于此同时也接触了一些后端框架,Django, fastapi 啥的。
二春
硬核的一个学期,CODH 和 OSH。
不过 CSAPP 这门课能很好的为组成原理和操作系统铺垫,开学闲来无事也把这书和实验都搞的差不多了,实验收获还是挺大的。
OS 推荐了 Rust, 不得不说 trait 的概念和一些函数式的风格还是挺漂亮的,推荐通过 CS110L 学习,顺便能了解 OS 层带来的开发中的一些安全问题。
组成原理算是继续加深对计算机硬件的认识,实验继续造 CPU,很酸爽,自己也配熟了一套开发工具链。
此外就是初步接触机器学习,吴恩达老师的网课 + 西瓜书,这两个配合食用感觉还可以。
更新:春季太摸了,西瓜书和网课是一点没看下去。
暑假
原神真是太好玩了。
继续摸前端,大概理解了 node, esm, cjs 和前端的一些生态,比如一个网页的打包构建流程,给自己的博客写了个 Vite 的热更新插件。
顺便为自己的几个项目补上了 CI/CD。
每天刷一道 Leetcode,感觉是心理安慰。
大三
三秋
这学期说起来只上了三个多月的课就因为疫情回家了。最后期末考试都预计挪到下学期开学了,很仓促的一个学期。
这学期必修课编译原理,算法,计算机网络。
编译原理理论内容和实践内容都很全面,作业和考试对应理论内容(当然作业也有一些实际的 C 语言代码的编译相关问题),实验实践味道很浓,是上大学以来课内实验第一个很好地利用了 cmake 的(但是测试脚本还是 python,其实应该可以和 ctest 集成一下)。
期中考试考烂了,期末还没考,感觉是得寒假好好复习下了,哭。
算法课主要是一些经典算法的伪代码表示,好好理解下还是挺有意思的。不过这像是一门应该放在大二的课,前置知识只有数据结构。本人也没打过 OI,尽力而为了。
计网?文科,真不熟。
专业选修课一开始选了一门机器学习概论后来退课了。一方面是这课的实验任务很重,另一方面也是 ML lab2 的时候我在爽玩 hackergame 导致错过 ddl。这也导致下学期必须选更多的专业选修补学分了,哭哭。
此外还选了门自由选修:网络安全基础及应用。作为一门概论课感觉内容挺全面的,虽然我没怎么听过课。这课的祖传选做 ctf 题目还是挺好玩的。
和郑学长,吴同学一起申了个大创项目。不过这个 DDL 比较长,慢慢做了。
申了个 ICS 助教。课程网站 不出意外应该会一直保留?把去年自己写的 LC-3 评测(基于开源的 LC-3 模拟器)移植了一下,用 TypeScript 写的调用接口(今年我带助教的班的评测也是基于这个 TS+JS 脚本的,评测脚本是许助教写的),这个网站还让我熟悉了一下 SSG。
寒假希望多学点东西,找找专业方向吧。这个学期其实过的有点迷茫。
寒假
更新于 2023 年 11 月 2 日。
拖了很久才更,已经快忘了这个主页了,更是完全忘了寒假干了啥了。似乎是由于疫情的原因放松了一整个寒假(一直宅在家几乎没出过门),翻了下 commit 记录只看到自己写完了编译原理大作业(占坑:比较 zy 班和 lc 班课程内容的不同,四上去带了 lc 班助教)和解决了博客的 markdown 图片相对路径问题。第一次阳的时候症状还是挺猛烈的,后面再发烧也没测过抗原和核酸了,当感冒处理。不知道有没有二阳过。
三春
发生了很多有意思事情的学期!感觉整个人活过来了 www
其实应该说是很累的一个学期,带了 OSH 助教,申请了 MSRA 项目,肝大创,选了七门专业课(赶着把学分修完):程序语言设计与程序分析,形式化方法导引,人工智能基础,数据库系统及应用,区块链技术与应用,信息安全导论和计算机体系结构 (H)。
OSH 助教工作就是沿袭往年实验(有点想搬 xv6 或者 njuos 但是肝不动了),感觉今年大家项目都做得好好啊。
大创最后变成了糊前端,令人感叹。不过似乎项目还有后续,希望后来者看到这一坨代码不要喷我【
但是三下没啥 GPA 压力了,做实验和考试都非常放飞自我,所以课程压力并不算大(指临近 DDL 再肝)。倒是开始参与不少课外的东西:找到了新朋友,加入(?)了 LUG。每周追 U149 生放送的时光真美好啊。
比起思考一些大而宽泛的问题,逐渐开始思考一些生活中的小问题了。每天吃吃吃。
所以也不太纠结方向的问题了,先去 MSRA Wireless 组做着了。
暑假
草,几乎没有,7 月 26 号就入职了。
大四
大四快结束了,咱来填坑了!最 Work Life Balance 的一年!虽然貌似有点 Life 过头了。
心态变化很大,如果说以前我只是随波逐流,或者说讨厌的事情就不干,现在的我逐渐对自己真正想做的事情、想过的生活有一个认知了。
四秋
MSRA 的物质条件非常好,虽然工资有点低但是咱一离职后过了一个月就涨工资了。。。或许应该为了这点工资多干几个月(
一开始的几个月非常肝,遇到一个每天和我确认进度的师兄,虽然听上去有点 push 但确实能感觉到有明确的收获反馈的过程。学了一点信号处理、深度学习,日常把玩 UWB 雷达。
这个学期我还带了编译助教,虽然只是负责把网页搭起来,但是一开始大家文档写的不是很规范,于是还是花了很多时间用 Prettier 和 AutoCorrect 修文档,并把这个流程整合到了 GitHub Actions 里。
之前有说要比较 lc 老师班和 zy 老师班的编译(H)的课程内容。作为一个 PL 爱好者(实在太菜了不好意思说自己研究 PL),大四一年确实又懂了不少相关的知识,现在做出的比较应该比半年前准确了很多(不过可能还是会被未来的我批判吧!)。
- 前端部分 lc 班讲的比较少。确实也不是编译的核心,毕竟人家 Lisp 的 parser 随随便便就能写出来了不是。这部分 zy 老师讲的很全,个人认为关于文法分类的部分还是很值得一听的(乔姆斯基文法),这部分其实也和自动机理论有一定的关系(有限状态自动机、下推自动机),zy 老师也介绍了 CFG 和 PEG 等不同语法。但是具体到 parser 的算法上,LA/LR/LALR 的一些细节确实没有必要讲的太细,尤其是还有一些需要人手工模拟分析表构造之类的毒瘤题目。。。而且 zy 老师讲这些算法说实话讲的不是很透,我是在编译上到快结课,复习的时候,才突然领悟到原来 LALR 就是用 LR(1) 的信息去优化 LR(0)。这一部分 lc 老师班讲的也不是很清楚,但是截止我写这段话的时候,lc 老师班已经不讲 LALR 了,是好事;
- 类型检查这部分 zy 老师班有,而且比较形式化比较细致,实验也有类型检查 pass。这个确实好文明,虽然没讲类型论但多少让大家对类型能做到啥有了个直观的感受;
- 机器无关优化,基本也就是数据流控制流分析那一套,两个班讲的都挺好的;
- 后端,lc 老师班因为和龙芯合作,这部分讲的比较多,不过咱不是很关心这一块所以跳过吧;
- 实验倒也差不多,都是最新最潮的(写类 C 语言的编译器的)教学实验,LLVM IR 当中间表示。
其实两个班真的很像,画风差异远小于和 zql 班的差异,也远小于我听说的外校用 Java/C 的编译实验。
说回 MSRA。虽然生活上很不错,天天吃小零食人都胖了,旁边的购物广场的寿喜烧自助也是真的实惠,但对于干的活实在没啥头绪了。无线信号的模型训练数据集不是很好获得,尤其是对于深度学习方法往往需要大量的数据,组内的方法就是光追法仿真。但是总之效果一言难尽,这个思路熬走很多届实习生了也还没啥成果,不过如果真搞出来了还是挺 exciting 的,毕竟无线信号也是 world model 的一部分(?)
再加上实验室杂活实在有点累,需要采集很多数据,我恰好是那种物理实验都不喜欢做的人。所以最后还是离职了。
四春
离职后完全就是爽玩的状态。其实之前在 MSRA 因为自由时间很多也是在爽玩,上海的谷店我都不知道熟到哪里去了(
本来已经做好二月玩到六月的准备,不过毕设总归还是要做的。离开 MSRA 后原来的题目我也不感兴趣了,不过也不知道该做什么,多少还是有点焦虑的。
后来一度陷入摆烂状态,下半学期三月份看见同学在捣鼓博客后又把自己的博客捡了起来,这个时候已经完全对毕设无所谓了,想着五月份再开始随便找个题目凑合凑合。结果没想到一折腾博客还真发现现有的 Vue 生态打包会有很多无用的代码,于是就有了给 rollup 的 PR 和毕设的题目。一开始调试的时候异常兴奋,不过要达到 rollup PR 的完成度还是挺折磨的,de 了无数 bug。中间和同学讨论确定想法的过程也很爽。
懒得写了,从博客抄了一段。不得不说我的运气确实还可以,大概四月份就基本完成了。不过后面修 BUG 又是另一个故事。
然后感谢 Rollup 的维护者 Lukas Taegert-Atkinson 在审查代码时的许多建议。正如 Zenithal 在本科毕业论文中所引用的《大教堂与集市》一书所提出的观点,大部分开发者于开源项目而言只是集市的一部分,只在有兴趣时随来随走地贡献一下。一个个开源项目就是在这样零散而随机的贡献和维护者们的共同努力下逐步发展的,并成为了现代计算机软件的重要组成部分乃至基石。本文算法的合并历经多个 Pull Request 以修复存在的 bug,我作为开发者在看到这些 bug 上报时尚且深感紧张和抱歉,项目的维护者需要承担的责任可想而知。
懒得写了,从毕设致谢抄了一段。
做完毕设浑身轻松,又觉得自己行了!想在找点活干,于是开始找实习。比预想的困难一点,合适又钱多的岗位实在难找。一开始投了 Bilibili 的前端,不过简历挂了。。。后来看见小红书在招(),投了,中了,进来干活赚点生活费。
括号里的内容和小红书的经历就等离职后再补吧。
毕业了,四年。四年。写这句话的时候一股不真实感涌上心头。毕业很突然,但又不突然。
不过话又说回来,本科毕业也只是新的开始,不知道研究生阶段又会遇到怎样的故事呢。