An embryonic profession: poor and misleading ways of formalisms

Design and programming activity as a profession is better performed with mathematics and applied logic concepts as first-class tools in the hands (heads) of practitioners.

There are a significant number of factors to take care of in order to improve design and programming skills that last. Two of those are: essential mathematics and, first-order logic (also known as first-order predicate calculus). If you are serious about a design and programming career, you know that already.

This is another trait of the current youthful state of mainstream software development industry where many, many people delude themselves into thinking that formalism means tons and tons of paperwork or (not kidding) a dress code wearing mandatory suit and tie. Then, some of them will say: “we are formal here”.

Regardless of what people are wearing, good and needed formalism in our industry is the kind of formalism related to useful software specifications, that is to say, class interface design and programming by contract.

In other words: “Talent Mandatory, Suit Optional” as stated in Quinn Emanuel’s philosophy towards law.

Bertrand Meyer in his book, Object-Oriented Software Construction-2nd Edition, page 400, in a section entitled “The expressive power of assertions” said:

“Including a full specification language into the language of this book would have completely changed its nature. The language is meant to be simple, easy to learn, applicable to all areas of software construction, and implementable efficiently (with a final run-time performance similar to that of Fortran and C, and a fast compilation process).

Instead, the assertion mechanism is an engineering tradeoff: it includes enough formal elements to have a substantial effect on software quality; but stops at the point of diminishing return — the threshold beyond which the benefits of more formality might start being offset by the decrease of learnability, simplicity and efficiency.

Determining that threshold is clearly a matter of personal judgment. I have been surprised that, for the software community at large, the threshold has not moved since the first edition of this book. Our field needs more formality, but the profession has not realized it yet.”

Assertion-first design, also known as test-driven development represents a powerful and reasonable tool at the hands of more and more designers and programmers, hoping the level of mathematic formalism in software development increase in a positive way.