Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.Bill Gates
Many people struggle to become an advanced level programmer. They try all sorts of resources but still fail to reach a decent level of mastery.
The sub-optimal method
Reading a book cover to cover doesn’t work. All you get is knowing about the language features in isolation. That’s like reading a book on colors and brushes in order to learn how to paint. And reading a book while executing the sample codes also becomes tedious and boring pretty quickly.
MOOCs and other video resources on the other hand, have high dropout rates. Many are unable to continue for too long into the course. Most people drop out as soon as the course becomes slightly challenging. If you are very committed to complete a course, they could be useful. You can also think of paying for a verified certificate if money can provide you the commitment.
They try to teach coding at schools too. However, I doubt how good the teachers are since they are not even professional coders. One teacher at my school was pretty good. But that’s because she was an engineering grad who was a teacher only due to lack of options. She too eventually went on to work as a software engineer for a small company.
Programming in college
Same goes for college teachers of mediocre universities. I’m not saying MIT’s 6.00 Intro to Computing is useless. They are among the best teachers in the world. But a programming course at a local college doesn’t really prepare for a career in software. College curriculum is often too focussed on the language features and minute details. Quizzes often ask questions on operator precedence (in what sequence multiplication, division, addition, and subtraction will be compiled). In the real world, we don’t need to memorize anything that can be googled. Also, it’s considered good coding practice to use parentheses to make the code for calculations easy to understand rather than writing a cryptic code relying only on operator precedence.
What really works
So here’s what eventually worked for me and what John Sonmez of simpleprogrammer.com also suggests in his book The Complete Software Developer’s Career Guide. If you are aspiring to be a developer I suggest you buy this book. I don’t get paid to say this, it’s just that the book provides far more value than it costs.
My own experience tells me that instead of trying to learn sequentially, a more radical approach works much better. Read below to know what you can do to make your learning effective.
The optimal method
- Start with reading up on how to create a very basic program like hello world. If you know the basics, skip this step.
- Search for open source projects made using the language you’re trying to learn. Study their code on GitHub. Try to understand whatever you can at this point. This reverse process of first diving into and trying to make sense of what you don’t know yet will actually help you learn faster. If you don’t believe me, well, there is research to prove it. You can read more about it in the book A Mind for Numbers.
- Go back to your book or tutorial and read up on the features that you didn’t understand in the code.
- Repeat last 2 steps until you get a pretty good picture of the most commonly used language constructs.
- Think of a non-trivial problem you would like to solve. Solve it using the skills you have gained till now. Repeat with newer and slightly more challenging problems.
- Build a personal project based on your other interests like sports or business. Keep referring to resources when you come across a challenge.
- Volunteer to teach programming if you get a chance. Trying to explain to a beginner will further sharpen your own concepts.
So that’s it, my 7-step formula for becoming a code craftsperson.
If you have made it this far, I also have 2 bonus tips for you:
- To get a really good command over the core features of the language, learn data structures and algorithms. Yes, yes, I know that even many professionals don’t use them, but don’t forget that those are the garden-variety professionals (no offense, I was also a garden-variety developer once upon a time). The really good engineers who are raking in the moolah know data structures like the back of their hands. They can optimize algorithms while walking in the park. Of course, this would seem very daunting initially, but the rewards and satisfaction they will give you when you finally nail them are also immense.
- When you gain professional level proficiency, start contributing to open source projects. That will teach you a lot more valuable skills that you can’t pick up if you work only on your workplace or personal projects.
Hope this advice is of some use for you. For any suggestions or feedback, feel free to post a comment.
Until next time, stay hungry and keep learning.