I have been chipping away at Objective-C, Cocoa, CocoaTouch, and MonoTouch for the past few weeks. Using MonoTouch at work has given me a false sense of confidence about my ability to write iPhone applications on the native platform. For a C# developer like myself, working with MonoTouch allows me to continue using a tool and language that I’m familiar with (MonoDevelop is pretty similar to Visual Studio).
That’s all well and good until I try to write an iPhone application in Xcode using Objective-C. Suddenly I’m back in the weeds again, struggling to do things that are second nature when working in C# (ex. working with strings). To combat that horrible feeling of incompetence and ignorance, I have been reading several books about Apple programming. I just finished reading “Learn Objective-C on the Mac” and found it to be very good. In order to understand the motivations behind the Cocoa and CocoaTouch UI frameworks, I am reading “Cocoa Design Patterns” and enjoying it immensely. Last but definitely not least, I recently started focusing specifically on iPhone programming. After evaluating the huge number of iPhone programming books out there, I decided to invest in “iPhone Programming – The Big Nerd Ranch Guide.” It is a very highly rated book, but I’m not far enough into it yet to give my impression.
Obviously I can read as many books as I want, but that won’t make me a competent Apple programmer. The real learning comes from working on apps; debugging in particular. Luckily for me, working on apps is my favorite part!
There is so much to learn that it can be daunting. From a tooling perspective, I need to become familiar with Xcode (the IDE) and Interface Builder (the GUI builder). From a language perspective, I need to learn how to use Objective-C, which entails learning the memory management practices (which is a big topic unto itself!). Let’s not forget that there’s also the UI frameworks: Cocoa (desktop) and CocoaTouch (iPhone/iPad/iPod).
It’s very exciting to have so many cool new things to learn about! I’ll keep you posted…
Hi Josh,
I’m following your blog with interest as I develop apps using various development environments/languages including eclipse/RCP/java, WPF/c# 4.0 and cocoa/objective c.
I think we can agree that Microsoft has lost the platform wars. But as a development platform VS2010/XAML/c# combination is way ahead of the others.
Eclipse is a wonder code editor, but application development becomes bogged down with minor issues that should never happen. I feel java has also fallen behind c# but is still ahead of objective c.
I’m still finding my feet with objective c and the whole mac dev environment but to me it seems its just like C with OO tagged on as an afterthought?
Keep up the good work
Joe
Thanks Joe. Your comment about Obj-C as C with “OO tagged on as an afterthought” is something that occurred to me, too. The jury is still out though…I’m not familiar enough with the language yet to have a solid opinion.
Josh
Hi Josh,
I’ll follow your journey with interest. Long time C++ programmer here, thrown into the C# world for about a month before I then switched over to the iOS world.
The Big Nerd ranch book is good – I sweated through getting my first fairly big app going, reading online blogs, tutorials, examples, etc. It works but now I’m methodically working through the Big Nerd Ranch book and it’s clearing up a lot and filling in huge gaps.
Good luck in your journey…
-Kevin
Thanks Kevin. I know what you mean by “sweating through” the first app. Having to search the Web for things that are second nature in C# is more than a tad painful. 🙂
Josh,
I am just starting the same process. I’m at the man, objective-c code looks weird stage and searching for a book that suits my programming experience but teaches me the basics of objective-c. I’ll check out the books you mentioned here. Any guidance you can provide would be greatly appreciated.
Thanks,
Rob
Rob,
What I have found to be an effective way of learning iOS programming is to first study Objective-C. Once you are familiar with the language, and with Xcode, then start studying CocoaTouch and Interface Builder. This has worked well for me, because I believe that knowing the language and IDE is a necessary first step.
Hope that helps,
Josh
Thanks for the tip. I’ll keep going down the Objective-C route first.