Common sense is more important than algorithmic skill

I offer readers of Habrahabr a translation of a short note by the Organizational Skills Beat Algorithmic Wizardry written by James Hague. The note seemed interesting and I wanted to share it with the audience.

Many times I read about technical interviews in major companies and was very glad that I was not looking for a programmer. The ability to write original implementations of a heap or tree. Puzzles with various restrictions. Tasks that will take ten billion years to compile if you cannot properly analyze and rephrase the requirements. My first reaction is how do they even manage to hire anyone?

In fact, most of the work of a programmer does not require such algorithmic mastery.

When you write code, the most important skill for you is how to keep all this piling up of functions from destruction under the weight of your own complexity. I worked on large telecommunication systems, console games, blogs, several personal utilities. Very, very rarely did I have to work with cunning data structures or algorithms. More often it is required to monitor states, sort structures, and carefully understand how different parts of the system interact with each other. Writing code is only part of the task. After it comes refactoring, simplification, elimination of excessive manipulation.

It is for this reason that many become programmers "by chance." It is unlikely that you often meet people who have become neurosurgeons in between cases, just doing it in your free time. This requires very intensive and specific training. But learning to write code is easy, and many do it. When I started programming on an 8-bit home computer, I did not even know what an algorithm was. I had no idea how to sort the data, and I did not need it for those simple toys that I wrote then. It was enough for me to know about counters, timers and state management. For this, “genius” is not necessary, common sense is enough.

A few years ago I wrote a utility that converts images into rectangular textures. The program is small - about 1,500 lines of code in Erlang and C. A very small piece of code about 20 lines in length is involved in packing the images in a rectangle. It wasn’t difficult to write it, but I would hardly have dealt with it at the interview. The rest of the code is reading files, outputting results, processing image parameters and transferring data between different parts of the application. It is this code that I most often modify when you need to add something new, improve error handling or improve usability.

And that’s exactly what most software development looks like.

Also popular now: