A recent article posted on Think Traffic, From App Store Newbie to $35,000+ in Profit, talks about Nathan Barry's experience learning a new programming language (Objective-C) and leveraging that language to build successful applications.
I really enjoyed reading about Nathan's process for taking a language that he didn't know and turning it into several profitable applications. I wanted to take some of the steps he talks about and make them more accessible to someone learning any programming language. While Objective-C is one of the hottest languages to know right now (184,083 registered developers on Sep 3, 2012) it may not be where you want to direct your energy.
Below is my commentary on the process of learning a programming language.
Find the language with that special something.
The first step in learning a new language is to decide what language you're interested in. Sometimes there are events happening that make a language more popular like the launch of a new product , feature or device release. Objective-C experienced an influx of developers just before the launch of the iPhone and the iTunes store.
New product launches are a great time to enter the market because there will be a bubble of traffic and an increase of new customers who are just itching to download new apps. However don't let a lack of new product stop you. There is no reason to wait if you want to learn a new skill.
Google "Getting Started With ___"
It's easy to start learning any programming language. Check out Wikipedia for a history and overview of any programming language and to make sure you can develop what you want to develop with that language. For example if you want to create an app for the Android then you have to learn Java and if you want to work on WordPress websites then you have to learn PHP.
The next step is even easier than picking a language. Once you know what you want to develop, go to Google and type in "Getting started with ___" where blank is your platform or language. I 100% guarantee that someone out there has created a Hello World! tutorial for every language. To prove my point here is Getting Started With Cobol.*
Finally remember that everything is hard the first time you do it. Everything looks complicated if you don't know what you're looking at. This is very fleeting, the new-ness wears of quickly and when it does you will realize its just like any other programming language, just with different syntax.
*Cobol is a language written in 1959 that exists primarily in legacy systems, usually financial or medical institutes, that are to large and cumbersome to replace.
Find a legitimate project and complete it.
Playing around and completing tutorials will only get you so far. If you want to really be sure that you know a language you need to find some sort of project and complete it. I think a quote from the article, From App Store Newbie to $35,000+ in Profit, says it well.
Having true ownership of a project gave me even more drive to learn and test my limited skills. Having an actual project goal to work towards is the best way to learn.
This project doesn't have to be something grand and glorious that you have to sell but it may as well be something that benefits you. I suggest picking a common interview code sample question and to create something that you could hand to a potential employer as proof that you could program in this language if hired.
Here are seven (lucky?) websites that provide challenging, yet reasonable, questions that could be used as great code samples. The websites are: Top Coder, Code Kata, UVa Online Judge, Project Euler, Coding Dojo, and Google Code Jam.
I strongly suggest you take a minute to check these websites out, they will provide great portfolio pieces and wins off of competitive sites such can afford certain bragging rights (always nice to mention in an interview).
Real projects use frameworks and libraries.
After you've completed a test project or two it's time to take a moment to understand what frameworks you may need to know to develop in your language. Most, if not all, languages have extensive libraries and frameworks used to extend the features of the base language.
You dont need to know ALL of the frameworks in your language but it is good to know one really well and at least know the others exist if you need them.
Launch, NOW! Get feedback, make changes and update often.
There are two huge, terrible, application running things that can, and commonly do happen to great software. The first is that the software is never launched. The second is that no one wants it. The best solution to both of these problems is to launch it as soon as possible and then to get feedback, make some changes and update.
Decide what the bare minimum viable product necessary to launch. If you're doing a practice 'code kata' then the features will already be described. Dont add graphics and extra things, just complete the puzzle and launch it. This "launch" could be submitting the app to the iTunes store, posting the solution on your blog or submitting it to a coding contest.
This will get your code in the eyes of someone who cares, ask them for feedback and make updates based on their comments. This will ensure the best code possible and possibly teach you something you didn't know about the language. After you're sure the code is good then go back and beautify with graphics and features.
Rinse and repeat.
Learning new programming languages becomes easier with practice. Learn one language and the next language may take half the time. Once you've learned two languages the third may take on third the time. Unfortunately this doesn't go on infinitely however I do know programmers older and wiser than myself that can read a sample of code and tell you exactly what it's doing even if they've never seen the language. An integer is an integer and a while loop is a while loop in all languages, the structures don't change just the syntax does.
Fresh languages are crucial to keeping your resume fresh. The projects you make while learning the languages can be cleaned up and posted to your resume, or used as code samples when interviewing. A new programming language will help put the spice back in your code life. The new techniques that you learn can be implemented in your other projects. It's all around good wholesome exercise for your brain that can make you smarter and make you richer too.