With the beta release of Angular 2 in mid-December after almost 2 years in development, high hopes have been placed upon the framework who in its absence of release has seen other competitors such as ReactJS mature and Aurelia release into beta.
I have seen and heard some ambitious things being said about Angular 2. It appears as though everyone is making the assumption that because the Angular brand is so well known and people are falsely under the impression it is a first-class Google project (even though Google offers no support).
Just because Google provide some resources for the Angular project, they have another conflicting library called Polymer which they seem to be pushing for quite hard, even more-so than Angular 2. I am not saying that Google is snobbing Angular because apparently a few applications internally already are using it, but publicly Google’s stance seems to be very much pro-Polymer.
I think once upon a time the words, “Google quality” carried some weight, but historically Google have shown they have no qualms chopping something (like the beloved Google Reader) if it does not align with their agenda or business.
Firstly, lets put the facts out there. Angular 2 is a substantial improvement over Angular 1, by leaps and bounds. Architecturally because Angular 2 is a rewrite from the ground up, many of the poor decisions from the original incarnation are gone, more notably: transclusion and dirty-checking.
Learning Curve Trap
But there is one problem that Angular 2 did not address. The one pain-point of the original framework, which while did not hinder its success, was definitely a point everyone mentioned in most articles written about it: learning curve.
Even though Angular 2 treats TypeScript as a first-class citizen and like other frameworks, utilises features and API’s in ECMAScript 2015, it still suffers from a bad case of over-engineering.
The complexity of the templating language is enough to make me quiver. There is nothing intuitive about Angular 2’s templating syntax and after all of the complaints people had with the confusing terminology and abstraction in the original version, you would think that the Angular 2 team would have wanted to take a more intuitive approach to its design.
The truth of the matter is, there was a massive discussion on Github about this. You can see Rob Eisenberg (who was on the core team for a few months) now working on his own framework Aurelia, proposing a very reasonable templating syntax that closely follows Javascript. Unfortunately a confusing and VERY ugly looking syntax using a weird combination of rounded () and square [] brackets was used, as well as asterisks.
I think this is where it went wrong for Angular 2, but in the scheme of things, there are other missteps in my opinion that contributed to the long development time and issues in the framework.
Compare the getting started setup for Angular 2 to Angular 1 and a library like React. Considerable tooling is required to work with Angular 2 which to be honest is nothing new for a modern front-end web application.
It definitely takes more than 5 minutes to get everything setup once you factor in things like NPM 3 is slow as fuck and slower network connections mean dependencies take longer to download, even Aurelia can fall into this trap. This is where React has the advantage over most modern frameworks in that it requires no tooling and has the fastest setup time of anything else out there currently.
I realise React is being thrown around a lot here and I am well aware that React is first and foremost a library, it is not a framework. However, React is being used for the same purposes as frameworks like Angular are and therefore, it is a framework by association (in my opinion).
Wrong Time
When you look at Angular 2 non-objectively, it is at least one year too late. While some seem to claim that because of ECMAScript 2015 only being finalised in mid-2015, that Angular could not release any earlier, Babel support for the specification was there way before it was finalised. Even as it stands, you still need Babel (unless you are purely using TypeScript).
In the time it took Angular 2 to hit beta, ReactJS has all but matured and Aurelia which was in development for less time (around a year) beat them to beta (with a smaller core team and very little resources).
The reason Angular 1 became so popular was that it was ahead of its time. It was unique at a time when other choices like Backbone just were not that appealing (at least to me) and Javascript was not very mature as it is now. The landscape is extremely competitive now, the fact that Facebook seems to be throwing considerable resources behind React and React Native really highlights just how different things are for Javascript frameworks and libraries in 2016.
So while some have high hopes of Angular 2 becoming just as popular as Angular 1 did, I doubt it will happen. The simplicity of React for me personally is more appealing, I never have to look at any kind of documentation when I use it, but if I do, the documentation is great. And as many of you know, I have been working with Aurelia for nearly a year now and love it (I even use it with React).
I don’t wish harm on Angular 2, but I think some serious poor decisions and the fact it took so long to just release a beta, the odds are not in their favour. Everyone who isn’t still using Angular 1 or waiting for version 2 has since moved on to use React or other libraries/frameworks that have released and matured in the time.