<?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: Rafał Pocztarski</title>
    <description>The latest articles on DEV Community by Rafał Pocztarski (@rsp).</description>
    <link>https://dev.to/rsp</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%2F57981%2F4cc2bcfa-d836-4bb4-a07f-eac9e6d5b943.jpeg</url>
      <title>DEV Community: Rafał Pocztarski</title>
      <link>https://dev.to/rsp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rsp"/>
    <language>en</language>
    <item>
      <title>What to learn in 2022</title>
      <dc:creator>Rafał Pocztarski</dc:creator>
      <pubDate>Tue, 19 Apr 2022 23:37:23 +0000</pubDate>
      <link>https://dev.to/rsp/what-to-learn-in-2022-2h3p</link>
      <guid>https://dev.to/rsp/what-to-learn-in-2022-2h3p</guid>
      <description>&lt;p&gt;I have a history of betting on technologies that later became very popular, like JavaScript in 1996 when everyone was saying that Java applets are the future, or Node.js in 2009 when everyone was saying that it would never get popular, or Deno in 2018 and WASI in 2019 - that you may still have not heard of.&lt;/p&gt;

&lt;p&gt;Because of that, many people are asking me what is the next big thing to bet on. The truth is that I was always following much more things than only those that eventually got so popular, but what I follow is usually backed by reasons that I find important.&lt;/p&gt;

&lt;p&gt;Here are some of the things on my radar that I believe are most important to keep an eye on in 2022.&lt;/p&gt;

&lt;h2&gt;
  
  
  WASM and WASI
&lt;/h2&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webassembly.org/"&gt;https://webassembly.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wasi.dev/"&gt;https://wasi.dev/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My reasons:&lt;br&gt;
Norman Hardy, Jonathan S. Shapiro, Mark S. Miller&lt;/p&gt;

&lt;p&gt;Long story...&lt;/p&gt;

&lt;p&gt;In 2004 I created Wikipedia article for &lt;a href="https://en.wikipedia.org/wiki/KeyKOS"&gt;KeyKOS&lt;/a&gt;, and made some contributions to articles on &lt;a href="https://en.wikipedia.org/wiki/EROS_(microkernel)"&gt;EROS&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Capability-based_security"&gt;capability-based security model&lt;/a&gt; that was freshly created just few months before.&lt;/p&gt;

&lt;p&gt;At that time I was sure that capability-based security is the way to go and the &lt;a href="https://web.archive.org/web/20130815183427/http://www.bitc-lang.org/docs/bitc/spec.html"&gt;BitC programming language&lt;/a&gt; will be the future. I was really surprised that systems like GNOSIS, KeyKOS, EROS and Coyotos didn't gain more popularity.&lt;/p&gt;

&lt;p&gt;Sadly, the BitC language never got finished and &lt;a href="https://en.wikipedia.org/wiki/BitC"&gt;its Wikipedia article&lt;/a&gt; was &lt;a href="https://en.wikipedia.org/w/index.php?title=Special:Log/delete&amp;amp;page=BitC"&gt;removed in 2017&lt;/a&gt;, but meanwhile the capability model surfaced in the form of &lt;a href="https://github.com/tc39/proposal-ses"&gt;Secure ECMAScript&lt;/a&gt; and &lt;a href="https://github.com/WebAssembly/WASI"&gt;WebAssembly System Interface&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;that&lt;/strong&gt; is actually my personal reason why I am betting 100% on WASI - not the undeniable performance potential for light microservices and language-agnostic runtimes that will probably make it popular in the end, but its &lt;strong&gt;security model&lt;/strong&gt; with deep roots in &lt;a href="http://www.cap-lore.com/CapTheory/"&gt;MicroEssays on Capability Theory by Norman Hardy&lt;/a&gt;, some of them written in the 1970s, which I found somewhere in the early 2000s and to this day I believe to be the most important articles about security that I've read so far, as I still find the capability-based security model to be the best model presented to date.&lt;/p&gt;

&lt;p&gt;To fully appreciate Secure ECMAScript and WASI, one has to read articles and watch the talks by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Norman Hardy&lt;/li&gt;
&lt;li&gt;Jonathan S. Shapiro&lt;/li&gt;
&lt;li&gt;Mark S. Miller&lt;/li&gt;
&lt;li&gt;Lin Clark&lt;/li&gt;
&lt;li&gt;Steve Klabnik&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, the creation &lt;a href="https://bytecodealliance.org/"&gt;Bytecode Alliance&lt;/a&gt;, the development of &lt;a href="https://github.com/appcypher/awesome-wasm-runtimes"&gt;multiple WebAssembly runtimes&lt;/a&gt; and the work of the &lt;a href="https://www.w3.org/community/webassembly/"&gt;W3C WebAssembly Community Group&lt;/a&gt; is why I belive it &lt;strong&gt;will&lt;/strong&gt; get popular, but the capability-based security model is why I &lt;strong&gt;want&lt;/strong&gt; it to get popular.&lt;/p&gt;

