草庐IT

所以,编程能力会消失吗?

徐杰承 2023-03-29 原文

作者 | Anirudh VK

译者 | 徐杰承

自动编码平台现在正处于程序员新兴技术的最前沿,为开发者编写代码片段提供了一种全新的人工智能驱动的替代方案。尤其是在微软GitHub Copilot平台的推动下,这一进步目前正在慢慢改变全球开发人员的工作模式。

近年来许多编码的替代方案,如无代码和低代码平台,都非常适合非技术用户。虽然此类工具在技术圈内引起了一些“铁杆程序员”的鄙夷和愤怒,但我们不得不承认的是,即便是最有经验的编码老手也能够从自动编码算法中受益,因为它将极大地减少开发人员实际需要键入的代码量。

特斯拉和OpenAI的前人工智能总监Andrej Karpathy在他的推文就曾表达了对自动编码工具的感情:

“Copilot大大加快了我的编码速度,在尝试使用Copilot后,我很难想象再回到‘手动编码’将会是怎样的一种体验。虽然目前我仍在学习使用它,但它已经能够帮助我编写约80%的代码,并且能够保持约80%的准确性。我想说的是,在使用Copilot进行工作时,我甚至没有真正的进行编码。”

Andrej Karpathy的言论也得到了大多数开发人员的认可,由于自动编码平台能够帮助开发者节省大量编码时间,以至于他们能够将更多的精力投入于处理应用程序的其他问题,因此自动编码平台也在短期内以惊人的速度在全世界范围内被快速采用。以GitHub Copilot为例,在推出在一个月内,CitHub Copilot便吸引了超过40万的付费订阅(10美元/月、100美元/年)。然而随着这些不断改进的工具开始承担更多的编码任务,一个新的问题也出现在了我们面前:开发人员是否会因为依赖自动编码工具而逐渐丧失编码技能?

1、侵蚀编码能力

老实说,任何使用过自动编码类工具的人都知道它们所自动编写的代码并非完美。虽然建议的代码片段的语法可能没有任何问题,但通常此类工具的编写方式效率低下,可能会导致依赖项问题。一位来自YCombinator新闻论坛的用户Aryamaan对使用Replit提供的自动编码平台“Ghostwriter”发表了如下意见:

“它的确让我大吃一惊,就像它知道我要做什么一样。但在有些时候,它比标准的自动完成更笨,它对已经定义的变量没有任何意识,也不会使用它们来完成编写了一半的变量。”

虽然人们对于自动编码工具的种种不满一直存在。但从另一个角度考虑,几乎所有的自动编码工具都基于人工智能算法,这也意味着它们的易用性与可靠性会随着技术的演进和数据量的增加而持续增长。对于新一代的开发人员来说,自动编码工具将成为他们不可或缺的工具。如今正处于学习阶段的准开发者将在几年后进入该领域,而在此期间,自动编码工具将很可能会逐渐追赶上普通人类开发者的水平。而这也将导致下一代开发人员很有可能将会慢慢停止编码,之后的一代甚至可能会一定程度的丧失编码能力。

今天的开发者需要对他们所使用的语言有深入的了解,并掌握如何实际编写问题解决方案的知识。然而未来的编码人员只需要知道一种语言是如何工作的便足够了,因为他们可以将这些知识与快速工程相结合,以生成代码片段。提示工程是使用NLP技术向LLM提出正确问题的过程,从而促使算法做出最佳响应。

与其他颠覆不同领域的人工智能应用一样,目前人们所面对的问题是需要就如何看待编程语言达成共识。下一代的开发者要么选择学习如何通过快速工程充分利用自动编码工具,要么坚持目前从内到外的编程语言学习方法,只是选择第二种方式的人可能会在未来几年后败给人工智能。

2、自动编码工具的未来

近年来自动编码工具的采用率不断增加,这些产品背后的公司也在持续创新以添加新功能并优化用户体验。虽然Github Copilot曾因收集用户代码并使用它来训练他们的算法而受到抨击,但事实是,随着添加到其数据库中的每一段代码,Github Copilot的算法都在继续进化。

当然,目前也有许多公司对数据使用采取了更负责任的方法。以Tabnine为例,它只使用公开允许的数据来训练其算法。Tabnine的模型也可以从用户的编码风格中学习。通过在用户计算机上本地运行算法,模型可以了解相关程序员的风格,提供更符合用户需求的片段建议。这还可以防止所有数据发送回集中式存储库,从而在提供额外价值的同时保护隐私。

与目前创建一个可以用多种编程语言提供建议的大模型(如Codex)的方法相反,未来的自动编码平台可能会采用多个模型并将其插入最适合它们的语言中。Tabnine已经在不同的编程语言中使用各种开源模型方面取得了成功。在近期的一次公开采访中,Tabnine生态系统和业务发展副总裁Brandon Jung表示:

“我们正在采用其他地方最好的模型,它们是开源的,它们很棒。我们采用非常大的模型,这些模型的训练成本非常高,我们根据每种语言的最佳方法专门研究代码。事实证明,其中一些模型比其他模型更适合某些特定语言。”

采用这种方法不仅可以使自动编码平台更加准确,还可以使公司在其个人代码存储库上运行和微调它们更加可行。目前,大量数据与GitHub,AWS和GCP等服务提供商隔离,但远离这些平台可以使自动编码工具更加适用于普遍的开发者。反过来,这将鼓励更多的人更有效地利用自动编码器作为工具,从而提高工具预测的准确性。

以GitHub Copilot、Tabnine为例,自动编码工具正在为未来的开发者构建一个全新的工作环境,它为程序员带来的好处是不可否认的。更高级的AI工具不仅可以帮助开发者极大提高编写代码的效率,还可以减轻经常过度劳累的编码人员的压力。对此,现阶段的企业也必须认识到这种趋势,以及在开发人员使用自动编码工具所能够带来的效用,并考虑为他们提供所需的面向未来的开发工具。

原文链接:https://analyticsindiamag.com/have-developers-forgotten-how-to-code/

有关所以,编程能力会消失吗?的更多相关文章

  1. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  2. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

  3. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  4. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  5. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  6. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  7. Ruby 元编程问题 - 2

    我正在查看Ruby日志记录库Logging.logger方法并从sourceatgithub提出问题与这段代码有关:logger=::Logging::Logger.new(name)logger.add_appendersappenderlogger.additive=falseclass我知道类 最佳答案 这实际上删除了方法(当它实际被执行时)。这是确保close不会被调用两次的保障措施。看起来好像有嵌套的“class 关于Ruby元编程问题,我们在StackOverflow上找到一

  8. ruby - Paperclip:以编程方式分配图像并设置其名称 - 2

    使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案

  9. ruby - 如何以编程方式检查证书是否已被吊销? - 2

    我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一

  10. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

随机推荐