Crazed123 wrote:
It occurred to me that we're looking at a dichotomy between two ways of writing software: The Apple Way and The Unix Way.
The Apple Way is about making great software for the end user, even if it means being a Nazi to your developers. The Apple Way told Apple not to pay Valve a measely $1,000,000 to port the Orange Box to OSX, even though it would make OSX far more appealing to gamers.
I think you're confusing the Apple Business Way with the Apple Development Way. The Apple Business Way says that they're too busy pursuing high profit margins with the iPhone to bother trying to break into the PC gaming market in a bigger way. Wait a few years, maybe it will still happen.
The Apple Development Way is something I'm admittedly just getting into myself, but it seems to me to fit Solar's suggestion to make things
easiest. I think it's a sort of middle ground between "bondage" and "discipline":
- GUI app development in C or C++ is discouraged in favour of Objective-C, since the Cocoa APIs (based around the old NextStep frameworks) are implemented in Objective-C.
- Objective-C is a superset of C, so chalk one up for "discipline" over "bondage".... You can still do evil things with pointers if you want.
- Objective-C's OO features are based on Smalltalk. They are way easier to learn quickly and use effectively than the plethora of OO features in C++. Easier to learn IMO means harder to abuse. For example, when designing a class in C++, a freshly-graduated wet-behind-the-ears junior programmer has to decide 1.) Whether it should typically be allocated on the stack or heap, or be flexible so it could be either. 2.) Whether it should be copyable or not. 3.) Whether it should use operator overloading. 4.) Which methods should be virtual, which methods should be const, which arguments to those methods should be const, etc. 5.) Whether to use multiple inheritance, single inheritance with delegation, or something more exotic like template-based mixins or the "curiously-recurring template pattern". You get the idea... I've learned the hard way that most people who haven't been using C++ for at least five to seven years will frequently get many of these decisions wrong for a given set of circumstances.
- The NextStep APIs that Cocoa is based on are almost 18 years old, and from what I've seen, the core APIs haven't changed much in that time. They were way ahead of their time back then, and are still useful, flexible, and easy to use now.
- There is a bit of "bondage" in the way that Xcode forces you into the MVC pattern for GUI development, but IMO this is a good thing.
- Despite all my blather about Cocoa, you can still develop good old C or C++ apps that run at the command-line or work with X-Windows (OS X has a kinda-ok built-in X server), if you really want to.
If you want an interesting take on Cocoa versus another relatively modern set of APIs for application development (.NET), see
this guy's blog. It makes for an interesting read. My take on it is that Apple spends as much time on
API usability as it does on UI usability. I wrote a series of white papers on the application of general usability and human factors principles on API design, but sadly they're the confidential property of a large software company that I cannot name.
I guess you'll have to take my word for it.