我本科最后 16 个学分出了。再加上前两天 2022 年高考出分,这让我回忆起了 4 年前的这段时间。4 年过得很快,快到让我想专门发一个贴子来总结一下自己这段时间课程之外的学习。

入学前

C Programming Language

对了高考答案之后我才发现我大概会考出高三一年里第二高的成绩,于是先是高兴了一段时间。但是当我看到自己高一上学期 ~ 高三上学期的期末成绩时,才发现自己的高考成绩只能算是平均水平(我好像一直都是到了最后才认真考试)。

最后出成绩发现比自己估的分低一些。我那个分数段比较尴尬,高个 5 分位次就能缩一半。于是命中注定来到同济大学。幸运又不幸的是,我被第一志愿录取。

在得知自己被计算机专业录取后,我立刻上知乎查怎么学计算机这门专业——我相信大多数大陆同学在 2015 年到 2018 年的优质信息渠道就是知乎了。我自认为我还是可以分辨干货的。在知乎上我看到了一个 “让从 《C Primer Plus》 入门,之后学 《C++ Primer Plus》 / 《C 和指针》 / 《Effective C++》” 的回答。于是我第二天就跑到市里面的新华书店看这本《C Primer Plus》(由于刚开始学习计算机的那段时间,我受到了很多来自于同高中学长学姐的帮助,所以我把这本有资格代表那段时间的书送给和我同样来自一个高中的软院学妹了)。虽然高考结束后我已经 19 岁了,但由于家里一起不富裕,所以我根本不会花钱,我甚至不会使用支付宝和微信支付,我先前一直都是使用现金。我当时想在新华书店里直接把这本书买了,但是嫌它太贵(虽然在书店服务人员的帮助下我成功获得了 9 折优惠资格,但我还是觉得太贵),就想着能不能在网上淘换一本二手的。

我们高中 17 级的同学建了一个填志愿建议群,里面有一个学长在北航读计算机,所以我就问了他很多如何入门计算机的问题。同时还要感谢一位哈工大读计算机的学姐,多亏了她我才能在我家的台式机上装好 Code Block。

与此同时,我还跟我爸一起买了电脑。不过等到电脑到家已经是八月份了,而且我大部分时间都用在了预习高数上(大概是自学到了不定积分),所以对于 C 语言只是简单地入了个门(知道了变量、表达式、if-else、for、while、switch、函数这些),我就这样毫无准备地迎来了我的大学。

第一学期

C & C++ Basic / Python

我是没想到零基础的人这么多,大家好像之前都没怎么学过。我室友之前学过一点 VB,这已经算是超过 70% 的水平了。

第一学期比较充实,对于我一个零基础的人来说,计科导 + 高程对我的压力不小。我还记得当我学到 “数组” 的那阵,沈老师布置的作业虽然不算难,并且我之前也有所了解,但是作业我还是需要花很多时间才能做出来。有一个晚上,我突然感觉自己回到了高中,又坐在高中的教室里,但当我从反应过来时却发现这是一个梦。我睁开眼睛,看着宿舍楼外的树,躺在床上哭了出来——因为我梦到了过去,这说明我现在过得并不好,并且心生退意。一直以来靠自己学出来的我无法忍受这种事情的发生,于是我之后花了更多的时间学,上课更集中注意力听讲。

虽然现在感觉挺不能理解的,但想起来还是觉得很感动。

说几点有意思的,

  • 为了跟上沈老师的高程,我在西南八半价买了本《C++ Primer Plus》,但仔细读起来却发现内容顺序和课上完全不一致,遂在第一学期没怎么读(这本书后面也送给隔壁的隔壁的同学)。
  • 当时计科导第二个大作业要求我们上去做学科前沿报告。但我们组的组长是零基础的我,于是我只能硬学。那段时间,我在图书馆借了我本科的第一本书——《神经科学导论》,对着一本同济紫皮线代就开啃。说看懂了那肯定是不可能的,但我能把前三章的内容复述出来忽悠人。
  • 在做第四个大作业的时候,我想硬卷一波,写一个带后端的 Web。我在网上搜什么语言写后端最后,2018 年还能搜到 PHP,于是我借了一本《PHP-MySQL5 开发》的书,这本书我之后两次寒假都带回了家,不过我并没有看,真的笑死。
  • 在做计科导第五个大作业的时候,给的要求是做猫狗分类,我们组没有一个人学过 Python,于是我就借助学院一个与班干部有关的活动(具体是什么活动我忘了,反正参加这个活动就可以让学院帮忙买一本书),0 元购了一本《Learning Python》(我的 Python 语法就是通过这本书学的,然后这本书后面送给了同学)。

