Why Is Front-End Development So Unstable?
Web frameworks are churn-y because they are incredibly leaky abstractions covering really awkward impedance mismatches. This means that they are never quite satisfactory - and that just to use one, you need to be capable of building a new one yourself.<p>Think of a typical web app. Your data exists:<p>1. As rows in a database, accessed via SQL<p>2. As model objects on the server, accessed via method calls and attributes<p>3. As JSON, accessed via many HTTP endpoints with a limited set of verbs (GET&#x2F;PUT&#x2F;POST&#x2F;DELETE)<p>4. As Javascript objects, accessed via (a different set of) method calls and attributes<p>5. As HTML tags, accessed via the DOM API<p>6. As pixels, styled by CSS.<p>--<p>Each time you translate from one layer to the next, there&#x27;s a nasty impedance mismatch. This, in turn, attracts &quot;magic&quot;: ORMs (DB&lt;-&gt;Object); Angular Resources (REST&lt;-&gt;JS Object); templating engines (JS Object&lt;-&gt;DOM); etc. Each of these translation layers shares two characteristics:<p>(A) It is &quot;magic&quot;: It abuses the semantics of one layer (eg DB model objects) in an attempt to interface with another (eg SQL).<p>(B) It&#x27;s a terribly leaky abstraction.<p>This means that (a) every translation layer is prone to unintuitive failures, and (b) every advanced user of it <i>needs</i> to know enough to build one themselves. So when the impedance mismatch bites you on the ass, some fraction of users are going to flip the table, swear <i>they</i> could do better, and write their own. Which, of course, can&#x27;t solve the underlying mismatch, and therefore won&#x27;t be satisfactory...and so the cycle continues.<p>Of these nasty transitions, 4&#x2F;5 are associated with the front end, so the front end gets the rap.<p>(I gave a lightning talk at PyCon two weeks ago, about exactly this - stacking this up against the &quot;Zen of Python&quot; and talking about some of the ways we avoid this in Anvil: <a href="https:&#x2F;&#x2F;anvil.works&#x2F;blog&#x2F;pycon18-making-the-web-more-pythonic" rel="nofollow">https:&#x2F;&#x2F;anvil.works&#x2F;blog&#x2F;pycon18-making-the-web-more-pythoni...</a>)