You can be a wizard or: How I learned to stop worrying and love the code.
When I was first asked if I wanted to learn Objective-C for upcoming iOS projects at Metal Toad, I jumped at the opportunity. I used to look at a good programmer as basically being a wizard, because only a wizard could write down what appeared to be arcane gibberish and have it create something magical on a screen, and who doesn't want to be a wizard? I figured it couldn't be that hard, since I had done a fair amount of scripting in the game industry as a Level designer, and Level designers are generally responsible for all scripted events in the levels they are creating. But this is what the scripting I had been doing looked like:
Which doesn't look a thing like code! For the curious, this is Unreal Kismet, the Unreal Engine's scripting platform, a visual editor designed for artists who think code is scary. And while I can literally make magic happen in Kismet, it took a lot of practice to get there, and I think the practice that we put into the endeavors that we wish to be competent at is easily forgotten later when we are tackling something new. What I've been doing to ease my own frustration of learning Objective-C is to remember the frustration that I experienced learning any of the software that I used in the game industry. Autodesk Maya took me several years of practice before I was a competent 3D artist, I used to HATE Photoshop when I was first learning it, but now both of those pieces of software are warm, happy, and familiar places to me, and I'm certain I'll be saying the same thing about writing code a few years from now. Preferably sooner, because I am nothing if not impatient to learn cool, new things.
And for the record, this is what code looks like to me now:
So here are some things I had to learn the hard way in the hopes that you won't have to:
- Ask questions! I find that for me at least, I sometimes have difficulty asking questions or asking for help when I need it. Don't be me. Ask for help, it will aid your understanding far better than beating your head against a wall will, and hurt significantly less.
- Make mistakes: this one should be self explanatory, because as humans we learn through trial and error. Spending several hours writing code only to have it not work isn't a waste of time. Learning to fix your broken code is one of the most important things to becoming a better programmer.
- Create something new: I have followed more tutorials on writing Objective-C than I knew existed, and while some of it was helpful, nothing was more helpful than having an actual project to work on. If you are excited about the thing you want to make, it will help not only your understanding of the language you are trying to learn, but writing code this way has turned my frustration into a fun problem to solve instead of an insurmountable road block.
- Follow the tutorials anyway: I initially approached tutorials as a way to learn to write code, and what I've found is they are more about learning how to think about code. If you follow a tutoral from beginning to end and you can't state what each part of the code does, do a quick search, or ask someone! Usually the authors of most blog/tutorial sites I've seen are more than happy to answer questions you might have.
- Find as many different resources as possible: I'm actually going to help with this one, and the end of the post will be links to some of the things I've found the most helpful. Like most things in life, there is rarely only one right answer to any problem. The key is to have enough resources that you have many examples of "right" ways to write your code so you can pick (or create!) the best solution for what you are trying to accomplish.
- But what I think is the most important thing to keep in mind is this: Make it fun for you. You will learn so much more and retain more of what you learned if you can stop being afraid and learn to love the code. And it is magic, just not the kind that lets you toss fireballs and lightning bolts at people who cut you off in traffic. (which is probably a good thing, I would abuse that kind of magic a little too often.)
https://developer.apple.com/ - Apple's developer site with documentation and other resources for Objective-C (now with 100% more swift!)
Apple's developer documentation - this is built into Xcode (free! but mac only.) as well as being on Apple's developer site.
http://www.raywenderlich.com/ - this is a great site full of many tutorials/projects for the budding iOS developer. Best part is: most of them are games!
http://www.objc.io/ - a great site for higher level Objective-C subjects, not too great for starting out, but seeing these articles while learning about the subject covered is immensely helpful to me.
http://nshipster.com/ - similar to objc.io in that it is mostly higher level topics, still a really great read for anyone interested in writing software for iOS or Mac OSX.
https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550 - iTunes University - you may not know it, but iTunes has more college courses available from the comfort of your living room that I knew possible. I highly recommend the Stanford University courses.
http://www.pluralsight.com/ - Plural Sight is a great resource that will run you about $30/month. It has videos covering languages I didn't know existed. (I've never seen an F# outside of music before now!)
http://www.lynda.com/ - I can't say enough good things about lynda.com's tutorials/video classes. They are well constructed and executed, and at $25/month there's no reason not too. (plus there are videos for many things other than coding as well. Let your ADD go crazy!