应该用AI学习编程吗?

今天,人工智能工具可以在几秒钟内排查代码问题。但这是否意味着传统的解决问题的能力不再必要了?

应该用AI学习编程吗?

人工智能工具可以加快学习者生成代码的速度——但代价是需要解决问题的技能。发现如何通过人工智能的帮助进行动手编码的最佳方式。

人工智能正在重塑软件开发,不仅改变了我们编写代码的方式,也改变了我们学习代码的方式。人工智能驱动的编码助手可以通过生成代码片段、协助调试甚至重构代码来加速过程。许多开发者报告了显著的生产力提升——但这对初学者意味着什么?

在过去,学习编程意味着在Google上搜索,在文档中阅读,并在Stack Overflow中寻找答案。今天,人工智能工具可以在几秒钟内排查代码问题。但这是否意味着传统的解决问题的能力不再必要了?

1、用于编码的AI工具类型

首先,让我们谈谈目前在软件开发中使用的AI辅助是什么样子的。人工智能编码工具通常分为三类:

  • 代码补全——当你输入代码时建议代码,集成到IDE中(例如GitHub Copilot)。
  • 代码生成和重构——根据提示生成整个函数或重构代码。
  • 调试和错误修正——识别并修复代码中的问题。

许多工具模糊了这些类别的界限。例如,GitHub Copilot可以在VS Code中协助所有这三个功能。虽然这些工具对有经验的开发人员来说可以节省时间,但初学者可能会过度依赖它们——导致知识空白。如果你不完全理解人工智能的输出,你可能会引入无法解决的错误。

那么,初学者在学习编程时应该使用人工智能吗?

2、在学习编程时你应该使用人工智能吗?

有些人质疑,在人工智能迅速发展的背景下,学习编程是否还有意义。我的回答是:绝对! 人工智能可以辅助编程,但理解基础知识仍然是必不可少的。那些深刻理解编码的开发人员始终是宝贵的。

从教师的角度来看,我喜欢GenAI用于编写代码和课程材料。它非常适合快速创建练习和示例解决方案。但是……我不鼓励学生在刚开始学习编程时就依赖人工智能。不是因为:

  • 我想让他们像我当初学习编程时那样受苦。
  • 我担心他们学得太快而让我过时。
  • 我反对GenAI。

以上都不是真的。问题在于,许多学生在完成编码训练营后并没有真正学会如何编程。这就像抄作业一样——当然你可以通过,但你不会掌握这个科目。

过度使用人工智能时错过的内容:

  • 自己编写算法
  • 手动调试
  • 阅读文档
  • 理解不同语法和语言差异

练习和初学者项目可能看起来足够简单,人工智能可以瞬间解决。你可能会想:“太好了,我完成了!” 但如果没有参与解决问题的过程,你就跳过了真正的学习。人工智能是一种工具——而不是批判性思维的替代品。

3、在学习编程时如何有效使用人工智能

在学习过程中有效使用人工智能的关键是要找到正确的平衡。以下是明智使用人工智能的方法:

  1. 先手动编写代码——在咨询人工智能之前,总是先手动编写代码。这确保你参与到逻辑和语法中,更容易识别理解上的空白。
  2. 用人工智能进行解释——在跟随教程时遇到问题时,向人工智能请求额外的解释,比如分解教程中的步骤或澄清文档中的概念。
  3. 比较人工智能解决方案——如果人工智能提出了不同的方法,分析它以理解背后的推理。
  4. 请求替代方案——要求人工智能提供解决问题的不同方法,并解释每一步。这有助于加深你的理解。
  5. 在人工智能的帮助下重构代码——在处理项目时,使用人工智能建议重构并识别可以改进的领域,遵循最佳实践。

你得到的反馈非常有用,尤其是对初学者而言。过去,你可能需要等待更有经验的同事或付费请导师才能提供这样的快速见解。

4、实践示例:在JavaScript中过滤偶数

假设你想创建一个JavaScript函数,从数组中过滤掉偶数,只留下奇数。首先尝试自己编写代码。在你写出初始版本(即使它是错误的)之后,我们将使用人工智能来修复问题,从中学习并重构。

第一步:尝试自己编写代码。你可能会得到以下内容:

      function filterEvenNumbers(numbers) {
  const result = [];
  for (let i = 0; i < numbers.length; i++) {
    if (numbers[1] % 2 === 0) {
      result.push(numbers[i]);
    }
  }
  return result;
}

