Why Angular 2 (4, 5, 6) sucks

Published Mar 13, 2017Last updated Jun 16, 2017
Why Angular 2 (4, 5, 6) sucks

Angular team, I would like to thank you for the three years you spent on making the new and shiny Angular 2.0. But your new framework sucks. And I’ll tell you why.

I made a dozen of apps with Angular 1.x. Big ones like GoAbout website or real small ones like Sporteventa landing. I fell in love with Angular 1.x.

However, there is a very simple principle that I follow in all of my projects. The principle says:

Keep it simple, Stupid.

And that’s exactly where the new Angular has failed in so many ways.

Even though the learning curve for Angular 1.x was not ideal, the framework itself
was something more or less straightforward. It did not require TS, HTML compiler, CLIs, specific structure, webpack, Tree shaking, AOT compilation, and so on.

It just worked.

I was able to insert a bare angular.min.js in the file and start writing the code right away (even though I still used Gulp to livereload/build the app).

The whole idea behind a good framework is that you start with the simple stuff and make it more complicated only when you want it to be. The Angular team went in a completely opposite way.

Let’s discuss why Angular 2 is overly complicated in details:

1. It is written in Typescript

Don’t get me wrong, Typescript adds cool features to Javascript such as (obviously) types and much more. But do I actually need it? I’m not writing a software for NASA — I’m writing web apps, and I would like to be the one who decides what language I use. Not you. If I want to use TS, I will use it. But what If I simply wanted to make a simple prototype app where I don’t need TS?

Javascript became so popular because it was simple to learn, but with Types/Interfaces/Decorators, you're making it way too complex. Now I need to learn
more, to have an IDE for checking errors, and a compiler to make it JavaScript again. You made a Java out of Javascript.

P.S. I know that I can still kind of use JS with it. But in reality, it becomes close to impossible because I would have to deal with the fact that everything else around Angular is made with TS (like plugins or docs).

2. Angular-made HTML is not a valid HTML anymore

Just think about this next sentence: Angular 2 team had to write a compiler to
compile “Angular HTML” into HTML because some of the tags Angular uses are not
valid HTML.

No, that compiler does not make HTML more readable — Jade (aka Pug) does. The only purpose of the compiler is to change Angular tags into something more valid and to (also) add a bunch of garbage into your final HTML.

That's not it. The compiler gives an insanely useless traceroutes, if you ever have an error in HTML, well...good luck finding it. Oh, and should I add, the whole app won’t start until you find that mistake.

Also! You're no longer allowed to use Jade (Pug) in your new projects because, as I mentioned before, the HTML you write for Angular would not be valid for Pug (Jade) to compile it in github issue.

3. Angular takes an infinity to hot-reload your code

The thing I love the most about JS apps is that I can change a piece of code and see the results immediately in my browser.

With Angular 2.0, that is not true. Not anymore. I have a very powerful quad-core laptop and it still takes me 3–5 seconds to re-compile an empty Angular app. For already developed apps like ng2-admin, it takes roughly 10–12 seconds. You gotta be kidding me right?

Using our good old Angular 1.0 and a simple Gulp setup, I was able to concat all my code and reload the page in half a second.

The webpack configuration of Angular 2.0 is 300 lines long. It is so big and unreadable they had to make a separate config for a config. Nice, right?

4. Huge size of the initial app

This is something everyone has been moaning about for awhile now. Bare Angular 2.0 (+RxJS) weights around a megabyte. Yes, a megabyte. It is like 6 times more than previous Angular apps and 10 times more than what I expect my users to download over a 3G connection.

I know that Angular 4.0 will be smaller and I know that you can use Tree Shaking and
ahead-of-time compilation to make it smaller up to 3–5 times. But still.

Think about it. The initial Angular code was so big and complicated the team had to make it even more complicated just to make the code smaller! In other words, React and old Angular were both small enough that the team didn't have to deal with all these additional optimization techniques.

I can continue to add to the list but I think I’ve made my point.

Conclusion

Angular 2 is not that bad. It is completely modular, follows specific structure, uses types, and (in theory) allows you to write code with less errors.

But in my opinion, things should stay as simple as possible. Angular is far from simple. It just seems overly complicated.

I make web applications, not software for spaceships. The Angular team has introduced so much added (and unnecessary) complexity, which means:

  1. There are significantly more failure points. With the not-so-helpful traceroutes, Angular 2 becomes a headache that causes developers to waste their precious time.
  2. It is hard to adjust the framework for specific needs. Developers might start to fight the framework instead of writing the actual code.
  3. It has an extrememly steep learning curve. Sometimes I work with much less experienced developers — I want them to be able to make changes without going through 200 tutorial videos.

Would I need all these complexities in my small private projects? Ehm, probably
not. In my company’s medium-sized projects? No, I don’t think so. In a big enterprise-sized apps where 10 teams are working on the same app? Yes, maybe all of these complexity/modularity/precompilation would be good things to have. But then again,if these teams decide to use other frameworks, they might not need so many people in the first place 😉

I would be more understanding if it was impossible to make a good and stable webapp without all the complexities. But as we all know, it is possible and evit's a lot easier to make good apps without all the complexities. Just take a look on other frameworks like Aurelia, Vue.js (my current favorite), or on something React-based.


This tutorial was originally posted by the author here. This version has been edited for clarity and may appear different from the original post.

I'm available for hire & tutoring! Check the details [here (https://artemgolovin.com) or give me a message through Codementor | Javascript, Angular.js, Vue.js, React, Adonis, Express and more

Discover and read more posts from Artem Golovin
get started
Enjoy this post?

Leave a like and comment for Artem

22
17
17Replies
Robert Thompson
8 hours ago

I recently accepted a job where I’m migrating Knockout applications to Angular 4 and I’m more than likely in over my head. What ever happened to programming in core Javascript and learning a framework if you needed it? Angular 2+ is not a framework, it’s an entirely new language. I’ve been programming for around 6 years, I have experience in Javascript, jQuery, C#, and some Python, but Angular is an entirely different beast. It’s too over complicated. I shouldn’t have to sell my soul to Balthazar just to be able to make a web app.

nni123
a month ago

I am having same issues as author describe. If you are Java developer, then angular make sense, but it is more complicated than Java…funny I like vue.js & Aurelia but no jobs. Vue front situation is changing not much for Aurelia. Angular has more UI libraries & article online that helps when you are using an open-source framework. I have developed a prototype in angular 4 & vue.js for comparison vue is faster.

Still like adobe flex as a framework but the flash runtime was a nightmare (finally adobe going to kill in 2018)

James McArthur
2 months ago

I only discovered angular 1 a few months ago. I love it. It’s make my life easier therefore better . I can do cool stuff quickly that I have spent years doing slowly . It’s clever and easy to fit into existing app to enhance it

So now using ionic for the app version of my project thinking will use angular 2 as it must be better .

I HATE IT. What the f no filters . I see why but so what let me choose to use them if I want . Docs suck - this is worst part .

So many imports and reload sucks takes ages . This reminds me or writing a Java desktop app in Textpad in 2000 .

So my question is what do I do ! What’s are alternative or will 1 continue to be developped.

Show more replies

Get curated posts in your inbox

Read more posts to become a better developer