深度|吴恩达对谈斯坦福计算机系主任:生成式AI可赋能编程,但基础编程知识及编程思维仍值得学习与培养

文摘   2024-11-06 10:17   北京  

图片来源:Stanford Online

Z Highlights

  • 生成式AI正在加速软件开发的速度,一方面帮助有经验的开发者提高效率,另一方面也让没有太多编程经验的人能够快速进入软件工程领域。因此,整个领域的速度在加快,开发出的软件也越来越多。

  • 基础编程技能至关重要,很多核心的基础构建块仍然很重要,比如缓存、并行化等概念,这些都是对代码有重要影响的。所以即便生成式AI能用于编程,基础编程的学习依旧重要。

  • 计算机科学推动的快速节奏正在给许多其他行业带来压力。生成式AI让团队能更快地完成任务,但关键在于找到“快速行动并负责任”的方法。有很多方式可以用负责任的方式编写软件和进行实验,而不伤害他人。

Paxton hehmeyer:让我介绍一下我们的两位演讲者,尽管他们可能不需要太多介绍。首先,Andrew Ng(吴恩达)是deeplearning.ai的创始人。他是AI Fund的管理合伙人,也是LandingAI的创始人兼CEO,Coursera的主席和联合创始人,同时是斯坦福大学的兼职教授。我相信他现在也正在这里授课。作为机器学习和在线教育的先锋,他通过他的课程改变了很多人的生活。据我所知,有超过800万人参加了他的机器学习课程或AI课程。他还是谷歌大脑团队的创始负责人,曾担任百度的副总裁兼首席科学家,也曾是斯坦福人工智能实验室的主任。在2023年,他被《时代》杂志评为人工智能领域最具影响力的100人之一。目前,吴恩达博士主要专注于他的创业项目,致力于寻找加速负责任AI实践在全球经济中应用的最佳途径。所以非常感谢你加入我们,Andrew。

Mehran Sahami是斯坦福大学工程学院的计算机科学系主任,以及James and Ellenor Chesebrough学院Professor。作为这里的教授,他也是本科教育的Bass学者,之前还曾担任过计算机科学教育的副主任。他非常积极地参与了斯坦福计算机科学教育的设计与思考。最近的一些重大变化都是由Mehran带头进行的。在加入斯坦福大学教职之前,他是谷歌的高级研究科学家,他的研究兴趣包括计算机科学教育、人工智能和伦理学。我希望今天我们也能讨论这些问题。最后,他在2013年担任了ACM/IEEE-CS联合计算机科学课程标准制定工作组的联合主席,该工作组制定了国际大学计算机科学课程的指导方针。他曾任ACM教育委员会主席和ACM理事会的选举成员,并被加州州长杰里·布朗任命为该州计算机科学战略实施计划顾问委员会的成员。所以非常感谢你们二位今天加入我们。

Andrew Ng:我可以补充一些东西吗?我觉得你对Mehran的介绍中列举了很多令人印象深刻的内容。对于那些没有在斯坦福学习过的人来说,你们可能不知道Mehran在斯坦福校园中是一个传奇人物。有大量学生决定选择计算机科学作为专业,通常的故事是,很多人来到斯坦福时想要选择其他专业,但不确定该学什么,后来上了Mehran的课,就决定说:“你知道吗,我要选择计算机科学作为我的专业。”所以就是这样。我多年来也看了Mehran的一些介绍编程的YouTube视频,还从他那里学到了很多教学的技巧。所以Mehran可能是我知道的全球最优秀的计算机科学入门编程教育者,很高兴今天能聊这个话题。

Mehran Sahami:能和你聊天真是太好了,Andrew。这真是一种享受。你实在是太客气了。我是这样想的,学生们来到斯坦福是因为他们想有机会向你学习机器学习。你在通过Coursera等平台向全世界推广教育方面所做的事情真的令人难以置信。所以我非常感谢你在改变计算机科学以及更广泛的全球教育格局方面所做的努力,实在是令人难以置信。

Andrew Ng:是的,谢谢你,你太客气了。

AI对程序员工作和学习的影响

Paxton Hehmeyer:这真是令人兴奋的事情。Mehran通常在每年春天还在教授“Code in Place”课程。所以如果你想体验一下计算机科学入门课程,Mehran会教授这门课。正如我所说的,他们的讲座视频到处都有。Stanford Online上有很多,YouTube上的Stanford Online也有。Andrew,我想说你的机器学习讲座,比如线性代数入门课程,都有超过一百万的观看量。所以有很多人从你们两位那里学到了很多东西。所以再次感谢你们。在我们进入教育话题之前,我想从当前开始,我会先从你开始,Andrew,随着LLM的广泛使用,你怎么看待编程和软件开发职业的变化?

Andrew Ng:人工智能是一种被应用到许多领域的通用技术。今天我们刚刚看到,诺贝尔化学奖被授予了Demis、John和来自华盛顿大学(UDub)的David Baker,表彰他们将AI应用于化学和生物学的工作。而就在昨天,物理学奖颁给了Jeff Hinton和John Hopfield。所以AI在很多领域都有巨大的影响。但作为一名软件工程师或开发者,我对AI在我们领域的影响感到尤其兴奋。

如果我尝试综合一下所有发生的事情,我看到的最令人兴奋的趋势是,事情似乎比以往任何时候都发展得更快,主要有两个方面。一方面,有经验的开发者正在以多种方式使用生成式AI。软件开发者在工作中做很多不同的事情,包括写文档、生成代码、调试代码、写测试用例、头脑风暴系统架构等等。在许多专业软件开发的任务中,生成式AI确实能提供很大的帮助。

