Aristotelian Virtue in the World of Software
Part I


Suppose that you want to be a great developer. Suppose that you want to win at this software game. How can you do it?

You cannot do it by doing just anything. Work alone does not work. Let us characterize success as having made a series of moves that got you to your goal.

Now, how would you explain your having had success? What is the reason why you would have made the right moves and avoided the wrong ones?

Take a look at the following:

Vice of Excess Virtue Vice of Deficiency
Verbose Concise and informative. Laconic
Tries to future proof, but not gonna need it. Writes nicely factored code. Repeats same code over and over and over.
Reinvents everything. Adopts existing solutions or writes own, as appropriate. Overly dependent on third party solutions.

Here we see virtues in the Aristotelian sense. Having virtue means being such a person that makes the right moves where others go wrong. To each side of the virtues are the vices, tendencies to err in one way or another. If virtue is hitting the mark, vices are aiming too high or too low.

There are many things that we gain automatically, without even thinking about them. But we can go only so far without thinking. To get beyond, we must consciously seek what we lack. By positing that virtue exists as something to be had, we can pursue it, lay claim to it, and will have many successes on account of it.


How many things are you doing wrong that you do not know about?

Surely there must be some things. But what does it even mean: to be doing something wrong and not know about it? If you are able to finish things and they work, then is there even really a problem? Only if you are after something more. For instance, say that you reinvent something when it really is better to adopt an existing solution. What you reinvent works fine, but time was wasted. This matters to the extent that you want to accomplish other things, but cannot because you do not have the time that you have wasted.

OK, suppose that we might try to do things more correctly. What does that mean? How can we improve when we do not even know what we are doing wrong?

Let us go back to the case where time was wasted. Imagine that there exists some alternate universe where you made the right move and now you have all the free time that you would have wasted. Now let us trace back in time to where you branched off, what do we find? Well, somehow you thought different things and that caused you to take different actions.

Actually, it is more complicated than that. Imagine that we do not know the exact point where you may have diverged. We found several points where your thinking may have changed from wrong to right. We need to do something to change your thinking in multiple places, without knowing what you thought. We need to do it such that if it is wrong then it becomes right but if it is already right then it stays right. How is this possible?

Reserve extra mental spacetime for new thinking to happen within, to start.

to be continued in part II

« index »

« subscribe »