Cocoa Programming for Mac OS X
Intro to Cocoa
If you're interested in programming for Mac OS X, you've
definitely heard of Cocoa by now. Cocoa is the name of the library of
frameworks that gives you the ability to write advanced applications with ease. The Cocoa frameworks enable you to perform tasks that used to take a decent amount of code and implement it in a very straightforward manner. The hardest thing about learning Cocoa is that because it's so simple, it takes some getting used to.
Until today, there was only one book if you wanted to learn Cocoa. That book is Learning Cocoa , which is published by O'Reilly and written by Apple Computer, Inc. The new kid on the block is Cocoa Programming for OS X, which is published by Addison-Wesley and written by Aaron Hillegass of the Big Nerd Ranch. With two books out, Cocoa programmers now have an actual choice of which book to buy. Which brings us to the point of this review -- which book is better?
Is it really O'Reilly?
Since Learning Cocoa was out first, I'll start with my
analysis of it first. When I heard that O'Reilly was going to start publishing
OS X programming books, I was stoked. O'Reilly books have historically been amazing -- very complete and straightforward sources that any programmer would be proud to have in his or her arsenal of knowledge. Unfortunately, Learning Cocoa falls short of the O'Reilly tradition, and makes me wonder if O'Reilly actually supervised the printing of this book.
There are some good points about the book. It was the first and only Cocoa book, so when I got my copy back in May, I was looking forward to learning the language. It does provide some good examples on how to write Cocoa applications, which allows one to dive straight into Cocoa programming. The introduction to Cocoa is really good -- it gives a very in-depth description of Object-Oriented and Cocoa program design, which I really like. Additionally, it gives a very good background to the concepts and techniques of using Cocoa.
However, there is a real problem with this book. This book reads more like it was meant to be an internal reference at Apple, rather than a book for the beginner. Another problem is that the layout and order of the content is confusing. Unlike past O'Reilly books and other quality programming books, it seems like this time they took a bunch of internal technical documents on Cocoa, and sent them to the binding machines without further editing. That the book credits "Apple Computer, Inc." as the author provides good evidence for my theory.
The heart of the problem is that the reader has to really dig and explore through this book to find that info that he or she wants. When learning a new language or programming concept, a book should be easy to follow and it should allow the reader to focus on learning the actual concepts, and not having to figure out the flow of the book.
Aaron hits a home run
The "flow" statement is a perfect segue into my analysis of
Cocoa Programming For Mac OS X. Right away, I could tell that I was going to like this book. The author, Aaron Hillegass, wrote this book like he is a friend
speaking directly to the reader -- he takes you through each concept like he is right there with you. This book teaches you Cocoa by specifically having you write applications, and in each new chapter, you add new features. As you add each new feature, you'll learn an important Cocoa concept.
O'Reilly's book also has the reader write applications and add features, one by one, but it does so in a very sporadic way. I was never really sure what the purpose of adding a certain method was, whereas with Aaron's book, each chapter is focused on an ordered and very specific concept, making it very clear what I was about to learn, and why.
Another part of this book that I really appreciate is the chapter on Objective-C. In just one chapter, I understood Objective-C. You must already know C and at least one object-oriented language (like C++ or Java,) but after reading this chapter, you will be able to write Cocoa applications in Objective-C.
This book comes with an online counterpart, powered by Techstra. Techstra is an online engine that allows you to enter any page of the book and get "extras." The extras include examples not in the book, solutions, errata, and even input from readers. It's very cool and very helpful.
A final and very strong point of Aaron's book is that it reflects the latest update of the Mac OS X development tools, Project Builder and Interface Builder. Apple just updated the development tools to version 10.1, substantially changing the UI and functionality, and the latest version is reflected in Aaron's book.
Conclusion
It's clear to see which book I'm giving the nod to. I know
it appears like I'm being biased towards Cocoa Programming For OS X, but if can get to your local bookstore and actually compare the two books side by
side, you'll see why I'm so enthusiastic about Aaron's book.
I think having both books is a good choice, as the O'Reilly book does offer very in-depth information, which is useful once you learn Cocoa using Aaron's book. If O'Reilly changed the title to After Learning Cocoa, I think my perception of the book would be different.
Cocoa allows programmers to write powerful applications in a very short amount of time. I am amazed at the power and simplicity of the Cocoa frameworks, and can't wait to see what myself and other programmers end up creating in the future. I'm sure other books will come out in the future, but for now all we have is two. The one I'd recommend is Cocoa Programming for Mac OS X, but you already knew that. :)
You can purchase this book at Fatbrain. Want to see your own review here? Read the book review guidelines first :)
the NeXT Programmer's Manual (by Simson Garfinkel, i believe) is a very useful Mac OS X programming resource (although it doesn't help with Cocoa). the OS X programming environment is substantially the same as the NeXTSTEP/OPENSTEP environment. they're both based in Objective C, and even many of the windowing calls are the same (most of whose names still begin with "NS" for "NeXTSTEP"!).
Apple's Cocoa or cocoa, the computation in commutative algebra system?
And why exactly would you want so set the mouse position? I don't want any program to control my cursor, because it can get VERY confusing and annoying. Playing with the input device of the user is a major UI sin if you ask me.
I'd say thats the reason, why Apple didn't include such functionality into the API.
-- The plural of 'anecdote' is not 'data'.
There are tons of posts here saying Objective C has an ugly syntax.
;), but these people are too ignorant or blinkered to realise this.
.NET runtime or at least the Base Class Libraries. C is limited without sdtlib, C++ needs the STL or on MS platforms (shudder) MFC to get the full benefits.
What they mean is it doesn't look like C and C++ and Java.
Of course, how it looks has no bearing on how useful a language it is (heh, think Perl
Who cares what the syntax for calling a function is? So long as its not 3 pages of code its irrelevant.
Do we see any insightful comparison of the truly powerful language features from these people? Do we see discussions of how C, C#, C++, Java and Obvjective-C's approach to types and bindings work? How they support dynamic behaviour?
eg, I'm prepared to state that Objective-C makes generic types unnecessary, whereas C++ relies on them and Java is introducing them (slated for JDK 1.5). This is a good thing in C++, will be a good thing in Java, and I expect to see them in C# one day, because of commonality between how these languages are defined. Objective-C doesn't need them, it has another solution, more akin to Smalltalk.
We don't see this sort of comment (shallow though my example is) from most of the posters here because frankly all that they're experienced enough to comment on _is_ the syntax.
Even all that said - the features of the language pale into insignificance next to the quality of the class library. Java is nothing without the java.* and javax.* classes, C# is useless without the
This is a review of a book about Cocoa, not Objective-C. The class library, not the language. The class library will dominate any concern over the language used to program it. Learning a language takes days (or weeks if its something completely new to you like your first declarative functional or logical language). Learning a class library can take months or years (depending on the size).
Do yourself a favour and learn some more languages. Learn about languages. Use real class libraries. Then open your big mouth!
Lord Pixel - The cat who walks through walls
A little bigger on the inside than out
You have no idea what you are talking about. Cocoa could not be done in C++. (Yes, Turing equivalence, I'm talking in practical terms here.) Cocoa depends on a dynamic runtime for much of its power, which C++ does not have. Simple example: given the name of a class in a string at runtime, instantiate an object of that class. One line in ObjC, not possible in C++. Another example: given an arbitrary object and the name of a method, determine whether the object has a method of that name, and if so call it. Trivial in ObjC, not in C++. These dynamic capabilities are used throughout Cocoa, and that is why a dynamic language such as ObjC or Java is required to use it.
How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
Apple's GCC support ObjC++, meaning you can mix Objective-C and C++ code in the same application. However, you cannot call/instantiate Objective-C classes, objects, and methods from C++, just have both languages in the same sources.
I for one am glad Apple stuck with ObjC. It's good to see that at least one company has the balls to choose what is good rather than what is popular. I was scared for a little while- Apple made WO5 Java only, and I'm glad they didn't pull that on Mac OS X as well.
As far as other languages, you can program OS X in a bunch of them. Quite a few languages have Carbon bindings, and there's no reason you couldn't write a binding for you favorite language- Carbon is just C. If you're already using another language, you don't really need a binding to Cocoa, rather than Carbon.
Python, and F-Script both have Cocoa bridges.
Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
I much as I dislike community-bashing, I have to agree with you on this one. The final exam for my programming languages class in in two hours and this course definitely opened my eyes to the irrelevance of syntax.
I only knew C/C++ before taking the class. At first glance, languages like ML, lisp, and Prolog seemed ugly and stupid. Then I made a fully functioned binary search tree in 32 lines of ML code (including comments). Or how about a program that does symbolic derivation and integration in 50 lines of Prolog. The syntax didn't matter. I just adapted my programming style and got some rather impressive results.
Syntax doesn't matter when it comes to the power of a language. Just because Japanese has a subject-object-verb sentence structure and complicated verb conjugations doesn't mean it can't express the same ideas English does. After some practice the grammar and conjugations come natural. Learning programming syntax happens the same way.
Okay, I'm rambling and should be studying for my final.
I'm not entirely sure, but I was pretty involved in it up to a point. I think they stopped developing it, but I think it was done out of house, so those guys kept working on it. That's the last I heard of it, and I'm betting it's dead and buried now.
It's pretty unfortunate too, it was a great way to write simple little apps. I wrote a whole Mendelian genetics breeding simulation (which I still have somewhere), and I have a couple of books that have pictures and descriptions from tons of little programs people wrote. It wasn't meant for serious work, but could make some nifty little demos very easily. Great way to get kids programming. I've thought repeatedly about doing a free version for linux, but it's a lot more work than I have time for. Still, it'd be a very worthy project.
"I may not have morals, but I have standards."
The fact is that Sun had no problems with MS making it easier to tie Java apps to Windows via J/Direct.
What they objected to was MS leaving out bits of functionality by obeying the letter of the spec and not the spirit (RMI support, for example, required accessing an FTP server at MS that would change from time to time).
Apple has been providing ways to bridge Mac OS calls and Java for about 4 years. Sun has never objected, because Apple also implements the Java spec to aching accuracy. They just add extra stuff on top of it.
-jon
Remember Amalek.
You know, if you spent a little less time trying to troll and a little more time fashioning a rational post together, you might have been able to go someplace with this. But I'll take a few of your more coherent complaints and answer them, just because.
First up, let me cover a few of your 'quickie' style complaints. You talk about how Apple screwed up 'Carbon 1.0', then never shipped it. Isn't this a good thing? Would you rather they release something worse than Windows 95?
Second, you talk an awful lot about speed issues with OSX and Cocoa. I suppose you haven't used 10.1. OSX 10.1 is amazing. Coupled with Office v.X (I'm a student, need Office compatibility or I don't pass my classes) OSX 10.1 is just stunning in speed, stability, and functionality. Granted, OSX may seem a bit bloated on the surface, but I decided after ten years of using Wintel that I'd trade bloat for stability, a choice Microsoft never offered.
Was NeXTStep awesome? Sure, seemed like it was to me anyhow. But back then, you didn't have the newer requirements of being out-of-the-box simple, and supporting so many hundreds of standards to make everything run as transparently as possible. Back in the days of NeXT, you had a NeXT if you were a developer, not an end user. Keep in mind, as a lot of people fail to do, that Apple is a company geared toward the consumer market, not simply the developer market.
Are there flaws? Yes. Are most of the flaws you pointed out accurate representations of the issues facing the Apple userbase? Hell no.
In November, I bought my first current Mac after only having an ancient '030 simply to say I had one. When I was younger, I felt that Apple had great hardware, but a lousy OS. Now, after X.1, I'm convinced that Apple has a far superior consumer grade OS than anyone else with market share. And simply by it's nature, it's also the best OS out there for developers. After all, you didn't have to shell out $2500 for a copy of the development tools, did you?
My own pointless vanity vintage computing page