原文链接:Beyond the 70%: Maximizing the human 30% of AI-assisted coding
作者:Addy Osmani
作者信息:Google Chrome 团队成员,目前专注于浏览器性能领域,著作有:Learning JavaScript Design Patterns、Leading Effective Engineering Teams、Stoic Mind、Image Optimization 等
本文是对先前文章"70% 问题:AI 辅助编程的残酷真相"的补充说明。
像 Cursor、Cline、Copilot 和 WindSurf 这样的 AI 编码助手已经彻底改变了软件开发的方式,它们承担了大量重复性工作和代码模板的编写。然而,经验丰富的开发者和行业领袖指出,软件工程中仍有约 30% 的部分是 AI 难以胜任的------这决定了软件从简单的原型到成熟产品的关键差距。这部分工作包含最棘手的挑战:理解复杂的需求、设计易于维护的系统、处理各种异常情况以及确保代码的正确性。简而言之,AI 能生成代码,但却难以胜任真正的软件工程。
蒂姆·奥莱利(Tim O'Reilly)总结了几十年来的技术变革,指出,每一次自动化浪潮都改变了我们的编程方式,但并未改变我们对优秀程序员的需求。这并非编程的终结,而是"我们今天所知的编程方式的终结",这意味着开发者的角色正在演变,而非消亡。
如今,工程师面临的挑战是:充分利用 AI 的优势(约 70% 的工作),同时提升处理剩余 30% 工作所需的专业技能和洞察力。本文将深入探讨专家观点,分析哪些人类技能仍然至关重要,并探讨高级和初级开发者应该如何与 AI 协同发展。
目标:提供切实可行的建议,帮助大家最大程度地利用那不可或缺的 30%,并为各个级别的工程师提供可执行的策略。
70% 问题:AI 的优势与不足
AI 编码工具在某些任务上表现卓越。它们擅长生成代码模板、编写常规函数,并能快速完成项目的大部分工作。很多开发者发现,AI 助手能完成约 70% 的需求。
这通常是那些遵循既定模式或常用框架的简单代码。一位 Hacker News 用户评论道,AI 善于处理软件的 "偶然复杂性" (那些重复、机械性的部分),而 "本质复杂性" ------理解和解决问题内在的复杂性------依然需要人类来完成。用弗雷德·布鲁克斯(Fred Brooks)的经典理论来说,AI 能解决开发过程中的偶然问题,但无法解决内在的难题。
这些工具的不足之处在哪里呢?经验丰富的工程师普遍认为,存在一个"最后一公里"的瓶颈。AI 能生成看似可行的方案,但最后的 30%------处理异常情况、优化架构以及确保代码的可维护性------却"需要专业的人类技能"。
例如,AI 生成的函数可能在基本场景下运行良好,但却无法自动处理异常输入、竞争条件、性能限制或未来的需求,除非你明确地告知它。AI 能帮助你完成大部分工作,但最后关键的 30%(异常情况处理、代码维护和架构设计)则需要专业的人类经验。
此外,AI 容易生成看起来合理,但却错误 的代码。它可能引入细微的 bug,或者"凭空捏造"不存在的函数和库。史蒂夫·耶格(Steve Yegge)幽默地将大型语言模型(LLM)比作*"高效率的初级程序员"------速度快,热情高,但却"可能不太靠谱"*,容易想出一些疯狂或不切实际的方案。
耶格认为,LLM 生成的代码乍一看很完美,但如果经验不足的开发者直接采用,接下来的几周可能会出现各种问题(甚至灾难) 。AI 并不真正理解问题,它只是将一些通常有意义的模式组合在一起。只有人类才能判断看似完美的解决方案是否暗藏隐患。西蒙·威利森 (Simon Willison) 也认同这一点,他发现 AI 提出的一个巧妙的设计方案,实际上只有对问题有深入理解的资深工程师才能看出其缺陷。所以,AI 的自信程度远超其可靠性。
重要的是,当前的 AI 无法创造超越其训练数据范围的全新的抽象概念或策略。它们不会发明新的算法或架构------它们只是对现有知识的重新组合。它们也不会为自己的决策负责。正如一位工程师所说, "AI 的想法不会超越其训练数据,它们也不会为自己的工作负责。"
这意味着创造性和分析性思维------决定做什么 、怎么做 以及为什么做 ------仍然是人类的专属领域。总之,AI 是开发者的效率倍增器,它能快速完成 70% 的重复性工作。但它并非万能的,无法取代人类的判断力。软件工程中剩余的 30%------那些最难的部分------仍然需要训练有素、思考严谨的开发者才能完成。而这些正是我们应该专注培养的核心技能 。正如这个帖子中所述:"AI 是强大的工具,但并非万能药......人类的判断力和良好的软件工程实践仍然必不可少。"
保持必要的核心工程技能
为了在 AI 辅助开发的时代取得成功,工程师应该加强那些 AI 难以模仿的技能和实践。这些能力将长期保持重要性,无论工具如何发展。重点关注以下几个方面:
-
系统设计与架构思维: 设计一个完善的系统需要理解各种权衡、限制以及全局视角,而不仅仅是编写一些函数。AI 可以生成代码,但无法自动选择最优的架构。系统的整体设计 ------组件间的交互、数据流向以及如何确保系统可扩展性和安全性------这属于那需要人类智慧的 30%。高级开发者长期掌握此项技能,初级开发者也应积极学习。应遵循各种设计模式和原则(例如,关注点分离、模块化),以确保 AI 生成的方案易于维护。记住,优秀的架构并非偶然产生,它需要经验丰富的人类工程师来掌控。
-
处理异常情况及模糊性: 真实的软件系统充满了各种意外情况和需求变更。AI 通常只处理常见情况。开发者需要不断追问"如果......会怎样?"并寻找潜在的弱点。这里需要的核心技能是批判性思维和预见能力 ------列举出各种异常情况,预测可能出现的故障并通过代码或设计来解决。这需要考虑到空值输入、网络中断、异常用户行为以及系统间的集成。领域知识也非常重要:理解业务环境或用户环境能帮助我们发现 AI 可能忽略的异常情况。经验丰富的工程师会习惯性地考虑这些情况;初级工程师则需要系统地测试边界条件并质疑各种假设。
-
代码审查与质量保证: 由于 AI 能够生成大量代码,对代码进行严格审查和测试就变得更加关键。"每个人都必须更加重视代码测试和审查,"史蒂夫·耶格强调道。将 AI 生成的代码视为初级开发人员的代码------你就是代码审查员,负责发现其中的 bug、安全漏洞或不规范的实现。这要求开发者拥有扎实的单元测试、集成测试和调试 技能。编写高质量的测试能帮助你深入理解需求并验证代码的正确性。假设所有代码都是有问题的,直到证明其正确性为止。正如一位开发者所说,AI 往往生成 "功能正常但优化极差的代码" ,除非你进行迭代改进。养成测试的习惯:验证所有关键的逻辑路径,使用静态分析工具或代码风格检查器,并且不要害怕重写 AI 生成的代码,如果它达不到你的质量标准。质量保证不能依赖 AI,而是人类的责任。
-
调试与问题解决能力: 当软件出现问题时,你需要强大的问题解决能力来诊断并修复它。AI 可以辅助调试(例如,提示可能的原因),但它无法理解软件运行的具体环境。能够分析复杂的 bug------重现错误,隔离原因,理解底层系统(操作系统、数据库、库)------是一项非常重要的技能。这需要开发者对基础知识有深入的理解(内存和状态管理、并发性等等),初级开发者需要通过实践来学习。你可以利用 AI 辅助调试(例如,解释错误信息或提供解决方案),但不要盲目依赖它 。系统地排查问题并运用第一性原理的能力是优秀开发者的标志。这同时也是一个反馈循环:调试 AI 生成的代码能够帮助你改进后续的 AI 提示,或者避免某些模式。
-
保持上下文与全局视野: 软件项目并非孤立的编码任务,它们与用户需求、时间安排、已有代码和团队流程紧密相关。AI 无法理解项目的背景或决策的理由(除非你明确在提示中提供这些信息,但这通常是不现实的)。开发者需要保持全局视野。这里需要掌握系统思维------理解一个模块的修改如何影响其他模块,软件如何服务于业务目标,以及各个部分如何相互关联。这能帮助你恰当地使用 AI 的输出。例如,如果 AI 建议的快捷方式违反了法规或公司惯例,你就能凭借对上下文的了解及时发现。初级工程师应该了解项目的背景和设计文档,从而对解决方案的优劣做出判断。
-
沟通与协作: 软件开发是团队协作。AI 不会参加会议------人与人之间的沟通依然非常重要,这包括澄清需求、讨论方案以及协调工作。优秀的沟通能力比以往任何时候都更重要。高级开发者应该利用自己的能力来解释复杂的观点、指导团队成员以及制定方向。初级开发者应该练习提出有效的问题并清晰地表达问题(无论是对同事还是 AI)。有趣的是,向 AI 提问本身就是一种沟通;它需要你准确地表达你的需求。这与核心工程技能------需求分析 ------密切相关。如果能清晰地描述你的需求,说明你已经对问题进行了深入的思考。此外,分享知识、编写文档以及进行代码审查都是 AI 无法取代的协作技能。未来,随着开发者与 AI 合作,团队中的人际协作------确保解决正确的问题------依然至关重要。一个新的趋势是开发者将更多地关注高层次的设计讨论(通常 AI 也会参与其中),以及协调各种任务,扮演类似指挥者的角色。沟通和领导能力在这样的角色中非常重要。
-
适应性和持续学习: 最后,也是最重要的,你需要具备学习新工具和适应变化的能力。AI 辅助开发领域发展迅速。高级工程师应该保持开放心态,学习如何有效地使用 AI 的新功能,才能保持竞争力------蒂姆·奥莱利认为,*"乐于学习新技能"*的开发者将从 AI 中获得最大的效率提升。初级开发者则应该注重深入学习基础知识 ,并保持对新技术的好奇心。两者兼顾,才能有效利用 AI,而不至于过度依赖它。这是一个平衡:用 AI 加快成长速度,但也要定期进行不依赖 AI 的练习,防止核心技能退化(一些开发者会定期进行"AI 解毒"以保持编码技能的锐度)。总而言之,不断学习是任何时代都宝贵的技能。
这些技能构成了人类在软件工程领域的优势。它们是持久的 ,因为它们不会因为新的框架或工具的出现而过时;相反,AI 的出现使它们更加重要。西蒙·威利森认为,AI 辅助实际上让强大的编程技能更有价值,因为那些有经验的开发者能更有效地利用这些工具。
强大的工具在缺乏技能的人手中可能很危险或被浪费,但在熟练的人手中则能带来巨大改变。在 AI 时代,经验丰富的工程师就像一位经验丰富的飞行员,拥有一个先进的自动驾驶仪:旅程可以更快更远,但飞行员仍然需要掌控航向,确保安全着陆。
高级开发人员的优势:利用经验与 AI 协同
对于高级工程师而言,AI 编码工具的出现是提升自身影响力的绝佳机会,前提是你要正确地利用经验。高级开发者通常拥有深厚的领域知识、对潜在问题的直觉以及做出高层次技术决策的能力。
这些优势正是 AI 难以独立处理的 30%。资深开发者可以这样最大限度地发挥自身价值:
-
成为架构师和主编: 让 AI 完成代码初稿,而你专注于系统架构设计,并改进 AI 的输出。许多组织可能转向这样的模式:团队只需要"资深成员",他们负责"(a) 描述任务(即生成提示),以及 (b) 检查结果的准确性和正确性"。拥抱这种模式。作为资深开发者,你可以将复杂的需求转化为有效的提示,然后仔细审查 AI 生成的每一行代码。这相当于你和 AI 结对编程------AI 负责快速编写代码,而你负责思考。在审查过程中,要保持高标准:确保代码符合组织的质量、安全性和性能要求。通过担任架构师和主编,你可以避免被过多的代码审查工作压垮。(但需要注意的是:如果初级员工直接将 AI 生成的代码提交给你,你应该要求他们先进行自查,避免你成为唯一的质量保障)。
-
利用 AI 提升大型项目效率: 高级工程师经常负责大型项目或棘手的代码重构,这些工作初级开发者难以独立完成。AI 可以通过处理大量机械性操作或在你的指导下探索各种方案来提升效率。史蒂夫·耶格将这种工作方式称为面向聊天的编程 (CHOP)------"通过迭代改进提示与 AI 协同编程"。利用 CHOP 来提升你承担项目的雄心。正如西蒙·威利森所说,AI 辅助"降低了项目启动的门槛",因为原本需要几天才能完成的工作现在可能只需几小时。资深开发者因此可以尝试那些以前看起来遥不可及的"如果能......就好了"的项目。关键在于保持全局视野:你决定使用哪些工具或方法,并将这些部分整合到一个完整的系统中。你的经验能帮助你筛选 AI 的建议------接受合适的,拒绝不合适的。
-
在 AI 时代指导团队并制定标准: 高级工程师的另一个重要职责是指导 经验较少的团队成员有效地使用 AI 并遵守最佳实践。你可能掌握了初级开发者难以发现的各种陷阱(例如内存泄漏、索引越界错误、并发问题等等)。由于初级开发者现在可能使用 AI 生成代码,因此教导他们如何进行自我审查和测试至关重要。以身作则,认真测试 AI 生成的代码,并鼓励团队不要盲目信任机器输出。一些组织(甚至律所)都规定,如果使用 AI,必须披露并自行验证结果------而不是简单地依赖资深成员来发现错误。资深工程师应该在团队中推广这种规范:AI 是一种工具,但尽职尽责必不可少。通过指导,你可以分担一部分审查工作,并帮助初级成员更快地掌握处理那 30% 能力所需的核心技能。
-
继续深耕领域知识和预见能力: 你的丰富经验和视野比以往任何时候都更加重要。资深开发者通常了解系统设计背后的原因或行业运作方式。这种领域专业知识能帮助你发现 AI 可能忽略的错误。继续深入了解领域知识------这可能意味着持续关注业务需求、用户反馈或影响软件的新法规。除非明确告知,否则 AI 不会自动考虑这些因素。将领域知识与 AI 的速度结合起来,才能获得最佳结果。同时,利用你的预见能力来指导 AI。例如,如果你知道一个简单的解决方案会造成后期的维护难题,你可以指导 AI 选择更可持续的方案。资深工程师应该相信自己多年的经验------如果一段代码"看起来不对劲",或者好得令人难以置信,那就深入研究。大多数情况下,你的直觉能发现 AI 忽略的问题。预见代码的长期影响是资深工程师的标志性技能;不要因为 AI 的便利性而忽略了这种能力。相反,将它应用于 AI 生成的任何代码。
-
发挥软技能和领导力: 随着 AI 承担部分编码任务,高级开发者可以将更多精力放在工程的"软"方面,例如与利益相关者沟通、领导设计会议以及做出将技术与业务战略相结合的决策。蒂姆·奥莱利和其他人认为,随着常规编码变得更容易,价值将转移到决定做什么 以及如何协调 复杂系统。高级工程师通常是协调人和全局视野的拥有者。承担这个角色。主动承担编写架构路线图、评估 AI 或其他工具的采用以及为组织内 AI 使用定义编码指南的工作。这些是 AI 无法完成的任务,它们需要经验、人为判断,并且通常需要跨团队的共识。通过提升你的领导力,确保你不是一个可替代的代码生成器,而是一个在新的时代不可或缺的技术领导者。
简而言之,继续发挥资深开发者的优势: 看到全局,而非细节。
AI 会帮助你处理更多细节,但仍然需要有人决定处理什么 以及如何 将这些整合到一个稳定的系统中。你的判断、战略思维和指导能力现在比以往任何时候都更加重要。高效利用 AI 的资深开发者将会比那些不使用 AI 的开发者效率高很多------但真正优秀的开发者会利用自身优势来增强 AI 的输出,而不是让 AI 全盘掌控。
一位 Reddit 用户评论道,"AI 是一个编程倍增器",它*"极大地提升了资深程序员的效率"。*倍增效应是真实存在的,但被倍增的是你的专业知识。保持你的专业技能,并将其置于开发流程的核心位置。
在 AI 时代初级开发人员的成长
初级开发者对于 AI 可能既兴奋又焦虑。一方面,AI 助手能编写你无法独立完成的代码,这能加速你的学习。另一方面,"初级开发者消亡"之类的新闻标题也让人担忧。
真相是:AI 正在改变初级开发者的职业体验,但他们并未过时。不过,你需要主动培养一些技能,才能在 AI 无法完成的工作中创造价值。以下是一些建议:
-
学习基础知识,注重理解: 很容易依赖 AI 来回答所有问题("如何在 Python 中实现 X?"),而忽略了底层原理。避免这种做法。将 AI 作为导师,而不是答案机器。例如,当 AI 提供一段代码时,要思考它为什么 选择这种方法,或者要求它逐行解释代码。确保理解数据结构、算法、内存管理和并发性等概念,而不仅仅依赖 AI。原因很简单:当 AI 的输出错误或不完整时,你需要依靠自身对原理的理解来纠正它。一位工程师指出,如果你"没有积极地思考 AI 为什么会生成这样的代码,你可能会学得更少",这会阻碍你的进步。所以要多阅读文档,编写小型程序,巩固核心知识。这些基础知识是持久的,即使工具不断变化,它们仍然有用。
-
练习独立解决问题和调试: 为了提升自信,你需要定期独立练习。许多开发者建议定期进行"无 AI 日",或限制 AI 的使用。这能确保你依然能独立解决问题,避免技能退化。你会发现这能迫使你更深入地思考问题的逻辑,这也能反过来提高你使用 AI 的效率(因为你能更精准地指导 AI)。此外,当你在 AI 生成的代码中发现 bug 时,先尝试自己调试,然后再求助于 AI。通过调试器或打印语句来分析问题,能让你学到更多。将 AI 的建议视为提示,而非最终答案。随着时间的推移,解决那些棘手的问题能提升你在 AI 难以胜任领域的技能,这正是你的价值所在。
-
注重测试和验证: 对初级开发者来说,养成编写测试的习惯非常重要,尤其是在使用 AI 生成代码时。当你获得 AI 生成的代码时,不要认为它是正确的------质疑它。编写单元测试(或进行手动测试)来验证其是否满足需求和处理异常情况。这有两点好处:(1)它能发现 AI 输出中的错误;(2)它能训练你在信任实现之前思考预期的行为。你甚至可以使用 AI 来辅助编写测试,但你 来定义测试内容。史蒂夫·耶格关于认真对待测试和代码审查的建议适用于所有级别。如果你能养成认真验证自己工作(无论是否使用 AI)的习惯,资深同事会更加信任你,你也避免了将可疑代码提交给他们的尴尬。实际上,从一开始就将测试视为开发的必要组成部分,而非事后补救措施。学习如何使用测试框架,如何进行探索性手动测试,以及如何系统地重现 bug。这些技能不仅能提高你处理那 30% 工作的能力,也能帮助你更好地理解代码的工作原理。记住:如果你发现了 AI 引入的 bug,说明你做到了 AI 做不到的事情------这就是你的价值。
-
培养代码可维护性的意识: 初级开发者通常关注"让它运行"。但在 AI 时代,生成一个能运行的版本很容易------AI 可以做到。更难的部分(也是你应该关注的部分)是编写易于阅读、维护和理解的代码。培养对良好代码结构和风格的感知。将 AI 的输出与最佳实践进行比较;如果 AI 生成的代码混乱或过于复杂,主动进行重构。例如,如果 LLM 生成了一个 50 行的、功能过多的函数,可以将其拆分为多个更小的函数。如果变量名不够清晰,可以进行重命名。实际上,把自己当作代码审查员(即使你是初级开发者),并像审查他人代码一样改进 AI 生成的代码。这能帮助你内化良好的设计原则。随着时间的推移,你会学会如何提示 AI 来生成更简洁的代码(因为你会明确指定你想要的风格)。未来的代码维护者(通常是几个月或几年后的团队)会感谢你,你也会证明自己不仅关注"让它运行",更关注代码的工程性。保持代码的可维护性正是那人类驱动的 30% 中的关键部分,因此从职业生涯开始就将其作为你的目标。
-
提升提示技巧和工具使用能力(但要谨慎): "提示工程"------有效地与 AI 工具交互的技能------确实非常有用。作为初级开发者,你应该学习如何向 AI 提问、如何提供合适的上下文以及如何迭代提示以改进输出。这些新技能能让你脱颖而出(许多经验丰富的开发者还在学习)。但请记住,好的提示通常是源于对问题的良好理解。如果你发现无法让 AI 完成你想要的工作,可能是因为你需要先澄清自身的理解。将其作为信号。一种策略是在向 AI 寻求实现方案之前,先用简单的语言自己描述解决方案。同时,尝试不同的 AI 工具(Copilot、Claude 等),了解它们的优缺点。越熟练地使用这些工具,效率就越高------但永远不要认为它们的输出是完美的。将 AI 视为一个高级的 Stack Overflow:一个辅助工具,而非权威。你甚至可以使用 AI 来构建小型个人项目,以挑战自己的能力(例如,"我能否借助 AI 构建一个简单的 Web 应用?")。这能帮助你学习如何将 AI 集成到开发工作流程中,这在团队中非常宝贵。但是,也要定期进行不依赖 AI 的练习,正如前面提到的。
-
寻求反馈和指导: 最后,一个非常重要的技能是寻求反馈 并向他人学习。AI 不会因为你忽略它的建议而生气,但你的团队成员和导师对你来说非常重要。不要犹豫,向资深开发者询问他们为什么更喜欢某个方案,特别是当它与 AI 的建议不同时。与经验丰富的同事讨论设计决策和权衡------这些交流能帮助你了解资深工程师的思维方式,这对你是非常有价值的。在代码审查中,要认真对待关于 AI 生成的代码的评论。如果审查者指出"这个函数不是线程安全的"或"这种方法会造成扩展问题",一定要理解根本原因。这些正是 AI 可能忽略的问题,而你需要学习如何发现。随着时间的推移,你会形成一套检查清单。此外,寻找结对编程的机会(即使是远程的)。你可以与使用 AI 的资深开发者结对,观察他们如何提示 AI 以及如何更正 AI 的输出。乐于接受反馈并积极寻求指导将帮助你成长,从完成 AI 能完成的任务到完成只有人类才能完成的高价值任务。从某种意义上说,你试图尽可能高效地获得通常伴随着经验而来的智慧。这使你成为团队渴望保留和晋升的工程师。
初级开发者的思维转变
初级开发者在 AI 时代需要转变思维方式:从被动接受解决方案到主动寻求理解。过去,初级开发者可能会在文档中挣扎,最终写出一个功能;现在 AI 可以直接提供解决方案。如果你只是简单地接受(复制粘贴并继续),你并没有真正成长。
相反,将每个 AI 提供的解决方案视为一个学习案例。分解它、试验它并思考你如何才能自己得到它。将 AI 的输出视为交互式的学习材料,而非最终答案,才能确保你本人不断进步。这样,AI 就不会取代你的成长,而是加速你的成长。许多专家认为,虽然 AI 可能会减少对大量初级"编码人员"的需求,但它也提高了初级开发人员的标准。这个角色正在转变为能够有效地与 AI 合作并快速提升自己价值的人才。如果你掌握了上述习惯,你就会成为一名优秀的初级开发者,你的价值不仅仅是 AI 可以提供的那些(任何公司都可以通过订阅获得),而是你所具备的洞察力、可靠性和持续改进能力------这些都是未来资深开发者的标志。
结论:拥抱变化,发挥人类的优势
软件工程一直处于不断变化之中------从汇编语言到高级编程,从本地服务器到云,再到如今的 AI 辅助开发。每一次变革都自动化了编程的某些方面,但开发者总能适应并找到新的方向。正如蒂姆·奥莱利所指出的,过去的技术创新"几乎总是带来更多工作、更多增长和更多机会"。AI 的兴起也是如此。它并非让开发者过时,而是重塑了成功的技能。日常的 70% 的编码变得更容易,而更有挑战性的 30% 则变得更加重要。
为了充分发挥人类的 30% 的优势,请专注于那些永恒的工程技能:深入理解问题,设计简洁的方案,仔细审查代码质量,以及考虑用户和上下文。将这些技能与 AI 工具相结合的人将胜过那些只掌握其中一种技能的人。事实上,专家们普遍认为AI 是熟练工匠的工具。经验丰富的程序员从 AI 中获益更多,因为他们知道如何引导它以及在它出错时如何处理。据说"LLM 是为高级用户设计的强大工具"。这意味着我们需要成为"高级用户"------培养能够有效运用这些新工具的专业技能。
最终,软件工程不仅仅是编写可运行的代码。它是关于编写运行良好的代码------在现实环境中,随着时间的推移,以及在不断变化的需求下。今天的 AI 可以帮助编写代码,但它还无法确保代码在所有这些方面都能运行良好。这是开发者的职责。
通过加强上述技能,高级开发者可以继续领导和创新,初级开发者可以加快自己的成长步伐。AI 将承担越来越多的例行工作,但你的创造力、直觉和严谨的工程思维将把这些原始输出转化为真正有价值的东西。AI 是强大的工具,但关键在于如何使用它。良好的工程实践、人类的判断力以及持续学习的意愿将仍然至关重要。
无论是与一个"充满热情"的初级 AI 程序员结对编程,还是审查 AI 生成的代码,都不要忘记运用你独特的视角。要问:这是否解决了关键问题?其他人能否理解和维护这段代码?有哪些风险和异常情况?这些问题是你必须回答的。未来的编程将会减少手工编写代码,而更多地转向指导和优化------但仍然需要开发者来掌控方向,并运用他们的智慧做出正确的选择。
可操作的建议:
- 以成长的思维方式拥抱 AI: 利用 AI 来提升效率,但要理解解决方案背后的原理。将 AI 视为合作伙伴,而非依赖品,并定期练习在不使用 AI 的情况下解决问题以提升技能。
- 投资于核心技能: 加强系统设计能力、异常情况处理能力、测试能力以及深入调试能力。这些是 AI 无法取代的长期技能。将代码质量和清晰度作为你每个任务的追求目标。
- 对高级开发者: 利用你的经验来指导 AI(通过有效的提示)并审查其输出。带头负责任地将 AI 集成到团队的工作流程中------制定使用规范并确保知识共享。利用 AI 节省的时间来处理更具挑战性的项目并指导团队成员。
- 对初级开发者: 专注于成为能够理解和改进 AI 生成的代码的工程师。培养认真负责的习惯------始终测试和检查你的工作。从每一个错误和反馈中学习。通过这样做,你会很快进入 AI 无法胜任的领域,从而提升自身价值。
- 保持适应性: 工具会不断发展。持续更新你的工具和技能。但如果你拥有扎实的基础和协作精神,你就能适应任何技术浪潮。
AI 辅助编码时代已经到来,它使得常规编码更快。这使得我们开发者能够专注于软件开发中更具挑战性和意义的部分。通过最大限度地利用那"最后的 30%"------批判性思维、精湛的设计和严格的质量检查------我们不仅确保了自身的价值,而且也能够交付更好的软件。
最终,优秀的软件工程始终是关于解决问题的,而不仅仅是编写代码。AI 并没有改变这一点,它只是促使我们提升解决问题的水平。接受这个挑战,你就能在这个新时代取得成功。