关于这个项目 …

这个题目是从 2024 年暑假开始的, 我还记得当时是大三的暑期实习, 我在微软的小会议室里和刘老师 online meeting, 她给我看了那个图, 我们想着能不能把它实现出来, 所以就有了最开始的 idea. 回头看, 我到现在仍然觉得这是一个挺 cool 的 idea, 虽然最终做得还有不少不满意的地方, 但至少也有一点点信心说我们的工作是 “fill the gap” 了.

然而, 自从项目开始, 我之后好几个月的时间都在 paper reading, 上课, 准备开题, 总之一直没有真正动手开始 coding. 同时, 对于项目的 formulation 和实现思路, 当时也和 wangzheng 以及组里大家一起讨论迭代了很多次, 一直没有找到特别合适的 solution.

直到 2024 年底, 我们开始写代码. 我主要负责的是渲染引擎部分, 最初我 underestimate 了这个 tool 的实现难度, 没想到之后几乎花了大半年时间来不断 tune & optimize, 加了很多最初并没有规划的 features. 虽然由于架构设计的改动, 这个 tool 最后不可避免地成为一座屎山, 但至少现在我们也把它 open source 了, 并且我觉得 (至少对我自己来说) 维护起来还是 ok 的 (苦笑). 我目前正在尝试对它进行重构, 并且从更全面的需求角度出发, 尽量让它更加 elegant. 虽然我慎重思考之后决定不把它作为我下一个 project 的题目, 但是我还是喜欢做一些踏踏实实的 coding stuff, 而且我期待它对于 community 能有一些贡献.

所以, 为什么不继续做下去呢?

说回项目本身. 如果让我再选一次, 我那个时候可能就不会做这个题目了. 不是说它不好, 而是说对于第一次尝试完整一个项目的新手来说, 工作量太大, 太不 focused 了. 我们的目标是实现 A, 但是 A 的前提是 B. 为了实现 B, 我们又要从 C 出发. 在这之后, A 的实现却依然需要先完成 D 和 E. 除此之外, 还需要 F 和 G 来指导 D/E 的设计.

因此, 我觉得我们忙忙碌碌了很久, 但一直花了不少时间走了很多弯路. 如果按照现在成形的论文写作, 来看当时最初的项目架构设计, 其实完全是不一样的两个东西了.

当然, 我也很感激这一路的经历, 让我知道了很多事情应该怎么做, 什么路好走, 什么路难走. 什么地方需要理想主义的创新思维, 什么地方只需要按部就班地 “following prior work”. 最后阶段写作的锻炼, 我也觉得成长了不少. 此外, 最重要的是, 如何和老师、学长、所有的合作者进行沟通和协作, 在这件事情上我觉得我成长了很多.

所以呢, 我觉得虽然花了很久很久, 但没有什么后悔的. 还有两个月才知道论文能不能中, 如果被 reject 的话我也希望到时候不要心生怨怼. 平常心就好. 毕竟都选了这条路了, 只要自己开心就好.

渲染引擎, 软件工程, 以及 AI 编程 …

老实说, 我本科期间没有太多维护大项目的经验. 大一 OOP 的大作业写了几千行, 就觉得是非常大的 LOC 数字了. 可是这个引擎, 不知不觉就干到了上万行.

代码越多, 代码越屎.

最初我的设想是控制住 10k 行以内, 不包括测试文件以及自动生成的文件等. 其实按照当时的架构设计, 这个数字大抵是足够的. 只不过后来要加各种新的 features, 才又又又加了很多很多代码, 导致整个项目看上去比较臃肿.

最初是在 25 年初的过年期间, 我在家里卧室的桌子前对着笔记本电脑速成了第一个能跑的版本. 只实现了几种功能, 并不完善; 算法是乱写的, 架构是欠妥的. 不过, 至少能跑起来了.

回学校之后明显加快了 coding 速度, 我也很享受那段时光, 很纯粹的 coding, 把自己的想法一点点地落地. 为了做好一个方便协作和管理的 workflow, 加上了 format, lint, github workflow, docs, test scripts, 很多很多的脚手架. 我反思自己没有好好学习软件工程, 缺少管理这种体量的项目的必要知识. 而且, 在那个 AI coding 还不太好用的阶段, 这些东西基本只能靠自己摸索, 更别提最关键的架构设计了.

回头看, 这仍然是我现在依然坚持 「古法编程」, 尽量少 involve AI agent 的原因之一. 即使到最近几个月, 模型能力似乎已经比当时提升很多了, 我还是不轻易让 AI 对架构进行大改动. 原因是, 这个东西对它的 training data 来说大概是一个 out of distribution 的事儿, 它目前还做得不够好. 而且, 我不觉得它有从头开始架构设计的能力. 我现在在重构这套工具, 在我基本已经知道实现思路并且告诉它之后, 它仍然不能很好胜任. 可能还是不要太信任公众号和小红书上面的人对 AI 的吹捧吧 hhhh.

