19/11/2017

Will Artificial Intelligence replace developers (part 2)?

Home

Anatomy-1751201 1280


This is a part 2 of the overview of different AI solutions automating the programming process. The part 1 can be found here. Today I will describe another 5 "virtual developers".

Spynet

This solution is different from described earlier because of one thing. It wasn't created by a big company or by scientists from huge university like MIT, but by the blogger called Benjamin Tran Dinh. He decided that will create AI that programs in Python.

In order to do so he used Recurrent Neural Networks and more precisely Long Short Term Memory networks. His solution is based on Theano and Lasagne frameworks. His attempt is interesting but to be honest a network trained by him does not seem to work very well. For example it produces the following code:

if not system is None:
if res == 1:
return filter(a, axis, - 1, z) / (w[0])
if a = np.asarray(num + 1) * t)
# Conditions and the filter objects for more initial for all of the filter to be in the output

If you look closer at this code you will realize that it has no sense. However, this case shows that if we want to start a journey with artificial neural networks we don't have to be scientists. Contemporary frameworks like Theano or TenserFlow are available for everyone. Nonetheless, remember that nobody says that it'll be easy.

UI Developer

So far we talked about AI that write programs, fix bugs or suggest code snippets. The next solution, called pix2code, generates UI. The input for this AI is a screenshots of an user interface. pix2code analyses given picture and generates implementation in Domain Specific Language. Do you remember Deepcoder from the part 1? It also uses DSL.

Anyway pix2code uses Artificial Neural Networks even 2 types of them. Firstly, Convolutional Neural Networks in order to process screenshots and learn how to uderstand them. CNN are extreamly good in processing images. The second type are Long Short Term Memory networks. They are used to write code (in DSL) that generates UI.

At the end programs in DSL are translated into platform specific implementations for example for Android platform.

STOKE

This time it's all about optimization of x86-64 assembler code. Under the hood STOKE uses Markov Chain Monte Carlo. It also needs the set of test cases in order to verify if optimized code behaves in exactly the same way as the original version.

Programs optimized by STOKE are at least as fast as programs optimized by compilers. Now, you may ask so isn't it better to simply use a good compiler? You are right but STOKE is extraordinary because of one thing. In some cases it is capable of generating code that is comparable or better than a code handwritten by an human expert! Compilers are very unlikely to do that but of course it is cheaper to use a compiler than an expert. Nonetheless, it's amazing that STOKE can to some extent imitate the actions of human being.

Intentional Software

Intentional Software was founded by Charles Simonyi, former Microsoft programmer, father of success of Microsoft Office, author of Hungarian notation, fifth space tourist... Their main product is called Intentional Domain Workbench which is a kind of language workbench.

It's a tool that allows one to define any kind of DSL (e.g. graphical ones). What's important these DLSs can be edited in user friendly projectional editors. It means that the same program can be edited in many different things. For example graphically or in a text editor. Finally DSL programs can be interpreted by some execution engine or translated into another language like C#. IDW can be compared to MPS from Jetbrains.

IDW isn't typical AI in this sense that DSL must be defined by a human and programs in this DSL are also created by human beings. However, I decided to write about it because this kind of tools can considerably minimise about of time needed to create a software product. Sometime ago Intentional Software was bought by Microsoft so we may expect something interesting in the near future.

Virtual Scientist

Last but not least is a virtual scientist from Orange and University of Pierre and Marie Curie. It solves Constraint Satisfaction Problems using State space search and to do that it writes so called combinatorial programs that have a form of N embedded loops.

What is special in this solution is the fact that a virtual scientist can generate new problems based on already solved. In makes him a little bit more like a human. It's nothing special that a computer solves some a problem given by a user. However, the situation when a program defines and solves new problems is rare. Even if this problems are variations/modifications of old problems.

Summary

I hope that I showed that contemporary AI solutions can achieve something when it comes to software development. They already can write simple programs, fix bugs or optimize, some can even understand requirements in the natural language. Despite that, they are still far behind humans. And it seems to me that it will take many years to create a real virtual developer.

The main gap is generally a lack of ability to understand and modify existing programs. Only a few AIs do something in this area. The rest focuses on writing new programs what is much easier.

Nonetheless, process of automation of software development will proceed. Even if now we cannot automate it completely, we may automate it in 10%, 20%, 50%... Who knows? It'll still generate huge savings. So as everywhere. If your day to day responsibilities come down to relatively simple, repetitive tasks you may be worried.

When it comes to predictions, it seems to me that in future AIs will program in programming languages that won't be human readable. The time will come, when we'll not care how computer programs are written. We'll only see the final effect and that's all.

*The picture at the beginning of the post was created by GDJ [CC0], via Wikimedia Commons

0 comments:

Post a Comment