第36期 - 程序员的成长

封面还是我去武汉的时候拍的(没错,素材管够),这云朵打散的真的像油画一样

记录自己的%2,aka每周摸到的🐟(不定期更新

程序员如何成长

之前我一直觉得程序员成长就是应该多学些新技术,多看些项目实战教程提升自己。但这周看了这篇文章后,我的观点有所不同了,作者提出了两个概念,“养宠物”和”打怪兽”。
从零开始做新项目比喻为”养宠物”。因为它既能毫无负担地学习新技术,还能抛开白天工作中的螺丝钉角色,它能给你带来无与伦比的掌控感,但这种工机会是可遇不可求的。维护遗留系统依然是我们大部分人的工作,也就是”打怪兽”。接下来作者着重介绍了为什么要打怪兽。
之所以称之为”打怪兽”,不仅仅是因为你接触的代码会超出你的预期,甚至想象不到你会遇到什么样的困难:

这个一千行代码的文件应该从哪开始读起? - 我如何才能让代码进入这个分支? - 你发现项目用到的一个框架没有任何文档,在 github 上也找不到源码,原来是上一个离职的老大自己写的 - 项目的打包工具用的既不是webpack 也不是 grunt ,而是 shell 脚本 - 现在需要你优化一个超过包含上百个组件的 React 应用的性能

怪兽依然是一个友好的比喻,此时此刻你至少还能具象化,意味着它造成破坏的手段和范围是可以预知的。但在工作中我们实际遇到的问题无法预测。那么我们为什么要打怪兽呢?
如果我们工作中绝大部分人,绝大部分时间面临的都是怪兽,那么逃避它就是自欺欺人。说不实际的,因为打怪兽比养宠物更难—为什么“难”重要?因为难的事情才能带来成长,为什么要成长?承认吧,因为如何成长是当代人,包括你我他在内焦虑的源泉。通俗点说打完怪兽你就是见过“地狱”的人了,还怕什么。
另一方面,养宠物的风险在于,它会让我们不自觉的陷入舒适区中。你能够选择当下最流行的框架和工具,工具正在变得自动化。并且帮助我们专注于业务开发这件事具有迷惑性。因为它能替你做很多事情,会让你以为具备同样的开发能力的错觉(这也是我这周经历到的,因为接手了一个烂项目,而里面又没有我认为理所当然会出现的组件可使用。导致我的开发处处碰壁)。例如parcel可以无需任何一行配置就把脚本打包的漂漂亮亮的,但你可能对背后的缓存策略一无所知。当每个人都在简历上强调精通xx框架的今天。我们应该问自己除了框架我还有没有更有力的竞争力。
打怪兽的另一层含义是经历实战。“教你用xx打造xx”这类教程的前置条件太美好了:你有无限的业余时间投入其中,你就是自己的产品经理。但实际工作中我们永远是戴着镣铐跳舞。例如糟糕代码不一定是个人能力的结果,考虑到当时交付压力,团队状态和历史包袱,换做你不一能做的更好。“所以大部技术决策其实是在恶劣环境下做出的,然而学习如何在不同环境做出恰当的反应,我不认为这首脱离实践可以达成的”。
另一个问题是它缺少对方案的闭环验证:我不确定有多少此类项目投入到真实的运营中,如果没有,那么它的代码不一定是有效的,例如异常捕获功能,日志输出,是否能在每秒上千条日志海洋里甄别到它们?
退一步讲,即使方案完美无缺,我们还需要考虑成本如何。人力成本,时间成本。如果预算只有三成,选择留下哪部分的功能?或者说如何用三成的预算做出来一个及格的功能比纯粹的代码更棘手。“说实话「时髦」技术表达的并不一定都是褒义,它意味着技术的关注度仍在持续提升中,意味着它还可能没有被大规模地应用,也意味着我们其实有更成熟的方案可供选择。决策者都厌恶风险,因此在推广新方案时风险可控也是因素之一。除此之外代码的学习曲线如何?代码库毕竟在依赖团队维护,你应当考虑到团队下限对于新技术的接受程度。”而这些东西,都是通过“打怪兽”的过程中习得的。

音乐分享

《分分钟需要你 - Live》
这首歌是真的好听,我之前还以为林子祥属于那种费玉清那种类型,唱的都是些我讨厌的父母辈喜欢的那种歌

播客和文章

《观《不想干到 35 岁被优化,我想学门手艺自己干,有哪些建议?》有感,想回复的内容太多,单独开一贴》
这个帖子的评论很有意思,和我看到的戒戒13集一样的感觉

《Watch this if you use shadcn/ui》
shadcn的理念很先进,提供的是一个模块,代码就在你本地,你可以根据自己的意愿去定制化或修改。在生产项目中就可以进行技术栈的调整,例如radix中有些性能问题,你可以换成例如base-ui,或者自己把代码重新写一版。用我最近学到的一个设计理念感觉就是依赖注入。