After few weeks of work on my first Ember.js app, I think I am ready to chime in.
One thing I am sure is Ember.js isn’t losing to Angular in advertising. It has its “cool factor”, there are guys out there who are spreading the word. If somebody asks about client side JS, the “also give Ember.js a look” guy is always here.
So, where you lose?
Coming from my own observations and what fellow devs who tried to get into Ember but eventually were bounced off and found promised land in Angular.js have told me, I have concluded following:
As a project intented to be a tool for developers to build with, Ember.js tells too much about how it achieves its ambitiousness, but too little about how I can use this ambitiousness in my project.
Let me use hammer methaphor to better explain my point:
I have two wood planks that I have to put together. I have asked around and from what I understand now, the tying them together with string is just so past decade. Everybody uses hammers for that now.
With my interest piqued by word of this new unheard of tool, I go to store where there are two boxes claiming to “just what you need”: Angular and Ember. I buy Ember hammer, because it has amusing rodent on box and memories of having pet hamsters made me warm and fuzzyinside. I take it home and sit down to my project.
I unbox Ember hammer. Inside I find tool with some nails and booklet that tells me following:
Confused, I take my box to town elder and ask “Oh The Allknowing Elder Google, What Is This Sorcery?”, to which elder answers:
This is the Ember Hammer. The Gods of the Hammering have used it to Hammer works that have impressed all, and they have found it good tool.
Confused by such non-answer, I return to store, where I pick that other hammer, the Angular one.
I bring it home, unbox it and inside I find booklet, hammer and some nails.
I sit by my planks, open booklet and start reading.
This is amazing. I now have two planks connected! But I also have composite blank I would like to hammer to those wooden planks. So I go to the Elder and ask: “Oh The Allknowing Elder Google, How Do I hammer composite plank to wooden plank with Angular Hammer?”, to which Elder answers:
Page 67 of the booklet, Son.
When I ask people why they dropped Ember.js for Angular.js, I always hear this answer:
Because I tried to do XYZ for four days, but couldn’t find any documentation, tutorial, example or StackOverflow Q&A on how to do it, or what I found was about something completely different. Then I tried it for Angular.js and had code snippet I just copypasted into my project in 10 seconds.
Ember.js docs (and community!) fail to accumulate and convey answers for those questions.
For example, if you pull Django documentation, its NOT written to teach you how to Django. Its written to teach you how to do good webdevelopment using Django.
Ember Guide needs to stop being about Ember. It needs to start being about achieving all those ambitious things I see in internets that make me say “me too!”. It needs to understand that Ember isn’t a goal, only one of tools in large toolkit used for achieving something greater.
It needs to show me how to use Bootstrap Tooltips on my pages, how to make automagically updating dates via Moment.js, how to do RPC for those little things that don’t make sense in REST, how to change page title when user transitions into a route, what design patterns are popular for handling forms in components/controllers, how to use my CSRF cookie in my adapter, how to lazily load heavy 3rd party libs like zxcvb.js or use google CAPTCHA.
Until Ember gives those answers, people will keep turning to Angular instead. Eventually, some of them will start giving to Angular’s ecosystem, in turn attracting even more people to Angular in future.