1. 26

My response to Thinking the Unthinkable.


  2. 9

    I think Bob Harper’s position on “programming paradigms” is worth consideration.


    One of the more obvious problems with computing as a “science” in the western tradition is that the objects of our study often come into existence as an effect of our study itself. The “informatics” formulation avoids the myopic focus on physical machinery, but information itself is a slippery subject. I highly recommend Herbert Simon’s classic The Sciences of the Artificial as a starting point for those who would be serious about epistemology in this field.

    Also, for those who would seek some kind of solid foundation in mathematics, the philosophy of mathematics itself is pertinent, from Lakatos to Lakoff and beyond. In brief, human values and lived experience are not so easily disentangled from mathematical “reality”. My advice to anyone who cares about this stuff is, start reading in the philosophy of science and technology… and don’t stop with Kuhn!

    1. 4

      Also Wittgenstein’s philosophical investigations is great for thinking about programming and science in general.

    2. 3

      “OOP was concerned with representing reality”

      This is a widely held belief but it’s neither the most useful definition nor original intent. Likewise classification through hierarchical taxonomies is not an essential aspect of OOP, but an unfortunate offshoot of the popular “representing reality” mindset.

      They original intent and most useful concept of OOP is essentially message passing. Smalltalk’s early (ca 1972) evolution and Hewitt’s actors influenced each other through first person exchanges between Kay and Hewitt.

      1. 3

        They original intent and most useful concept of OOP is essentially message passing. Smalltalk’s early (ca 1972) evolution and Hewitt’s actors influenced each other through first person exchanges between Kay and Hewitt.

        I think there’s a couple of common misconceptions here. The first is that Smalltalk was the “original intent” of OOP. The first OOP language was Simula-67 (ca 1968), which had polymorphic dispatch and inheritance. IIRC Smalltalk and Simula were developed independently and each contributed ideas to “modern” OOP.

        The second is that there is an “essential aspect” of OOP at all. There is no “essential” OOP in the same way there is no “essential” FP: Lisp, APL, and ML are all considered FP languages despite being wildly different from each other. I’d argue that there’s a few common “pedigrees” of OOP that are all influential and all contribute ideas that most modern OOP languages consider “essential”:

        • Simula: Modularization, Dynamic Dispatch
        • Smalltalk: Message Passing
        • CLU: Abstract Data Types, Generics
        • Eiffel: Contracts, Class Invariants*

        I think part of the reason we assume Smalltalk is the “foundation” of OOP is because the other foundational languages, for the most part, aren’t well-known today.

        *I’ve read that CLU had contracts first, but I can’t find a primary source on this.

        1. 4

          Alan Kay, The Early History of Smalltalk…

          “The whole point of OOP is not to have to worry about what is inside an object… data and control structures be done away with in favor of a more biological scheme of protected universal cells interacting only through messages that could mimic any desired behavior.”

          “Though it has noble ancestors indeed, Smalltalk’s contribution is a new design paradigm—which I called object-oriented—for attacking large problems of the professional programmer, and making small ones possible for the novice user.”

          “[Dedicated] To SKETCHPAD, JOSS, LISP, and SIMULA, the 4 great programming conceptions of the sixties.”

          “It is not too much of an exaggeration to say that most of my ideas from then on took their roots from Simula—but not as an attempt to improve it. It was the promise of an entirely new way to structure computations that took my fancy.”

          “In 1966, SIMULA was the “better old thing,” which if looked at as “almost a new thing” became the precursor of Smalltalk in 1972.”

          1. 2

            Is Haskell missing the whole point of Functional Programming because it’s not a Lisplike?

            1. 2

              The way I see it, running all the combinations of features in OO/Actor and then running combinations for all of the features in FP the elemental thing seems to be ‘tell’ in OO/Actor and ‘ask’ in FP. ‘Tell’ enables asynchrony and ‘ask’ enables ‘laziness.’ They are quite high but different mechanisms for modularity.

              1. 2

                I’m sorry. Who is claiming Haskell is “missing the whole point of functional programming”?

                1. 1

                  It’s a point of comparison. While AK was very important in The foundations of OOP, he doesn’t have a ground to claim he’s the founder or even necessarily the most significant contributor. And just because modern OOP diverges from his vision does not mean that it’s in some way diminished because of that.

                  Similar to how Haskell is very different from lisp but still counts as an FP language.

                  1. 1

                    If the history you’ve got is not the history you want, just make it up as you go along. I have no interest in a discuss like this.

                    1. 1

                      What I’m saying is that equating OOP with just Alan Kay is historically incorrect. He played a big role, yes. But so did Kristen Nygaard, David Parnas, and Barbara Liskov. Their contributions matter just as much and ignoring them is historical revisionism.

                      1. 1

                        I never equated OOP with “just Alan Kay”. I equated him correctly with coining the term and inventing the first (completely) OOP language Smalltalk. Parnas and Liskov played roles, certainly in modularity, information hiding, and abstract data types. Later on in the history of OOP I recall around 1986-7 Luca Cardelli published a paper which was intended to provide a taxonomy of OOP-related terms. He define languages like CLU (abstract data types, parametric polymorphism, but no message-passing / runtime dispatch) as “object-based” where he reserved “object-oriented” for the latter.

                        Certainly Kay never gave Nygaard the short shrift, emphasizing in countless forums Simula’s huge role in OOP.

              2. 2

                That’s indeed what Alan Kay thinks, but he’s not exactly a neutral historian here, since he’s obviously a pretty strong partisan on behalf of the Smalltalk portion of that lineage.

                1. 2

                  “The Early History Of Smalltalk” is a reviewed, published (ACM HOPL) history of the early years of OOP by the person who originally used the term. If you wish to refer to that as being a “strong partisan” then I guess that’s your privilege.

                  1. 2

                    If we’re going to use the ACM as an authority here they officially recognize Dahl and Nygaard as the inventors of OOP.

                    1. 1

                      The ACM is correct and this coincides exactly with Kay’s attribution of Simula being a “better old thing” and “almost a new thing”. While Simula introduced all the key concepts of OOP, Kay coined the term to imply the new thing, which is “everything is an object” not Simula, the almost new thing, which is ALGOL + objects for some things.

                      It’s a fine line distinguishing the two, which Kay more than acknowledges and which does not disagree with the ACM’s recognition of Nygaard and Simula in the history of OOP.

          2. 3

            It might be a naive thought, but “Thinking the Unthinkable,” was not about programming languages themselves but their developing research programmes, and the overarching paradigms in which these are grounded.

            One example of “the unthinkable” would be non-well-founded set theory, as studied by Aczel in 1988. It is a provocative work, and its even stating its intended purpose as breaking fundaments, with the admission of “axioms of non-fundament.” My hypothesis is that it resulted, at least in Europe, in a split between conventional CS and so-called TCS.

            This split seems like a huge distance in retrospect. TCS is how I like to call it: concrete mathematics. Its machinery and tools has even developed past years to automate most of the mundane research tasks of the previous paradigm. In concrete terms, these researchers write compilers for new languages as easily as we do programming. Programming language theory thus has moved to the bin “academically uninteresting,” and many universities renamed their research groups to focus on new topics.

            In my own work I also try to break foundations. My claims, without providing too much details, are: algorithms are not the fundamental mathematical objects we should study, and the Halting problem is not actually a problem but a corollary of Cantor’s diagonalization proof of the existence of real numbers, and termination proofs are as important as productivity proofs. Instead of algorithms, we should study protocols. Protocols compose multiple underlying computers in a cooperative network. By designating some computers as irrational, i.e. we can only observe their behavior but not finitely represent it, we can model the real-world quite well. E.g. a Byzantine failure model becomes an irrational network component. Security and privacy properties are now the fundamental questions, which by sufficient mathematical modelling can be studied and understood.