总之第一学期过得比较充实。和很多一进大学就放松、不适应的同学不同,我第一学期获得了 5% 左右的 rank,专业课全优,进了院学生会,还积极参加了班级与社团活动,与女朋友保持着较高强度的联系。活脱脱的一个人生赢家。

第一学期寒假

Python / MySQL / git / Web Back-end Develop

寒假里我遇到了两位直接改变我命运的同学(Eol & Vace)。

沈老师提出了一个建立 “课程问答论坛” 的想法,让有意愿的同学自由组合。回到家里我开始反思自己这学期忙来忙去到底学会了什么,最终得出 “我就学了点 C 语言语法 / 编程规范” 这件事。于是我主动抱上了 Eol 的大腿,希望能通过这个机会多学点东西。除了 Vace,当时同组的还有 4x10msvyyjxx2010xyu 两位大佬。

一个论坛自然包括前端 / 后端 / 数据库,由于组里的 Eol 在做计科导大作业时已经做过一个带数据库的 Web 了,所以我们都唯他马首是瞻——我被分配到 “后端-数据库” 这部分。后面我才知道,我这个工作有一个专门的缩写叫做 “CURD”。

2019 年寒假,Vue + Flask 已然是入门首选(但我万万没想到,到了 2022 年的夏天,Vue + Flask 仍旧是我系很多同学的首选,这让我不仅有些感慨),作为 CURD boy,我就学起了 MySQL 和 Flask(的用法)。最需要感谢的是 Eol 在项目开始之前还通过 QQ 群视频给我和 Vace 传授 git 的使用方法。由此可见,Eol 是我当之无愧的引路人。

不过可惜的是,我那段时间还是只会用 git add / commit / push / fetch / pull / checkout / branch / merge 这些简单的指令。我搞烂掉的 branch 都是靠 Eol 和 Vace 一点点 rebase 回来的。

通过这一个寒假,我感受到自己要学的东西还有很多,我需要更多的时间用来自学,于是在寒假的最后放弃了沈老师的高程下,转投了陈老师。当时我心里默念着:“现在的离去是为了更好地再见”。可没想到再也没有再见。目前看来,在认识尚浅的时候放弃沈老师高程下不是个明智的选择,以致于我对 OO 的理解可能到了大四才尚且入门。

第二学期

RDB / SE / Markdown

开发论坛一个假期明显不够,我们还打算把这个项目继续开发下去。为此我们计划申请那一年的国家级 / 市级大学生创新项目。不过有的时候必须要说一句,很多事情是没有办法做完的,有环境的因素,也有人的因素:当时同心云由于校庆期间的 LGBT 活动以及嘉定猫超的偷拍事件一时间人声鼎沸,谁承想学校竟直接关闭了同心云微博功能,这令我们开发的信心减少了很多。之后的申请也不顺利,所以有的时候我会想,如果我们申到了国/上创,那我们会不会把项目开发完?

不过正是由于我寒假跟着 Eol 学习了简单的开发基础,我了解了更多的 “名词”,这让我开始接触新的知识。我在学校借阅的大部分图书都是在第二学期,那段日子我一个月只用一周的时间应付课程作业(高程我换成了陈老师,高数和大物也学会了得过且过,刷题量减少了许多),剩下的时间我都用来看图书馆里的,或者网上搜罗到的书(比如 RDB、SE、IoT、Web 开发等等)。还记得清明节去武汉玩,我还带了本《MySQL 技术内幕 InnoDB 存储引擎》。

也正是由于之前用过 MySQL,我在 Eol & Vace & SAOHPRWHG 的撺掇下提前选了 “数据库系统理论” 这门课,我也正式开始了我的 “提前选课之路”。当时的我还是想继续在分流后进入计科方向,然后带着第二学期到第五学期中自己扩展的知识面王者归来——上沈老师高程的时候我还左支右绌,我希望我在上沈老师计网时已经成为年级里数一数二的 coding 大手子,所以我给我第三学期多选了 7 个学分。

