Jake Zimmerman
blog.jez.io · Personal blog · on HN since 2015
Jake Zimmerman, a Sorbet contributor, writes about Ruby type checking, parsing, tooling, and developer workflows.
What HN saysCommenters link his posts on Sorbet's history and syntax as informative accounts from a primary contributor.
32HN people shared it
12linked it in comments
44stories submitted
1.4Kstory points
10 months agolast shared
2015people per year2026
Most-shared posts
- 1Past, present, and future of Sorbet type syntax10 people · 152 points · first shared 2025 · 89 comments on HN
- 2Code Review from the Command Line5 people · 238 points · first shared 2018 · 24 comments on HN
- 3Is tree-sitter good enough?5 people · 24 points · first shared 2022 · 2 comments on HN
- 4Inheritance in Ruby, in Pictures3 people · 4 points · first shared 2023 · discussion on HN
- 5Bug squash: An underrated interview question2 people · 434 points · first shared 2024 · 271 comments on HN
- 6Exploring Ruby VM with clangd (2020)2 people · 1 points · first shared 2021 · discussion on HN
- 7Reach for Markdown, not LaTeX1 people · 267 points · first shared 2018 · 178 comments on HN
- 8Union Types in Flow and Reason1 people · 109 points · first shared 2018 · 53 comments on HN
- 9Improving CLIs with isatty1 people · 85 points · first shared 2019 · 31 comments on HN
- 10A Debugger for Bash in Six Lines of Bash1 people · 29 points · first shared 2019 · 2 comments on HN
- 11Gripes with RSS after one week1 people · 10 points · first shared 2022 · 11 comments on HN
- 12On Programming Language Choice1 people · 6 points · first shared 2019 · discussion on HN
- 13Profiling in Haskell for a 10x Speedup1 people · 5 points · first shared 2019 · discussion on HN
- 14If, Else, and Purity1 people · 3 points · first shared 2018 · discussion on HN
- 15Ruby's private keyword is weird1 people · 3 points · first shared 2023 · discussion on HN
What HN people wrote when they linked it
JamesSwift · 2025-08-26
Based 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 more tests to their test suite, which is nice but I'd love to layer some encoding into the codebase itself and save the CI time.
[1] - https://blog.jez.io/history-of-sorbet-syntax/
Lio · 2025-04-29
Jake 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.io/history-of-sorbet-syntax/
strogonoff · 2022-07-11
Tree-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).
This overview of parser tradeoffs may be helpful: https://blog.jez.io/tree-sitter-limitations/.
[0] https://github.com/zesterer/chumsky/blob/master/tutorial.md#parsing-bi…
jez · 2020-08-10
I 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 post is just a symbol in your executable that the Linux executable loader knows to jump to, but it's not the only special symbol!
The chapter on linking also covered how loading and linking dynamic/shared libraries works, which was also really cool. I wrote up some of the things I learned about that stuff too.[2]
[1] http://www.csapp.cs.cmu.edu/
[2] https://blog.jez.io/linkers-ruby-c-exts/
__float · 2025-12-26
You 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.
dbalatero · 2025-08-26
One of the main devs on Sorbet would agree: https://blog.jez.io/history-of-sorbet-syntax/
uticus · 2025-05-09
> 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-file-approach…
exceptione · 2025-04-25
Very 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/
icebraining · 2018-04-23
Read 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/
hackermailman · 2017-10-11
I 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=PLm3J0oaFux3YL5vLXpzOyJiLtqLp6dC… or this intro to dbms course https://www.youtube.com/playlist?list=PLSE8ODhjZXjYutVzTeAds8xUt1rcmyT… then try using a SQL automated prover http://cosette.cs.washington.edu/
Some more VIM resources, Vim as an IDE
https://blog.jez.io/vim-as-an-ide/
Lecture notes, entire course on vim and horrors that is vimscript
http://www.contrib.andrew.cmu.edu/~haoxuany/vim/
Great stackoverflow post on grokking vi to understand vim https://stackoverflow.com/questions/1218390/what-is-your-most-producti…
Mawr · 2025-01-25
> 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 to solve.
> The interviewers tried to tell him to approach it like an industrial-grade solution, not a weird academic exercise.
Hahaha, and how exactly do you write an 'industrial-grade' FizzBuzz? ;)
Obligatory: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
> The whole point of the interview is to get hints about the candidate. There are times when interviewers read too much into what the candidate does or says, but this isn't one of them.
Oh but it is. If I were to ask you, the expert, to draw a blue line with red ink and then attempt to draw conclusions from your behaviour based on that question, could I ever get a valid assessment of you? If a test is faulty, so are its results. Garbage in, garbage out.
Interviewing is no trivial task. It is an attempt to test how well someone will do a thing without having them actually do it. By definition, that is impossible. Still, we can try to get good enough results by minimising the number of differences between our test environment (interview) and production (the job). That will…
marbu · 2022-12-31
OP is actually using it, see: https://blog.jez.io/atom.xml