此外就是我的代码洁癖挺重的, 我喜欢维护干净的、注释良好的、易读的、结构清晰的、各 module 分工明确的代码. 我讨厌杂糅的、AI 味道很浓的、拉了很多屎很难 debugging 的代码. 如果有一天 AI 真能取代程序员, 至少先写出像样的代码吧 :)

在这个渲染引擎的实现过程中, 最折磨的一点在于「不得不重新造了一遍轮子」. 为啥呢? 因为现有的 high-level 的工具基本都只能 cover 我们需要的一部分最基础的功能. 自由度完全不够. 所以, 为了统一地支持它做得到和它做不到的部分, 并方便适配我们系统的其余部分, 我们从头开始用最 low-level 的工具把它实现了一遍.

老实说, 到现在为止, 我也还是没有看出更加 elegant 的解决办法.

尽管如此, 还是从实现过程中得到了一些经验教训, 它们都将体现在重构后的版本中.

不过, 我现在觉得, 在可视化这个领域, 如果只是为了发 paper 的话, 大多数人并不在意你的代码有多 robust, 有多 general. 你只需要 cherry-pick 一些能够 showcase 的 examples 来证明你提出的优化算法是有效的就行了. 从这点上说的话, 我们的的确确走了非常非常多的弯路. 不过, 事已至此了, 我也真觉得没啥后悔的. 只能说以后如果还做类似的题目的话, 我知道怎么做最高效了, 哈哈哈哈.

科研习惯

接下来, 抛开项目本身不谈, 我想总结一些更加 general 的科研习惯, 希望以后可以朝这些方向改善.

How to (Not) Burnout

科研是一个奖励非常稀疏的 RL 环境. 我反思我在这段科研经历中, 因为身心疲惫, 耽误了不少时间. 当然, 也有可能是因为耽误了很多时间才身心俱疲的. 如何避免 burnout, 我还在慢慢探索. 特别是前段时间临近 DDL, 写作的压力挺大的, 有一周基本上每天都是一醒来就开始工作, 一结束工作就睡觉. 这样高强度的状态下, 开始对科研乃至人生的意义产生怀疑, 不知道自己做这一切究竟是为了什么. 加上那段时间张雪峰去世的新闻, 让我很担心自己的身体状况. 后来花了很多时间调节心态, 和朋友聊天寻求帮助和开导, 最终慢慢变好了 (虽然现在还是有点 blue). 我是这么做的:

  1. 心态上, 要明白一个道理: 活着就是为了开心. 一切会让自己不开心的事情都要尽力规避. 一切尽力而为都是应该在保证自己开心和健康的条件下进行的. 累了就睡觉, 不开心了就出去走走. 把心情调整好了, 才有精力来高效地处理工作.
  2. 学会控制自己的大脑. 人的一切意识和思维都是感知世界的过程, 世界给了我什么信号, 我就产生怎样的想法. 所以, 没有什么是「客观」地存在的, 我心中的一切观念和价值都是我自己赋予的. 我可以有意识地控制我的大脑思考什么问题、不思考什么问题, 而不是任由它随意运行. 这样的控制权能帮助我减少很多不必要的内耗. 在感觉不对劲的时候及时介入大脑的思考, 把它往更加积极的方向引导. 具体来说, 少思考和追问「最终的意义是什么」, 多关注当下的感受.
  3. 抓住一切机会睡觉, 睡眠充足了什么都变好了. 头不疼了, 心脏舒服了, 眼睛不酸了, 心情也变好了. 我论文截稿前一周几乎每天都保持 8h 睡眠, 但是再前一周平均只有不到 7h 睡眠, 这两周的心情差异特别大. 还有就是尽量不要熬夜. 同样睡这么久, 早起了就可以去好好吃一顿早餐, 晒晒太阳, 开启新的一天. 要是熬夜再睡到十点起床, 一整天的节奏都是乱的, 也容易不开心.
  4. 多感知大自然, 体会世界最原始和本真的幸福. 我有段时间会选择多花一些时间步行去实验室, 途中稍稍绕道经过一片小公园, 看着春天花花草草, 就觉得世界真美好, 还有很多东西值得我去热爱. 这一过程中同样可以感受到生命力的伟大, 对我的内心是一种很大的鼓舞. 活着就很好啦!
  5. 多说话, 和人交流. 社会性是人类文明的一个非常重要的特质, 可以说人类的基因就是离不开社会属性的存在的. 和朋友聊聊天就能获得一段时间的愉快心情, 长此以往也不会觉得孤单了.
  6. 培养长期的输出型兴趣爱好. 最近在练琴, 钩织毛线, 都是可以为自己以及身边人带来幸福感的活动. 还有就是, 我发现我越来越对游戏 (特指 DOTA2) 无感了, 感觉玩了一个小时之后就会比较空虚, 心情得不到滋养, 只会后悔自己没有珍惜时间. 而且高强度游戏很消耗精力, 感觉不太适合在忙的时候作为调剂品. 虚拟世界的一切都是瞬时刺激多巴胺的行为, 容易成瘾, 而且会让人丢失掉现实世界真正的美好之处. 所以, 远离小红书, 从现在做起 (笑).

Paper Reading