// 测试它
const myArray = [1, 2, 3, 4, 5, 6];
console.log(filterEvenNumbers(myArray)); 

// 预期输出:[1, 3, 5]
// 实际输出:[1, 2, 3, 4, 5, 6]

尽管它还没有工作,但自己编写解决方案可以帮助你练习循环和条件语句,并发现错误如越界错误或拼写错误。

我们的函数没有返回预期的结果——没有任何被过滤。你可能会怀疑你的条件有问题。这是你如何与人工智能工具互动的方式:

将你的代码复制粘贴到人工智能助手并询问:“为什么这个返回[1, 2, 3, 4, 5, 6]而不是[1, 3, 5]?我的条件或循环中有错误吗?” 人工智能可能会指出你使用了numbers[i] % 2 !== 0,这过滤了奇数而不是偶数,并且你不小心使用了[1]而不是[i],还反转了===条件。

在审查人工智能的解释后,你修复了条件,你的代码起作用了(欢呼)!

现在你的基本函数已经正常工作,你可以问人工智能:“有没有更简洁的方式来过滤偶数?”

人工智能可能会建议使用Array.prototype.filter():

      function filterEvenNumbers(numbers) {
  return numbers.filter(num => num % 2 === 0);
}

测试它建议的代码。你会看到输出是[2, 4, 6],但由于之前的解释,你现在知道这是因为===而不是!==,并且你可以自己修复它。

尽管如此,工具还是帮助你改进了代码!通过比较人工智能的解决方案和你的原始代码,你学会了诸如.filter()之类的方法以及它们如何简化你的代码。如果你还在学习JavaScript或来自其他语言背景,你可以问人工智能,“.filter()在底层是如何工作的?” 人工智能可能会解释说.filter()迭代每个元素并返回一个仅包含回调返回true的元素的新数组。

最后,始终手动测试你的代码。如果你过于依赖人工智能,你可能会错过错误。在这种情况下,它正在工作!

5、人工智能与动手编码:找到正确的平衡

没有捷径可以学习核心概念——你必须编写、调试并经历错误才能真正理解编程。人工智能可以提供帮助,但它不应该成为你的首选。

把人工智能当作导师。如果你身边有一位高级开发人员,你不会在每个小问题上都寻求帮助(至少我希望不是!)。你会先谷歌、阅读文档并尝试解决方案。以同样的方式使用人工智能。

6、人工智能工具用于学习的优势和局限性

人工智能对于学习很有帮助,但重要的是要意识到它的局限性:

优势:

  • 加速调试和故障排除。
  • 当你卡住时提供解释。
  • 即使没有导师也能提供见解。

局限性:

  • 人工智能提供统计上最好的响应,但并不总是正确的。
  • 如果你不验证其建议,它可能会误导你。你需要注意到错误并相应调整。
  • 一些公司禁止使用人工智能工具,因为存在安全风险。将代码粘贴到人工智能工具中会给外部公司访问可能专有的代码的机会,如果你公司的政策不允许这样做,这可能是一个风险。

意识到这些局限性有助于你在不过度依赖的情况下有效地使用人工智能。

7、在人工智能时代掌握代码

人工智能是学习编程的强大工具,但像任何工具一样,它需要明智地使用。过度依赖会削弱批判性思维和解决问题的能力,而战略性使用可以加速学习。手动编写代码有助于巩固基础,而人工智能可以作为导师——提供解释、调试见解和重构建议。

同时,人工智能工具正在快速发展,具有上下文感知助手,可以分析整个代码库并提供更智能的建议。忽视人工智能可能会成为职业劣势——就像忽略Git或关键框架一样。掌握人工智能驱动的开发现在是一项必备技能,适应新工具是每位开发人员成长的一部分。就像选择合适的JS库一样,学习人工智能辅助编码是一个持续的实验和优化过程。

人工智能不会取代学习编程基础的需求——但如果使用得当,它可以成为一个令人难以置信的工具。试试这个:先不使用人工智能完成一个小的编码项目,然后比较你使用人工智能辅助的方法,看看你能学到什么。


原文链接:Should You Use AI to Learn to Code? A Developer's Guide

汇智网翻译整理,转载请标明出处