Happy New Year folks!

I thought of starting the year by revisiting my early days in programming. So I have tried to put together the lessons learned from those times. This story is for the people who are at the early stages of their programming career.

There are a few articles explaining why learning to code is so damn hard, and rightly so. As a beginner, I also had to go through lots of confusion and stress.

However, there has never been a better time to learn how to code. I want to highlight key components in the process of learning to code and get better at it.

Cut down options, choose one There are so many software development areas i.e. Web development, mobile app, desktop app, game development etc. You can't master all of them at the same time. A lot of people who want to start programming are very confused about what they should be doing and because they are not firm on one thing, they keep jumping around areas and stacks in them. Say you decided to learn web development, again there are a lot of languages, frameworks and opinions out there, a lot of noise. People will argue about JavaScript vs Python vs Ruby vs some new cool kid. All of them have their own pros and cons, but it's important that you do your initial research or maybe seek an expert opinion on what should you be learning. The end goal is to figure out what you exactly want to learn and why. Learning to code is a more about focus than anything else, pick one. Whatever you choose is going to be challenging. Go through introductory tutorials and exercises, grasp basic concepts and syntaxes.

Resources It's important to pick right resources when you start learning. Doing a little bit of searching helps but again there are plenty of options. How do I pick which one to use? Here are a few points that I keep in mind when choosing a tutorial/book- How quickly does it cover the basics and syntaxes and gets me to the point of building something meaningful. It shouldn't take a long time for me to just cover the basic syntaxes.

Does the tutorial/book requires me to actually write code or not. I find tutorials/books with code snippets or a updated Github repo much more helpful.

Working on projects/ Writing a lot of code Just figuring out what you want to learn is not enough. You need to have strong reasons to support why you want to learn it. Generally, the best reason is "I want to make something for myself" kind of projects. Come up with a good, fun idea that you would like to see in existence. Have a rough sketch of what you want to build and simply start building. There are couple of important points here- Breakdown the app into small steps and figure out how to do one thing at a time.

Don't quit until it's done. I made a community issue tracker app as my first project, it was a simple CRUD app, where you could login, raise issues, update statuses and post/delete comments.

Don't swallow, chew again later It's absolutely unnecessary to try to mug up syntaxes/concepts. You need to understand them which often happens simply by writing more code and revisiting concepts regularly.

Knowing what to learn next For me, this was the trickiest part. How do I know what to learn next? What are the other things that I should know or how do I level up? Since there is no well-defined, laid out path on what a developer should learn, after a certain level it's very hard to tell if one is really making a progress or not. Fortunately I was learning Ruby on Rails then and RailsCasts is an amazing series of screencasts which touches upon all important aspects of building an app and I could just go there and watch the screencasts on topics that I didn't even know existed. I wish there were more of such sites on other languages and other sections of software development. Other things that helped me here was talking to senior people, following blogs and working on bigger projects. While working on projects, you will come across varieties of feature requests and figuring out how to do them will introduce you to new concepts, tools and techniques.

Reading code Reading code is an underrated but very useful tool. Reading code written by senior people helped me understand where to use what, how to organize code and tons of other good practices. It's a little hard to figure out what repos to read on GitHub at your level. Search on GitHub and find a repo that pushes your understanding but is not completely overwhelming.