小小回顾一下过去的大学四年
如果你在其他平台看到这篇文章,这可能不是最终版本。为了获得更好的阅读体验(包含最新的评论讨论和勘误),欢迎移步原文
写在前面
今天刚刚搞定毕业论文的全部材料,又安顿好租房的琐事,站在大学与社会的交界线上,我终于有时间坐下来,给自己的这四年写下一篇阶段性的总结。习惯了在网络上用碎片化的文字跟人交流,猛地要写长文,思路难免有些跳跃。我其实在写作时总是会纠结,一方面来说,自己碎片化的行文总会有些难以阅读,另一方面,又觉得使用 AI 进行润色会失去一些真情实感与人的气息。这篇文章我决定站在两者之间,只选择性地摘取一些片段作为填充或是参考,大部分行文仍由我本人完成。
入学前:从工具爱好到计算机专业
或许是冥冥之中有所注定,叮咚鸡虽然让我无心学习,却也让我从书本中解放出来,从而高度沉浸在网络世界中,去把玩配置了很多东西,比如密码管理工具,比如随之而来的跨平台跨设备同步,比如笔记软件。那年,我接触到了当时刚出没多久的 Obsidian ,立马就被其多样的生态吸引了。但让我苦恼的是,我抄了别人的一套库配置,却不太会用其中的数据功能,于是乎我对编程产生了莫大的兴趣。
后来在一次自主招生面试中,面试官问我:“你想选择学习计算机专业的理由是什么?”
我当时回答,希望能看懂一些开源项目的代码,从而更放心地使用,并且能以计算机专业学到的能力去造福生活,编写工具让生活变得更便利——这是一项生活技能。
带着这个务实的初衷,我最终选了计算机专业。不曾想,入学不到半年,AI 就出现并改变了一切。不过从现在的角度来看,当时那个“造福生活、手搓工具”的愿望其实已经实现了一部分。正是这个念头,驱动着我在大学里一路折腾各种工具,倒也让这四年过得还算充实。
大一:迷茫中的第一次折腾
大一上:桌游、封校与 AI 初体验
虽然前面是那么想的,但是大一刚入学的时候我还是非常迷茫,不知道该学点啥,只好按部就班地跟着学校的 C++ 课程走。另一边呢,我也是把高中疫情时玩游戏王的爱好带到了大学,加入了桌游社。我对一样东西在刚开始接触的时候总是会非常狂热,从而很快地学习到百分之六十的知识,随之热情视情况而定逐渐减缓,学习曲线趋于平缓。
于是我就买了很多的桌游,系统性地学了很多东西,玩了一整个学期,并狠狠装修了一遍宿舍。


谁知道叮咚鸡又来了,随之而来的是封校、封楼。被封在宿舍的我一下子又和现实隔离,只能继续遁入网络环境了。于是我就琢磨起了怎么架设私服和朋友一起打游戏,为了实现这个目标,不可避免地学了一部分 Docker 和 Linux 运维配置。虽然彼时还有些懵懂,只是照猫画虎地知道要敲什么指令,但这确实成为了我后来打开这一领域概念的敲门砖。
话分两头,其实在游玩桌游之余,我也不是什么都没干。
刚入学没多久,我记得一个事件就传爆了全网——NovelAI 的生图模型参数泄露了。平时没少上网冲浪的我也是第一时间就知道了这个消息,并开始尝试 AI 绘图。当时 AI 绘图才处于蛮荒期,画出来的人物经常能有两颗头、十三根手指,在折腾了一阵子之后我就放弃了(当然,也是因为当时电脑配置不够,手里只有一台 3060 的全能本)。
但是马上,ChatGPT 发布了。我记得发布当天,我就来到了那个界面——只有一个简简单单的对话框,却好像什么都知道。这给了当时还在摸索 C++ 的我极大的震撼,于是我的大部分作业马上被 gpt 高度接管了,我就是中间的那个剪贴板和提词器。
大一寒假:从 std::sort 开始的竞赛入门
时间来到寒假。入学前看文章说学计算机得打竞赛,于是大一上我也去报了 ACM 选拔赛。结果自然是惨败——我记得当时我连 std::sort 都不会。听学长说寒假有集训,我还是硬着头皮加了群。也就是在这个寒假,我开始被迫接触各种算法和数据结构。坚持到了开学后,我以一个比较靠前的排名加入了集训队,并成功找到了队友。
在此期间,出于对我那台噪音极大的全能本的不满,我也是赶着 M2 刚出买了一台 32G 内存的 MBP。
大一下:万智牌、社团和第一次小生意
大一下的很多细节我现在已经逐渐有些忘了。只记得随着学习曲线趋于平缓,我对天天死磕算法题的热情开始逐渐消退,注意力又重新晃荡回了桌游上,逐渐接触到了万智牌。那时候,我凭借着一股折腾的劲头,在社团里一手拉起了卡牌分部,甚至还经营起了宝可梦代理的业务,开始和校外企业洽谈推广合作。然而,在经历了一次极其神秘的货物失踪事件后,由于无法承受损失,我果断选择了跑路。
大一暑假:装机、集训和第一次自由旅行
我终于对我那台全能本的巨大的噪音以及孱弱的性能已经忍无可忍了,于是我把之前收集的万智牌和游戏王尽情抛售,凑了点钱,研究了一阵子,自己配了一台台式机,我记得当时国产颗粒刚刚突破,存储价格直接是白菜价,我就以大约是一千五左右的价格拿下了 5 个 T 的固态,并以五百多配了个 32G 的内存,把这个配置放到今天来看,价格居然翻了三倍,同配置现在估摸着得五千多才能拿下了。当然,当时受限于资金,我也是在4080和4070Ti 之间纠结了很久,最后实在是没钱,选择了70Ti。

