ai会取代程序员吗_机器会取代程序员吗?

ai会取代程序员吗

I started doing some home baking recently. It started, like with a lot of other people, during the pandemic lockdown period when I got tired of buying the same bread from the supermarket every day. In all honesty, my bakes are passable, not very pretty but they please the family, which is good enough for me.

我最近开始做一些家庭烘焙。 与大批其他人一样,这是在大流行封锁时期开始的,那时我厌倦了每天从超市买同样的面包。 老实说,我的烘焙还算不错,虽然不是很漂亮,但它们却令整个家庭满意,这对我来说已经足够了。

Yesterday I stumbled on a YouTube video on how a factory makes bread in synchronised perfection and it broke a bit of my heart. All the hard work kneading dough amounts to nothing compared to spinning motors tumbling through a mechanised giant bucket. As I watch rows and rows of dough rising in unison spirals up the proofing carousel then slowly rolling into a constantly humming monstrous oven to become marching loaves of bread, something died in me.

昨天,我偶然发现了一个YouTube视频,内容涉及一家工厂如何同步制作面包,这让我很伤心。 与通过机械化的巨型铲斗翻滚的旋转电机相比,所有艰苦的揉捏生面团都不算什么。 当我看到成排的面团以一致的方式升起时,在发酵转盘上盘旋成螺旋形,然后慢慢地滚动进一个不断嗡嗡作响的巨大烤箱中,变成行进的面包,其中有些东西死在了我身上。

When the loaves zipped themselves into sealed bags and dumped themselves into packing boxes, I tell myself that they don’t have the same craftsmanship (in my mind) as someone who is making bread with love, for his family.

当面包将它们拉成密封袋并扔进包装箱时,我告诉自己,他们的手Craft.io(在我看来)与为自己的家人用爱做面包的人不同。

But deep inside me, I understand that if bread depended on human bakers only, it would be a whole lot more expensive, a lot more people would go hungry. Automation and manufacturing lines have had always fed the masses since they were invented. The pride of a human baker matters little compared to feeding all the ever growing populations of human beings.

但是在我内心深处,我了解到,如果仅依靠人类面包师做面包,那将贵很多,而且会有更多的人挨饿。 自从他们被发明以来,自动化和生产线一直满足大众的需求。 与养活所有不断增长的人类人口相比,人类面包师的骄傲意义不大。

Fortunately, I don’t bake in my day job. I’m in the software development industry, where the main activity involves software programmers (developers, engineers, coders – take your pick) writing code to build simple to complex software systems that control much of the world today (even bread factories are controlled by manufacturing control systems). Programmers who are also humans. Programmers who are highly sought-after craftsmen where their experience, talent and creativity is celebrated.

幸运的是,我没有烘烤日常工作。 我在软件开发行业中,主要活动涉及软件程序员(开发人员,工程师,编码人员-随您选择),编写代码以构建可控制当今世界大部分地区的简单到复杂的软件系统(甚至面包厂也受其控制)。制造控制系统)。 也是人类的程序员。 程序员是备受追捧的工匠,他们的经验,才华和创造力得到赞扬。

Just like bakers.

就像面包师一样。

Of course, this begs the question – are there software factories where software is churned out by machines, just like bread factoriesDo they exist today/p>

当然,这引出了一个问题–是否有像面包厂一样由机器生产软件的软件厂它们今天存在吗

生产线 (Manufacturing line)

Another perspective is that software development today is already a manufacturing line, with different software development teams working to take up different parts of the whole system to be assembled finally in well-organized processes.

另一个观点是,当今的软件开发已经是一条生产线,由不同的软件开发团队共同负责整个系统的不同部分,并最终以组织良好的流程进行组装。

In place of factory workers, we have programmers, in place of supervisors we have team leads and in place of a plant manager we have engineering managers. With a combination of outsourcing, offshoring, contracting as well as various manpower supplementary methods, companies can potentially ramp up software development as well.

我们有程序员,代替工厂工人,有团队领导,而不是主管,有工程经理,有工厂经理。 通过将外包,离岸外包,合同签订以及各种人力补充方法结合起来,公司还可以潜在地加快软件开发。

Naturally, no programmer likes to be called a factory worker. In fact, most of us prefer to be called software craftsman. But there is no denying that somewhere along the way, developing software in a large-scale environment is very much like a factory.

自然,没有程序员喜欢被称为工厂工人。 实际上,我们大多数人都喜欢被称为软件工匠 。 但是,不可否认的是,在大规模开发环境中开发软件非常像工厂。

