草庐IT

聊聊最近chatGPT对程序员的焦虑攻击

Ctrlturtle 2023-10-13 原文
   最近各种自媒体都在叛卖gpt职业焦虑,连程序圈子也不能幸免。
  甚至有正准备入行的同学私信我到底计算机还能不能学,研究生还能不能读。

我985硕毕业,呆过大厂和小厂,现工作5年的程序员, 抛开那些胡吹海谈的软文,想和大家深入聊聊chatgpt和程序员这个话题。

如果你正想入行或已经是程序,也在遭受各种gpt的焦虑攻击,请耐心看完,可能会对你有一些启发。

gpt有点类似于几年前我们就在谈的自然语言编程,视角还要再高出一个层次,它极大地降低了编码的门槛,解放了程序员很多时候的重复低级劳动。

早在十年前,机器学习发展到深度神经网络时,就发现了模型加深加大会出现能力的跃迁,只是到了大语言模型,这种参数量级的提升竟然会涌现如此惊人的效果,可能openai自己在做技术验证时都没想到会这么惊艳, 还真是印证了从量变到质变这句真理。

chatgpt模型在范式上并没有太大的突破,transformer是几年前的论文,但是从gpt3开始,其他公司点歪了科技树,国内公司还在微调bert时 (包括出transformer的google都选择继续bert), 只有openai眼光长远,坚持了gpt的方向,并在加大模型的同时解决了很多工程化的问题,实践出来一条可行的路。

   但是工程化是一件很伟大的事情,原理在那,能做成什么程度就不一定了,其他大公司即时是头部玩家也不一定能让自己的gpt涌现类似于chatGPT的能力。
   可以预见,今后有能力的大公司会以LLM as service的方式运营,而其他中小公司会通过api接入。

因为这东西烧钱,有openai在前面,其他小公司玩不起也没有必要,做AI research的会减少,AI应用的会变多, 而应用的门槛也会逐渐降低,比如现在基于prompt的AI绘画再过一段时间,会发展成自然语言描述为主的AI绘画。

所以,AIGC的普及是必然的,编程的门槛降低也是必然的。

这一次可能真的是场技术革命,站在历史的拐点,先放下软件工程师的脸面,想想我们和ai真正的壁垒在哪?

首先,单纯写代码的技术力不再是壁垒,毫无疑问随着gpt的发展,其技术力会逐步赶超初中级水平的程序员,就像6个月前你也不会相信gpt4编程能力能达到这种水平,但也像很多人说的那样,只有业内人才知道程序员每天不止是在写代码,真正写代码的时间只是占用了很少部分。

所以,可能我们和ai真正的壁垒在这些方面:

1.程序员之间真正的差距是debug问题的能力

不论是分析需求还是debug代码,从我对身边大佬的观察来看,从初级到中级,中级到高级都会存在这种差距。

  同时这一点也是程序员可能永远无法被AI替代的点,
  只要是生成式的AI算法就注定不能百分百保证写出来的代码是没有bug的。

目前我自己的使用体验来看,gpt输出简单的通用性代码大部分都能对,但是仍然有很多低级bug都不能排查出来,尤其遇到框架或API版本兼容性问题时它就懵了。

它可能会逐步提高输出通用代码的正确率,但是最终将模块组合成复杂业务又会诞生成百上千的bug,程序员会从debug一堆人写的shit code转为debug gpt写的shit code。

从这点来说,gpt是解放了部分程序员的开发工作,转向维护和调试,而调试和扯皮现在就已经占了程序员80%的工作时间,gpt会节省剩下的20%写代码的时间。

2.将产品需求转化为软件架构,模块设计,代码实现,再到上线维护不是个一次性的过程

除了debug代码,程序员另一部分时间是花在对接需求上,可能是直接和甲方,也可能是和产品经理。
与需求方沟通(扯皮)需要耗费大量的精力和时间,很多时候需求方疯狂地改需求是因为他们并不清楚自己的需求,或者一开始就没想清楚自己的需求。
设想,如果需求方能通过自然语言完全地,一次性地讲清楚自己的需求,并通过gpt实现,那程序员的代码也基本写完了。

    只要产品是由人提出需求和为人的需要而设计的,那么改需求的这个问题就会一直存在。       
不仅需求方很难讲清楚需求,gpt也很难理解人的各种奇葩需求。

3.对复杂业务的深入理解需要多年的沉淀

   接上一点,gpt也难以理解复杂的业务逻辑,AIGC的路就不是为特定业务需求服务的, 特定行业的业务需要特定的业务数据训练,而有些行业有自己的特殊壁垒。
比如军工单位的保密性质,是不可能把自己的关键数据上传给gpt平台公司去训练的,gpt只会用于通用code的生成而不是复杂业务逻辑的生成。

换句话说,程序员之前google或clone github轮子的时间以后交给了gpt,而专心聚焦于轮子之外的业务逻辑上。
所以,不要再仅仅追求技术上的谈资,业务上的深度可能更重要。
有gpt这样永远不嫌你烦的老师,上手一个新的框架是非常快的,但是在一个领域深入业务却需要很多年的积累。

最后我想问程序员朋友一个问题:你觉得作为程序员相比其他群体的优点是什么?会写代码?会扯皮?还是觉得比其它人要聪明?自然都不是,我觉得是:这个圈子普遍存在的强大的学习力。

软件领域经过了那么多的技术更新和爆炸,我们也一直在学,到了AI时代这一点没有太大改变。
保持一颗学习的心,打不过就加入,不管做什么都不会被甩太远。

综上,个人认为程序员是一个不可能被完全替代的群体,但是gpt带来效率上的提升必然会打破程序员的技术壁垒,压榨平均薪资,减少低级劳动力的需求。这种影响任何一个行业都无法避免。

如果有一天脑力劳动真被替代完了,大不了你扫街我种地,他开挖掘机,我们都有光明的未来。

有关聊聊最近chatGPT对程序员的焦虑攻击的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  9. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

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

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

随机推荐