问心 —— 我在ACM班的这四年

听父亲说,祖谱上我是“心”字辈。回望在ACM班度过的四年,以“问心”为题,自问自省。

修业

进入大学初期的我是个不合格的小镇做题家。我除了眼前的课业,没有对未来的远见;“不合格”是因为我不会应试,刷题低效,大一的成绩一塌糊涂。我曾总结“大一在谋生存”,我没有计算机基础,甚至上大学前没怎么碰过电脑,大一花了大量时间在编程课上。我数学物理基础也弱,数学分析等等也是老大难,似乎一直在“拆东墙补西墙”。大一,尤其第一学期提高了我的抗挫能力:机考爆零,从emo自闭到平和接受,积极纠错补题;被ddl碾过,碾多了逐渐也跑得越来越快了;很多次竭尽全力依然无能为力,于是慢慢接受不可能完美的自己,我可以做不好,但要去试着做得更好一点。第二学期略好于第一学期,至少数据结构的作业都能在ddl前赶上了,也渐渐从大规模coding中能获得正反馈了。

第一次为大作业通宵,在朝霞染红天边的那一刻看着测试点终于都绿了

我大学生活的重要转折点是大一暑假的编译。前期非常痛苦,但开发过程中因为一些契机好像就此开悟了。我其实偏离了主流的compilation flow实现,这给我带来了非常独特的开发体验。在遵照教程build llvm IR之后,我的codegen做得和大家不太一样。这种做法让我在写optimization之前在benchmark上有挺不错的performance,但在后续加optimization时暴露出大量问题。我后来反思,发现我的做法相当于是在llvm IR之后又加了一层IR,而我在这层IR上破坏了SSA性质。这个试错、质疑主流做法、自我否定、反思的过程其实非常有意义(我的一条朋友圈评论区仍留存着从我质疑mem2reg到appreciate mem2reg的有趣心路历程)。编译课让我能去design & build something,在这个过程中,我有很高的自由度去随心探索我在整个历程中遇到的兴趣点。我的学习态度在这门课之后有很多改变,从“这是课程任务,我需要完成”逐渐变成了“这听起来很好玩,好好玩玩!”

编译教室涂鸦,感谢助教和同学们一个夏天的陪伴(23年夏末)

大二开始上正经系统课,阿磊老师上课讲得有些跳脱,记得有学长说觉得对system有基础认识,并且有一些工程经验的人听阿磊老师的课会收获很大。最初几节课听得云里雾里,后来就开始自己先啃课本补基础知识。听阿磊老师讲过好些漂亮的系统设计,有段时间每周的系统课都听得很开心,不是学了什么具体的知识点,更多是因为某些优雅的设计点感到兴奋。系统课的大作业更是对我胃口,系统一(architecture)的大作业选了Verilog实现简单的vector processor,这个任务比compiler的设计自由度更高了。以往的大作业基本是祖传的,多少可以参考学长们的架构设计,而这是全新的,完全由自己想要怎么做。启动成本很高:我们的目标ISA是RISCV的vector extension(RVV),那一学期零零散散啃了RVV的文档,锻炼了读文档的能力;也读了一些比较古早的paper。除去对参考资料研读、Verilog编程调试等等项目强相关的收获,我觉得这个课程项目给我带来更重要的精神收获:

学期中很“不自量力”地选择了挑战作业,没有可以参考的祖传代码,同行的同伴也越来越少,离ddl余下36小时,本以为勉强算是写完,却又发现一个设计上存在非常大的问题。很明确地认识到,必然是完不成了,但不后悔做这个高风险的选择。现阶段最让我感到不安的是这个作业中存在的大量不确定因子。没有具体的参考资料,我不知道我设计时做的每一个决定是否存在问题;之前没有人写过这项作业,我不知道我大致要花多少时间才能完成,甚至不知道我是否真的能完成这项任务。

很倾佩那些在诸多不确定中仍然能向未知处探索的人,他们一定有很强大的内核和坚定的信念吧。也许不知道能不能走下去,不知道会走到哪里,他们能坚定地走下去。有那么一部分人,能从不确定中开拓出新天地来。背过很多作文素材,对这些人有敬佩,但从未像现在这样强烈地感觉到他们的伟大。惊叹于他们的才智,更惊叹于他们对待事情的信念感和勇气,惊叹于他们强大的内心。

这项作业像是一个我之前从未接触过的赛道。面对未接触过的东西,确实挺痛苦的,但也挺刺激、挺让人激动的。我深知我没有那么强的能力,没有那么强大的内核,余下的36小时,希望“尽人事,听天命”,36小时后,希望能有热情再去探索。

以上是我2024年1月9日留的朋友圈。36小时后我没能完全完成这个大工程,后续又用了些时间,让它成为了一个能跑简单向量指令的processor。不过更重要的是36小时后,直至今天,我有了更高的探索热情。

系统二(operating system)的大作业ACore(一个microkernel operating system)写得很爽。同样是全新的课程设计,比architecture作业更high level,因而我更容易发展自己的design,有了更大的创造空间。当时给的一个参考course project是清华rCore(一个monolithic kernel),但我似乎没太参照它的具体结构。找了些microkernel的blog,结合rCore和阿磊老师在课上讲的一些概念,然后自己发散。24年梅雨季那段时间写得有些“痴”了,“寄生”在D19的阁楼,在镜子上画设计图神神叨叨……这个课程作业非常有成就感,尤其是后期看到一个类shell的process能在自己搭的os上跑起来,能launch process,能调度,我真的会对着屏幕赞叹“这太酷了!”这次大作业的code review非常chill,感觉不是在向助教们证明我做完了这个作业,而是向他们介绍我的成果。

“大放厥词”

经过大二一年,我选课选作业几乎将修业需求置于脑后,挑我觉得酷的做。也因此偶尔会出现“过载”的危险情况,非常感谢助教和老师包容和对我的热情的保护,给了我很多机动空间。大三开始,时间精力的分配渐渐从课业偏向科研,在学业方面好像也没太多可说的。比较值得一提的是,我学了些和我当时科研不太相关、困难、但我觉得会有意思的课,包括在线算法和模型检验。学习过程中也是经历了些痛苦,可能也没什么很直接的收益,但很有收获。

从学业成绩上看,我似乎还在“释放天性”的过程中被“奖励”了。大一到大三,我的排名几乎在指数衰减,大三居然还当上top1了,实在意外。

科研

我其实觉得我的研究兴趣很大程度上是在修学业过程中被培养的,再聊些上面没提到的科研故事。

接触CS后的第一年,我想做AI for Art。大一期末结束还特意跑去杭州看了美院的“AI特展”。说实话我看了还挺失望的,我不理解AI for Art是想通过AI做什么。根据我浅薄的认识,那些作品做的大部分是利用快速生成实现一些“奇幻诡谲”的视觉或交互效果,或者是“替代”artist来“创作”。我希望AI可以创造些传统艺术创作中做不到的,比如一种新的艺术形式。更甚,我希望用AI能帮助传递艺术创作者的“体验”,增强一种共情能力。AI“替代”艺术创作在我看来是最没意思的事,艺术创作本身是有力量的,创作者不该被剥夺这种汲取力量的方式。于是,我又对此兴致缺缺。

兴趣是个很神奇的东西,在那之后不久,我接触到了编译,入了编译器的坑然后越钻越深。编译课之后又选了《高级编译》,在这门课上开了个toy project,做auto-vectorization。这个project是编译大作业和系统大作业的延拓,大致是希望能把我们的源语言编译到我的vector processor上。在寻找思路的过程中发现了一篇非常有意思的paper,复现过程中又想到一些加强和简化,后来又对vectorization算法做了增强,在学长的帮助和鼓励下渐渐发展成了一个小型research project。感激郑老板,作为我的research启蒙老师教了我很多。Project本身没有什么光鲜的publication,但它确实教了我一个更“健康”的research project(这个toy显然是个“畸形儿”)或许该是什么样的:well motivated,拥抱现有生态,尤其是在有成熟生态的情况下另起炉灶成本太不可接受了。

大二暑假和大三第一学期在校内实验室实习,我其实更偏好传统system,但几乎所有system组都在做mlsys。在科研经历外,更多习得些为人处世的道理。compiler一直是我的“白月光”,于是找暑研的时候毅然决定拿着我的toy project去找个做compiler的组。有幸找到了神仙暑研,在这接触到了更多compiler相关的topic,关于architecture、programming language等等。有太多太多有趣的东西可以去探索,既然没玩够,那就继续吧!

最近和人闲聊,很多次被问到为什么想做编译器。可能是因为它恰好是我的转折点,是我遇到的第一个容许我design & build的东西,有很有趣的可探索空间,这一路上也不断有特别棒的人引导我去探索。我似乎一直喜欢design & build something,小时候学国画时想上美院,然后想当建筑设计师;上大学之后学会用program来build something了,这更有趣。书画和古法编程写project都成了我的爱好,我觉得它们都是art。

过去未来

如果让我重来一次,我会怎么就读ACM班?也许还是和这四年一样吧。这段旅程有很多不顺,但这些体验让我成长为现在的“我”,无论快乐和痛苦都是我特别珍贵的经历。回顾这几年,小细节上我会有不甘和后悔,整体上我问心无愧,至少我对得起自己。

想对未来的自己说些什么呢,这个世界变得太快了,人也变得太快了!

  • 5年后的我,应该能毕业了吧?21岁时听人说PhD的一年比本科的一年过得快得多,真的如此吗?你一定一定还保持着热爱啊!
  • 10年后的我,不知道你现在是在学术界还是工业界,在哪个国度。没关系,保持初心就好。世界变得很快,请持一颗宁静的平常心。
  • 20年后的我,还该跟你用自然语言交流吗? 愿你仍有闲情雅致,去做些可能已经被收入“历史博物馆”的手艺。

对未来每一年的我:“心静 心净 静心 敬心” 这是你大二开学第一天写下的“座右铭”。“先做人后做学问,从做学问中学做人”,不求你有很亮眼的成就,但希望回首每一年,你都能“问心无愧”。

Xin & Jing

← Back to Blog