我向来是非常善于利用空间的,为了放下我的台式机,我详细测量了宿舍的剩余空间,选择了一款恰好能塞下的机箱与显卡。

与此同时,集训队的高强度暑期集训也如期而至。在死磕算法和数据结构的间隙中,我还挤出时间去了一趟日本——这也是我整个大学生活中,唯一(?)的一次自由形式的旅行。

大二:从爱好走向项目
大二上:卡牌 DIY、区域赛和留学念头
前面提到,我在大一的时候逐渐接触到了万智牌。久而久之,在网上看到一些 DIY 的精美卡面时,我不禁心向往之。既然手痒,那干脆自己动手。于是,我便琢磨起了怎么从零 DIY 一张属于自己的卡片。
这其中涉及的工序远比想象中复杂,既有卡面的数字化视觉制作,也有物理印刷的知识。一开始,我是用 Photoshop 来硬啃这些任务的。我在国外论坛搜集了大量的 PS 牌框模板,现学现卖地去钻研图层样式、蒙版、修图等知识。搞定了电子稿后,我又跑去研究纸张克数、双面铜版纸印刷的对齐工艺。经过一通折腾,总算折腾出了我的第一批实物。

在这之后,我很快便从闲鱼上接到了一些 DIY 的单子,这部分手艺也成为了我大学期间一个重要的收入来源。后来我甚至开了 midjourney,去专门做一些我满意的插画从而制作卡片。

