Editor’s note: A version of this post first appeared on Dave’s blog.
I recently gave myself one month to learn some basic programming skills and build an iOS app from scratch. Starting with zero code experience, would I be able to learn just enough to make a very simple app and submit it to the App Store?
On the plus side, I had plenty of non-technical experience from making apps like Discovr, where I did design, business development, marketing and the usual company stuff.
So. Learn to code in a month? What could possibly go wrong? Hahaha.
Given my complete lack of experience, I set my expectations super low and got started. I realised pretty quickly that I needed to focus on learning how to code, rather than spending too much time trying to come up with a cool idea, and that I didn’t actually need to make something that was mega cool or useful—all I needed to do was get down to making something.
To give myself a chance of reaching the one-month deadline, I put some heavy constraints in place: my app would be iPhone only, iOS 7 only, portrait orientation only, local data only, with a very basic view hierarchy.
I also couldn’t spend too much time messing around with how it looked—I needed every possible minute for learning to code. I didn’t need to make something that looked amazing, or was outstandingly original. It just needed to keep the focus on the content, keep the UI out of the way and hopefully feel OK to use.
For the app icon, I grabbed the Unicode high voltage symbol and stuck it, unmodified, atop a quick background with some shadow. For the layout, I used a Garamond with Helvetica in order to tie into the system fonts, and adopted the standard blur and rounded avatars in keeping with the look and feel of iOS 7.
Was this groundbreaking stuff? Nope. Did it look good? Nope. But it was good enough, and I could get back to my code.
My month basically went like this: Start with an idea for a feature. Realise I had absolutely no idea how to do it. Research how to do it. Get lost in way too much information. Try to build it. Get confused. Try again. Eventually figure it out. Build it and run. Yay, that worked?! Add next feature. Realise that I'd broken my first feature in the process. Crawl into bed. Try again. Give up. Have sudden epiphany. More research. Build and run. Yay, it worked! Repeat.
Basically my entire month was one very long exercise in yak shaving. Every time I tried to do something, I’d realise I first had to learn something else. Welcome to the daily life of every developer, right? This was me for most of the month…
Even after I’d submitted my app for review, I had trouble. I tried the app on a new device, and suddenly realised that I'd accidentally left a massive pink background colour on my UITextView as part of my first run with NSUserDefaults. Whoops. I had to reject the binary and resubmit (and fix a few other things… and add some more stuff… and… ah, just tweak that thing, and...).
Luckily, there are many incredible resources to help you learn iOS development in a variety of ways:
The best books by far are from the Big Nerd Ranch team—they're extremely practical, well written and paced well for beginners. If you want to learn iOS, these are the definitive books. Get these books, and start studying: Objective-C Programming by Aaron Hillegass and Mikey Ward, and iOS Programming by Christian Keur, Aaron Hillegass and Joe Conway.
One of the real advantages of the Big Nerd Ranch books is that they’re written by some of the most experienced iOS developers around. The content is very clear, and you can dive deep into specifics, or get a higher level overview with ease. This is particularly useful if you’re spending a lot of time trying to piece together different ideas and concepts from tutorials on the web. These books tie everything together, providing a solid backbone to give you a comprehensive understanding of how and why things work and fit together. You won’t find this level of knowledge and understanding anywhere else.
Related to the Big Nerd Ranch books are their iOS bootcamps. I’ve not had the chance to attend as I’m based in Australia, but everything I’ve heard about the bootcamps is hugely positive.
If you’re looking for full immersion with some of the best teachers on the planet, then I’d recommend checking out the Big Nerd Ranch courses. I’d definitely love to do the Beginning iOS bootcamp and then work my way up to the Advanced iOS course.
Other Useful Resources
Reference materials: The best reference materials are the Apple developer docs. Accessible directly from within Xcode, they can only be described as frightening in scope and detail. I used these constantly.
Tutorials: There are so many great tutorials about all aspects of Xcode and iOS development. In particular, Ray Wenderlich’s tutorials on using Git in Xcode and debugging really saved me.
Online courses: I looked at a lot of iOS courses online, and found that the best are from Treehouse.
Code: GitHub has an endless supply of Xcode projects to learn from, from code snippets, to CocoaPods, to fully blown massive projects.
Community: Stack Overflow is invaluable as the single best place to find answers to your iOS questions and problems. I spent hours there every day.
Featured by Apple
If you've read this far, you'll be happy to know that I managed to submit a version of the app, called Design Sparks, for review within my deadline and that it is now in the App Store. In fact, it was featured by Apple as one of the Best New Apps in the Australian App Store.
Developing my app was fun. It was hard. And I would wholeheartedly recommend it to everyone who has been thinking about it.
You'll need to invest a lot of time and energy if you want to learn even the basics and see decent results. To those developers who have devoted their lives figuring this stuff out: I am in awe of you.