Today, we are spoilt for choice.
It is the state in which people have a difficult time making a decision when faced with multitude of options. Alvin Toffler introduced the term in Future Shock and it is so much relevant to this generation.
Toffler claims,
Overchoice happens when the advantages of diversity and abundance are negated by the complexity of the decision making process.
Have you heard this term, Overchoice?
Here is one example of this.
By this count, we have close to 6 million different apps in both the Google Play and Apple App stores.
Passing through the tough review process to make an app available in the app stores, that is 6 million different ways to do something in our life, be it to chat with someone, get weather forecasts, read news, listen to music or of course the most important task of all – play games!
It is not just about mobile apps, Overchoice is one of the biggest challenge (among so many other things) we face today specifically in building your career in the world of programming.
Here are couple of pictures to scare the hell out of you.
Credit: http://mattturck.com/
“It feels good to be a data geek in 2017”, claims the author of this infographic.
This list is no way complete and in the first glance, I can find so many of the tools that we use today in our development environment, missing from this picture.
But, it gives the idea of Overchoice.
Add to this what is called as the ‘pain of being a Javascript developer‘ these days, with more than 3 million active JS repositories in Github.
For people like me who started our journey into the world of computer programming in the mid 90s, yes, life was simple. To a major extent, either you were a mainframe or a C/C++ developer and then came Java and HTML with the advent of the internet. SQL was the defacto database interface language of choice and that’s it. In addition to solving business problems, most of the programming effort was focused on working around the infrastructure constraints of memory, computing power and I/O.
Contrast that to the options that are available to the software developers of today, with so many programming languages, hundreds of frameworks, libraries and the options available to capture, store and process every possible trail of data. Add to that the infrastructure nuances around cloud, devops tools and other tools related to developer productivity.
As Alvin Toffler writes:
Ironically, the people of the future may suffer not from an absence of choice, but from a paralysing surfeit of it. They may turn out to be the victims of that peculiar super-industrial dilemma: ‘Overchoice’.
In this ‘spoilt for choice’ environment, imagine the plight of thousands of college graduates, making an entry into the world of software development today.
The most obvious question is, ‘Where do I start?‘
Here are three key factors, that I found to be useful and which I would recommend to be successful in this modern era, what we call as ‘Learning to Learn‘.
Stick to the Basics.
There is no better time to focus on getting the Basics right, than now.
By Basics, I mean, having a sound understanding of the underlying concepts, logical thinking and problem solving abilities, that will give you the sufficient thrust to leap into the future. Start paying attention to data structures and algorithms and making it scale for the next billion.
Unfortunately most of the learning sessions of today are offered as 2 minute variations of packed lunches in fancy boxes. Two day programs on Hadoop, 1 week workshops on Data Science and the offer to master Angular JS or React by watching few videos online is the norm these days. I am not sure how far they can take you in pursuit of mastering some of the hard skills of today.
Anyone who has written any meaningful, working code in the MEAN stack can tell you the pains of what it really takes to master some of the modern Javascript frameworks.
Technology will continue to evolve. Just like how the foundations are so critical for the stability of a high rise, one of the key trait required to survive in this modern age of programming that changes almost every day, is the ability to learn Deep and learn Rapidly. Having a strong foundations on the Basics is a must have to achieve that.
Any short-cut would only lead to more confusion and apathy.
Know the Why?
Almost every aspect of software engineering today has a polyglot solution approach. Gone are the days when there was only one widely accepted method to persist the data and very few ways you can render information on the screen. Today in the digital era, there are so many variations of it and the hallmark of a great solution lies in its genesis – to solve a very unique problem.
Hence, to be successful in this overchoice environment, it is highly imperative to have a serious understanding of the WHY, before getting into the specifics of learning the nuances of the solution.
Why was this even created in the first place? What problems does it solve?
Here are some examples.
Before learning any NoSQL database approaches, learn something about impedance mismatch and learn why they were even created in the first place. Don’t pick Hadoop because it is the most fancy thing in the market; get a decent understanding of distributed computing and how it helps big data processing. Don’t build a BOT because everyone else has one, instead start from understanding the need for Conversational Interfaces.
Don’t try to be a Polyglot.
“What?”
Yes, that’s true.
What scares me these days is how someone claim themselves to be a polyglot <something>.
Being a Jack of all trades, and a master in multiple things is really, really hard any day, leave alone in today’s overchoice world.
Wordsmithing your profile in LinkedIn is the easiest thing to do and resumes are filled with jargons and vapourware with very little knowledge of the underlying concepts and practical usage.
Control the urge to act like a ‘kid in a candy store’ and to be a polyglot, especially when you start your journey in the field of compute science. There is no better time than now to be selective in what you want to be good at. You could be ‘aware’ of many, but not a ‘master’.
As the great physicist Richard Feynman said:
Knowing the name of something and Knowing something are very different.
Focus on mastering two are three things and be really, really good at those and most importantly stake your claim to be that good. “Yes, I know how Sorting works and I can sort a bunch of numbers or an entire telephone book of variety of data, running into thousands of pages”, is a much better answer than knowing the name of 15 different sorting techniques!
Even in these times of ‘plenty’, going the depth instead of the width pays you well and that in turn gives you the much needed solidity to the foundation to improve the width at a later time in your career.
Bottomline.
There is no better time to
- get a handle on the Basics,
- knowing the Why and
- to Focus to master ‘few’ things, if not the ‘one’ thing.
Man has a limited biological capacity for change. When this capacity is overwhelmed, the capacity is in future shock. – Alvin Toffler