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

  1. 1
    Past, present, and future of Sorbet type syntax
    10 people · 152 points · first shared 2025 · 89 comments on HN
  2. 2
    Code Review from the Command Line
    5 people · 238 points · first shared 2018 · 24 comments on HN
  3. 3
    Is tree-sitter good enough?
    5 people · 24 points · first shared 2022 · 2 comments on HN
  4. 4
    Inheritance in Ruby, in Pictures
    3 people · 4 points · first shared 2023 · discussion on HN
  5. 5
    Bug squash: An underrated interview question
    2 people · 434 points · first shared 2024 · 271 comments on HN
  6. 6
    Exploring Ruby VM with clangd (2020)
    2 people · 1 points · first shared 2021 · discussion on HN
  7. 7
    Reach for Markdown, not LaTeX
    1 people · 267 points · first shared 2018 · 178 comments on HN
  8. 8
    Union Types in Flow and Reason
    1 people · 109 points · first shared 2018 · 53 comments on HN
  9. 9
    Improving CLIs with isatty
    1 people · 85 points · first shared 2019 · 31 comments on HN
  10. 10
    A Debugger for Bash in Six Lines of Bash
    1 people · 29 points · first shared 2019 · 2 comments on HN
  11. 11
    Gripes with RSS after one week
    1 people · 10 points · first shared 2022 · 11 comments on HN
  12. 12
    On Programming Language Choice
    1 people · 6 points · first shared 2019 · discussion on HN
  13. 13
    Profiling in Haskell for a 10x Speedup
    1 people · 5 points · first shared 2019 · discussion on HN
  14. 14
    If, Else, and Purity
    1 people · 3 points · first shared 2018 · discussion on HN
  15. 15
    Ruby's private keyword is weird
    1 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

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close