<p>I'm a PHP developer, and I use the MVC pattern and object-oriented code. I really want to write applications for the iPhone, but to do that I need to know Cocoa, but to do that I need to know Objective-C 2.0, but to do that I need to know C, and to do that I need to know about compiled languages (versus interpreted). </p>

<p>Where should I begin? 
Do I really need to begin with plain old "C", as Joel would recommend?</p>

<p>Caveat: I like to produce working widgets, not elegant theories.</p>

[{'answer_id': 33699, 'author': 'Sergio Acosta', 'author_id': 2954, 'author_profile': 'https://Stackoverflow.com/users/2954', 'pm_score': 0, 'selected': False, 'text': '<p>I think starting with C would be a smart thing to do. After all, Objective-C is C language with some extensions.</p>\n\n<p>To develop in Cocoa you are required to know well how pointers and memory allocation work (there\'s no garbage collection on the iPhone), plus you will have to use some standard C libraries, <b>because a lot of the frameworks that are used to develop for the iPhone are C libraries</b> not Cocoa libraries. Take for example CoreGraphics, the library you have to use to draw on the screen on the iPhone. That\'s a C framework, meaning that it is not written in Objective-C.</p>\n\n<p>Of course after learning C to a modest level, you could start reading about Objective-C and Cocoa, and in that case I would start with the <a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf" rel="nofollow noreferrer">Objective-C language specification</a> <b>(link to PDF)</b> and the Aaron Hillegas book on Cocoa.</p>\n'}, {'answer_id': 33701, 'author': 'Misha M', 'author_id': 3467, 'author_profile': 'https://Stackoverflow.com/users/3467', 'pm_score': 2, 'selected': False, 'text': '<p>Get <a href="https://rads.stackoverflow.com/amzn/click/com/0321503619" rel="nofollow noreferrer" rel="nofollow noreferrer">Cocoa Programming For Mac OS X</a> by Aaron Hillegass.  This should get you on your way to Cocoa programming.  You can look up C-related programming as things come up.</p>\n\n<p><a href="https://rads.stackoverflow.com/amzn/click/com/0131103628" rel="nofollow noreferrer" rel="nofollow noreferrer">K&amp;R C Programming Language</a> is the definitive reference that is still applicable today to C programming.</p>\n\n<p>Get the <a href="https://rads.stackoverflow.com/amzn/click/com/0321503619" rel="nofollow noreferrer" rel="nofollow noreferrer">Cocoa book</a>, work though it and if you encounter any snags, just ask your C questions here :)</p>\n'}, {'answer_id': 33702, 'author': 'Frank Krueger', 'author_id': 338, 'author_profile': 'https://Stackoverflow.com/users/338', 'pm_score': 1, 'selected': False, 'text': '<p>No need to start with plain C. Start with an excellent book instead: <a href="https://rads.stackoverflow.com/amzn/click/com/0321503619" rel="nofollow noreferrer" rel="nofollow noreferrer">Cocoa Programming for Mac OS X</a>.</p>\n'}, {'answer_id': 33722, 'author': 'dlamblin', 'author_id': 459, 'author_profile': 'https://Stackoverflow.com/users/459', 'pm_score': 2, 'selected': False, 'text': '<p>Who reads books these days? I have the 1st edition, I forgot to read it. Go to the <a href="http://developer.apple.com/iphone/" rel="nofollow noreferrer">iPhone Developer Center</a>. Read examples.</p>\n\n<p>In case you didn\'t read any of that, click the pretty picture.</p>\n\n<p><a href="http://developer.apple.com/iphone/" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/UZsef.png" alt="iPhone SDK"></a></p>\n'}, {'answer_id': 33736, 'author': 'Chris Hanson', 'author_id': 714, 'author_profile': 'https://Stackoverflow.com/users/714', 'pm_score': 4, 'selected': True, 'text': '<p>Yes, you\'re really best off learning C and then Objective-C.  There are some resources that will get you over the C and Objective-C language learning curve:</p>\n\n<ul>\n<li>Uli Kusterer\'s online book <a href="http://www.zathras.de/angelweb/masters-of-the-void.htm" rel="noreferrer">Masters of the Void</a></li>\n<li>Stephen Kochan\'s book <a href="https://rads.stackoverflow.com/amzn/click/com/0672325861" rel="noreferrer" rel="nofollow noreferrer">Programming in Objective-C</a></li>\n</ul>\n\n<p>And there are some resources that will get you over the framework learning curve:</p>\n\n<ul>\n<li>CocoaLab\'s online book <a href="http://www.cocoalab.com/" rel="noreferrer">Become an Xcoder</a></li>\n<li>Aaron Hillegass\' book <a href="https://rads.stackoverflow.com/amzn/click/com/0321503619" rel="noreferrer" rel="nofollow noreferrer">Cocoa Programming for Mac OS X</a></li>\n</ul>\n\n<p>Despite what Jeff might say, learning C is important for professional software developers for just this reason.  It\'s sort of a baseline low-level <em>lingua franca</em> that other innovation happens atop.  The reason Jeff has been able to get away with not learning C is not because you don\'t need to know C, but because he learned Pascal which is in many ways isomorphic to C.  (It has all the same concepts, including pointers and manual memory management.)</p>\n'}, {'answer_id': 68443, 'author': 'eczarny', 'author_id': 7787, 'author_profile': 'https://Stackoverflow.com/users/7787', 'pm_score': 0, 'selected': False, 'text': '<p>The memory management concepts that are (or were, depending on if you like the whole garbage collection thing) central to the Cocoa frameworks can be a little confusing. This is particularly true for those coming over from languages such as PHP, Python, Ruby, or even Java. Knowing C, or C++ for that matter, put you at a great advantage when learning Objective-C and Cocoa.</p>\n'}]
['https://Stackoverflow.com/questions/33696', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/3407/']