Why designing algorithms is hard

The hardest part of developing software is of course the algorithms. People often  think that it’s possible to write a program to do just about anything – but that is just not the case. There are things that humans can do that machines just can’t, and likely never will be able to do. Algorithms are hard because humans don’t think in the same black-and-white manner as machines do. Writing an algorithm to filter an image in a way similar to an Instagram filter is something the human mind cannot do, but interpreting the aesthetics of the filtered image is not something a machine can do. Nor should it. It is too hard to try and frame the complexities of the human mind in a series of steps which can be translated into a program. Even weather predicting models can be flummoxed by the fact that weather is unpredictable, and can change. Anything with some level of randomness in it is more challenging to pin-down, and hence more challenging to write algorithms for.

We take algorithms for granted because we think that  things that are inherently simple for humans, should be just as easy for machines. Millions of years of evolution have provided us with eyes are able to process visual imagery in a spectacular fashion, yet translating this to algorithmic form for the machine to mimic is almost impossible. Machines are able to easily store imagery, and manipulate it in ways the human visual system cannot, and yet they are not able to instinctively identify objects in a generic manner – although they have made inroads. A human is able to identify a tree species from a distance, a machine is not. Being able to write programs is one facet of software development, but being able to decipher the logic underpinning those programs relies on individuals who can realistically think outside the box, push the envelope so to speak. Look at sorting algorithms. When was the last time a really effective, new sorting algorithm was developed? Most “new” sorting algorithms are usually an extension of an existing algorithm, wringing out a few extra milliseconds of speed. But truly new, transformative sorting algorithms? They just haven’t appeared.