与AI结对编程,GitHub Copilot最终会取代程序员么?

copilot.png

在计算机科学界中有这么一个原则,任何问题都可以通过添加一层抽象层来解决。随着时间的推移,我们距离底层的实现越来越远,越来越不知道底层究竟运行的是什么。

GitHub最近在技术预览中推出了 Copilot (代码领航员)。Copilot是一款基于AI的根据上下文自动生成代码的编程助手,它的目的旨在简化软件开发的过程。

每当有简化和自动化的工具产生时,总是会被提到的一个问题就是:”还需要开发人员么?“。而每次的答案都是”是“。计算机领域每次增加一层都会降低进入的门槛从而吸引更多的人进入这一领域。而新增加的这一层也会带来新的技术方案、实现方案和更复杂的系统,由此也会产生新的机会。

本文也通过简单的梳理抽象层叠加的简史,从何推演一下Copilot带来的影响。

# 历史

一个典型的案例就是图灵机。他是为了破解“恩尼格码”密码机而生的,他背后的理念现在普遍被认为是现代编程语言的基础。

自图灵机开始,计算机使用了处理器,能够使用随机寻址的方式获取指令,并对指令进行一般化的处理。这些指令就是机器码来进行描述的,人类很难阅读和编写。这就是更高级更抽象的编程语言出现的原因。

我们可以这么理解编程语言,它就是可以转换为机器码,同时有方便人类阅读和编写的一条规范。

# 编程语言的演变

编程语言从较低的抽象级别向较高抽象级别演变的过程,每次通常都是为常用的操作添加自动化或其它的辅助。这些抽象有各种各样的形式,从内存的垃圾回收到各种类库或语法的升级。

这些演变降低了技术实现的复杂性,从而让开发人员后时间和精力创建更复杂的软件。从而相同的工作时间,开发人员可以为客户提供更多的功能。由于这个特性随着编程语言的演变,编程边的越来越容易。甚至出现了试用自然语言进行编程的语言 (Gherkin)[https://www.jianshu.com/p/43cb0e79f075] 使用这类语言几乎无需计算机相关的专业知识。

但是这并不意味着抽象级别低的语言就没有用武之地。相反的,即便这些语言更晦涩难懂编写的代码也更冗长,在某些特定的场景,如内存管理、视频处理他们可以更高效和灵活。

机器学习的出现就可以解放大量基于数据的劳动,原来需要手工或者编写代码来完成的繁琐冗长的工作,通过机器学习可以轻松的完成。使用机器学习技术,只需要少量的代码就能实现很复杂的数据处理工作。甚至有一些自动化的项目,你只需要提供数据,他就可以给你相应结果,连输入少量的指令都不需要了。

然而对底层的了解,依然是非常重要的。否则当碰到问题时,可能会感到手足无措。因为不知道底层的原理,从而没有解决问题的思路。

# 硬件的演化

我们说了代码的演变,同样的过程在硬件上也在进行。一开始,公司都是使用自己的服务器,知道后来可以到IDC机房租用实体服务器。租用实体服务器的成本很高,而且需要自己具有进行软件系统安装和维护的能力。

随着虚拟化技术的发展,现在可以通过阿里云、华为云这样的供应商自用虚拟服务器。这大大的降低了服务器使用的成本,并且降低了对服务器使用的技术门槛。但是还是需要具备一定的服务器知识才能很好的使用这些虚拟服务器。

近些年,Docker技术兴起,容器化技术被大量使用。使用相关的工具可以在虚拟机上快速的部署应用,而无需掌握底层的系统。与机器学习一样,还有一些正在进行的项目,这些项目都有一个共同的目的进一步减少使用容器所需的专用知识和技能。

最重要的是,一个名为“serverless”的新的抽象层正在出现。它可以让你直接在远程容器上直接执行代码,直接跳过了去部署容器的步骤。虽然目前只能用于无状态的操作,但是相关的案例和工具会在这个生态中持续的增长。最终扩展他的能力,降低它的门槛。

# Copilot的发展

Copilot是软件工程发展中一个又有趣的东西,及时目前它还不能很好的用于实际工作。根据官方在常见问题中的说明,它目前大概有50%的几率能够给出正确的结果,所以建议谨慎的对待它生成的代码。

我们可以还一个角度看待 GitHub Copilot,把他看做一种新的编程语言。在这种语言中,你输入文档和方法名,然后它帮你把输入翻译为另一种编程语言的代码。

目前这一代的 Copilot 只能用于方法的生成。但是我们可以想想,随着技术的发展,它可以生成类甚至是包。甚至将来对大部分通用的场景可以生成完美的模块。

即使有一天它能够生成更高一级的组件,它的产出物仍然需要程序员来讲这些产出在更高的一层进行拼装。最终实现特定的业务需求。

# 结论

就以上的信息,GitHub Copilot将为软件开发增加新的一层抽象层,并简化软件的开发是毫无疑问的。就像之前的那些抽象层一样,它具有推动软件开发行业发展的力量。

但是,程序员永远不会缺少机会,因为有了这个新的抽象层,项目的范围将边的更大。作为程序员,每天所做的日常工作可能会发生变化,但是在很长的一段时间之内,软件开发仍然是离不开程序员的。

可以类比习惯管理员这个职位的职能变化,这个职位的能力重心已经从以前维护硬件和操作系统高效稳定运行主键演变为维护服务的高效稳定运行。程序员的能力中心也将发生类似的演变,基于新的工具进行新的能力迁移。

# 后续

这种能力应该是对业务的了解和建模,根据业务进服务能力的设计,根据业务场景、部署场景对各类技术解决方案的取舍。
根据目前软件工程的过程我对这个能力进行一个分析,不局限于狭义的程序员职责。

软件开发阶段 原来的能力需求 新的能力需求
项目立项 解决方案设计 了解更多的成熟模块
需求调研 需求分析 无变化
架构设计 架构设计能力 了解更多的成熟架构模块
详细设计 软件设计 模块设计
编码实现 编程语言、数据结构、算法、设计模式 实现选择能力
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 编程范式[ 程序员的编程世界观 ] 编程范式(Programming Paradigm)是某种编程语言的典型编程风...
    Albert陈凯阅读 896评论 0 1
  • Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和...
    Java小辰阅读 1,023评论 1 8
  • ** 编程技能层次**编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。 0段—非程序员 初学编程者...
    Bobby0322阅读 1,897评论 2 30
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,046评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,877评论 0 2