Thursday, March 26, 2009

One Year In

It's been just over a year since we started writing Beginning iPhone Development. The time from March, 2008 until we finally shipped the book were extremely busy and trying. For a long time, we didn't know if the book would ever see publication. In fact, in September we were actually having discussions about whether to kill the book because we got unofficial word from some sources inside Apple that the NDA probably wasn't going to drop anytime soon. When the NDA did drop shortly thereafter, it was a huge and very welcome surprise. In fact, it was such a big surprise, that even a some of the people inside Apple were unaware that it was going to happen.

That fact that Apple dropped that NDA basically changed my life. It allowed the book to go forward which, indirectly, allowed me to completely change what I do on a daily basis. Instead of traveling 50 weeks a year doing programming I didn't particularly enjoy using tools I didn't particularly like for clients who often didn't even really know what they wanted, I'm now working from home, using tools I love and believe in for a platform made by the company who sparked my interest in programming oh so long ago.

I've been using and programming Apple products since 1979 or 1980, but in the late nineties my loyalties were starting to waver. Although I still had a Mac at home, I was starting to get exposure to a lot of high-end Enterprise systems, including several variants of Unix as well as some mainframe systems and, of course, Windows NT. I was starting to see that as much as I loved using the Mac OS and though I felt that the Mac OS was still better in many ways from a user's perspective, from a programmer's perspective, the Mac OS was falling behind rapidly, and it was frustrating to me.

Somewhere around maybe 1998 I had another life-changing moment. I read an old NeXT book. It's still available from Apple's web-site as a PDF, though it's been re-branded as an Apple product and deprecated. It was called Object-Oriented Programming and the Objective-C Language. Although I had been programming in object-oriented languages for six or seven years at that point, I don't think I really saw the true value of OO, and often programmed procedurally even in OO languages. That book really consolidated my understanding of the purpose of the object model. It was the most lucid and understandable explanation of object-oriented programming I'd ever seen. I think it still is.

That book stayed with me, and when I got my first glimpse of OS X with Developer Preview 4 (DP4) a year or two later, I became instantly fascinated with Cocoa. The approach it used was fundamentally different than what I knew from C++ and Java. It was certainly different from the Mac Toolbox of old. But I saw almost immediately that this was the "right" way to build a GUI application. For the next several years, most of my free time was spent learning a dying language that could only be used to create programs for an operating system made by company whose demise was being routinely predicted by pundits and analysts. There was very little possibility of making money off of Cocoa for me. But, none of that mattered. I had to learn it. I saw instantly that Cocoa had better and more elegant code than anything I knew how to write, and I didn't like that I was that ignorant of how to write truly good code. I became keenly aware of the difference between code that gets the job done, and code that is beautiful.

I didn't have much faith that the value of Objective-C and Cocoa would ever become widely known or accepted, but it didn't matter. Looking at the Cocoa frameworks was mind-expanding. Seeing the ingenious way NeXT and Apple engineers had solved difficult problems was absolutely fascinating to me, and before long, I could see that I was becoming a better programmer for my time spent with Cocoa. I was able to apply much of what I learned from spending evenings and weekends with Cocoa to my day job even though the languages and tools were different.

I never expected to get where I am now. Some days I wake up and wonder if I'm dreaming. I never expected to be able to get paid to do this stuff and I still can't believe I'm able to feed my family doing something I enjoy this much.


Adrian Kosmaczewski said...

Congratulations!!! You deserve it. Your book is a great achievement and this blog is a constant source of surprises and knowledge. Keep it up!

higgis said...

Great post, Jeff. Thanks for writing the blog and all the work you do in the community. Coming from Windows development, I've been really impressed with the *quality* of advice from experienced devs, and how willing "name" devs are to help newbies. Keep up the great work!

Leon said...

What is the best book to start to learn OO today?

Jeff LaMarche said...


That's a very touch question. Really depends on what your goal is. That PDF I referenced, the first few chapters that talk about conceptual stuff are probably still worth reading even though some of it is outdated.

Grady Booch's earlier works are great. "Best of Booch" is a good read and short.

OO is something you really need to do a lot of before it starts to sink in. Can't think of a magic book that will get you there. Don't even know which ones are good and current right now, I'm sorry to say.

Adrian Kosmaczewski said...

I agree with Jeff. I first learnt OO with Grady Booch's book and I think it's great. There's been a third edition lately with Java (I used 2nd, with C++)
The Head First series has a great one on OO analysis too.

JFMartin said...


I'm right now reading... your book Beginning iPhone Developement that I received a few days ago. I LOVE IT. Well done.

I wonder where I will be myself at the same period next year...

Leon said...

Thank you Jeff and Adrian for your advice!

Jeff LaMarche said...


Thanks much! We're more than thrilled with how things are going so far.

As for where you'll be in a year, there's no telling. There's still a lot of opportunity in the iPhone App Store, even though it's not quite the new frontier it was a year ago.


iPhone SDK Articles said...

Hi Jeff,

I loved this post. I work on C# and SharePoint at my day job and always think about writing code in objective-c. It is so simple, beautiful, and makes solving problems easy.

Your future, I wish the same for me :-)

Will be reading that OO PDF.

Thanks again for all your hard work Jeff.


Deans said...

Congratulations Jeff! It's great to hear about someone doing what they love. The book is fantastic! I'm relatively new to iPhone dev, and I refer to your book every day. I even put up a plug for the book on our blog. Keep up the great work.

Joe said...

I just started reading your blog over the past week as I am eager to learn more about developing for the iPhone.

I wanted to thank you so much for posting the link to the Apple OOP and Objective-C document. I have tried to learn Objective-C and Cocoa for a long time now, but the syntax and concepts never stuck. Reading through this document has made things dramatically clearer to me and also gives me an insight into why Apple chose to do the things they did with Cocoa.

I look forward to reading more on your blog and have already begun working with the code samples from your book, which I plan to pick up shortly.

Thank you.