在AI时代编码的硬技能和软技能

原文信息: 查看原文查看原文

Hard and soft skills for developers coding in the age of AI

- Sara Verdi

尽管人工智能正在革新软件开发,但它仍然依赖开发人员来驾驭其使用。在这篇博客中,我们将介绍开发人员在航行这个新的基于AI的编码前沿时需要具备的技能。

随着人工智能继续塑造发展格局,开发人员正在航行一片新的前沿——这不会让他们的职业过时,但将比以往任何时候都更需要他们的技能和直觉。

当然,人工智能正在革新软件开发,但这场革命最终始终掌握在开发人员手中。因为这些工具需要有人来操控。虽然它们可以提高编码和交付的速度,但它们不能取代人类的监督和编码能力。

我们最近进行了关于开发人员与AI工具之间不断发展关系的研究,发现人工智能有潜力减轻开发人员处理复杂任务的认知负担。AI工具不仅可以像第二双手一样使用,还可以更像第二个大脑,帮助开发人员更全面、更高效。

本质上,人工智能可以减轻精神压力,使开发人员能够专注于从学习新语言到为复杂问题创建高质量解决方案等各种事务。所以,如果你正在思考是否应该学习如何编码或者人工智能如何融入你当前的编码生涯,我们将告诉你关于在AI时代工作需要了解的内容。

AI技术和工具的简史

尽管媒体对生成式人工智能的热议相对较新,但AI编码工具已经存在——或多或少——比你想象的时间更长。为了让你跟上进度,这里是一个简要的AI驱动工具和技术的时间轴,为我们今天拥有的复杂编码工具铺平了道路:

1950年代: Autocoder 是早期自动编码的尝试之一。由IBM于1950年代开发,Autocoder将符号语言转换为机器代码,简化了早期计算机的编程任务。

1958年: LISP 是由John McCarthy创建的最古老的高级编程语言之一,引入了符号处理和递归函数,为AI编程奠定了基础。其灵活性和表现力使其成为AI研究和开发的流行选择。

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))

_
此函数在LISP中计算非负整数'n'的阶乘。如果'n'为0或1,则阶乘为1。否则,它递归地将'n'乘以n-1的阶乘,直到'n'达到1。
_

1970年: SHRDLU 是麻省理工学院的Terry Winograd开发的早期自然语言理解程序,它可以解释和响应于英语的一种受限子集中的命令,并展示了AI理解和生成人类语言的潜力。

SHRDLU,在一个积木世界中运行,旨在理解和执行关于操纵由各种形状积木制成的虚拟对象的自然语言指令。

SHRDLU,在一个积木世界中运行,旨在理解和执行关于操纵由各种形状积木制成的虚拟对象的自然语言指令。 来源: Cryptlabs

1980年代: 在20世纪80年代,诸如The Last One之类的代码生成器出现了,这些工具可以根据用户的规范或预定义模板自动生成代码。虽然从现代意义上来说它们并不严格基于AI驱动,但它们为代码生成和自动化的后来发展奠定了基础。

1982年《个人计算机》杂志的封面,探讨了《The Last One》程序。

1982年《个人计算机》杂志的封面,探讨了《The Last One》程序。 来源: David Tebbutts

1990年代: 基于神经网络的预测模型越来越多地

应用于与代码相关的任务,例如预测程序行为、检测软件缺陷和分析代码质量。这些模型利用了神经网络的模式识别能力,从代码示例中学习并进行预测。

2000年代: 在21世纪初,具有AI功能的重构工具开始出现,为重构和改进代码提供了自动化帮助,而不会改变其外部行为。这些工具使用AI技术分析代码模式,识别重构机会,并向开发人员建议适当的重构。

这些早期的AI驱动编码工具帮助塑造了软件开发的发展,并为今天不断发展的AI驱动编码辅助工具奠定了基础。

超越集成开发环境(IDE)

最初,AI工具主要局限于集成开发环境(IDE),帮助开发人员编写和完善代码。但现在,我们开始看到AI触及软件开发生命周期(SDLC)的各个方面,我们发现这样做可以提高生产力,简化协作,并加速工程团队的创新。

在对500名美国开发人员进行的2023年调查中,70%的人报告称他们在工作中获得了显著的优势,而超过80%的人表示这些工具将促进团队内更大的协作。此外,我们的研究发现,使用AI编码工具的开发人员,平均完成任务速度提高了55%。

快速了解现代AI驱动的编码工具的现状以及它们今天提供的一些技术好处:

  • 代码完成和建议。GitHub Copilot这样的工具使用大型语言模型(LLMs)分析代码上下文并生成建议,使编码更高效。现在开发人员可以获得明显的生产力提升,因为AI可以根据从开发人员的代码库学到的上下文和模式,而不仅仅是编辑器中的代码,建议出整行代码。Copilot还利用GitHub上可用的大量开源代码来增强对各种编程语言、框架和库的理解,为开发人员提供有价值的代码建议。
  • 存储库中的生成式AI。 开发人员可以使用GitHub Copilot Chat等工具实时询问问题并更深入地了解其代码库。通过AI收集存储库中的遗留代码和流程的上下文,GitHub Copilot Enterprise可以在建议解决方案时帮助维护组织代码库的一致性和最佳实践。
  • 自然语言处理(NLP)。 AI最近在理解和从自然语言提示生成代码方面取得了巨大进展。想想像ChatGPT这样的工具,开发人员可以用简单的语言描述他们的意图,AI会产生有价值的输出,比如可执行代码或该代码功能的解释。
  • 使用AI增强调试。 这些工具可以分析代码以检测潜在错误,并利用历史数据和模式提供可能的修复方案,以更有效地识别和解决错误。

要实现AI工具,开发人员需要技术技能和软技能

