You have learned a lot over the past five weeks, grasshopper, and you might even feel a bit overwhelmed at this point. I would like to leave you with some advice and a bunch of resources to keep you on track to become a proficient iOS developer.
Things To Consider
Even though 2007 seems like yesterday, the mobile space, and iOS in particular, has grown at an incredible pace. It is hard to imagine the mobile landscape without the iPhone, iPad, and iPod Touch. As a result of the remarkable growth and popularity of the iOS platform, there is no shortage of books, videos, courses, and blogs to guide you on your quest to become a skilled iOS developer.
The material that we covered in this series should have given you a good understanding of the iOS platform from a developer's perspective. The first piece of advice that I'd like to give you is to continue building iOS applications. Do not wait until you think you know enough to start creating that first real iOS application. You will learn the most by creating small applications and by finding solutions to the problems that you encounter as you go. In the end, programming is all about solving problems. I find myself creating several applications each and every week. This doesn't mean that each application is worthy of publication in the App Store—quite the opposite. I start by isolating a specific, well defined problem that's part of a larger project. I then create a new iOS project that's focused on solving that one problem. When I have found and implemented a solution to the problem, I refine the solution by several steps of refactoring to prepare it for integration in the larger project. At the same time, I have created a reusable component for later use. By focusing on reusability, you are less likely to write spaghetti code and more likely to save yourself time on future projects.
This approach is also great for exploring new frameworks or for trying out a new open source library that you stumbled upon. During this series, we've created a number of iOS projects. With every new project, we learned something new and, along the way, we've become more and more familiar with Xcode. Becoming familiar with your development environment is another key element of iOS development.
My second piece of advice is to avoid copying and pasting code snippets that you find on the web. Unless you understand the snippets you're copying, you won't benefit from it in the long run. Sure, it may temporarily solve a problem that you're struggling with, but by using random snippets of code that you don't understand, you'll build up technical debt. This doesn't mean that you shouldn't include well maintained libraries in your projects, such as AFNetworking or Magical Record. It also doesn't mean that you should know every implementation detail of such libraries. If you face a problem that you can solve yourself by spending one or two hours coding up a solution, then that is time well spent. Software development is not only about speed and delivering results. On a personal level, software development is about becoming better at what you do, programming, and you don't become a better programmer by copying and pasting pieces of code that you don't fully understand. There are no shortcuts to becoming a great programmer.
Before I dive into the list of useful resources, I want to mention that Envato Tuts+ has been around for many years and has built up an impressive collection of high quality tutorials on iOS development. Close to 200 tutorials on Tuts+ are specifically targeted at iOS development, ranging from beginner to advanced topics.
Where To Find Help?
Apple Developer Forums
If you are a registered iOS developer, then you have access to the Apple Developer Forums. Not only are the Apple Developer Forums active and filled with developers who know their stuff, framework and DTS (Developer Technical Support) engineers maintain and monitor the forums, which can sometimes save your day—or save you a day.
Google to the Rescue ... or is it Stack Overflow?
Whenever you find yourself using Google to find an answer to a programming question or a solution to a problem you're having, chances are that Google will point you to Stack Overflow. It's fair to say that Stack Overflow revolutionized software development and the developer community. Stack Overflow is a great place to ask questions, but also to give back to he community by helping others. No matter what language you work with or what platform you develop software for, chances are that Stack Overflow has a vibrant community centered around your interests.
Over the past few years, social coding has become very popular and GitHub is certainly one of the driving forces of this trend. Since you're new to iOS development, you probably won't be able to contribute to (iOS) open source projects just yet. However, nothing stops you from exploring some open source projects and browsing their source code to see how certain things could be done. If you want to speed up your learning by exploring code written by other developers, then it is key to choose a project that is well maintained and under active development.
A good understanding of the C language is important for every Cocoa developer, but you will notice that you can get a long way by only knowing the basics of the C language. As time passes, though, you will encounter pieces of code that you won't fully understand unless you dive deeper into the C language. The definitive guide to learning C is the book written by Brian Kernighan and Dennis Ritchie, The C Programming Language. As you might remember from the article on learning C, Dennis Ritchie was one of the creators of the C language. What better way to learn C from the person who helped creating the language? Another great book for learning C is Learn C on the Mac by Dave Mark.
Although Apple provides a comprehensive guide to the Objective-C programming language (Object-Oriented Programming with Objective-C), I find it not ideal for people who are new to Objective-C and certainly not for people new to C. One of the best books about Objective-C is the book written by Stephen Kochan, Programming in Objective-C. Make sure to pick up the most recent edition, which also discusses Objective-C 2.0.
Also of note, In 2010 Dan Walker wrote a popular series on Tuts+ about learning Objective-C. If you want to expand your knowledge of Objective-C, then I encourage you to take a look at Dan's series.
Apress and O'Reilly Media are two publishers that are known for publishing high quality books on iOS development—and development in general. Two excellent Apress publications are Beginning iOS 7 Development and More iOS 6 Development. Both publications are updated with every new release of iOS.
One of the first books ever written about Cocoa development is Cocoa Programming for Mac OS X. This book is written—and updated—by Aaron Hillegass, the founder of Big Nerd Ranch. Aaron is very well known in the Cocoa community and many developers have learned Cocoa development through his books—including myself.
Apple's World Wide Developer's Conference (WWDC) is the highlight of the year for many Cocoa developers. Every presentation given at WWDC is recorded and available the next day to registered iOS and Mac developers. The collection of videos goes back to WWDC 2010 so you have plenty of material to go through.
The past few years, a number of colleges and universities have started teaching iOS development. Some of these courses are available through Apple's iTunes U program—free of charge. The best known and longest running course is CS193p at Standford University. At Madison Area Technical College, Brad Larson teaches Advanced iPhone Development, which also covers some more advanced topics. Another course on iPhone development is given by Jan Borchers at Aachen University.
It shouldn't surprise you when I tell you that there are hundreds if not thousands of blogs dedicated to iOS development. I have listed a few of my favorite blogs below, but there are plenty more for you to discover.
- Jeff LaMarche's blog is one of the longer running blogs about Cocoa development that I know of. Jeff has written several books on iOS development and really knows his stuff.
- Cocoa with Love is a blog maintained by Matt Gallagher. I wouldn't call Matt's posts light reading by any means. Most of the articles that he writes are in-depth, packed with information, and very well written.
- Cocoa Is My Girlfriend is another source of great, in-depth articles. The writers of Cocoa Is My Girlfriend are Marcus Zarra, Matt Long, Fraser Hess, and Saul Mora (creator of Magical Record).
- Even though Mike Ash's blog isn't the prettiest blog on the web, it is packed with great content. His Friday Q&A articles in particular are a joy to read.
- The blog of Ole Begemann provides fresh and well written articles about iOS development and related topics.
- NSHipster is a younger blog maintained by Mattt Thompson. Mattt currently works at Panic and is one of the creators of AFNetworking. The tagline of NSHipster reads "... a journal of the overlooked bits in Objective-C and Cocoa ...", which summarizes the content on NSHipster very well.
Not too long ago, Dave Verwer started iOS Dev Weekly, a weekly newsletter about iOS development. If you want to receive a carefully curated list of links related to iOS development, then I can highly recommend Dave's newsletter. Did I mention that it's free?
Who To Follow?
Twitter is an excellent medium to stay up to date about iOS and OS X development. I have compiled a short list of people in the twittersphere that you might want to follow.
- Matt Gemmell
- Aaron Hillegass
- Steve Scott
- Matt Gallagher
- Michael Jurewitz
- Dave Mark
- Marco Arment
- Wil Shipley
- Fraser Speirs
- Daniel Jalkut
- Manton Reece
- Mattt Thompson
- Mike Lee
- Craig Hockenberry
Finally, you can follow me on Twitter as well. Don't hesitate to ping me if you have a question or if you just want to say hi.
I hope you've enjoyed this series on iOS development as much as I have enjoyed putting it together. If you have any questions, don't hesitate to leave a comment or ping me on Twitter. Suggestions for future topics can also be left in the comments.