Top all-time · #1502
Jimmy Koppel
Personal blog · pathsensitive.com · on HN as Darmaniprogrammingdesign
Jimmy Koppel writes Path-Sensitive, a personal blog at pathsensitive.com about programming and design. Since 2018, 47 different Hacker News readers have linked it 82 times, most often “Defunctionalize the Continuation”. The last post was in 2024, but the archive is still widely read.
Too few sampled comments (16) to say how often HN recommends it.?
Why HN links it
HN readers link James Koppel's blog for software design writing: abstraction versus indirection, defunctionalization, refactoring, premature DRY and program synthesis. Commenters call several posts helpful and worth reading.
- Recommended for · 5 comments
- Abstraction post a helpful framing; defunctionalization talk 'quite good' and enjoyed; abstractions post urged for everyone.
Summarised by Claude from a sample of 16 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Essays by Jimmy Koppel (MIT PhD, founder of Mirdin) on software design, code quality, abstraction, and the ideas behind better programming tools.
Most-linked posts?
- Defunctionalize the Continuation8 people · 8 mentions · first linked 2019-07-15
- Programmers Should(N't) Learn Theory5 people · 6 mentions · first linked 2021-03-15
- Abstraction: Not what you think it is5 people · 5 mentions · first linked 2022-03-29
- The Benjamin Franklin method for learning more from programming books4 people · 5 mentions · first linked 2018-01-22
- 'Modules Matter' Most for the Masses4 people · 4 mentions · first linked 2023-03-31
- Book Review: A Philosophy of Software Design4 people · 4 mentions · first linked 2018-10-29
- When your data model means something else3 people · 4 mentions · first linked 2018-07-18
- Puzzles to convince you you don't understand dependence3 people · 3 mentions · first linked 2022-09-30
- The Best Refactoring You've Never Heard Of3 people · 3 mentions · first linked 2022-02-28
- My favorite principle for code quality2 people · 3 mentions · first linked 2018-02-14
What Hacker News says?
Jimmy Koppel wrote about this 6 years ago [1]. It's one of the first exercises in his software design course [2]. Two identical pieces of code can have different specifications. # x is an age of a person; the code checks if the person is past the retirement age in the US def is_of_retirement_age(x): return x >= 65; # x is an ASCII character which is already known to be alphanumeric; this code checks if it’s a letter…
Comment linking /2018/01/the-design-of-software-is-thing-apart.html
on “Don't DRY Your Code Prematurely”Submitted The Benjamin Franklin method for learning more from programming books as a story · 574 points
HN discussionPrototype. Make a pen-and-paper version, pantomime the game, tell the story -- do something to test the game's excitement power before building it. http://www.pathsensitive.com/2015/10/the-prototype-stereotyp...
Comment linking /2015/10/the-prototype-stereotype.html?m=1
on “Sales mistakes that software engineers make”Submitted Developer tools can be magic but instead collect dust as a story · 496 points
HN discussionI bailed on high school math, thinking I'm math dumb. In my late 20s I decided to try again, but jumped straight into calculus. And at first regretted that decision. However, I got lucky by stumbling upon this book: https://www.amazon.com/Calculus-Made-Easy-Silvanus-Thompson/... It "reads" like a book, with the ideas given context. I had an "ok" connection with Algebra, and the book explained the rest well enough fo…
Comment linking /2018/01/the-benjamin-franklin-method-of-reading.html
on “How to Study Mathematics (2017)”Submitted Book Review: A Philosophy of Software Design as a story · 349 points
HN discussionWhen discussing the definition of abstraction, Koppel's article "Abstraction: Not What You Think It Is" offers a helpful framing and disambiguation. https://www.pathsensitive.com/2022/03/abstraction-not-what-y...
Comment linking /2022/03/abstraction-not-what-you-think-it-is.html
on “That's not an abstraction, that's a layer of indirection”Submitted The Practice is not the Performance: Why project-based learning fails as a story · 241 points
HN discussionThis is such a great quote, and helps explain what is a good abstraction. Because CRDTs have been in the zeitgeist a lot lately, I want to pick them as an example of a "good" abstraction. CRDTs have mathematical properties which can be described and understood independently of a specific implementation. And importantly, you can judge whether an implementation is correct with reference to these abstract rules. This m…
Comment linking /2022/03/abstraction-not-what-you-think-it-is.html?m=1
on “That's not an abstraction, that's a layer of indirection”Submitted Defunctionalize the Continuation as a story · 236 points
HN discussionHere is a counter argument: http://www.pathsensitive.com/2018/10/book-review-philosophy-... My summary would be: The spec must cover all possible implementations so it is usually larger than the most simple one. An example from there: > The authors of SibylFS tried to write down an exact description of the `open` interface. Their annotated version of the POSIX standard is over 3000 words. Not counting basic machiner…
Comment linking /2018/10/book-review-philosophy-of-software.html
on “Cold Showers: For when people get too hyped up about things”Submitted The Design of Software is a Thing Apart as a story · 198 points
HN discussionFor Elixir specifically, I liked Dave Thomas’ Elixir for Programmers. https://codestool.coding-gnome.com/courses/elixir-for-progra... For learning about performance and low level stuff, Casey Muratori’s Performance Aware Programming course has been great. https://computerenhance.com For higher level software design stuff (beyond just GoF patterns), check out James Koppel’s writing at https://www.pathsensitive.com/ a…
Comment linking /
on “Ask HN: Programming Courses for Experienced Coders?”Submitted My favorite principle for code quality as a story · 189 points
HN discussionLevel 1, level 2 and level 3 are the authors conceptions. Another post of his details what he means... http://www.pathsensitive.com/2018/01/the-three-levels-of-sof...
Comment linking /2018/01/the-three-levels-of-software-why-code.html?m=1
on “Book Review: A Philosophy of Software Design”Submitted Abstraction: Not what you think it is as a story · 163 points
HN discussionThere appears to be a fuller version of this talk on the author's own site: http://www.pathsensitive.com/2019/07/the-best-refactoring-yo... Agreed it's quite good.
Comment linking /2019/07/the-best-refactoring-youve-never-heard.html
on “Defunctionalisation: An underappreciated tool for writing good software”Submitted Why code that never goes wrong can still be wrong as a story · 134 points
HN discussion> So.... this is just a fancy name for the advice "give your functions a name"? Not quite: "defunctionalization" is a name for replacing functions with not-functions (data structures). (And IMO it's the most unfancy name one can give to that activity, as the name literally just indicates "removing functions"... I can't think of a less fancy name for it: maybe "un-function-ize"? But that's pretty much the same as "de…
Comment linking /2019/07/the-best-refactoring-youve-never-heard.html
on “Defunctionalisation: An underappreciated tool for writing good software”Submitted Book Review: "Tidy First?" By Kent Beck as a story · 85 points
HN discussionPrior Art: "The Best Refactoring You've Never Heard Of" http://www.pathsensitive.com/2019/07/the-best-refactoring-yo...
Comment linking /2019/07/the-best-refactoring-youve-never-heard.html
on “Defunctionalisation: An underappreciated tool for writing good software”Submitted Elements of Programmnig as a story · 45 points
HN discussionThis is a technique worth talking/writing about a bit more. Sometime ago, Jimmy Koppel also wrote somewhat extensively about defunctionalization and refunctionalization as "refactoring" techniques - http://www.pathsensitive.com/2019/07/the-best-refactoring-yo...
Comment linking /2019/07/the-best-refactoring-youve-never-heard.html
on “Defunctionalisation: An underappreciated tool for writing good software”Submitted Puzzles to convince you you don't understand dependence as a story · 31 points
HN discussionTo people who are experienced in writing out the full interface of modules, ie their assumptions and guarantees, it's quite clear that being a "deep module" in Ousterhout's sense is quite rare and often undesirable, and that Ousterhout's examples of deep modules are actually shallow. See https://www.pathsensitive.com/2018/10/book-review-philosophy... He gets a lot of other stuff right though. Love his writing on com…
Comment linking /2018/10/book-review-philosophy-of-software.html?m=1
on “Ask HN: Good books on philosophy of engineering?”Submitted Should you split that file? as a story · 26 points
HN discussion"Define errors out of existence" might sound like "make illegal states unrepresentable," it's actually not. Instead it's a pastiche of ideas rather foreign to most FP readers, such as broadening the space of valid inputs of a function. One of his examples is changing the substr function to accept out of bounds ranges. You might be interested in my review. I'm a Haskeller at heart, although the review draws more from…
Comment linking /2018/10/book-review-philosophy-of-software.html
on “Ideas from "A Philosophy of Software Design"”Submitted Solving the Dog-Bunny Puzzle with Program Verification Technology as a story · 25 points
HN discussionMutual single recursion is still a loop; you just pick where you want to cut the cyclic dependencies to return to the top. In the worst case, you can put a `switch` in the loop and track what state you're in, although that's gross (you have to keep the union of all variables that might be used in each state). Multiple recursion, like in `fib n = fib (n - 1) + fib (n - 2)`, is more general than loops... in a world wi…
Comment linking /2019/07/the-best-refactoring-youve-never-heard.html
on “Why is learning functional programming so damned hard? (2019)”Submitted Book Review: A Philosophy of Software Design as a story · 13 points
HN discussion