Is Angular (^2) over-complicated and over-engineered?





59 votes · Closed

Critics say:

  • Typescript turns javascript into java
  • Release cycles are frustrating for devs
  • requires a ton of framework domain knowledge that isn't useful outside the world of enterprise web apps
  • requires learning about Rxjs observables for simple http requests
  • speaks its own language - structural directives, pipes, declarations, modules, injectors, services, view encapsulation, decorators

Proponents say

  • Angular CLI comes with many benefits such as pre-configured webpack with tree-shaking, live-reloading, local server, prod build
  • Typescript as an intrinsic benefit
  • All-inclusive: routing, http, etc is all included
  • Ideal for enterprise web apps
Start a personal dev blog on your domain for free and grow your readership.

3.4K+ developers have started their personal blogs on Hashnode in the last one month.

Write in Markdown · Publish articles on custom domain · Gain readership on day zero · Automatic GitHub backup and more

Jon's photo

I think Angular may have more of a perception of being over-complicated. However I think it has also matured considerably from the Angular 2 days, it's stabilized and resolved issues that used to occur back in 2016. The perception may persist, however I am not sure it is still warranted. I've had my fair share of struggles with Angular...but these days, they all seem to be "in the past", rather than "currently."

I would call Angular well-engineered, rather than over-engineered. It does include more out of the box for the end user, however you don't necessarily need to use it all. If you want to start simple and keep things simple, you can. RxJS is integrated and native, however if you aren't ready for them, you don't have to start with them. You can call .toPromise() on any observable to get back to familiar territory, and migrate to the full power and flexibility of RxJS as you learn it. Making Http requests is quite simple, and quite familiar if you need it to be.

Release cycles may have been difficult with Angular 2, during which time the CLI was immature and quite buggy. It definitely had some holes back then that left you stuck dealing with issues, however with the latest CLI builds (particularly in NG 5), the command line has become very stable and reliable. The NG5 CLI brings schemas into play, allowing command line plugins to extend the interface and make it more capable, such as adding support for generating ngrx code (see NRWL!) Managing an Angular application ultimately boils down to familiar git commands plus ng lint, ng test, and ng build, with the occasional ng generate here and there to scaffold new components, directives, etc. I've been amazed at the capability of ng build to reduce an 800+ megabyte project+node_modules folder down to just 2.7 megs, including partitioned lazy-loaded modules (often allowing the initial preload scripts and assets to be as little as a few hundred K.)

Regarding TypeScript. I wouldn't say it turns JavaScript into Java. It's a superset of JS, so you are always free to write plain old JS code without using any of the TS enhancements. However having the TS enhancements on hand when you need them is an added bonus. TS is just as dynamic and flexible as JS, with the added optional power of utilizing strong types if you want to and where they provide benefit. Types are structural, rather than nominal, declarative and dynamic themselves, in the true spirit of JS (and in great contrast to Java, imo). There are times when creating a class or class-like thing is necessary, and I find actually having actual classes allows for cleaner code than mocking up a pseudo class-like structure with vanilla JS property bags.

Angular is indeed its own domain with intrinsic language and design concepts. Making effective use of Angular does require learning it, and learning all of it does take time. However I honestly do not think that is any different than any other framework. Angular can be learned piecemeal. React may be a simpler, lighter framework...however when the time comes that you need something React does not offer, you either have to write something yourself (rather than simply learn a new aspect of the framework as with Angular), or find a third-party solution...which itself would also need to be learned. If you need a kitchen sink, then you need a kitchen'll end up with one one way or another. ;) The philosophy behind Angular is they will give you most of everything you might generally need, for simple or complex projects, including the kitchen sink, and you can learn and use what you need when you need it. One of the benefits of the Angular approach is that everything maintains a consistency and cohesion across the entire framework that you usually do not have when blending together many disparate frameworks, each one solving different problems in very different ways with different idioms, patterns, and philosophies.

Giovanni Montenegro's photo

Hi, I studied a lot of stuff, like React ecosystem or angular. Both are awesome. Someone say React is easy to learn and understand, angular is harder. But for my expirience both need time to be learned in a successful way, and to be mastered. Angular is a framework that gives you all the tools to create great app, with a great community behind. The difficulty depends on from how much time you are studing it, and using it (study and use in a real example are different). For every new language or framework you will learn, there will be always some obstacle. So the most important thing is: Do what you want, and what make you addicted to.

biplab malakar's photo

For starter angular is little bit difficult, because here u need to understand the structure and other stuff for execution of the project. After that angular is very easy you can do so many thing easily compare to other technology. I cant compare with react because I never work on react.

David's photo

It's an over-engineered piece of crap for java and .net people who pretend to be "full-stack developers" but have no idea how javascript works or what frontend development is.

Herman Van Der Blom's photo

hahaha, fully agreed with you. but i wanted a website that behaved like a SPA with mvc so i changed all anchor and form tags in ajax calls and now have a frankenstein SPA, may be a nice name as ajax mvc is better :-)