<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Frédéric Bonnet</title>
    <description>The latest articles on DEV Community by Frédéric Bonnet (@fredericbonnet).</description>
    <link>https://dev.to/fredericbonnet</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F145170%2F23d9c2d1-9ecd-44c0-ac79-8a1c42f67f05.jpeg</url>
      <title>DEV Community: Frédéric Bonnet</title>
      <link>https://dev.to/fredericbonnet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fredericbonnet"/>
    <language>en</language>
    <item>
      <title>The Third Age of Web Development</title>
      <dc:creator>Frédéric Bonnet</dc:creator>
      <pubDate>Fri, 01 Jan 2021 21:36:57 +0000</pubDate>
      <link>https://dev.to/fredericbonnet/the-third-age-of-web-development-kgj</link>
      <guid>https://dev.to/fredericbonnet/the-third-age-of-web-development-kgj</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image: A sketch of primate origins from Charles Darwin's notebook, dated 21 April 1868&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Third Age of web developments is the period that follows the &lt;a href="https://en.wikipedia.org/wiki/Browser_wars#Second_Browser_War_(2004%E2%80%932017)"&gt;Second Browser War&lt;/a&gt;, after Microsoft Internet Explorer lost its dominance on the web browser market (2012-today).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Postmodernist Period and the Second Browser War
&lt;/h2&gt;

&lt;p&gt;The transition between the &lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a#the-modernist-period"&gt;Modernist&lt;/a&gt; and Postmodernist periods is marked by the intense pace at which new web frameworks and practices emerge, evolve, and fall from grace. Non-imperative paradigms became mainstream: asynchronous, reactive, functional... The JavaScript-based &lt;a href="https://en.wikipedia.org/wiki/AngularJS"&gt;AngularJS&lt;/a&gt; was completely rewritten to become &lt;a href="https://en.wikipedia.org/wiki/Angular_(web_framework)"&gt;Angular 2&lt;/a&gt;, a &lt;a href="https://en.wikipedia.org/wiki/TypeScript"&gt;TypeScript&lt;/a&gt;-based framework. Between 2015 and 2020, 9 versions of the Google-backed framework were published, once every 6 months on average! Between 2016 and 2020, Facebook published 3 major versions of its &lt;a href="https://en.wikipedia.org/wiki/React_(web_framework)"&gt;React&lt;/a&gt; framework, no less than 20 minor versions, and version 16.8 introduced a major paradigm shift with &lt;a href="https://reactjs.org/docs/hooks-intro.html"&gt;React Hooks&lt;/a&gt;. &lt;a href="https://en.wikipedia.org/wiki/Vue.js"&gt;Vue.js&lt;/a&gt;, released in 2014, soon became the third major frontend option between Angular and React. New frameworks and libraries were born every day. Web developers, who used to follow browser releases as they adopted new features, now preceded them with transpiling tools such as &lt;a href="https://en.wikipedia.org/wiki/Babel_(transcompiler)"&gt;Babel&lt;/a&gt; that seamlessly transform not-yet-supported language features, Web APIs (sometimes experimental!), and new languages like TypeScript into backward-compatible code.&lt;/p&gt;

&lt;p&gt;On the frontend, the Modernist &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPA&lt;/a&gt; was still king, however the shortcomings of this model became more and more apparent as it rose to domination: SPAs make client-side scripting a strong requirement, they have to download large assets at startup, display the dreaded "White Screen of Death" to slower or older Web clients, don’t allow deep linking, can’t be indexed by search engines, and are often too resource-hungry for low-end terminals such as mobile phones or smart TVs, let alone outdated browsers on non-upgradable systems. Simply put, the basic principles of the SPA model are in direct contradiction with the core philosophy of the web: &lt;a href="https://en.wikipedia.org/wiki/Graceful_degradation"&gt;Graceful Degradation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Postmodernist period also saw the rise of the mobile web. When Apple released the first iPhone in 2007 with its &lt;a href="https://en.wikipedia.org/wiki/WebKit"&gt;WebKit&lt;/a&gt;-based mobile &lt;a href="https://en.wikipedia.org/wiki/Safari_(web_browser)"&gt;Safari browser&lt;/a&gt;, mobile Web usage was marginal. In 2015, as mobile Web browsers rose to 30% of the market, Google announced the "&lt;a href="https://en.wikipedia.org/wiki/Mobilegeddon"&gt;Mobilegeddon&lt;/a&gt;", a major revision of its ranking algorithm to favor mobile-friendly sites with new metrics based on ergonomics and performances. Performance audits became the daily life of Web developers where &lt;a href="https://web.dev/interactive/"&gt;Time-To-Interactive (TTI)&lt;/a&gt; is a matter of life and death on the race to the top pages of Google Search results.&lt;/p&gt;

&lt;p&gt;Faced with this new reality, frontend frameworks started to introduce performance improvements such as &lt;a href="https://en.wikipedia.org/wiki/Ahead-of-time_compilation"&gt;Ahead-of-Time compilation (AoT)&lt;/a&gt;, brought back the good old &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;SSR&lt;/a&gt; model of past periods with a reversal of workflow and a bit of rebranding (for example &lt;a href="https://angular.io/guide/universal"&gt;Angular Universal&lt;/a&gt; is SSR for &lt;a href="https://en.wikipedia.org/wiki/Angular_(web_framework)"&gt;Angular&lt;/a&gt; components), and reinvented techniques that had been available since the dawn of the Web: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading"&gt;lazy loading&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Code_splitting"&gt;code splitting&lt;/a&gt; are features that plain Web pages get for free but for which SPAs require explicit design. Web development went full-circle, old is the new new, only more complex.&lt;/p&gt;

&lt;p&gt;The mobile revolution also had a major impact on backend architecture. The monolithic backend of previous periods struggled to scale under the massive traffic induced by new mobile applications. &lt;a href="https://en.wikipedia.org/wiki/Microservices"&gt;Microservice architectures&lt;/a&gt; split the monolith into separate processes with fine-grained responsibilities, distributed over large clusters or cloud services and orchestrated with dedicated middleware. And web clients rely more and more on third-party services for social authentication or web-native databases such as &lt;a href="https://en.wikipedia.org/wiki/Firebase"&gt;Firebase&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The intense competition of the Postmodernist period pushed minor browser vendors out of business or forced them to adopt their competitor’s engines, hurting the diversity of the Web clients. &lt;a href="https://en.wikipedia.org/wiki/Opera_(company)"&gt;Opera&lt;/a&gt; gave up its own &lt;a href="https://en.wikipedia.org/wiki/Presto_(browser_engine)"&gt;Presto&lt;/a&gt; engine in 2013 for Google’s &lt;a href="https://en.wikipedia.org/wiki/WebKit"&gt;WebKit&lt;/a&gt; implementation, soon replaced by &lt;a href="https://en.wikipedia.org/wiki/Blink_(browser_engine)"&gt;Blink&lt;/a&gt;. Even &lt;a href="https://en.wikipedia.org/wiki/Firefox"&gt;Firefox&lt;/a&gt; suffered from the situation despite having one of the best engines on the market, &lt;a href="https://en.wikipedia.org/wiki/Gecko_(software)"&gt;Gecko&lt;/a&gt;. In 2020 the web is still in its Postmodernist period, and essential segments of the Web ecosystem are now at the hands of big tech companies such as Google, Apple, Facebook and Amazon: from frontend frameworks to cloud services, from mobile platforms to Web browsers, each pushing their own agenda. JavaScript has become the most popular language in the world, and web engines have never been faster. But the exponential growth of the JavaScript ecosystem, and the increasing complexity of the Postmodernist Web model, brought many developers to a quasi-burnout state, a phenomenon known as "&lt;a href="https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4"&gt;JavaScript fatigue&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS &lt;a href="https://en.wikipedia.org/wiki/Safari_(web_browser)"&gt;Safari&lt;/a&gt; (2007)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oauth.net/2/"&gt;OAuth 2.0&lt;/a&gt; (2012)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Babel_(transcompiler)"&gt;Babel&lt;/a&gt; (2014)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ecma-international.org/ecma-262/6.0/"&gt;ECMAScript 6&lt;/a&gt;-&lt;a href="https://www.ecma-international.org/ecma-262/11.0/"&gt;11&lt;/a&gt; (2015-2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/JSON_Web_Token"&gt;JSON Web Token&lt;/a&gt; (2015)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Angular_(web_framework)"&gt;Angular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/React_(web_framework)"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Vue.js"&gt;Vue.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Redux_(JavaScript_library)"&gt;Redux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/GraphQL"&gt;GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Google_Lighthouse"&gt;Google Lighthouse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Spring_Framework#Spring_Boot"&gt;Spring Boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Redis"&gt;Redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Firebase"&gt;Firebase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fr.wikipedia.org/wiki/Amazon_Web_Services"&gt;Amazon Web Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Google_Cloud_Platform"&gt;Google Cloud Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Microsoft_Azure"&gt;Microsoft Azure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Docker_(software)"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Kubernetes"&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Visual_Studio_Code"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/IntelliJ_IDEA"&gt;IntelliJ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Postmodernist Web model
&lt;/h3&gt;

