How We (Don’t) Reason About Code

How We (Don’t) Reason About Code

Lately, we often compare the time spent reading code versus the time spent in writing code. And, we somehow lump together the actual reading of the code with reasoning about the code. But, if we look closely, these are very different activities.

We discuss too much about reading code but too little on what it means to reason about code. This article tries to explore a few aspects of what it means to reason about code. I’ll try to propose a new metric for code complexity that can be formalized (to some degree) and another metric that seems more appropriate to our cognitive behaviours.

read more

Composition and Decomposition of Task Systems

Composition and Decomposition of Task Systems

Composition and decomposition are probably the most important tools we have as software engineers. And yet, for multi-threaded programs that use locks and raw threads, composition and decomposition doesn’t properly hold.

This article tries to consider composition and decomposition of task systems, showing that task systems play nice with regards to those two.

read more

A Case Against Blind Use of C++ Parallel Algorithms

A Case Against Blind Use of C++ Parallel Algorithms

C++ parallel algorithms are great, right? Well, not quite. While they can be useful in some cases, they miss the point of what it means to have a proper concurrency design, at least for multi-threaded processing. They give one the false sense of comfort that good parallelism can be achieved by adding a parameter to a couple of algorithmic functions.

read more

Questions on the Form of Software

Questions on the Form of Software

The No Silver Bullet article by Frederick P. Brooks (appeared in The Mythical Man-Month, Anniversary Edition is arguably one of the most influential articles in software engineering. Besides setting the limits of the field, it makes an essentialist claim on software engineering: there is an essence of software.

With a philosophical flavor, the present article tries to explore this direction. It tries to ask several questions related to the essence of software. Having the answers to these will probably bring significant advancements in software engineering.

read more