&lt;p&gt;In my talk at WarsawJS in January 2020 I said that the most important technologies to follow are WebAssembly and WASI and I still believe so.&lt;/p&gt;

&lt;p&gt;You can see my talk where no one in the audience knew what WASI was and very few people knew about WebAssembly:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kuscscuKTa8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I remember when I was already excited about the development of WASI and I saw this tweet from Solomon Hykes, founder and CTO of Docker, in March, 2019, that reassured me about my intuition. I am always quoting it when talking about WASM and WASI:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--sSaEOM1d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1148186197296070657/ow43KBGn_normal.jpg" alt="Solomon Hykes profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Solomon Hykes
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @solomonstre
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      If WASM+WASI existed in 2008, we wouldn't have needed to created Docker. That's how important it is. Webassembly on the server is the future of computing. A standardized system interface was the missing link. Let's hope WASI is up to the task! &lt;a href="https://t.co/wnXQg4kwa4"&gt;twitter.com/linclark/statu…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      20:39 PM - 27 Mar 2019
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            Lin Clark
          &lt;/span&gt;
          @linclark
        &lt;/div&gt;
        WebAssembly running outside the web has a huge future. And that future gets one giant leap closer today with...

📢 Announcing WASI: A system interface for running WebAssembly outside the web (and inside it too)

https://t.co/HdEAZAyqYu
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1111004913222324225" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1111004913222324225" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1111004913222324225" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;I believe that Web development will change forever because of WebAssembly. And how we understand microservices and cloud computing will change because of WASI.&lt;/p&gt;

&lt;p&gt;For that reason while evaluating programming languages today, my recommendation is to always look at how important for them is targeting WASM and WASI, and how well they are suited for that.&lt;/p&gt;

&lt;p&gt;That means that the first languages to support WASI when it gets traction, may be relatively low-level, non-garbage-collected system languages.&lt;/p&gt;

&lt;p&gt;Now, after this short introduction, finally some languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming languages
&lt;/h2&gt;

&lt;p&gt;Programming languages to keep an eye on in 2022, in the context of WASM and WASI&lt;/p&gt;

&lt;h3&gt;
  
  
  Rust
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rust-lang.org/"&gt;https://www.rust-lang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rust-lang/rust"&gt;https://github.com/rust-lang/rust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rust probably needs no introduction, especially in the context of WASM. Pretty much all of early tools for WASM were written in Rust, and Rust has been used in many WASM examples from the very beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zig
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ziglang.org/"&gt;https://ziglang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ziglang/zig"&gt;https://github.com/ziglang/zig&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Great little language with interesting ways of how it handles errors and memory allocation. It supports WASM as one of its build targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  AssemblyScript
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.assemblyscript.org/"&gt;https://www.assemblyscript.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AssemblyScript/assemblyscript"&gt;https://github.com/AssemblyScript/assemblyscript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is pretty much a version of TypeScript that is stripped down to run on WASM.&lt;/p&gt;

&lt;h3&gt;
  
  
  TinyGo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tinygo.org/"&gt;https://tinygo.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tinygo-org/tinygo"&gt;https://github.com/tinygo-org/tinygo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A smaller Go version developed for embedded systems that is also well suited for WASM targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://odin-lang.org/"&gt;https://odin-lang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/odin-lang/Odin"&gt;https://github.com/odin-lang/Odin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A interesting data-oriented language, used for graphical effects in movies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nim
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nim-lang.org/"&gt;https://nim-lang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nim-lang/Nim"&gt;https://github.com/nim-lang/Nim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A statically typed compiled systems programming language with Python-like syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grain
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://grain-lang.org/"&gt;https://grain-lang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/grain-lang/grain"&gt;https://github.com/grain-lang/grain&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An interesting strongly typed functional language. It targets WASM as it's main (only?) compilation target.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript and TypeScript
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tc39.es/"&gt;https://tc39.es/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tc39/proposals"&gt;https://github.com/tc39/proposals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/"&gt;https://www.typescriptlang.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/TypeScript"&gt;https://github.com/microsoft/TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/"&gt;https://nodejs.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nodejs/node"&gt;https://github.com/nodejs/node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deno.land/"&gt;https://deno.land/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/denoland/deno"&gt;https://github.com/denoland/deno&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JavaScript and TypeScript will always be popular, but those languages will not be the first to &lt;strong&gt;target&lt;/strong&gt; WASM and WASI because of many reasons like big runtimes and garbage collection, but will be important to &lt;strong&gt;host&lt;/strong&gt; other WASM-targeting languages and to bridge them with DOM and other Web APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtimes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Wasmtime
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wasmtime.dev/"&gt;https://wasmtime.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bytecodealliance/wasmtime"&gt;https://github.com/bytecodealliance/wasmtime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  WAMR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bytecodealliance/wasm-micro-runtime"&gt;https://github.com/bytecodealliance/wasm-micro-runtime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.intel.com/content/www/us/en/developer/articles/technical/webassembly-interpreter-design-wasm-micro-runtime.html"&gt;https://www.intel.com/content/www/us/en/developer/articles/technical/webassembly-interpreter-design-wasm-micro-runtime.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wasmer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wasmer.io/"&gt;https://wasmer.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wasmerio/wasmer"&gt;https://github.com/wasmerio/wasmer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  More
&lt;/h3&gt;