&lt;p&gt;Postmodernist Web applications are engineered to scale under massive traffic and from a wide range of clients, building on the Modernist Web model while addressing its shortcomings.&lt;/p&gt;

&lt;p&gt;Postmodernist Web clients focus on improving user-centric metrics such as &lt;a href="https://web.dev/interactive/"&gt;Time-To-Interactive (TTI)&lt;/a&gt;, especially on low-end devices, by implementing techniques such as &lt;a href="https://en.wikipedia.org/wiki/Ahead-of-time_compilation"&gt;Ahead-of-Time compilation (AoT)&lt;/a&gt;. Application code uses non-imperative paradigms such as &lt;a href="https://en.wikipedia.org/wiki/Functional_programming"&gt;functional&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Functional_reactive_programming"&gt;reactive&lt;/a&gt; programming. Build tools also add metrics and budgets to limit the weight of bundled assets for low-bandwidth mobile clients, and other techniques such as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading"&gt;lazy loading&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Code_splitting"&gt;code splitting&lt;/a&gt; help further reduce initial page load times. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"&gt;Service workers&lt;/a&gt; help download and cache assets in the background for offline use.&lt;/p&gt;

&lt;p&gt;On the server side, Postmodernist Web frameworks reintroduce some of the &lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-classical-period"&gt;Classical Web&lt;/a&gt; techniques for better &lt;a href="https://en.wikipedia.org/wiki/Search_engine_optimization"&gt;SEO&lt;/a&gt; and discoverability, such as &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;Server-Side Rendering (SSR)&lt;/a&gt;. Many responsibilities of traditional web servers are delegated to separate services: &lt;a href="https://en.wikipedia.org/wiki/Content_delivery_network"&gt;Content Delivery Networks (CDNs)&lt;/a&gt; for static web assets, &lt;a href="https://en.wikipedia.org/wiki/Single_sign-on"&gt;Single Sign-On servers (SSO)&lt;/a&gt; for authentication, etc. These services can be co-located with the backend or provided by third-parties. The backend itself can be split into microservices for asymmetric scalability between application subdomains. Complexity shifts from applicative code to service orchestration and infrastructure.&lt;/p&gt;

&lt;p&gt;Core value: scalability&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend frameworks with SSR support and integrated toolchains&lt;/li&gt;
&lt;li&gt;Mobile-friendly SPAs with compile-time optimizations&lt;/li&gt;
&lt;li&gt;OAuth-based login&lt;/li&gt;
&lt;li&gt;Web services with token-based authentication such as JWT&lt;/li&gt;
&lt;li&gt;Modular, distributed backends with orchestration middlewares&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Neoclassical Period
&lt;/h2&gt;

&lt;p&gt;On the opposite side of the web development industry, new solutions began to emerge in the early 2000’s with the promise of a return to the past simplicity of the Web. Like the &lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-classical-period"&gt;Classical period&lt;/a&gt;, the Neoclassical period is centered around content creation, whereas the &lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a#the-modernist-period"&gt;Modernist&lt;/a&gt; and Postmodernist periods were focused on application development. Blogs became the major support of this revival: from a handful of blogs at the acquisition of the &lt;a href="https://en.wikipedia.org/wiki/Blogger_(service)"&gt;Blogger platform&lt;/a&gt; in 2003, the &lt;a href="https://en.wikipedia.org/wiki/Blogosphere"&gt;Blogosphere&lt;/a&gt; grew exponentially with hundreds of millions of blogs and millions of articles posted everyday. In parallel, &lt;a href="https://en.wikipedia.org/wiki/Content_management_system"&gt;Content Management Systems (CMS)&lt;/a&gt; such as &lt;a href="https://en.wikipedia.org/wiki/WordPress"&gt;WordPress&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Drupal"&gt;Drupal&lt;/a&gt; were increasingly used to power web sites. In 2020, roughly one out of three websites runs WordPress.&lt;/p&gt;

&lt;p&gt;In reaction to the &lt;a href="https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4"&gt;JavaScript fatigue&lt;/a&gt; of the Modernist and Postmodernist Web, many web developers began to seek alternatives to the dominant &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPA model&lt;/a&gt; on the client side and to traditional blogging platforms on the server side. The former were too reliant on client-side scripting, a major departure from the &lt;a href="https://en.wikipedia.org/wiki/Graceful_degradation"&gt;Graceful Degradation principle&lt;/a&gt; the web was built on, whereas the latter were too resource-intensive on the server side with database storage and &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;SSR&lt;/a&gt; templating systems at a time of massive traffic and environmental consciousness.&lt;/p&gt;

&lt;p&gt;The Neoclassical period is a return to the &lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-early-days"&gt;original vision of the web&lt;/a&gt;, where the web browser served both as a client and an authoring tool. Web content creation should be accessible to anyone and not restricted to professional developers. Additional features should be easy to add. Third-party libraries should be easy to integrate. Tools should be simple to use and easy to understand. Frameworks should not be over-engineered for general-purpose application development, but should concentrate on specific goals and features. The build process and its output should be transparent and controllable. Backends and web services should only be used when required. Websites should gracefully degrade.&lt;/p&gt;

