我经常思考这个问题,因为我不禁想知道其他大多数工作是不是也像这样。
当一名软件工程师很辛苦。你一开始就需要掌握几种编程语言和工具。但这还远远不够。公司希望你了解他们使用的特定框架。那可能是 Rails、Django、Laravel 或其他什么框架。你还需要 CSS。学习 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。你不能像个菜鸟一样用图形界面配置基础设施,所以你最好学学Terraform、Pulumi之类的工具。
你表现出色,被提拔为经理。你需要学习另一项全新的工作。但这没关系,因为这是最终目标。太棒了!以下是你需要做的一些事情:
- 估算截止日期
- 给队友分配任务
- 特定任务
- 参与年度评估
- 在产品会议上提供有价值的反馈意见
- 你最好祈祷你的公司到这个时候员工人数已经翻了四倍,否则你不仅要负责管理工作,还要承担以上所有工作。
而且情况总有可能更糟。几天前,一位猎头联系我,说某家神秘公司有个工程师职位空缺。他们要求应聘者具备 Rails、Hotwire 以及(令人难以置信的是)原生移动开发方面的高级技能。为了更全面,他们干脆把内核和编译器开发也加进去了。
软件变得越来越复杂。所有这些复杂性都有其存在的理由。但是专业化去哪儿了?建造房屋时,会涉及到很多人:建筑师、土木工程师、水管工、电工、砌砖工、室内设计师、屋顶工、测量员、铺路工等等,不胜枚举。你不会指望一个人,甚至一家公司,能够包揽所有这些工作。
也许未来只需几个提示就能构建整个应用程序,这并非坏事。
