永远的初级工程师:AI 替你练不出来的技能
文章摘要
这篇文章发表在广告技术公司 Criteo 的技术博客上,作者 Elise Baturone 是一名刚毕业不久的初级软件工程师。文章探讨的是:在一个处处鼓励”尽量让 AI 智能体写代码”的环境里,新人该如何成长为资深工程师。
真正的担忧。 作者说,公司仍在招工程师,也仍然看重工程师,但每条”多用 AI 提效”的指示后面都附着同一句话:方向盘要握紧,别丢了对自己在做什么的理解。问题是,对刚毕业的人来说,”还在学自己在做什么”不是附加说明,而是工作本身。学校教的是”多写代码才能进步”,现在却被告知能不亲手写就别写。作者真正害怕的不是软件工程师消失,而是资深工程师消失:所有人都变成”永远的初级”,只能借助一个智能体去审查另一个智能体的产出。
先弄清目标。 作者先研究了两个问题:AI 到底改变了岗位要求的哪些部分?资深工程师具体是什么样?关于前者,业界共识大致是审查代码比写代码更重要,学语法和语言已经过时,公司还希望工程师关注 token 成本。关于后者,作者观察团队里的资深同事,总结出几个特征:能为自己上线的代码辩护,能论证设计选择而不只是”有个选择”,能看出智能体走偏了,知道什么时候该委派、什么时候该自己动手,而且愿意花时间教别人。作者据此画了一张成长地图,第一个里程碑是年底前获得晋升提名。
写 skill.md 的过程,反而暴露了自己的短板。 和很多工程师一样,作者一开始给模型写了一份 skill.md,让它像导师一样引导自己学习资深工程师的做法。写着写着发现,真正的差距不在智能体的行为,而在自己身上。于是文章的重点变成了四项需要自己练的能力:
- 提问(好奇心):让智能体在每次决策或改动后用苏格拉底式问题考自己,比如用自己的话解释、预测改了某处会坏什么、为某个取舍辩护。这些问题只有一半有用,但它们逼着作者仔细看计划和代码。作者建议:遇到看不懂的决定就让智能体解释,提到陌生概念就让它给出处,觉得不对劲就让它论证。让 AI 把有缺陷的方案讲出来,常常是它和你同时发现错误的方式。这会多花 token,但作者认为放慢节奏、真正理解后再上线的代码,在生产环境里出问题的概率低得多。
- 审查(模仿):资深同事在你代码上留过的每一条评论,都是现成的训练集。比如团队负责商品目录,每次新增实体类型,资深同事都会说”这和已有的某个很像”。作者于是把已有实体当模板,发现评审者会逐一审视每处偏离。看懂这个模式后,作者把它写进了 skill 文件,让智能体先找最接近的现有实现、说明偏离之处。作者自嘲这是”为了提升 skill 而写了个 skill”,但希望自己最终不是”一个有好 skill 文件的初级”,而是”写出那些评审意见的资深”。
- 手写(自主):作者在 skill.md 里规定,智能体可以随意只读探索,但在自己明确确认计划之前,不许改文件、跑迁移或提交。可实际上作者总是条件反射般地回一句”继续”,没学到什么。于是偶尔刻意用这个暂停自己动手改,最好挑已上线功能里的小改动。这样做的好处包括:亲手接触智能体搭的架构,能真切感受到哪里不对;知道代码”怎么做到的”,而不只是”做了什么”;更懂得节省 token,因为熟悉代码位置能省下文件搜索的开销,IDE 一键重命名也比让 AI 逐个文件改便宜;还能确认自信是靠能力挣来的,而不是靠工具。作者也坦言,入行本就是因为喜欢写代码。
- 向导师学习(协作):无论 AI 多强,都替代不了真正资深工程师的指导。作者的 skill 会在遇到需要团队判断的决定时提醒去问资深同事,甚至替作者起草 Slack 消息,但作者发现照抄消息很容易滑向照抄答案,”那才是真正的 AI 接管:你自己放任它发生的那种”。所以作者建议自己写问题,可以让 AI 先帮忙纠正理解,但不要害怕犯错,做那个敢问傻问题的实习生。
结果。 一开始每次用智能体都调用这份 skill,现在一天也打开不了一次。作者意识到,那份 markdown 文件写下的其实是”初级工程师应有的行为方式”;随着这些能力长在自己身上,对智能体的依赖越来越少。好奇、模仿、自主、协作都不来自智能体,而来自智能体运行时你选择做什么。作者提前拿到了晋升提名,最后呼吁资深工程师和管理层一起为新人留出学习空间:这种空间智能体给不了,只能由人来给。
HN 评论精华
讨论约 60 条,一部分在谈底层知识和”在挣扎中学习”的价值,另有相当多评论偏离主题:质疑文章是 AI 写的,以及吐槽 Criteo 这家广告追踪公司的域名被广告拦截器整体屏蔽。
关于学习与基础
- alexpotato 回忆 2002 年在一家调查雅虎财经论坛”拉高出货”骗局的公司工作,因为不知道 Perl 有现成的 HTTP 库,只好用原始 TCP socket 手写 HTTP 请求,非常痛苦,但学到了大量 HTTP、TCP、HTML 的知识,二十多年后还在用。他认为今天也没人拦着你做类似项目,比如从零构建 Linux(Linux From Scratch)。mlsu 反驳说,今天没人会付钱让你这样干,你会在做完之前就被开除,这才是真正的障碍。
- foobarian 引用陶哲轩的说法”有成效的挣扎”(productive struggle)。danny_codes 说这已经成了有钱人的奢侈品;a96 回应说”把一切学习和智力的基础当作富人的奢侈品,这想法真是太美国了”。
- sebastiansm7 做数据科学,正因为当年在难题上挣扎过,现在才敢把相当一部分工作交给 LLM 并能验证结果;但在自己没挣扎过的领域(比如 Web 开发),他只是在”凭感觉写”,并不放心上线自己不理解的东西。yourapostasy 认为,这种不确定感取决于决策的确定性有多高,就像今天没人在乎编译器怎样排列汇编,等 LLM 输出足够成熟,这个担忧也会消散。
- sublinear 认为大公司的开发工作从来不追求”快速上线”:写代码不是瓶颈,真正的工作是在需求模糊的会议之间弥合知识鸿沟,做利益相关方和 LLM 都帮不上的独立判断,”这本来就是资深工程师的工作”。
- bironran 坚信要”从上到下了解整个技术栈”,甚至认为每个开发者都该懂点汇编、玩玩用与非门搭计算机的 NAND game。他在公司组织过 Java 内部技术分享,但大多数开发者不感兴趣,担心人才管道正在断裂。shagie 提到”beneath and before”的说法:既要懂你所在层之下发生了什么,也要懂谁在调用你的代码;他认为这种好奇心的流失 2010 年就已经出现。giancarlostoro 也认为问题早在 AI 之前就存在了。
- ofjcihen 负责事件响应团队,要求初级成员始终理解模型在做什么,哪怕事后逐步复盘,并且要能在没有 LLM 时自己完成同样的事。
- pitched 认为让 AI 配合的技能和编程手艺是两回事,”就像把车送去店里换机油,就自称机修工”。dyauspitr 拿国际象棋类比:如果计算机在某领域全面胜过你,学它还有什么意义?到那时只剩观赏价值。
- jorgeleo 心情复杂:一方面,难道真以为能把思考外包给大语言模型?把流畅当成知识是一种很人性的错觉;另一方面,公开承认自己的成长过程需要勇气。RGS1811 则称赞作者的态度和方法值得钦佩。
偏题:是不是 AI 写的
- t0duf0du 说一看到”刚毕业的初级工程师,’还在学’不是附加说明,而是工作本身”这类句子就读不进去了。codessta、paimapi 指出文中大量”不是 A 而是 B”的句式和”金句式收尾”,paimapi 说 Pangram 检测结果约 25% 由 AI 生成,并讽刺说学写作最好的办法就是自己写。dofm 查到作者确有其人,曾是 Criteo 实习生,英语可能不是母语。_usefulcat 因为文中大量长破折号认定是 AI 写的;FrustratedMonky 抗议说自己在 AI 出现前就爱用破折号。knollimar 讥讽道:”写博客算不算其中一项技能?”
偏题:Criteo 与广告拦截
- tech-historian、Tade0、mooncakecat 等发现 uBlock Origin、Ghostery、Pi-hole 都整体屏蔽了 criteo.com 域名,页面显示不全。mcv 怀疑这是诱导人们解除屏蔽的手段,r_lee 觉得这种阴谋论很荒唐。laughingcurve 和 kartoshechka 则批评一家靠追踪用户赚钱的公司没资格教人怎么成长。