Hey everyone! We’re gonna do a bit of a different dev dive today – Mike wanted me to make a post about algorithms. So I'm going to talk about what exactly algorithms are, and the history behind them.
First, we need to know: what exactly are algorithms? In their simplest form, algorithms are just a set of rules to follow. Algorithms are used all over the place, even outside of computers. Knitting patterns, for example, are just algorithms for making sweaters, blankets, etc. Recipes are algorithms for making food. But of course, nowadays most people associate algorithms with math and computers.
The first recorded example we have of an algorithm meant to be executed by a general purpose computer was created by Ada Lovelace in the 19th century. Similar algorithms were used with specialized machines that were similar to computers, but only able to perform a specific set of tasks, into the mid-20th century, even being used by the Allied powers to crack the Enigma machine. The Enigma itself used algorithms as well, and was founded on a lot of the same principles as modern day encryption.
Algorithms really took off, though, when Alan Turing proposed a model for a computer that could accomplish any task, not just the specialized tasks that similar machines were performing in his day. These computers are known as Turing machines, and modern day computers follow Turing’s vision for a computer that can be programmed to execute any algorithm. Similarly, any programming language that can execute all of the functions that Turing described is known as Turing-complete. Not all computer languages are actually Turing-complete – HTML, for example, can’t do enough by itself (though it is when paired with CSS).
I could write an entire dissertation on the scope and amount of algorithms we rely on at Punchmark – the internet itself runs on algorithms, our servers run algorithms for managing traffic, and our platform is chock-full of them. The job of a developer is almost exclusively to write, alter, and fix algorithms. In fact, some of my computer science classes in school never dealt with code or computers – they were classes exclusively on algorithms. But it’s still important to remember that they aren’t anything intimidating; we all interact with algorithms every day!