Angular. Its mere name is a hostile form on the tongue. Pronounce it slowly. /’eŋgjəlɚ/. The throat itself contorts around the hideous alien shape of this word, which means ugly, sharp, and artificial.
Here, I will illustrate the various ways in which my psyche was irreversibly traumatized by this pandemonium of demon-droppings, Google’s brainchild: the ANGULAR WEB DEVELOPMENT FRAMEWORK.
Have you ever had a brilliant idea for a weekend project, started it Saturday afternoon, and then steadily come to realize the project would take at least six months to fully implement? Google had a moment like that when they set out to document the inner workings of the ANGULAR WEB DEVELOPMENT FRAMEWORK. They then drip-fed an intern nothing but espresso for weeks until she had a Hello World code-along project that they were able to pass off as a complete documentation of their entire stack.
Angular’s actual documentation is more of a function, which I will pseudocode below.
Notice anything? Yes, that’s right: when bugfixing in ANGULAR, you need to specifically exclude the phrase `angularjs` from every one of your searches. You can’t append a 2, or a 7, or hope that Just `“ANGULAR”` will suffice to exclude the ill-fated first edition of this comprehensive software development stack. Needless to say this alone starts to grate after a while.
But then you get around to reading enough of these Stack Overflow “solutions” to people’s problems, and it begins to dawn on you that between the code you write and the code that runs in the browser, there isn’t just a compiler that will handily break all of your CSS for you, there’s a bona fide black box that demands you format your application in exactly such a way or else the entire thing will fail silently or worse, spit out an incorrect error message. You literally cannot trust anything that the ANGULAR WEB DEVELOPMENT FRAMEWORK tells you about what you have done wrong because not even it knows how its own system works. Did you declare an `EntryComponent` in the `Module` it’s intended to lazy-load into rather than the root `Module` where it loses all benefits of lazy-loading? Nein! Did you try to use Two-Way Data Binding™ rather than an arcane daisy-chain of `EventEmitter`s and `Subscription`s and `Service`s? Verboten!
The entire ANGULAR WEB DEVELOPMENT experience is like this. You run at full speed into a brick wall enough times, and eventually you learn to creep around at a snail’s pace, groping pathetically for any arbitrary obstacles that the FRAMEWORK might throw in your way. There is little in the world more frustrating than attempting to operate this monstrous and moody contraption that the allegedly smartest corporation in the world managed to excrete.
Imagine a car whose hood never opens, and whose dashboard says only DASHBOARD in blinding lights that don’t switch off. The car cannot be repaired once broken; it can only be replaced or modified from the outside in. It guzzles gas even when it’s not turned on. No service manual exists. If you want to know how it works, here’s the 5,280-page assembly guide. Good luck.
ANGULAR is slow. Writing apps takes a long time and the apps you create function very sluggishly once your app gets more complicated than `Hello World`. This would be acceptable if the ANGULAR FRAMEWORK conferred any benefits to the user or the programmer, such as failing gracefully in the event of a runtime error, or compiling quickly, or providing an increase to app security. But ANGULAR possesses none of these. In fact, it collapses into a wailing heap at the mere mention of an `Uncaught TypeError`.
Basically the only way to understand what Angular is actually doing is to read the millions of lines of source code the devs happily provide on GitHub. Since nobody actually does that, ANGULAR WEB DEVELOPERS typically settle for learning one or two design patterns that they know will not explode, and building an entire application out of them. Like a submarine built out of increasingly large doctor’s office inflatable gloves. It could probably work, given an endless supply of gloves and toddlers. Your only other option is to immerse yourself in the nonsensical, arbitrary madness that awaits the developer who attempts to learn how ANGULAR “works”.
I’ll tell you how it works. Your Components talk to your Services which relay data to your other Injectables via the Modules that your app Imports. What’s unclear about that? If you need clarification, go review the Material Design guidelines. They’ve got Components for everything you need to build. And keep your designs pixel perfect, please. It ought to be easy to do, since Material and Angular are designed by Google to supposedly work together nicely. And it will look and feel great when the padding on each list item eats up a third of the webpage, and opening a dropdown menu takes all of sixteen seconds. Don’t you feel freed from the constraints of an arbitrary and underdeveloped Internet?
Not a single part of ANGULAR’s design makes your code run faster. It increases only three things: complexity bloat, the time it takes to complete a simple feature, and — if you can somehow avoid driving yourself insane writing this spaghetti day in and day out — job security for you and your team. But be warned: the ANGULAR WEB DEVELOPMENT FRAMEWORK won’t do you any favors when a deadline is approaching.
The ANGULAR WEB DEVELOPMENT Experience
Open up your IDE of choice, coder! Enter your IntelliJ IDEA License Key to begin. A License Key is required to continue. Thank you for entering your License Key. Please select the Type Script “Linter” you would like to use to “Lint” your Type Script Code. The ANGULAR WEB DFGHSDFG FGSGDFSFDS runs Type Script, which is Java Script with Types. That makes it Good. You must use an IDE that is compatible with Type Script. Type Script will occasionally update. This will break your code and the code in your dependencies. This is expected. Rejoice in the time you are paid to pick through worming function calls! This is living!
Do not be alarmed if your dependency libraries occasionally issue breaking changes after altering a single property on a class you never use. You can just add a manual file editing step to every build process. Or you could freeze the library at a compatible version and lose all future improvements. Thank you for choosing Type Script and ANGULAR.
ANGULAR will helpfully mix fake HTML ELEMENTS into your real HTML ELEMENTS because the entire app is getting shredded to pieces by their AHEAD OF TIME COMPILER anyway, so what does it matter if they pollute a correct specification with a capricious impostor? When composing an HTML FILE, please remember to use the ANGULAR-specific markup language, which includes DIRECTIVES for making your code even more interesting to debug. You can even write your own ANGULAR DIRECTIVES if you’d like to further obfuscate the purpose of the characters you type. The most toothsome feature of all this advanced ANGULAR-flavored HTML is that tracing errors to their source is exponentially more difficult than it is in almost any other library, framework, or coding environment in living memory. They will literally feed you the wrong error message. You can search for a missing closing tag for days before you realize that the actual error was buried somewhere deep in the conditionals and mysterious imported directives, and to attempt to explain it to an outsider would inspire either a look of horror, or one of pity. Oh, also you can’t write same-page anchor links anymore because that functionality was too helpful. Enjoy trying to manually scroll with The Java Script!
It’s alright though, you will have plenty of time to contemplate your ill-advised decision to continue programming with this beautiful FRAMEWORK because every time you edit any minor piece of HTML you need to recompile the entire application. Hot reloading works on the baby stuff, but once your app develops any degree of complexity, you need to wait 60 to 300 seconds while the processor crunches through your entire codebase to add a single HTML class to a single element in a popup. Hours of your life soon disappear into the void. Hours spent staring at the console message: `92% chunk asset optimization`. I hope you like podcasts!
“But wait, you can avoid all that compilation if you use this technique!! [Stack Overflow link*]” Can’t use that technique because the ANGULAR WEB DEVELOPMENT FRAMEWORK manages to compile apps without errors in development mode that throw errors in production mode. So you need to build production, every single time, to catch every bug.
* Again: why isn’t this technique in the documentation to begin with?!
Do you hate writing legible CSS? ANGULAR provides all sorts of confusing ways to convert explicit styling rules to pseudo-HTML that needs to recompile every time you change an element’s class. You don’t even need to learn FLEXBOX… until, of course, the manager demands to know why your layout isn’t “up to standard” — MATERIAL DESIGN standard — and then suddenly, you realize you’ve been incanting nonsense words at a black box, and the entire application rests on a precarious assembly of assumptions that are about to collapse, but you can’t fix them without undoing weeks of work, but the deadline, the deadline!
Takeaways from One Year as a Slave to Google’s Sadistic Programming Hivemind
ANGULAR made me a better programmer because it taught me how to write a functional application while standing in a volcano, hopping across a lava pool on islands of solid rock. Anything I did that was not the most efficient way of doing it immediately resulted in an unbearable slowdown. Anything I attempted to do that was more complex than the most bare-bones solution of adhering Data Object A to Display Element B was liable to send the entire place up in flames. Yes — any error anywhere in your ANGULAR APPLICATION will cause the rest of the ANGULAR APPLICATION to behave unexpectedly. We ended up implementing a system where the app would just reload the page every time it noticed an uncaught error because it was simpler than attempting to filter through support tickets to determine whether a bug was its own error or the result of some other error that had quietly disappeared after leaving a crater in the functionality. Then they removed that fix: “Just don’t write errors. I thought you were using Test Driven Development?”
I will carry the knowledge of the ANGULAR WEB DEVELOPMENT FRAMEWORK with me for the rest of my life. There is no way to rid myself of it; it adheres to me more powerfully than any slime, and it clogs the wrinkles of my brain more thoroughly than any natural fluid could. I have no choice but to offer my services as an ANGULAR DEVELOPER if I am to feed my family. But there is hope. One day I may obtain a contract using another framework like React or Redux, or God willing a library that is unopinionated about the rest of your web stack like Vue. But for now I soldier on, clutching to the memories that I know are mine, fending off the invading hordes of Google-cepts that threaten to overtake the very essence of my identity. We live to fight another day.
Today I am working at Whiteboard Dynamics, where my time is less often spent Ctrl-C’ing the ANGULAR COMMAND LINE TOOL and more often spent writing clean, efficient, and functional code for products that don’t need to be rewritten every three months. All in all, I find the change to have restored several years to my life expectancy. We will write something in ANGULAR if you request — as I said, I will bear this cursed ability forever — but trust me: you’re better off going with a library people will enjoy working on. It’ll cost you less time and money, and you’ll get to keep your immortal soul.