Addy Osmani · 2024-12-24

为你的软件工程职业生涯做好未来规划

摘要

本文以务实视角分析了大型语言模型对软件工程职业的实际影响。作者指出AI工具正在增强而非取代工程师,并针对初级、中级工程师分别提出适应策略。文章给出六项未来保障建议,包括深化计算机基础、发展系统设计能力、建立领域专长、精通开发运维、提升沟通技巧以及积极使用AI工具,同时强调设计思维和产品意识的重要性。

核心概念及解读

LLM编码助手的能力边界:当前AI工具擅长生成样板代码和实现文档完善的算法,但在处理复杂遗留系统重构、隐含业务逻辑和微妙边缘情况时仍存在明显局限

初级工程师的角色转变:入门级岗位不会消失但门槛将提高,核心技能从编写基础代码转向理解系统架构、审查AI输出、识别安全隐患和编写全面测试

中级工程师的提升方向:传统实现类任务日益自动化,工程师需向系统设计与架构、组件边界管理、性能优化和跨职能沟通等高价值领域发展

设计思维与产品意识:随着AI降低实现门槛,理解用户需求、工作流程和痛点的能力变得更加关键,工程师需要培养更强的产品思维和与设计团队的协作能力

AI增强型工作流:将AI视为工作流的组成部分而非威胁,用于代码搭建、快速原型、结对调试和优化建议,同时保持人类在架构和设计层面的主导判断

未来工程职业生涯的实用策略

今天,我们正面临大型语言模型(LLM)带来的新一轮自动化浪潮。围绕这些工具的讨论常常在两个极端之间摇摆——要么预示着我们所知的编程时代的终结,要么将其贬低为仅仅是复杂的自动完成工具。这两种观点都失之偏颇。

让我们以务实的视角,基于当前的技术能力和行业演变的历史模式,来审视AI对软件工程职业生涯影响的现实情况。

理解当前LLM的能力

在讨论职业策略之前,我们需要准确评估LLM能做什么和不能做什么。过去几年,我一直在将各种AI编码助手集成到我的工作中,结果颇具启发性

这些工具在某些任务上表现出色。它们可以快速生成样板代码,在编程语言之间进行翻译,并实现文档完善的算法。在使用像React这样的流行框架时,它们通常能生成只需少量修改即可使用的代码。例如,让Claude Sonnet或GPT-4o创建一个基本的REST API和前端,通常会得到一个可行的实现,并带有错误处理和基本验证。你可能正通过Cursor、Copilot或Cline等工具层来完成这些工作。

然而,在更复杂的场景中,它们的局限性就显现出来了。最近,我尝试使用各种LLM来帮助重构一个遗留系统,该系统复杂的业务逻辑分布在多个服务中。这些工具始终无法掌握组件之间隐含的关系以及现有代码处理的微妙边缘情况。它们生成了看似合理但根本上存在缺陷的解决方案,如果不经过仔细审查就实施,会引入严重的错误。

我观察到的一个特别令人担忧的模式是,这些工具会自信地产生错误或过于复杂的解决方案。初级开发者渴望利用AI辅助,有时会在没有充分审查的情况下接受这些输出,导致技术债务或安全漏洞。我亲身经历过一些案例,初级工程师要么因为盲目听从AI建议而实现了完全无法工作的解决方案,要么创建了不必要的复杂实现,原因在于他们缺乏充分的理解。这再次强调了扎实的基础知识和批判性审查技能的重要性。

AI已经开始取代软件工程师了吗?

最近在旧金山拍摄的一张真实照片,“AI即将抢走你的工作”

在深入探讨职业影响之前,让我们先解决那个显而易见的问题:在AI辅助开发工具出现大约两年后,实际发生了什么变化?

  • AI辅助开发已经存在约2年多了,但没有出现AI取代工作的广泛案例
  • 众多旨在创建“AI工程师”的初创公司正在涌现(如Devin、Magic.dev等)
  • GitHub Copilot、Claude和Google的IDX等工具正变得主流
  • 像Bolt.new和Lovable.dev这样的平台服务于特定用例,但并未取代传统开发
  • 重要的是,没有经验证据表明大规模采用导致工程师被取代