这学期我挺躺的,我自认为找到了大学学习的秘诀,不再代入刷题家的角色看待我学的科目。虽然没学什么技术,但还算是扩宽了些自己的眼界。还想说的是,
作为目前同济首席 Markdown 工程师,我第一次使用 Markdown 也是 Eol 带的。Eol 当时说:“虽然 Markdown 有一些学习成本,但是学了之后写文档非常方便。” 坐在他左边的我看到 Typora 的渲染效果后果断入坑。

第二学期暑假

GitHub / C++ Basic / Linux / Java

我搬到了嘉定校区。并在这里遇到了另一个改变我人生的人——ganler

为了宣传 RM 竞赛,ganler 进了我们的年级群发广告,并且在 GitHub 上创了个仓库 SPTraning-VisionGroup 来发布任务。以至于小学期的时候我在图书馆里面借了《C++ Template》和《Clean C》来看。有缘看到这里的各位可以看下 ganler 对我的教导:#2。先前合作开发时我只是使用 git,但通过这个 repo 我学习了 GitHub 的使用,也提交了人生第一个 PR(虽然被 close 了),非常具备纪念意义。不过令我感到悲伤的是,ganler 不喜欢 18 年级群的气氛所以退群了,在我看来这是 18 年级群的一大损失。

那个暑假我本来还打算自学 Java 来刷 leetcode,但无论是学 Java 还是刷 leetcode 都没贯彻落实,导致我暑假有很多时间被浪费了。

第三学期

Django

暑假期间我是打算参加 RM 视觉组的,不过由于我太摆了,没有展现出特别积极的态度(比如没有主动学习 cv 方面的知识,比如之前没有选 2 个学期的沈老师高程,比如之前计科导大作业没有选 cv 方向的题)。而且在面试过程中,我表现的比较关心我的绩点,于是被拒。当时和我一起研究的还有 betray12138,但 2 学期沈老师高程 + 计科导大作业 cv 方向的他也没被选中。

但当时我想的是我可以自己学,然后大三的时候再加 RM 视觉组。非常的 positive。

可计划不如变化快,每时每刻都闲不下来的我又找了新活儿干,我进了数字逻辑老师的横向组里打工。上一秒还打算 cv,下一秒就开始了搬砖。明明第二学期末的时候还想着提前选课给沈老师的计网腾时间,第三学期中间还想着第四学期提前选掉软工,没想到第三学期末就去了信安。

这学期感觉很忙,所以也没有学什么额外的东西,唯一能称道的就是我还在继续看书,我开始看 CSAPP 和 SICP,分别浏览了五章和两章。如此看来,我最擅长的莫过于半途而废。唯一学到了点东西的就是数据库的最后一个作业,我用 Django 的 Template 糊了个界面,然后还用了下自带的 ORM。

这学期期末的抢课周我用上了 TongjiHelper(由于抢课功能丧失,可能有很多新同学都没接触过这个软件了),我也是加了其作者 zhouii 的 QQ,并且表达了自己的景仰之情,说他很厉害,我非常羡慕。zhouii 问我为什么觉得他厉害。我就回答:“你开发了 TongjiHelper 这样的软件,节省了很多同学的时间。” 在我眼里,zhouii 学长简直是信安之光,是我非常要想成为的人。我觉得这样的人应该被我们学院好好宣传,成为大家的榜样,但当时单纯的我没想到 zhouii 学长一直不受学院待见。

同时这学期也是幻灭的一学期。离开了沈老师的高程,我开始注意到我系的教学质量真的是一言难尽。都什么年代了,数据结构课强制要求上机;数字逻辑意义不明到我多次向教务老师甚至系主任反馈能否砍掉;数据库的老师不懂自己念的 ppt,拒不回答我的问题,反以 “其他人都没问问题,怎么就你问” 来 “反击”。我终于彻底意识到学这个专业还得看自己。

