7 ms·
Amid the ranting, he's making a good point. And that is that there is no serious competition for the hard combination of serious good taste, obsession with det
by cpr 17y ago
Amid the ranting, he's making a good point.
And that is that there is no serious competition for the hard combination of serious good taste, obsession with details that seem negligible but ultimately matter a lot, etc., embodied in Apple's recent products.
I know this sounds like raving Apple fanboy stuff, but I do think it's rarely acknowledged explicitly; it's either assumed by those in the know, or ignored by those not.
For example, I would never in a million years want to develop Android software; why? Because it's written in a language I loathe, and the API is workmanlike but completely uninspired (disclaimer: I've never written any code for it). In contrast, the Cocoa Touch APIs are delightful, and MIT-style (vs. New Jersey) at most levels. Perfect? No. Amazingly crafted? Yes.
I claim the secret sauce to their APIs is actually a character at Apple named Ali Ozer who, along with his crew, has maintained a firm hand on the tiller, and learned a huge amount about object-oriented design for interactive systems over the past couple of decades.
iPhone OS is the result of throwing out a lot of the cruft and starting over, but keeping the hard-earned knowledge. (Core Animation being one of the key underlying technologies for iPhone OS that found its way back to the desktop, but only partially due to all the cruft in normal desktop Cocoa.)
And Apple works hard at the silicon-to-UI whole-stack integration and performance tuning, something that other vendors famously haven't been able to do (because they don't control the whole stack), or haven't wanted to do. Microsoft has recently figured this out, according to Ballmer, and intends to do the same.
I could go on, but I'm sure I'll get downmodded to death already. ;-)
- pohl 17y agoThank you for making me Google "mit style versus new jersey style". I had heard of "worse is better", but had not heard those terms: http://en.wikipedia.org/wiki/Worse_is_better http://en.wikipedia.org/wiki/Worse_is_better
- deleted 17y ago[deleted]
- fr0man 17y agoYou loathe Java but you like Objective-C? Madness.
- cpr 17y agoYes, because Obj-C is truly just Smalltalk with C-style control structures. Maybe I'm damaged, because I've used Smalltalk in a previous existence, and loved it. Java is not a dynamic language.
- ajross 17y agoFor what definition of "dynamic language" is that statement true? Both languages do late binding of methods to objects, Java merely happens to smear on a layer of typesafety above it. Frankly, the two languages are semantically all but identical, modulo the ability of Obj-C to fall back to a "bare memory" data model when you want to.
- astrange 17y agoThey certainly don't bind methods to objects at the same time - Obj-C does it when you send the message. You can send and catch messages with no methods attached to them, or that weren't even declared in the first place (at the expense of a compiler warning). Of course there are other differences, but the most important one is just that the class library is much better - UI doesn't rely on inheritance, there's no class named LinkedHashMap (see http://ridiculousfish.com/blog/archives/2005/12/23/array/ http://ridiculousfish.com/blog/archives/2005/12/23/array/), and there _is_ a class named NSMutableArray.
- deleted 17y ago[deleted]
- catch23 17y agoYou can do mixins fairly easily in ObjC, but in Java, you'd essentially have to resort to runtime bytecode rewriting. Take a look at what popular libraries like Hibernate, Spring, AspectJ use under the covers to perform their magic.
- vito 17y agoThe nice thing about Android is you don't have to use Java. Many other languages target the JVM, which is often trivial to convert to Dalvik (it depends on the language). Right now I'm working on an entire app in Duby (a Ruby-like language with static typing and type inference, with no baggage; reaches native Java speed easily), and loving it. All I had to do was change my compile command to dubyc and I was ready to go. JRuby is in the works, and apparently Scala is possible, and I'm sure many others are working on it too. I've never written an iPhone app, and this is my first Android app, but I find the API and the SDK to be perfectly easy to work with; it was very easy to get started and quickly start prototyping. I'd like to know what parts of the Cocoa APIs you consider delightful though, just out of curiosity.
- amock 17y agoWhat makes Cocoa and Cocoa Touch really nice isn't that parts of them are delightful, it's that all of the parts work really well together. They were written to take advantage of Objective-C and the tools were built for using them. Interface builder makes UIs really easy and CoreData makes persistence almost automatic. You should try building an iPhone app and see how it compares.
- orangecat 17y agoYou should try building an iPhone app and see how it compares. I have, and Android wins for me. Cocoa Touch is a decent API (in most cases; what's with NSImage vs CGImage vs CIImage?), but Objective-C is seriously outdated. It usually needs more boilerplate than even Java, and manual memory management, lack of namespaces, and header files are silly in 2010.
- KirinDave 17y agoWell ObjC straddles a very interesting place. It's as low-level as C++ but has high level message passing method dispatch as well. If it seems a little crufty, it's because it's living in a very peculiar place trying to serve a variety of masters. Hopefully 4.0 will start to pave the way for the ObjC2.0 stuff to come to iPhone. They are really big improvements to the language. Also, rule-based syntax translators could give you a ton of stuff as a preprocessing pass to your code. Write something for NSArray literals and you'll be a hero.
- gamble 17y agoApple designs a product knowing it will sell millions of copies, so it makes sense for them to spend the time to get it right. PC manufacturers have greater volume, but no individual product is anywhere near as ubiquitous as a Macbook Pro or iMac. They're stuck in a trap where no single model can sell well enough to justify an Apple level of quality even if they had the design sense to produce one.
- mattparcher 17y agoClose, but Apple's real secret is that they make premium products, with profit margins that allow them to invest in researching the next big thing and spend time doing it right. Dell, HP, Sony, Acer, Toshiba, Lenovo: these guys live and die by razor-thin margins of the "we'll make up for it in volume" strategy. Ultimately I think a (un)healthy share if consumers just don't care about the details of the experience enough to spend more money.
- WildUtah 17y agoAndroid software; why? Because it's written in a language I loathe Okay, you despise Java -- and that's fine -- but you prefer a product that can only be programmed in Objective-C? Schizophrenia much? I've written for both platforms. Cocoa Touch with XCode is certainly nicer than Android but Android's language is slightly better than the choices available for iP[ad|hone]. Either of them would be nicer with Python, Ruby, Lisp, or even JavaScript.
- KirinDave 17y ago> Okay, you despise Java -- and that's fine -- but you prefer a product that can only be programmed in Objective-C? Schizophrenia much? I don't see how holding an opinion would constitute schizophrenia. What's inconsistent about this choice?
- KirinDave 17y ago> I claim the secret sauce to their APIs is actually a character at Apple named Ali Ozer who, along with his crew, has maintained a firm hand on the tiller, and learned a huge amount about object-oriented design for interactive systems over the past couple of decades. I agree with this. One of the things that makes most Apple APIs great is that they are not part of the Taligent legacy that so infects other languages. They keep class hierarchies relatively flat and lean heavily on the relatively inexpensive delegation that ObjC offers. It's very refreshing and feels far more smalltalk-ish than Java-ish.
- dannyr 17y ago"I would never in a million years want to develop Android software; why? Because it's written in a language I loathe, and the API is workmanlike but completely uninspired (disclaimer: I've never written any code for it). " i.e. I'm making a judgement on something I'm ignorant about and never made an effort to know.
- bmalicoat 17y agoI've done Android stuff for a year or so and vastly prefer Cocoa Touch. However the OP is wrong, Android is inspired, they are inspired to use idiotic API names; spinner (rather than picker, chooser, or dropdown), toast, intent, etc.
- nitrogen 17y agoWhat is a picker or chooser? I know exactly what a spinner is: it's named for a spinning number control (like a mechanical odometer with a knob), unless they're using "spinner" to describe something completely different from what a spinner is in desktop UI parlance. My point is that the API decisions are probably based on experience with a different developer culture, in which those words make perfect sense and "picker" and "chooser" are completely vague. Different groups have different terminology.
- bmalicoat 17y agoI agree the odometer-style widget makes sense as a spinner, this [1] doesn't in my opinion. First choice would probably be popup menu or drop down possibly, then picker and chooser. [1] http://www.designerandroid.com/wp-content/uploads/2008/11/dspinner_5.png http://www.designerandroid.com/wp-content/uploads/2008/11/ds...
- nitrogen 17y agoOkay, I stand enlightened. Yeah, popup, drop-down or combobox makes more sense for a radio button popup list.
- 17y ago