When I first started learning iOS development it was hard. I had stumbling blocks all along the way and good reading materials were hard to find. The issues were so frequent that I started blogging about advanced topics to document what I learned. I fought with the old version of Xcode 3 and the learning curve of Xcode 4. Many things were changing (iOS 3.0, 4.0, 5.0, and 6.0), and the only way to remember how I fixed things was to write it down with pictures.
While my original blog is great for advanced topics it fails to help most beginners. That's why I started http://iPhoneDev.tv to connect and teach artists, designers, entrepreneurs, hobbyists, and tech enthusiasts.
There are a lot more resources today that make learning easier. Stackoverflow.com has more problems and solutions, Apples' World Wide Developer Conference (WWDC) gives free videos about the latest features on iPhone/iPad/iOS/Mac, and the Big Nerd Ranch books have expanded and re-oriented themselves for beginners.
Learning from Other Experiences
I think the most challenging thing I've learned has been how to rock climb, also known as bouldering. At RIT we have a rock climbing gym (Red Barn) and I never liked it until recently.
Indoor bouldering has a set of climbing holds (hands/feet) that are in a "route" or path and marked by colored tape. The goal is to traverse the wall from start to finish to complete the route. Where I found frustration as a beginner was that I couldn't "visualize" how I would solve a path, nor could I complete more than a few steps along the way. I think I spent 2-3 months climbing 1-2 times a week and I didn't see improvement. I didn't even finish a full path for the first two months. So much failure ate away and demoralized me. I started each climbing session knowing that I wasn't going to get much further.
The solution I found was to climb with a beginner, because it allowed me to teach the very few things that I had learned to someone else. Teaching in itself is a learning process that re-enforces what we know. I think I became more aware of how I was holding my body, moving on the wall, and how to identify the mistakes with another beginner. It allowed me to see how I looked on the wall, with someone who wasn't great.
Good climbers show you how to do it right, but bad climbers highlight what you're doing wrong. I think the same thing can be applied to any other field of study.
Find a Beginner Programmer and Connect
A coach is just as important as the rest of the team. When you're working on iPhone app development by yourself it's easy to become frustrated and fail to figure out a bug. What you need is another beginner programmer who you can talk about the problems and teach what you've learned. Together you'll learn more than if you both worked in separate silos.
I think a coach is also good for those times that you hit a wall. As an advanced programmer I've seen a lot of the pitfalls and I've been there before. So I know how to get out, but you won't really learn if I give you all the answers. You'll become dependent on me solving your problems and not you solving your problems. As a coach I teach you good form, how to practice, and how to find the answers.
As you practice and learn to program iPhone apps you need someone, a peer, that can speak the same language with you and not overwhelm your current knowledge level. It's important because they can become a source of motivation and a way to learn more effectively. You can teach them and they can teach you. In the end you'll learn more than you would from just reading a book.
- Find another beginner iPhone programmer or a small group of programmers. (Meetup.com, local iPhone group, or Skillshare group)
- Start reading 1-2 chapters a day of Objective-C Programming: The Big Nerd Ranch Guide.
- Practice as you read about new topics. Keep Xcode open so that you can try and write code.
- Discuss your challenges and how you solved them with another beginner.