&lt;p&gt;Launched in 2008, &lt;a href="https://en.wikipedia.org/wiki/Jekyll_(software)"&gt;Jekyll&lt;/a&gt; was the first modern &lt;a href="https://en.wikipedia.org/wiki/Web_template_system#Static_site_generators"&gt;Static Site Generator (SSG)&lt;/a&gt; that combined the old principles of web asset generation with modern techniques and toolings. With a bunch of &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; files (a text format much easier to author than HTML), one could generate a complete, modern, nice-looking website with almost no effort from a stock or custom template, and host it on cheap static hosting services such as &lt;a href="https://en.wikipedia.org/wiki/Netlify"&gt;Netlify&lt;/a&gt;. The templates were easy to modify to fit one’s tastes, add new features, or integrate third-party services such as comment systems. Web developers could use their skills to write their own templates and turn their SSG blog into a professional portfolio. Soon other tools followed: basic SSGs such as &lt;a href="https://en.wikipedia.org/wiki/Hugo_(software)"&gt;Hugo&lt;/a&gt; and &lt;a href="https://www.11ty.dev/"&gt;Eleventy&lt;/a&gt; use a Jekyll-like model, whereas advanced SSGs such as &lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt;, &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt; or &lt;a href="https://vuepress.vuejs.org/"&gt;VuePress&lt;/a&gt; bridge the gap between SPA frameworks and CMS by generating dynamic sites from static content. Once a developer tool with command-line interfaces and Git workflow, SSGs are now full publishing chains with continuous delivery from the source content repository to the hosting service. Online one-click installs and CMS-like editors push the model even further.&lt;/p&gt;

&lt;p&gt;On the server-side, the rise of cloud computing led to the emergence of the &lt;a href="https://en.wikipedia.org/wiki/Function_as_a_service"&gt;Function as a Service model (FaaS)&lt;/a&gt;, also known as &lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;Serverless computing&lt;/a&gt;. Opened in 2014, &lt;a href="https://en.wikipedia.org/wiki/AWS_Lambda"&gt;AWS Lambda&lt;/a&gt; became the first generally-available FaaS service with pay-as-you-go billing, autoscaling, and support for multiple runtime environments. AWS Lambda defined a backend architecture model, with monolithic or even microservice server processes being split into stateless, short-lived functions that could scale independently. The Serverless model soon became a cheap and easy way to enrich static sites with server-side code.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.rssboard.org/rss-specification"&gt;RSS 2.0&lt;/a&gt; (2002)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Google_Cloud_Platform"&gt;Google Blogger service&lt;/a&gt; (2003)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; (2004)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Jekyll_(software)"&gt;Jekyll&lt;/a&gt; (2008)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/AWS_Lambda"&gt;AWS Lambda&lt;/a&gt; (2014)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/WordPress"&gt;WordPress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Drupal"&gt;Drupal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Jekyll_(software)"&gt;Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Hugo_(software)"&gt;Hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/GitHub"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/AWS_Lambda"&gt;AWS Lambda&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Neoclassical Web model
&lt;/h3&gt;

&lt;p&gt;The Neoclassical Web is centered on content creation. It does not reject modern tools and techniques but makes an enlightened and parsimonious use of them. It also acknowledges the new reality of the web ecosystem with the ubiquity of mobile web clients and the exponential growth of web traffic. To do so, it embraces the static web page model where web assets are either authored directly or produced by &lt;a href="https://en.wikipedia.org/wiki/Web_template_system#Static_site_generators"&gt;Static Site Generators (SSG)&lt;/a&gt; from templates and raw content files (such as &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; files for example), before being stored on a static HTTP server or a &lt;a href="https://en.wikipedia.org/wiki/Content_delivery_network"&gt;Content Delivery Network (CDN)&lt;/a&gt;. When needed, dynamic features can be added as client scripts, and backend logic can be implemented as &lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;serverless functions&lt;/a&gt; hosted on cloud FaaS services such as AWS Lambda or Google Functions. The resulting sites conform to the newest Web standards and practices, and can even take the form of &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPAs&lt;/a&gt;, though most static sites are traditional MPAs for better &lt;a href="https://en.wikipedia.org/wiki/Search_engine_optimization"&gt;SEO&lt;/a&gt; performances.&lt;/p&gt;

&lt;p&gt;The combination of Static Site Generation, client-side JavaScript enhancements, static hosting on CDNs, serverless backends, and third-party APIs, constitutes the &lt;a href="https://jamstack.org/"&gt;JAMStack model&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Core value: content as code&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source content uses flat file formats such as Markdown, managed with version control software such as Git&lt;/li&gt;
&lt;li&gt;SSGs produce web assets from source content&lt;/li&gt;
&lt;li&gt;Web assets hosted on static Web servers and CDNs&lt;/li&gt;
&lt;li&gt;Publishing is either manual or automated with CI/CD software pipelines&lt;/li&gt;
&lt;li&gt;If needed, backend is provided as Serverless functions hosted on cloud services&lt;/li&gt;
&lt;li&gt;Client code can access third-party services third-party APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Metamodernist Period
&lt;/h2&gt;

&lt;p&gt;As web applications grew and became more complex, frontend frameworks made this complexity manageable, at the expense of their own complexity. But the most dramatic loss of the Postmodernist period is readability. The Web has always been a transparent platform. When websites were hand-crafted, their source code was available for anyone to read. How many of us web developers learned to code by reading website source codes? The Postmodernist Web is not human-readable anymore, but machine-readable: it is transpiled, tree-shaken, minified, bundled and distributed as an unreadable mess of keywords and special characters. And with readability comes learnability. Web development is no longer about the web standards, it is about mastering the intricacies of the most popular frameworks in the shortest possible time, because these frameworks evolve so fast that you often have to unlearn the old features and practices of previous versions in favor of the new ones. And since multiple frameworks cannot coexist easily in the same application, choosing the right one has become a career choice. The web is no longer a platform but a target for competing technologies, just like during the &lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a#the-first-browser-war-and-the-dark-ages"&gt;Dark Ages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Metamodernist Web is the most recent iteration in the history of Web development. It rejects the framework monoculture and the unsustainable pace of the &lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a#the-modernist-period"&gt;Modernist&lt;/a&gt; and Postmodernist models in favor of web-native solutions with a simple motto: &lt;strong&gt;Use The Platform&lt;/strong&gt;. Rather than generic, full-featured frameworks, websites and applications should aggregate and integrate feature-specific solutions as needed. But above all, they should be resilient, inclusive and environmentally responsible, with a minimalist footprint, manageable complexity and transparent dependencies.&lt;/p&gt;

&lt;p&gt;Metamodernism acknowledges that many desirable features of frontend frameworks were designed at a time where the web platform lacked native support, but new standards have emerged since then, and as the web evolves and becomes more powerful, many common development tools and practices are becoming &lt;a href="https://itnext.io/your-single-page-app-is-now-a-polyfill-7881fb01694e"&gt;legacy and even counter-productive&lt;/a&gt;. New ECMAScript language features push the &lt;a href="http://vanilla-js.com/"&gt;Vanilla JS&lt;/a&gt; developer experience closer to transpiled languages such as TypeScript. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules"&gt;ECMAScript Module support (ESM)&lt;/a&gt; in all recent browsers enables buildless and bundleless workflows with productivity on par with older development servers: &lt;a href="https://www.snowpack.dev/"&gt;Snowpack&lt;/a&gt; for example supports live reload, Hot Module Replacement (HMR), etc. And services such as &lt;a href="https://www.skypack.dev/"&gt;Skypack&lt;/a&gt;, &lt;a href="https://unpkg.com/"&gt;unpkg&lt;/a&gt; and &lt;a href="https://cdnjs.com/"&gt;cdnjs&lt;/a&gt; allow for direct integration of third-party &lt;a href="https://en.wikipedia.org/wiki/Npm_(software)ications."&gt;npm&lt;/a&gt; modules as web page script elements without having to install them locally. Dependency- and toolchain-free development is possible again.&lt;/p&gt;