在学期末的一堂数据结构课上,我和 SAOHPRWHG 坐在一起,我们突然谈起 “眼界 | 信息渠道” 的问题。他跟我说我们学校有个外事办网站,但是了解的人少之又少,上面有很多交换机会,但是没人知道。虽然我也不知道外事办网站,但我对 SAOHPRWHG 的想法非常赞同。当时的我想到自己第三学期没学到什么新东西,心里非常低落,由此更是坚定了扩宽信息源的想法。

第三学期寒假

Math / JavaScript / Vue

第三学期我学了线代,但是线代拿了个良,并且感觉自己什么都没学会。所以我寒假看起了 MIT 的线代。这是我本科阶段为数不多的有始有终的事情,为此我还在 GitHub 上建了个仓库来放读书笔记。看线代还有另外一个目的,就是当时想学学 DL,并且为即将到来的美赛做准备。betray12138 同学和我想法一样,也想学 DL,他则是直接看花书。我相信我们最后都没学懂,至少我是一点都记不得 MIT 线代内容了。

因为是 juxuan27 邀请的我,所以我不敢不尽心竭力完成。比赛期间我可谓是零作用,除了语文建模之外一无是处,pandas 还是现学的。值得一提的是比赛前我还学了点微分方程和随机过程,但都是比赛结束就忘了。

因为之前申请了 SITP 需要在开学后不久结题,所以寒假里我们又开始糊弄前后端。搞笑的是,我之前虽然在写后端,可我却不知道前端是怎么发送请求的,所以我写后端都是盲写,测试也都是通过单元测试框架做的,根本不会用 postman / charles 这种工具。令人悲伤的是,我校 “数据库课程设计” 作业竟然是写一个带数据库的 Web 应用。所以我必须学会写前端。

在加上第三学期所加项目组的老师找到我,问我有没有想法写前端,我就顺着答应了。当时希望的是我把项目组的事情干好,这个过程中学习前端。之后我再去写课设的前端部分,这样我就能有个好的成绩。据我当时了解,我们 SITP 的前端是 Vue 写的,于是我就先学 Vue / JavaScript。

第四学期 & 暑假

Vue / Docker / CI / CTF / GitHub

这学期没有返校,都是在家里上课。除数据库课设外,我又提前选了大三下的两门课到这一学期,所以这学期的压力依然是较重的。除了前端之外,我没再多学些什么东西,而且前端也只是学了课设能用到的一些知识,并没有做过多的扩展,因为在简单地了解过后我就知道我对自己的定位不是一个前端人。

尽管如此,答应了的活儿还是要干。我和 chong1144zhangyiwen599 以及 xpnice 一起开发综评项目。在这期间我还学了一点 Docker。比较抱歉的是出于各种原因,从 6 月份开始我就没怎么好好写这个项目了,大部分时间精力都转投到了我的数据库课设以及一众大作业上。最后的 bug 还都是 xpnice 以及同年级的 Zhhanou 帮我解决的,可以说是摆得非常抱歉。

纵使投入了不少的精力,我的数据库课设还是良了。当时对绩点斤斤计较的我觉得非常不合理,因为有的同学明明只写了一两天但却是优。ganler 在了解了我课设做了什么之后,对我说:“如果你这个可以拿优,那其他写论坛的也都可以拿优。” 我突然意识到自己做出的东西没什么大不了,就是一个 CURD 套壳罢了,是个人都会写。如果数据库课设的缝的接口多、工作量大就可以拿优,那岂不是更没道理?这让我后面很长一段时间都没有继续写无聊的 Web,我开始学习更多的名词以及如何写代码。

不过我总归是会写前端了,这也就意味着我掌握了一种进程间通信的方法,能干的事情也就多了起来。比如我一题两用,和 Nicola115 搞定了 Web 开发课的大作业;比如 Vace 后半学期拉我进了一个打环科赛 / 互联网+ 的项目组(虽然暑假被踢出来了,丧失了一个学习小程序开发的机会);比如被 juxuan27 拉进小挑的项目组,但可能是我太划了以至于没过初赛(好吧这个和前端毫无关系,我只是写了点文字)。

