I can only share with you what worked for me. Everyone learns differently. The only thing without a doubt that holds true for everyone learning to program is that you must deeply want to learn. Need to learn. If you go about passively learning then you'll get frustrated and give up as soon as it starts get tough. A few hours a week isn't going to cut it. During your off hours won't be enough. Sure, you may walk away with a better familiarity with coding syntax and general programming concepts, but that's a lot different than learning to become a programmer. This article is not going to teach you how to program although there are some resources at the bottom that I used to learn, but much more on when and why to learn. I hope you enjoy it.
Preparing Yourself Mentally
Before diving in completely in the beginning of February, 2012, I'd had a handful of false starts learning to program dating all the way back to high school. I took a Visual Basic class in high school, enjoyed it, graduated in 2002 and entered college on track to get a Computer Science degree. Being on the computer was my life so naturally I felt that I should get a degree in something computer related, but it didn't last.
Programming didn't come easily to me as it did other students in my classes. I got frustrated when I couldn't get all my homework assignments to compile properly. I'd put off the assignment to the last minute and focus my time and energy on areas I did well in: other subjects in school and founding a successful startup during my sophomore year of college. I'd eventually switch majors, but failing to complete my CS degree left me with the feeling that maybe programming wasn't for me.
The problem with Computer Science then is that it didn't capture my attention as what I was building didn't interest me. Who wants to stare at a terminal all day just to get an algorithm to compile properly? Not me. I wanted to build real-world projects for the Web.
My head just wasn't in it. It wasn't until ten years later — 28 years old — when I figured out how to get over this hurdle. It's simple, really. You must have a project in mind that you want to see built. Not any project, but a project that you care so deeply about that nothing can deter you from shipping it.
There will be dozens of times during the development of your project and your learning to program, that you'll run into bugs that take you several hours to problem solve. If you're not one hundred percent dedicated to what you're building then you're going to get frustrated, annoyed, and discouraged from learning to program. You're going to have another false start that I am all too familiar with.
If you don't have a project in mind when starting to learn to program then I would give up now, save yourself the wasted hours of frustration, and come back when you do. You may be able to get through a tutorial or two, even build a shopping cart app, but the real learning comes when you're building your own thing, for you, and there's no tutorial to guide you through it.
Why You Should Learn to Program
You're reading this because something inside you said that you should learn to program. But before you take the plunge, ask yourself if you're learning to program for you or you're learning to program because you keep hearing that it's the hip new thing that'll put an end to your startup or job woes.
Whenever you're hanging around other startup people, "you should learn to program" is thrown around like it's the antidote to all your problems. I'm so tired of hearing: "If you only learn to program then your startup will be a success!" or "All the most successful startups were founded by engineers." The funny thing is that most people spewing these phrases around aren't programmers themselves. What kind of nonsense is that?
Really, you just have to ask yourself why you're learning to program. People starting to learn to code don't often ask themselves this question. "Because I want to be able to build my own things," is the standard answer to why, but I think you deserve to be more honest with yourself before putting thousands of hours into learning something. Are you learning it because you deeply have a need to learn to code or are you learning it because it's the popular thing to do?
Here's why I finally learned to code: I've been a web entrepreneur since I was eleven years old — for over sixteen years now — and the majority of the time throughout those years when I came up with an idea, I had to find a technical person to implement and co-found the startup with me. I grew tired of having to rely on someone else. Have an idea. Find a technical co-founder. It's a brutal, debilitating cycle, and I was fed up with it and myself.
This alone wasn't the only reason why I took up programming. I wanted to be closer to the product. I wanted to touch, feel, and make changes as needed without having to, again, rely on someone else. It sounds cynical, but at the end of the day you can only rely on yourself. Passing off the implementation of your ideas is like a bad game of telephone; you're not sure what you're going to walk away with. As I wrote in my previous article From Business Guy to Programmer, I wanted to be completely immersed in the project and be able to be involved in the entire process from start to completion.
Not only should you learn programming to build your own ideas and because at the end of the day you can only rely on yourself, but implementing your own idea will lead to a better product. It wasn't until I wrote code for my new startup that I realized how much of a better understanding you get. Something doesn't quite work as intended? Change it on the spot.
Whiteboards don't tell the whole story. You're fooling yourself if you think you can lead product from a whiteboard or paper and pencil. They're great for getting your thoughts down and imagining your product, but your developers will implement those ideas line for line, and let's be honest; those ideas are never right the first time around.
You'll be left with a subpar product with missing or overdone functionality, poor user flow, and general disarray than if you were implementing it yourself. Even if you go through multiple rounds of revisions with your developers, there's something about coding in the moment where you'll learn and be able to "feel" how functionality needs to be implemented.
Lastly, having the utmost respect of your team is the straw that broke the camels back for me. It's one of the most important facets to a successful startup and getting your hands dirty in code is what gets you today's ultimate respect. Without a doubt, your team members will respect you far greater if you were the person that not only had the idea, but also developed the first prototype. It doesn't matter if a year later you're not in code day-to-day and you've hired someone better than you to take over lead development, because you've earned your street cred.
Being able to build your own prototype and putting your energy into building rather than finding someone to build for you, will net you greater understanding of your product and the respect from your team going forward. These are all very powerful motivations for why you should learn to code. It's never just to be able to build your own thing — that's simply a byproduct.
What Language To Learn
The last bit I'll touch on is what programming language you should learn. Lots of people are very opinionated on this topic from "you must learn this language" to "it doesn't matter what language you start with." My opinion is that if you're fortunate to have friends that know how to program then you should learn to program in the language they're best in. While you shouldn't run to them whenever you get stuck, it will be helpful to have a friend to lean on during the most difficult times.
Now if you happen to have a friend who knows Ruby on Rails then I'd begin there as I did. The Ruby on Rails community is very helpful and supportive of new programmers. There are plenty of great resources, which I'll list out below, and the programming language is very intuitive compared to other languages I've had limited experience with.
The web development community for the most part has put their weight behind Ruby on Rails and as a new programmer I find it best to follow the masses. The more people learning a language, the more support and resources you'll find at your disposal.
- Michael Hartl's Ruby on Rails Tutorial
- Code School's Rails for Zombies
- Ryan Bates' Rails Casts
- Learn Ruby the Hard Way
A special thanks to Matt Beale and Mike Potter who have been particularly instrumental in my development as a programmer. Two of the most talented and friendliest developers I know. Without these two guys I would have struggled a lot more than I did. There becomes a time when learning to code when you've exhausted all you can learn from tutorials where having someone to guide you is particularly helpful. Also shoutouts to Kyle Bragger, Kate Ray, Max Stoller, Tal Safran, Sarah Lensing and Steve Ellis who all lent me their support during my days learning to program and still do.