Software development involves far more than the mere production of code. It goes beyond writing instructions and knowing specific syntax and grammar rules. So, we may well ask ourselves: what is software and how is it developed? One of the best examinations of this subject was done by Peter Naur – creator of the BNF notation and winner of a Turing award – in his essential article “Programming as Theory Building”. Here’s a summary of his idea.
The compiler is a key element in developing software as it translates instructions given in one programming language (somewhat close to natural language) into something a computer can understand: machine language, made up of ones and zeros, which, in turn, is another abstraction to encode different voltages for an electrical signal. Despite its importance, and omnipresence, doubts may arise regarding its nature. What language is used to write a compiler? How do you compile a compiler?