&lt;p&gt;On the client-side, monolithic component-based frameworks are no longer required now that &lt;a href="https://en.wikipedia.org/wiki/Web_Components"&gt;Web Components&lt;/a&gt; are available. Web Component libraries such as &lt;a href="https://en.wikipedia.org/wiki/Polymer_(library)"&gt;Polymer&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Ionic_(mobile_app_framework)"&gt;Ionic&lt;/a&gt; can be used with any frontend framework or even with plain HTML. &lt;a href="https://martinfowler.com/articles/micro-frontends.html"&gt;Micro-frontend models&lt;/a&gt; are more and more popular. Script-based practices that duplicate native web functions are discouraged, such as CSS-in-JS and animations.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"&gt;Service Worker API&lt;/a&gt; enhances the client-side model even further by off-loading technical code from the much-solicited main thread to a dedicated thread: offline mode, caching, prefetching, persistence, push notifications, etc., all these features can now be implemented more efficiently and with &lt;a href="https://en.wikipedia.org/wiki/Progressive_enhancement"&gt;Progressive Enhancement&lt;/a&gt; in mind. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Manifest"&gt;Web App Manifests&lt;/a&gt; bring web applications even closer to native desktop and mobile apps with application icons, installability, sandboxed execution, background and offline modes, etc. The combination of these technologies forms the core of the &lt;a href="https://en.wikipedia.org/wiki/Progressive_web_application"&gt;Progressive Web Application model (PWA)&lt;/a&gt;. And with the support of &lt;a href="https://en.wikipedia.org/wiki/WebAssembly"&gt;WebAssemby (Wasm)&lt;/a&gt; as a compilation target for system languages such as C, the web finally becomes a truly universal application platform.&lt;/p&gt;

&lt;p&gt;Launched in 2016, &lt;a href="https://en.wikipedia.org/wiki/Svelte"&gt;Svelte&lt;/a&gt; is at the crossroads of the &lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a#the-modernist-period"&gt;Modernist&lt;/a&gt;, Postmodernist and Neoclassical Web models. Svelte combines the component-based development model of frontend frameworks and the capabilities of SSGs in the form of a compiler that produces framework-free, static web assets that only depend on standard Web features. In this sense it is the first Metamodern Web framework. In 2020, &lt;a href="https://en.wikipedia.org/wiki/Basecamp_(company)"&gt;Basecamp&lt;/a&gt; released &lt;a href="https://hotwire.dev/"&gt;Hotwire (HTML Over The Wire)&lt;/a&gt;, a set of techniques used to bring &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPA&lt;/a&gt;-like enhancements to traditional &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;SSR&lt;/a&gt; applications: partial page updates, client-side navigation history, AJAX, server pushes, etc. Hotwire is also Metamodern in the way it applies &lt;a href="https://en.wikipedia.org/wiki/Progressive_enhancement"&gt;Progressive Enhancement&lt;/a&gt; techniques to existing models.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Web_Components"&gt;Web Components&lt;/a&gt; (2011)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Asm.js"&gt;asm.js&lt;/a&gt; (2013)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Polymer_(library)"&gt;Polymer&lt;/a&gt; (2013)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"&gt;Service Workers&lt;/a&gt; (2014)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tools.ietf.org/html/rfc7540"&gt;HTTP/2&lt;/a&gt; (2015)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/WebAssembly"&gt;WebAssembly&lt;/a&gt; (2015)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules"&gt;ESM support in browsers&lt;/a&gt; (2015)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Progressive_web_application"&gt;PWA&lt;/a&gt; (2015)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.snowpack.dev/"&gt;Snowpack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unpkg.com/"&gt;unpkg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cdnjs.com/"&gt;cdnjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Svelte"&gt;Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Polymer_(library)"&gt;Polymer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Ionic_(mobile_app_framework)"&gt;Ionic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stenciljs.com/"&gt;Stencil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hotwire.dev/"&gt;Hotwire&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Metamodernist Web model
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Progressive_enhancement"&gt;Progressive Enhancement&lt;/a&gt; is at the heart of the Metamodernist Web model. Web pages should rely on native web features whenever possible, and may provide polyfills on a case-by-case basis. Applicative or third-party code that duplicates native web features are prohibited.&lt;/p&gt;

&lt;p&gt;Client-side scripting is optional. Essential features may be implemented as client-side scripts as long as they also remain available by other means (e.g. server-side processing) to clients without adequate capabilities, for example when scripting is disabled or limited. Frontend and backend frameworks are optional. Dependency to third-party software must be kept minimal. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"&gt;Service Worker&lt;/a&gt; is an ideal place to implement &lt;a href="https://blog.logrocket.com/every-website-deserves-a-service-worker/"&gt;non-essential features and performance enhancements&lt;/a&gt; without blocking the main client thread.&lt;/p&gt;

&lt;p&gt;The ideal workflow is buildless. Complex build processes and toolchains are optional, and when present they must be transparent, reproducible, and resilient. When using code generation tools, the resulting code should ideally be human-readable, although this is only a desirable goal for learnability.&lt;/p&gt;

&lt;p&gt;Applications must be inclusive. Not all browsers are &lt;a href="https://yeti.co/blog/evergreen-web-browser-a-web-browser-that-automatically-updates-itself/"&gt;Evergreen&lt;/a&gt;. Not all applications need massive scaling. &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;SSR&lt;/a&gt; is a perfectly fine model for many applications. Core functionalities should be available to all clients regardless of their performances and capabilities. Non-essential functionalities should be provided with &lt;a href="https://en.wikipedia.org/wiki/Progressive_enhancement"&gt;Progressive Enhancement&lt;/a&gt; in mind.&lt;/p&gt;

&lt;p&gt;Core value: sustainability&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buildless, bundle-less front-end development if possible&lt;/li&gt;
&lt;li&gt;SSG or SSR for noscript clients&lt;/li&gt;
&lt;li&gt;No frontend framework&lt;/li&gt;
&lt;li&gt;Web Components or micro-frontends for dynamic enhancements&lt;/li&gt;
&lt;li&gt;Client code is Vanilla JS or transpiled to ES modules&lt;/li&gt;
&lt;li&gt;Dependencies can be self-hosted or loaded directly from CDNs&lt;/li&gt;
&lt;li&gt;Service Worker for non-essential enhancements: offline/background mode, caching, prefetching, resilience, etc.&lt;/li&gt;
&lt;li&gt;Application manifest for PWA mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  A Final Word
&lt;/h1&gt;

&lt;p&gt;The history of web development is rich and complex, sometimes violent and filled with controversies. Of all the web development models presented here, none can pretend to be more "web-native" than the others, and even if some models are closer to the original vision, the web platform is powerful enough to embrace them all. Every model has its strengths, its weaknesses, its proponents, its zealots and its detractors. There is no one "True Way" to web development, just tools in a toolbox. Choose the right tool for the right job.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS: Don't forget to read the other articles in this series if you haven't already!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>The Second Age of Web Development</title>
      <dc:creator>Frédéric Bonnet</dc:creator>
      <pubDate>Fri, 01 Jan 2021 21:36:45 +0000</pubDate>
      <link>https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a</link>
      <guid>https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image: A sketch of primate origins from Charles Darwin's notebook, dated 21 April 1868&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Second Age of web development is the period that spans between the &lt;a href="https://en.wikipedia.org/wiki/Browser_wars#First_Browser_War_(1995%E2%80%932001)"&gt;First&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Browser_wars#Second_Browser_War_(2004%E2%80%932017)"&gt;Second Browser Wars&lt;/a&gt;, at a time when Microsoft Internet Explorer was the dominant web browser (1998-2012).&lt;/p&gt;

&lt;h2&gt;
  
  
  The First Browser War and the Dark Ages
&lt;/h2&gt;

&lt;p&gt;Lack of standardisation, compatibility issues between browsers, incomplete support for the young &lt;a href="https://en.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt; standard, and creeping featuritis with vendor-specific HTML tags (&lt;a href="https://en.wikipedia.org/wiki/Blink_element"&gt;BLINK&lt;/a&gt;!!! &lt;a href="https://en.wikipedia.org/wiki/Marquee_element"&gt;MARKEE&lt;/a&gt;!!!) led to the &lt;a href="https://en.wikipedia.org/wiki/Browser_wars#First_Browser_War_(1995%E2%80%932001)"&gt;First Browser War&lt;/a&gt; between the two major web browser providers, &lt;a href="https://en.wikipedia.org/wiki/Netscape"&gt;Netscape&lt;/a&gt; and Microsoft. The original vision of the Web as a content creation and distribution was lost. Instead, the Web was now seen as a mere distribution channel for desktop-esque enterprise apps and online minigames. And let’s face it, when it came to enterprise- and consumer-oriented software development, the Web standards were simply too immature and unstable to compete with full-featured authoring tools such as &lt;a href="https://en.wikipedia.org/wiki/Adobe_Flash"&gt;Macromedia Flash&lt;/a&gt; (which, ironically, used its own dialect of JavaScript called &lt;a href="https://en.wikipedia.org/wiki/ActionScript"&gt;ActionScript&lt;/a&gt;) or professional software platforms such as &lt;a href="https://en.wikipedia.org/wiki/Java_applet"&gt;Java Applets&lt;/a&gt; or Microsoft &lt;a href="https://en.wikipedia.org/wiki/ActiveX"&gt;ActiveX&lt;/a&gt;. Web pages became static shells for Flash ad banners, online minigames, and proprietary software plugins. HTML became an output target for WYSIWYG editors such as &lt;a href="https://en.wikipedia.org/wiki/Adobe_Dreamweaver"&gt;Macromedia Dreamweaver&lt;/a&gt;. JavaScript got its lasting reputation of a slow, memory-hungry, crash-prone toy language for hobbyists. Only fools and die-hards would still hand-code their pages, or so said Serious People. The web was regressing to the benefits of proprietary software.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.w3.org/TR/1998/REC-html40-19980424/"&gt;HTML 4.0&lt;/a&gt; (1997)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.w3.org/TR/xhtml1/"&gt;XHTML&lt;/a&gt; (2000)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Core value: territorial conquest&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web pages as a software distribution medium/application container/output format&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Adobe_Flash"&gt;Macromedia Flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Adobe_Shockwave"&gt;Macromedia Shockwave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Apache_Flex"&gt;Macromedia Flex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Adobe_Dreamweaver"&gt;Macromedia Dreamweaver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Microsoft_FrontPage"&gt;Microsoft Frontpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/ActiveX"&gt;Microsoft ActiveX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Browser plugins&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/AltaVista"&gt;Altavista search engine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Renaissance Period
&lt;/h2&gt;

&lt;p&gt;The post-browser war era was a period of stagnation, dominated by &lt;a href="https://en.wikipedia.org/wiki/Internet_Explorer_6"&gt;Microsoft Internet Explorer 6&lt;/a&gt; whose market share remained unchallenged for over half a decade. The web standards efforts led by the W3C were so moribund that Microsoft decided to push their own proprietary &lt;a href="https://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;tools&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Extensible_Application_Markup_Language"&gt;formats&lt;/a&gt; for application development, deeply integrated into their Windows operating system. Fearing the death of the Open Web envisioned by its creators, a group of community members formed the &lt;a href="https://en.wikipedia.org/wiki/WHATWG"&gt;Web Hypertext Application Technology Working Group (WHATWG)&lt;/a&gt; in 2004 to work on a new &lt;a href="https://html.spec.whatwg.org/"&gt;HTML5&lt;/a&gt; standard, improve and enrich existing standards with common practices (including proprietary ones such as Microsoft &lt;a href="https://en.wikipedia.org/wiki/XMLHttpRequest"&gt;XMLHttpRequest&lt;/a&gt;), and open a new era of community-driven progress. This 15-year effort led to the contemporary web that we all know and cherish. This didn’t go without pain, though, as the dominance of the Microsoft Internet Explorer and its substandard &lt;a href="https://en.wikipedia.org/wiki/Trident_(software)"&gt;Trident Engine&lt;/a&gt; plagued the life of web developers with interoperability issues for many years. The launch of &lt;a href="https://en.wikipedia.org/wiki/Firefox"&gt;Mozilla Firefox&lt;/a&gt; in 2004 was the first serious effort to challenge Internet Explorer's hegemony, but it was the creation of &lt;a href="https://en.wikipedia.org/wiki/JQuery"&gt;jQuery&lt;/a&gt; in 2006 that really opened the era of widespread frontend development with backward-compatible, browser-agnostic APIs for DOM manipulation and web service communication.&lt;/p&gt;

&lt;p&gt;The increasing complexity of web applications led to the development of full-stack frameworks with heavy emphasis on the backend and close integration of the frontend, following the &lt;a href="https://en.wikipedia.org/wiki/Multitier_architecture#Three-tier_architecture"&gt;layered 3-tier architecture model&lt;/a&gt;. &lt;a href="https://en.wikipedia.org/wiki/Jakarta_EE"&gt;J2EE&lt;/a&gt; then &lt;a href="https://en.wikipedia.org/wiki/Jakarta_Server_Faces"&gt;JSF&lt;/a&gt; extended the Java backend &lt;a href="https://en.wikipedia.org/wiki/Jakarta_Servlet"&gt;servlet&lt;/a&gt; model with component models inspired by monolithic desktop applications. On the other side of the spectrum, &lt;a href="https://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Ruby on Rails&lt;/a&gt; aimed at simplifying the development of standards-based full-stack applications, centered on the &lt;a href="https://en.wikipedia.org/wiki/Convention_over_configuration"&gt;convention-over-configuration&lt;/a&gt; philosophy and on design patterns such as &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;Model-View-Controller (MVC)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/WHATWG"&gt;WHATWG&lt;/a&gt; (2004)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt; (2001)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt; (2003)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/"&gt;DOM Level 3&lt;/a&gt; (2004)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Ajax_(programming)"&gt;Ajax&lt;/a&gt; (2005)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Acid2"&gt;Acid2&lt;/a&gt; (2005)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/JQuery"&gt;jQuery&lt;/a&gt; (2006)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://html.spec.whatwg.org/"&gt;HTML5 living standard&lt;/a&gt; (2007)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt; &lt;a href="https://www.w3.org/TR/1998/REC-CSS2-19980512/"&gt;Level 2&lt;/a&gt; (1998) / &lt;a href="https://www.w3.org/TR/CSS21/"&gt;Level 2.1&lt;/a&gt; (2011)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Internet_Explorer_6"&gt;Microsoft Internet Explorer 6.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Firefox"&gt;Mozilla Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework)"&gt;Bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/JQuery"&gt;jQuery&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/JQuery_UI"&gt;jQuery UI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Script.aculo.us"&gt;script.aculo.us&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/MooTools"&gt;MooTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Ruby_on_Rails"&gt;Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Symfony"&gt;Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Laravel"&gt;Laravel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Django_(web_framework)"&gt;Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Jakarta_EE"&gt;J2EE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Jakarta_Server_Faces"&gt;JSF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Eclipse_(software)"&gt;Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Google_Search"&gt;Google Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Renaissance Web model
&lt;/h3&gt;