理解这个背景对于如何在不过度反应的情况下适应至关重要。现实情况是,虽然AI工具正在改变我们的工作方式,但它们更多是在增强而非取代人类工程师。

初级工程师的困境

与普遍猜测相反,初级工程岗位不太可能完全消失。然而,它们将发生显著转变。通过实现基本的CRUD应用程序和简单功能来学习的传统路径将会演变,因为这些任务正变得日益自动化。

这种演变给处于职业生涯早期的开发者带来了挑战和机遇。入门级职位的门槛可能会提高,需要更强的基础知识才能有效地审查和验证AI生成的代码。然而,这种转变也意味着初级工程师可能在职业生涯早期就能接触到更有趣的问题。

考虑一个典型的初级任务:按照现有模式实现一个新的API端点。以前,这可能需要一天的编码和测试。有了AI辅助,实现时间可能缩短到一个小时,但关键技能变成了:

  1. 充分理解现有系统架构,以便正确指定需求
  2. 审查生成的代码,检查安全隐患和边缘情况
  3. 确保实现与现有模式保持一致性
  4. 编写全面的测试来验证业务逻辑

这些技能无法单纯通过看教程或提示AI来学习——它们需要实际操作生产系统的经验和高级工程师的指导。

中级工程师:适应的必要性

中级工程师可能面临着最大的演变压力。许多传统上占据他们时间的任务——实现功能、编写测试、调试直接的问题——正变得越来越可自动化。

这并不意味着过时;这意味着提升。焦点从编写代码转向:

  1. 系统设计与架构 与其花费数天实现一个新功能,中级工程师可能会将这些时间用于设计能够优雅处理规模和故障模式的健壮系统。这需要深入理解分布式系统原理、数据库内部机制和云基础设施——这些领域目前LLM提供的价值有限。
  2. 集成与边界 随着系统变得越来越复杂,理解和管理组件之间的边界变得至关重要。这包括API设计、事件模式和数据模型——所有这些都需要仔细考虑业务需求和未来的灵活性。
  3. 性能优化 虽然LLM可以建议基本的优化,但识别和解决系统范围的性能问题需要深入理解整个技术栈,从数据库查询模式到前端渲染策略。
  4. 跨职能沟通 随着实现时间的缩短,在业务需求和技术解决方案之间进行转换的能力变得更有价值。能够与产品经理、设计师和其他利益相关者有效沟通的工程师将变得越来越有价值。

职业生涯未来保障的实用步骤

基于这些观察,以下是在AI增强的未来中维持和提升工程职业生涯的具体步骤:

1. 深化你的计算机科学基础

  • 超越基础的数据结构和算法
  • 分布式系统原理
  • 数据库内部原理和查询优化
  • 网络协议和安全

这些知识有助于你理解AI生成代码的影响,并做出更好的架构决策。

2. 发展系统设计专业知识

练习设计能够大规模解决实际问题的系统。这包括:

  • 负载均衡和缓存策略
  • 数据分区和复制
  • 故障模式和恢复程序
  • 成本优化和资源管理

无论代码如何生成,这些技能都保持其价值,因为它们需要理解业务需求和工程权衡。

3. 建立领域专长

专注于人类理解仍然至关重要的复杂领域:

通用领域:

  • 有监管要求的金融系统
  • 有隐私担忧的医疗保健系统
  • 有严格性能要求的实时系统
  • 机器学习基础设施

软件工程特定领域:

  • 前端工程: 掌握高级状态管理模式、Web Vitals优化、现代构建工具和框架内部原理
  • 后端工程: 深入研究数据库内部原理、分布式系统和可扩展性模式
  • 移动开发: iOS/Android架构模式和性能优化的平台特定专业知识
  • DevOps: 容器编排、云基础设施设计和站点可靠性工程
  • 安全工程: 威胁建模、安全系统设计和合规框架

领域专长提供了当前AI工具所缺乏的背景知识,并帮助你在何时何地以及如何应用它们方面做出更好的决策。

4. 精通开发运维

