raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Monday, July 09, 2007
  Ancient Wisdom


I don’t trust any “SDK” made by a company that won’t use it themselves…

This is why I’ve never tried to program for any of the many, many systems Microsoft has tried to foist off on us over the years (Direct-stuff, Active-thing, C-sharp, .Net, Live-whatever)—because they don’t fucking use their own stuff. They write demo apps in them, sure, and tell us that their frameworks are going to be the basis of the next generation of wonderful applications, but in the end Microsoft’s OSes and their Office apps are just a bazillion lines of old C code, and the programmers who got duped into using Microsoft’s new untested frameworks realize that, surprisingly, untested frameworks never work.

— Wil Shipley, iPhone's AJAX SDK: No, thank you.


Wil Shipley is taking Apple to task for their (possibly temporary) advice that developers develop “iPhone Applications” in AJAX. Note the quotes: in the nineties, I would have used my fingers to make that annoying “I’m being sarcastic” gesture, because a Safari application is not an iPhone application. Not that there’s anything wrong with web applications. Except there is something wrong with web applications on a device that willfully refuses to remember your identity.

Sorry, I’m rambling.

The point is, frameworks and libraries and toolkits and programming languages and SDKs are best when they are extracted from actual development projects, rather than manufactured out of whole cloth from the imagination of someone who thinks they know what will work and what will not.

This is no different than what works and doesn’t work for other kinds of software. The whole point of iterative development is to put working software in the hands of users so that they can guide its development and design from their experience, rather than from guesses and intuition. It’s an empirical approach.

(The most glorious example of this principle is a self-hosted programming language: when a language designer “eats her own dogfood” by using the language to build the language, the result is nearly always powerful and elegant. Decades after their invention, programmers still rave about Lisp’s metacircular evaluator and Smalltalk’s UI framework, both of which are written entirely in themselves.)

Now, AJAX in a browser is not exactly a figment of some Apple engineer’s imagination. For a very popular class of application’s, it’s the cat’s pajamas. And if you are building such an application, you probably want to make sure it works well on an iPhone.

But what if you are asking yourself, Self, what tool should I use to make an application for iPhone with the same capabilities and look and feel of Apple’s own applications that ship with iPhone? I think the answer will be, Do as Apple actually does, not as they say.

And likewise, when someone suggests an SDK or a framework or any other tool, and they tell me how gosh-darn wonderful it is, my first question will always be, What are you using it for yourself?

It’s ancient wisdom, reeking of conservatism and cynicism. It doesn’t sound daring and adventurous. But boy, does it work.
 

Comments on “Ancient Wisdom:
This is also a good reason not to use Google Web Toolkit (GWT).
 
I think there are a number of Microsoft SDKs that were used extensively inside of MS - ATL especially and quite a few server apps are written in .NET - that said - agree that developing apps for the iPhone in AJAX is utter bullshit.
 
The quoted guy seems not to do a lot of research.

I know MS Office is based on popular MS framework (go figure which one).

I know other MS products that use Windows Workflow and WCF.

I know Sharepoint is using ASP.NET

I know all Windows app is written on top of Win32 (otherwise what else?)

I don't know about this but I think Live.com is using ASP.NET

http://search.live.com/results.ASPX?q=test&mkt=en-us&FORM=LIVSOP

and don't reply me with an argument such that "oh you can configure IIS to show the URL looks like it's running ASP.NET, but it's not"

At the end of the day, it's quite clear that Apple is not in the business of providing API and frameworks for developers. This far, they only come up with Xcode, Cocoa and WebObjects? I'm not sure if they even use Cocoa for every single app they wrote.
 
Haha he put the words 'only' and 'Cocoa' in the same sentence!

Cocoa is HUGE and being constantly developed. They use it for every '.app' they write, without exception. They even announced this when Cocoa was being introduced, that the entirety of Apple dropped everything Cocoa.

Cocoa is extended and used on the AppleTV, the iPod and now the iPhone.

The 'quoted guy' does more research than you could possibly imagine, perhaps if you read his article? What's that called when you read referenced articles before blathering on about them?...
 
Err... everything BUT Cocoa. Typo :\
 
"They use it for every '.app' they write, without exception."

Except iTunes and the Finder, which are Carbon, not Cocoa.
 
iTunes is Cocoa.

Finder, unfortunately, and famously, is not... but definitely will be in a few months time.
 
This has been our approach on the Jazz project and it has made all the difference. I wrote a short blog on this:

http://tinyurl.com/ypkzwq

The experience with the slow Ajax load time from Zurich to the US made us end up assigning a person to spend half his time working on dynamic Ajax optimization and code loading strategies. But we wouldn't have even recognized it was a problem if we hadn't experienced the pain of a slow WAN connection early.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /