I have recently read a great article “Why is Programming Difficult?” I thought it was very useful. As I supposed, I could finally show this clever and reasonable piece of writing to some of my acquaintances who think that I am an idler who gets paid a lot; explain to some of my relatives that I don’t simply press keys all day long; and prove to some of my friends with PhDs that I am not just messing around at work.
I thought that finally someone understood all the complexity of our work and was able to explain this in plain language.
However, this article lacks one small thing, namely, the truth.
The truth is that programming is easy and fun, the complexity is exaggerated, and the benefits of work are underestimated. That is why I have decided to write this article. I am not going to talk about trivial things, i.e. high salaries, market demand and high mobility because these things are not connected with programming, but rather with programmers’ life style, and this is not the same. What I am going to focus on is programming, its beauty and power.
To begin with, let’s prove that all the arguments of the article mentioned above do not make sense. The problem is that the article builds its reasoning on a misleading assumption that any programmer’s dream is not to think at all, and preferably not to do anything.
Does the author of the article really think so? He thinks that we are lazy (it may be partially true); what is more, he thinks that we are not intellectually inquisitive (and this is definitely not true). He assumes that we don’t like thinking, creating something new, experimenting, changing our world for the better.
A program is something that transforms source data into a result and depends upon the following conditions:
- The result of the program is excellent.
- Source data are excellent.
- The program is excellent.
- Source data are properly and accurately documented.
- The program itself is properly and accurately documented.
- The program has been properly tested and functions steadily.
- The problem which is being solved has been accurately specified.
- The set problem has been accurately specified.
With these additional conditions, programming becomes far more complicated.
But these are unreasonable complaints, similar to the complaints of a dentist who is moaning about a patient’s toothache and having to treat it. Everything described above is our work, something we are paid for, something that makes us necessary, the so-called added value which we produce, something we earned a degree in. It’s programmer’s work to make this world better, simpler, safer, faster, and more reliable. It’s our work to solve other people’s problems. Writing an ‘excellent program’ is our work. Moreover, it needs to be properly tested and supplied with an accurate source code. And if it requires writing one more program, it needs to be written.
It is said in the original article that “Programs need to be supported”, and it’s only reasonable. It’s not that difficult; vice versa, it can be a lot of fun. I have come across an interesting quote “Hardware eventually fails. Software eventually works“, which is true. The majority of goods and services become worse with time (fade, get older, rust, break down), but our program becomes better and better (one or two bugs are fixed, a feature is added, a button is embedded). We breathe life into our programs, improve them, and support them. No one thinks that supporting a child while he/she is learning to walk is bad. We want him/her to learn something; therefore, we help him/her. Why is supporting a program seen as something bad?
The article goes on, “We have to fix problems that shouldn’t have existed.” Can we talk of some problems that should have existed? All problems are unwanted, and the fact that we have to fix them makes life easier for users. Moreover, unexpected problems add some spice to our life; they present an intellectual challenge. If one likes solving predictable problems day in day out, they should choose a less creative line of work.
The author goes on, “Solving problems without getting new knowledge.” I cannot imagine how one can solve a problem without learning something new. Even if we assume that this is possible, solving such a problem will at least give us knowledge on how to solve problems without learning anything, which might be quite handy. Moreover, no one stops you from digging deeply when the problem is interesting. It is true that you don’t always have time for this at work. But do you honestly think that all geniuses came up with their ideas during paid working hours only? If you want to be a professional, if you want to achieve something, you need to refine yourself.
The article doesn’t focus on anything else, so let’s forget about it and move on to the benefits of programming.
Programming is easy to learn.
Nowadays there are higher educational institutions which offer training in this profession; computer science is taught at school; there are a lot of books, online courses, various resources on the Internet, specialists who you can ask for advice from, firms which offer internship. Elementary schoolchildren can learn Scratch; accountants can study Excel scripts and accounting programs. Self-study books such as “Programming for Dummies” are sold in every supermarket. Of course there is a lot of nonsense and everything needs to be studied and tried out, but if you compare today’s situation to what we had 20 years ago when there was no normal software, no books, no hardware, no teachers and no Internet, it has improved by miles. Programming learning curve is very smooth. No one is rushed. Any textbook begins with “Hello, world” print and walks us through all those conditional operators, cycles, functions classes, etc. We can launch or test something at each stage, set a breakpoint, and modify code as an experiment.
Programming is logical and predictable.
Two plus two makes four. ‘OR’ operation has the following truth table. ‘For’ cycle is performed as many times as set in the algorithm. And it always works. There are no exceptions, unless you include these exceptions into the algorithm. ‘If’ statement works identically on all platforms, all programming languages and any hardware, unless we create some circumstances when it works differently. You don’t need to take anything for granted; everything can be proved and tested. Having learnt something, you can be sure of your knowledge. There is no magic, no emotions, and everything works as it should.
A programmer doesn’t need to have deep knowledge of math.
We like talking about the importance of knowledge of math, discrete math, calculus of probability, statistics, quantum mechanics and string theory. But the truth is that 95 percent of programmers use only four arithmetic operations, percent, radicals, valence, logs and matrix. The remaining 5 percent develop science software, and therefore math is not required knowledge, but knowledge domain (similarly, a developer who writes software for an observatory, needs to know astronomy). To sum up, secondary education at a level of 6th grade is quite enough.
A programmer doesn’t need to know everything about programming.
‘Universal programmers’ are extinct. We don’t need to know everything. There are front end developers, back end developers, network programmers, Android and iOS developers, game developers, and those who specialize in databases; there are developers of embedded computer systems, and what not. You don’t need to spend a lifetime learning all programming languages, operation systems, frameworks, and patterns. You just need to choose something you like.
A programmer can learn throughout his/her entire life.
In childhood, when I was spending summer holidays in my grandmother’s village, I was helping local kids to shepherd cows. There was a ‘professional shepherd’ from local farm among them. He had been minding cows for 40 years. At that time I liked that job a lot. You become a junior in two hours, and in a year or two you will be a senior with knowledge on training shepherd dogs, and necessary vet skills. For the remaining 38 years, you can do the same thing. Now this horrifies me. People are put into circumstances when they don’t need to use their brains altogether.
It’s different for programmers. We can learn something new every day. We are paid for learning something new every day. The excitement of getting new knowledge, experimenting, solving theoretical and practical problems is our job and our life. What can be better?
We create our own tools.
In few jobs people can create instruments for their work by themselves. They more frequently use something which has been developed by other people, based on their understanding of how such tools should function and what they should look like. Programmers can write their own software, and they actually do it. The history of Linux development and many open-source instruments is a living proof. Even propriety design tools are developed by people who understand how these tools function and use what they develop every day. We are moving forward at the speed of light; rules of the game change on the go and people who work in this sphere quickly adjust to these changes.
Cost of mistakes
Even though there are discussions of a Mars rover vehicle which has broken down or non-functioning X-ray machine, the cost of mistakes in IT sphere in general is relatively low. Different bugs (a text which is not reflected properly on the page, a function which takes a second longer to complete, or a program with exceptions which crashes) can be easily fixed. Programmers’ mistakes do not have deadly consequences, unlike those of surgeons and specialists who construct bridges. When we get a notification about a mistake, we fix it and pretend that it should have worked that way. We aren’t usually fired for a mistake if we can fix it in reasonable time and come up with a solution on how to avoid it in the future. And we definitely aren’t imprisoned for one.
What’s more, programming isn’t just easy but is also a lot of fun.
We change this world.
We don’t simply change this world; our impact is more significant than anyone else’s. Nowadays, practically everything depends on computers, is developed using computers, is controlled by computers. Some professions are becoming obsolete, as people are substituted by computer programs. Some professions are complemented with computer programs. Some professions become virtual. And this is done by programmers. A programmer presses a few keys and something happens. Things which seemed unreal a few decades ago exist and function now, and partially because of me!
We create new worlds.
Average people live in the real world. Programmers share the universe of creativity with artists, poets, writers and directors. The world we imagine is beautiful. Everything is logical and simple. Architecture and abstractions are easily built, rebuild and sometimes destroyed. And unlike poets and writers, the results of our work are not words on paper, but software and hardware which actually functions. I don’t just imagine a dancing robot; I can write software and create this robot. This is pure creation.
We love our work.
I can’t speak for everyone, but I love my job. Some people say it’s difficult, but I don’t agree with that. Some tasks are simple. Some difficult tasks may be solved by splitting them into several simple tasks. As it has been mentioned before, we are a little lazy; therefore, we solve problems in the least time-consuming way. We have QA engineers who correct our mistakes when we make them. Sometimes, we have thankful users. We always have ungrateful users who don’t let us become too lazy. We often have employers who create comfortable working conditions for us. We have our victories and achievements. We have a lot of interesting things ahead.