&lt;p&gt;The Renaissance Web is a universal application model where all layers operate on web standards without any reliance on proprietary technology. Web pages are built using standard HTML5, JavaScript and CSS, with &lt;a href="https://en.wikipedia.org/wiki/Graceful_degradation"&gt;Graceful Degradation&lt;/a&gt; in mind. The &lt;a href="https://en.wikipedia.org/wiki/Ajax_(programming)"&gt;AJAX&lt;/a&gt; model built on the &lt;a href="https://en.wikipedia.org/wiki/XMLHttpRequest"&gt;XMLHttpRequest&lt;/a&gt; API allows asynchronous communication with web services hosted on applicative or third-party servers. Whenever possible, full page reloads induced by standard web forms and links are replaced with dynamic AJAX calls and partial page updates for a better user experience. Web services can use structured, object-oriented protocols such as &lt;a href="https://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt;, or simple payload formats such as &lt;a href="https://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;. Application logic is still mostly implemented on the backend, but the frontend is increasingly more complex and reliant on third-party libraries for interactivity, dynamic DOM generation, and GUI components. Frontend and backend development complexity tend to converge.&lt;/p&gt;

&lt;p&gt;Core value: open community&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend libraries&lt;/li&gt;
&lt;li&gt;Asynchronous client-server communication&lt;/li&gt;
&lt;li&gt;Web service protocols&lt;/li&gt;
&lt;li&gt;Graceful Degradation&lt;/li&gt;
&lt;li&gt;Full-stack and component-based frameworks&lt;/li&gt;
&lt;li&gt;Monolithic applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Modernist Period
&lt;/h2&gt;

&lt;p&gt;With the rise of &lt;a href="https://en.wikipedia.org/wiki/JQuery"&gt;jQuery&lt;/a&gt;, Web developers began to envision a model where the Web client would no longer be limited to a thin presentation layer, but become a full-featured application platform. But complex application development requires structure, and the jQuery model was simply not structured enough for this purpose. The release of the first frontend frameworks such as &lt;a href="https://en.wikipedia.org/wiki/Knockout_(web_framework)"&gt;Knockout&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Backbone.js"&gt;Backbone.js&lt;/a&gt;, soon followed by &lt;a href="https://en.wikipedia.org/wiki/AngularJS"&gt;AngularJS&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Ember.js"&gt;Ember.js&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/React_(web_framework)"&gt;React&lt;/a&gt;, opened the era of the &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;Single-Page Application model (SPA)&lt;/a&gt; with client-side routing, as an alternative to traditional Multi-Page-Applications (MPA) with server-side routing.&lt;/p&gt;

&lt;p&gt;As the web standards gained in maturity and adoption, &lt;a href="https://www.androidpolice.com/2019/05/02/the-story-of-how-a-conspiracy-inside-youtube-helped-kill-internet-explorer-6/"&gt;developers and users started to revolt&lt;/a&gt; against the still-dominant Microsoft Internet Explorer. The &lt;a href="https://en.wikipedia.org/wiki/Acid3"&gt;Acid3&lt;/a&gt; test, implicitly aimed at IE, became the de-facto standard for feature comparison and standards adoption between browsers. When Google launched their own browser &lt;a href="https://en.wikipedia.org/wiki/Google_Chrome"&gt;Chrome&lt;/a&gt; in 2008, IE had 70% of the browser market share. Four years later, this share had dropped to 35% while Chrome finally took the lead in the browser race. Browser vendors stopped distributing their software with strict versioning schemes in favor of auto-updates that kept them in "&lt;a href="https://yeti.co/blog/evergreen-web-browser-a-web-browser-that-automatically-updates-itself/"&gt;Evergreen&lt;/a&gt;" state with the latest web features and security fixes. Soon browser competition would drive innovation again.&lt;/p&gt;

&lt;p&gt;The rise of the rich-client model drove an opposite movement on the server-side. As the frontend responsibilities increased, the backend responsibilities shrank to become more &lt;a href="https://en.wikipedia.org/wiki/Web_API"&gt;API-centric&lt;/a&gt;. The full-stack Renaissance Web model was no longer fashionable, and frontend and backend technology stacks started to diverge. &lt;a href="https://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL databases&lt;/a&gt; became viable alternatives to traditional &lt;a href="https://en.wikipedia.org/wiki/SQL"&gt;SQL relational databases&lt;/a&gt; thanks to their more flexible model and their native support for &lt;a href="https://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Launched in 2009, the first version of &lt;a href="https://en.wikipedia.org/wiki/Node.js"&gt;Node.js&lt;/a&gt; (re)introduced JavaScript as a general-purpose language for server environments (earlier server software such as &lt;a href="https://en.wikipedia.org/wiki/Oracle_iPlanet_Web_Server"&gt;Netscape-Enterprise-Server&lt;/a&gt; had this capability). Based on the same &lt;a href="https://en.wikipedia.org/wiki/V8_(JavaScript_engine)"&gt;V8 engine&lt;/a&gt; as the Chrome browser, this was the first time since the beginnings of the Web that the same runtime environment was widely and consistently available on both client- and server-sides, with tools like &lt;a href="https://en.wikipedia.org/wiki/Browserify"&gt;Browserify&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Webpack"&gt;webpack&lt;/a&gt; bridging the gap and turning JavaScript from a simple client-side scripting language to a full-stack development environment. The &lt;a href="https://en.wikipedia.org/wiki/Npm_(software)ications."&gt;Node Package Manager (npm)&lt;/a&gt; soon grew as the &lt;em&gt;de facto&lt;/em&gt; dependency manager and distribution network for the JavaScript ecosystem. In a strange inversion of History, JavaScript had become a server-side language used to produce client-side and full-stack Web applications.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Representational_state_transfer"&gt;REST&lt;/a&gt; (c. 2000)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; (2002)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/V8_(JavaScript_engine)"&gt;Chromium V8&lt;/a&gt; (2008)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf"&gt;ECMAScript 5&lt;/a&gt; (2009)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Node.js"&gt;Node.js&lt;/a&gt; (2009)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Npm_(software)ications."&gt;npm&lt;/a&gt; (2010)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ecma-international.org/ecma-262/5.1/"&gt;ECMAScript 5.1&lt;/a&gt; (2011)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://yeti.co/blog/evergreen-web-browser-a-web-browser-that-automatically-updates-itself/"&gt;Evergreen Browsers&lt;/a&gt; (2013)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Firefox"&gt;Mozilla Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Google_Chrome"&gt;Google Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bower.io/"&gt;Bower&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Node.js"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Npm_(software)ications."&gt;NPM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Mustache_(template_system)"&gt;Mustache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Knockout_(web_framework)"&gt;Knockout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Backbone.js"&gt;Backbone.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/AngularJS"&gt;AngularJS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Ember.js"&gt;Ember.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/React_(web_framework)"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Vue.js"&gt;Vue.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Gulp.js"&gt;gulp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Browserify"&gt;Browserify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Webpack"&gt;webpack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Express.js"&gt;Express.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/MongoDB"&gt;MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Apache_Cassandra"&gt;Apache Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Spring_Framework"&gt;Spring Framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Modernist Web model
&lt;/h3&gt;

&lt;p&gt;The Modernist Web is a complete reversal of the &lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-classical-period"&gt;Classical&lt;/a&gt; and &lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo#the-postclassical-period"&gt;Post-Classical&lt;/a&gt; Web development models, shifting the complexity from the backend to the frontend. The Modernist Web relies on powerful but complex toolchains and frameworks that provide the technical foundations for the development of applications with strict separation of concerns at every level.&lt;/p&gt;