&lt;p&gt;More WASM runtimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/appcypher/awesome-wasm-runtimes"&gt;https://github.com/appcypher/awesome-wasm-runtimes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frameworks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Spin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://spin.fermyon.dev/"&gt;https://spin.fermyon.dev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fermyon/spin"&gt;https://github.com/fermyon/spin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spin is not a language but a framework for cloud microservices written in other languages that can compile to WebAssembly.&lt;/p&gt;

&lt;p&gt;More of the tech that I currently follow is in my GitHub README:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rsp"&gt;https://github.com/rsp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know in the comments what you think about those languages both in the context of native targets and WASM. I'd like to hear about your experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platforms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  wasmCloud
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wasmcloud.com/"&gt;https://wasmcloud.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;wasmCloud is one of the most interesting things that I've found lately and it's hard to explain what it is in just one sentence.&lt;/p&gt;

&lt;p&gt;The description of its website says: "wasmCloud is a platform for writing portable business logic that can run anywhere from the edge to the cloud, that boasts a secure-by-default, boilerplate-free developer experience with rapid feedback loop."&lt;/p&gt;

&lt;p&gt;It is something that I had in mind for quite some time but didn't know it existed, and when I found it I was really delighted.&lt;/p&gt;

&lt;p&gt;If I had to explain the idea quickly I would say that it is a platform for running and orchestrating little WebAssembly programs (that are written in Rust or anything that is compiled to WebAssembly) called Actors, that contain just business logic with no boilerplate related to connecting to databases and other services.&lt;/p&gt;

&lt;p&gt;You really need to watch their demos and other presentations to appreciate the idea.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cosmonic
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cosmonic.com/"&gt;https://cosmonic.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Distributed Application Platform, for the enterprise" - based on wasmCloud. From what I understand it's like a hosted wasmCloud. Not available yet but you can sign up now for early access.&lt;/p&gt;

</description>
      <category>webassembly</category>
      <category>wasi</category>
      <category>javascript</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Are you 'using' "useless" "\"QUOTES\""?</title>
      <dc:creator>Rafał Pocztarski</dc:creator>
      <pubDate>Wed, 01 Jul 2020 18:24:22 +0000</pubDate>
      <link>https://dev.to/rsp/stop-using-useless-quotes-3gm9</link>
      <guid>https://dev.to/rsp/stop-using-useless-quotes-3gm9</guid>
      <description>&lt;h2&gt;
  
  
  I write &lt;code&gt;&amp;lt;div id=foo&amp;gt;&lt;/code&gt;&lt;br&gt;instead of &lt;code&gt;&amp;lt;div id="foo"&amp;gt;&lt;/code&gt; in HTML
&lt;/h2&gt;

&lt;p&gt;just like &lt;code&gt;chmod a+x bar&lt;/code&gt; instead of &lt;code&gt;chmod "a+x" "bar"&lt;/code&gt; in shell.&lt;/p&gt;

&lt;p&gt;I write &lt;code&gt;&amp;lt;div class="multiple words"&amp;gt;&lt;/code&gt; if I have to in HTML&lt;br&gt;
just like &lt;code&gt;chmod a+x "File name with spaces"&lt;/code&gt; in shell.&lt;/p&gt;

&lt;h3&gt;
  
  
  I don't use useless quotes just for the hell of it. It "makes" "the" "html" "that" "is" "already" "cluttered" "enough" "even" "less" "readable".
&lt;/h3&gt;

&lt;p&gt;Usually when I show unquoted values in HTML as examples on my workshops, someone always points out that maybe &lt;strong&gt;it works in the browsers&lt;/strong&gt; but it is not &lt;strong&gt;actually valid&lt;/strong&gt; HTML. Well, maybe, but &lt;strong&gt;are you sure&lt;/strong&gt; your own code is always valid? &lt;strong&gt;See the exercise below&lt;/strong&gt; and check if you can spot all problems in this short HTML and then run the validator to see if you found everything. The results may surprise you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I care
&lt;/h2&gt;

