程序员是注定灭绝的一个物种?

2023-11-02 15:20
文章标签 程序员 注定 物种 灭绝

本文主要是介绍程序员是注定灭绝的一个物种?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序员是注定灭绝的一个物种。

在一个来自于CGP Grey很精彩的视频中,他提出说,在不久的将来,大多数工作将会由机器替代。许多行业,从卡车司机到医生,在不久的将来将会 消失或发生巨大的变化,创造出一种全新的社会体制。但是,这样一来似乎有点说不通——既然未来的计算机程序将会大放光彩,那么势必需要更多的程序员。毕 竟,创建自动汽车、自动化的医疗诊断系统、小贩机器人等等,都需要程序员的参与,不是吗?

大错特错。

编程是什么?

编程是将理念(业务、法律、游戏、数学问题等)翻译成机器可以执行,其他人可以读取的代码的学科。归根结底,程序员不过是中间人而已,一个既能明白问题又能理解机器的中间人,因此,可将两者进行转换。仅仅如此而已。

伟大的程序员既 透彻了解他们编程的平台,又深刻理解问题域。创新迸发在域和技术甜美的交集中。这就是为什么(除其他事项外)如果让程序员(GitHub、Visual Studio、AWS等)去做大型产品和政府产品(Healthcare.gov,FBI’s Sentinel,等等)时,软件往往会变得糟糕又昂贵。

每个人都在编程

中间人最终会被淘汰。

编程在过去几十年间已经发展到了相当高的程度。高级编程语言和可用的在线信息将进入编程的门槛几乎降至为零。Scratch,一款来自于MIT有着数百万用户和上千万项目的儿童友好型的编程平台,已经可以媲美GitHub。现在,一个普通的程序员相较于20年前他的同行,需要理解的计算机体系结构和算法要少很多。

然而,这场革命近期似乎停滞不前了。我们最重要的工具——编程语言最近并没有发生太大的改变。大多数新的和流行的语言(如GO和Rust),只是逐渐改进了现有的范式,缺乏革命性的功能。目前最流行的编程语言是 Java(1995年),C(1973)和C ++(1983年),年纪都已经不小。这个行业却反而开始专注于开发支持工具和方法,来提高生产效率。我们已经太久没有创新了,所以,我强烈推荐大家看看 Bret Victor的演讲《The Future of Programming》。

这是什么意思?

S曲线

科技的发展是这样的:SSSSSSSSSSSSSS

如果要描述地更清楚点的话,它是这样的:

例如,IBM的第一个文字处理器程序(FORMAT)使用繁琐的穿孔卡片作为输入。在同一时间,最先进的打字机附带可替换字体、自动字符重复以及打印数学公式的能力。然而,却没有人使用打字机。本来位于打字机下方的文字处理器的曲线很快赶上并超越了打字机,打字机变成了过去时。

我相信,我们正处在一个类似的语言技术曲线上,正在等待一个新的时代的到来。

不需要程序员的编程语言

为了从系统中彻底淘汰程序员(中间人),我们需要让编程平台自身去“理解”问题,而不再需要编写代码。

这个想法并不是我首创的。 1963年,Ivan Sutherland在《Sketchpad》中就描述了这样一个系统,它可以解决给定的若干已定义约束的问题。Prolog(1972年),一种声明性 编程语言就是为了解决给定的一系列逻辑规则问题而创建的。它虽然依然是一种需要程序员的编程语言,并且并没有被广泛使用,但是它没有完全消失。比如,它以 及其他语言一起成就了IBM著名的超级计算机沃森(Watson)。

对于不需要程序员的编程语言,最伟大的例子是自然语言,如英语。从二进制代码到汇编,从C到Python,编程语言趋向于越来越类似自然语言。并且 作为现在一种推崇的方式,越来越多的程序员正在试图让他们的代码尽可能地接近于白话英文,以便于其他程序员和未来自己的理解。那么这个融合的限制是什么?

NLP

现在的自然语言处理(natural language processing,NLP)系统能够理解文本中的单词角色以及它们之间的相互关系。下面是来自斯坦福大学CoreNLP输出的一个例子:

我们可以发现,仅通过分析文本,该程序就能够识别同一个人的联合引用,并识别单词的角色。

下面说一个更有趣的,例如,此简单的业务规则:

注意CoreNLP是如何识别条件(if – buy)和对象(buy – iPhones)的。那么现在将这些翻译成计算机程序还有什么难的吗?

有越来越多的新闻文章是由机器人写的。最近如Apple、Google、Microsoft和亚马逊等公司已经相继开发出基于语音识别和自然语言处理的客户产品。这进一步加快了这一领域的研究。

如果你想亲自体验自然语言处理,那么我强烈建议Python的NLTK。

遗传编程

另一个有趣的研究领域是遗传算法。使用类似于自然选择的进程,遗传算法通过生产最佳的解决方案来解决问题。从设计喷气发动机到玩超级玛丽都是它的应用范围。