&lt;p&gt;The typical Modernist Web client is a self-contained &lt;a href="https://en.wikipedia.org/wiki/Single-page_application"&gt;SPA&lt;/a&gt; that communicates with an API server using authenticated JSON-based protocols. Client-side scripting is no longer optional but an essential runtime environment for the frontend, to the point that the main page is often an empty HTML page with framework bootstrap script. UI generation, routing, web service orchestration, state management, etc., are the responsibilities of the frontend. The client code is asynchronous and uses template data-binding. Applications target &lt;a href="https://yeti.co/blog/evergreen-web-browser-a-web-browser-that-automatically-updates-itself/"&gt;Evergreen Browsers&lt;/a&gt; and the newest Web standards, with polyfills for older clients. Web assets served to the clients are no longer authored directly by frontend developers, but are instead produced from source files by an elaborate build process that involves configuration, transpilation, minification, and bundling.&lt;/p&gt;

&lt;p&gt;With the shift from &lt;a href="https://en.wikipedia.org/wiki/Server-side_scripting"&gt;Server-Side Rendering (SSR)&lt;/a&gt; to Client-Side Rendering (CSR), the backend becomes an API server whose main responsibilities are data management and business rules, In the simplest cases, backends are thin &lt;a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD&lt;/a&gt; layers over a data storage engine, an architectural pattern known as &lt;a href="https://en.wikipedia.org/wiki/Single-page_application#Thin_server_architecture"&gt;"Thin Server Architecture"&lt;/a&gt;. Low-traffic applications continue to use traditional server technologies, high-traffic applications (such as mobile consumer applications) often adopt stateless event-driven models for scalability.&lt;/p&gt;

&lt;p&gt;Core value: separation of concerns&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js-based ecosystem and toolchains&lt;/li&gt;
&lt;li&gt;Frontend MVC frameworks&lt;/li&gt;
&lt;li&gt;Single-Page Applications with client-side routing and rendering&lt;/li&gt;
&lt;li&gt;Stateless web service protocols&lt;/li&gt;
&lt;li&gt;UX-centric, responsive frontend&lt;/li&gt;
&lt;li&gt;API-centric backends&lt;/li&gt;
&lt;li&gt;CRUD or NoSQL databases&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>The First Age of Web Development</title>
      <dc:creator>Frédéric Bonnet</dc:creator>
      <pubDate>Fri, 01 Jan 2021 21:36:29 +0000</pubDate>
      <link>https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo</link>
      <guid>https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image: A sketch of primate origins from Charles Darwin's notebook, dated 21 April 1868&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The First Age of web development spans from the invention of the web in 1990 to the &lt;a href="https://en.wikipedia.org/wiki/Browser_wars#First_Browser_War_(1995%E2%80%932001)"&gt;First Browser War&lt;/a&gt; and the domination of Microsoft Internet Explorer in 1998.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Early Days
&lt;/h2&gt;

&lt;p&gt;In the beginning, the Internet was just a bunch of institutional servers with various single-purpose protocols, FTP and Gopher being among the most popular ones. Then on November 12, 1990, Tim Berners-Lee and Robert Cailliau wrote &lt;a href="https://www.w3.org/Proposal.html"&gt;the proposal that started the Web revolution&lt;/a&gt;. Their vision was articulated around a system of hypermedia pages (HTML) linked together by globally unique identifiers (URI) and communicating with a universal protocol (HTTP). The first web browser, aptly named &lt;a href="https://en.wikipedia.org/wiki/WorldWideWeb"&gt;WorldWideWeb&lt;/a&gt;, was both a client and a WYSIWYG editor, following its creators’ vision of hypermedia systems as complete authoring tools. The Web was born. And incredibly enough, 30 years after its inception, not only does it still work with the same design principles, but it managed to retain compatibility all along. The greatest testament of its universality is that &lt;a href="http://info.cern.ch/hypertext/WWW/TheProject.html"&gt;the very first page ever written&lt;/a&gt; is still online and accessible by today’s web clients.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://tools.ietf.org/html/rfc1945"&gt;HTTP 0.9&lt;/a&gt; (1991)&lt;/li&gt;
&lt;li&gt;HTML "1.0" (c. 1991)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tools.ietf.org/html/rfc1738"&gt;URL&lt;/a&gt; (1991-1994)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/NeXTSTEP"&gt;NeXTSTEP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unix/X11 systems&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/CERN_httpd"&gt;CERN httpd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Lynx_(web_browser)"&gt;Lynx Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Mosaic_(web_browser)"&gt;NCSA Mosaic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Early Web model
&lt;/h3&gt;

&lt;p&gt;The Early Web is simple and "pure". Web sites are just a bunch of static hypertext pages written in plain HTML. Web servers are mostly filesystem gateways, serving plain HTML files to web clients. Anyone can write a web page with a text editor. Anyone can access web pages from anywhere using either line-mode or graphical "browsers". The web is simple and accessible for both content producers and consumers. No coding skills are required. Life is easy.&lt;/p&gt;

&lt;p&gt;Core value: minimalism&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pure hypertext content&lt;/li&gt;
&lt;li&gt;Semantic markup&lt;/li&gt;
&lt;li&gt;Static pages&lt;/li&gt;
&lt;li&gt;Static servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Classical Period
&lt;/h2&gt;

