Effective Programs - 10 Years of Clojure - Rich Hickey
ClojureTV10 HN recommenders · recommended in 10 months, 2017–2026
talk · intermediate · evergreen · 2017–2026 on HN
Rich Hickey's talk at Clojure's tenth anniversary on the kind of programs Clojure is designed for. He argues for situated programs that deal with changing requirements, and for dynamic typing and data over static types.
HN's go-to link in typing debates and for talk lists, and several call it their favorite programming talk even for non-Clojure users.
Up next
2 mo on HNRick Roderick on Baudrillard - Fatal Strategies [full length]
The Partially Examined Life
2 HN recommender · 2020–2024
11 mo on HNThe great porn experiment | Gary Wilson | TEDxGlasgow
TEDx Talks
10 HN recommender · 2012–2023
2 mo on HNInside Job (2010 Full Documentary Movie)
Aditya Shukla
2 HN recommender · 2021–2025
3 mo on HNMy Gift To Climate Alarmists
Tony Heller
3 HN recommender · 2019–2023
14 mo on HNThe Soul of Erlang and Elixir • Sasa Juric • GOTO 2019
GOTO Conferences
16 HN recommender · 2019–2024
8 mo on HNSeattle is Dying | A KOMO News Documentary
KOMO News
10 HN recommender · 2019–2024
4 mo on HNStuart Halloway - Narcissistic Design
Reaktor
4 HN recommender · 2018–2021
3 mo on HNMy old BBC Micro system
mikeselectricstuff
3 HN recommender · 2017–2022
18 mo on HNRuby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich
Confreaks
17 HN recommender · 2013–2026
14 mo on HN"Simple Made Easy" - Rich Hickey (2011)
Strange Loop Conference
14 HN recommender · 2022–2026
13 mo on HN"Making Impossible States Impossible" by Richard Feldman
elm-conf
9 HN recommender · 2017–2026
12 mo on HNWilliam Byrd on "The Most Beautiful Program Ever Written" [PWL NYC]
PapersWeLove
11 HN recommender · 2017–2026
12 comments from Hacker News
Rich hickey explains at this timestamp in the video, ▶ this video "The information programming problem" Whole video is gold, is my fav programming talk of all time.
> Requirements change. Every software engineering project will face this hard problem at some point. Rich Hickey calls this a 'situated' program in his talk from Clojure/Conj 2017, where the program has to deal with information and real-world irregularities for extended periods. While agile disciplines help you from one perspective, your tools (e.g. program language) might also help you solve some of the problems. In this framing, Clojure certainly tries to help where the it matters most. Highly recommended to read the transcript or watch the video, even if you are not interested in the language itself. Video: ▶ this video Transcript: link
Rich Hickey has a lot of excellent stuff to say. Not only are his ideas philosophically sound, but also real, practical and ready to use in the form of Clojure. This recent review "10 years of Clojure", encapsulates a lot of of the wisdom: ▶ this video
Consider reading/watching Rich Hickey's talk Effective Programs [0][1] and Maybe Not [2][3] In [0] in particular there're slides 22/23, here is part of the transcript but makes more sense with the slides on: > And you can call them problems, and I'm going to call them the problems of programming. And I've ordered them here [...] I've ordered them here in terms of severity. And severity manifests itself in a couple of ways. Most important, cost. What's the cost of getting this wrong? At the very top you have the domain complexity, about which you could do nothing. This is just the world. It's as complex as it is. > > But the very next level is the where we start programming, right? We look at the world and say, "I've got an idea about how this is and how it's supposed to be and how, you know, my program can be effective about addressing it". And the problem is, if you don't have a good idea about how the world is, or you can't map that well to a solution, everything downstream from that is going to fail. There's no surviving this misconception problem. And the cost of dealing with misconceptions is incredibly high. > >So this is 10x, a full order of magnitude reduction in (?) severity before we get to the set of problems I think are more in the domain of what programming languages can help with, right? And because you can read these they'll all going to come up in a second as I go through each one on some slide so I'm not going to read them all out right now. But importantly t
Rich Hickey's talks "Simple Made Easy" [1] and "Effective Programs" [2] provide a better explanation of these ideas IMO. The specific definition of "simple" is pretty crucial. [1] link [2] ▶ this video
▶ this video Goes until 43:25. The whole talk is worth watching. It's basically about the higher level problems of business app development, how to address them, and how Clojure does address them.
Here's a video of the creator of Clojure explaining his preference for dynamic vs static languages, and how he came to the choice of making Clojure dynamic, that may help inform your decision: ▶ this video
That's quite a judgement call to make based on the utility of error messages. I can't remember the last time I was blocked based on a Clojure error message anyway. Errors are less frequent and usually pretty obvious. I think you're wrong to say core devs don't understand modern programming, but you'd probably be right to say that they didn't prioritize making it approachable and stooping to the lowest common denominator. And it's not just Clojure, but datomic, core.async, spec -- all solving real problems in modern large scale programming with elegance. Watch Rich's 'Effective Programs' talk [1] and lmk if you still feel that he's out of touch with modern large scale programming. I think he's pretty in tune. [1] ▶ this video
We Really Don't Know How to Compute: Gerry Sussman - link Zebras All the Way Down: Bryan Cantrill - link Jonathan Blow on Deep Work: Jonathan Blow - link Simple Made Easy: Rich Hickey - link Effective Programs - 10 Years of Clojure: Rich Hickey - ▶ this video The Last Thing D Needs: Scott Meyers - link
One of the big benefits of clojure being dynamic is that everything is data (e.g. a map, set, vector or list). This is what allows reuse. - The vast core library of functions that manipulate those data structures can be used for everything in your program, cos it's all data. - Most clojure libraries take and/or return data, reducing the need for clumsy adaptors, or even worse not being able to get at the data you need cos the library writer was really enthusiastic about encapsulation of everything they thought was of no use to consumers. - You don't have a person class, you have a map with a first name and last name. Now the function that turns first + last name into full name can be reused for any other map with the same keys. (A rather spurious example, but a real one would take a large codebase and an essay to describe) I can only recommend watching some of Rich Hickey's talks, particularly these ones, they're not entirely about types, but they express the above ideas much better than I can: - Simple made easy link - Effective programs ▶ this video - Are we there yet? (this one is more about OOP, but unless you're using something like haskell, idris etc its relevant for your type system of choice) link
> `a -> a`; `[a] -> [a]`; It means nothing! It tells you nothing ! — Rich Hickey, Effective Programs [0] [0]: ▶ this video --- A disastrously poor take. I used to work at a Clojure company, and there's no chance I'd ever go back to that.
"Enterprise" stuff in a much less "enterprise" way is one usage, hence being based off the JVM. Rich Hickey has also mentioned the concept of "situational programs"[1] which Clojure is used in a lot. Clojure is also used in a wide variety of other areas like data science[2] or desktop applications[3] much like other general purpose programming languages. [1] ▶ this video [2] link [3] link