&lt;p&gt;I cried in 1998 when W3C published &lt;em&gt;Reformulating HTML in XML&lt;/em&gt; but hoped it wouldn't get traction. When XHTML 1.0 was officially adopted as a W3C Recommendation in January 2000, I was lifeless and devastated when I was changing all my &lt;code&gt;&amp;lt;img src=rounded-border-top-left.gif&amp;gt;&lt;/code&gt; to &lt;code&gt;&amp;lt;img src="rounded-border-top-left.gif"/&amp;gt;&lt;/code&gt; and later was praying for the W3C to open their eyes while they were developing the dead-end XHTML 2.0 and my prayers have been answered! When HTML5 came out in 2007 and when W3C abandoned the XHTML dead-end standard, I celebrated like never before - but to this day I see frontend developers who act like 2007 never happened. &lt;/p&gt;

&lt;h2&gt;
  
  
  Exercise for the reader
&lt;/h2&gt;

&lt;p&gt;Read the short HTML example below and:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Note everything that you think is not strictly valid according to the letter of the standard (even if you think that would work in the browsers)&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://validator.w3.org/"&gt;the official W3C HTML validator&lt;/a&gt; and see if you spotted all errors and warnings!&lt;/li&gt;
&lt;li&gt;Write in the comments if you were surprised - but &lt;strong&gt;no spoilers&lt;/strong&gt; for the readers!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Especially look for
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;There is code above &lt;code&gt;&amp;lt;!doctype html&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;!DOCTYPE&lt;/code&gt; is lowercase&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;HTML&lt;/code&gt; in doctype is lowercase&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"en"&lt;/code&gt; in &lt;code&gt;&amp;lt;html lang=en&amp;gt;&lt;/code&gt; is not quoted&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"en"&lt;/code&gt; in &lt;code&gt;&amp;lt;html lang=en&amp;gt;&lt;/code&gt; is lowercase&lt;/li&gt;
&lt;li&gt;There is no &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;!&lt;/li&gt;
&lt;li&gt;There is no &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;!&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"utf-8"&lt;/code&gt; in &lt;code&gt;&amp;lt;meta charset=utf-8&amp;gt;&lt;/code&gt; is not quoted but contains a dash&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"utf-8"&lt;/code&gt; in &lt;code&gt;&amp;lt;meta charset=utf-8&amp;gt;&lt;/code&gt; is lowercase&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"stylesheet"&lt;/code&gt; is not quoted in the &lt;code&gt;&amp;lt;link rel=stylesheet&amp;gt;&lt;/code&gt; tag&lt;/li&gt;
&lt;li&gt;The full URL with colons and slashes is not quoted in &lt;code&gt;href=https://example.com/style.css&lt;/code&gt; in the &lt;code&gt;&amp;lt;link rel=stylesheet&amp;gt;&lt;/code&gt; tag&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;link rel=stylesheet&amp;gt;&lt;/code&gt; tag has no &lt;code&gt;type="text/css"&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;There is no &lt;code&gt;&amp;lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&amp;gt;&lt;/code&gt; tag&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Abc&lt;/code&gt; text node is directly in &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; without any &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; (not to mention the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt; is missing the trailing slash in &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag has unquoted &lt;code&gt;src&lt;/code&gt; value&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag does't have a slash like in &lt;code&gt;&amp;lt;img src="icon.gif"/&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag has empty &lt;code&gt;alt&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"foo"&lt;/code&gt; is not quoted in &lt;code&gt;&amp;lt;div id=foo&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"bar-baz"&lt;/code&gt; is not quoted in &lt;code&gt;&amp;lt;div id=bar-baz&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; but contains a dash&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;"menu.html"&lt;/code&gt; is not quoted in &lt;code&gt;&amp;lt;a href=menu.html&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt; but contains a dot&lt;/li&gt;
&lt;li&gt;The external &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; has no &lt;code&gt;type="text/javascript" or&lt;/code&gt;type="application/ecmascript"` property&lt;/li&gt;
&lt;li&gt;The external &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag has a fully qualified URL that is not quoted&lt;/li&gt;
&lt;li&gt;The internal &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; has no &lt;code&gt;type="text/javascript" or &lt;/code&gt;type="application/ecmascript"` property&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The HTML
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- find incorrect html below --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;title&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;stylesheet&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;https://example.coms/style.css&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
Abc
&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;icon.gif&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;foo&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;bar-baz&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;menu.html&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;https://example.com/library.js&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Do you have an HTML validator in your eyes? Leave comments below!
&lt;/h3&gt;

&lt;p&gt;(but no spoilers for others!)&lt;/p&gt;

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