Sadness with Software

When I was little, I has an IBM workstation that had Windows XP installed. There was no internet connection, so I could only explore what Windows had to directly offer. It felt like a restricted world, and it felt like there must be something deeper than that little world. Something deep, like the world that makes computers work. The computer felt like a black box that was hiding something beneath.

Sometimes, I feel uncomfortable with black boxes, but I also know that black boxes are not entirely bad. To get things done as fast as possible, one leverages black boxes made by other people. As programs become high level enough, one gets the nagging feeling that one does not really understand the system apart from its actual behaviour. For some people, knowing the behaviour is good enough, but for others, the joy comes from understanding the lower levels and the fundamentals. However, understanding the lower levels is not usually encouraged because it is seen as a waste of time. Sometimes, I hear "You don't need to know that!", and I feel a sad, because it feels that curiosity is being devalued, even if that was not the intended meaning. The pressure to produce quickly probably leaves people with less fundamental understanding than they would like to have. Fundamental knowledge includes a deep understanding of the code, and good foundations in computer science. Fundamental knowledge is good for the long term because the tools for constructing programs and programs themselves frequently become obsolete. It is knowledge that is unchanging, knowledge that stands the test of time that is most valuable. Knowledge resting on poor foundations of the code beneath and on poor foundations of computer science is subject to obsolescence.

The way programs are constructed has changed. In the past, programmers constructed their systems out of pieces that they could mostly understand. Today, people construct programs using libraries, with their code serving as a glue between different libraries. Being good at constructing programs means being good at using libraries, and being good at writing the glue that would make combinations of libraries achieve one's goal. This is why it seems like a waste of time to read the source code of the lower levels. There is a lack of incentive for people to deeply understand their programs. Instead, the emphasis is on producing software as quickly as possible. This makes me sad. The should be some kind of middle ground that makes people feel less like a machine that only produces code that will soon be obsolete. Continuous learning and exploration are important.If possible, I would like to be able to read the lower levels. That provides a deeper knowledge, and I value deep knowledge highly.

The other issue is with the image of people who program computers sitting in front of computers all day while forgetting to pay attention to the things happening all around. I cannot imagine being like that.I cannot imagine being sucked into a little world, while being mostly unaware of the bigger world outside computers. The problem is that I am becoming increasing like that. I feel sad when I think of declining eyesight caused by sitting in front of computers all day. Declining eyesight is common, and some of it can be attributed to the excessive use of computers. Sitting in front of computers also reduces human contact. There are times where I think I am becoming a machine. Isolation does not really help.

Then we have the human - computer interaction part. When I was first exposed to computers, it was through a graphical environment on an old computer. I had expected software construction to be a lot more advanced, a lot more interactive, and a lot less primitive than what it is today. For example, I was surprised that lots of people still use vim, a product of the last century (I use vim too, but I think there could be much better tools). I had imagined that programming would be done using tools that have less friction. I was probably expecting too much.

In conclusion, I believe my sadness and disappointment with constructing programs stems from three areas. The lack of incentives for very deep knowledge, the impact on health, eyesight and human contact, and very poor human - computer interaction all make me sad.