Software and complexity

Over the past few weeks, I have been conducting interviews for the position of a software developer. I must have conducted more than a score of interviews of people with about 1 to 4 years of experience in the industry. Many can’t answer what the size of an integer is or what the largest representable integer value with a given number of bits is. One person said he couldn’t recall the formula. Of those who get past that, not one person so far has been able to write a 10 line function with confidence. And this is after some initial filters applied by the HR agency that supplies us with resumes – a minimum salary and some development experience. These people have salaries in the range of 3 to 6 lacs. Somehow the industry is able to extract a commensurate amount of value from them.

The product that we develop has over 200,000 lines of code. How will someone who finds it difficult to write a 10 line function work on a codebase of this size? And yet, 200,000 lines of code would be classified as a small to medium project. There are so many software solutions that have millions of lines of code. Presumably these solutions are being maintained by people with the same levels of skills/abilities as the ones I have been interviewing.

The only way I can make sense of this is to hypothesize that the people who wrote those solutions with multi-million lines of code designed them to be maintained by people far below their own levels of ability. That is an aspect of programming that I have never paid sufficient attention to. I have always worried about how to make my code flexible in terms of the requirements it can support and scalable in the data it can handle. My consideration has always been how to minimize my effort when requirements change and load increases. Often this has meant an increase in complexity. I have never worried too much about it confident in amy ability to handle the complexity.

As I look to delegate more and more of my work, do I need to consider this additional factor – how do I write code that can be maintained by someone who barely knows programming? I am beginning to believe that the answer to that is yes.

Moral responsibility in relationships

The comment thread on my previous post raised some questions about the nature of values in a relationship and what it means to owe something to somebody. In this post I intend to explore these issues deeper.

A person can be a value to me merely by virtue of existing (so can things). As an example, a baby is a value to the parent in just this way. A person can be a value to me by virtue of his actions even when those actions are not personal. Sachin Tendulkar is a value to me because of the way he bats. Ayn Rand is a value to me because of the works she wrote. The latter is an example of a person no longer alive. Clearly there must be a difference in what (if anything) I owe Ayn Rand as compared to what I owe my parents. This difference arises from the nature of values I receive in these two cases. The values I receive from a hero or a role model with whom I have no personal interaction are non-exclusive. The production of those values is not directed towards me and my consumption of those values does not cost anything to the producers of those values. In contrast, the values that I receive from my parents or in any inter-personal relationship are exclusive. They are directed towards me. The time and money spent by my parents on me was spent on me. It cost something to them.

Exclusive values can be traded. Non-exclusive values cannot. A personal relationship – in as much as a relationship means something more than the existence of two people – is based on the long-term trade of values. This is not to say that non-exclusive values are not important. Many personal relationships would be impossible without non-exclusive values. But it is the trade of exclusive values that makes a relationship personal.

In the context of values, one owes something (exclusive values) to somebody when one is the recipient of exclusive values under mutually acceptable terms (the mutual agreement is usually implicit).

%d bloggers like this: