I feel the author is missing several points about Angular, and Angular 2 in general.
As a premise, I too feel Angular 2 is somewhat over-engineered, the template syntax is pretty much WTF and it's easily misused. Not to mention the docs are indeed pretty poor.
Other points are quite off, though. Wrapping native APIs is something meant for dependency injection, to make testing your components easier. It's not the result of NIH syndrome.
Moreover, TypeScript isn't supposed to be "safe" in any way. You'd be a fool to think so, since it's a *superset* of JavaScript (i.e., JS compiles as TS just fine). TypeScript is a tool to speed up development and catch the most common pitfalls in coding, especially large codebases.
In short, Angular - especially Angular 2 - isn't a framework for beginners. It requires time, dedication and experience. Just like RxJS and observables (remember they're coming to JavaScript natively sooner or later).
That being said, I feel we're going to abandon frameworks like Angular soon: they feel too much like a kitchen sink for web development. Better starting with a skeleton like React and adding libraries for what you need.
Also Vue is indeed great.
While I don't agree with every point he hits on; I think his overall conclusion is correct. Angular 2 is a terrible framework and should be avoided. It's by far the most complex JavaScript framework I have spent time with and I've used many others (Knockout, Ember, Angular 1, Sammy, etc...).
The learning curve is way to steep, and saying it "isn't a framework for beginners" doesn't justify it. I've been working with JavaScript for 15 years and programming for the past 20 years and the ramp up time on Angular 2 is ridiculous. With Angular 1 I understood enough of the framework within a week that I could feel confident building out a product. In a month's time with Angular 2 I still hadn't reached that level of confidence. In my opinion this alone should be a deal breaker for projects. Most teams are not going to be made up of all "senior" developers; if I don't feel some level of comfort in the framework within a short period of time how can I have confidence that junior developers are going to grok this?
I've done a couple of ng2 apps, and I think I could do more with it... that said, I still feel that React + Redux + redux-thunk and fetch gets you most of the way there, with material-ui or react-bootstrap being a great starting point... yeah the tooling isn't as flushed out, and there's some boilerplate... that said, jumping into an app is so much easier than ng2. (and imho ng1 as well).
I've talked a few people out of going with ng2 for new projects... it just isn't worth the trouble.
As for DI (from gp), what's wrong with require/import and testing using proxyquire?
That's your personal experience and personal experience depends on person and project. I had more than 3 months to work with pretty big ng1 codebase and I'm still unable to wrap my head around all these "@", ">", "=" and all ng1 cryptic syntax for property-binding.
At the same time I dived into ng2 easily (with prior RxJS and TS experience, though) w/o any guidance. Much easier than e.g. Ember.
Of course, ReactJS was even easier than ng2, but for any big app you'll need redux, redux-thunk, redux-middleware and all other bells and whistles, which makes actually learning ReactJS.
And after several years, saying I program in React will not mean anything, because do you use flux-saga (not a real thing, probably) or redux-thunk? And with Angular2+ there will be only one type.
Ng2 might never reach popularity of React, but it will have its niche in Enterprise world.
I can't agree on your opinion that knowledge about react and redux will become meaningless in the future. The key point about redux is, you don't have to learn yet another framework specific api. It's based purely on functional programming principles, so if you wrap your head about them once, you can build apps without any magic going on under the hood.
Learning about FP was extremely valuable for my career and made me for sure a better programmer too.
<speculation> Angular 1, while having its fair share of oddities and complexities and frustrations, is able to provide a measure of fun in how you work with the web. Without much ceremony and overhead, you can make something cool in relatively short time.
The reaction to Angular 2 within the development community has been more mixed than the reaction to Angular 1. Maybe this is because Angular 2 takes a lot of the fun out of web development. The concept count is way higher, the template syntax looks nasty compared to Angular 1, the project now seems to cater to architecture astronauts, etc.
Combine this with how parts of the tech ed community have a vested interest in making it seem you need to use Angular 2 (maybe they have a fee-based course or are promoting one thing or another). Yet what is the sweet spot for Angular 2? Does everything you do on the web now have to be in Angular 2? Do even most line-of-business projects have to be in Angular 2? You won't find as much discussion along these lines.
So maybe when an inflammatory headline like "Angular 2 is terrible" comes along, there are many who may have a lot of sympathy with that viewpoint, regardless of the merits of the content below the headline.
</speculation>.
Exactly. I found the article content to be technically low and sometimes incorrect, yet I can't help but upvoting this because I totally share the feeling of dispair and distress of the author.
I work on a large Angular 2 project for a year now and the development has been chaotic compared to my previous experiences with Angular 1. At the time, we decided to go with ES6 instead of TypeScript as the Angular team made this promise that we could have the choice of the language. The truth is, there is no documentation and tooling for non-Typescript users and migrating from ES6 to TypeScript on big projects is much more complicated than expected.
Currently we have major issues such as the bundle size (1.7 megabyte only for angular and related dependencies) and render performance in our views (fixed by changing ChangeDetectionStrategy and manually updating the view, which makes angular zones mechanism almost pointless). Debugging is also terrible since angular and zone call stacks are hiding all the valuable information in the exceptions.
Today I bitterly regret this choice and would not recommend Angular 2 to anyone. I worked with dozens of JS frameworks in the past but none of them has leaved me to such a state of mind of frustration and discouragement. I know it sounds like whining and my testimony may not be very constructive but it needed to be told. Angular 2 is terrible.
One of my experiences was pretty similar... I've been happy with React (w/ redux/thunks/fetch), and would recommend it whole heartedly over ng2... as a migration, ng1 to ng2 is even more painful than a planned rewrite path.
Most of my biggest complaints on ng2 have been addressed (although after rc1), and even then, it just feels weird in a day when we have a lot of tooling around npm, the stuff baked into ng2 just feels like too much, and too difficult to really use.
I guess the important point is the title. It should had been: I don't like Angular 2.
Which would have put things in perspective...
When evaluating a technology we should understand that our skills and subjective opinion also play an important role.
I think we should avoid this type of articles as it serves little to the Web progress or keeping constructive discussions.
I agree that the documentation is terrible; logic in the templates is an awful design choice and many other of his points resonated with me.
So I do think the article serves the community by addressing issues that developers encounter.
> beta libraries (Rx.js 5.0).
fixed => in 2.3.0
"dependencies": {
"core-js": "^2.4.1",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-rc.4",
"zone.js": "^0.7.2"
},
> I spent hours forcing Observables to behave before giving up using Observable.prototype.toPromise to transform the Observable back to a Promise and simply using Promise.all, which works much better than anything Rx.js offers.
why He spent hours ?
> Promise.all, which works much better than anything Rx.js offers.
???? what
> To create a component in Angular, you have to create separate files for JS, CSS and HTML. Depending on the setup, the JavaScript may need to be compiled from TypeScript and the CSS from SCSS or LESS, so that’s five files just for a single component. With that many files, you need a separate folder for each component.
Yes thx for that! its great to modular your shit easy to add easy to remove.
> Terrible Documentation
100% sure please Angular Team move your Ass
But Here my Comment: the NgModule fuckup is horrible i don`t know which dude have the idea but its dumb, it feels like a php framework from the 90`s!!!