但是,遗传算法肯定不能生成程序代码,是吧?再好好想想。

一个名叫Kory Becker的开发人员,编写了一个可以生成Brainfuck代码来解决简单问题的程序。当然,这款软件的实用性非常有限,但这仅仅是个开始。正如他所说,更复杂的问题需要更多的计算能力,来找出最适合的解决方案。

例如,下面的代码,完全是由程序写的,可打印hello。

+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+]
[[[.+.,,+].-

该字段称为遗传编程,并且也不是什么新生事物:

对遗传和进化的研究需要结合查找的基因和生存价值标准。(Alan Turing,《Intelligent Machinery》,1948年)

结合NLP和GP,我们就可以建立能理解用自然语言写的约束的系统,并实施可解决这些带有约束的问题的程序。

享受这段美好时光吧

我相信不是所有的编程工作都会被机器人取代,至少不会很快。比如说,那些需要高度优化的代码或使用高级算法的编程任务。其他的还有领域过于复杂的情 况。不过,我也相信,大量的程序员将会在未来几年被取代。我的预测是,这将急剧减少对程序员的需求,抵消对软件创造的不断增加的需求,并最终结束程序员的 高薪时代。

这是否令你很难过?享受这段美好时光吧,至少我们比货车司机和医生要幸运得多,并且有机会参与到这场革命中。


作者:小峰

来源:51CTO

这篇关于程序员是注定灭绝的一个物种?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/331540

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

程序员必备心理学——心流

心理学之心流 前言一、“心流”是什么?二、心流的好处二、如何进入心流心流状态的四个阶段第一个阶段:挣扎第二个阶段:放松第三个阶段:心流第四个阶段:巩固 进入心流的技巧 总结题外话 前言 你是否常常感觉自己明明学习了一整天,但是就是感觉没有太多的收获。这个时候除了你的学习方向等问题之外,也可能是你的学习方法太低效了。作者本人就经常有这种情况,好在偶然间在b站刷到一个大佬的这个心

程序员都在使用的画图工具

大家好,我是袁庭新。 程序员都在使用的画图工具,你一定没用过这款画图工具吧!我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的,如下图所示: 再例如Redis集群故障恢复原理图我也是通过draw.io工具绘制的,如下图所示: 是不是觉得draw.io绘制的图形特别简洁、美观。它的官网是: https://www.drawio.com dra

GitHub:代码是程序员沟通最直接的手段

如果不是 Andreessen horowitz 的投资,估计 GitHub 很难被福布斯、CNN、纽约时报等传统媒体注意到。普通大众之前不了解这个工具,是因为它距离记者的世界太远了——GitHub 是一个程序员所使用的托管项目的服务。 但在一些程序员眼里,它不仅是托管项目的地方,还是“开源”项目的大本营,而且是提高程序员“技术水平”和“技术品味”的地方,更是一个程序员社交的地方。

黑马程序员---银行业务调度系统

模拟实现银行业务调度系统逻辑 需求分析: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。 异步随机生成各种类型的客户,生成各类型用户的概率比例为:         VIP客户 :普通客户 :快速客户 =  1:6:3。 客户办理业务所

黑马程序员---空中网面试题

空中网4k/5k月薪挑选大四实习生的线程题     两年前,我们一个大四的学员去应聘空中网的实习生职位,空中网只给他出了三道线程题,拿回家做两天后再去给经理讲解,如果前两题做好了给4k月薪,第三道题也做出来的话就给5k的月薪。这样的实习薪水和招聘要求,不需要有工作经验的限制,纯粹是技术功底的比拼和考核,而不像许多其他公司非要招两年工作经验的人,逼得那些刚毕业和未毕业的大学生不得不去撒谎,不得不去做

黑马程序员---线程并发库

软件包 java.util.concurrent 在并发编程中很常用的实用工具类。 请参见:            描述 接口摘要BlockingDeque<E>支持两个附加操作的 Queue,这两个操作是:获取元素时等待双端队列变为非空;存储元素时等待双端队列中的空间变得可用。BlockingQueue<E>支持两个附加操作的 Queue,这两个操作是:获取元素时等待队列变为非空,以及

黑马程序员---多线程

TraditionalTread 传统线程技术回顾 创建线程的两种方式: thread3中,同时创建了Thread的子类和Runnable,那么会优先执行Thread的子类,因为Runnable的代码被当做参数传到了Thread类里,Thread子类的run方法又覆盖了父类的方法,所以会执行Thread子类的代码。 package cn.itcast.heima;public class T

黑马程序员---代理

分析代理类的作用与原理及AOP的概念 代理的概念与作用  1.已经写好一个类,现在要为这个类增加一些功能,例如,异常处理、日志、计算方法的运行时间、事务管理、等等,你准备如何做? 现在我们写一个代理类: 保持了原来那个类的功能,又增加了你现在需要的功能。 主函数调用的时候,直接调用代理类就行了。 这就是代理类的功能。   2.编写一个与目标类具有相同接口的代理类,代理