I started learning Objective-C about three years ago while I was studying music in Nashville, TN. Some time during high school, I had poked around in C++, but I didn’t understand it. By college, I was already familiar with “C-looking” languages like PHP and JavaScript, so enough of what I wrote in Objective-C worked the way I expected it to. After smashing into many walls, I figured out how to put together a decent iOS app.

I graduated a year later and moved to San Francisco. My first gig was with Snapguide. Questions I had about Objective-C were swiftly answered. The server stack was written in Python, so I had to learn that language. A little while after, I started working at Wantful. I was working on a Ruby on Rails app, so I picked up Ruby. Eventually I became project lead on the Wantful iPad app, so I came back around to Objective-C. We launched an Editor’s Choice app in four months.

I had achieved a goal that would seem to imply legitimacy, but I didn’t understand what &error meant. I didn’t know what a (void **) was. I was a cheater. I glossed over many corners of the Apple docs due to my lack of understanding. I could write wacky decorators in Python and curry up some magic in JavaScript. I was able to get away with a lot of stuff. Then I asked: how?

Computers are machines, not magic.

I had developed a sense of dynamic programming features. But I also knew that computing started with transistors (Binary values! Booleans!). I couldn’t grasp how on Earth 1s and 0s conspired to make languages like Ruby and Python work. I took it for granted.

All I knew was that C was low level. It’s about as low as you can go without going too low. It was the missing piece!

So this January, my New Year’s Resolution was to learn C. I owed it to myself to understand just how the other programming languages worked. Or at least how they could work.

As it turns out, most programming languages are implemented in C. Why? It’s ubiquitous. Every platform out there has a C compiler. So why doesn’t everybody write their cool apps in C? Seriously, I want to tweet from my toaster!

You’ll discover that C is a simple but verbose language. You’ll learn that Hashmaps shouldn’t be taken for granted. You’ll see there’s a lot going on under the hood to give you the Arrays you expect. You’ll realize that Object Orientation is not the only way to architect software. You will find that you can still effectively program without a lot of fancy features, and you’ll gain perspective on why language designers chose to create new ones. Most importantly, you’ll begin to feel every line of code you write. When you internalize these lessons, your approach to programming will completely change.

“Where do I sign up?”

You can start right now. My primary resource was Zed Shaw’s Learn C the Hard Way. I will admit I only actually made it through Exercise 42, as I had become distracted by using what I had learned to build a game engine. Stay focused, try to do a little every day, and you’ll soon be down the path of deeper understanding.

Zed Shaw’s book is free to play, but you should buy it. And no, he’s not giving me kickbacks.