随着代码生成变得更加自动化,理解系统如何在生产环境中运行变得更加有价值:

  • 监控与可观测性
  • 性能分析和优化
  • 安全实践和合规性
  • 成本管理和优化

5. 提升沟通技巧

  • 需求收集与分析
  • 技术写作和文档编写
  • 项目规划和估算
  • 团队领导和指导

6. 使用AI!

记住,AI应该是你工作流程中不可或缺的一部分,而不是需要抵制的东西。将AI融入工作的实用方法包括:

  • 使用AI搭建初始代码结构
  • 利用AI进行快速原型设计和概念验证
  • 与AI结对编程以加快调试和问题解决速度
  • 使用AI建议优化方案和替代方法
  • 让AI处理重复的代码模式,而你专注于架构和设计决策

设计的必要性:超越纯粹的工程

有一种日益增长的说法认为,初级软件工程师应该“直接辞职”——随着AI处理实现细节,纯粹的工程技能将变得过时。虽然这个结论言过其实,但关于工程之外技能(如设计)重要性的讨论值得我们关注。

成功的软件创造从来不仅仅需要编码能力。正在改变的不是工程的消亡,而是纯粹实现壁垒的降低。这种转变实际上使得工程判断和设计思维变得更加关键,而不是不那么重要。

想想是什么让Figma、Notion或VS Code这样的应用程序成功。不仅仅是技术的卓越——更是对用户需求、工作流程和痛点的深刻理解。这种理解来自于:

  • 用户体验设计思维
  • 深厚的领域知识
  • 对人类心理和行为的理解
  • 考虑性能、可靠性和可扩展性的系统设计
  • 与商业模式的契合

最优秀的工程师从来都不只是编码员。他们是既理解技术约束又理解人类需求的问题解决者。随着AI工具降低了实现的摩擦,这种整体理解变得更加有价值。

然而,这并不意味着每个工程师都需要成为UX设计师。相反,这意味着:

  1. 培养更强的产品思维能力
  2. 与设计师和产品经理建立更好的协作技能
  3. 理解用户心理和行为模式
  4. 学习做出支持用户体验目标的技术决策
  5. 在技术优雅与实用用户需求之间取得平衡

未来属于那些能够弥合人类需求和技术解决方案之间差距的工程师——无论是通过自己培养更好的设计敏感性,还是通过与专业设计师进行更有效的协作。

展望未来:下一个十年

软件工程的下一个十年可能会见证我们工作方式的显著变化,但不一定是我们在成就方面的变化。软件工程的基本挑战——理解需求、设计可扩展系统、维护可靠性、确保安全——基本保持不变。

将会改变的是我们应对这些挑战的方式。AI工具将成为我们开发工作流程中不可或缺的一部分,就像git和持续集成已成为标准实践一样。最成功的工程师将是那些能够有效地将人类洞察力与AI能力相结合,以更快地交付更好解决方案的人。

这并不意味着要成为AI研究员或提示工程专家。相反,应专注于培养那些能让你有效利用这些工具,同时保持判断力知道何时不使用它们的技能。

结论

软件工程职业生涯的未来不在于抵制AI工具,而在于理解如何有效利用它们,同时发展那些仍然是人类独有的技能。专注于在AI目前难以胜任的领域建立专业知识:系统设计、架构决策以及将业务需求转化为技术解决方案。

请记住,软件工程一直以来首先是关于解决问题,其次才是编码。随着编码变得更加自动化,理解和解决复杂问题的能力变得更加有价值。最成功的工程师将是那些能够有效地将人类洞察力与AI能力相结合,以更快地交付更好解决方案的人。

关键是要保持务实,专注于交付价值。学会在有意义的地方使用AI工具,但不要将它们当作拐杖依赖。继续发展你的基础技能和领域专长。最重要的是,记住我们的领域一直以来都关乎持续学习和适应——这只是那个持续故事的最新篇章。

未来不属于那些能生成最多代码的人,而是属于那些能够最好地理解和解决现实世界问题,并恰当利用所有可用工具——包括AI——的人。

特别感谢 Hassan Djirdeh 的审阅和反馈。

进一步阅读和观看