You can be a wizard or: How I learned to stop worrying and love the code.

In 1989 I sat down at an Apple II E to write my first bit of code in BASIC. It made the screen invert colors, so text appeared black, and the screen was the strange, alien green that early monitors seemed to favor. 20 years later I took a basic JavaScript class in college. That was the most code I had written until recently, and it wasn't due to lack of interest, rather lack of any kind of directed learning. I tried buying books, but you can't ask books questions, and I didn't know anyone who wrote code to ask. Later I tried tutorials on the Internet, but was faced with only getting to see what the author was getting at, rather than any kind of real-life use for the method or function that they were showing off. I'm big on practical application and knowing why you should do/use something as opposed to just learning the how, so my frustration grew to the point where I assumed that I just couldn't "get it" and that I was never meant to code. I was so wrong about so many things and I'm hoping that in the time it takes to read this, I can convince you that you too can write code, and it doesn't have to be a frustrating, byzantine experience.

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.)

 

Resources!

Free

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.

Not Free

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!

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <cpp>, <java>, <php>. The supported tag styles are: <foo>, [foo].
  • Web page addresses and email addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Ready for transformation?