说起来,我那个时候还自诩信安方向的学生。也正因此,在暑假前 Eol 问我想不想打 CTF 后,我还真就 “学” 了一段时间的 Crypto(看了下《CTF特训营》的对应章节,尝试写了几个脚本),“学” 到我发现我的基础和智商不足以支持我干这种事为止。不过好在 Eol 带着我打过这种比赛,这让我意识到我的基础和品性是做不了安全的。

虽然上面说的事情都没有哪件太成功,可提起第四学期我还是有点成就感的。我在密码学考试之后写了个简单的 Python 计算器,借此用了下 Travis CI / Fossa 这些东西。我好好地做了 CPU-31 的实验然后写了篇博客。之后我为了进一步学习 GitHub 的各种功能,趁这个气势在 GitHub 上了建了 TJ-CSCCG,这也算是我本科比较满意的一个 “作品”。

我记得暑假快结束的时候,我还想学一下 NLP 和编译原理。我没有为前者做过怎样的努力,为了后者我看了三章的 EAC-2。马马虎虎学到了 LR1。

第五学期

LaTeX / Go / Julia / Design Pattern / Makefile

刚开学那段时间,我和自动化的两位 M 奖同学打了国赛,作为组里唯一一个计算机学生,我自告奋勇用 LaTeX 模板写论文。比赛结果就不用说了,啥都没有,除了我学到的一点 LaTeX 相关知识。从这件事我理解到,我的实力、心态以及竞赛运可能都不是很好,我对于一个团队只是锦上添花,不可能雪中送炭。

第五学期刚开始的时候我还是蛮积极的,各方面都花了时间,也都在好好办事。但我在 10 月份左右得了场病,那之后将近一个月我都没精打采,学习也学不进去,并且开始逐渐反感前端。这段时间我接触了一位 15 级读密码学方向的学长,那时候我还在幻想自己未来读研可以读这个方向。多亏了这次生病,我时常躺在床上反思自己,终于在一个中午顿悟了自己应该另寻出路。

当我病情和精神状况逐渐好转后,我觉得我应该学点新东西来调整一下心态,就比如新学几门语言。所以了解了下 Go 和 Julia 的基本语法。11 月末我彻底退出先前的综评项目组,用更多的时间做课程作业和自己整活——我在操作系统隔壁教室候场的时候开发了一个简单的 mips-disassembler,中途改代码改到我有点恶心,同一时间软院的同学们在学习设计模式,于是我也看起了《GOF》;我学了点 Makefile 的写法,尝试用比较古早的 GNU Make 项目结构来管理我的信息隐藏项目。

也就是在这个时候,我通过 kagaya85 了解到了目前我将要前往的实验室。我当时也有一点想法和 kagaya85 学长一样做云原生,但当时没有特别地坚定,不过我心里认为这个方向无论如何未来也还是要接触的,所以这让我更有动力学习所谓的 “云原生语言”(但后面去了其他组)。

在这个阶段我进一步加深了 “我这个人就不适合信安” 的想法,于是给自己规划了下寒假的阅读计划。真的是笑死,明明我 10.24 的时候还给自己买了一堆网络安全方面的入门书,正如我第三学期的 10.24 给自己买了一堆 ML / CV 的入门书。

第五学期寒假

Kotlin / Go / DS Basic

在 12 月左右,我找 juxuan27 所在组问了下,心里想着通过寒假这段时间尝试下本科生科研的感觉。回到家里,我投入到这上面的精力可以说微乎其微,学长让我看的论文我大多看不太懂(地理差分隐私相关),让写的代码我也没怎么写,于是自己摆着摆着就摆掉了这次机会。

难得的寒假总是让人胃口很大,让人误以为自己可以比在学校学更多的东西。我计划着用 Python 写一个 mips-simulator;用 Go 写一个 ipsec server 和 client;继续每天练习 Julia;好好补习一下设计模式;用 TeX 写一个简历模板;在飞回家的那趟飞机上,我甚至突然想给上一个暑假写得 Python 计算器套个 UI,所以想通过 Kotlin 用 swing(什么玩意儿,况且 Jython 好像当时只支持 Python2),但这些最后全部中途而废了。随后我又犯了 “缺什么补什么” 的病。我下单了一本陈海波老师的经典书目(这书毕业的时候送给室友了),开始重学操作系统,但我又没学进去什么。之后我想到了 kagaya85 学长,我开始尝试接触 “应该接触” 的基础知识。

