So, we are done with another edition of our Art of Coding class, where we teach our students on the nuances of programming practices, with special emphasis on problem-solving methods, software engineering and along the way writing lots of clean code and test scripts to implement some interesting algorithms.
The obvious question that comes out at the end would be, ‘Am I a good programmer NOW?’ So, how do you become a good programmer? Does attending learning sessions make you one? Or, what else?
In this context, I just remembered one of the great talks (among so many others) of Simon Sinek where he talks a lot about practice. I could easily relate the challenges involved in developing good coding skills to the many examples he quotes in that talk.
Teaching good coding practices, especially in the context of skill development in this modern age, is like asking you to exercise or practice dental hygiene regularly.
It would sound so commonsensical that you don’t need an expert to come and tell you that. Yet, it would turn out to be a ridiculously painful process, and most importantly, very difficult to practice in a consistent way.
No one would question the efficacy of exercising regularly. The results are given. But, there are no instant gains from working out just over the weekend. How much ever you keep staring at yourself on the giant mirrors post the workout, it’s the same you. One common reason, why most of us give up working out, or practice dental hygiene is because the results take time and are not instantaneous. Unfortunately, we are addicted to seeking instant gratification and there is very less of it in daily exercise.
Working out 30 mins every day keeps you in shape. It’s hard to measure the gains in the short-term but it easily shows up in the long-term for us to feel good about.
I would apply the same metaphor to learning to code. Building a habit for programming is no different. Start writing code every day, do it the right way and you will soon see wonders in the way you solve problems and the way you produce great stuff.
Unfortunately, most of the training programs don’t focus on teaching someone to write code the right way. By the right way, I mean solving problems in a creative way, writing code that is clean, efficient, that consumes resources efficiently, that scales well and writing test cases with empathy for the end user. Rather they focus more on the tools, techniques, and syntax.
Add to that the clamor for all the expensive training programs that satiate our instant gratification appetite with the offer to make you an ‘expert’ over a few days. And you also have the other kind. that is offered like the traditional company offsites on Leadership or Agility or Design Thinking skills. Two-day programs, in an exotic beachside resort, stuffed with gourmet food, where you get to learn something in-between the breaks. Boom, by the end of the two days you are certified a Leader, Design Guru or an Agile Practitioner!
To quote Simon Sinek,
You don’t become a leader by attending a two-day workshop, but by practicing leadership.
Similarly, you become an agile practitioner by – yes, practicing. You become a great basketball player, by shooting thousands of shots; not by taking a weekend camp.
Likewise, you don’t become a GOOD programmer by attending a bootcamp or a one-week training program. You become one by writing code, by solving problems, by writing good test cases, regularly, that it gets ingrained in you that you don’t know any other way.
That’s the power of practice and that’s what makes few people so Good in whatever they do. Unfortunately, that is very badly missing in this generation of programmers. We all want 2-minute versions of learning.
It’s not about the intensity, but about consistency.
The training programs we offer, are good to refresh and to bring us back to reflect upon all the good practices that we have long forgotten. Most importantly, you get to learn these concepts without the fear of exams. But, unless you practice them, you never become a great programmer.
Yes, they would be boring, monotonous and painful. But, that’s where the pain and gain is – similar to exercise – and soon it becomes second nature.
As Simon says, daily exercises will be painful and the results won’t be instantaneous. You keep staring at the mirror and you observe nothing for the first few months. Slowly, you see the change. You observe changes in your metabolism, you eat well, rest well and you end up with higher energy levels that keeps you going. And, the effects start showing up in the mirror as well – you feel good.
On similar lines, developing good coding skills cannot be event-driven. A bootcamp or a training program doesn’t make you an expert – though many of them claim to do so. There is no single thing that can make you a great programmer. It’s a lot of little things and the way you practice them that makes you a great programmer. Soon, you realize you have mastered a skill that’s so valuable for your career.
Most importantly – it is unbelievably hard work!
You can watch that Simon Sinek’s video here: https://www.youtube.com/watch?v=_ztgMxdXafI&t=566s