About four years ago I got involved with perhaps one of the most exciting technologies to hit the web… ever: Cappuccino is a desktop web framework for creating amazing desktop like experiences in the browser. Cappuccino, created entirely by volunteers and backed by a three person startup rivaled great technologies like GWT and Sproutcore, both of which were/are backed by large companies (Google and Apple, respectively) For the first time, we were pushing the boundaries of what the web could do. Every single demo always ended with people saying “wow” or “that’s amazing”.
As you might imagine, Cappuccino is a pretty ambitious project and after about 5 years we’ve made some incredible strides; bringing the power of Cocoa to web developers. So why isn’t everyone using Cappuccino? A few years ago a trend began towards “micro JS”. The idea being, we should be using tiny little libraries for everything and hope they work together; even jQuery is too big to be considered “micro”. This trend really favors front end web developers, who tend to not have a software engineering background. There is very little overhead in learning a “micro” library that only has two methods… contrast that to the thousands of methods and dozens of classes in all of Cappuccino.
Shortly after this trend began, Cappuccino’s biggest competitor, SproutCore, jumped ship and started working on project Amber, a competitor to backbone.js. Through a series of unexciting events project Amber exists today as Ember.js.
Ember is very close to the “micro” side of things, but at a “whopping” 49KB (
less than a second download on a dial-up internet connection)it’s still far too big for many. Yet we conveniently forget that loading just a few images will quickly surpass that 49K of code. The hilarious obsession with file size is the start of my frustrations with the web community. The community has tossed out everything we’ve learned from the last 30 years of building applications in favor of being able to put something together quickly with complete disregard for maintainability or extendability. Now, people compare Backbone to Cappuccino, or Ember to Rails. Cappuccino, Backbone, and Rails all serve completely different purposes, and saying you don’t need one because you have another is just asinine. Nevertheless, next week we’ll see another blog post somewhere talking about why client side MVC is terrible (or great).
Even though Ember is a small library (compared to Cappuccino, GWT, and Spourtcore) people still complain about the learning curve. One particular comment caught my attention:
If it’s going to take me at least a day or two before I begin to understand, how long is it going to take the rest of my team?
This reaction to Ember just baffles me. Your day job is to build a piece of web software and you can’t take a few days to learn the ins and outs? Presumably you’re in a large team because this project is important and will take some time to complete. Nevertheless, I’ve seen this reaction many times in the web culture. This mentality is pretty rare in the world of native development though. Almost every decent developer I know has no problem spending a weekend learning some new and cool tool, but sadly, this spirit seems to be absent from the web culture.
As if throwing out battle hardened application design paradigms weren’t enough, these new web technologies now need to re-solve problems Cappuccino solved 4 years ago. Modules: after 3 years of bickering back and forth we still aren’t any happier about module loading on the web; Cappuccino made this a language feature from the very beginning. What about widgets? Did you see the neat little alert/button/widget set on Hacker News the other day? Don’t worry, you’ll see another tomorrow, if you missed it. jQuery UI existed long before Cappuccino, and it gave you some nice little controls to add to your website. Then Cappuccino comes along and provides the best UI layer the web had ever seen, it blew everyone away… because we didn’t cut corners. We spend time implementing each widget ourselves, leaving us with complete control over each component, and we paid careful attention to the algorithmic performance of everything. A perfect example of this is the TableView component in Cappuccino. Even with thousands of rows the tableview still scrolls just a smoothly as a desktop app, but yet today the modern libraries are still shipping subpar experiences; giving in to the idea that the web can never bring the same experience a native app does. The other day I made a bare bones list view (because someone told me it couldn’t be done) in less than 200 lines of code… these are not hard problems, and they’ve already been solved!
Nevertheless, we’re four years later and the only thing we have to show for it is easy rounded corners, and yet another UI library that doesn’t really work well. It’s incredibly disappointing. I want to solve new and hard problem, not recreate a terrible 4 year old widget library… again. That’s why I’m done with the web.
Had we released 280 Slides today, in 2011, it would generate as much excitement and be considered just as innovative as when it was released 3 and a half years ago.
In a couple months I’ll be joining Google, working on a team building Google Now. Google Now is one of the most exciting pieces of technology I’ve seen in a long time. It’s solving problems that couldn’t be solved four years ago. It’s these kind of technologies that are going to be at the center of people’s lives as we move forward.
Meanwhile, the web community will continue to solve the same non-problems over and over again. My parting words to the many friends I’ve made in the web community is to think outside the box like we used to. Don’t be afraid to invest a week learning something new. Cappuccino, GWT, and Sproutcore were born out of necessity; don’t stop breaking boundaries because it’s now easy to add rounded corners.
(Obviously these opinions are my own and of course do not represent the opinions of my future employer)
Please share your thoughts on Hacker News.
My comment addressing Hacker News: https://news.ycombinator.com/item?id=5418655