这期间,我迎来了人生中的第一场区域赛——ICPC 济南站。作为初出茅庐的新人组合,我们不出意外地被打得落花流水,整场比赛下来只勉强凑出了三道题。赛场上的具体细节我现在早就忘光了,只依稀记得当时经费有限,我们定了一家全附近最便宜的宾馆。那里的枕头和被子内胆上,发黄的污渍清晰可见。那场比赛给我的最大烙印甚至不是算法,而是从济南回去之后,我的头皮因为那家宾馆的卫生问题狠狠地发炎了一场。
也是在这次狼狈的远行之后,我坐在宿舍里,真切地感觉不能再这样下去了。我的脑子里开始逐渐冒出了一个极其大胆的想法——我要申请国外的研究生。
说起来,促使我做这个人生重大决定的最大推力,竟然还是万智牌。当时我内心的想法极其纯粹且直接:国外的卡牌环境更好,玩万智牌的人更多,过去之后打牌肯定更方便。
抱着这个为了爱好“包饺子”的目的,我开始寻求中介的帮助,得知了一系列留学需要达到的条件。这时候,一张为了能去国外痛快打牌而必须完成的全新目标列表,就这样摆在了我的面前:绩点、实习、语言、科研
于是在期中之后,我开始努力地提升绩点,到了学期末终于是有了一点小小的收获。
大二寒假:托福与痛苦的目标清单
整个寒假,我都在学托福,那真是一段痛苦的经历。
只记得有一次我在上面上课,刚好网友到这附近聚餐,也是一件巧事,于是我也顺便聚了个餐。
大二下:Card Conjurer、Git 和第一次工程实践
大二下的记忆同样有些模糊不清。这学期的专业课排得很满,还有令人恼火的国产操作系统实验课,我只记得在此期间我加入了老师的课题组,去打了一些微不足道的杂。比如代码迁移、复现论文等,但由于缺乏真正的内核驱动,这些工作往往是虎头蛇尾,最后都不了了之。
与此同时,在另一边一路探索卡牌 DIY 的我,顺藤摸瓜地接触到了 cardconjurer 这个开源项目。不过它对中文的支持很糟糕,于是我便试着做了一些微小的工作去改进它,比如尝试增加对中文的自动解析、换行和渲染等。
这算是我第一次系统性地参与到一个具体的工程项目中。为了提交代码,我顺便熟悉了 Git 的全套工作流以及常规的提交规范(比如 Conventional Commits)。这也是我第一次在实际开发中使用 Cursor 这个工具,对于当时对 JavaScript 完全陌生的我来说,Cursor 几乎是手把手地帮我抹平了语言门槛,提供了极大的助力。
同时,通过大量消化国外论坛的经验并加上自己的研究,我的制卡技术和成品手感在这学期实现了突破。在闲鱼上随手发布了几条动态后,流量突然铺天盖地地涌了进来。是的,我的商品火了。

这个时候我有点焦虑实习的事情,我妈帮我找了个面试机会,结果最后还是没能通过,同时我自己又面了好几家,结果每次都败在了最后一关。
大二暑假:第一份实习和第一个全栈项目
这个暑假同样包含了集训队的集训,同时还有暑期课设要完成。
与此同时,我找到了暑期的实习。虽然是一个没有工资、只包一顿午饭、类似 DBA 的工作,但胜在比较清闲。这让我有机会利用空闲时间去做我的课设。这个课设完全是我自己一点点硬写出来的,是一个前后端的全栈项目,这也是我第一次拥有一个完整的项目经验。
实习了一个多月之后,集训队那边的训练开始了。于是我匆匆告别了实习,回到学校开始集训,并为大三的区域赛做准备。
大三:比赛退场,实习登场
大三上:区域赛终章与退役旅行
大三上,我们队伍成功拿下了两场区域赛的机会:一场 CCPC 哈尔滨,一场 ICPC 成都。
要说有什么遗憾,那就是比赛机会实在是太少太少了。我们的比赛机会要被七八支队伍瓜分,其中大部分还是大四学长组成的队伍,我们的竞争力实在有限。不过好在我们靠着网络赛的出色表现,为学校拿下了一个比赛名额。老师的原话是:“自己打的名额自己一定能去。”
因此,我们获得了这一场区域赛的额外机会。相比之下,同年级的另一支队伍只有一场比赛机会,还有一个队伍甚至一场也没有。但遗憾的是,这两场比赛最终我们都未能打出成绩。尽管我们赛前一直在高强度加训,模拟赛的成绩也还不错,但到了赛场上,不知道为什么我们就是发挥不出应有的实力,最后只能是一无所得。
不过趁着比赛的机会,我们也是顺便去成都以及哈尔滨旅游了一趟。
下面发表一下旅游感想
哈尔滨:冰糖葫芦好吃,室内挺暖,没下雪可惜了
成都:火锅鸡好吃,成都有点热,没敢吃特别辣的