万万没想到我看起了《分布式系统概念与设计》。然后照着其中所描述的几个场景写了点代码。整个寒假还是比较怠惰的,没有多么用功地学习,本来想做一下 6.824 的 Lab,但看完视频之后就放弃了。不过寒假结束时,在 wwsdl 的指点以及我个人的一点努力下,我已经可以用 Go 作为我的主力语言了。

这个寒假也是一如既往地打了美赛,当时想用 TeX 写简历模板就是因为我打算在美赛上继续当个排版论文的花瓶,(不过这次美赛我们用的是 word 模板)。我和另一位 M 奖得主和她的同学组队,最后又喜提一个 H,这个 H 宣告着我的抽奖生涯告一段落。

第六学期

k8s / Lua / Go / System Basic / MQ

我按照实验室云原生组一直在维护的一个项目为目标,开始学习其中使用到的技术。首先我读了下《k8s in action》,但没怎么读好,现在也基本忘得差不多了。同时为了了解这方面知识,我还跨选了大数据那边的 “云计算与虚拟化技术”。现在想来我真是不长记性,明明第三学期就已经悟出上课学不到什么东西了,为什么还在第六学期犯这种错误。但总归还是有些收获,我较为认真地学习了下 ShellScript,写了个快速在 Ubuntu-18.04 上配 Hadoop 的脚本。

之后便是继续磨砺自己的 Go,写了一些简单的项目和课程设计。中途也一直在尝试各种各样的工具,比如给 TypeORM 配测试;通过 docker-compose 在 MongoDB 容器初始化时插段 js 初始化 root;用最新版的 bochs;第一次尝试往 hub.docker.com push 镜像等等。

后半个学期我还看起了《计算机组成与结构》、《现代操作系统》、《OSTEP》这几本书,不过看了也等于没看,当时也没怎么看懂,都是书云亦云,现在更是忘得差不多了。由此可见光看书对我来说是绝对不行的,经过手的代码项目中用到的技术都会忘记,更何况看书获取的知识。

第六学期暑假

Ruby & MetaProgramming / DevOps / Python / Redis

暑假自然是要准备夏令营的。但我没进几个夏令营。碰壁之后我就开始投实习,没想到还投中了。

在去实习的前夕,Eol 跟我说 Ruby 的元编程,所以我还借了图书馆的《Ruby MetaProgramming》好好地学习了前几章的内容,这令没有接触过元编程的我大开眼界。

实习前我还是一个名义上的 Gopher,投实习的时候报的项目也都是 Go 写的,但我实习所在组使用 Django 写后端,然后 API Server 连了几个当 MQ 的 Redis。这让我重新开始体验 Python。一年过后,学了操作系统等课程获取了一堆名词释义的我有更大的能力探索先前未知的领域了(比如 DDD、打包什么的)。

由于我所在的组就是开发 DevOps 平台的,因此把这个平台的能力用到了极致,这使得我们绝对是最 “软件工程” 的。我就在实际生活中,感受第二学期所学到的软件工程思想,亲身经历敏捷开发。

第七学期

Coq & Racket / GitLab / TypeScript / AOSP

我其实是进了程序分析组,这让我回忆起南大《软件分析》这门课讲的东西,然后和差不多四年前一样到知乎上搜 “软件分析” 怎么入门。

不知道是不是这四年让我鉴别事物重要性的能力衰退了,我直接看起了《Software Foundation》,然后开始用 Coq。不过我的大脑有点过于 OO 了,再加上我觉得 Coq 没有什么特别通俗优秀的入门教程,所以一时半会理解不能。差不多半个月之后,我又开始看 SICP,尝试用 Racket 写课后习题。这次我又双叒叕半途而废,只是看到了第二章就结束了。

再次由于 Eol 的推荐,我尝试使用了一下 TypeScript 写了我的第一个可以运行的 TypeScript 项目。不过就是用了用最基本的语法,而且写得很烂。

实习用的是 GitLab,我也简单了解了下 GitLab 的 CI,还连上了本地的 Mac 当 Runner。通过这段经历我对 git 更为熟悉了,也熟悉了团队协作时 git 的 best practice,PR & review 也十分熟练了。

