Friday, June 10, 2011

Lessons From A Beginner Programmer

I've recently started an exciting journey into programming and thought it might be useful to share a few things that I've learned so far.

1.) Don't Be Intimidated. When I first gave serious consideration to learning how to program, a friend gave me some useful advice that stuck with me: "Whatever you do, however you decide to approach this, don't be intimated." My first thought was full of that naive yet self-confident, "Well, yeah of course." The more time I spent on it, both independently and with others, I understood why she said that. It's easy to be intimidated by the hacker culture, the concepts, the skill level of other programmers and so on. Although I admit to sometimes being discouraged by this, her advice has become a mantra in my mind. Don't be discouraged by programmers (if you're exposed to any), don't be discouraged by the concepts, and more importantly, don't be discouraged by the journey. You'll know if you truly want to learn if you can push through these obstacles.

2.) Pick A Project. I had been wanting to pick up programming since college, but not enough to put any significant energy toward it. I brushed over introductory chapters of CS books and perused through lectures on various college websites but that's about as far as I made it. This desire changed when I began thinking of a web project that I wanted to use for myself. At some point I decided, "Hey, I want to see this out there. Instead of waiting for it to occur, why not start learning and work toward it on my own?" Around the time I started learning programming, I also started learning how to read and write Devanagari (Hindi). So I got some Hindi textbooks from the library and just went at it. But the work quickly began to feel meaningless because I wasn't motivated by a project, like for example, a book in Hindi to read or a letter to write to a relative in India. So pick a project that matters to you. Think of what you want to accomplish and how enabled you will feel by doing it. The passion for your project will help you through the "hard stuff." It’s immensely critical that you really care about the idea and have a project to work toward. If this doesn't exist, learning may feel a little pointless at times. Figure out your intentions and dedicate yourself to it.

3.) Be Patient. Take your time working through the exercises and problem sets. The hard work you do on them really pays off in the long run. Learning the basics may feel like low-level skills, but it's worth it to master these from the get go before moving on. Along with this, keep in mind that you will always have more to learn. There's no end to your proficiency and creations, so regardless of what, take as long as it takes. Especially in the beginning, be patient with the material and yourself as you learn.

4.) Examine Yourself. Since it had been some time since I picked up anything new with such ferocity, I realized that being a beginner, at anything, really gives you key insights into yourself. How you learn, what your motivations are, what discourages you, etc. It can be hard to pick up challenging activities, because, well, they are challenging. It’s a learning process and that can be difficult if you’ve generally been doing the things you know well often. So while you're learning, think seriously about your learning techniques and strengths/weaknesses.

5.) Experiment With It. This one takes a little practice but it's been the most important one for me. When you're learning the basics, really play with each part of the code. Whenever I would ask a friend a coding question, often times the response would include the answer and encouragement to experiment with it. For instance, if an exercise asks you to solve one problem, see how many other ways you can solve it. See how other people tried to solve a similar problem. How is their coding style different than yours? Reading and playing with a lot of code will really help with your fluency in the language. All this experimentation will improve the quality of your learning and will ultimately make you a better coder.

Don't forget to seek out programming events/workshops in your area, set up coding dates with friends, and of course refer to online communities.