打完这两场,我感觉差不多可以退役了,于是就告别了集训队,开始我的实习生涯。
跨年:一次失败但难忘的夜游
那年的跨年夜,我突然来了兴致,拉上两三个朋友就直奔欢乐谷去了。结果一到地方才发现简直是人山人海。
说是在那边玩到了半夜看烟花水幕表演,但其实烟花我们根本没咋看着——因为人实在是太多了,我根本不敢往里挤,最后只能远远地站在一个地势比较高的、很后面的大树旁边。我很怂,当时心里唯一的盘算就是:万一现场出现什么意外,我可以在第一时间顺着身边的树往上爬。看完这遥远的烟花后,我们这才心满意足地准备回学校。
然而,属于跨年夜的折腾才刚刚开始。我们刚好错过了最后一班地铁,而地面上全是在寒风中排队等打车的人。一时间走投无路,我们几个人只能坐在地铁站旁边的天桥上,生生吹了快一个小时的冷风,才终于等来了一辆加价的出租车。
一路颠簸总算坐车回到了学校附近,当时折腾得够呛,我们本来盘算着干脆去学校周边的 KTV 凑合过个夜,结果在附近晃了一大圈,发现连这里的 KTV 也早就全部爆满了。折腾到最后,我们只能认命,老老实实回宿舍睡觉。

第二份实习:从面试碰壁到什么都干
这场实习的由来也很巧,我碰巧在 QQ 群看到同学在帮他们公司招人。彼时我又急着找实习,但又是处处碰壁,一时间没了主意,只能病急乱投医,坐了两个小时地铁来到这家公司开始面试。
不过这时候,我的简历上已经攒了不少项目了。有我参与的开源项目,有我的暑期全栈课设,还有我编译原理课写的编译器、移动开发课写的广告跳过、操作系统课写的 FTP 服务器等。当时面试官看了看我的简历,简单问了我一些 Git 如何操作以及对 Docker 的理解后,很快就告诉我通过了面试。
于是,我的第二份薪资为 150 元一天的实习便开始了。进去之后我才发现一件很严重的事:这家公司的技术人员,似乎只有我、另一个实习生以及我老板,也就是我的导师兼面试官。于是我很快变成了什么都干人员,一切乱七八糟的技术问题都交给我来解决。在经历了中间回学校复习考试的一个月后,我惊人的发现:这家公司搬迁了,虽然从学校到公司的距离没变,但是我从家到公司的距离变远了很多,这让我原来寒假从家里去公司实习的计划瞬间泡汤了。
话是这么说,但是这一份实习也给我带来了不少收获,从工程规范、视野广度再到技术上,我的导师确实是个很不错的人,也教会了我很多,我至今都和他保持着一定的联系。在干了三个月,一切步入正轨,开始按部就班地做业务之后,我意识到,我该离开了(这也是不得不离开,因为我要去国外交换了)
美国之行:交换、时差与软件工程启蒙
国外一切都很新鲜,但随之而来的也有很多反差。
最直观的反差在胃口上。国外的饭实在算不上好吃,到最后我几乎天天缩在麦当劳里。不过我也在这里发现了新大陆——刚出炉的麦乐鸡块配上 Ranch 酱简直是一绝,再接上一杯自助可乐。顺便提一句,国外的麦香鸡也比国内的更香一些。除此之外,我还发现那边的 Strawberry Lemonade 特别好喝,只可惜这些味道回国之后就再也买不到了。当然,天天吃麦当劳也顶不住,我有时候午饭也会直接去吃那边的 Bluebowl 换换口味。

有一次去买薯条,因为没看价格,直接被墨西哥人坑了 20 刀。

另一个反差是交通。国外的公共交通和出行极为麻烦,这也让我原本打算在国外高强度打万智牌的计划直接泡汤了。在交换期间,我只有一两次在出门大采购的时候,才顺便去当地的牌店打了打牌。
走在学校里还能遇到一些神人。有一次我正走着,一个金发传教士突然走过来,说着一口中文,顺手硬递给我一本中文圣经,还加了我的联系方式。
说起联系方式,也是遭遇了留学生必吃项目之诈骗电话,有个冒充洛杉矶领事馆的人操着一口广普跟我打电话。
而在学业上,最大的收获来自一位叫 Powell 的教授。他讲授的软件工程课给我的观念带来了极大的改变,可以说是重塑了我对软件开发的认识,让我系统性地了解了这门学科。在这之前,我折腾过不少项目,也打过比赛、做过实习,但直到上了他的课,才算真正入了门。
或许是因为我只有下午接近傍晚的时候才有课,刚到国外时还算健康的作息,在不知不觉中彻底崩塌。久而久之,我变成了早上睡觉、晚上起床,属于是在国外肉身抗时差,硬生生过成了国内的作息。
暑期实习:一个人的后端项目与荒诞收尾

