点击上方蓝字关注“尹哥聊基因”
最近微信改版,容易找不到尹哥的文章,大家记得把尹哥设为星标⭐️ 哦~
近日,
Devin-全球首位AI全栈程序员问世
,引起了极大的轰动刷爆全网。先前通过跟ChatGPT讲一句话能生成可直接运行的俄罗斯方块小游戏让人惊叹不已。这次AI程序员Devin诞生——能从聊需求、设计执行计划,到编码、测试验证,再到部署运行一气呵成!换言之,
AI能完成端到端地构建和部署应用程序,这就有点细思极恐了!日前,英伟达皮
衣教主黄仁勋说:人类再也不需要学习如何编码了,孩子们应该停止编程课(所以以后只需要买GPU卡就对了吗,手动狗头)。让程序猿们震惊的同时也陷入深深的焦虑:
砸饭碗的日子终于要来了吗?
在过去的几年里,AI在各个领域都取得了显著的进展,AI大模型的代码生成已经成为软件开发领域最大的热点。这些工具利用深度学习算法增强的自然语言处理(NLP)能力,以便理解开发者的意图,以自动生成相应代码,极大地提高了开发效率。然而,随着这类 AI 工具能力的不断增强,人们开始担心它可能会替代程序员的工作,至少是很多初级程序员的工作。一时间广大码农人心惶惶,担心是不是又要下岗去送外卖了。那我们今天就来聊聊这个事情,码农们的饭碗还能不能端得住!
01
随着AI大模型持续火爆,代码开发这种对生成式AI天然友好的领域自然受到了重点关注,各种工具层出不穷
以目前热门的Github Copilot为例,目前已具备技能有:
自动代码补全:能根据代码上下文,自动补全代码,包括函数、变量、类等的声明和实现。
根据注释生成代码:只要在注释中清晰地描述想要实现的功能,GitHub Copilot 会根据这些描述生成相应的代码。
方法和函数生成:当输入一个方法名或函数名时,GitHub Copilot 可以自动生成该方法或函数的代码实现。
生成单元测试代码:可以自动生成类的单元测试代码。
根据代码生成文档:Copilot 能够根据函数的名称和参数,自动生成注释、文档,帮助开发者维护代码文档。
此外,Copilot支持多种编程语言,最重要的是能根据开发者的反馈和社区的代码更新不断学习和改进。
得益于ChatGPT的话题,GitHub的影响力,Copilot带来了广泛的影响,但实际上类似的产品有很多:
△ 主流的AI代码生成产品
经实测,现阶段AI代码生成确实可以做到很多事情:代码生成、代码补全、编写测试用例、代码注释、代码翻译、解决算法问题、技术栈分析、文档编写、代码优化建议、代码审查等,虽然准确率、理解能力、灵活度还有待提升,作为单兵工具完全没有问题
仿佛一夜之间,广大程序猿们发现自己干的事情好像AI都能干了,甚至可能比自己干得更快更好,毕竟AI编程可以7*24小时干活只要有电就行。
02
先说说自动代码生成,其实在AI大模型之前早就有了
要说追求工作效率这块,程序员绝对是排在前面的,也是最会革自己的命的。各类的自动化工具的编写者,也是最会偷懒的。因此编程辅助工具的历史悠久,从VB的拖拽编码到代码生成器再到低代码平台,代码自动生成大致可以分成以下四个阶段:
早期的代码生成:模板和脚手架
最初的代码生成工具主要基于模板。开发者创建一系列预定义的代码模板,然后通过填充特定参数来生成代码。这种方法简单高效,能够快速生成一些固定功能的代码块,但通常缺乏灵活性。如前端开发中的 vue-cli 和 create-react-app,可通过一键初始化项目来生成基于 Vue 和 React 框架的代码结构。
可视化编程:拖拉拽界面
随着技术的进步,可视化编程工具开始流行。这些工具允许用户通过图形界面来组织和操作代码块。通过UI把一些标准的功能代码块以插件的方式封装在工作台,所见即所得,辅助逻辑流程控制能够完成一些功能较复杂的代码开发,不仅如此,这还使非开发人员也能参与到软件开发中来,把一些需求方转变为了开发方,如发动机控制和车身控制系统
代码语料库:基于IDE的插件
随着集成开发环境(IDE)的普及,基于代码语料库的生成工具开始出现。这些工具通常作为IDE插件存在,能够根据开发者的输入和上下文提示代码片段。这种方法提高了开发效率,尤其是在处理重复性代码时。
如果说前面是帮程序员生成固定的模块化代码,本质上还是程序员自己写的代码,从这里开始才是有了自动编码的雏形,机器和程序员交互产生代码,虽然还比较简单,集中在语法提示和代码补齐等碎片化辅助的阶段。
智能化代码生成:生成式AI的崛起
随着AI技术的发展,智能化代码生成工具取得了巨大进步。这些工具使用机器学习模型,特别是大语言模型(LLM),如 GPT-3 和 Codex,来理解自然语言上下文和语义,并以程序语言输出,产生惊人的coding效率。依靠GitHub提供海量代码库作为语料库,Copilot训练出了强大的代码能力,它能够自动填充代码,给出建议,甚至可以根据注释生成代码。AI已经可以独立生成大段大段的具有完整逻辑的代码了,如开篇所说Devin甚至独立完成应用开发。
03
然而,程序员的工作不只是写代码,大量的工作在编程之外
程序的本质是一组计算机能识别并执行的指令集合,程序员的主要工作则是将需求转换为这些可扩展、稳定、高效、可重复执行的指令代码。
因此程序员的工作到底是什么?大家一直有一个误区,就是程序员一天到晚都在电脑前面写程序,而事实是:对大部分程序员来说,代码coding只是工作的一小部分,为什么?
软件开发过程涉及需求分析、架构设计、模块拆分、编码实现、测试验证、成本性能、文档、审查等诸多内容,编码只是其中之一。完成一项工程的落地,其难点在于工程越复杂,其中沟通理解的工作就越复杂。如战场指挥一般,了解需求方的真实目的,促进需求方理解自己的真实需求;协调开发的互相协作,分工配合;促使所有人理解项目的本质,从而完成长龙摆尾一般的项目,这些会消耗日常开发工作的大量时间。如有兴趣,大家可以阅读一本来自40年前的经典著作“人月神话”。笔者是所在公司的核心架构师,按照日常经验判断程序员真正coding的时间只占工作时间的30%左右,基本这也是国内大部分程序员的工作日常。一个残酷的事实是,打得一手好代码只是软件项目成功的众多因素之一,甚至很多时候还不是最重要的那个。
所以,程序员的痛点从来不在写代码:
• 理解复杂需求,了解真实的需求,将其转化为可执行方案;
• 促使系统架构、设计模式最大程度匹配业务逻辑,跟随业务的演进,不断改进架构,使其具备高稳定、高性能和高扩展;
• 面对各种问题,促进各个部门、人员的沟通,协调各种配合问题;
• 面对新技术,持续不断地学习、创新、自我突破的能力;
通过这些方面的水平,我们可以评价一个程序员是否足够优秀,本质上是软件工程,而不是具体的代码开发,这是一个建立在智力密集基础上的综合型工作,顶级程序员可遇不可求,当前乃至将来,没有AI能达到他们的水准:
• Dennis Ritchie - C语言和UNIX的创造者,对现代编程语言和操作系统的发展作出了巨大贡献。
• Niklaus Wirth - Pascal语言的创造者,对结构化编程有重要影响。
• Linus Torvalds - Linux和Git的创造者,推动了开源软件运动的发展。
• Richard Stallman - Emacs文本编辑器和GCC编译器的创造者,为开源社区作出了巨大贡献。
• Donald Knuth - 《计算机程序设计艺术》的作者,TeX数字排版系统的发明者。
• Bram Cohen - BitTorrent文件分享协议的发明者,对P2P技术的发展产生了重要影响。
• Guido van Rossum - Python语言的创造者,对推广Python语言和动态编程做出了贡献。
• James Gosling - Java语言的共同创造者之一,对面向对象编程语言的发展有重要影响。
• Anders Hejlsberg - 计算机编程语言设计师,参与了Turbo Pascal、Delphi和C#的开发。
• Yukihiro Matsumoto (Matz) - Ruby编程语言的创造者,对Ruby社区和Rails框架的发展有重要贡献。
同时,有一个不起眼的事情,但AI的确能帮助程序员解决历史问题。因为程序员们也经常需要面对技术债务和遗留代码的历史问题:“代码屎山”的问题、传承问题、人员传帮带问题。这是生成式AI 能发挥的地方:通过生成规范的代码片段来提高代码质量,减少所谓的“代码屎山”。提供重构建议,帮助改善现有代码的结构和可读性;通过生成文档和注释,有助于新团队成员理解和维护旧代码。还可以通过代码示例和注释来加速新技术的学习过程。AI工具可以促进团队成员之间的知识共享,通过提供代码审查和bug检测等功能,帮助团队提高协作效率。
生成式AI现阶段作为开发辅助工具,在工程的局部,如在提升开发效率、提高代码质量以及完善项目文档方面具有很大优势,但在整体性问题上,代码准确、对复杂需求的理解、架构设计、项目协作、创造性等方面较弱,人类开发者的经验和判断仍然是不可或缺的
04
未来只有大数据程序员:短时间内AI不会取代程序员,但会改变程序员的工作方式,变革职业属性
程序员必须向跨学科的综合型人才发展。学习路径变了,以前写程序从hello world开始,现在要从跑个模型开始;知识储备变了,不再是21天学一门开发语言,语法和数据结构被模型和参数替代。程序员要回归到对数学、物理、工控等基础学科的认知,计算机科学的边界越来越模糊。
AI造就更多的全能程序员,程序员岗位加速融合,不再分前端、后端、运维等,AI将使得全栈工程师成为普遍现象,AI会成为程序员的得力助手。长期来看,生成式AI很有可能集成CICD(Continuous Integration,Continuous Delivery/Continuous Deployment:持续集成和持续交付/部署,指在应用软件开发和运维中引入自动化来达到快速频繁的迭代和升级部署的方法,显著提高软件开发的效率和质量),角色从水电工晋升到包工头,解决AI生成代码的功能、稳定及性能的验证问题。再远一点,生成式AI可能解决系统中某个模块、服务的定义、集成与扩展。
率先拥抱AI的程序员将领先一步在变革中获利开辟职业新天地,获得更大的发展空间。AI大模型也会加速程序员的分化,好的越来越好越来越快,通过指挥AI工作,得到级联放大的效果,一个人顶一个团队;不能及时跟上,掉队的人则面临被淘汰的风险。从这个角度来看“拧螺丝”的程序员的确会被AI替代,但与其说是被AI替代不如说是被历史淘汰,脱离编程这个领域,这是历次技术变革时必然发生在劳动者身上的事情。AI的发展本身也需要更多优秀的程序员,Devin背后拥有一支强大的金牌程序员团队,AI会继互联网之后再次激活软件工程师的庞大需求,只是热点从数据库、中间件、云平台等转向大数据、模型算法、AI模型训练、混合计算、大规模计算等更广阔的领域。
如果不关注更远的时空,以科幻的角度去理解需求的产生和开发过程中的各项配合,没有人的过程会比有人的过程更为简单。可能在那时,AI确实代替了程序员,但我想那不仅仅是程序员要担心的问题。从现实角度来说我们大可放心,未来30年程序员依然是最好的职业之一,AI代替程序员工作,这是程序员做梦都想的事情,让程序员失业,还早得很!
— END —
继续阅读
阅读原文