April 04, 2015 at 04:05PM
"The further a language departs from simple math, the more it hinders the abstraction needed..." #readingToday  

The key to understanding complexity is abstraction, which means rising above the code level. The best language for being simple and precise is math — the kind taught in elementary math courses: sets, functions, and simple logic. To make it easier to build tools for checking specs, most formal specification languages add things that are not found in elementary math classes — for example, types. However, the further a language departs from simple math, the more it hinders the abstraction needed to help us understand a complex program or system.

Architects draw detailed plans before a brick is laid or a nail is hammered. But few programmers write even a rough sketch of what their programs will do before they start coding. Some may argue that the analogy between specifications and blueprints is flawed because programs aren't like buildings: Tearing down walls is hard but changing code is easy. But changing code is hard — especially if we don't want to introduce bugs.