回国后,我第二天早上就坐高铁去了深圳。入职第一天,我就被带进需求会,顺手承包了一个全套的后端项目——从技术选型到开发实现,全是我一个人干。因为属于方向探索期的“探索性业务”,组里缺人手,于是就顺理成章地交给了我这个最新加入的战斗力。唯一比较巧的是,因为我在美国期间强行把肉身过成了国内作息,回国连时差都不用倒,无缝对接。
后来进去做了才发现,有些内部框架的学习成本比想象中高得多。最大的阻碍其实不是业务逻辑,而是你得在各种平台上摸索,去猜某个选项到底配置在哪里。当时导师跑来跟我说了一句大实话:“老人按照固有流程走一般挺顺,但新人来配,难免会遇到教程里没写的隐藏问题,所以参考价值有限。”
当时导师还特意关照我,说这个项目可能不太好在答辩中展现工作量,如果想稳妥,可以考虑同时再兼顾一个成熟线的产品。我当时想法挺简单,觉得一个人干一个项目都快在配置表里迷路了,还是先专注把手里这个搞定,就婉拒了,说我先干好手头这个。接着就硬着头皮边踩坑边做,花了一个月,把整个项目初步完成了。
然后就是准备转正答辩。同组的实习生基本都是研究生,不仅比我早来一两个月,项目也早就上线了。到了准备 PPT 的阶段,大家更是各显神通。看着他们的材料,给我一个极大的感受是:研究生的科研日常里,显然包含了更多结构化汇报的训练,至少在 PPT 的排版美化、框架逻辑,以及如何清晰地陈述工作成果上,他们的文档确实做得比我好,非常专业。
最后的结果也挺令人遗憾的,我的转正答辩没有通过,给到的反馈是觉得我“稳定性还有提升空间”。不过,短短两个月多月的实习却认识了很多朋友。

大四:秋招、选择和方向
大四上:兜底之下的秋招
暑期实习转正失败,我自然就回学校开始了秋招找工。
说来也有点讽刺,当初我铁了心要出国,最大的动力不过是“那边生活打牌方便”。可真在美国交换了一段时间,我才发现自己根本适应不了那边的生活——饭不合胃口,出行处处不便,连最惦记的打牌,都因为交通问题没打成几次。一来二去,回国之后,我留学的心思就淡了很多。
不过秋招的过程就比较流水账了,无非是到处投递简历。因为有出国留学这一选项在手里兜底,其实我在秋招上并没那么强烈的紧迫感,只投递了有限几家我真正感兴趣的公司与职位。期间,因为实在懒得做那些动辄两小时的赛博笔试,我还索性放过了不少机会,也放过了我自己。
但有些奇妙的是,我最后拿到的两个 offer 却都充满了意外:一家是我一面不小心睡过头,硬生生被 HR 电话叫醒才参加的面试,结果却阴差阳错一路挺到了最后;另一家则是 HR 突然打电话告知我“实习简历通过初筛了”——显然是我之前投递实习时的岗位,被转到了秋招线,经过了漫长的反射弧后砸中了现在的我。
提前实习:从云网络到开发者工具
拿到云网络开发的 offer 后,我决定提前去实习探探路。这原本是一段需要和 K8s、云原生架构“死磕”的日子,但我却意外地发现,自己最大的干劲并不在业务代码上。
实习期间,我倾注最多心血的任务,居然是去优化组内仓库的 pre-commit hooks、重构 lint 工具,以及通过底层机制去阻断关键对象的不安全调用。看着被我优化后丝滑运转的提交流水线,以及从物理结构上杜绝了隐患的代码底座,我坐在工位上,突然陷入了沉思。
这一刻,过去几年的诸多线索仿佛突然串联在了一起:从大一时对配置 Obsidian、密码管理工具和跨平台文件同步的疯狂着迷;到留学期间死磕 GitHub Workflow 和开发规范;再到前一段暑期实习时,对组内“协议转换代码生成工具”倾注的巨大热情。
我开始严肃地意识到——相比于单纯堆砌上层业务逻辑,我骨子里一直追求的,是**“通过底座和机制的优化,让开发与生活变得更便利、更安全”**。我或许天生就更适合做开发者工具或企业效率方向的工作。
带着这份确信,我兴冲冲地投递了大量企业效能相关的岗位。然而现实十分骨感,在传统的效能赛道里,我的简历全军覆没。
正当我在传统工具方向碰壁时,大模型迎来了质的飞跃。我开始琢磨 Vibe Coding 的可行性(尽管这个词曾在 Powell 的课上被大肆批判),尝试将其拿来重构 cardconjurer 这个项目。我下载了 Codex 投入使用,并迅速将其应用到了当时的实习工作中。
本以为生活会就此按部就班,转机却突然降临。某天搬砖时,我意外接到了一个 HR 的电话,得知自己被“捞”进了一个全栈开发的岗位。我本着“面着玩玩”的心态去了现场,却震惊地发现:这个岗位的核心方向,竟然就是我正在高强度研究的 Coding Agent。
凭借着一手实战经验,我硬着头皮与面试官深入交锋,竟意外顺利地通过了首轮。这彻底引爆了我的激情。在等待下一轮面试的日子里,我宛如一块干瘪的海绵被丢进水里,疯狂吸收该领域的一切前沿信息。我将核心的思考与疑问逐条记录,直接在后续面试中与面试官进行高强度的反问与碰撞。一路通关,我最终拿下了这个 offer。


