在一个来自 于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,我们就可以建立能理解用自然语言写的约束的系统,并实施可解决这些带有约束的问题的程序。
享受这段美好时光吧
我 相信不是所有的编程工作都会被机器人取代,至少不会很快。比如说,那些需要高度优化的代码或使用高级算法的编程任务。其他的还有领域过于复杂的情况。不 过,我也相信,大量的程序员将会在未来几年被取代。我的预测是,这将急剧减少对程序员的需求,抵消对软件创造的不断增加的需求,并最终结束程序员的高薪时 代。
这是否令你很难过?享受这段美好时光吧,至少我们比货车司机和医生要幸运得多,并且有机会参与到这场革命中。
推荐阅读:
相关推荐
这一现象预示着程序员的未来将会是一个模糊的阶段,他们或者成为工业化道路的牺牲品,或者成为旁观者。如果程序员想要拥有更长久的职业寿命,就必须不断提升自己的技能和知识。 在标签《程序员 未来 展望 入门》中...
一个奋斗多年的Java程序员给刚毕业的java程序员的建议 帮助刚毕业的Java程序员做好自己的职业规划! 希望更多的人实现自己的理想 中国的软件行业蒸蒸日上需要更多的有激情的人们
对于很多人而言,成为一名程序员,更多的是出于对未来的考量以及对稳定收入的追求,并非是源于内心深处对编程技术的热爱。这种观点认为,从事程序员工作仅仅是一种谋生手段,而非兴趣驱动的职业选择。然而,即便如此...
程序员未来及计算机科学学习.chm
程序员的职业规划,指出程序员修炼的核心:知识体系和知识树。同时提供一个自我评估的工具——年度职业价值评估,帮助评估个人每年的职场状况。
这是我为自己写的一款表白的程序,并且己用它表白成功,于是几经努力把它完成为一个完整的程序
《程序员教程》是一本针对初学者和有一定经验的程序员精心编写的教材,旨在全面介绍编程基础...通过阅读和完成书中的任务,你将逐步成长为一名合格的程序员,具备解决复杂问题的能力,为未来的编程生涯奠定坚实基础。
标题中的“程序员专用编程输入法”指的是专门为程序员设计的特殊输入法工具,旨在提升编码效率。这类输入法通常具有以下特点: 1. **快捷代码输入**:程序员输入法能够通过快捷键、组合键或者自定义短语来快速输入...
本文档概要将对程序员项目交接文档的主要内容进行概要介绍。 人事模块是程序员项目交接文档的重要组成部分,它涵盖了人事管理的所有方面,包括人事数据的存储、查询、修改和删除等功能。在该模块中,程序员需要详细...
下面将对这些关键领域进行详细的阐述。 1. **软件工程基础**:软件工程是程序员进行项目开发的基础,它涉及需求分析、系统设计、编码实现、测试与维护等阶段。理解软件生命周期,掌握需求获取和文档编写技能,以及...
java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...
程序员考试是中国计算机技术职业资格认证体系中的一个重要组成部分,旨在评估和认证个人在计算机编程和软件开发方面的...在复习过程中,考生应结合实际工作和项目经验,将理论知识与实践相结合,以达到最佳的学习效果。
程序员简历程序员简历.pdf
8. 知识积累:前端程序员通过一年来的学习和锻炼,积累了许多的知识和经验,为自己的未来工作和学习奠定了坚实的基础。 9. 个人经验:前端程序员通过对自己的总结,明白了自己的经验和收获,也明白了自己的不足之处...
程序员的未来很迷茫,但关键在于你自己。你需要有追求和热情,否则你将迷失在职业生涯中。 5. 程序员的乐趣 程序员的工作不仅仅是编程序,还需要有乐趣。当你学到新知识时,当你有新的思想见解时,当你有新的产品...
2000-2010历年程序员考试真题,对软考程序员的一些试题总结,包含答案;程序员考试上午科目和下午科目的考试形式与考核内容已经趋于稳定,考生应紧扣考试大纲和指南,有针对性地进行学习。
【程序员转正答辩PPT】是新入职程序员在试用期结束后向公司展示自己工作成果、体验和未来规划的重要文档,通常包含三个主要部分:工作回顾、工作体会和工作规划。这样的PPT不仅展示了个人的专业技能,也体现了对团队...
* 程序员转正述职报告的目的是为了总结试用期的工作经验和学习体验,并对未来的职业发展进行规划 二、java 开发语言和环境 * java 开发语言是程序员转正述职报告中提到的主要技术之一 * 程序员转正述职报告中提到...