另外,在实习的时候非常幸运地认识了 Xuedixuedi,她当时不仅在实习,还申上了一个 OSPP 项目,这件事我一直记着,毕竟以后读了研可能就不能长时间线下实习了。今年我也是报了 OSPP,但同组竞争的同学说我选的恰巧是一个比较卷的课题(那段时间刚进 Apache incubator,或许恰好比较有名声),于是就没竞争到。

接下来的日子就是我本科最黑暗的一段时间,我一度以为自己毕不了业。AOSP 确实是一个过分庞大的项目,这玩意儿直到现在我也不理解很多东西的概念。我枯了。

第七学期寒假

Dart & Flutter / Scala / Java / LaTeX

由于我溜得比较早(12 月份就回家了),所以这个寒假很长。最开始我其实是想跟着 rCore 把操作系统再学一遍的,但是由于 Rust 入门门槛有点小高,所以就没继续深入花时间了。之后我开始抽风想用 Scala 写一边编译原理课设,但是中途由于没有时间就又放弃了。在后面还打算用 Java 复写一边《GOF》里面提及的设计模式,但是中途又放弃了。可谓是放弃大师。

不过寒假里面我还是干了不少事的。我完成了毕设的一半任务,但这还不是最令我高兴的。最高兴最有成就感的是我写了我这辈子第一部短中篇虚构小说,并且用 ctexarticle 美美排版了一下。并且我以此为契机,仿照各个大学的 Beamer 扣了一个 Tongji-Beamer。

寒假过到一半的时候,我在 GitHub 上看到了一个名为 DanXi 的开发组。直至现在我还想自己拿到账号之后进这个开发组写服务于全校同学的 app。所以我浅学了一下 Flutter,不过并没有学多久就返校了,属实有些可惜。

寒假中我还重温了一遍 Java,看了点《深入理解 JVM》,尝试学习 Soot / WALA 这些比较古老但是有名气的工具,可惜学习得并不顺利。

第八学期

Java / C# / LaTeX / GitHub Actions & Packages

回到学校第一件事其实是用 Java 生成些毕设需要的数据结构,在这个过程中被安排了一些活,我就借此机会进一步了解 Java 及其周边工具的使用。在这过程中我着重理解了之前完全看不懂的访问者模式(说到这个设计模式可能有缘看到这里的人会一下猜出我到底被安排了什么活)。

在了解了 Java 的 OOP 设计之后,我简单了解了一下 C# 的 class,还用 VS 做了个极其简单的窗体应用,算是弥补了之前的一个遗憾。

做毕业设计自然是要写毕业论文的。作为 TJ-CSCCG 的 Founder 以及现任 Owner,维护 ganler 的 tongji-undergrad-thesis 责无旁贷。我也借此机会熟悉了 LaTeX 周边工具的使用。不但加了个 CI 来测试多平台编译效果(由于我实习的时候就是写流水线的,GitHub 上面的这些 Marketplace、Action、workflow、job 的概念我都能找到对应的,所以上手非常快),还发布了个 Docker package 随用随跑的编译环境(不过我猜没多少人会用就是了)。总之我进一步熟悉了 GitHub 的功能。

第八学期暑假

Android & GitHub Actions

其实这不应该算是本科阶段了。暑假加了复旦的 DanXi 开发部,学了一些现代的 Android 开发知识。然后于此同时,为了实验室的活也在阅读古早 Android 的代码。总之都还是和 Android 有关的。

由于暑假前几天申了一个项目,所以也还写了几天的 yaml。项目的二期需要我复习一下 k8s,打算先看着,具体实现就放到返校之后做了。

小结

回头看了下,自己这四年还挺失败的,虽然做对了几次选择,但更多的人生岔路口没有很好的表现,如果当时咬咬牙坚持了结果会完全不一样。

而且在学习上也有很多遗憾的地方,比如没怎么学过 ML;也没打过 ACM / CTF 这样的竞赛;框架也学的少,没有过开发 app、小程序的经验;没好好刷过几个有用的 Lab,没看多少书;还没参与过什么开源项目,从始至终都是个 Markdown 工程师。

本科这四年自己认识的人也少,希望上面说得这些在未来几年可以得到改正。