随之而来的是一段痛苦的抉择期:两份极具吸引力的 offer 摆在面前,一边是已经探过路的云网络,一边是未知的 Agent。我向许多人寻求建议,直到一位老师的一句话一锤定音:“既然你还年轻,选择自己喜欢的方向就行。”
坐在工位上,我又想起了自己此前关于“开发者工具”的种种执念。如果说优化 hooks 和流水线,是我对传统工程效率的迷恋;那么 Coding Agent,不正是这个大模型时代下,最性感、也最硬核的“下一代开发者工具”吗?
想到这里,答案已经显而易见。
总结
现在回看这四年的长篇流水账,我才发现,这一路虽然看起来很散,但其实一直有一条线牵着。
回到大一入学前的那个自主招生面试,我曾对面试官说,学计算机是因为“希望能以学到的能力去造福生活,编写工具让生活变得更便利”。后来的四年里,我的轨迹在外人看来或许有些不务正业:高中的时候沉迷网络,让我无心学习,却也让我提前接触了密码管理、跨设备同步、笔记软件和各种工具生态;大学里沉迷桌游和万智牌,为了一张精美的 DIY 卡面去死磕 PS 和印刷工艺;在封校期间架设私服,在集训队里被算法题折磨;在美国扛着时差去面试笔试,又在深圳的暑假经历了转正答辩的受挫。
这些事情发生的时候,没人知道它们最后会通向哪里。它们只是一些兴趣、冲动、阶段性的沉迷,甚至在很多时候看起来像是绕路。但把这些片段串起来看,那个“手搓工具、造福生活”的想法其实一直都没消失。它只是换了很多种形式,藏在了这四年的每一次折腾里。
为了打游戏,我敲开了 Linux 运维的门;为了印卡牌,我摸进了开源社区,也熟悉了 Git 和工程协作。很多当时看起来不务正业的东西,后来反而都埋成了伏笔。我对技术的兴趣,很多时候并不是从课本或岗位要求里长出来的,而是从一个个具体的生活问题里长出来的。而这种对“折腾工具”的执念,也在 AI 浪潮真正席卷而来时,把我推向了 Coding Agent 这个意外契合的方向。
Powell 教授的课重塑了我的工程思维,而不同赛道和爱好里的反复试错,也让我更清楚自己到底适合什么。回头看,这四年里很多事情当时都像是绕路:竞赛没打出什么成绩,实习也不是每段都有好结果,甚至转正失败在当时也挺难受。但现在看,它们确实都把我推到了现在这个位置。
站在大学与社会的交界线上,搞定了毕业论文和租房琐事的我,终于可以长长地呼出一口气。四年时间,世界从疫情封闭走向了大模型时代,而我也从那个拿着 3060 笔记本照猫画虎敲命令的迷茫新生,变成了一个终于知道自己想往哪走的人。
接下来大概还是会继续折腾工具、折腾系统、折腾那些能让人少受一点重复劳动折磨的东西。只不过这一次,它不再只是爱好,而是我真正要投入的方向了。





