So, a probability driven dynamic call-stack FSM.
I have seen this concept used in many ways before without the fanfare (i.e : code coverage/test suites and game A.I Engines)
It is indeed a cool approach and no doubt deeply inspired.
Rip apart the traditional program execution model and add statistical branching ...
This seems like it should be a much bigger deal. They're using a small training set (they describe it as 'curriculum learning') to create robust little programs that do some fundamental stuff at a decently high abstraction level. What am I not considering?
There are many aspects of programming that I don't think will be automated any time soon. Most software projects have under-specced requirements that the programmers must tease out; there are tradeoffs to be made based on what is important to the customers, there are architectural decisions, testing and QA, documentation, communication, etc.
A lot of my day to day consists of trying to understand what is meant to be built, finding out what the edge cases are or where the requirements break down, making sure that the proposed solutions have the scalability, performance or reliability properties that are required, making sure that the software will actually solve the customers problem, documenting proposed solutions as well as complete software. Testing and debugging. Basically, only a small amount of my time is actually spent writing code.
If we still have to formalise what we want, before the automated tool can create the software for us, then that formalisation is programming. Even if it will be higher level than what we have now.
Maybe eventually many or all of these will be automated, but I don't believe it will be "one of the first white collar jobs to be automated".
Programming is already highly automated. What is higher level languages and advanced IDEs if not automating a lot of tedious tasks that programmers used to be forced to do manually?
Applications already do this, Wordpress, Excel, etc. They turned the end users into enough of a developer. Developers are putting other devs out of jobs all the time.
Programming is automated by default. Ideally, you should only have to write each piece of code once. Which is why your job probably isn't "programming" its "requirements gathering, product defining, bug interpretation, and a little bit of programming here and there". Your job is to translate human instructions into machine instructions. Human instructions are very vague. Once we can automate this we pretty much just have hard AI.
It is indeed a cool approach and no doubt deeply inspired. Rip apart the traditional program execution model and add statistical branching ...
http://web.mit.edu/manoli/turing/www/turing.gif