The AlphaCode neural network performed in programming contests at the human level. But to complete automation is still far away-AI will not replace developers for a long time.

In early February, DeepMind introduced AlphaCode neural network, which was able to participate in programming contests on equal terms and write a good quality code. The chief researcher of the company Oriol Vignals said that “employees are delighted with the potential” by Alphacode - they are waiting for the ability to help write code and “create new ways to produce software”.
The news of AlphaCode caused another wave of discussions that the profession of the developer is about to lose relevance, because the programmers will replace computers. TJ figured out the history of the issue and tried to understand how serious competition from AI is.
Ideally, you should get a computer program that you can describe the desired application (or even the game) in words, press the button and after some time get a finished product: an appendix or a game. That is, this is the development of software without the participation of developers - people who write and support the program code.
The programmers themselves wanted to automate programming the first, and almost immediately after creating computers. Then the engineers had to write programs directly in machine codes, controlling individual electrical signals in the memory cells and processor registers. It was extremely tiring and boring to work with streams of zeros and units, so the engineers began to “teach” the computer to understand the human language, and not just their machine -based.
In 1952, the American scientist and commodor of the fleet Grace Hopper created the first compiler-a translator from a “humanized” machine code to a regular one. In this language of assembler, the place of many machine “words” was taken by more understandable MOV (move) or Add (add up), which even visually made the code easier. The language of assembler (it differed for each computer model) opened the second era of programming - which, however, did not last long.

Assembler’s possibilities quickly ceased to be enough, so from the end of the 1950s the third-generation languages began to appear: Fortran, Algol, Cobol, Basic, Pascal, C and so on. In them, even more machine instructions were wrapped in understandable words like Begin, End, if, Else, Return. New programming methods were formed, more similar to human thinking. Over the years, programming languages have become closer to people and farther away from the machine code.
Now programmers use programming languages of the third and fourth generations (C ++, C#, Python, PHP, Java, JavaScript). Understanding the code in such languages, even without preparation, is sometimes no more difficult than medieval poetry, especially if it is Python or PHP. Freimvorki like .NET, QT, DJango, Spring and individual libraries give millions of finished parts of software code. I disappeared to write separately for each computer model.
For 70 years, since creating the first compiler, programmers have automated their work well: instead of hundreds or thousands of rows in the language of assembler, it is now enough to write one understandable line on a modern framework. Thanks to this simplification, programming became the “second literacy” in the 21st century, and computing devices working under the control of programs penetrated all spheres of life.
Compiler programs not only transfer the source code into machine, but also optimize it well. Even 20-30 years ago, it made sense to write especially “heavy” sections of the program in the language of assembler in order to squeeze the maximum speed. At the beginning of the century, compilers began to generate code no worse than past assembler inserts, and now individual programmers are unlikely to optimize the program as well as GCC, LLVM/Clang, MSVC or ICC compilers.
Modern compilers are even able to independently drive the assembled program according to standard scenarios of use, analyze the statistics of its work and rewrite the code for faster or compact. Manual optimization did not completely disappear , but it has become higher -level - that is, the programmer usually optimizes the overall structure of the program.
The compilers themselves generate a new code, sometimes very complicated. But still they do not write programs completely from scratch, as in the case of perfect automation. The first attempts to create programs that the programs write, began at the dawn of the computer era and resulted in the emergence of a separate paradigm - metaprogramming.
The idea of metaprogramming is simple: if ordinary programs are manipulated by data (text, graphics, sound, and so on), then the code of another program can act as such data. Then the programs will study and modify other programs or even themselves, including right during work.
The programmer, for example, can write a short template, the “harvesting” of the program he needs, and the compiler will deploy it into a full -fledged working code. Many popular programming languages are able to do this - templates and macros in one form or another are in C ++, Rust, Haskell, Python, Lua and so on.

Using metaprogramming, the developer can even write a template of a new language created under one specific task. The compiler will generate this programming language and subsequently write the desired program on it. This approach using highly specialized subject-oriented languages (DSL) is especially often used by Lisp lovers.
Metaprogramming allows a person to write a minimum number of lines - in fact, the programmer in general terms “explains” the computer how the final program should look, after which the computer does the rest of the work. This is much closer to the ideal of automation - the program that itself writes programs.
Software working according to the principles of metaprogramming has long been not uncommon. Applications create reports and documentation, web frames generate HTML pages, which once wrote completely manually. Browsers and other programs use the self -modification of the code in the form of JIT - compilation of the source code in machine code directly during its execution.
Reliance for such saving time and effort is the complexity of programming and the weak predictability of the work of generated programs. This approach requires a very high qualification of the programmer. For example, there is the simplest task of metaprogramming: write a code that displays itself without reading input or files. On Python, such a program can be put in one short line:
Code block is not availableBut in order to come to her, you need to make a number of non -trivial mental efforts, without falling into endless recursion. It is even more difficult - to clearly think about how a metaprogram will be executed, which “reflects” someone else's or its own code, and modifies it.
This approach hides in itself so many difficult to predict mistakes and vulnerabilities that some experienced programmers advise him to beware, since he rarely justifies himself. And in general, metaprogramming does not look in a good way to get a fully automatic developer program. But in this way, artificial intelligence looks.
In the mid-1950s, scientists and engineers, seeing the success of computers, came to the conclusion that artificial intelligence can be created as part of a regular computer program. Moreover, not a narrow profile, but “strong artificial intelligence”, an analogue of the human. This thought became the dominant approach to the creation of AI until the mid-1990s.
The idea of symbolic AI was given by scientists Newel and Simon in 1976: they put forward a hypothesis that intelligence is impossible without calculations with the participation of numbers, words, expressions and other characters - and on the other hand, such calculations are enough for the appearance or creation of intelligence. This type of AI, working on the basis of symbols, in the 1980s was called "good old artificial intelligence" (GOFAI).
At first, progress in this area was really impressive. Lisp and ProLog languages appeared, well suitable for AI programming. On them, the developers wrote many expert systems that can independently reason and draw conclusions, as well as simply powerful programs for science, industry, healthcare, public sector, and financial structures. And these languages are still used-for example, ProLOG has written one of the components of the II-Computer IBM Watson.

The power of LISP demonstrated the Shrdlu program in 1968: on the PDP-6 transistor computer with about 144 kilobytes of memory, it “understood” text teams in ordinary English and gave intelligible answers, logically related to requests.
All these successes aroused euphoria among AI researchers in the 1960s: it seemed that it was possible to only build the correct logical relations between the symbols (objects, phenomena, concepts)-and now he, a full-fledged artificial mind. The development of software was not set by the main goal of AI - it was believed that he would easily cope with any task that is for the power of a person. Including, he will be able to write programs himself.
But already in the same 1960s, the symbolic approach began to firmly criticize: for example, the philosopher Dreyfus came to the conclusion that the “ceiling” of such AI is a solution to game tasks that have no practical value. In 1973, the Lighthill mathematician in his iconic report repeated this argument in a more categorical form: he showed that no system of AI has achieved the expected success, and that the symbolic approach is in principle incapable of leading to the creation of artificial intelligence.
The fact is that the development of any symbolic AI that operates with individual concepts sooner or later faces a combinatorial explosion. While the program is engaged in a “toy problem” - programmers can create an input processor for it (for example, user commands). But when trying to scale the program to universal AI, the number of input data combinations is growing explosive pace.
Simply put, you can create symbolic AI for conversations with a person or a game of chess, but it is impossible to create such an AI that could learn any human knowledge or skill, or even unlimitedly learn within the framework of one task. The creation of an infinite amount of the time and resources of the computer will take its creation.

The Laithill reported the first “winter of artificial intelligence” - interest in creating symbolic AI sharply fell , the authorities and private companies stopped financing research. The situation did not save the success of expert systems, which even began to release LISP machines-computers, hardwarely optimized to perform programs in this language. The Lisp Mashin market crashed in 1987, and by 1995 it became obvious: the idea of symbolic AI is insolvent, a different approach is needed.
Researchers of artificial intelligence secretly accepted the arguments of drifus, who pointed out the considerable role of unconscious processes in the human brain. Scientists decided to “go down” from the symbolic representation of knowledge and try to create a subsimvoly AI - for example, in the form of an artificial neural network, the computer model of which American neurobiologists proposed back in 1943.
If the symbolic AI operates with whole semantic units (objects, phenomena, concepts, visual images), then subsimvolic - smaller units that themselves do not make sense. For example, in certain letters, syllables or pixels pictures. Moreover, the subsimalical AI connects units exclusively according to the statistics of their compounds in the past, while the symbolic uses logical operations for this.
Suppose a person asks the program: “How are you doing?” The symbolic AI, written on Lisp, breaks this phrase into separate words, concludes that we are talking about himself, and that a person asks not about specific deeds, but wants to hear a certain integral assessment of the state. Then he looks at what options such a question is related in meaning, perhaps somehow evaluates his current state, and replies: “Everything is fine with me.”
The disadvantage of this approach is in its low flexibility. The programmer can lay dozens of words of words that are dynamically combined in different forms with one meaning: “How are you?”. But the first "what?" The stupor will cause symbolic AI, because this form of the question is not displayed logically from the embedded options.

Subsimvolic AI in the person of the neural network breaks the phrase "How are you doing?" In separate letters and with the help of a kind of multi -layer “stencil”, it evaluates that it can mean precisely such letters in the same sequence, after which it creates a suitable answer, also collecting it through pieces through a multi -layer “filter”.
The plus of this approach is that a well -trained neural network will equally perceive the questions “How are you?”, “How are you doing?”, “What?” and so on. Minus - in his "senselessness." If symbolic AI in the process of work logically argues that it looks like thinking, then the neural network “reflexively” gives answers exclusively on the basis of statistics derived from past experience - not even comprehending what it is about. The unconscious areas of the brain work in a similar way, generating what is called intuition.
In the 1990s, the subsimalical AI began to be investigated in practice: the first working samples of neural networks appeared for recognition of images (1992) and car management (1995). But only in the 2010s, the neural networks became a mass phenomenon when the computer industry was able to offer suitable equipment.

The artificial neural network, like a real biological one, is based on the parallel work of millions or billions of neurons. Computers of the 1990s and 2000s for a long time were unprofitable-even the video cards had a few tens or hundreds of computing nuclei. Only when video cards with thousands of computing nuclei and video memory gigabytes began to appear on the market - engineers got the opportunity to massively make quite powerful and functional neural networks.
The boom of practical use of neural networks began around the mid-2010s, and over the years the subsimvoly AI has become an ordinary tool in the hands of scientists , private companies and even government agencies .
In 2015, the first “neuro-programmist” appeared: the informational scientist Andrei Karpati taught the Torch7 neural network on 400 megabytes of the Linux source code, after which she created more than 38 thousand lines of the new code . According to Karpati, this code looks as if it was written by a programmer in language C-however, it does not work and is not even compiled due to a mass of errors and inaccuracies.
After that, the researchers presented several more neural networks who wrote or tested the code, and in the summer of 2021, perhaps, a significant event happened. Microsoft and Open AI launched Github Copilot-AI-Service, who prepares five to ten lines for the programmer at once. This “smart auto -filling” immediately became popular in practice - by the middle of the fall, Copilot has already generated 30% of the new code, which programmers around the world added to GitHub.

And now, in early February, DeepMind represents AlphaCode neural network, similar to the fact that engineers and scientists tried to create 70 years - it accepts a description of the problem in English and issues a code that is collecting and working. The basis of “Experience” for AlphaCode was 715 gigabytes of the source code of various GITHUB projects, and Copilot was trained on several terabytes of the created code.
It turns out that II already writes programs - both as an assistant to the programmer, and as a programmer himself, and with a good effectiveness. Half of the developers who tried it in the work, and Alphacode was able to get into 54.3% of the best participants in programming contests. It is even more important that the neural networks give out completely new code, and not the compilation of pieces of code that people wrote (although occasionally the Copilot also happens ).
Everything indicates that the computer, in principle, can write programs instead of a person. Автоматизация программирования постепенно дошла от компиляторов и фреймворков до искусственного интеллекта. Однако профессия программиста не перестанет быть актуальной ещё несколько десятилетий, а возможно, что компьютеры не смогут полностью вытеснить людей из разработки софта в обозримое время.
Как и в предыдущие десятилетия, автоматизация программирования угрожает в первую очередь самой простой и рутинной работе. Компиляторы избавили человека от необходимости составлять вручную машинные коды, а метапрограммы стали генерировать несложные и тривиальные компоненты софта. Когда-то разработчикивосхищались средой разработки, которая подсказывает программисту названия функций, а теперь ИИ успешно подсказывает целые фрагменты кода — но это очень простые фрагменты.
«Идти в айти» всё ещё имеет смысл и будет иметь многие десятилетия, однако будущим программистам стоит заранее обеспечить себе защиту от конкуренции со стороны ИИ. Прежде всего — стараться получить как можно более высокую квалификацию в программировании или занять ключевые позиции в разработке софта (архитектура ПО, менеджмент, и так далее). Или же занять ниши, где нейросети бесполезны из-за неспособности обучиться (новые и малопопулярные области программирования).
Пусть сейчас у программистов нет особых поводов для беспокойства, но ИИ вряд ли будет оставаться таким же «бестолковым» и зависящим от человека, как нынешние нейросети. Символический подход может взять реванш в виде гибридного ИИ, где «неосознанная интуитивность» нейросетей будет дополнена способностью к логическим рассуждениям, как у программ на LISP и Prolog. В таком случае автоматизация программирования вполне способна дойти до такого уровня, что потеснит даже сильнейших разработчиков.
#лонгриды #программирование #ии #нейросети #будущее #it