2024年的记忆碎片
今年写的文章很少,但其实我的表达欲并没有减少,核心原因是行业的发展太过迅速,能留给自己的时间越来越少。所以这次把自己平时想要表达的东西,汇总成一个年末的blog,聊的东西会很多很杂,不像以前纯技术向的blog,本篇不涉及任何技术和细节,只聊头脑里的想法,权当作是对想法的“开源”。
家的实感
要说今年生活上最大的变化就是装修新家,虽然买房这件事已经过了很久,北京的房价在这一年也是逐渐下跌,但是每天结束了忙碌的工作,能够回到自己温馨的家里,还是会有一种安心的感觉。然而,装修毕竟是一项工程,面临的是对于现实的妥协和权衡。很感激老婆在这个过程中辛苦地和各方沟通,让我能把精力集中在繁忙的工作中;很感激xxr同学在装修过程中提供的物料资助,让本不富裕的小家庭在没有雪上加霜;很感激爸妈能够千里迢迢来北京帮忙收拾、砍价,给不懂街头智慧的小两口狠狠上了好几课。
最后放一张我最喜欢的手办柜照片吧,也许将来有了小孩子,这些东西又会消失,但至少现在,他们因为我而聚集在这片空间里。
家于我而言是一种感觉和记忆,而房子只是承载这一切的钢筋和水泥。
写有信息增量的文字
过去的一年毫无疑问是LLM(大语言模型)突飞猛进的一年,这也是我的blog没怎么更新的原因。一方面是因为工作的忙碌,抽出来时间写东西就已经很难了;另一方面,就是每当我静下心来开始写点东西,很快就会有类似的文章出来,次数多了,也逐渐总结了一些写blog的方法论:
- 不写教程类的blog。虽然这个想法有点傲慢,但是我觉得一个仔细阅读文档就能搞清楚的内容,在大模型时代,存在感会越来越弱。blog应该做深度的串联和挖掘,而不是简单的陈述。
- 不写自己没有实践过的内容。这个很好理解,没有足够的实践,很难谈上真正的理解。
- 不写在一段时间内别人也会写的内容(除非自己能看的相对更深入)。如果对于其他人的观感来说,A做和B做没有差别,那么这样的blog就是纯粹比拼速度,显然不是我擅长的。
虽然看起来方法很多,但是本质上只有一个原则:提供信息增量。在这个原则下,去年还是留下了一篇关于RAG的博客,虽然只有一篇,但写的过程还是花费了不少精力的。对我来说,花费心力去把一件事情做好做扎实,要远胜泛泛地完成很多事情。
把手弄脏
今年技术的发展完全可以用“日新月异”来形容,而作为一个不“把手弄脏”(get your hands dirty)就不算了解的人,我也在不断地陷入兴奋和放下兴奋的情绪循环中。作为这种循环的副产物,experiments 也很自然地产生了。这个repo包含了一些我在好奇和探索中留下的practice code,如果你和我本质上是一类的人,翻看它你也许会会心一笑,或者下面这些碎片也许会唤起你自己的一些记忆
- 因为好奇LLM训练的各种Parallel技巧,我拿python对照gloo简单写了一个mpi的接口。实现的过程中,先是更深刻地理解了ring all-reduce为什么等价于reduce-scatter + ring all-gather,接着惊叹于dissemination barrier算法设计的精妙。到最后,用这些mpi算子,写了DeepSpeed Ulysses的numpy版本,当写的test case第一次通过的时候,仿佛又回到了大一时第一次看到“hello world”打印在屏幕上的时光。
- 一次和朋友出去爬山,闲聊的时候他说了一句“其实并行排序算法也很有意思”,当时没放在心上,但在某一次坐地铁的时候,突然想起来这句话,于是搜到了nv的一篇教程,后来花了一个星期在通勤路上拿着ipad琢磨bitonic sort为什么能work,又应该怎么写。完成实现的那一刻,像是有阳光照在一个隐秘的角落,而角落里本该枯萎的植物发了芽。
也许大多数人看到上面的记忆碎片会觉得很无趣,但我相信,一定会有人理解这种快乐,虽然不像Aha moment那么令人欢欣鼓舞,但也足够让人喜悦。打开引擎盖,重新造齿轮,然后看着新的齿轮也可以正确地运转,是令人快乐的!
一剂解药
这几年,其实有越来越多的人认识到了程序员工作的本质:技术工人。显然,这份工作并不掌握任何的生产资料,也不像体制内的大部分工作,能依附于一个巨大的造血系统。所以行业内的绝大多数人,本质上在通过出售自己的脑力和体力维持生活。即使转向了管理,只是延长了自己的职业生涯,本质属性仍未改变,所以很多人会焦虑,我也曾经是其中的一员。
不焦虑不代表问题已经被解决了,而是这个问题没有那么重要了。也许下面这段话听起来有些鸡汤,但我认识到:在把事情做好之前,过早地担忧结果的好坏是没有意义的。在迎来结局之前,只能打好自己手里的牌。就像没有人会因为生命终将逝去,就放弃认真地活着。或许一个更为豁达的态度是:纵使生命终究虚无,我们仍可以在这片荒芜之地,尝试种出自己的参天大树。游戏科学CEO冯骥在B站的跨年晚会上留下了这么一首诗:“喜见料峭风,乐听奔雷水。天命不由己,未竟亦可为。”我想,内核是一样的。
越过山丘,或许是另一个山丘。但是爬山的过程,就是对登山者最好的奖励。对我来说,找到好玩有趣的事情,剥开它的外壳,重新造一遍轮子,就像是在山上留下了自己的足迹。人生苦短,唯有这些探索与创造,见证了我们如何塑造自己。
人们常说焦虑是对自由的眩晕,而好奇和长期是我开给自己的解药。
苦涩的教训
既然说到了技术工人,那就来聊一聊工作。实话说,这一年来的工作体验实在说不上好,频繁地rush和救火,毫无规划的deadline,令我不禁怀疑身在何方。不过,这些糟糕的体验也不全是坏事,我也能比上份工作,更能看清更多的东西。除了典型的“世界是个草台班子”这种论调,我想聊点别的。
首先从最高层看,“对于大多数公司来说,职场是政治生态的延伸”。决策层有着最高的话语权,把控整个方向,所以为了争夺话语权,政治斗争是从来不会少的,为了显示自己的重要性,总是有各种办法争取更多的人力(毕竟人力是最重要的资源之一)掌握资源的人自然掌握权力。裁员可能仅仅是权力的再分配,是历史的进程,和个人的努力与否无关。
接着从中层看,其实他们的工作目标从来不是让公司的客户满意,或者扎实地完成好某个事情,而在于使那些控制他们加薪和晋升的人满意。虽然我不想承认,但这也许是职场上”苦涩的教训”。经济学领域有一个著名的Goodhart’s law,讲的是“一项指标一旦变成了目标,它将不再是个好指标”,这个”make boss happy”的“职场游戏”,也只是这一法则的另一种注脚。
最后,从我自己的视角来看。其实工作的过程肯定是伴随着痛苦的,而免遭痛苦的方式是有很多的。但是在这里,我想放一句在《看不见的城市》摘录的话来与君共勉:免遭痛苦的办法有两种,对于许多人,第一种很容易:接受地狱,成为它的一部分,直至感觉不到它的存在;第二种有风险,要求持久的警惕和学习:在地狱里寻找非地狱的人和物,学会辨别他们,使他们存在下去,赋予他们空间。
“良质”和“时间幻觉”
今年看书的时间被大大地压缩了,工作的疲劳除了消耗人的体力之外,也会很大程度上削减人的“审美体力”,很可能在工作已经很疲惫的时候,回家只想刷刷手机/短视频,玩一些不费脑子的小游戏。虽然我也有过这样的日子,不过今年还是很庆幸完整看完了一部分书籍。而我最喜欢的,是《禅与摩托车维修艺术》和《悉达多》。虽然看起来风马牛不相及,但是这两本书要表达的内核其实是完全一致的。
《禅与摩托车维修艺术》的核心是“良质”,但是作者在书中拒绝给出任何关于良质的定义,所以下面聊的,是我的理解:从英文视角来看,良即good/high,质即quality。但是“良质”的含义其实并非简单的“高质量”这么简单,它其实在表达一种多数人心中关于“好”的准则和判断,它既是主观的,但也是客观的。
举一个典型的例子,同样是中文的电影,也许有某个人会认为《逐梦演艺圈》比《霸王别姬》好看,这个是很主观的;但是如果你找一千个人打分然后取平均,《霸王别姬》一定会比《逐梦演艺圈》高,这个是很客观的。于是,我们就可以说《霸王别姬》比《逐梦演艺圈》更“良质”,但是“良质”并不是一种衡量尺度,而是你判断A比B更“良质”的内心感觉,阳明心学里面也管这个叫良知(好的认知)。多数人趋同的主观乃是一种客观,所以良质即是主观的,但也是客观的。
如果你在参与某项工作,要判断它是否良质也很简单:如果你很自豪地告诉别人某项工作是你参与的,那这个工作就是良质的,否则就是“普质”的。《人件》里面有一个说法:工程师应当拥有否决发布未成熟产品的权利,其实就是在反对普质,追求良质。我相信大部分软件工程师会无比同意我这句话:花费时间精力去维护连自己都不关心的程序,实在是一种煎熬。
《悉达多》则揭示了一个更为深邃的观念:”时间是一种幻觉,而所有的分界也是一种幻象”。我们常说less is more, slow is fast, empty is full. 这些看似矛盾的观照,实则指向统一。二元对立是人心刻意为之的划分。正如河流不因我们划分上游下游而有所断裂,时间的本质亦是浑然一体。在永恒的时间长河中,我们执着地要用年华、季节、今朝、明昔来丈量它、切割它,却忘了这些概念本就是人为的虚设。时间恰如永不停息的流水,不始于过去,不终于未来,而是永恒、完整地存在于此时此刻。所谓时间的概念,更像是人心投射的幻影。
向前看,别回头
整个季节将它结成了琥珀
块状的流淌,具体的光芒
在它背后是些遥远的事物
——《漫长的季节》
走在时代的分叉路口,没有人知道前方是坦途亦或猛兽。也许会有后来的登山者发现了我们留下的路标,笑笑说这是些很遥远的事物。回头去看,也许只是浮尘微粒在风口之下的聚散,又或者时间会将我们的想法凝成琥珀,但这些都不重要。
重要的是继续往前走,哪怕前方一无所有,哪怕前方无人等候。