Today, all large-scale software development happens in teams (doesn’t matter what it’s called or how much autonomy it’s given) and guided by some processes. Whether it’s agile, iterative, behaviour-driven, waterfall or any of the hybrid variants, most software development organizations have some sort of process and methodology. Larger organizations even have specialised teams to implement the processes and process models such as CMMI (Capability Maturity Model Integration) and ISO/IEC 12207.

如今,所有大规模软件开发都是在团队中进行的(无论它叫什么名称或给予多少自治权),并受某些流程的指导。 无论是敏捷,迭代,行为驱动,瀑布式还是任何其他混合形式,大多数软件开发组织都具有某种过程和方法论。 较大的组织甚至拥有专门的团队来实施过程和过程模型,例如CMMI(能力成熟度模型集成)和ISO / IEC 12207 。

Some of these process models can get pretty serious. For example, CMMI which was developed by the Carnegie Mellon University (CMU) and the US Department of Defense, is required in many US government software development contracts.

这些过程模型中的一些模型可能会变得非常严肃。 例如, 许多美国政府软件开发合同都要求使用由卡耐基梅隆大学(CMU)和美国国防部开发的CMMI。

While the idea of software development as a manufacturing line is not very appealing, and even counter to the image of the cool tech startup development, once software gets to a certain scale, structure and processes are part and parcel of production.

尽管将软件开发作为生产线的想法不是很吸引人,甚至与酷技术启动开发的形象背道而驰,但是一旦软件达到一定规模,结构和流程便成为生产的一部分。

And as in baking bread, brewing beer and many other artisan jobs, making great software is a source of pride and joy. But when it comes to scale and production a process-oriented approach is critical to ensure quality, and more importantly, consistency.

就像在烤面包,酿造啤酒和许多其他工匠的工作中一样,制作出色的软件是自豪和喜悦的源泉。 但是,在规模和生产方面,面向流程的方法对于确保质量(更重要的是确保一致性)至关重要。

However, as much as we build in processes, it’s all still done by human beings and is prone to the famous ID-10T error. That’s why over time, we have moved over to continuous automated integration, testing and deployment. The idea is to reduce as much human error as possible when integrating multiple parts and components of the system we’re building by using scripts that automate the processes.

但是,尽管我们在流程中进行了很多构建,但这仍然是由人类完成的,并且容易发生著名的I D-10T错误 。 这就是为什么随着时间的推移,我们已转向持续不断的自动化集成,测试和部署。 这个想法是在使用自动化过程的脚本集成正在构建的系统的多个部分和组件时,尽可能减少人为错误。

This works remarkably well but obviously there is still a gap — the system is designed by humans, the different parts and components are written by humans, even the automated scripts are written by humans. The system is only as robust as the weakest link and we are that link.

这非常有效,但显然仍然存在差距-系统是由人设计的,不同的部件和组件是由人编写的,甚至自动化脚本也是由人编写的。 该系统仅与最弱的链接一样强大,而我们就是那个链接。

But what if every part of the process is automated/p>

但是,如果流程的每个部分都是自动化的怎么办

自动化 (Automation)

In one of my favourite books, The Moon Is A Harsh Mistress (published 1966), Mike (short for Mycroft Holmes, Sherlock’s older brother) was an AI that “woke up”. Mike could understand classic programming but he could also understand Loglan (this is a real language) and English. Mannie (short for Manuel), the narrator and computerman (how cool is that name), in fact, interacts with him mainly in English. Mike does his own programming based on their interactions. Imagine that. And this is in from the mid-60s.

在我最喜欢的一本书《月亮是一个残酷的情妇》 (1966年出版)中,迈克(夏洛克的哥哥迈克罗夫特·福尔摩斯的缩写)是一台“醒来的”人工智能。 Mike可以理解经典编程,但也可以理解Loglan (这是一种真实的语言)和英语。 叙事者和计算机人 Mannie(Manuel的缩写)(实际上叫这个名字多么酷)实际上主要是用英语与他互动。 Mike根据他们的互动进行自己的编程。 设想。 这是从60年代中期开始的。

The idea that to program computers you only need to tell it your problems and it will create the necessary software to solve the programs is crazily compelling. In the 80s and 90s, there were several movements to create 4th generation and 5th generation languages (4GL and 5GL) that will do exactly that, and they were marketed heavily.

对计算机进行编程的想法只需要告诉它您的问题,并且它将创建必要的软件来解决该程序的想法令人信服。 在80年代和90年代,出现了几项创建第四代和第五代语言 (4GL和5GL)的动作,正是这些动作可以做到这一点,并且它们的销售量很大。

