I created for myself the meme Going Full Gogans (you know) which is, literally, what one should do in order to achieve anything slightly above mediocrity.
To go “higher” one has to Go Full Steppenwolf. which means to fully embrace and stick to the classics, ignoring everything “modern” as one ignores “user-defined genders and pronouns”.
By “classics” I mean just a few distinct well-established traditions and related cultures.
- The LISP tradition, with distinct MIT Scheme, Norvig and Graham books, and later Clojure cultures.
- The CLU and of Barbara Liskov tradition and a related subculture based on the books.
- The ML tradition, with SML, Ocaml, F#, Scala (reaction to
Java
– the monument to human stupidity) cultures. - The Miranda and Haskell, tradition and all the one-man’s pure language subcultures and books.
- The Erlang tradition (principle-guided, well-researched commercial successin telecoms).
- The GNU Emacs tradition, can be traced back to the sanity of the MIT CSAIL.
- The Python tradition of attention to details and of striving to do things just right (for an interpreter).
- The Go tradition (Bell labs, Plan9, UTF-8, Inferno, the Go standard library, C.A.R Hoare concurrency primitives).
- The Ada tradition, as of an academic imperative language – sane and “safe”.
- The Rust tradition, as the reaction to the
C++
– humiliation to the human intelligence.
Except for Rust, which is too new, the above mentioned constitute the Golden Age of Programming (forever lost).
Notice that everything mentioned above has literally grew out of just a few branches of mathematics, and could be traced (reduced) back to the Lambda Calculus, the Curry-Howard isomorphism and to what does it mean to discover such an isomorphism (to discover and to realize that something “Real” and primordial is actually “out there”).
One could adequately compare these with what the Upanishads and Early Buddhism were to the brahmanic, ritualistic, sorcery and magic shitshows of the time. This comparison is actually a serious statement.
On the other side are things like PHP (“The Fractal of Bad Design” – google it!), Nodejs, “async” and webshit in general. These are the anal porn of programming – very popular, you know.
The choice to stay with the classic traditions and to avoid “anal” (or webshit) is not just aesthetics and refined tastes, but a pure reason and pragmatism – all these traditions are mostly proper specializations of the fundamental mathematical notions and concepts, which in turn are proper generalizations of some aspects of the Truths which are actually out there, of What Is.
This is why (and how) the tracing back of all the concepts (ADTs -> FP -> Math -> What Is) is actually possible and doable. This locus – Logic, Types, Math (sets, functions, algebraic structures), FP – is the essence not just of programming but of everything else (of the proper philosophy which looks only at (and explains only) What Is).
The message is just this – do full Steppenwolf, – stay in your room with your classic books, classic courses and classic languages, the classic editors (Emacs and vi), the classic UNIX-like OSes.
What has been considered “divine” in the classic music (Bach, Mozart) is not just an primitive psychological “elevation of feelings” (as with these Cathedrals), but of something done right, close to an optimum, and this closeness is the only meaning of “divine”.
For us the touch of “divine” is what underlies this Curry-Howard isomorphism result. There is something truly universal has been captured, so we definitely should be aware of this.
Yes, it can be traced back to how the mind of an external observer processes the information – the mind maintain its own “symbolic environment” of the understood and labeled aspects of the wastly complex shared environment, but there is something deeper. That depth has been captured in the patterns of “arrows between dots”, and of the Modus Ponens being the ultimate “arrow” – a necessary and sufficient conditions for a single (next) step.
Every function captures such a (possible) single step, and nesting of them is how the actual (and potential) paths could be formed.
The courses
I have already listed these courses (and books) many times. These are the modern classics
- Brian Harvey’s CS61A
- Systematic Program Design by Gregor Kiczales
- Michael R. Clarkson’s textbook and videos
- Eric Grimson’s 2004 SICP course
- Dan Grossman’s PL course (the SML part)
- Graham Hutton’s Haskell courses and the book
- MIT Programming with Categories (B. Millevski)
- Norvig’s “Poker course” and his Pytudes