Likes & Dislikes - Angular

Angular is Google's children in the frontend development landmark. It's one of the most opinionated frameworks. It's even forcing you to use TypeScript. I'm using it for about a year every day at my work. Check out my thoughts about it.

Likes

TypeScript

We could probably find many people that hate TypeScript with a passion. Though, if there is one framework for which the most popular JavaScript superset is a perfect fit, it must be Angular. The class-based paradigm, which for me often resembles Java structure, makes typing system a must-have. 

It's much easier to control data flow around your components, services, directives while there are type definitions. And the integration of TypeScript to every bit of code produced by Google is an absolute blast. Thanks to it, it's much easier to prevent errors in these enterprise-sized applications.

Reusability of code

The modular architecture that Angular forces make the developer produce much more reusable code. We can inject anywhere all of our components and services and reuse them across modules. We don't even need to think about it because that's the default way. Angular encourages that.

CLI

The command-line interface provided with Angular is one of the most powerful one across all frameworks. You can generate boilerplate for many parts of your application, add new features or update the whole app. 

Furthermore, you do not need to care about the development environment. Everything will be ready for you after using the CLI to generate the application. Unit and E2E tests, dev server, bundling, linting. Everything that you could dream off. 

Powerful ecosystem

As I said before, Angular is currently one of the most opinionated frameworks. It shows you "the" way to structure your folders, organize your modules, build forms and validate them. For nearly every feature that you will ever need to add to your app, there is probably a package made by Google. 

That helps a lot when you are looking for help. It's much easier because you will probably find solutions in a similar codebase to yours. Whether you have some problem with routing or animations, you can be 99% sure that anybody helps you use the same package to achieve that.

Moreover, you don't need to worry about choosing the best package to achieve something. You don't need to worry that the library that you picked will not be maintained anymore. To add to this, CDK and Material are one of the best packages that I ever saw. 

Because of the opinions that Angular brings in, most of the codebases will look similar. So once you get a grasp of Angular, you will easily find yourself in most of them.

Dislikes

Being opinionated

For every that being opinionated bring, there is probably a con as well. If you don't like "the" way provided by Angular or it's not the best suit for you, bad luck. It's hard to swap some parts of Angular, and there are not many alternatives for others. Moreover, these opinions are not the golden ones in every scenario.

Steep learning curve

For me, Angular is one of the most complicated frameworks. You need to learn TypeScript, class-based paradigm, dependency injection, RxJs, and many other things. 

Furthermore, I often feel that some things are much more complicated than they could be. Sharing data between components or reacting to some change in another component tree is not the easiest thing.

The past

Angular is one of the most dreaded frameworks if you ask people. And most of the bad reputation comes from the past. When Google decided to throw away the AngularJS and build Angular 2 from scratch, they divided the community. 

AngularJS was very different in many aspects. Moreover, migration isn't a breeze. Many companies still face the consequences of the AngularJS deprecation and the technical debt that comes with it.

Summary

Angular is one of the frameworks that, in my opinion, can't be blindly recommended to everyone. It's very monolithic, opinionated, and we should use it for intended things.