In late 2012 while working with Backbone.js I started to see many articles about this framework called AngularJS, which was being developed by Google. Since I had such a big investment in time with Backbone.js I disregarded AngularJS. In early 2013 I interviewed with a company that needed someone that could work on all three layers (front, middle and backend). They mentioned that they were using AngularJS and really enjoyed working with it. We discussed AngularJS more and I became intrigued with the technology. The company changed direction and instead of needing someone with my skill set, they decided that they need an individual with mobile development experience, which practically I had very little. Even though I didn’t get hired by this company, the interviewing process was good and I came out with more knowledge than I went in with. I learned a lot in this interview and the technology that I dismissed (AngularJS) seemed to have a large following, but more importantly there were companies using it to create real-world application.
So in early 2013 I started learning AngularJS. I truly enjoy this technology. It seems by far that I’m more productive with AngularJS than the previous technologies. I can focus on the business issues at hand, and AngularJS tries to get out of the way. I write much less code than I previously did in other frameworks/libraries. AngularJS is very opinionated and that is good. Instead of learning multiple plugins for each framework, AngularJS has set of default components that work very nicely with each other. AngularJS is developed and support by Google. This is not a reason by-it-self to use AngularJS, but I believe it’s a big plus that such a large influential company is behind it. Google has put a large investment into AngularJS and there is an actual a team committed to it.
Knockout is a great library that supports data-binding with the MVVM pattern. It’s easy to learn and most people can be productive with it in a short time. Knockout is a library, it’s not a framework. It does a good job of data-binding, but doesn’t provide much else.
Backbone is a very good framework. Backbone is extremely flexible, but with this flexibility the developer must write more code. Backbone is considered as a MV* framework. Backbone doesn’t have an object that is considered controller. Many people believe that the controller is the Backbone router. Others believe, as I do, that the controller is the Backbone view. In the beginning this caused much confusion. Since there are so many different options of doing things in Backbone, I believe Backbone is more difficult to learn and to be productive with than Knockout and AngularJS. The framework is not opinionated and it’s up to developer to decide how to structure code. Terms are confusing in Backbone. For example, a Backbone View seems to be more of a controller and templates seems to be more similar to views. Data-binding must be coded by the developer. With Backbone, I believe it takes too much time and effort to productive and there’s a ton of code that must be written and maintained.