The machine learning paradigm
The essence behind computer programming is to dictate to machines how to perform laborious tasks quickly and without errors. Calculating the average value of a series of numbers, resizing a photograph, streaming a video clip, and many other tasks are well-defined processes that require sophisticated software to execute. When performing more complex tasks, however, providing all the execution steps is error-prone and can often lead to brittle and buggy programs. Unsurprisingly, regular updates of our favorite computer programs claim to fix various problems – until, of course, the next update.
In the last two decades, we are experiencing a strong paradigm shift in commercial software development based on ideas that have been available for several decades. Instead of explicitly defining all the execution steps for a program, we can give pairs of examples in the form of possible input and the desired output. In this configuration, the machine tries...