I’ve spent the last five years trying to become a great designer. Recently I realized that I wanted to create great, successful software products. To do that I would have to move beyond only design. Great software requires equal parts design and development, but if you want it to be successful you need sales and marketing as well. Meaning I need to learn programming and marketing to complement my design background.
After last weeks post the most common question was “how did you teach yourself programming?” Here is how I am doing it.
Have a project.
Some people can sit down and read a book to learn programming, but I can’t do it. My method is to learn by creating. I always decide on something I want to make (i.e. Fluent) and just start building it. By having an actual project I will be applying every concept as I learn it. If reading a programming book from end-to-end works for you that’s great. You’ll probably be a much better programmer than I ever will be. For everyone else, start by choosing a real project. The best part is I always have something completed to show for my work.
Break everything down to the simplest possible problem.
I didn’t know how to write a flash cards application. So instead I found the simplest problem I could and tried to tackle that. Here are a few examples:
- Animating a card from right to left.
- Filtering out cards by topic using NSPredicate.
- Displaying a modal view.
Those are approachable problems. So then I search for a simple phrase related to the simple problem. Often I phrase it wrong so it takes a couple tries to get the right keywords and a useful result.
How to compare strings in objective-c? A Stack Overflow post almost always holds the answer. My rule is that rather than copy and paste I have to retype the code, then go read a portion of the Apple documentation related to what I am trying to do. These simple tasks allow me to slowly build towards a completed application.
Have smart, patient friends.
Inevitably you will hit a problem that you don’t understand and can’t find the answer to. When you hit a wall you need someone to turn to for help. I have Chris. He is a talented programmer who has taught me a lot in the last year. If you don’t know someone who can help you in this area you can try posting on Stack Overflow. While not as good as having an individual programming mentor, you will almost always get a reliable answer to a well formed question.
Often just phrasing your problem in a different way will help you find the answer. I’ll start asking Chris a question, then by saying it out loud understand it a little better and start talking about possible solutions. Soon I’ve worked out the problem without any input from Chris. He just smiles and says, “Glad I could help.” I’ve watched plenty of other people do the same thing. So if you are stuck try saying the problem out loud or phrasing it in a new way.
The downside.
The downside of using my method is you will lack an understanding of core fundamentals. Because I don’t have a background in computer science I had a very hard time understanding number types in Objective-C (doubles, decimals, floats, NSNumber, etc). Chris was invaluable in teaching me basic lessons like that. If you find yourself getting stuck on basics of the language find an overview book and start working through it.
Be patient with yourself. Learning a new skill is challenging and takes time.
If you enjoyed the article please consider joining the discussion on Hacker News.
Paulo
Great post! I appreciate your blog, thanks for valious content and nice things. Congratulations from brazil!