Slashdot Mirror


Cocoa Programming for Mac OS X

Michael Simmons contributed this review of what he claims is the best of the very few books out there for folks who want to learn Cocoa programming. The field is so small, in fact, that he can give a nutshell review along the way of the only other one he's encountered, O'Reilly's Learning Cocoa. Update: 12/13 15:45 GMT by T : Please note: Simmons is thanked in the acknowledgements of Hillegass' book. He explains: "I went to the Big Nerd Ranch, where the author teaches an amazing Cocoa course. While there, I received a pre-release copy of the book (it's the coursebook, actually.) I had found a bunch of errors and typos, and helped Aaron correct those errors and inconsistencies, so I'm guessing he is thanking me for my contributions to quality." Just to clear that up! Cocoa Programming for Mac OS X author Aaron Hillegass pages 416 publisher Addison-Wesley rating 8.5 reviewer Michael Simmons ISBN 0201726831 summary Learn to program OS X applications

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.

You can write Cocoa applications with either Objective-C or Java. If you aren't familiar with Objective-C, it's an extension to the C language that makes it object-oriented. I'm not sure why Apple decided to offer Java support for Cocoa, since almost every source of information on the Internet and all Cocoa resources seem to only refer to Objective-C. Since Java-written Cocoa applications will not run on any platform other than OS X, it was probably done as a marketing "thing" -- Apple is giving Java programmers the ability to program Cocoa applications, opening up the potential for more Cocoa engineers.

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 :)

33 of 300 comments (clear)

  1. other Mac OS X programming resources by Frothy+Walrus · · Score: 3, Insightful

    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"!).

  2. Other (non-book) resources. by hotsauce · · Score: 4, Informative

    Two resources I've found useful in Cocoa programming are stepwise.com and O'Reilly's Mac Devcenter.

  3. Wondering which was first... by rbk · · Score: 3, Insightful

    Apple's Cocoa or cocoa, the computation in commutative algebra system?

    1. Re:Wondering which was first... by RevAaron · · Score: 4, Interesting

      Actually, what came before both of them, I imagine, was Apple's long-lost *other* Cocoa.

      Cocoa was a multimedia authoring environment for kids. Apparently, a pretty interesting one too- a object-oriented IDE for kids, believe it or not. I think Alan Kay had something to do with it while he was still with Apple.

      How I long for the days when Apple would do interesting research! Am I the only one who misses it? (the original) Cocoa, Dylan, MacLisp- a lot of interesting things that they seem to have given up on.

      Actually, it looks like your Cocoa came first- they started calling it that around 1990, it appears.

      Link:
      http://hometown.aol.com/schmucker1/index.html

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
  4. Re:Easy? Powerful? by entrox · · Score: 3, Insightful

    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'.
  5. Apple Developer Connection by Sahib! · · Score: 5, Interesting

    For anyone interested in developing for Apple's platform, the Apple Developer Connection is an indespensable resource. I haven't read the O'Reilly book on Cocoa, but I suspect that, since it was written by Apple, most of the information there can be found, for free, on Apple's site. Apple has provided well-documented APIs, sample code and several tutorials for both Objective-C and Java (despite what the reviewer said, check here). Also, for those who want to develop for Mac OS X, once you have it installed, and the developer kit from Apple (after all, you won't be able to develop without it), you will find that most of the tutorials, API documentation, etc. are on your hard drive. This includes extensive documentation on the changes that Apple made to the BSD development tools (gcc, gdb, ld, ...). In short, my point is that if you are already familiar with programming in C, C++ or Java, you don't need a book to learn Cocoa. The information is all provided for free by Apple.

    --

    I prayed about it, and God said, "Don't do it!" But I thought, "I know better."

  6. Cocoa will replace Ecstasy... by yunfat · · Score: 4, Informative

    Well, maybe not, but as a everyday user of OSX its easy to see how Cocoa apps are the future. They interact better with the OS, they seem less bloated, and they just seem tighter. Cocoa apps like Okito Composer are compelling reasons to move to X... it blows away MS Word.

    --
    "Smokey, this isn't Nam, there are rules." -Walter
  7. java by Fillup · · Score: 4, Informative

    No it's not a "marketing thing." If you know anything about OO and Java programming, it's actually very easy to write a Swing program that uses the Aqua look and feel. And you can place Cocoa-access code in its own objects so that you can remove / change that code later.

    I find that it's actually very good for prototyping complex GUI apps. And the reason there isn't much information about it is that the Java API is simply a name-for-name bridge to the Objective C api. The objects (almost all of them) are provided in Java as bridges to the actual Obj C objects.

    They essentially did the Visual J++ thing but they did it __right__. Their classes are in addition to the Java 2 platform, not a sneaky replacement for it. I personally wish __more__ vendors would provide platform-level access in bridged Java classes.

    --
    "I think there is a world market for, maybe, five computers." __ IBM Chairman, 1943 __
  8. Objective-C Tutorial and Reference by Jon+Abbott · · Score: 5, Informative

    For those interested in learning Objective-C (assuming a working knowledge of C), look no further than
    this PDF.

  9. "There is another..." by desslok · · Score: 3, Informative

    ...and it's Mac OS X Developer's Guide by Jesse Feiler. It's probably best described as "a developer's introduction." It is very broad, covering topics from the Mach kernel to the Interfact Builder. It's at least worth a look.

  10. So... by banky · · Score: 3, Interesting

    Java applications that only run on Windows are *bad*, and Cocoa-Java apps are... well, no one said they are good per se, but you'd think Sun would have to object on the same grounds. 'Cept that it is Apple.

    But you'd think it's Unix, too, so it potentially steals market share...

    --
    ZOMG I WOULD LOVE TO KNOW ABOUT YOUR FEELINGS ON MACINTOSH VERSUS WINDOWS, VI VERSUS EMACS, AND HOW YOU'RE NOT A DORK
    1. Re:So... by TWR · · Score: 3, Insightful
      I can't tell if this is anti-Apple FUD, anti-Sun FUD, or anti-Java FUD.

      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.

  11. Be careful! by BoarderPhreak · · Score: 3, Informative
    Neither this book, nor "Learning Carbon" are for beginners! There's not much in the way of introductory text in either.

    IMO, there's a MUCH better book on Carbon programming out now, which is about 1.75" thick and darned heavy - I think it's called "Carbon Programming" or vice versa... D'ohhh.

    Keep in mind, too - what the difference is between Cocoa and Carbon. The former being Objective C (object oriented and much like C++) and the "real deal" for MacOS X programming, and the latter being based on C. The benefit of the latter being that it will run on either MacOS 9 or X. Then again, there's higher level languages that you can use like RealBasic or Applescript - or hell, Perl. :)

    Be sure to check out Everything Mac for loads of MacOS X goodness.

  12. Python for Cocoa by eAndroid · · Score: 4, Interesting

    There is work being done to let Python be another Cocoa language by enabling python to access Objective-C objects. This is a great idea as it would let Cocoa apps be built and prototyped very fast.

    Even if you don't favor making your releases in Python few people disagee that Python is great for rapid prototyping.

    If you are interested in helping out visit the sourceforge project where work is just beginning on a rewrite to take advantage of Python 2.2's new class/type system.

    --

    I can't spell or type, but that doesn't mean I'm unusually stupid.
  13. Re:Why objective C? by Jeremy+Erwin · · Score: 3, Interesting

    I suppose that "private:" is an obvious extrapolation of "case:" as well. Objective C++ doesn't extend the language as much as C++.

    One of the big problems with writing GUIs in C++ is that the type system gets in the way. The kludges neccessary to support a GUI system on C++ are infamous. Most systems resort to macros. GTK-- uses templates. QT uses a preprocessor and language extensions.

  14. Re:The Joy of Objective-C? by Phroggy · · Score: 3

    Well, I understand they've already added Objective C++. I wouldn't be surprised if they added more in the future.

    --
    $x='S24;r)>63/* h@<5+oZ)32"5cz';$me='phroggy'x$];
    $x=~y+ -xz+\0-Tx+;print$_^chop$me for split'',$x;
  15. Idiots keep attacking Objective C 's syntax by lordpixel · · Score: 5, Insightful

    There are tons of posts here saying Objective C has an ugly syntax.

    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 ;), but these people are too ignorant or blinkered to realise this.

    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 .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.

    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

  16. Re:Why objective C? by bnenning · · Score: 3, Informative
    And no I've not coded in Obj-C


    Then your opinion is worth much less than those of us who have. Objective-C is more flexible, powerful, and easy to use than C++. Cocoa could not be done in C++ because it lacks the dynamic runtime of Objective-C.

    --
    How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
  17. Objective-C - Apple give away whole free book by lordpixel · · Score: 5, Informative

    If you want to know more about objective c, or to prepare before reading the books above, or to gain more depth of understanding of the language if the chapter or so spent in the above books doesn't explain enough, then look no further than this:

    Object Oriented Programing and the Objective C language. Originally a Next Step book, now available free (HTML/PDF) at Apple.com or thru print on demand at Fatbrain.

    --

    Lord Pixel - The cat who walks through walls
    A little bigger on the inside than out

  18. Re:Why objective C? by RevAaron · · Score: 3, Interesting

    Objective-C adds very little actual syntax to C, whereas C++ adds a whole bunch. C++ is the kludge to end all kludges, Objective-C does is far better. Have you ever done a project in Objective-C, or are you just another slashkiddie talking out his ass?

    --

    Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
  19. Re:Why objective C? by bnenning · · Score: 5, Insightful
    Bottom line is that there is no rational reason to use Objective-C. Clearly this is a case of Not Invented Here on Apple's part.


    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.
  20. Re:The Joy of Objective-C? by RevAaron · · Score: 5, Insightful

    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
  21. Re:Why objective C? by blamanj · · Score: 3, Informative

    Bottom line is that there is no rational reason to use Objective-C. Clearly this is a case of Not Invented Here on Apple's part.

    I'm not a particular fan of either language (C++ or Objective-C), but the NIH accusation is simply false.

    Objective-C was invented by Brad Cox in the mid- or early- 80s, and was intended to bring Smalltalk-style capabilities to C. It was later adopted by Next. Since they now have tons of legacy code in Objective-C, they have a strong rationale to continue supporting it.

  22. GNUstep by Ed+Avis · · Score: 3, Interesting

    How much of this is applicable to GNUstep or NeXTStep? Any of it?

    --
    -- Ed Avis ed@membled.com
    1. Re:GNUstep by sellout · · Score: 4, Informative

      As far as I've been able to suss out (I haven't had a chance to play on OS X yet, but I have looked at a bunch of the developer docs), Cocoa is pretty much a relabeling of the NeXTStep API. I imagine that any code you write for Cocoa will compile fairly easily under GNUStep. In fact, the GNUStep guys are working to add a Java API (in addition to the extant Obj-C API) to match the one that Apple added for OS X.

      --
      "Whatever can go wrong, will." --Finagle's Law
  23. You see it coming, don't you? by still+cynical · · Score: 4, Troll

    First we had Java Beans, now Cocoa Puffs?

    --
    Ignorance is the root of all evil.
  24. Re:Where are the compilers? by 90XDoubleSide · · Score: 4, Informative

    Or you can sign up for a free web ADC membership and d/l the developer tools for free, although they are sometimes posted a few weeks after they are available on CD.

    --
    "Reality is just a convenient measure of complexity" -Alvy Ray Smith
  25. Re:Why objective C? by melatonin · · Score: 5, Informative
    Objective-C is a real Object Oriented Language. To quote Alan Kay, "I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." Objective-C is the closest thing to Smalltalk in compiled form.

    C is a very nice, compact, clean language. People have historically abused it and produced ugly code, but for a well disciplined programmer, C's a dream. Except that it's not Object Oriented.

    C++ was designed by committee. Its most fundamental spec is that it is insanely strongly typed. Templates are a hack to bring dynamic programming to a strongly typed environment. Exceptions are a hack to provide messaging in an environment that doesn't allow object A to talk to object B without knowing what the type of B is.

    Objects that communicate with each other is the most fundamental thing in object oriented programming. You can't drop foreign objects into an OOP system when that system needs to know the exact type of those objects- prepare to start editing code. Great code re-use. C++ does NOT offer code re-use anymore than C does.

    You like Qt's slots mechanism? They're a hack to give C++ something that every other OO language (inc. java, but not easily) can do naturally, make two objects talk to each other without knowing their type!

    Objective-C is a dynamically typed object oriented programming language, which is a much better setup for OO programming. There's only one core syntatic addition to C, and that's to support OO programming. Not the billion-and-one keywords and obtuse syntaxes that C++ is full of (just how do you overload that operator again?). The syntax you describe is the best part. Compare this code,

    object->runProcess(processType, duration);

    [object runProcess:processType untilDate:time];

    Not the greatest example, but the point is that you focus on the messages that the objects are sending to each other (which are very descriptive in Obj-C), not the types of the objects (which in many cases in OO programming, is irrelevant, unlike procedural programming). Compiler warnings of 'unrecognized selector' (unrecognized method) are more valuable than unknown type.

    The sad thing is, I didn't think there was much wrong with C++ until I started using Objective-C several years ago. I just thought, that's the way OO programming is. Take a stab at smalltalk (www.squeak.org), and you'll see just how different things can be.

    --
    Moderators should have to take a reading comprehension test.
  26. This is still true, sort of by epepke · · Score: 3, Informative

    the mac api did have a c binding but you had to specify a pascal binding to all your functions

    To the extent that this is sort of true, it is still true. Pascal has a different stack convention from the one in C. The convention that Pascal uses was shared by most other languages at the time, but C originated as a system language. C is organized such that functions like printf could take a variable number of parameters using a kludge involving pointing directly to the stack.

    However, C and C++ compilers for the Mac all accept the "pascal" keyword, which is included in all the header files for the API. Besides that, you can ignore it, except in the special case where you need to pass a pointer to the API for a callback function. Then you need to declare your function as pascal, too. You have never had to declare all your functions pascal.

    Also, the majority of the API calls are not bindings in the strict sense of the word. They use compiler extensions to produce inline traps in the code.

  27. What about Apple's other Cocoa? by Blue+Neon+Head · · Score: 3, Interesting

    This is slightly offtopic, but Apple had another project called Cocoa which was supposed to be a visual programming language for kids to use. Anyone know about what happened to it?

    1. Re:What about Apple's other Cocoa? by krmt · · Score: 3, Insightful

      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."

  28. Re:Why objective C? by stripes · · Score: 3, Informative
    There's only one core syntatic addition to C

    Er, sort of. There is one new "call syntax", which includes new syntax for unordered arguments as well as calling through an object. There is one new preprocessor macro to replace (or at least augment) #include. There is a whole new declaration syntax for objects as well. That is more like three things. And it may be as many as eight.

    Now that doesn't compare to C++ which is described in less detail by a book 5 times as thick as K&R C, but it is a little more then one change.

    (and having used both, I miss some of the C++ stuff, but not as much as I'll never mind is gone)

  29. Re:NeXT Step was 500% better than this new Crap by TellarHK · · Score: 4, Insightful

    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?