I have trouble taking "[X] Done Right" articles seriously when they're posted on pages that are plastered with ads and look like the CSS hasn't be touched since 2004.
Is Ember.js actually worth learning? Will it make me a better programmer (like learning Haskell will)? Will it enable me to get a pay rise from my current £480 per day contracting fees? Is there a more diverse and active job market than there is around my current main language (Java)?
What's the point of my learning yetAnother.js?
Why the down vote? I'm asking serious questions that as a professional software engineer, I worry about. The two devs next to me have expressed similar feelings when I told them about this article.
Down voting me because you don't like what I said is against the HN guidelines.
Some people pick technologies because they are good at solving the problems they have, not because they might help their chances at a lucrative contracting gig.
No mention of my other criteria I see. Money is an important part of a career. Weddings, houses and children cost money.
So the idea is that Ember may serve to fix one particular problem in my company... I don't see how it's any better than anything else. Just because I can knock out a basic web app in less time doesn't mean it's worth learning, especially when you add learning time into the development time and compare it to the Java equivalent.
Seems to me the use case (and job market) is small.
I wish I was still 22 years old and didn't need to care about earning decent money...
Ember.js is a framework for writing web applications on the client side. This experience, and the end result will be a lot different that the type of web apps that you might be used to writing from the server-side.
I've created my share of Java-based server-side generated web applications, and when it comes to writing applications that run well on the web, JavaScript MVC frameworks are the way to go.
I can't comment on how it might affect your career on either the short of long term, though. That said, I expect that the demand for these types of rich webapps will become larger as we move forward.
I'm turned 22 ten years ago myself, but I think making that statement you made is unfair.
So you think that client side JS web apps are 'the way to go'. What's wrong with server side MCV web applications?
How does Ember.js in the clients browser scale when you have a a lot of data that needs marshaling / unmarshaling or generally processing and moving around? Surely it's more performant to do this on the JVM on the server rather than relying on the clients computing power (or lack of). Ideally you wouldn't do a lot of data processing in the MVC part of an app anyway but it seems like you're telling me the whole web app needs to be client side?
Most data-processing (if not all) should be done on the server-side. Your API should give your front-end app as much of a complete data-set as possible. Note that data 'appearance' is fine on the front-end for the most part.
So what's the point of making the MVC portion of the application client side when I can just use Spring MVC (or similar) and keep to the same tech stack that the rest of the project is using? Same goes for .NET projects etc?
If you write all of your code to run on the server then you need to pull down a full page from the server every time you want to update your data.
There's plenty of reasons you might want to avoid this in some cases.
For example, you might want your forms to be validated without waiting for the user to push submit. You might have rich content in some markup language (like markdown) and you want the user to have a live preview on the same page as they are editing. Or you might have an app with real time data that changes frequently and you don't want the user to sit there pushing refresh constantly.
This functionality is already provided via AJAX. There's no need for me to put the whole MVC later on the client side to achieve this.
You don't need to pull a whole page down to get new data and you can do the form validation on the client side although you need to redo the validation on the server side anyway to make sure the client JS hasn't been tampered with.
Once you are doing AJAX you are going to be writing Javascript (or something that compiles to it). Ember.js can help with that. So rather than writing a bunch of code to pull down JSON from the server and manually update the DOM in ways that deal with various browser quirks you can say "here's my model, here's how I want it rendered, link it to this REST API" and it will take care of a ton of heavy lifting for you.
It's true that it doesn't give you any magical power that you didn't have before and you can do everything it can do with vanilla javascript or any of the other frameworks. However that's a bit like saying you don't see the point of rails because you can just use vanilla PHP for everything.
You're speaking as if doing AJAX and doing client-side MVC are one step apart. Moreover, you're speaking as if using server-side MVC forces the programmer to use no JavaScript at all. At best, this is naive. Either that, or you deliberately misrepresenting technologies to promote something.
The simplest way to use AJAX with a server-side MVC is by fetching blocks of pre-rendered HTML. This is commonly known as AHAH. It's dead-simple to do, powerful and trivial to use via progressive enhancement. That is what you should treat as the server-side alternative to client-side MVC.
If your app has a lot of rich client functionality, it can be a lot easier to just use JSON data with client side MVC rather than having to constantly regenerate everything on the server, especially when several parts of the page need to be updated at once and a lot more performant.
Sounds like you haven't tried making a large AJAX app. Yes, if all you need to do is validate a form this or any other framework is overkill. You'll likely have multiple forms, lots of views, dynamically updating data, filtered tables, modals, etc etc. You can manage it all yourself, but frameworks like Ember maker this a whole lot easier.
Basically, your server side doesn't change much. The difference is that instead of outputting HTML, it outputs JSON.
Instead of writing your own code to handle AJAX on top of jQuery, you write code that handles the real logic and let the framework handle the DOM manipulation. In that way, it's easier to test, easier to debug, easier to provide superior experiences.
Right now, writing AJAX in the browser is equivalent of the JSPs of yesteryear. Remember all that horrific logic that used to creep into your JSPs? That's what jQuery looks like, and this new crop of frameworks is getting us to JSTL or facelets at the minimum.
The difference is that instead of outputting HTML, it outputs JSON.
Which is non-semantic, so it cannot be progressively enhanced, does not benefit from browser updates and is pretty much not crawlable by anyone except Google.
So, you would do most data-processing on the server side. But the data that your client-side application needs you will server to it, most likely via JSON.
You can definately go too far and implement too much on the client side, and this is generally a bad approach.
It's like with anything else. You need to figure out the balance between what you process on the server and what you process on the client.
> Will it make me a better programmer (like learning Haskell will)?
That depends on whether you've learnt the concepts that Ember introduces before or not. If you're stuck in a Java shaped rut, then yes. It will make you a better programmer.
> Will it enable me to get a pay rise from my current £480 per day contracting fees?
That depends whether you find someone who wants an Ember app that is willing to pay more than £480 per day. If you don't bother looking, then you're unlikely to find it. That said, if money is what you're after, there are many better avenues to go down than learning Ember or doing Java contracting.
> Is there a more diverse and active job market than there is around my current main language (Java)?
JavaScript is growing in popularity very quickly. If you wanted to switch to it from Java you wouldn't have any problems finding an interesting job.
> So the idea is that Ember may serve to fix one particular problem in my company... I don't see how it's any better than anything else. Just because I can knock out a basic web app in less time doesn't mean it's worth learning, especially when you add learning time into the development time and compare it to the Java equivalent.
You don't see how it's better because you haven't bothered learning it. By comparing it to the Java equivalent, I assume you mean GWT. In that case, yes. It's much better.
Ember isn't really designed for basic web apps. It's designed for big complicated web apps. I wouldn't recommend Ember for really basic web apps at all - it imposes a lot of structure that you only really see the benefit of when your app becomes larger.
> I wish I was still 22 years old and didn't need to care about earning decent money...
Never wish for something out of the past. It's gone. Look to the future instead.
It adds no value over anything that we already use or what I see being used elsewhere. It's just another library that doesn't add any significant.
There is not liquid job market with good salaries or day rates with Ember at the moment, you may be able to find one or two roles in London that ask for it but it's certainly not liquid and therefore could not support a contractor.
Embers approach is not radical therefore there's not a lot to learn here. I'm not stuck in a Java rut. You can write modern, slim, fast, concurrent Java. You don't have to be stuck in the days of massive J2EE government projects. The buzz around modern Java in London is massive.
You're right in saying that I could do other things for money but I love software development and I love that people are willing to pay be quite large salaries and day rates to do it. My career isn't money focused but money is a part of it. Why shouldn't I have a big house and holiday often just because I love writing code?
Also, seeing Java devs as being 'stuck in a rut' shows massive ignorance as to what is actually happening in the Java world right now.
You asked for an opinion. I gave you one (I'm in the middle of a large Ember project at the moment). I didn't expand on it as you appeared to have already made up your mind and written the whole thing off on the basis that the Java world keeps you pretty happy already.
> It adds no value over anything that we already use or what I see being used elsewhere. It's just another library that doesn't add any significant.
It sounds like you know a lot about it already. Why bother asking if it's worth learning then?
It's not a radical approach sure (that's the main point in fact). The main difference with Java is that Ember all happens inside the browser, and you write it in JavaScript. I have no idea how much experience you have with those things, so have no idea how much you'd learn if you picked it up.
In no way did I imply that you were stuck in Java rut. I said that if you were, you might learn something; if not, you might not. The things you'd learn about (unless you already know a lot about them already of course) involve things that you'd learn doing any front end development.
In no way should you feel bad for wanting to make a lot of money.
I'm a primarily JVM developer as well, but full stack.
The answer to you is maybe, but it's not necessary yet.
In 3-4 years, 80% of greenfield web apps will be using a single page framework. Perhaps it won't be Ember, but something from the next generation. However, the results are better for the user, and as more developers learn it, the more it will be expected as common knowledge.
Increasingly, your contracts will end up being on the back end, and your full stack opportunities will dwindle. Look at the jobs today that say jQuery or javascript. Most of those will be out of your range.
That might be fine for you -- if you stick to back ends or maintenance programming, your jobs won't dwindle. Greenfield apps will slowly dwindle, or you get in with a client who expects you to learn it, or you decide to use it on a project because you see the direction the winds are going.
Me? I have an angular.js and knockout.js proof of concept on my resume now.
This is the best answer I've received to my concerns. You're predicting that people will move from backend to frontend for the MVC layer (or w/e will come next) and this is why you are keeping up with these sorts of developments.
The move has already come in B2C apps. B2B is lagging and internal apps and consultingware will be the last, as normal.
The problem I see is that the frontend models are not designed for internal apps in mind. Yet. They're not designed for a mediocre developer. I think we could do a lot better for that use case. Right Now, it's faster to do a server-generated app with no ajax. I don't think that has to be the case.
I currently work with a few very popular B2C ecommerce platforms and none of them have made the move to this sort of thing yet, the best we've got is Spring MVC with AJAX.
Ember.js is a tool like many others. So it's sort of like asking "Will I be richer if I learn Django or if I learn Rails?". Nobody on HN can really give you a definitive answer.
It is a framework for building rich javascript client web apps and helps you keep your code structured in a certain way and takes care of a great deal of boilerplate heavy lifting for you, if you take the time to learn it's idioms.
So the question, "Is there a way in which I can leveridge the fact that such a framework exists in order to make more money as a consultant?" is one that only you yourself can answer.
My business is based on delivering good applications very quickly. I recently delivered an Ember.js application, and my client said, "I feel like I just won the lottery."
This was largely thanks to the fact that once I climbed the Ember.js learning curve, certain kinds of features became ridiculously easy to implement, and I had enough time to plow through the remaining problems with brute force. I also learned that (a) the unreleased Ember Data library is actually pretty good, but (b) getting into fights with Ember Data is catastrophic and never ends well. When Ember Data wants something specific, I fix the server to provide it and I don't argue.
But no, there's no way you can go look at a job board and find Ember jobs. It's more like how I remember Rails 0.13—there's an opening for certain aggressive businesses to develop software more quickly than before, but the tools are immature and there's not really a well-established job market yet.
The down votes may be a result of people detecting loaded questions, but in the event that they are not, here's my response:
> Is Ember.js actually worth learning? What's the point of my learning yetAnother.js?
You're a Java developer, so it may be harder for you to understand the productivity boon that frameworks like Ember.js and Angular.js provide than it is for people who have been dealing with jQuery spaghetti code on client-side javascript apps that have become increasingly more complex as browser javascript engines have become more capable. Ember.js, Angular.js, and other frameworks that offer two-way data binding are great because they take care of the dom manipulation details developers have typically had to manage by hand in the past. It frees people up to worry more about the business logic of their javascript apps. So if you're a javascript developer sick of writing boilerplate DOM manipulation code, Ember.js is definitely worth learning. I'm partial to Angular.js because it was built with testability in mind.
> Will it make me a better programmer (like learning Haskell will)?
Probably not, but it will make you a more productive programmer.
> Will it enable me to get a pay rise from my current £480 per day contracting fees?
If you're writing Java on your main contract, probably not. This is a bizarre question anyways and probably the source of your down-votes. I personally don't look at learning a new library or language in terms of how much extra money it will make me, but instead look at how much more productive it will make me as a programmer.
> Is there a more diverse and active job market than there is around my current main language (Java)?
I don't know much about the Java market, but I think it's safe to say that knowing Javascript cold and keeping up with the trends in that world will make you pretty darn employable these days.
Keep in mind that Ember.js and other frameworks like it are really only valuable to people who are writing single page javascript applications. If you aren't, or you are against the idea of building single-page applications, then these frameworks won't really do much for you. Although, you can still get some value out of them.
> Keep in mind that Ember.js and other frameworks like it are really only valuable to people who are writing single page javascript applications. If you aren't, or you are against the idea of building single-page applications, then these frameworks won't really do much for you. Although, you can still get some value out of them.
This is fairly true of ember specifically, but much less so for some of the other frameworks. Backbone and Angular, in particular, are very well suited for building "islands of richness" in otherwise traditional sites. Even if you're doing something relatively simple, like a form with live validations and inline error messages, you're going to have an easier time writing it with something to handle the DOM manipulation for you.
If you're wanting to get into frontend JS, start with Backbone. It's much less powerful than the other frameworks, but is by far the easiest to grok, and having it under your belt will give you enough tools to start moving larger and larger chunks of functionality into the browser. Come back to Ember once you outgrow that.
You're not a fan of the way Ember's doing things? I'm a js intermediate trying to get deeper into the language, so (as you're a respected js guy) if you could expand on the comment then that would be awesome. Thanks.
I think the implication was rather that Java dudes would be uncomfortable working with a modern JS library, and here is one example of why. Normal people don't have to run.
I think the correct question should be: Is it worth your time learning any of the SPA (Single Page Application) MV* JavaScript framework (Backbone, Ember, Angular, Knockout, etc).
Browsers have come a long way. It's now possible to develop web applications that offer comparable user experience to say iOS/Android/Windows etc. As with those other platforms, to get the full user experience, the developer usually has to learn and use their native libraries and languages (Object-C for iOS, Java for Android, etc). For the web, the language is JavaScript and the library is HTML5 (the DOM manipulation that is).
Unlike those other platforms, plain JavaScript + DOM manipulation can get out of hand pretty quickly. It works when to create 'web application' means adding a few jQuery DOM manipulations here and there, backed by your favourite server framework. But when the amount of JavaScript you have to write grows, you need a way to structure it (design patterns, modules, etc). GWT, if I remember correctly, tried to address the issue of unmanageable JavaScript by allowing you to use Java on the server side and then it will compile and serve JavaScript to the client. This seemed like a good idea but the problem still remained: You're essential writing software in one platform to run in another. There will always be a penalty somewhere (do you remember how long it took to get the first JavaServer Faces framework with HTML5 render?).
The basic driving force of MV* JavaScript framework is to address the issue of writing clean, manageable and performing JavaScript code targeting the browser itself and not some intermediate platform. With the end goal being to provide a better user experience.
Is this worth learning? Well, do you think applications built using client-side JavaScript provide better user experience? Think Twitter, Gmail and the likes. Do you think your clients will appreciate such kind of applications?
Well, you ask a valid question, but the fact that you actually have to mention your current pay and are coming across as a pompous ass might cause some of the downvoting.
Albeit a great resource for the community to continue to produce tutorials like these on front-end frameworks, 'Web Applications Done Right' is a complete nonsense notion for what was presented. What would be hugely beneficial for beginners is someone who would take the time to go through a large-scale web app using one of these technologies. In my experience building large-scale front-end applications, I had to resort to using techniques that aren't really documented anywhere with good examples (extracting objects into presenters, decorators, dynamic template inheritance, etc...).
These simple one-page apps are great as an initial learning resource - but it leaves people not understanding what they're getting themselves into later on down the road.
Thank you for you comments. This is one of the goals that I am trying to achieve through my book-in-progress Ember.js in Action (Manning Publications).
And I do agree. Examples of large-scale applications built with any of the MVC-based frameworks is lacking.
I have the same idea, myself. I have an idea ruminating on a better example than todomvc, but am unsure about the time commitment for the full scope of my idea. At this point, I'm thinking of doing a "stone soup" approach by putting up horrible examples of each, writing an incendiary post on HN, and relying on the outrage of the community to rewrite it properly. laughs
For those writing substantial client-side JS apps (rather than sprinkling jQuery here and there), a client-side MVC framework is definitely the way to go.
EmberJS has however gotten a lot of flack recently regarding its docs, learning curve, and lack of API stability.
We're using Backbone to write a client-side widget / look and feel library, with a bunch of Models and Views out of the box to help application developers write rich web apps. Backbone has worked out great so far, but we've had to take decisions on a fair amount of things and put the groundwork in for things like dust templates, nested views, etc.
Things like Angular, CanJS, Ember, make these decisions for you and can definitely save time, if you're happy with their way of doing things.
That said, we don't have View Bindings / Two-way bindings built in, we have to use Backbone Event's listenTo manually. It's worked ok for us so far, especially when you have multiple views on the same model that need to do different things when the model changes.
I recently finished building a large-scale app out in Backbone. It was a joy at first - I knew I needed a flexible framework that would work with the non-conventional UI that I was to produce and Backbone worked out perfectly.
After reaching 45+ models and hundreds of view files (along with custom 'controller', 'presenter' and a long chain of inheritance objects that I had to produce if I didn't want to go insane), I'm finding the app to be a bit un-manageable at this point.
Another thing that's a huge pain with Backbone is it's router. The custom matching implementation for segments that was recently added is nice - but it doesn't work well at all with extremely dynamic URL's requiring tons of filtering options as query parameters (actually, there isn't any JS framework that I've seen handle that use-case well).
I'm currently in the process of re-building the same app out in Ember - it's going well so far, but I have a feeling I'm going to start pulling my hair out when I get to the more complex pages.
> That said, we don't have View Bindings / Two-way bindings built in, we have to use Backbone Event's listenTo manually. It's worked ok for us so far, especially when you have multiple views on the same model that need to do different things when the model changes.
I'm just telling you what it comes across as, a perception that apparently I'm not the only one to hold (in fact, I wasn't going to mention it except that dave_sid had the same reaction).
Defend it all you want, but that's not going to change the fact that some readers will see it as an underhanded jab.
This example Web application isn't really "done right" until it authenticates a user and restricts photo requests based on user credentials and gracefully handles a large number of user photos (say hundreds of photos, not just ten).
56 comments
[ 3.6 ms ] story [ 131 ms ] threadWhat's the point of my learning yetAnother.js?
Why the down vote? I'm asking serious questions that as a professional software engineer, I worry about. The two devs next to me have expressed similar feelings when I told them about this article.
Down voting me because you don't like what I said is against the HN guidelines.
So the idea is that Ember may serve to fix one particular problem in my company... I don't see how it's any better than anything else. Just because I can knock out a basic web app in less time doesn't mean it's worth learning, especially when you add learning time into the development time and compare it to the Java equivalent.
Seems to me the use case (and job market) is small.
I wish I was still 22 years old and didn't need to care about earning decent money...
I've created my share of Java-based server-side generated web applications, and when it comes to writing applications that run well on the web, JavaScript MVC frameworks are the way to go.
I can't comment on how it might affect your career on either the short of long term, though. That said, I expect that the demand for these types of rich webapps will become larger as we move forward.
I'm turned 22 ten years ago myself, but I think making that statement you made is unfair.
How does Ember.js in the clients browser scale when you have a a lot of data that needs marshaling / unmarshaling or generally processing and moving around? Surely it's more performant to do this on the JVM on the server rather than relying on the clients computing power (or lack of). Ideally you wouldn't do a lot of data processing in the MVC part of an app anyway but it seems like you're telling me the whole web app needs to be client side?
There's plenty of reasons you might want to avoid this in some cases. For example, you might want your forms to be validated without waiting for the user to push submit. You might have rich content in some markup language (like markdown) and you want the user to have a live preview on the same page as they are editing. Or you might have an app with real time data that changes frequently and you don't want the user to sit there pushing refresh constantly.
You don't need to pull a whole page down to get new data and you can do the form validation on the client side although you need to redo the validation on the server side anyway to make sure the client JS hasn't been tampered with.
It's true that it doesn't give you any magical power that you didn't have before and you can do everything it can do with vanilla javascript or any of the other frameworks. However that's a bit like saying you don't see the point of rails because you can just use vanilla PHP for everything.
The simplest way to use AJAX with a server-side MVC is by fetching blocks of pre-rendered HTML. This is commonly known as AHAH. It's dead-simple to do, powerful and trivial to use via progressive enhancement. That is what you should treat as the server-side alternative to client-side MVC.
Instead of writing your own code to handle AJAX on top of jQuery, you write code that handles the real logic and let the framework handle the DOM manipulation. In that way, it's easier to test, easier to debug, easier to provide superior experiences.
Right now, writing AJAX in the browser is equivalent of the JSPs of yesteryear. Remember all that horrific logic that used to creep into your JSPs? That's what jQuery looks like, and this new crop of frameworks is getting us to JSTL or facelets at the minimum.
Which is non-semantic, so it cannot be progressively enhanced, does not benefit from browser updates and is pretty much not crawlable by anyone except Google.
You can definately go too far and implement too much on the client side, and this is generally a bad approach.
It's like with anything else. You need to figure out the balance between what you process on the server and what you process on the client.
> Is Ember.js actually worth learning?
Yes.
> Will it make me a better programmer (like learning Haskell will)?
That depends on whether you've learnt the concepts that Ember introduces before or not. If you're stuck in a Java shaped rut, then yes. It will make you a better programmer.
> Will it enable me to get a pay rise from my current £480 per day contracting fees?
That depends whether you find someone who wants an Ember app that is willing to pay more than £480 per day. If you don't bother looking, then you're unlikely to find it. That said, if money is what you're after, there are many better avenues to go down than learning Ember or doing Java contracting.
> Is there a more diverse and active job market than there is around my current main language (Java)?
JavaScript is growing in popularity very quickly. If you wanted to switch to it from Java you wouldn't have any problems finding an interesting job.
> So the idea is that Ember may serve to fix one particular problem in my company... I don't see how it's any better than anything else. Just because I can knock out a basic web app in less time doesn't mean it's worth learning, especially when you add learning time into the development time and compare it to the Java equivalent.
You don't see how it's better because you haven't bothered learning it. By comparing it to the Java equivalent, I assume you mean GWT. In that case, yes. It's much better.
Ember isn't really designed for basic web apps. It's designed for big complicated web apps. I wouldn't recommend Ember for really basic web apps at all - it imposes a lot of structure that you only really see the benefit of when your app becomes larger.
> I wish I was still 22 years old and didn't need to care about earning decent money...
Never wish for something out of the past. It's gone. Look to the future instead.
Is Ember worth learning? Let's see.
It adds no value over anything that we already use or what I see being used elsewhere. It's just another library that doesn't add any significant.
There is not liquid job market with good salaries or day rates with Ember at the moment, you may be able to find one or two roles in London that ask for it but it's certainly not liquid and therefore could not support a contractor.
Embers approach is not radical therefore there's not a lot to learn here. I'm not stuck in a Java rut. You can write modern, slim, fast, concurrent Java. You don't have to be stuck in the days of massive J2EE government projects. The buzz around modern Java in London is massive.
You're right in saying that I could do other things for money but I love software development and I love that people are willing to pay be quite large salaries and day rates to do it. My career isn't money focused but money is a part of it. Why shouldn't I have a big house and holiday often just because I love writing code?
Also, seeing Java devs as being 'stuck in a rut' shows massive ignorance as to what is actually happening in the Java world right now.
You asked for an opinion. I gave you one (I'm in the middle of a large Ember project at the moment). I didn't expand on it as you appeared to have already made up your mind and written the whole thing off on the basis that the Java world keeps you pretty happy already.
> It adds no value over anything that we already use or what I see being used elsewhere. It's just another library that doesn't add any significant.
It sounds like you know a lot about it already. Why bother asking if it's worth learning then?
It's not a radical approach sure (that's the main point in fact). The main difference with Java is that Ember all happens inside the browser, and you write it in JavaScript. I have no idea how much experience you have with those things, so have no idea how much you'd learn if you picked it up.
In no way did I imply that you were stuck in Java rut. I said that if you were, you might learn something; if not, you might not. The things you'd learn about (unless you already know a lot about them already of course) involve things that you'd learn doing any front end development.
In no way should you feel bad for wanting to make a lot of money.
The answer to you is maybe, but it's not necessary yet.
In 3-4 years, 80% of greenfield web apps will be using a single page framework. Perhaps it won't be Ember, but something from the next generation. However, the results are better for the user, and as more developers learn it, the more it will be expected as common knowledge.
Increasingly, your contracts will end up being on the back end, and your full stack opportunities will dwindle. Look at the jobs today that say jQuery or javascript. Most of those will be out of your range.
That might be fine for you -- if you stick to back ends or maintenance programming, your jobs won't dwindle. Greenfield apps will slowly dwindle, or you get in with a client who expects you to learn it, or you decide to use it on a project because you see the direction the winds are going.
Me? I have an angular.js and knockout.js proof of concept on my resume now.
Good answer.
The problem I see is that the frontend models are not designed for internal apps in mind. Yet. They're not designed for a mediocre developer. I think we could do a lot better for that use case. Right Now, it's faster to do a server-generated app with no ajax. I don't think that has to be the case.
Ember.js is a tool like many others. So it's sort of like asking "Will I be richer if I learn Django or if I learn Rails?". Nobody on HN can really give you a definitive answer.
It is a framework for building rich javascript client web apps and helps you keep your code structured in a certain way and takes care of a great deal of boilerplate heavy lifting for you, if you take the time to learn it's idioms.
So the question, "Is there a way in which I can leveridge the fact that such a framework exists in order to make more money as a consultant?" is one that only you yourself can answer.
This was largely thanks to the fact that once I climbed the Ember.js learning curve, certain kinds of features became ridiculously easy to implement, and I had enough time to plow through the remaining problems with brute force. I also learned that (a) the unreleased Ember Data library is actually pretty good, but (b) getting into fights with Ember Data is catastrophic and never ends well. When Ember Data wants something specific, I fix the server to provide it and I don't argue.
But no, there's no way you can go look at a job board and find Ember jobs. It's more like how I remember Rails 0.13—there's an opening for certain aggressive businesses to develop software more quickly than before, but the tools are immature and there's not really a well-established job market yet.
Asking because I might have some influence over what technologies our company might use in the near future.
> Is Ember.js actually worth learning? What's the point of my learning yetAnother.js?
You're a Java developer, so it may be harder for you to understand the productivity boon that frameworks like Ember.js and Angular.js provide than it is for people who have been dealing with jQuery spaghetti code on client-side javascript apps that have become increasingly more complex as browser javascript engines have become more capable. Ember.js, Angular.js, and other frameworks that offer two-way data binding are great because they take care of the dom manipulation details developers have typically had to manage by hand in the past. It frees people up to worry more about the business logic of their javascript apps. So if you're a javascript developer sick of writing boilerplate DOM manipulation code, Ember.js is definitely worth learning. I'm partial to Angular.js because it was built with testability in mind.
> Will it make me a better programmer (like learning Haskell will)?
Probably not, but it will make you a more productive programmer.
> Will it enable me to get a pay rise from my current £480 per day contracting fees?
If you're writing Java on your main contract, probably not. This is a bizarre question anyways and probably the source of your down-votes. I personally don't look at learning a new library or language in terms of how much extra money it will make me, but instead look at how much more productive it will make me as a programmer.
> Is there a more diverse and active job market than there is around my current main language (Java)?
I don't know much about the Java market, but I think it's safe to say that knowing Javascript cold and keeping up with the trends in that world will make you pretty darn employable these days.
Keep in mind that Ember.js and other frameworks like it are really only valuable to people who are writing single page javascript applications. If you aren't, or you are against the idea of building single-page applications, then these frameworks won't really do much for you. Although, you can still get some value out of them.
This is fairly true of ember specifically, but much less so for some of the other frameworks. Backbone and Angular, in particular, are very well suited for building "islands of richness" in otherwise traditional sites. Even if you're doing something relatively simple, like a form with live validations and inline error messages, you're going to have an easier time writing it with something to handle the DOM manipulation for you.
If you're wanting to get into frontend JS, start with Backbone. It's much less powerful than the other frameworks, but is by far the easiest to grok, and having it under your belt will give you enough tools to start moving larger and larger chunks of functionality into the browser. Come back to Ember once you outgrow that.
Browsers have come a long way. It's now possible to develop web applications that offer comparable user experience to say iOS/Android/Windows etc. As with those other platforms, to get the full user experience, the developer usually has to learn and use their native libraries and languages (Object-C for iOS, Java for Android, etc). For the web, the language is JavaScript and the library is HTML5 (the DOM manipulation that is).
Unlike those other platforms, plain JavaScript + DOM manipulation can get out of hand pretty quickly. It works when to create 'web application' means adding a few jQuery DOM manipulations here and there, backed by your favourite server framework. But when the amount of JavaScript you have to write grows, you need a way to structure it (design patterns, modules, etc). GWT, if I remember correctly, tried to address the issue of unmanageable JavaScript by allowing you to use Java on the server side and then it will compile and serve JavaScript to the client. This seemed like a good idea but the problem still remained: You're essential writing software in one platform to run in another. There will always be a penalty somewhere (do you remember how long it took to get the first JavaServer Faces framework with HTML5 render?).
The basic driving force of MV* JavaScript framework is to address the issue of writing clean, manageable and performing JavaScript code targeting the browser itself and not some intermediate platform. With the end goal being to provide a better user experience.
Is this worth learning? Well, do you think applications built using client-side JavaScript provide better user experience? Think Twitter, Gmail and the likes. Do you think your clients will appreciate such kind of applications?
These simple one-page apps are great as an initial learning resource - but it leaves people not understanding what they're getting themselves into later on down the road.
And I do agree. Examples of large-scale applications built with any of the MVC-based frameworks is lacking.
http://todomvc.com/
EmberJS has however gotten a lot of flack recently regarding its docs, learning curve, and lack of API stability.
The following hn link compares Angular, CanJS, Backbone and Ember: https://news.ycombinator.com/item?id=5563223 and would be a useful resource when picking a framework.
We're using Backbone to write a client-side widget / look and feel library, with a bunch of Models and Views out of the box to help application developers write rich web apps. Backbone has worked out great so far, but we've had to take decisions on a fair amount of things and put the groundwork in for things like dust templates, nested views, etc.
Things like Angular, CanJS, Ember, make these decisions for you and can definitely save time, if you're happy with their way of doing things.
That said, we don't have View Bindings / Two-way bindings built in, we have to use Backbone Event's listenTo manually. It's worked ok for us so far, especially when you have multiple views on the same model that need to do different things when the model changes.
After reaching 45+ models and hundreds of view files (along with custom 'controller', 'presenter' and a long chain of inheritance objects that I had to produce if I didn't want to go insane), I'm finding the app to be a bit un-manageable at this point.
Another thing that's a huge pain with Backbone is it's router. The custom matching implementation for segments that was recently added is nice - but it doesn't work well at all with extremely dynamic URL's requiring tons of filtering options as query parameters (actually, there isn't any JS framework that I've seen handle that use-case well).
I'm currently in the process of re-building the same app out in Ember - it's going well so far, but I have a feeling I'm going to start pulling my hair out when I get to the more complex pages.
Knockback.js (http://kmalakoff.github.io/knockback/) may help with that.
Your perception is deterministic, while mine is probabilistic.
Defend it all you want, but that's not going to change the fact that some readers will see it as an underhanded jab.