另一方面,另一个可能更令人兴奋的趋势是,它帮助更多人进入软件工程领域。你不再需要记住代码中某些特定语法的细节,工具能够帮助很多人学到一些知识,并且能很快地构建出非常吸引人的应用程序,而这些应用程序在以前可能需要几个月甚至几年的学习才能做到。因此,这让更多的人加入了软件工程领域。因此,整个领域的速度在加快,开发出的软件也越来越多。

Paxton Hehmeyer:这真的很有趣。所以你看到的是两个层面。一个是非常有经验的程序员在使用它以提高效率,完成更多的工作;另外一个是那些没有太多编程经验的人也能够编写复杂的程序。Mehran,可以由你接着回答这个问题吗?也许从学术的角度,或者站在斯坦福的立场,你怎么看待生成式AI对斯坦福的研究类型或正在发生的事情产生的影响?

Mehran Sahami:当然。我觉得可以跟Andrew说的结合起来看,其中一个很重要的方面就是考虑工业需求,如何将其转变,或者说我们如何从教育的角度去思考这个问题,尤其是在高等教育和大学教育的层面上。例如,不久前我参与了一个对话,微软的首席技术官Kevin Scott也在场。他谈到的其中一件事就是在微软内部广泛使用像Copilot这样的工具,帮助他们的程序员全公司范围内提升生产力。

但他提到了一件与学术界相关的有趣事情,就是行业中的期望是,在未来一到五年的时间里,大学毕业的学生应当具备这些技能,将其作为编写代码教育的一部分。因此,这不只是我们是否考虑这个问题的一个奢侈,而是大学阶段培训学生以成为有效软件工程师的工具箱中的一种必需。

所以这就是我们如何看待这个问题的。这不是“我们是否做”这个问题,而是“我们在哪里做以及如何做”的问题。而我所说的“在哪里和如何”是指,应该以怎样的合适层次让学生在他们的教育过程中接触这些工具,以及这如何改变我们对计算机科学教育中传统流程或传统方式的理解,以及什么时候是使用这些工具的合适时机。

我认为这个争论还没有完全解决。人们在寻找可能适合的不同阶段,有些认为这应该在学生第一次看到的课程中出现,有些认为这应该在他们接近毕业时做大型项目时引入,当然也有其他各种观点。所以我们在斯坦福正在研究几种不同的模式,但我会说,这其实只关乎何时去做、在何处做,而不是“是否去做”,因为这个趋势已经非常普遍了。

Andrew Ng:是的,我在许多学术机构的计算机科学和其他学科中看到的最有趣的事情之一是预测未来工作的方向。因为在教育中,首先我们不希望训练人们去做“昨天的工作”。但除了培养人们适应当前的工作,我们有时候还想确保人们具备未来2、3、4、10、20年内将出现的工作的技能。

随着生成式AI的快速发展,我觉得很明显。在未来,很多开发人员——可能是所有开发人员——都应该使用生成式AI,因为用它会比不用更高效。然而工具链在迅速演变,精确预测哪些是可以普遍应用且长期重要的基本技能,哪些可能会迅速变化,这一直是一个挑战。

举个例子,我认为VS Code GitHub Copilot是一个很棒的工具,生产力有巨大的提升。还有像Cursor这样的工具也非常好,它们可以提供逐行代码修改,让你批准或拒绝。而就在上周或者几周前,OpenAI推出了Canvas,也是一个非常不错的工具,可以生成代码并编辑代码。

我发现有效地使用这些工具确实需要一些培训,知道何时信任代码,何时不信任代码。也许我几个月前从朋友那里学到了一件事,那就是如果我要给出一段代码——我过去会读完整个函数,弄清楚它实际上在做什么。但如果你输入/*,在C++中或是Python中使用生成式AI让它为你写注释来记录代码,这样可以节省很多时间。与其自己阅读所有代码,不如让它写一个文档字符串或注释,然后只读注释。因为生成式AI可以比我自己阅读整个函数快得多地理解所有代码并描述它。但这只是一个很小的例子。我觉得有很多这样的技巧和窍门,让开发者学会如何使用生成式AI感觉还有很多工作要做。最佳实践仍在不断发展,工具链也在不断演变。

Mehran Sahami:当Andrew 看待这些事物的未来走向时,正是这种工具和程序员之间的共生关系,工具不仅仅是在为程序员提供代码以提高生产力。工具也在教程序员一些东西。比如,当程序员在使用一种新的编程语言时,想要弄清楚如何做某件事情,并且看到了工具生成的一个示例,这不仅仅是让他们更高效,因为他们可以将那段代码插入他们的代码库中,实际上他们也在通过“有读写性的编程”进行学习,对吧?他们实际上看到的是工具所生成的内容,或者他们要求工具为它生成注释,正如Andrew所说。而使用这些工具的过程实际上成为了程序员的学习体验。因此,我们在生产力方面实际获得了两个效果:一个是代码的生成本身,另一个是由于使用这些工具而产生的长期学习。

Andrew Ng:实际上,这是个很好的观点。几个月前,我自己尝试写一些开源代码。如果有效,我们会在某个时候发布这个开源项目,但这不是重点。但我的一个朋友Lawrence Moroney,曾在谷歌工作,他指出了开发人员获得很多好处的一种方式,那就是存在一些编程的设计模式,我自己肯定并不那么熟悉这些设计模式,Mehran可能会更熟悉一些。

几个月前,我正在开发一个尚未发布的开源项目,试图弄清楚如何设计代码的架构。GPT-4建议我使用工厂方法(factory method),这是一种面向对象编程中的特定设计模式。坦率地说,我并不常用它,也没想到过它。但通过使用GPT-4和Claude 3.5的结合,我最终使用工厂方法来架构代码,这比我之前做的要好得多。这也提醒了我什么是工厂方法设计模式。这些是很有趣的,你可以在线搜索。这是一种面向对象的设计模式,用于在不知道具体类的情况下实例化对象。它比我之前编写的解决方案要好得多。

我认为在许多我们使用生成式AI作为头脑风暴伙伴的例子中,这些工具帮助我们更好地理解了一些核心的构建块,尤其是我们并不经常使用的内容。哦,还有语法,对吧?有很多库,比如Pandas用于操作数据,Streamlit用于前端开发,尤其是很多机器学习应用程序。我喜欢这些库,但坦率地说,我记不住它们的语法。我过去每次都必须查阅文档。但现在,我甚至不再试图记住语法,而是让生成式AI来写代码。现在我们好像正在演变为一种“生成并测试”的有趣范式,这有点危险。我认为最佳实践还在不断发展,但“生成、验证并测试”的范式让很多团队能够更快地写出软件代码。有时质量很高,有时质量较低,这可能还有待进一步确定。

学习基础编程知识依然重要

Paxton Hehmeyer:你们提到的这些观点都非常非常有趣。Mehran,我想回到关于课程设置的讨论,Andrew你提到很多有经验的开发者正在使用这些工具,他们本来就有很扎实的计算机科学基础。所以当你说“应该使用工厂方法”时,他们在某种程度上理解其含义并且能够评估它。Mehran,你怎么看?有哪些基础技能是计算机科学专业的学生依然需要掌握的?

我想问的是,你还需要概率论吗?你还需要基本的算法课程,并理解如何构建算法吗?所以Mehrann,我的问题是,哪些基础技能仍然非常重要,以便能够有效使用这些工具,而不仅仅是了解如何与工具交互,而是能够评估工作并成为这些工具的一个富有思想的共同头脑风暴者?

Mehran Sahami:当然,这是个好问题。它确实提到了我们是否应该使用生成并测试或生成并验证的范式来使用生成式AI工具。我们思考的其中一个问题是,让学生理解生成的代码是至关重要的,原因有很多。首先,是能够验证代码是否在正确地运行,也就是解决他们试图解决的问题。也就是说,代码是否适合解决他们的问题。

正如Andrew提到的,当你考虑解决问题的不同方式时,有效率的方案,代码的架构,如何适应整个系统,这就涉及到编程中对好坏的判断力,知道什么是更好的、什么是更差的,这些都是你在构建过程中需要做的决策。所以,在你能很好地做出这些决定之前,你需要有一些编程的经验。

例如,我们不会指望学生在第一门课程中就主要通过这些工具生成他们的大部分代码。在第一门课中,我们想教学生一些基础技能,比如编程中的主要概念是什么,如何在特定语言中把它们组合起来。我们现在在第一门课中教Python,但我们也教过C、Java和Pascal。尽管语法因语言而异,但这些概念都是相同的。

这告诉我们编程中有一些基本概念,对于人们来说这些是非常重要的,与解决问题的编程语言的语法是并行的。因此,这些基础技能通常也与编程风格有关。比如如何把一个大问题分解为小部分?如何定义代码各部分之间的接口,让它们协同工作,从而保持模块化,不在构建系统的过程中扩大复杂性?如何在心理上模拟代码执行过程,以验证其是否有效,或者调试它、找到其中的问题?

这些都是基础技能。我们认为这些技能至少在第一门课程中是必不可少的,可能在第二门课程中也是必须的,因为学生需要学习它们。当你越过这些课程之后,你会说“好,现在你有了这些技能,现在可以有人给你一段代码,你能够浏览它,真正地分析它,找出更好的实现方式吗?我能调试这段代码吗?”无论代码是由人生成的还是由机器生成的,从某种意义上讲,这并不重要,你只需要具备这些技能来理解代码及其在你构建的更大系统中的角色。

这可以是第三门课程,一直到第n门课程。或者第n门课可以是学生本科毕业时的一个大型项目,或者类似高中阶段完成的顶点项目。所以我们认为,在学习过程中会有很多接触的节点,但你需要有坚实的基础,而这在前几门课程中大概率不会改变。但在这之后,你就有很多发展的空间了。

Paxton Hehmeyer:Andrew,关于这个问题你还有什么要补充的吗?在你的实践中,或者你与其他人合作中,你有没有看到哪些基础技能绝对是必须掌握的,特别是在使用生成式AI进行代码评估时?

Andrew Ng:是的,我同意Mehran的看法。很多核心的基础构建块仍然很重要。也许我可以用一个例子来说明为什么。或许有一天我们会有一个非常出色的AGI,可以做任何人类能做的事情,到时候我们可能不需要自己考虑这些事情了,但那似乎还很遥远。我认为现在让AI系统变得更智能或做出更好决策的瓶颈之一在于,它们往往缺少很多关于我们为什么做某些事情的背景知识。人类拥有很多背景知识,但由于某些原因,数据、系统的整合或者其他原因,今天的AI缺乏很多背景知识。

再举一个例子。几个月前我编写了一些代码,运行速度很慢,于是我决定实现一个缓存。我忘记了如何调用某个Python模块的缓存功能,生成式AI帮我写了代码。但是我意识到,我需要知道缓存是什么,或者是记忆化存储,这样我才能让AI为我编写代码,利用缓存,这一点它做得非常完美。但如果我不知道缓存是什么——这是在计算机科学入门课程中教的概念——那么我就不可能完成这项任务。

在那个例子中,我之所以能够在生成更好的代码中起到帮助作用,是因为我具备判断的背景知识,我知道软件速度太慢了。而我不知道需要多少数据基础设施来让生成式AI获得关于应用程序中的重要信息的背景知识,从而自己得出这个结论。其次,我知道我们有资源,存储空间不是问题。所以我可以很快地决定,“让我们用缓存来实现这个。”而做出这个决策的背景知识,比如为什么要这样做而不是那样做,用缓存而不是其他东西,实际上是一个复杂的决策。或许有一天AI会具备足够的背景知识,以及关于资源、重要性的知识,能够进行推理并做出这些决策,到那时也许人类可以不再参与这些高层次的决策。

但好的软件工程师和好的软件架构师对他们试图做的事情的各种可能性有着非常广泛的背景知识。在我们能将所有这些背景知识数字化并整合到生成式AI中,并且提升它的推理能力之前,我认为我们仍然需要人类来完成这些工作,至少在相当长的一段时间内。

Paxton Hehmeyer:这很有趣。Mehran,基于这个假设,现在是5年或10年后的未来,你在这里负责计算机科学课程,观察着学生们。有什么会让你感到遗憾的事情吗?我指的是,人们总是担心随着技术的进步,某些技能可能会被削弱。这不一定是坏事,可能是好事。如果你不再做这件事情,你就会去做别的事情。

特别是,你的一位前同事Daphne Koller在最近的一次演讲中提到了一点,可能与此稍微有些相关,她说就机器学习而言,随着最近的进展,研究人员深度思考如何将特定问题映射到模型上的能力逐渐减少了,如何将问题映射到机器学习模型上。因为现在你可以直接将数据扔给问题,但尤其当你进入数据稀缺领域,比如物理系统或者机器学习,或者说自动驾驶等领域时,你仍然需要具备那种深度思考的能力,来将问题映射到特定的机器学习模型上。所以这是我表达的方式。那么在未来5到10年内,你会感到哪些技能被失去了呢?无论好坏。

Mehran Sahami:是的,我觉得这是一个很好的问题。就我个人而言,我应该说,我看到的正面影响远远多于负面影响。当我还是本科生的时候,我们所有斯坦福计算机科学专业的学生都必须上机器语言课,对吧?因为这是你在机器中加速特定任务所需要的东西之一。我认为这是一个很有趣的课程,也是一门有趣的课。我并不遗憾学生们不必学习这个,因为我们已经进步到一个阶段,让学生们可以思考更高层次的问题,并且让这些东西得到了很好的优化。所以我不为这一点感到遗憾。

我可能会遗憾的是,随着这些系统的构建和开发,我们的学生是否有能力像Andrew提到的那样去思考,哪些概念能够对他们的代码产生重大影响?这就是我不希望失去的东西。比如缓存,一个对代码有巨大影响的概念。再比如并行化,也是一种对代码有重要影响的概念。

我不希望人们变得自满,认为所有事情都会被自动处理好,机器越来越聪明。所以我可以设想一个世界,在那里我们会不断地向上爬,去思考我们需要担心的事情。然而,我希望我们不要忽视那些基础概念。希望永远有人能够思考,我们能否以一种不同的方式考虑这个低层次的东西,这样可能会加速整个堆栈上发生的所有事情。

但我认为现实情况是,我们不需要每个人都做那样的事情。我们需要一些人专门研究这些东西,而其他人可以从中受益。这让我想起了一个来自Facebook的例子,当时它还叫Facebook而不是Meta,他们使用PHP作为编程语言,有一个团队专门负责优化他们在内部实现的东西。有趣的是,他们获得的任何性能提升,公司其他人都能从中受益,因为他们只需要在该堆栈之上运行。

实际上,有时候——我记得,当时他们的首席技术官是Mike Schrepfer,他说他们在思考机器资源的季度配置时,预计的需求甚至会比他们当前拥有的减少,因为效率提升非常显著,现在他们有很多机器可以被用来执行那些任务。因此,随着这些工具越来越智能,我们也可能逐渐接近那样一个世界。但我不想失去这一事实:仍然有一些人在低层次上工作,他们在为每个受益于这些优化的人创造价值。如果我们都在堆栈顶部,那么最终我们将失去底层的优化。

Paxton Hehmeyer:Andrew,你有什么想补充的吗?我还有一个后续问题,但关于Mehran刚才说的内容,你有什么想补充的吗?

Andrew Ng:是的,Mehran说得非常好。计算机科学取得如此进步的一个原因是多层次的抽象。从量子物理到晶体管、半导体,从汇编语言到低级和高级编程语言。在AI中,我们有学习算法、基础模型、应用程序。所以这是一个巨大的堆栈。

我认为有一些人——如今仍有人关注量子物理和晶体管物理,这很好。人们在堆栈的每一层上工作。我的一个体会是,当出现新技术时,能够深入几层是很有帮助的。例如,现在的大语言模型相对来说还不够成熟,存在编排层来帮助人们管理使用LLM构建的工作负载,但因为这项技术仍然不成熟,如果你能够突破这个抽象层,深入一层,通常你可以获得更好的性能。

汇编语言可能是一个例子,曾经普通人可以写出比编译器更好的汇编代码,但老实说,今天我不想再和编译器竞争优化代码了。有些人可以,但不是我。所以我们只是在更高层次的抽象上工作。所以我认为动态地建立抽象层是很重要的。有时候,我们确实希望教人们深入几层,例如大部分时间,我不担心排序函数,我只会调用其他人的库来进行排序,这样就可以了。

但如果你需要对非常大的文件进行排序,且需要换到磁盘上,因为内存不够,这时理解排序的实际工作原理可能会帮助你思考如何架构排序。这是一个特殊情况。大多数时候我不担心排序,但在一些特殊情况下,理解排序的工作原理依然会带来更好的性能。

所以关于计算机科学系的事情,我认为,随着抽象层的上移,继续在堆栈上移,同时要深思熟虑地考虑让所有人深入到什么程度,因为有时候它是有用的,而有时候它变得不那么有用了。

习得编程思维带来的影响

Paxton Hehmeyer:这真的很有趣。我想回到这些抽象层次的问题上来。但Andrew,就在刚才那个问题的基础上再问一个后续问题。在讨论AI对工作的影响,特别是生成式AI对工作的影响时,我认为你提到的一个非常有用的框架是,不要只考虑工作,而是考虑你在做的任务以及它将如何影响这些任务。能不能请你对此稍作展开?

特别是,我从你们两个的讨论中听到的是,也许在未来几年,也许我在做的很多事情是,过去我要找一个斯坦福计算机科学的学生去做的,比如“嘿,你能为我写一个爬虫来查找这些东西并将我们的网站与斯坦福的网站进行比较,以确保我们没有不同步的地方吗?”或许在未来,这些程序可以交给没有强计算机科学背景的人来完成,我只需像给学生写说明一样思考这些任务,把它放进LLM里,它就可以为我生成代码。

那么这些低层次的任务就交给没有正规教育背景的人去做,但它成为了我工作任务中的新部分。而那些计算机科学家则在更深的抽象层次上思考,考虑如何优化。这是个很大的问题,Andrew,所以关于AI对工作的影响,特别是在任务层面上的影响,你能否详细说明一下?

Andrew Ng:好的。我其实想感谢Erik Brynjolfsson以及他的同事们,比如Tom Mitchell、Daniel Rock等,他们真正开创了基于任务的工作分析方法。在社会、政府和学术层面上,我们担心AI会自动化取代工作岗位。而在帮助个人发现机会的过程中,我发现基于任务的分析更为有用。真的是Eric教会了我这一点。把一份工作分解为若干任务,然后看哪些任务可以由AI自动化或增强。这是我希望看到的,我真的想鼓励几乎全世界的每个人学习编程。我认为对于许多知识工作者来说,这是非常有价值的,或许几乎所有人都应该学习。

曾经有一个社会在讨论每个人是否应该学会读写,对吧?当时有人认为,没必要学会阅读和写作,只需让别人替你读就好了。而幸运的是,我们已经超越了这个阶段。今天我们依然在思考,是否每个人都应该学习编程。我认为答案是肯定的。

我的孩子们还很小,我计划等他们稍微大一点时教他们编程。这是因为能够精确告诉计算机你希望它为你做什么,对我来说,这是编程的核心。编程并不是关于语法的。我喜欢Python,但编程并不是关于Python编程语言,而是关于如何解决问题、分解问题,并系统地告诉计算机要怎么做的能力。

我确实看到了某种奇怪的,甚至可以说是微妙的趋同现象,不能说太夸张——介于英语和Python之间。因为我现在写的Python代码中有很多英语部分,因为我要写提示词,告诉计算机应该做什么。同时,当我为一些任务写英语时,我的英语呈现出结构化的逐步执行模式,比如“做这个,做这个,做这个”,这使得我的英语看起来有点像伪代码。

但我认为编程的核心是能够精确地定义并告诉计算机你想让它做什么。我看到很多人从事的工作并不是软件工程师,比如我的团队中有一位市场营销人员,他实际上写了代码来抓取网站,帮助他收集有关市场的情报。还有一位记者团队成员写了代码,帮助他标记需要注意的有趣故事。再比如有一位投资者团队成员写了代码,试图自动化生成法律合同。

因此我看到,很多人的工作角色不是软件工程师,但借助于生成式AI作为编程助手,每个人都能够更轻松地进行一些编程,从而在许多工作角色中大大提高生产力。

Paxton Hehmeyer:这真的很有趣。Mehran,我有另一个后续问题。关于高层次抽象的问题,我想暂时按下不表。基于Andrew所说的内容,我知道你谈论了很多,关于计算机科学教育中的一种计算思维,以及如何分解一个问题。我想知道你能否基于Andrew的观点进一步阐述一下,尤其是关于计算机科学入门课程的思考。听起来,课程的重点真的是教他们如何思考这些系统是如何工作的,如何系统地思考和分解问题。

我很喜欢你们讨论的编程中的“可读性”这一点。这让我想到Don Knuth,他也是斯坦福大学的教授,对吧?这几乎是他在大约40年前提出的倡议。

Mehran Sahami:是的,这就是我们要记住的事情之一。你会发现这些主题反复出现,因为它们真的很重要。比如说,我们在教授编程时如何考虑课程的构成,以及如何看待学生技能的发展。在第一门课上,我实际上会告诉学生们一个让他们感到困惑的事情。学期末的10周时间里,他们学了一大堆Python,做了很多编程,我会站在讲台上说:“这不是一门编程课。” 他们会惊讶地问:“你在说什么?我们这几个星期不就是在编程吗?”我会回答:“是的,这是一门关于问题解决的课程。”

是的,我们教了你们Python,但我们真正想让你们理解的是,如何系统地思考问题,类似于Andrew所说的内容。你如何把一个问题分解成更小的部分?如何解决这些小问题?如何将它们组合起来,解决更大的问题?这是我们在世界上解决重大问题时所做的事情,对吧?我们不可能因为一个人做了某件事就解决气候变化,而是需要把各个部分以更加系统化的方式组合起来,去寻找更大的解决方案。

编程是一种方式,可以将这种思维方式编写出来,以便我们告诉计算机执行某些操作,但它也让我们自己对问题的思考、问题解决以及问题的分解更加清晰。因此,当我们考虑生成式AI的作用时,它在某种意义上是一种协同合作伙伴,帮助我们思考不同的方式去分解问题。当我们把问题分解到某个特定的层次时,解决这个问题所需的层次可能不像以前那样低,需要自己去生成代码,但它赋予了很多人思考更小部分的能力,贡献出自己的一份力量。

所以我认为我们所提供的只是一个赋能的层次。我们在编码中的思维过程,问题解决中的思维过程,或者计算思维,这些东西是会继续存在的。而现在通过AI工具,我们能够思考这些部分是什么,如何实际编写它们,如何将它们组合在一起,基本上就为我们的工具箱增加了更多的强大工具。因此,我对这件事情的多重层次的影响感到非常兴奋。

回到一点,这不仅仅是编程的问题,而是清晰思考的问题,因为你必须在足够清晰的层次上描述给计算机,以便它能够执行。而这种思维的清晰程度在人与人之间的一般交流中同样非常重要。

Paxton Hehmeyer:这真的很有趣。

Andrew Ng:是的,我要说一些可能有点奇怪的话。但有一些非常有趣的研究似乎表明,我们在训练大语言模型时,如果同时训练代码部分,它在其他非编码任务上的表现也会变得更好。我认为最近,我们在一个叫做Strawberry的模型上看到了这一点。我觉得它在开发工作中很多都是关于编码和解数学难题的,但它在处理非编码和非数学难题方面也非常出色。

如果你相信这些证据,虽然它们有点飘忽,但或许有一些证据表明,学习编程后,生成式AI在解决其他问题时也会变得更好。我的一部分好奇是,这是否也适用于人类,学习编程教会了一种分解问题、逐步解决问题的框架,可能帮助人们解决其他问题。因此,这可能又是鼓励每个人学习编程的另一个理由。

Mehran Sahami:我想再补充一个数据点,因为我觉得这是个很好的观点。其实这并没有那么奇怪,它背后有一些直观的道理。我们之前提到诺贝尔奖时提到了Carl Wieman,他是诺贝尔物理学奖得主,在职业生涯的后半段专注于教育,真正将科学方法带入教育领域。

几年前,他做了一项很有趣的研究,关于如何学习电路功能。输入一些信号,输出一些信号,试图让人们理解这个电路的工作原理。他让来自不同专业的学生去理解这个问题,并找出它的工作原理。他发现,跨越很多专业,表现都差不多,包括电子工程。而当他找到了计算机科学学生时,他们的表现显著不同。

于是他给我发了封邮件,问道:“你们到底在教什么?为什么这些学生的表现和其他人有两倍标准差的差距?其他人也是斯坦福的学生,对吧?总体来说,他们也都是聪明的人。”我思考了一会儿,觉得可能我们思考的事情是系统化思维,对吧?计算机是系统性地执行操作。因此,作为一个人类,如果你想在脑海中模拟这种执行,如果你想理解世界中机制的工作原理,你会想如何系统地处理它们。什么是执行模型?输入如何映射到输出?因此,如果计算机在某种程度上根据这一点学到了一些概括,那它将这种概括应用于其他任务也并不奇怪。

Paxton Hehmeyer:是的,这真的很有趣。我想接下来,也许Mehran你可以谈谈如何在更高的抽象层次上推进教育。

Mehran Sahami:当然。我的意思是,我们希望学生们作为计算机科学家和程序员思考的一件事是,他们手中掌握着这些强大的工具。而随着生成式AI的出现,这些工具的威力只会越来越大。因此,理解你所构建的东西的影响是什么,谁受到了什么样的影响,这些影响的分布效应是什么是很重要的。不同群体受到的影响是不同的。

几年前,我们启动了一个课程,它实际上是以哈佛大学的一个项目为模型的,叫做'嵌入式伦理'(Embedded Ethics)。在许多课程中,包括Andrew帮助开创的机器学习课程中,我们加入了一些模块,告诉学生,在你所进行的技术工作中,这里有一个特定的社会问题需要考虑。不论是算法决策中的公平性,还是关于隐私的问题,数据的维护方式,或者人们对其数据的权利,以及你选择的优化目标,不同的优化目标对谁产生什么样的影响,这些问题都被嵌入到课程中,使学生能够看到他们所做的技术工作具有社会影响。

这样他们就可以在进入工业界、学术界或成为研究者时,继续思考这些问题。无论是直接的还是间接的,他们的工作都会在社会中产生波动或涟漪效应。理解和认识到这一点,能够帮助他们在选择要解决的问题、如何部署技术以及设置哪些保护措施方面做出更好的决策。

Andrew Ng:是的,实际上,我想补充一点。多年前我亲眼看到,Mehran一直在努力将这种负责的AI和计算机科学理念贯穿于整个计算机科学课程中。这是在AI安全性成为热点话题之前很久的事情了。

不幸的是,现在'AI安全性'这个术语被滥用于指代科幻末日情景。但我所看到的——Mehran还共同撰写了《Systems Error》一书,讨论了一些实际问题,以及如何采取实际行动来解决偏见和系统性错误等问题。我认为不幸的是,部分AI安全性已经变得像科幻中的邪恶机器人和末日场景那样。我认为,在Mehran很久之前就在斯坦福推动的非常现实和实用的AI安全性方面,有很多重要的工作要做。

Mehran Sahami:类似的,我认为你有很好的见解,Andrew,你所做的工作,包括在参议院的证词,围绕着问题的解决,而不仅仅是从技术的角度来看待监管,实际上很好地诠释了我们真正需要管理和处理的现实问题。这些才是我们应该关注的,因为这些才会带来真正的影响,而不是担心末日场景或者仅仅关注技术变得更强大。

技术一定会变得更强大,这不是争论的焦点,这是既定的事实。但我们如何使用这项技术是思考其监管时的关键因素之一。

Andrew Ng:是的,我完全同意。

AI对各行各业发展的影响

Paxton Hehmeyer:基于这个讨论,Andrew,你提到的编程,现在你说每个人都应该学习编程,这是一项基本技能。也许可以进一步扩展一下,或者说是对它的补充,正如Mehran所说的那样,这是一种解决问题的策略。你如何将问题分解为特定的任务或挑战。所以我想问的是,Andrew,你认为领域知识在其中的价值是什么?

有很多研究,甚至可以追溯到互联网和Google出现的时期。当你可以在Google上搜索任何东西时,你可能会高估自己的知识量,因为它并不在你的大脑里,而是在这个大脑的扩展部分——即网络上。我也听说类似的事情,不是在计算机科学系,而是在其他系,有很多研究生在入学时对数据科学和统计方法有很深的了解,但他们可能丢失了一些他们领域的核心知识。

所以我想知道,随着更多人可以获得这些技能,或者说是这些计算方法,或者是大型语言模型,你认为领域知识的作用在哪里?我指的是,我们是否需要更多对政策有深入了解的人,而不仅仅是在解决问题方面,而是在非常实用的层面?现有的法律是什么?这些方面如何发展?在这个过程中,领域知识的作用是什么?

Andrew Ng:是的,所以当你考虑AI时,我认为AI最令人兴奋的地方是当我们可以将它应用到某个具体领域时。孤立的技术,坦率地说,是没什么用的,直到我们找到能够应用它的实际场景,创造实际价值。AI是一种通用技术,它在经济的各个领域中都有机会找到令人信服的应用场景。比如医疗、教育、金融服务、物流等等。

我发现,很多我有机会参与的最令人兴奋的项目,都是我作为AI技术人员,与某个在我所不了解的行业里拥有深厚领域知识的人合作。事实上,我在斯坦福的某些学生专注于将AI应用到医疗领域。坦率地说,我对医疗了解了一些,但与医学院的医生相比,我的知识量微不足道。因此,我觉得,当AI专家与医疗领域的专家,或者其他领域的专家合作时,往往会有机会创造非常令人兴奋的应用。

Paxton Hehmeyer:Mehran,有什么你想补充的吗?我知道在计算机科学系,你们有很多专业领域。而且还有一些学科本质上是计算学科,但也是特定领域的,比如生物医学数据科学或者计算生物学。

Mehran Sahami:我认为Andrew完全说到点子上了,对吧?当你想在某个领域解决特定的问题时,你需要具备一些领域知识,以便理解这个问题。哪些是值得解决的有趣问题?哪些是值得投入的有价值的问题?过去有哪些解决方法?它们成功与否?

如果你考虑到解决问题的全部方法范围,它是非常庞大的。而拥有一些领域知识可以帮助你缩小范围,找到那些成功概率更高的方式,然后再与那些拥有计算技能或其他领域技能的人合作,进一步缩小你可能使用的技术,找到更有效的解决方法。

同时,还需要拓宽我们的视野。就像Andrew提到的医疗领域,我认为这是一个非常非常重要的领域,未来AI在这个领域可能带来巨大的益处。我过去几年也和一些政治学家在政策领域有合作。有很多关于政策制定过程的内容,政策的思考方式,基于伤害框架与基于权利框架等内容,我以前都不了解。

但我可以从技术角度提供一些见解,从而思考,如果我们要讨论某个问题,比如隐私,我们如何思考与技术可行性相对的价值权衡?这意味着什么?在政策制定的意义上,这意味着什么?我认为,当我们能够将不同领域的知识结合在一起进行对话,努力推动某个特定领域的进展时,这种领域知识的价值就会展现出来。如果没有与那些真正有领域专业知识的人交流,我绝不可能对这些问题有同样的理解。

Andrew Ng:还有一点,Mehran,我看到的一个让人既兴奋又有压力的动态是——正如我之前提到的,生成式AI让很多团队能更快地完成任务。由于AI和计算机科学与许多行业进行了整合,计算机科学推动的快速节奏正在给许多其他行业带来压力,让它们也需要加速。

举个例子,在医疗领域,FDA审批可能需要几个月甚至几年,但现在,尤其是有了生成式AI的帮助,计算机科学人员能够在几天甚至几周内完成以往几个月的工作量。有很多应用程序,以前需要花费我一年的时间来构建,但今天有成千上万的人能够在周末完成这些工作,因为新技术的进步。

“快速行动并打破规则”这个口号因为一些人行事太快,搞砸了事情而名声不好,但我认为“快速行动并负责任”是可能的。有一个框架可以引用Jeff Bezos的话:“两扇门而不是一扇门”。确保你能快速行动,但不破坏事情。有很多方式可以用负责任的方式编写软件和进行实验,而不伤害他人。我们有这些过程,我发现,在很多应用和每个行业中,你实际上都可以快速行动。

所以我经常与大公司交谈,C-suite(高管层)或董事会有时会让我与他们聊聊,关于如何在技术之外的不同行业中,比如制造业、医疗或者其他完全不同的领域,思考如何利用现在计算机科学和AI可能带来的速度,是否有新的公司流程可以用来快速行动。坦率地说,如果你因为行业的自然节奏而慢慢来,而你的竞争对手却在一周内完成了你需要一年完成的任务,这就会带来一个具有挑战性的动态。

所以我看到,计算机科学和AI以及生成式AI所带来的速度,实际上可能正在让很多人感到压力。老实说,我对很多感到压力的人非常同情。我理解这确实很有挑战性,但我认为,如果我们共同努力,很多行业和很多人都会变得更好。

Paxton Hehmeyer:你认为这种压力的部分原因是——我们在谈论编码和教育,是否是因为没有足够多的计算机科学专业的学生?或者说如果有更多的人学习CS106A和CS106B课程,我们是否能够解决这些问题?这是否是阻碍速度的瓶颈之一,是否因为缺少具有技术背景的人?

Andrew Ng:现在确实存在巨大的技能缺口,缺乏能够构建和执行AI项目的人才。我知道计算机科学岗位的就业市场有起有伏,但真正有技能的人,远远不够。学习CS106A和CS106X是成为具备计算机科学高技能人才的绝佳第一步。

Mehran Sahami:谢谢你,Andrew的推荐。我想补充一点,Andrew说的完全正确,但人们常常会问,AI是会创造工作岗位,还是会让人失业?它会毁掉工作吗?我记得有一次,一个技术公司的CEO小组问我这个问题,我的回答是,AI既不会创造也不会毁掉工作,是你们在创造或毁掉工作。AI是一种使能技术,它会改变生产力的格局。接下来就看人们如何决定是内部化这些生产力的增益还是损失。

举个简单例子,假设你在编码和软件组织中使用生成式AI,让整个软件组织的生产效率提高了20%。那么某位高管就需要决定,你要如何利用这20%的生产力增益?是追求20%的更多产品、更多功能、更多构建的东西,还是减少20%的工程师劳动力?这就是一个人类的决定,而不是AI的决定。

所以,我们始终需要记住的一点是,AI将改变人们的生产力效率,但对于这些生产力的提升如何被利用,是由人类来决定的,决定去解决更大的问题或追求更大的目标。

Paxton Hehmeyer:非常好。总结一下我从你们两位那里听到的内容,我真的喜欢这个短语,“快速行动并负责任”,Andrew,我喜欢这个主意,AI在不断打开新的可能性。Mehran,你提到AI正在帮助我们做出更多的决定,如何有效地部署资源。

最后在教育方面,是的,学习编码吧。每个人都应该学习编程,学习如何以计算的方式思考,如何系统地分解问题。我们快结束了,还有什么你们还没来得及说的吗?Mehran,你还有什么想补充的吗?

Mehran Sahami:嗯,我是有很多可以补充的,但鉴于我们只剩几分钟时间,我想说的是,在AI带来的焦虑和机会之间的整体平衡中,我认为如果有人能专注于这些机会,那将是非常有意义的。同时,作为个人,我们有责任不断更新自己的技能。正如Andrew所说,AI的其中一个作用就是加速器,让一切变得更快,这意味着我们也需要加快步伐,才能跟上这些变化。但如果我们能做到这一点,我认为机会是巨大的。

Paxton Hehmeyer:很好。Andrew,你有什么想补充的吗?

Andrew Ng:是的,你的总结非常到位,谢谢。我认为AI为每个人带来了广泛的新机会,使这些机会更加民主化。今天,有很多工作岗位中,我很难想象雇佣一个不会使用网络搜索的人。就像,你能想象一个不会使用互联网的营销人员、招聘人员或者其他角色吗?在大多数公司中这是难以想象的。

我认为我们将会到达这样的阶段,要想在许多工作岗位中有效工作,能够使用AI,甚至能写一些代码,将是一个巨大的优势。我在做一个在线课程叫“AI Python入门”,目的是教会大家一些技能,但看到朋友们学了一点点代码,然后在几天或几周内部署出真正有价值的应用程序,而他们并不是传统的软件工程师,我觉得这是非常令人兴奋的。

所以我认为,对于优秀的软件工程师来说,有很多机会让他们更高效。我真的无法想象未来的软件工程师不使用AI。同时,AI使得每个人,不仅是软件工程师,都能够让计算机为他们完成以前非常困难的任务。而且趋势是,AI让写代码变得更加容易,即使你不是软件工程师。事实证明,现在很多人可以编写AI应用程序,也就是说你可以用代码调用其他AI系统来为你完成大量任务。

所以在可预见的未来,我认为掌握一些编程技能的人将会比完全不会编程的人有很大优势。而挑战在于我们如何帮助每一个人。就像很多人必须学会使用互联网,学得更快的人更早获得了更多的成果。我确实认为,现在有一个广泛的社会挑战,那就是如何利用这个令人惊叹的低成本工具,帮助更多人学会如何利用它,为他们自己、他们的家庭和社区带来好处。

Paxton Hehmeyer:感谢你们两位。我们真的很幸运,有你们在引领这个教育世界的努力,教会大家如何做到这一点。所以再次感谢你们两位。感谢所有加入的朋友们。我们在问答环节中解决了很多问题,但我知道还有更多问题没有解决。再次感谢大家。

原视频:Stanford Webinar - How AI is Changing Coding and Education, Andrew Ng & Mehran Sahami

https://www.youtube.com/watch?v=J91_npj0Nfw

编译:David
-----------END-----------
🚀 我们正在招募新一期的实习生
🚀 我们正在寻找有创造力的00后创业者
关于Z Potentials

Z Potentials
我们与Z Potentials同频共振
 最新文章