@sambodhi
2018-05-30T10:19:17.000000Z
字数 3611
阅读 1956
作者|Sergii Shanin
译者|Liu Zhiyong
编辑|Vincent Chen
AI前线导读: 现在程序员中就有一种声音,很担心饭碗被人工智能给夺走了,但实际上会怎么样呢?诚然,人工智能自动变成还是需要有人输入需求的,否则它不知道生产什么,而需求千变万化,不像自动化无人工厂生产的固定产品,软件生产需要面对复杂的应用程序生成,估计开发难度会比自动化无人工厂大得多。而且,自动化也要分层次,几十年以前的程序员看到现在的开发环境肯定会觉得这太自动化了,现在大家觉得这是理所应当的事情。所以如果考虑到大众口中“自动化”的概念的不断变化,回答这个问题大概先要讨论人工智能的可行性。现在我们来看看Sergii Shanin是怎么看待这一问题的。
现在还不是开发人员为人工智能大灾难做准备的时候。事实上,机器学习最终将成为程序员工具包的一部分,而不是人类程序员的替代品。
尽管如此,在科技行业,我们很多人都担心人工智能会成为一股对抗力量,伺机取代开发商。我曾在Google搜索关键词will software engineers,Google返回的搜索结果表明,我不是唯一一个提出这个问题的家伙。
毫无疑问,每个人都在谈论人工智能,Gartner在炒作的鼎盛期对它进行了排名。随着人工智能和机器学习的普及,从饮水机的谈话到晚间新闻,人们越来越担心人工智能和机器学习对他们的未来意味着什么。情况已经变得如此严重,以至于有29%的开发人员表示他们恐怕将被人工智能取代,这一观点成了他们职业生涯中最令人担忧的事情。
在我们着手解决这个可怕的问题之前,让我们先回顾一下人工智能的历史和围绕它的大肆宣传。
人工智能的第一次吼声发轫于20世纪50年代的可以进行跳棋的电脑。赌注不断地增加:电脑在跳棋、西洋棋、象棋上前后击败了人类选手,并最终战胜了人类。这第一波人工智能的应用,发现计算机使用简单的规则在有限的移动次数及结果清晰的棋类游戏中确实能够击败人类。
尽管如此,开发人员还是很难面对来自擅长下棋的计算机的威胁。在每种情况下写一套规则和步骤来做出决定,很快就会在自然环境下出现局限性。因为很少有真实的场景像棋类一样简单。
在传统编程中,代码是一系列基于规则的决策,嵌套在越来越复杂的条件中。这在简单、可预测的情况下非常有效,但是项目越大,这种方法的局限性就越明显。
测试传统的代码必须预测所有可能的情况,这个过程会呈指数级增长。即使是相对简单的程序也需要大量的测试才能发现bug。这就在代码中产生了一个可伸缩性的问题;在某一时刻,继续向原始代码库添加更多的代码,会开始变得过于笨拙。至于重构或者从头开始,这是一个昂贵且耗时的选项,最终还是会遇到同样的问题。
大型程序的脆弱性是传统编码面临的另一个严重问题。添加一行代码会破坏其他看似无关的东西。很难控制传统的非人工智能程序能有多大的限制。
你不会通过写一套详细的指令来应对所有可能发生的意外情况来教会你的狗。相反,你只需扔出一根棍子,也许给你的狗演示取回棍子并重复几次。几分钟之内,你的狗就或多或少成为一名取物专家,而你却从来没有告诉过你的狗如何取物。欢迎来到机器学习的世界!
我们的狗狗朋友和使用机器学习算法的超级计算机的区别是,计算机使用大量的数据,而没有一套特定的规则。计算机使用这些训练数据来“学习”。
机器学习的方法是查看数据并学习,而不是编写大量的规则。这就消除了与基于规则编程相关的可伸缩性和测试问题。
最大的缺点是,机器学习是一个黑盒子。即使是构建机器学习算法的工程师也不知道机器学习如何做出决策。
机器翻译最初是为了编程自然语言的复杂规则。常规演讲的词汇丰富度需要数十种专业词典,这就增加了难度。即使这些都做到了,但如果出现一个无法识别的单词,无论是俚语、方言还是专业术语,都会使一条句子变得不可分析。这样得到的是,笨拙的、不可靠的翻译。
基于机器学习的翻译器在猜测生词的含义并产生可理解的翻译方面做得更好。在任何给定的语言中,都有数百万个网页的数据,可以用来训练Google Translate的人工智能。
让我们来看看一条很容易解析的短语,但是对于一个基于规则的翻译来说,处理起来会很棘手:
The Future of Work event organized by Brainware
online-translator.com把这条短语翻译成俄语:
Будущее события Работы организовано Brainware
Google Translate翻译如下:
Событие Future of Work, организованное Brainware
对俄国人来说,第一个翻译简直不可理解,而机器学习的翻译结果却能让俄国人明白。Google Translate认为,Future of Work是一个事件名称,所以没有进行翻译,并使用了俄语中正确的词序。
人工智能目前兴起的一个显著特点是,我们用于机器学习的许多算法都起源于上世纪八九十年代。对于一个热衷最新事物的行业来说,人工智能的基础逻辑非常古老。
机器学习之所以能够从象牙塔解放出来,得益于三个因素:存储数据变得便宜;可访问数据的数量呈指数级增长;计算机处理能力增加。
查看有关工作自动化的原始数据是不吉利的,我理解我的同事为什么会坐立不安。Web开发人员有很好的机会实现自动化,而计算机支持专家则有72%的机会实现自动化。如果没有一定的背景,这些数字就预示着一场没有必要的技术末日启示。
人工智能在工程领域的真正未来是利用技术,使人类工程师能够更高效、更快速地工作并减少bug。因此,人工智能将把人类开发者变成更强大的程序员,而不是完全取代人类。
软件历程的每个阶段都将由人工智能来增强。在规划阶段,项目将会看到更好的分析、技术选择和重用其他项目代码的机会。随着人工智能生成大量代码,人类开发人员将能够更快地工作。由于人工智能协助QA工程师,测试将更加全面、严谨。当人工智能可以提供协助时,自动化部署也不会那么容易出错,并且速度会更快。
只需看一下Accenture myWizard的演示视频,这是一个拥有虚拟智能体的平台,它使用机器学习与人类同事进行合作。据 Harvard Business Review的报道,人工智能项目经理通过帮助Accenture在80%的时间内准确地预测出危险信号,从而交付项目。
【请下载此视频并上传到腾讯视频,嵌入与此:https://hackernoon.com/is-computer-engineering-really-going-to-be-automated-e6111412432e】
这些梦想并非都是遥不可及的。现在,DeepCode已经在使用机器学习来分析和清理现有代码了。它被誉为代码的Grammarly。就像拼写和语法检查还依赖校对和编辑人员一样,人工智能正在帮助开发人员。
其他创业公司则在人工智能方面上更进一步。如Logojoy使用机器学习来生成logo和简单的设计。UIzard将手绘的设计转换成HTML和CSS。
让我们回到最初的问题:即软件工程是否会自动化。答案是既肯定又否定。当然,开发的许多方面都将成为自动化。但这并不意味着工作岗位将会流失。
自动化降低了开发软件的公司的成本。这反过来又意味着可以在更短的时间内生产更多的软件。对软件的需求在不断增加,随着自动化成本的降低,生产业务机会的商机只会增加。
如果你是一名软件工程师,就没有必要向山头爬了。虽然这个领域正在发生变化,我们的工作流程将在未来将会包含更多的自动化,但开发人员不太可能在短期内完全失去工作。
由此得出的结论是,我们没有理由害怕我们即将到来的替代者。相反,我们需要关注那些最不会被自动化的人类技能。
传统的编程采用了理性主义的方法,机器学习是终极的经验主义。作为人类,我们需要研究这两种方法,并且知道哪种方法更适合特定的工程问题。
在未来,每个程序员都需要对算法和数据结构有更深入的了解。当然,这只是一个开始,但我们很可能会看到一门新的计算机科学课程,培训工程师与人工智能协同工作。
不容易自动化的非技术技能将成为区分程序员的因素。领域专业知识和创造力将会更加重要。更好的软技能和情商也会让工程师脱颖而出。
有时,甚至人工智能也会认输。当我让Siri给我讲个笑话时,她就不知所措。
因此,我给开发者的建议是继续学习。磨练你的非技术技能,并准备好在未来与数据结构、机器学习和人工智能一起工作。
最后,送你一句话,与你共勉:
如果你不愿意学习,没人能帮助你。但如果你决意要学习,也没有人能阻拦你。