Script
Here is The Daily FM summary of the airhacks.fm podcast with adam bien that aired on Tuesday September 29th. Adam Bien and returning guest Donald Raab took a wide-ranging trip through the history of programming “blocks,” from Clipper and Smalltalk to Java lambdas, Eclipse Collections, and modern IDE habits. [1]
The central thread was how developers pass behavior around in code. Raab first encountered blocks in the DOS-era database language Clipper 5, mostly as a practical mechanism for sorting data or defining what database-browser columns displayed. He did not fully understand their significance until learning IBM VisualAge Smalltalk, where blocks were powerful, first-class pieces of executable behavior. Smalltalk syntax used square brackets, parameters on one side of a vertical pipe, and expressions on the other—a distant relative of Java’s lambda arrow syntax. [2]
Adam recalled working with Smalltalk developers before Java 8, who filled Java code with anonymous inner classes because they missed blocks. Their designs could become elaborate, with nested inner classes and inheritance, but they were productive. Raab’s perspective was that Java developers spent years simulating a feature that Smalltalk had offered naturally. [3]
They also explored Smalltalk’s famously mind-bending object model. In Smalltalk, `nil` is not merely an absence of value: it is an object that can receive messages. Raab described the strange but elegant hierarchy in which Object ultimately relates back to nil and undefined-object concepts. Adam distilled it into the episode’s memorable philosophical slogan: “Object inherits from nothing, but nothing is something.” [4]
The conversation then connected blocks to collection APIs. Smalltalk’s rich collection framework inspired Eclipse Collections directly, including its distinctive method names: `select`, `reject`, `detect`, `collect`, and `injectInto`. Raab argued these names are often clearer than generic alternatives. In particular, `filter` can be ambiguous because it does not say whether it keeps matching elements or removes them. `select` clearly includes, while `reject` clearly excludes. [5]
The most surprising naming origin was Raab’s claim that Smalltalk’s rhyming collection names may have come from “Alice’s Restaurant,” an Arlo Guthrie song associated in parts of the United States with Thanksgiving radio programming. A lyric reportedly uses a chain of words such as selected, rejected, detected, and injected. Adam jokingly proposed researching whether cities that play the song most also have more Smalltalk programmers.
Raab explained that Eclipse Collections began internally at Goldman Sachs, first under the name Caramel—roughly “collection array map enumeration library.” Its goals were reducing repetitive for-loops and avoiding memory problems in large caching systems, rather than simply chasing raw speed. Before Java 8, the library used functional-style APIs implemented through anonymous inner classes. Once lambdas arrived, teams could use automated refactoring to remove much of that boilerplate, producing noticeably smaller codebases.
He open-sourced the library, initially as GS Collections and later Eclipse Collections, partly so he could share real-world lambda use cases with the JSR 335 expert group that designed Java lambdas and streams. Raab emphasized that the eventual bonus feature was method references, which he considers even more valuable than lambdas for readable code.
They closed with respect for Java language architect Brian Goetz and the careful evolution of Java. Adam’s takeaway was that Java’s smaller features—records, patterns, switches, lambdas, streams—compose into bigger capabilities over time. The next discussion is set to dive further into Eclipse Collections, memory-efficient primitive collections, mutability, collectors, and the enduring distinction between closures, blocks, and lambdas. Thank you for listening to airhacks.fm in 3 minutes from The Daily FM. See you next time! [6]
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
...time the cliffhanger was not Eclipse collections, but I forgot what it was and I found it right now. It was Clipper and Blocks. And why we talk about blocks. This is what I know is because of I worked with small talk developers and they were missing blocks in Java back then and I tried to know to find something which is blocks, similar to blocks. I have no idea what they wanted. Actually they couldn't. They just said, you know, this is like inner class but nicer and it captures the state. And I say, okay, but why you need it, right? And so, and we had also chat about Clipper, various versions of Klipper and Debase and what we also found out that Klipper and what was related to Speaker B: Klipper and Smalltalk had some relation in terms of I think blocks themselves, but Speaker A: two products, Clipper and this would surprise me. Clipper and not Debase, debase. Spea...
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
...blocks. So how should we start with blocks is a small talk. Do you know the origin of blocks or Clipper or how to introduce blocks? Speaker B: Now if I had to guess, it was probably, I don't know if it was Lisp. Oh, damn the calculus going way back. But the first time I saw Blocks was actually in Klipper and It was in Klipper 5 in the 90s. And I didn't really understand what they were. I just knew that I had to use them if I wanted to sort a collection or attach dynamic behavior to let's say a database browser in some text based window that I would have been doing in DOS programming. So blocks were, if I recall correctly, were used for sorting. You could evaluate them, but they weren't the kind of things at the time that I used in my own programm
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
...time the cliffhanger was not Eclipse collections, but I forgot what it was and I found it right now. It was Clipper and Blocks. And why we talk about blocks. This is what I know is because of I worked with small talk developers and they were missing blocks in Java back then and I tried to know to find something which is blocks, similar to blocks. I have no idea what they wanted. Actually they couldn't. They just said, you know, this is like inner class but nicer and it captures the state. And I say, okay, but why you need it, right? And so, and we had also chat about Clipper, various versions of Klipper and Debase and what we also found out that Klipper and what was related to Speaker B: Klipper and Smalltalk had some relation in terms of I think blocks themselves, but Speaker A: two products, Clipper and this would surprise me. Clipper and not Debase, debase. Spea...
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
...the cliffhanger was not Eclipse collections, but I forgot what it was and I found it right now. It was Clipper and Blocks. And why we talk about blocks. This is what I know is because of I worked with small talk developers and they were missing blocks in Java back then and I tried to know to find something which is blocks, similar to blocks. I have no idea what they wanted. Actually they couldn't. They just said, you know, this is like inner class but nicer and it captures the state. And I say, okay, but why you need it, right? And so, and we had also chat about Clipper, various versions of Klipper and Debase and what we also found out that Klipper and what was related to Speaker B: Klipper and Smalltalk had some relation in terms of I think blocks themselves, but Speaker A: two products, Clipper and this would surprise me. Clipper and not Debase, debase. Speaker B...
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
...liffhanger was not Eclipse collections, but I forgot what it was and I found it right now. It was Clipper and Blocks. And why we talk about blocks. This is what I know is because of I worked with small talk developers and they were missing blocks in Java back then and I tried to know to find something which is blocks, similar to blocks. I have no idea what they wanted. Actually they couldn't. They just said, you know, this is like inner class but nicer and it captures the state. And I say, okay, but why you need it, right? And so, and we had also chat about Clipper, various versions of Klipper and Debase and what we also found out that Klipper and what was related to Speaker B: Klipper and Smalltalk had some relation in terms of I think blocks themselves, but Speaker A: two products, Clipper and this would surprise me. Clipper and not Debase, debase. Speaker B: May...
- airhacks.fm podcast with adam bien: select, reject, detect, collect and inject
Speaker A: Hi Donald. Welcome back, Adam. Speaker B: Thank you. Good to be back. Speaker A: I'm aiming today to cover at least one to two years, you know, of history. And I was sure that the last time the cliffhanger was not Eclipse collections, but I forgot what it was and I found it right now. It was Clipper and Blocks. And why we talk about blocks. This is what I know is because of I worked with small talk developers and they were missing blocks in Java back then and I tried to know to find something which is blocks, similar to blocks. I have no idea what they wanted. Actually they couldn't. They just said, you know, this is like inner class b...
