And build something you'll keep using
I’m sure a lot of my nerdy readers already saw this, but in case you didn’t, Marco Arment gives good advice about how to get started in programming:
The best way to get started is to rethink the question to be more pragmatic:
What do you want to make first?
Be specific. The answer isn’t “iPhone apps” or “websites”. An iPhone app or a website to do what, exactly?If you don’t have a specific idea that you’re motivated to create, you’ll have a very hard time getting started and plowing through the hard parts. And there will certainly be hard parts: you’ll get frustrated, go to Google, find some guidance, bang against it for a while, then finally get it working and experience immense satisfaction for as long as you can go before hitting the next wall of frustration. Fortunately, as you get more experienced, you’ll hit those walls less frequently.
It’s solid advice, and for extra credit I’d add one thing: Build something you’ll keep using. It’s one thing to build a one-off Rails site or iPhone app to prove to yourself that you can do it. It’s another to build something that will become a regular part of your life, or a part of the lives of people you care about.
Why do I say this? Because building it just to prove it that it can be done will only get you, say, 80% of the way there. But only by using it regularly will you get immensely irritated by its flaws. The way a UX element can get in some inconsistent state when you click on different parts of the screen in a particular combination. The way that some Ruby gem you thought was so great last month now really seems to get in your way as your needs change. Etc., etc.
Being personally inconvenienced by these flaws is the best single way to get the motivation to take that software from 80% done to 99% done. (100% done is pretty much impossible, so don’t worry about it.) And in doing so, you will learn an immense amount. If the devil’s in the details, there are fewer crafts that are more devilish than computer programming. Programmers are often motivated by grand ideas. But in software engineering, execution matters as much as ideas, if not more.
So, before you ask somebody to pay you to execute for the product they care about, get some practice executing for something you care about yourself.