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.
The biggest mistake in Angular 2 project was they’ve dropped Eisneberg and his brilliant ideas. Now things are complicated so much that spaghetti is a boilerplate, syntax is just stupid, and it creates a lot more problems rather then solving while developing large SPA. Aurelia is emerging and making Angular 2 look really poor.
The fact that google made or use something really means squat huh?
I mean they still use Dart, GO and a few other things internally but externally no one seems to care.
But really, you wonder if they care about anything past 6 months….sorry you had 6 months, didnt become the next sliced bread, so lets try something else.
With react you kinda KNOW facebook care, just look how much they go on about it, use it, document it and so on and do they have a competing product for it? Although we’ll really see in a year or so.
I dont count on a single thing google own or make anymore, they dump stuff sooooooo often and as much as they like to go on about supporting devs, ya really gotta wonder.
Writing chrome extensions got a little painful in the early days until I stopped myself even looking at experimental features….its was just to painful when they decided to drop them.
And coz that sounds a bit like google bashing Id just like to point out that Im a bit of a google fan boy, freakn love em….just dont trust them to support anything!
Any thoughts on using React/Flux for a full SPA? I was thinking that React is really targeted to individual components that need to be very performant, but it seems like React is looking to be a standalone framework now. Is this trying to fit a square peg in a round hole, or would this be a viable option for an enterprise SPA?
Thanks.
Brian if it’s a long term project i won’t put any money on React they are still on early pre-alpha 0.14.5 and changing stuff every day and only fb internals knows what is going on there. When it will be stable 1.0-RELEASE then it will be a real game changer.
Can you please share your thoughts on Vue.js? Love your blog by the way 🙂
google trends: https://www.google.com/trends/explore#q=aurelia%20js%2C%20react%20js%2C%20angular%202&cmpt=q&tz=Etc%2FGMT-1
I think your article is not valuable. I tried React and now I’m trying Angular 2.0 – I don’t agree with you. React is already more than year and it’s NOT stable. Also I agree with “papasound” thoughts about React: “When it will be stable 1.0-RELEASE then it will be a real game changer”. But it will be too late because Angular 2 is already in beta.
Thanks for the comment Aro. It sounds like your experience might differ from others and you are entitled to disagree. I am not actually sure if you have used React, it is quite stable. I’ve built 3 applications with it and they are production applications. The release tag is irrelevant to the state of React in my opinion. It is more of a confidence and feature set thing than stability.
All software can be improved, not even Angular 2 in its beta state is any more or less stable. Your comment really makes no sense because you say it is too late because Angular 2 is already in beta, like the beta tag means it is stable. I think tags are irrelevant. Google’s Gmail was famously in beta for like 5 years and nobody ever had an issue with it.
As of React 0.14, Facebook consider it to be production stable as per this post. They say the following in the opening paragraph:
No offence to the Angular 2 team, but it took them almost two years to release a beta. They rewrote it so many times, kept changing direction and scope as well. Although React is smaller, it is by no means any less complex in terms of code complexity. The team working on React over at Facebook are incredibly talented and Facebook use this themselves further bolstering confidence in it being production stable.
React requires “no tooling”?
With Babel 5 maybe. But Babel 6 has dropped its browser.js inline transpiling tool. So it looks like React *does* require tooling now.
React has the most broken ecosystem in the world, there are like more than a dozen implementations of Flux and you say the stack is stable?
At least one of the guys that started React has left and has created yet another micro framework to handle the shitty React syntax. You have giant switch statements, that look like old Pascal code, etc…
React is far, very far from being perfect as is Angular or any other framework.
Be objective bro! Compare code, measure shit, benchmark it, state your case. Your article is clearly Troll fodder… and they are coming the Troll Wars are coming, hundreds, maybe thousands of Angular 2 vs React…
So sick of this shit, there is no perfect solution use what you think is best without needlessly bashing other shit.
I disagree. I prefer Angular 2.
I have tried angular 2 for a few hours and I could not get started with a single small example. It’s seems very difficult to me. And the fact that I can not migrate my old Angular 1 apps to Angular 2 has made me change to React.
@Hosar: Have you tried the Angular CLI to get startet? Or the ngUpgrade to convert an extisting application?
you may also join the discussion here
https://github.com/angular/angular/issues/8208
We can’t compare React with Angular2 one is a library the other a complete framework for web app, it doesn’t surprise me being a developer to set up my environment for 5mn.
Learning curve :
Angular with TypeScript/ES6 is a doozy when it comes to code clarity and readability.
Template syntax:
() and [] just diffeencite binding directions so you do that kinda nifty stuff : updating change in model and in UI
The magic of an open source project is you customise it : React syntax is already supported !
Wrong time : I agree … the project is getting late.
Aye, Angular 2 is a massive heap of over-engineered shite.
Angular2 is the cool framework………..
I’m not a angular evangelist, but I agree with, even Java is less verbose then angular 2.
Even angular 1 is funny to code.
I don’t go with this ng 2 hell anyway, how disgusting is develop in angular 2.
So much code to do a simple hello world. Imagina for a big project so. I can see a lot of projects now stopping to be coded in angular 2.
I will still use angular 1, but, if not supported anymore, others library like react and aurelia or polymer will follow the same fail.
Now is time for others libraries like Ember, and others, to fly.
I believe in the simple logic of a modern world.
We don’t wanna code in “assembly” anymore.
Cheers.
I am a newbie in web development; however, I can use and development something in AngularJS. Recently, I just know there is Angular2. I took a look at it, did the tutorial. (which I didn’t understand half of it because I haven’t learn web service and backend programming) I really dislike all the set up, and if some tiny bit of things didn’t work. It screws up everything. As you said, they over-engineering everything. They thought it would be faster better for people, but it is not true. It is just for them, people who create the program. It is too hard for people like me to learn it. It felt like I need to learn 20 other things in order to start playing with Angular2. AngularJs is much easier.
Trying angular2 rc5 after 2 years on angular1 on previous project. really painfull , really.
lot of web tutorial works for beta versions, or previous RC making it really hard to understand. even making a simple router is a problem , even for experienced web developers.
We a are almost in the last quarter of 2016 and Angular2 seems be be getting nowhere. Meanwhile half the world has already moved on to React. Sorry Angular2 you will not be missed.
” Meanwhile half the world has already moved on to React” … are you sure that you are not biased by your bubble here? The react movement looks at least as little as Angular2 to me (while they are overlapping, though, as A2 also makes use of rx…)
” Meanwhile half the world has already moved on to React” … are you sure that you are not biased by your bubble here? The react movement looks at least as little as Angular2 to me (while they are overlapping, though, as A2 also makes use of rx…)
I tried Angular 2 several times since last year, every time I felt so painful and disgusting, although I’m a very experienced programmer with 15+ years of experience of web development, I used lots of languages and libraries frameworks both back-end and front-end, and I’m a very experienced Angular 1 developer too. Typescript also is so ugly too, just like other Microsoft stuff. I love Javascript, hate anyone mention Typescript in front of me from now on!
I have given up, trying something else for my next project.
I find it funny that people who use React complain about “overengineering” when it comes to Angular 2. The people who created React have stuffed so much bullshit into what was supposed to be a simple vdom optimized render loop that people are now going back to the drawing board and releasing React alternatives that are a couple orders of magnitude lighter on load and render on average 7-8 times faster.
It seems the flaw in all these frameworks is simply human nature. Do these steps sound familiar?
1.) Create alternative to all shitty frameworks that is simple and useful
2.) Add some more shit to make it more “elegant and beautiful”.
3.) Repeat step 2 until the $%^& thing becomes completely unusable
4.) Repeat step 1
It’s an over-engineered pile that’s caught on only because the Google name is associated with it.
The truth is, literally, 10% of the code and markup could do the same job.
Also, AngularJS has totally lost the concept of abstraction with markup-only, blending attributes into the markup that only a programmer can work with.
The reason Angular 1 was popular was because it was a “no-code” framework that designers could use to add interactivity to their pages. Download a few directives, add them in, then just write HTML. Drop in a script tag, add an ng-app, and you’re away. A “hello world” is literally three lines long and requires no JavaScript at all. The whole thing was radically skewed towards the designer. Even the two-way binding was there so designers could just expect things to work. It was ultra-accessible.
Later we added user definable directives, transclusion, one-time binding, transclusion and isolate scopes to try to make it more industrial, but it was a poor fit. Angular 1 was always meant to be ultra designer-friendly at the expense of the machine running the code.
Angular 2 is out now, and it is heavyweight. It’s built for coders. Designers just don’t have a chance. It is pretty good, it works well. It’s logical and fast, and I found the learning curve OK, but you can only use it if you are already a very decent devops person, or are willing to cut and paste a lot of stuff on faith. A “Hello World” is now something like 100 lines long. The barrier to entry is high.
The tooling is all good stuff, but it’s not accessible. New coders and designers are right out of the picture, which I think is a pity, because the web should be democratic.
I’ll still use it of course, but it makes me sad that I can’t teach it to a novice coder anymore and watch the aha moment when we drop in an ng-model and a couple of curlies and make a repeater or a calculator.
to me, the worst is the lack of support
nobody answers, even if you provide a full project archive or a plunkr, I just get zero answer for my issues
I keep struggling with the same problems all the time, simple stuffs that is supposed to work just do not or fail intermitently
I even had no chance doing OTA following the official tutorials to the letter
ANGULAR JUST S@#KS…and I been developing web applications for 25 years, I never seen such a calamity
tried to bind [(value)] of a <input type="range" but seems like angular2's model doesnt update when i move the slider… spend entire day on this crap and nothing