Is it Angular, React, Vue, Node or AI or Machine Learning, Tensor Flow, Cloud, Big Data, Android?
The very definition of a ‘good programmer’ these days has become a function of technology tools than anything else. Not so surprisingly, in a jargon filled world, we attribute so much of importance – to jargons.
With the pace at which things change, there is a strong tendency to be a ‘kid in the candy store‘ and to keep gleefully hopping around from one technology (jargon) to the other. Instead, any talent development of today has to put a strong emphasis on getting the Basics right, so that you get to master the much needed 21st century skills around Adaptability, Flexibility and your ability to Continuously Learn things rapidly and deeply.
Here are some common traits that defines the contours of a good programmer today and that can set them up in a path to success. And, many of them are just Basics and not jargons.
1. Ability to Solve Problems.
There is no better time than now, where your problem solving and logical thinking abilities are valued more. The modern world throws lots more constraints and variations into the problem domain, that logical thinking is one of the most sought after trait in today’s programmers. Technology tools and Programming Languages will come and go; key is your ability to think in abstract terms at the solution approach.
Don’t just jump in to write the code. Learn to break down a problem into simple, logical steps. Document the constraints and assumptions and build a creative strategy to overcome the constraints.
2. Follow the Lego block approach.
Software Engineering is just not about building things from scratch. Being aware and building on top of existing stuff or what I call as Lego Block approach is extremely important in today’s world, especially to achieve the much desired velocity to deliver things. Delivery cycles are increasingly getting compressed and becoming more of a continuous process.
Along with it comes the need to effectively play the dual role of a Consumer and a good Creator, with the ability to build things for future reuse and most importantly the ability to document your code which could directly drive up the consumption by others.
3. Automate Things.
One of the fundamental step to achieve development velocity, is your ability to automate some of the mundane tasks. Smart programmers of today work with a comprehensive toolbox and there lies their secret sauce in achieving the much desired productivity gains. Proficiency in various DevOps tools, powerful IDEs, collaboration software, dependency checkers, testing tools, build automation tools among others is a must in today’s context.
I will always choose a lazy person to do a difficult job, because he will find an easy way to do it. – Bill Gates.
4. Test, test and test.
‘What? Testing – I thought we had separate people and team to do that.’
This has been the unfortunate state of software development for many years. Thanks to the highly competitive environments, shrinking development cycles and with companies increasingly focusing on Continuous Integration and Deployment methods, concepts like Test Driven Development (TDD) are making a comeback into prominence. With frequent code changes, the cost of breaking a working code can be huge.
Bugs are real, but, a good software engineer would always despise the situation when someone finds silly bugs in his code. Thinking early about the boundary conditions and user experience scenarios that could easily break your code are very important, since the cost of failures could be extremely high. Even Facebook had to tweak its motto of ‘Move Fast and Break things’ approach.
5. Scale and Resiliency.
Anything we build today, has to scale to thousands of users, if not the next billion. As I always tell the students, it’s just not about learning to Sort 10 numbers, you should know how to sort a telephone directory and how the sorting would work for different data types. Learning to build to scale cannot be an afterthought.
Another key factor that forms the holy grail of programming is the ability of your software to be resilient. By definition, Resilience is the ability to recover quickly from difficulties. Having been the consumers of highly resilient applications in our day-to-day life, like the various social media, email and Search applications, consumers expect the same user experience from any enterprise applications we build today.
Hence it is highly imperative for the modern day programmers to be aware of concepts that makes the code resilient – ability to log everything, measure and seek out data intelligence proactively to improve or self-heal.
‘Are you crazy that I should know all these? I can build an app easily with a simple drag-and-drop interface or copying code from stack-overflow or GIT repos’.
There lies the peril of today’s learning in a fast-food approach that gives short-term gains with long term disaster.
Teaching someone to be a great programmer in today’s scenario is like preaching someone the benefits of daily exercise. The above list might sound so much out-of-fashion, painful, not so trivial and yet extremely difficult to follow.
It is tough to convince oneself on the real merits; but, the end results are always good to make you stand out from the crowd.
You can and you need to stand out from the crowd today.