I’m interested in getting your questions because answering them helps me structure the material in my head. And there’s a saying that “what you teach you learn”, because of that.
Devin Snipes, an aspiring young iOS Developer asks:
Hello Dr. Touch,
My name is Devin Snipes, I’m 15 years old and I’m an iPhone Developer. I’ve been following your work for a little less than a year, and I’ve grown to love it. Your work is amazing, and I hope to someday be as good as you are in programming for the iOS platform. I currently have a few iPhone applications on the AppStore, but nothing compared to yours.
I’d like to ask you a few questions that will hopefully give me more insight on your developmental skills and how I can improve on my skill.
Well, “You catch more flies with honey than vinegar”. If somebody asks so nicely I’ll usually try to respond with something useful.
1. How did you become so great at programming for the iPhone?
I’m doing it full time only since last December. And before that I was looking at code on most days for a couple of hours. Do you know the rule of 10,000? It says that if you want to be world-class in any field you have to invest 10,000 hours in total. Before I got into developing for the iPhone I was collecting programming time for many years. So I probably reached 10,000 a while ago. But that’s not strictly Cocoa time. At 10 hours a day it takes you around 3 years to reach 10,000. So I’m probably around 5,000 hours doing iPhone stuff.
That makes me an intermediary iOS Developer with good analytics and good abstraction skills. Not yet a real expert, but (working on) getting there. There are people who are more “expert” than myself, the stars of Cocoa, if you will. Check out how their bylines describe the place that iOS development has taken in their life.
- Matt Legend Gammell (“Instinctive Code”)
- Marcus Zarra (“Cocoa is my Girlfriend”)
- Matt Gallagher (“Cocoa with Love”)
- Aaron Hillegass (“Big Nerd Ranch”)
My trick is to vary the time I can log towards this goal. I’m not only programming, I’m also watching training videos, doing coaching, teaching development courses, troubleshooting in other people’s apps, making encapsulated software components that I’m selling, I have some apps of my own and lots of contract work. The latter in itself is only partially coding because you also have to train your brain in how to put people’s ideas and specifications into code.
If you program hours and hours on end then you also begin to come up with ways how to use your time more effectively. Like for example putting together a set of tools and utility classes that you are using all the time to quickly achieve standard tasks. Take it one level higher and then you are writing software components that can be plugged into your own apps or even other people’s apps. Writing reusable code not only makes your life easier, it also forces you to think through and abstract interfaces such that your components are loosely coupled. That’s the essence of MVC (Model-View-Controller), the heart of Cocoa.
And some other activities that are only peripheral like blogging and podcasting. But I find that as long as you center it on a single topic then all your activities cross-pollinate. That’s why I gave up on Windows support or programming for any other platform than iOS. And I find that by writing about programming it forces me to chew through boring documentation and try out the techniques I’m covering. This META level of Cocoa Coding teaches me just as well as my readers.
Obviously it helps if you can do it full-time, that’s why I detailed this multi-prong strategy in my previous blog article Business as Unusual.
2. Who made the shirt you were wearing in your iPhone 4 unboxing video?
It was given to me last Christmas by my brother-in-law who has a friend who has the tools to make T-Shirts. Do you think I should start a line of Dr. Touch merchandising items? 🙂
3. This might be going a little over-board, but do you mind taking a look at a few of my current iPhone & iPad applications and tell me how I could improve them? I’d really appreciate it if you took the time to look over them and give me your diagnosis on how they can be improved or fixed up.
I’m only judging what I see on the app store and those are just my first gut responses. If you have a minute to look at these apps too then please add your feedback in the comments.
- make this into a hybrid app, drop the price to free and instead add iAds.
- don’t have any screens that cover the entire display and only have 4 buttons
- it looks to me that the chat screen only use half of the available area
- Ramp up the design, now there is next to none, using the gray scroll view background makes the app look dead
Am I Ugly (FREE)
- there is no design, so the hard answer: Yes, you (the app) are ugly
- apart from this it’s ok for a “Hello App Store” app, but to be something that you would want people to enjoy you’d have to make it way more useful.
- there are half-baked attempts at design, but I don’t think you should mix gray round UI elements with standard blue nav bars
- navigation controllers should always have a title for the nav bars to prevent user confusion
- with iOS4 the need for the core functionality (tweet and listen to music simultaneously) is in doubt
By the number of apps alone you are way ahead of me. It took me half a year part time work to get to 4 and I was 34 at that time. You have that number (and the attached experience) at half my age. So I won’t be surprised if you overtake me sooner or later.
You seem to be making good progress since I see you using not just clicked-together standard UI stuff, but you’re also using GameKit, interfacing Twitter API, TwitPi and other advanced techniques. This tells me that you have grown sufficient abstractive reasoning that you can take an API or framework and use it from your code.
Apple says that 60% of the work that flows into an app should be design and your apps are lacking in this regard. So either you should work on your app design skills by trying to paper-prototype apps similar to famous examples like Tapbots. Or you should hire a friend who has “an eye for such things” to help you lay out the UX (User Experience) and UI (User Interface).
Apart from this I can only recommend a daily work out regime. Collect Cocoa hours, 10k or more. Maybe that’s an idea for an app…