2025-04-06

软件工程师的疯狂挑战

摘要

本文以略带讽刺的口吻揭示了现代软件工程师面临的荒诞处境。从掌握多种编程语言、框架到被迫成为全栈工程师,再到学习Docker、AWS和Terraform等运维技能,工程师的职责不断膨胀。作者感叹软件行业缺乏专业分工,一个人被期望承担从前端到后端、从开发到运维甚至管理的所有角色,并以建筑行业的分工模式作为对比进行反思。

核心概念及解读

全栈工程师:指同时负责前端和后端开发的工程师,文中暗示这一角色的出现源于公司削减人力成本的决策

DevOps:开发与运维融合的实践模式,原本由系统管理员承担的基础设施工作被转嫁给开发工程师

技术栈膨胀:现代软件开发要求工程师掌握的工具和框架不断增加,从React、TypeScript到Docker、Terraform层层叠加

专业分工缺失:作者以建筑行业多工种协作为类比,批评软件行业期望单一工程师承担过多职责的不合理现象

技术复杂性:软件系统日趋复杂,每一层新技术的引入都有其合理性,但累积效应对个体工程师造成了巨大负担

成为软件工程师的疯狂

原文链接

06/04/2025

这是我经常思考的事情,因为我忍不住会想其他大多数工作是否也是这样。

成为软件工程师很艰难。你一开始就需要掌握几种编程语言和工具。但这还不够。公司还期望你了解他们使用的特定框架。这可能是Rails、Django、Laravel或其他什么东西。你还需要懂CSS。学习CSS需要一辈子——而且你还是不知道布局为什么会崩溃——但知道足够应付的情况是可行的。

你不太可能完全避开JavaScript。也许你很幸运,只需要在你维护的遗留应用程序中偶尔撒点jQuery。但事情总是在变化。

在某个时候,Facebook的人开发了React。结果证明,那家拥有数万工程师的公司一直以来有两个专长:前端和后端。编程界的集体意识决定React现在是构建软件的正确方式,但与此同时,公司们决定他们雇不起更多工程师。瞧啊,全栈工程师就此诞生,而你就是那个全栈工程师。开始学习React,并在此基础上构建REST API,你已经知道后端技术了。

这还不会结束。你知道你需要类型系统,对吧?加进TypeScript。你真的要在React中像个新手一样管理状态吗?加进Redux。你觉得自己很聪明,因为你避开了这两者?那就好好享受配置webpack/esbuild/rollup,再加上Prettier和ESLint的乐趣吧。

“你说,‘好吧,但我可以继续按照我一直以来的方式做事。以前这样很好用,我不需要React。’”当然可以。你完全可以偏离你所在快速移动、烧钱起飞的创业公司里所有人都在做的方式。告诉你的老板,你愿意教新员工——那些只听说过React的新人——关于服务器端渲染的乐趣。

哦,我们才刚刚开始。

在恐龙还漫游地球的时候,有一种职业叫做系统管理员。他们的全部工作就是确保你的后端运行良好。他们处理基础设施变更、数据库升级、系统升级、保持守护进程运行、重启,一切都由他们搞定。然后来了DevOps。某个缺钱的公司在某处决定,现在所有这些都由工程师来处理,大家都同意了。现在你需要学习Docker。哦,你的整个应用只是一个静态链接的单一二进制文件,你不需要Docker?那就学学Ansible吧,我希望你能乐在其中,搞清楚需要传递给SystemD的选项。

你甚至还没走到一半。现在你得学AWS。你不会像个农民一样用GUI来配置你的基础设施,所以你最好学学Terraform或Pulumi或其他什么。

你干得很好。你被提拔为经理。你需要学习另一份完全不同的工作。但没关系,因为这是终极目标。幸福。从现在开始,你需要做的一些事情包括:

  • 估算截止日期
  • 给队友分配任务
  • 编写任务规格
  • 参与年度审查
  • 在产品会议上提供有价值的反馈
    你最好希望到这个时候你公司的人数已经翻了四倍,否则你将同时做管理层工作和所有上述工作。

事情总是可以变得更糟。几天前,一个招聘者联系我,关于一个秘密公司的工程职位。他们决定需要高级水平的Rails、Hotwire技能,还有令人难以置信的原生移动开发技能。为什么不再加上内核和编译器开发呢,干脆一起加进来吧?

软件变得越来越复杂。所有这些复杂性都有其原因。但特化去哪了?当一座房子在建造时,涉及很多人:建筑师、土木工程师、管道工、电工、砖瓦工、室内设计师、屋顶工、测量员、铺路工,你能想到的都有。你不会期望一个人,甚至一个整家公司,能做所有这些事。

也许一个未来,我们可以用几个提示就构建整个应用并不那么坏。