Top all-time · #2301
Jake Zimmerman
Personal blog · blog.jez.io · on HN as jezprogrammingsystems
Jake Zimmerman's personal blog at blog.jez.io covers programming and systems. Since 2015, 32 different Hacker News readers have linked it 60 times, most often “Past, present, and future of Sorbet type syntax”. It is still writing: the last post was on 2026-01-21, and you can follow it by feed.
Too few sampled comments (12) to say how often HN recommends it.?
Why HN links it
HN readers link Jake Zimmerman's posts on Sorbet's type syntax history and the limits of parsing tools such as tree-sitter, plus Flow exhaustiveness. They are often cited as background in Ruby typing discussions.
- Recommended for · 3 comments
- Called a Sorbet post "excellent"; a "full, balanced overview" of tree-sitter limitations; Sorbet syntax history "interesting".
Summarised by Claude from a sample of 12 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
A collection of blog posts about programming, software, types, programming languages, Sorbet, Vim, Markdown, and more.
Most-linked posts?
- Past, present, and future of Sorbet type syntax9 people · 11 mentions · first linked 2025-04-25
- Code Review from the Command Line5 people · 6 mentions · first linked 2018-01-14
- Is tree-sitter good enough?5 people · 5 mentions · first linked 2022-06-03
- Inheritance in Ruby, in Pictures3 people · 3 mentions · first linked 2023-12-30
- Exploring Ruby VM with clangd (2020)2 people · 2 mentions · first linked 2021-05-19
- Bug squash: An underrated interview question2 people · 2 mentions · first linked 2024-08-18
What Hacker News says?
> I hate coding interviews but I am sympathetic to people who want to do them because I've met people who are such good bullshitters that they could fool most people. If you're talking about someone with no working experience and who claims to be self-taught, you really have to make them write code. The choice is not limited to made up toy problems vs not testing coding skills at all. You can give them real problems…
Comment linking /bugsquash/
on “The FizzBuzz that did not get me the job”Submitted Bug squash: An underrated interview question as a story · 434 points
HN discussionJake Zimmerman wrote this excellent blog post[1] on the current state of Sorbet. I was impressed at recent changes in the Sorbet syntax but also with the proposal that we make code comments available to the ruby VM. That would allow Sorbet to adopt the rbs-inline comment syntax for both runtime checks and static analysis. So there does appear to be a way forward on this, which is pretty exciting. 1. https://blog.jez…
Comment linking /history-of-sorbet-syntax/
on “The One-Person Framework in Practice”Submitted Reach for Markdown, not LaTeX as a story · 267 points
HN discussionVery short answer: because a treesitter will do an approximately correct parsing, while a hand written parser will do a correct parsing (and if not, it is a bug). For a full, balanced overview, see: https://blog.jez.io/tree-sitter-limitations/
Comment linking /tree-sitter-limitations/
on “OpenVSX, which VSCode forks rely on for extensions, down for 24 hours”Submitted Code Review from the Command Line as a story · 169 points
HN discussionI think a much better way forward is proposed by Jake Zimmerman[1] of the Sorbet team. That is to allow the runtime to parse RBS inline format comments. That retains Sorbet’s fast static checker and its runtime checks which Typescript compiled to JS lacks. 1. https://blog.jez.io/history-of-sorbet-syntax/
Comment linking /history-of-sorbet-syntax/
on “Ruby on Rails Audit Complete”Submitted Past, present, and future of Sorbet type syntax as a story · 136 points
HN discussionI needed to understand linkers and object loaders for something at work recently, and I can't recommend Computer Systems: A Programmer's Perspective enough![1] It answered a lot of questions I'd always had about computer systems. I jumped straight into Chapter 7: Linking and learned so much that I read a bunch of other chapters for the fun of it. E.g., Chapter 7 covered that the `_start` symbol mentioned in this pos…
Comment linking /linkers-ruby-c-exts/
on “Where do argc and argv come from?”Submitted Union Types in Flow and Reason as a story · 109 points
HN discussionWhen I find myself wanting a split diff in the terminal, I tend to gravitate towards just using Vim’s built in diff mode via vim-fugitive. I even have some git aliases that will open vim and and show fugitive diffs for every file changed on the current branch. The I like this over fancy CLI diff viewers for a handful of reasons: - It re-uses my editor config (no need to fuss with that tools ad hoc config format) - I…
Comment linking /cli-code-review/
on “Show HN: GitHub style split diffs in your terminal”Submitted Improving CLIs with isatty as a story · 84 points
HN discussionWhen writing Ruby C extensions, you almost inevitably need to learn to read the Ruby codebase (written in C). It helps if you can get your preferred IDE to build and understand the codebase. For people who want to use LSP + clangd to explore the Ruby codebase, I wrote up some instructions here: https://blog.jez.io/clangd-ruby/ tl;dr: Bear[1] is a tool that hijacks a process tree, looks for calls to clang, records th…
Comment linking /clangd-ruby/
on “Definitive Guide to Ruby's C API”Submitted Code Review from the Command Line (2018) as a story · 58 points
HN discussionBased on what Ive read [1], Sorbet was born out of very specific circumstances at Stripe, in the same sort of way that go was at google. I think it missed the mark due to it being a specific tool for specific usecases instead of an "open source project for the general public" first. I love ruby but I do look forward to having a good option for types at some point. The community makes up for lack of types by adding m…
Comment linking /history-of-sorbet-syntax/
on “Do I not like Ruby anymore? (2024)”Submitted A Debugger for Bash in Six Lines of Bash as a story · 29 points
HN discussionOne of the main devs on Sorbet would agree: https://blog.jez.io/history-of-sorbet-syntax/
Comment linking /history-of-sorbet-syntax/
on “Do I not like Ruby anymore? (2024)”Submitted Is tree-sitter good enough? as a story · 18 points
HN discussion> It becomes more verbose with this type annotation everywhere making it look like nightmare. this is part of the appeal of the "header file approach" a la RBS, as mentioned in the article https://blog.jez.io/history-of-sorbet-syntax/#the-header-fil...
Comment linking /history-of-sorbet-syntax/
on “Past, present, and future of Sorbet type syntax”Submitted Gripes with RSS after one week as a story · 10 points
HN discussionTree-sitter appears to be ultra-focused on producing valid syntax trees really fast. This is great for e.g. syntax highlighting, but suboptimal in cases where you are writing a reference parser for your custom language and want to provide very useful error descriptions. Chumsky seems to be more suited for the latter (and also has a part of tutorial about precedence[0], so it seems to deal at least with that case). T…
Comment linking /tree-sitter-limitations/
on “Chumsky, a Rust parser-combinator library with error recovery”Submitted Code review from the command line (2018) as a story · 6 points
HN discussionRead the linked previous post[1]. Flow doesn't ensure exhaustiveness unless you ask it to, by telling it that any case that goes to "default" is invalid (impossible). [1] https://blog.jez.io/flow-exhaustiveness/
Comment linking /flow-exhaustiveness/
on “Union Types in Flow and Reason”Submitted Past, Present, and Future of (Ruby) Sorbet Type Syntax as a story · 5 points
HN discussionI like James Iry’s take on checked exceptions here[1] which basically boils down to this: > The throws clause is the only point in the entire Java language that allows union types. You can tack “throws A,B,C” onto a method signature meaning it might throw A or B or C, but outside of the throws clause you cannot say “type A or B or C” in Java. In languages with better support for ad hoc union types, I think both the…
Comment linking /union-types-checked-exceptions/
on “The Trouble with Checked Exceptions (2003)”Submitted Is Tree-sitter good enough? as a story · 5 points
HN discussionI do courses when I can, try some CS theory, some free resources here https://functionalcs.github.io/curriculum/ such as these undergraduate complexity theory lectures https://www.youtube.com/playlist?list=PLm3J0oaFux3YL5vLXpzOy... or this intro to dbms course https://www.youtube.com/playlist?list=PLSE8ODhjZXjYutVzTeAds... then try using a SQL automated prover http://cosette.cs.washington.edu/ Some more VIM resource…
Comment linking /vim-as-an-ide/
on “Ask HN: How do you keep your brain in the tonus?”Submitted Past, Present, and Future of (Ruby) Sorbet Type Syntax as a story · 4 points
HN discussionYou might find https://blog.jez.io/history-of-sorbet-syntax/ interesting, written by one of the primary contributors to Sorbet. Sorbet is a bit different from TypeScript because it has runtime type checking, not just static.
Comment linking /history-of-sorbet-syntax/
on “Ruby 4.0.0 Released”Submitted Past, Present, and Future of Sorbet Type Syntax as a story · 3 points
HN discussion