The first demo in the Angular course is two attributes. An input tagged ng-model="name", a heading containing {{ name }}, and the heading rewrites itself as you type, keystroke by keystroke. No handler, no function, nothing of mine running at all. In June that would have been an event listener and an evening of my own code. Angular does it in markup.
This is AngularJS, version 1.6, loaded from a CDN script tag like everything else I've learned this year. The vocabulary arrives fast: ng-app to claim the page, controllers that hang data on something called $scope, ng-repeat to stamp out a list item for every element in an array and keep the list honest when the array changes. Underneath all of it is one idea, two-way binding: the data and the page stop being two things I reconcile by hand and become one thing the framework reconciles for me.
What's actually new is the size of the abstraction. For a year, every behavior on my pages existed because I typed it, and when something broke, the broken thing was in my file. Angular does work I can't see. When the demo runs, it feels like cheating. When it breaks, I'm slower than I was in June, because the part that failed is a part I never wrote. I assume that trade comes with every framework, so I'd rather learn its shape now.
About the version number. There's a newer Angular — 2 shipped last year, 4 this spring — and it's a rewrite, a different framework that shares the name. The internet is loud about not starting with the old one. My reasoning is shorter than the internet's: this is the course in front of me, the Fresno job listings I actually read still say AngularJS, and binding, templates, and directives are ideas I'll meet again wherever I land next.
— Lo