在开发人员开始将AI工具纳入其开发工作流程时,有两种不同的技能子集可以帮助他们:技术技能和软技能。当开发人员涉足AI项目时,拥有技术实力和人际交往能力同样重要——他们需要了解自己的技术技能,以使AI工具发挥其优势,但他们也需要能够与他人良好合作、创造性解决问题,并理解大局,以确保他们提出的解决方案实际上符合使用者的需求。

首先让我们来看看那些技术技能。

技术方面

Prompt 工程

Prompt 工程涉及制定设计良好的 Prompt 或指令,以指导AI模型的行为,以产生期望的输出或响应。当AI驱动的编码助手未生成有价值的输出时,这可能会令人沮丧,但往往可以通过调整与AI的交流方式来迅速解决。在制定自然语言 Prompt 时,请记住以下几点:

  • 清晰具体。 制作直接且具有上下文相关性的 Prompt,以更有效地指导AI模型。
  • 试验和迭代。 尝试各种 Prompt 变体,并根据收到的输出进行迭代。
  • 验证,验证,验证。 就像你会检查同事编写的代码一样,持续评估、分析和验证AI算法生成的代码非常重要。

从我们的一些DevRel All Stars的视频和博客文章中了解一些关于如何通过GitHub Copilot进行 Prompt 工程的更多技巧

Code reviews

AI是有帮助的,但它并不完美。虽然LLMs是在大量数据上进行训练的,但它们不会像人类那样固有地理解编程概念。因此,它们生成的代码可能包含语法错误、逻辑错误或其他问题。这就是为什么开发人员需要依靠他们的编码能力和组织知识来确保他们不会将有问题的代码推送到生产环境中。

对于成功的 Code reviews,您可以从以下问题开始:这个代码更改是否达到了它应该做到的目标?然后,您可以查看这份更为详尽的清单,其中列出了在审查由AI生成的代码建议时要牢记的更多事项。

测试和安全

借助AI的能力,开发人员现在可以轻松生成和自动化测试,使他们的测试责任更少依赖于手动操作,更多依赖于战略性。为了确保AI生成的测试覆盖了关键功能、边缘情况和潜在的漏洞,开发人员需要扎实的编程技能、测试原则和安全最佳实践基础知识。这样,他们就能够有效地解释和分析生成的测试,识别生成的测试中的潜在限制或偏见,并根据需要进行手动测试补充。

以下是评估AI生成测试质量和可靠性的几个步骤:

  • 验证测试断言。 检查AI生成的测试所做的断言是否可验证,以及它们是否与软件的预期行为一致。
  • 评估测试完整性。 评估AI生成的测试是否覆盖了所有相关情景和边缘情况,并确定可能需要额外测试以实现全面覆盖的区域或间隙。
  • 识别限制和偏见。 考虑数据偏见、算法偏见以及用于测试生成的AI模型的限制等因素。
  • 评估结果。 调查任何测试失败或异常,确定它们的根本原因以及对软件的影响。

对于那些开始他们的编码之旅的人来说,通过查看GitHub Actions和GitHub Advanced Security,可以深入了解测试策略和安全最佳实践的GitHub学习路径

您还可以通过这款新的开源Secure Code Game 🎮提升您的安全技能。

现在,是软技能的时候了

随着开发人员利用人工智能构建未来,拥有软技能——如与同事良好沟通和协作的能力——变得比以往任何时候都更加重要。

让我们更深入地看看开发人员在继续采用AI工具时可以专注的一些软技能:

  • 沟通。 沟通技能对于与团队成员和利益相关者合作,定义项目需求,分享见解并解决挑战至关重要。它们在开发人员导航提示工程时也很重要。最佳的AI提示是清晰、直接和经过深思熟虑的——在工作场所与人类同事交流并没有太大的区别。

您知道提示工程最佳实践可能有助于您通过与同事建立良好的沟通技能吗?查看这篇来自哈佛商业评论的思考文章,获取更多见解。

  • 问题解决。 当开发人员使用AI工具时,他们可能会遇到复杂的挑战或意外的问题,有创造性地思考并适应变化的能力对于找到创新解决方案至关重要。
  • 适应性。 AI技术的快速发展要求开发人员具备适应能力,并愿意接受新的工具、方法和框架。此外,培养促进成长思维的软技能可以使个人持续学习,并随着AI工具的不断发展而保持更新。
  • 伦理思考。 在AI开发中,伦理考虑尤为重要,特别是涉及偏见、公平性、透明度和隐私等问题。诚信和伦理推理对于做出优先考虑用户和社会整体福祉的负责任决策至关重要。
  • 共情。开发人员通常为最终用户创建解决方案和产品,为了创造有价值的用户体验,开发人员需要真正理解用户的需求和偏好。虽然人工智能可以帮助开发人员更快地创建这些解决方案,例如通过代码生成或建议,但开发人员仍需要能够对代码进行质量保证,确保这些解决方案仍然优先考虑到不同用户群体的福祉。

磨练这些软技能最终可以增强开发人员的技术专长,同时使他们能够更有效地与同事和人工智能工具合作。

记住这些

随着人工智能的不断发展,它不仅改变了软件开发的格局;它还准备彻底改变开发人员学习和编写代码的方式。人工智能并不是取代开发人员,而是在补充他们的工作,同时为他们提供了更多专注于编码和建立技能的机会,无论是技术上还是人际关系上。

如果您有兴趣在人工智能驱动的编码旅程中提高自己的技能,可以查看这些仓库开始构建您自己的基于人工智能的项目。或者您可以尝试GitHub Copilot,它可以帮助您学习新的编程语言,提供编码建议,并在您的终端中提出重要的编码问题。

分享于 2024-04-16

访问量 18

预览图片