Algorithmics is one of those fields of computer software that seems maybe too… exotic. Maybe too theoretical. Maybe too abstract and confusing. Like many tech buzzwords (see “big data”, “distributed computing”, “Internet of things” and “disruptive innovation”) it is usually thrown around as bait by companies in need of attracting customers and employees, or simply to boast about their prowess. They say “Google does it” and “Facebook loves it”, but, in essence, why would it matter in this day of age, when our computers are so performant? Why do we still give a damn about computation efficiency and clever ways of solving problems? Well, I hope this article will help you understand, so let’s begin.
Although present in every aspect of our lives, under the guise of routine or problem solving approaches, Wikipedia still feels the need to give a most pompous definition of algorithms:
An algorithm is an effective method that can be expressed within a finite amount of space and time and in a well-defined formal language for calculating a function. Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a finite number of well-defined successive states, eventually producing “output” and terminating at a final ending state.
The English version: an algorithm is a set of steps that, given a starting point, will reach a final point in a finite amount of time. All the mentions of “finite” here refer to the fact that the algorithm will not ramble on forever… as some very lovely people do. A recipe for baking a cake, your morning routine and finding the root square of a number are all algorithms. According to world-famous cognitive scientist Steven Pinker and other scholars, almost all our brain functions are basically algorithms. Some algorithms are more difficult to understand than others, which is why computer scientists dedicate a lot of research towards them. Indeed, algorithmics is simply an endeavour to make all algorithms better, faster and smarter.
One of the titles I initially considered for this article was “… why does it still matter?” Most people think about algorithms in terms of the 1940s, back when Turing was first developing his theories. Sometimes they think about the progress made in the 1950s, when Edsger Dijkstra spearheaded algorithm development and wrote his papers by hand. That is indeed when some of the classical algorithms were discovered:
- various ways of sorting a data set, still favourites in interview questions
- various algorithms related to flow of data in network-like structures called graphs
Later, some domain-specific algorithms were developed, such as those for 2D and 3D graphical computing, artificial intelligence and many others. Students still struggle with these algorithms in computer science classes, which is maybe why people think algorithmics is all about sorting and saving memory space (which was scarcely available in those decades).
“Old, not obsolete”
In my opinion, there are two main reasons why algorithmics is still relevant today. One of them is that, while programming techniques, technologies and hardware are ever changing, algorithms are forever. If an algorithm has been proved to be the optimal solution for solving a problem, then no matter what the platform or technological constraints, that algorithm is always the best solution. The beauty of it is the mathematical proof, a timeless certainty. This means investing in algorithmics training will never be a useless endeavour.
The other most important reason is that, as technology changes, new challenges appear as well. As my father always says: “Small children, small problems. Big children… big problems.” While we discover clever, efficient and even optimal ways of solving current problems, new problems appear. Nowadays, computer generated imagery is not about making a teapot spin anymore, but about bringing fantastic beasts to life on the big screen. Computing is not about determining flow of information in a network of 5 computers, but determining how groups of friends react in social networks or which backup servers should handle DDOS attacks in banking applications. However, the building blocks are still surprisingly similar.
Algorithmics – what is it to me?
Another title I initially considered was “… why does it matter to me?”. Well, real-life problem solving skills matter to everyone, but we probably don’t think about it that much. Most likely, if you are (somehow still) reading this and you’re an athlete, writer or barista, you have no interest or utility in understanding the higher aspects of algorithmics. However, there are 3 main categories of people which should very much care:
- companies and entrepreneurs involved or coveting involvement in the tech domain
- companies which offer computing, software and other types of IT services
- people who want a job in programming or any other type of IT services
Companies and entrepreneurs need algorithmics for their business
There was once a time when the most successful businesspeople were spice resellers from exotic lands. That time is gone. Nowadays people shop online, handle large-scale business transactions without ever meeting the other party face to face, crowdfund their business endeavours etc. Most startups not only rely on technology, but try to offer innovation in technology, which makes efficiency, speed and quality of implementation crucial KPIs.
Here at Algotech Solutions, we collaborate exclusively with start-ups and small companies searching for quality implementations. Many a times we have inherited tangled, underperformant and non-reliable codebases to improve upon. This particular problem should concern both entrepreneurs and contractors. Indeed, software service companies which act as contractors will often sweep bad performance under the rug and hide under the guise of “it’s too complicated for you to understand why”.
However, many aspects of algorithmics and software architecture can be explained in simple, non-technological terms. If you have a startup with a heavy technological component, such as an application or a business process management system, your engineers should provide you with clear performance indicators, measures and improvement options. This can only be obtained from people with a high-level understanding of the code and its properties.
IT companies need to have an algorithmic mindset
In my opinion, the highest form of expression for professionalism in an IT services company is to be 100% involved in helping your client bring their ideas to life. This concept subsumes many aspects, from work ethics to technical know-how and from efficient communication to after hours availability in case of emergencies. But perhaps the most important aspect is what Robert C. Martin (we simply love “Uncle Bob”) called “practicing your trade”. The core of a programmer’s skills relies in making applications (of any kind) faster, smarter and easier to use. This requires extensive knowledge of algorithmics and software architecture concepts.
A company that provides good IT services should always encourage its employees to pursue their formal and non-formal technological development. When companies don’t do this, it usually means the standards are lower. The business quality it provides to its employers and the respect it pays to its employees are in a critical state.
People looking for an IT job need algorithmics know-how
Many students and experienced programmers face algorithmic interviews when searching for a job. You will often hear them grumble about it. They will say that the interviews have nothing to do with the actual work. Or, perhaps, they will complain about the sheer difficulty of the problems. However, for the time being, it is one of the best ways interviewers can assess:
- knowledge about informatics as a whole
- ability to reason about difficult problems
- ability to follow instructions, to apply hints and suggestions
- (technical) communication skills
Not to mention that you can teach an old dog new tricks. Anyone can learn new technologies or frameworks if they have these skills, but not anyone can learn complex reasoning overnight. When employing someone, companies can’t tell for sure whether the candidate will perform well. Alas, in this game of chances, they do have these hints to follow.
Regarding the discrepancy between the interview and the actual job, that is indeed a sad situation. I have covered the subject of quality assurance within a company before, and I intend to write more in future articles. For the time being, let’s just say that if your company hired you based on high-level algorithmic skills and has you doing monkey code, then you should probably prepare for another interview soon.
It’ an ecosystem
The subject of algorithmics matters to many stakeholders. Companies and entrepreneurs need it, so IT services companies must provide it. But, in order to do so, they must start with an algorithmic-minded business and staff. The staff itself needs to realise the importance of good coding and efficient problem-solving. They need to improve upon those skills and have the support of employers and clients in order to do so.
When did algorithmics prove useful to you? Do you like algorithmics? Do you think the industry needs more of it? Let us know in the comment section. For more articles about what makes our coding world go round, check out our other articles on Engineering.