<feed
    xmlns="http://www.w3.org/2005/Atom"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xml:lang="en">
  <link rel="self"      type="application/atom+xml" href="https://euandre.org/en/blog/feed.video-review.xml" />
  <link rel="alternate" type="text/html"            href="https://euandre.org/en/blog/" hreflang="en" />
  <title>EuAndreh&apos;s website</title>
  <subtitle>Blog</subtitle>
  <id>https://euandre.org/en/blog/feed.video-review.xml</id>
  <updated>2026-09-13T12:14:51+00:00</updated>
  <author>
    <name>EuAndreh</name>
    <email>eu@euandre.org</email>
  </author>
  <entry xml:lang="en">
    <title type="html">
      The Next Paradigm Shift in Programming - video review
    </title>
    <link type="text/html" rel="alternative" href="https://euandre.org/en/blog/2020/11/08/paradigm-shift-review.html" title="The Next Paradigm Shift in Programming - video review" />
    <published>
      2020-11-08T00:00:00+00:00
    </published>
    <id>
      https://euandre.org/en/blog/2020/11/08/paradigm-shift-review.html
    </id>
    <author>
      <name>
        EuAndreh
      </name>
      <email>
        eu@euandre.org
      </email>
    </author>
    <summary type="html">
        &lt;div id=&quot;preamble&quot;&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;This is a review with comments of &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=6YbK8o9rZfI&quot;&gt;The Next
              Paradigm Shift in Programming&lt;/a&gt;&quot;, by Richard Feldman.&lt;/p&gt;
    </summary>
    <content type="html" xml:base="en/blog/2020/11/08/paradigm-shift-review.html">
        &lt;div id=&quot;preamble&quot;&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;This is a review with comments of &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=6YbK8o9rZfI&quot;&gt;The Next
              Paradigm Shift in Programming&lt;/a&gt;&quot;, by Richard Feldman.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;This video was &lt;em&gt;strongly&lt;/em&gt; suggested to me by a colleague. I wanted to discuss it with her, and
              when drafting my response I figured I could publish it publicly instead.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Before anything else, let me just be clear: I really like the talk, and I think Richard is a great
              public speaker. I’ve watched several of his talks over the years, and I feel I’ve followed his career at
              a distance, with much respect. This isn’t a piece criticizing him personally, and I agree with almost
              everything he said. These are just some comments but also nitpicks on a few topics I think he missed, or
              that I view differently.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;structured-programming&quot;&gt;Structured programming&lt;a class=&quot;anchor&quot;
             href=&quot;#structured-programming&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;The historical overview at the beginning is very good. In fact, the very video I watched previously
              was about structured programming!&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Kevlin Henney on &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=SFv8Wm2HdNM&quot;&gt;The Forgotten Art of
              Structured Programming&lt;/a&gt;&quot; does a deep-dive on the topic of structured programming, and how on his view
              it is still hidden in our code, when we do a &lt;code&gt;continue&lt;/code&gt; or a &lt;code&gt;break&lt;/code&gt; in some ways.
              Even though it is less common to see an explicit &lt;code&gt;goto&lt;/code&gt; in code these days, many of the
              original arguments of Dijkstra against explicit `goto`s is applicable to other constructs, too.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;This is a very mature view, and I like how he goes beyond the &quot;don’t use `goto`s&quot; heuristic and
              proposes and a much more nuanced understanding of what &quot;structured programming&quot; means.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;In a few minutes, Richard is able to condense most of the significant bits of Kevlin’s talk in a
              didactical way. Good job.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;oop-like-a-distributed-system&quot;&gt;OOP like a distributed system&lt;a class=&quot;anchor&quot;
             href=&quot;#oop-like-a-distributed-system&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Richard extrapolates Alan Kay’s original vision of OOP, and he concludes that it is more like a
              distributed system that how people think about OOP these days. But he then states that this is a rather
              bad idea, and we shouldn’t pursue it, given that distributed systems are known to be hard.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;However, his extrapolation isn’t really impossible, bad or an absurd. In fact, it has been followed
              through by Erlang. Joe Armstrong used to say that &quot;&lt;a href=
              &quot;https://www.infoq.com/interviews/johnson-armstrong-oop/&quot;&gt;Erlang might the only OOP language&lt;/a&gt;&quot;, since
              it actually adopted this paradigm.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;But Erlang is a functional language. So this &quot;OOP as a distributed system&quot; view is more about
              designing systems in the large than programs in the small.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;There is a switch of levels in this comparison I’m making, as can be done with any language or
              paradigm: you can have a functional-like system that is built with an OOP language (like a compiler, that
              given the same input will produce the same output), or an OOP-like system that is built with a functional
              language (Rich Hickey calls it &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=ROor6_NGIWU&quot;&gt;OOP in the
              large&lt;/a&gt;&quot;footnote:langsys[ From 24:05 to 27:45. ]).&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;So this jump from in-process paradigm to distributed paradigm is rather a big one, and I don’t think
              you he can argue that OOP has anything to say about software distribution across nodes. You can still
              have Erlang actors that run independently and send messages to each other without a network between them.
              Any OTP application deployed on a single node effectively works like that.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;I think he went a bit too far with this extrapolation. Even though I agree it is a logical a fair one,
              it isn’t evidently bad as he painted. I would be fine working with a single-node OTP application and
              seeing someone call it &quot;a &lt;em&gt;real&lt;/em&gt; OOP program&quot;.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;first-class-immutability&quot;&gt;First class immutability&lt;a class=&quot;anchor&quot;
             href=&quot;#first-class-immutability&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;I agree with his view of languages moving towards the functional paradigm. But I think you can narrow
              down the &quot;first-class immutability&quot; feature he points out as present on modern functional programming
              languages to &quot;first-class immutable data structures&quot;.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;I wouldn’t categorize a language as &quot;supporting functional programming style&quot; without a library for
              functional data structures it. By discipline you can avoid side-effects, write pure functions as much as
              possible, and pass functions as arguments around is almost every language these days, but if when
              changing an element of a vector mutates things in-place, that is still not functional programming.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;To avoid that, you end-up needing to make clones of objects to pass to a function, using freezes or
              other workarounds. All those cases are when the underlying mix of OOP and functional programming
              fail.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;There are some languages with third-party libraries that provide functional data structures, like
              &lt;a href=&quot;https://sinusoid.es/immer/&quot;&gt;immer&lt;/a&gt; for C++, or &lt;a href=
              &quot;https://immutable-js.github.io/immutable-js/&quot;&gt;ImmutableJS&lt;/a&gt; for JavaScript.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;But functional programming is more easily achievable in languages that have them built-in, like
              Erlang, Elm and Clojure.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;managed-side-effects&quot;&gt;Managed side-effects&lt;a class=&quot;anchor&quot;
             href=&quot;#managed-side-effects&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;His proposal of adopting managed side-effects as a first-class language concept is really
              intriguing.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;This is something you can achieve with a library, like &lt;a href=&quot;https://redux.js.org/&quot;&gt;Redux&lt;/a&gt; for
              JavaScript or &lt;a href=&quot;https://github.com/Day8/re-frame&quot;&gt;re-frame&lt;/a&gt; for Clojure.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;I haven’t worked with a language with managed side-effects at scale, and I don’t feel this is a
              problem with Clojure or Erlang. But is this me finding a flaw in his argument or not acknowledging a
              benefit unknown to me? This is a provocative question I ask myself.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Also all FP languages with managed side-effects I know are statically-typed, and all dynamically-typed
              FP languages I know don’t have managed side-effects baked in.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;what-about-declarative-programming&quot;&gt;What about declarative programming?&lt;a class=&quot;anchor&quot;
             href=&quot;#what-about-declarative-programming&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;In &quot;&lt;a href=&quot;https://curtclifton.net/papers/MoseleyMarks06a.pdf&quot;&gt;Out of the Tar Pit&lt;/a&gt;&quot;, B. Moseley
              and P. Marks go beyond his view of functional programming as the basis, and name a possible &quot;functional
              relational programming&quot; as an even better solution. They explicitly call out some flaws in most of the
              modern functional programming languages, and instead pick declarative programming as an even better
              starting paradigm.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;If the next paradigm shift is towards functional programming, will the following shift be towards
              declarative programming?&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;sect1&quot;&gt;
          &lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;a class=&quot;anchor&quot;
             href=&quot;#conclusion&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
          &lt;div class=&quot;sectionbody&quot;&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Beyond all Richard said, I also hear often bring up functional programming when talking about
              utilizing all cores of a computer, and how FP can help with that.&lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;paragraph&quot;&gt;
              &lt;p&gt;Rich Hickey makes a great case for single-process FP on his famous talk &quot;&lt;a href=
              &quot;https://www.infoq.com/presentations/Simple-Made-Easy/&quot;&gt;Simple Made Easy&lt;/a&gt;&quot;.&lt;/p&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
    </content>
  </entry>
</feed>
