Too many times I have been asked this question as titled.
Scratching my head, I would utter some book titles or websites last time I came across at some random places. l always wish I had an FAQ to address this inevitable question once for all.
Now you have it!
I’m not saying this is the best answer, but this is the best I’m able to compile based on nearly 4 years of wrestling with Objective-C and Xcode.
Have a right motivation
May not be earning the top salaries as Australian miners do, iOS developers are still in high demand and are paid decent money worldwide. However, if $$$ is the major reason that you started fiddling with square brackets, I’m not sure how far you can sail this voyage.
I started because I simply wanted to get back to coding. I had been in ERP industry and boy hadn’t enterprise software bored me to death? I just wanted a change, making something meaningful to average people. Winning client projects or well-paid jobs wasn’t in my mind by the time, it was just for fun.
Even today, every project I kicked off, I cheered for another opportunity that I could leverage the lessons learned from last project and become better, I felt charged and ambitious. Life is short, you don’t work hard on something that you don’t have faith in.
Think twice before you get started if your only cause is that you heard iOS gigs is great.
Ensure some dedicated time
I was lucky, by the time I started learning iOS development, I wasn’t working. I could get roughly 2 hours a day during night to follow a course. My wife was pregnant meanwhile, I spent day time with her and only practised iOS programming when she was asleep. That was 2 months of slow-paced yet steady learning. Looking back, I always cherish this solitude that gave me no disturbance nor pressure.
Later on in my iOS endeavour, time from time, I tried coaching 5 guys (friends, working mates) on iOS development, they all approached me with a high interest. It didn’t work out so well: out of 5, only 1 guy turned to be somewhat competent to handle small-scale projects. I totally understand why: if you have a 9-to-5 job, your brain is drained and your body is flat after sitting in the office cell all day long, not mentioning commuting and taking care of family chores. You may have 2 hours of free time every night but they are hardly dedicated, neither is your mind.
Not like doing sports, if you practise tennis once a week, you will possibly keep improving in the long run; while learning a programming skill, you read a chapter in a book, practise some exercises and leave, you revisit the topic one week later, and you are kinda back to square one.
I recommend to squeeze one hour or two everyday to follow your book or tutorial, stop before you feel burnout, resume next day, keep the ball rolling, you will be getting there.
Find materials that fit you
Books, video tutorials, screencasts, Apple document, blogs, which one serves you best? Don’t waste your time on something you feel hard to follow, just because it’s popular or some cool dude recommended (remember how I started this blog?). Many speak highly of iTunes U course recordings, personally, I feel they are too long to follow.
Easily distracted as I am, I prefer watching video tutorials over reading books, short clips over movie-length ones. I especially enjoyed following the iOS development courses on Lynda.com, each session is short and concise, you can’t get lost by watching 5 minutes video.
Anyway, it’s just for me. You shall also follow your heart and find your cup of tea.
Don’t get overwhelmed
In the age of Internet information explosion, no one is lack of online resources. The problem is, too many of them!
Tell you what, when I began my iOS journey, my RSS reader was subscribed to dozens of feeds dedicated to iOS/Mac development. Every morning I launched the reader, yay, 100+ unread articles, and they all seemed “important”. Bearing “I don’t know what the heck it talks about, but it might be useful in the future” in mind, I clicked to open each feeds, had a glimpse, and archived them in Evernote. The knowledge is deposited in my “bank”, I thought. I event tag them as ios_CoreData, ios_CoreAnimation, ios_Objc, ios_design, etc (I have an OCD of categorization). After one year or so, I accumulated a good hundred of web clips in my Evernote account, I made a fortune! They all went to the trash bin at a later stage as I realized I would never revisit these “hidden treasure”.
My point it, when you just get started, stay focus on your handpicked course, and ignore the Internet buzz. I know you’re enthusiastic about every nitty-gritty of iOS development and wouldn’t trash a single chance of acquiring another seem-to-be-helpful article/blog/sample, but honestly, either you will learn most of them throughout your projects later or you will never need to know them. Just don’t get drowned.
Work on a real project
I encourage newcomers to start working on a not-so-easy project after grasping the fundamentals of iOS development. “How come I get a project if I’m not good enough?” you may question. Chicken or the egg isn’t really a question to new iOS developers. Just because you can’t land a client project or job it doesn’t mean you can’t get your hands dirty.
Best case scenario is that you come up with some brilliant app ideas (next Flappy Bird!), or even ideas learned from your family and friends. If your life is a bit lack of innovation, that’s okay, try to copycat an app you use a lot and try to make it better. Like tennis, only playing ture games reveals a player’s weakness and indicates what to improve.
Devoting yourself to a full scale project at the earlier stage of the learning curve gives you a sense of the real world and what your life might lead to in the following years (Xcode crash, debug, Stackoverflow, scream, facepalm, rejected app, you name it).
Don’t feel guilty to borrow third-party code/libraries on github to achieve your goal, pro never reinvent the wheel. Just use Cocoapods to manage them like a boss.
One last piece of advice: try to involve the work of calling a web services (or RESTful APIs if you want to sound like those cool kids), as most of app projects do need more or less communication to the backend servers.
Keep the learning ongoing
Being an iOS developer to me is a never ending battle.
To normal person, every year’s WWDC is about demystifying rumors. To iOS developers, annual mid-year WWDC means a hell of a lot to catch up: WWDC sessions (nearly 100 recorded sessions in 2013), new iOS SDK features, and even moderner Objective-C.
Every fall (or spring downunder here), we are ready to be surprised by Apple’s introducing another screen size or another resolution, meaning another heck of job to fix broken UIs.
You are swimming upstream alongside hundred of thousands iOS developers, unless you keep kicking and paddling, you will be falling behind quickly.
I reckon I should stop here before making my points contradictory or confusing. Sorry for abusing the metaphors of swimming and tennis, 2 of my favorite sports, next time I’ll try running.