“The Internet? Is that thing still around?” - Homer Simpson
True story - Back when I started my IT career nearly 12 years ago, fresh out of college, little did I know that my whole career was being decided by an HR lottery. It worked this way, assume 40 grads were joining the company on a particular date, 10 were randomly allocated to the Java stream, 10 to Microsoft, 10 to Mainframe (I dodged a bullet there) and 10 to Testing. Of the 40, those allocated to Java, Microsoft even Testing made it through into having a decent career. But the poor guys and girls made to work on Mainframes purely randomly had a horrific experience trying to turn their career around. Most of them turned to Testing and some of them reinvented themselves as Java or Microsoft Engineers.
Of course, I have now learnt that my destiny need not be decided by HR or Resource Managers and the project they place me in.
In recent times, there have been so many advancements in technology and architecture such as Microservices, Event based systems, Cloud, DevOps, AI, Machine Learning, Blockchain, Big Data, Reactive programming to name a few that it is solely the onus of an Engineer to learn, evolve and carry themselves to the future. I use the term “evolve” consciously because with the learning of each of these technologies you become someone who is better adapted to the future.
The time to market for a new technology is so short that it will just whizz past us while we are making decisions on which one to learn next.
Mainstream technologies mentioned in the first paragraph of this blog are now simply the means to take us to the future rather than the future themselves. They were the future once. Besides, new programming languages are emerging like mushrooms and there are lots of options to choose from like Python, Ruby, Go, Swift, JS, Scala, Haskell, Kotlin and the list goes on. For instance, you can pick any programming language which supports Reactive Streams to build a Reactive system – Java, Scala or ReactJS etc. But it is important to know and understand what Reactive Systems are and how they impact a Microservices architecture. In the DevOps world, things are even more fluid. But the same principle applies there and elsewhere such as Machine Learning, Big Data etc.
Now, this is where I explain the donkey.
Buridan’s donkey is a paradox in the conception of free will originally formulated by Aristotle but made famous by a French Philosopher Jean Buridan. It goes like this - a hungry donkey placed equidistant from two piles of hay will be unable to make a rational decision between the two piles and ultimately starve itself to death.
Pick a trend that tickles your fancy (for me it is now Machine Learning, it was Scala before) and learn it by applying. I would strongly recommend reading Capgemini’s Technovision which identifies the technological trends that are most likely to impact businesses in the near future.
Summing up - Don’t be a Buridan’s donkey paralysed by options but be ready when the future comes calling.