The intention was that eventually, actual coding wasn’t necessary, all it takes is to define the problem and the code will be generated to solve it. Naturally, the focus was then to define the problem is a much more precise way so that better code can be generated. To do that, you’d need to build models and have a user-friendly way describing the problem such that even non-software engineers can create software. My company then (like a lot of enterprises of its day) bought into it hook, line and sinker. To be honest, I fell for it too.

目的是最终不需要实际的编码,只需要定义问题,然后生成代码来解决问题。 自然地,接下来的重点是以更精确的方式定义问题,以便生成更好的代码。 为此,您需要构建模型并采用一种用户友好的方式来描述问题,以便即使非软件工程师也可以创建软件。 然后,我的公司(像当时的许多企业一样)购买了钩,线和沉降片。 老实说,我也很喜欢。

It never really took off because … programming languages were already doing that. To make a programming language suitable for non-programmers you’d need to make it less rigid and more suitable for humans. But that would result in it being more fuzzy and less precise. In which case it can only create really simple, unambiguous software. To create more complex software you’d need someone who can not only define the problem but come up with the solution, write the code, make sure it runs and updates it as needed i.e. you need a programmer.

它从未真正起飞,因为……编程语言已经在这样做。 为了使编程语言适合非程序员,您需要使其僵化程度降低,更适合人类。 但这将导致它更加模糊和不精确。 在这种情况下,它只能创建非常简单,明确的软件。 要创建更复杂的软件,您需要一个不仅可以定义问题而且可以提出解决方案的人员,编写代码,确保其运行并根据需要对其进行更新,即您需要一名程序员。

Not that 4GL/5GL wasn’t useful, just that its promises for the death of the software development industry was greatly exaggerated. The project I was working on crashed and burned, losing millions along the way (though I can’t blame it entirely on 4GL, it was partly the reason too, overpromising on the capabilities but ultimately underdelivering on the results).

并不是说4GL / 5GL没什么用,只是它对软件开发行业灭亡的承诺被大大夸大了。 我正在从事的项目崩溃并被烧毁,一路上损失了数百万美元(尽管我不能完全将其归咎于4GL,这也是部分原因,对功能的承诺过高,但最终未能实现结果)。

软件创建软件 (Software creating software)

The 4GL/5GL wasn’t the answer partly because there’re still humans in the equation. What if we go deep and get software to create softwareThe developments in AI in the past few years, specifically machine learning, have resurfaced the idea. Machine learning is increasingly being used in a lot of software that’s written today. There is already machine learning software that is beating professional Go players, analysing markets, driving cars, and even creating music and art by learning from past masters. Is someone today creating some machine learning software that would write other software/p>

4GL / 5GL不能部分解决问题,因为方程式中仍然有人类。 如果我们深入研究并获得创建软件的软件怎么办人工智能在过去几年的发展,特别是机器学习,使这一想法浮出水面。 机器学习正越来越多地用于当今编写的许多软件中。 已经有机器学习软件击败专业围棋选手,分析市场,驾驶汽车,甚至通过向过往的大师学习来创作音乐和艺术。 今天有人在创建一些可以编写其他软件的机器学习软件吗

Let’s break down what that means.

让我们解释一下这是什么意思。

There are a few types of software that creates other software. First, there is self-reproduction, which really means how a piece of software can reproduce itself. The idea is not new, in fact, John von Neumann theorized about self-reproducing automata in the 1940s.

有几种类型的软件可以创建其他软件。 首先,存在自我复制,这实际上意味着软件可以如何自我复制。 这个想法并不新鲜,实际上, 约翰·冯·诺伊曼 ( John von Neumann)在1940年代提出了关于自我复制自动机的理论 。

奎因 (Quines)

At the source code level, there are quines, which are programs that take no input and produces a copy of its own source code as its only output. Here’s a rather impressive quine called Qlobe created by Yusuke Endoh, a Ruby core member.

在源代码级别上,有quines,它们是不输入任何程序并产生其自身源代码的副本作为其唯一输出的程序 。 这是一个由Ruby核心成员Yusuke Endoh创建的名为Qlobe的令人印象深刻的藜 。

Run this in the command line:

在命令行中运行:

You’ll see a spinning globe of code.

您会看到旋转的代码地球。

蠕虫 (Worms)

While quines are harmless fun, computer worms are not. Computer worms are standalone malware programs that self-reproduces and spreads across networks. The term “worm” was first used in the 1975 novel The Shockwave Rider by John Brunner. One of the first worms was the Morris worm, created by Robert Tappan Morris, a computer science graduate student from Cornell University in 1988. The Morris worm disrupted close to 10% of all computers on the Internet (not such a big number considering the size of the Internet then) in a virulent denial-of-service attack.

虽然藜无害,但计算机蠕虫却不是。 计算机蠕虫是独立的恶意软件程序,可以在 络中自我复制和传播。 “蠕虫”一词最早出现在1975年约翰·布鲁纳(John Brunner)的小说《冲击波骑士 》( The Shockwave Rider)中 Morris蠕虫是最早的蠕虫之一,它是1988年由康奈尔大学计算机科学专业的研究生Robert Tappan Morris创建的。Morris蠕虫破坏了Internet上近10%的所有计算机 (考虑到计算机的大小,这一数目并不是一个大数目)然后通过互联 进行激烈的拒绝服务攻击。

One of the most notorious worms is Stuxnet, which attacked industrial SCADA systems and is believe to have caused susbstantial damage to the Iran’s nuclear program. It is also believed to be a cyberweapon built jointly by US and Israel. I’ll let that sink in a while. State sponsored cyberattack on a nuclear facility.

最臭名昭著的蠕虫之一是Stuxnet ,它攻击了工业SCADA系统,并且据信已对伊朗的核计划造成了可观的破坏。 它也被认为是美国和以色列共同建造的 络武器。 我会让它沉没一会儿。 国家赞助对核设施的 络攻击。

Of course, self-reproduction is just a mechanism, it’s the payload that is malicious. Payloads can also be benign, though they are relatively rare. For example, the Welchia worm infects computers to combat the Blaster worm. It automatically downloads Microsoft security updates for Windows and reboots the computers, although it does that without any permissions. Obviously not everyone considers it friendly.

当然,自我复制只是一种机制,它是恶意的有效负载。 有效负载也可能是良性的,尽管它们相对较少。 例如, Welchia蠕虫感染计算机以对抗Blaster蠕虫 。 它会自动下载Windows的Microsoft安全更新,然后重新启动计算机,尽管这样做没有任何权限。 显然,并不是每个人都认为它友好。

基因编程 (Genetic programming)

What we talked about before is self-reproduction, which is basically software cloning a copy of itself. In the organic world, besides ameobas and other single cell animals, reproduction is more like producing offspring, creating newer generations of itself. This happens in software too!

我们之前所说的是自我复制,基本上是软件克隆其自身的副本。 在有机世界中,除了变形虫和其他单细胞动物外,繁殖更像是繁殖后代,从而创造了自己的后代。 这也发生在软件中!

Genetic programming (GP) is one way software can produce other software. GPs are population-based meta-heuristics that evolves programs that best solves a particular problem.

遗传编程(GP)是软件可以产生其他软件的一种方式。 GP是基于人群的元启发式算法,它可以开发出最能解决特定问题的程序。

Alan Turing was the first to propose evolving programs in his 1950 paper, Computing Machinery and Intelligence. However, the GP and in general, the field of evolutionary algorithms was first laid out in John Holland’s classic book, Adaptation in Natural and Artificial Systems, first published in 1975.

艾伦·图灵(Alan Turing)在其1950年的论文《 计算机技术与情 》中率先提出了不断发展的程序。 但是,GP和一般而言,进化算法领域是在约翰·霍兰德(John Holland)于1975年首次出版的经典著作《 自然与人工系统的适应》中首次提出的。

GPs generally follow the principles of natural selection. These are the basic steps of a GP:

全科医生通常遵循自然选择的原则 。 这些是GP的基本步骤:

  1. Generate the initial population of programs randomly (first generation)

    随机生成程序的初始种群(第一代)

  2. Evaluate the fitness of each individual program

    评估每个程序的适用性

  3. Select the best programs for reproduction of the next generation

    选择最好的程序以再现下一代

  4. Reproduce next generation programs from the previous generation of best solutions, through crossover and mutation mechanisms

    通过交叉和变异机制重现上一代最佳解决方案中的下一代程序

  5. Replace the less-fit programs with the next generation

    用下一代替换不合适的程序

  6. Repeat steps 2 to 5 until the termination condition is met, usually when a suitable program to the problem is found

    重复步骤2到5,直到满足终止条件为止,通常是在找到适合该问题的程序时

Programs are represented in memory as tree structures in GP, so traditionally GP favours the use of programming languages that naturally uses tree structures. I’ve talked about another type varia

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月17日
下一篇 2020年6月17日

相关推荐