&lt;p&gt;The Early Web era was simple but austere. Content was institutional and academic. But soon, people began to create their own content to express their personal interests outside of the workplace. And hence began the era of the Personal Home Pages (an acronym that gave birth to the &lt;a href="https://en.wikipedia.org/wiki/Php"&gt;PHP&lt;/a&gt; language) that would soon spread across the web and outnumber the institutional pages with new user-created content. Graphical browsers started to take off and began driving the evolution of the web to fulfil the thirst for richer content. Mosaic then Netscape started introducing new HTML elements to display images and bring color to the black-gray-blue pages of the Early Web. It was the age of the "Best viewed with Netscape" banners. In the meantime, Web servers became more complex and started offering the possibility to execute code on the server-side to produce dynamic content.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://tools.ietf.org/html/rfc1945"&gt;HTTP/1.0&lt;/a&gt; (1995)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.w3.org/MarkUp/html-spec/"&gt;HTML 2.0&lt;/a&gt; (1995-1997): tables, images, image maps, POST-based form submission with file uploads&lt;/li&gt;
&lt;li&gt;HTTP/1.1 (&lt;a href="https://tools.ietf.org/html/rfc2068"&gt;1997&lt;/a&gt;-&lt;a href="https://tools.ietf.org/html/rfc2616"&gt;1999&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Proprietary extensions for visual markup&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface"&gt;CGI&lt;/a&gt; (1997)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Php"&gt;PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Apache_HTTP_Server"&gt;Apache HTTP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Netscape_Navigator"&gt;Netscape Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Yahoo!_GeoCities"&gt;Geocities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Yahoo!"&gt;Yahoo!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Classical Web model
&lt;/h3&gt;

&lt;p&gt;The Classical Web makes rich content creation accessible. Web pages are written with a simple text editor, previewed locally on the user’s browser of choice, and then transferred to a hosting service using FTP. Static content is still easy to produce, but nice-looking pages require some design skills, and dynamic content requires basic coding skills with template engine syntaxes. Web servers can execute &lt;a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface"&gt;CGI&lt;/a&gt; shell scripts or template engines that generate dynamic content to the clients. Server-side technologies are the realm of software developers, whose goal is to keep the life of content creators as simple as possible.&lt;/p&gt;

&lt;p&gt;Core value: simplicity&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rich hypermedia content&lt;/li&gt;
&lt;li&gt;Presentational markup&lt;/li&gt;
&lt;li&gt;Dynamic page templates&lt;/li&gt;
&lt;li&gt;Server-side page generation&lt;/li&gt;
&lt;li&gt;Stateless server-side engines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Post-Classical Period
&lt;/h2&gt;

&lt;p&gt;The Classical Web introduced dynamic server-generated content, however web pages were still static, non-interactive documents. At this time, people started to envision a future for the web as a universal operating system/application platform. Rich hypermedia documents had to become interactive applications. To accomplish this goal, the web platform needed a scripting language on the frontend. In 1995, the release of Netscape Navigator 2.0 introduced Livescript, soon to be renamed &lt;a href="https://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;, and people began to inject life to their home pages, such as collapsable table of contents, event handlers or alert boxes. One year later Microsoft released Internet Explorer 3.0 with its own &lt;a href="https://en.wikipedia.org/wiki/JScript"&gt;JScript&lt;/a&gt; implementation and limited support for the new &lt;a href="https://www.w3.org/TR/CSS1/"&gt;CSS1 standard&lt;/a&gt;. Those were the days of intense competition and unleashed innovation on the browser market.&lt;/p&gt;

&lt;p&gt;In 1995, the same year as Javascript, Sun Microsystem introduced the Java Language. Sun had their own vision of what distributed computing should be: Java everywhere, from mobile terminals to desktop applications and mainframe servers. The "write once, run anywhere" promise was a direct competitor to the emerging universal web platform. On the client-side, the &lt;a href="https://en.wikipedia.org/wiki/HotJava"&gt;HotJava&lt;/a&gt; browser and its &lt;a href="https://en.wikipedia.org/wiki/Java_applet"&gt;Java Applets&lt;/a&gt; provided a viable, mature and consistent alternative to dynamic web pages for online distribution of desktop-like applications (to the point that Netscape stole the name for their own LiveScript language). On the server-side, the Java Web Server and its &lt;a href="https://en.wikipedia.org/wiki/Jakarta_Servlet"&gt;Servlets&lt;/a&gt; opened the era of Web application servers.&lt;/p&gt;

&lt;p&gt;Milestones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt; (1995)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt; &lt;a href="https://www.w3.org/TR/CSS1/"&gt;Level 1&lt;/a&gt; (1996)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ecma-international.org/publications/standards/Ecma-262.htm"&gt;ECMA-262&lt;/a&gt; (1997)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.w3.org/TR/DOM-Level-2-HTML/glossary.html#dt-DOM-Level-0"&gt;DOM Level 0&lt;/a&gt; (1995-1997)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Java_applet"&gt;Java Applets&lt;/a&gt; (1996)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Jakarta_Servlet"&gt;Java Servlets&lt;/a&gt; (1996)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; (1998)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Acid1"&gt;Acid1&lt;/a&gt; (1999)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emblematic software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Netscape_Navigator"&gt;Netscape Navigator&lt;/a&gt; 2.0-3.0&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Internet_Explorer_3"&gt;Microsoft Internet Explorer 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Internet_Information_Services"&gt;Microsoft Internet Information Server&lt;/a&gt; with &lt;a href="https://en.wikipedia.org/wiki/Active_Server_Pages"&gt;ASP&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/HotJava"&gt;Sun HotJava Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sun Java Web Server&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Post-Classical Web model
&lt;/h3&gt;

&lt;p&gt;The Post-Classical Web is a universal application platform. Visually speaking, web pages mimic regular desktop applications. They don’t display content but application state, and only provide basic interactivity whereas the application logic is implemented in full-featured languages on the server-side. Web pages live in the &lt;a href="https://en.wikipedia.org/wiki/Multitier_architecture#Three-tier_architecture"&gt;presentation layer of a classic 2- or 3-tier distributed application&lt;/a&gt;. The Post-Classical Web is the first model where the frontend/backend dichotomy starts to make sense; the frontend is a web designer’s job whereas the backend is a software developer’s job.&lt;/p&gt;

&lt;p&gt;Core value: interactivity&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic pages with HTML event handlers&lt;/li&gt;
&lt;li&gt;Stateful application servers&lt;/li&gt;
&lt;li&gt;Backend frameworks&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>From Classicism to Metamodernism — A Short History of Web Development</title>
      <dc:creator>Frédéric Bonnet</dc:creator>
      <pubDate>Fri, 01 Jan 2021 21:35:55 +0000</pubDate>
      <link>https://dev.to/fredericbonnet/from-classicism-to-metamodernism-a-short-history-of-web-development-4j4f</link>
      <guid>https://dev.to/fredericbonnet/from-classicism-to-metamodernism-a-short-history-of-web-development-4j4f</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image: A sketch of primate origins from Charles Darwin's notebook, dated 21 April 1868&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This series of articles is not yet another "&lt;em&gt;Stop using/doing XXX&lt;/em&gt;", "&lt;em&gt;Why you should use/do YYY&lt;/em&gt;", "&lt;em&gt;ZZZ considered harmful&lt;/em&gt;" rant/injunction. It is my personal and imperfect attempt at defining a &lt;a href="https://en.wikipedia.org/wiki/Periodization"&gt;periodization&lt;/a&gt; of web development trends in a way that mimics artistic eras and intellectual movements. It is not a glorification of the "good old days", a lament on the Paradise Lost, or a moral judgement on each school of thought. On the contrary, I see the web ecosystem as a successful example of natural evolution, and its corollary natural selection, where different strategies coexist, compete and cooperate to survive, bloom, die, and be born again.&lt;/p&gt;

&lt;p&gt;Near the end I will try to expose my vision on how the current trends in web development are shaping a new movement that I call "&lt;a href="https://dev.to/fredericbonnet/the-third-age-of-web-development-kgj#the-metamodernist-period"&gt;the Metamodernist Web&lt;/a&gt;".&lt;/p&gt;

&lt;h1&gt;
  
  
  A rough timeline of web development trends
&lt;/h1&gt;

&lt;p&gt;The history of ideas is a perpetual cycle of inception, development, decadence, oblivion, enlightenment, rediscovery and reinvention, each new trend reacting to its predecessors by rejecting or embracing existing ideas and introducing new ones. The web is no different. Actually, many of the periods overlap, most trends still cohabit and confront nowadays, and contemporary technologies may belong to or span several older trends. We, as web developers, are standing on the shoulders of giants. In the following parts, I will use the past tense for historical references, and the present tense to describe the core features of each trend so as not to give a false feeling of chronology, let alone progress which is a highly subjective matter.&lt;/p&gt;

&lt;p&gt;My &lt;a href="https://en.wikipedia.org/wiki/Periodization"&gt;periodization&lt;/a&gt; of web development history uses a classic &lt;a href="https://en.wikipedia.org/wiki/Three-age_system"&gt;three-age system&lt;/a&gt;, each being divided into several periods. Like all periodizations, this is highly subjective, and there is no clear beginning or end date :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/fredericbonnet/the-first-age-of-web-development-4elo"&gt;&lt;strong&gt;The First Age&lt;/strong&gt;&lt;/a&gt;: Early Days, Classical period, Post-Classical period&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/fredericbonnet/the-second-age-of-web-development-2k1a"&gt;&lt;strong&gt;The Second Age&lt;/strong&gt;&lt;/a&gt;: First Browser War, Dark Ages, Renaissance period, Modernist period&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/fredericbonnet/the-third-age-of-web-development-kgj"&gt;&lt;strong&gt;The Third Age&lt;/strong&gt;&lt;/a&gt;: Second Browser War, Postmodernist period, Neoclassical period, Metamodernist period&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
