Sign in

Jonathan Schuster

@jschuster.hachyderm.io.ap.brid.gy
0 followers 0 following 11 posts

Software design education at Google. Programming languages PhD. Career goal: to give software developers knowledge and tools to help them reason about their programs […] 🌉 bridged from ⁂ hachyderm.io/@jschuster, follow @ap.brid.gy to interact

PostsRepliesMedia
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 08/10/2026
A legend of software engineering (heck, she coined the term!). RIP
mastodon.social
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 28/09/2026
I wrote about a nit that's been bugging me about LLM discourse: "Specifications, Not Determinism: Why LLMs Are Not Compilers" jschuster.org/blog/2026/09/28/speci…
jschuster.org
Specifications, Not Determinism: Why LLMs Are Not Compilers
There are many legitimate criticisms to be levied at LLMs. The environmental damage, the unauthorized use of mass quantities of intellectual property, the decreased trust in our sources of information, and more are issues we should be deeply concerned about. However, there’s one problem that I think we’re mis-identifying: the notion that LLMs are nondeterministic. This most often comes up in the context of code generation. Some LLM enthusiasts will claim that asking an LLM to generate code from a prompt is no different than asking a compiler to generate assembly code from a higher-level language. Therefore, we shouldn’t have to review the LLM’s output. “It’s just another level of abstraction,” they say. “You don’t hand-write your assembly code or review the compiler’s output line-by-line, right?” The other side is quick to rebut: “But an LLM isn’t deterministic like my compiler is! It might generate different code each time I run the prompt, so how can I know what to expect?” The sentiment of that rebuttal is right, but the diagnosis is wrong. _Something_ about LLM-based code generation is qualitatively different than traditional compilation. But the problem isn’t nondeterminism. Consider this statement: x = (1 + 2) * (3 + 4) 1 | x = (1 + 2) * (3 + 4) ---|--- A compiler could translate that statement down to assembly code that looks roughly like this: [crayon-6aba6e82c6448788719694 inline="1" lang="default" decode="true" ]temp1 = 1 + 2 temp2 = 3 + 4 x = temp1 * temp2 123 | [crayon-6aba6e82c6448788719694 inline="1" lang="default" decode="true" ]temp1 = 1 + 2temp2 = 3 + 4x = temp1 * temp2 ---|--- [/crayon] But the order in which we evaluate the expressions in parentheses doesn’t matter, right? So a sufficiently smart compiler could decide it’s more efficient to output this code instead: temp1 = 3 + 4 temp2 = 1 + 2 x = temp2 * temp1 123 | temp1 = 3 + 4temp2 = 1 + 2x = temp2 * temp1 ---|--- Same high-level program, two different assembly programs. That’s a nondeterministic transformation. Yet I bet you would accept either one without a second thought. “But the _behavior_ of the program is still deterministic!”, you say. “Either way, we end up with x = 21.” Ok, then how about this program? <code>fn sleepAndPrintFoo(): sleep(1000) print("foo") fn sleepAndPrintBar(): sleep(1000) print("bar") fn main(): t1 = Thread.start(sleepAndPrintFoo) t2 = Thread.start(sleepAndPrintBar) waitForAllThreadsToComplete(t1, t2)</code> 123456789101112 | <code>fn sleepAndPrintFoo(): sleep(1000) print("foo") fn sleepAndPrintBar(): sleep(1000) print("bar") fn main(): t1 = Thread.start(sleepAndPrintFoo) t2 = Thread.start(sleepAndPrintBar) waitForAllThreadsToComplete(t1, t2)</code> ---|--- You can’t know which thread is going to execute first ahead of time: that depends on your OS’s thread scheduler. So this program might print “foobar” or “barfoo”. Either one is completely valid. So a traditional compiler has nondeterminism in both the transformation to assembly code, and in the observable behavior of the resulting program. Yet this still _feels_ different from asking an LLM write a program from a prompt. Why? This feels different because programming languages and compilers have _specifications_. A specification is some statement of a program’s behavior that the author guarantees that the program provides. Sure, different language specs may be at different places on the rigor/ambiguity spectrum from “fully formalized, mathematically defined spec” to “whatever the compiler does is the spec”. But in any of those cases, you can reasonably expect specific behavior from those compilers, and you’re justified in filing a bug if the behavior doesn’t match expectations. LLMs, though, don’t have that kind of specification. If we defined an LLM’s interface as a function “executePrompt” of type “String -> String”, what could the author of executePrompt guarantee to the user? Not much. We can say that _probably_ the output will be something that looks like a plausible response to the input. But even that weak specification can’t be guaranteed to the same extent that we guarantee “(1 + 2) * (3 + 4)” results in 21. So that’s where we land, and that’s why “prompts are just another level of abstraction” doesn’t make sense to so many engineers. The whole concept of software engineering is built on the idea of abstraction and modularity: programming against a specified interface so that we can separate implementation details from intended behavior. When there is no specification, then there’s nothing to rely on, so we’re left trying to assemble a reliable system from unreliable components. Is “nondeterminism” versus “specifications” a nitpick about terminology? Yes, a bit. But if we’re trying to figure out how LLMs fit into the practice of software engineering, then I think it behooves us to correctly identify their shortcomings. Only the best possible diagnoses will help us find the best possible resolutions. So next time you’re talking about LLMs and the ways they might fit into software engineering, remember: nondeterminism per se isn’t the problem. We’ve been wrestling with nondeterminism for decades, and while it’s not easy, we have methods for handling it. But a lack of any kind of specification to describe what we can expect from that non-deterministic output? That’s a big problem, and requires a totally new kind of approach to handle.
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 26/09/2026
RE: social.coop/@ntnsndr/11733430628528… Well this sounds intriguing. Anyone in my corner of the fediverse have experience (positive or negative) with this project?
002
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 16/09/2026
Question for programmers here: does your project require code review for each new commit? What criteria do you use to determine whether a commit is acceptable? Is that criteria written down anywhere? I know what Google does, but I'm curious what happens elsewhere, and to what extent there are […]
hachyderm.io
Original post on hachyderm.io
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 16/09/2026
"This kind of contribution to your favorite open-source project may feel to you like “free as in beer” and “free as in speech” but to us it is like being handed a “free puppy”: well intended, but accepting it has big consequences for years to come." […]
hachyderm.io
Original post on hachyderm.io
000
Reposted by Jonathan Schuster
Stefan Bohacek @fediverse.stefanbohacek.online · 25/08/2026
"Find out who you are and do it on purpose. And do it *with* purpose," -- Dolly Parton www.southernliving.com/dolly-parton… #RIP #DollyParton
018
Reposted by Jonathan Schuster
Bodo Tasche @bitboxer.mastodon.social.ap.brid.gy · 08/08/2026
Does anyone know someone at bookshop.org ? I really need help to add all those indie stores to bookpile.org. Please boost for reach 🤗
001
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 30/07/2026
RE: information.garden/@benfry/11700358… Yes, I've been thinking this for a while. There's some real value in LLMs (ignoring actual costs and externalities for the moment), but I believe a large part of the hype and business spend on AI right now is because many business […]
hachyderm.io
Original post on hachyderm.io
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 24/07/2026
Yesterday: "It's such a beautiful day, and summer is going by so fast. I wish I didn't have work today." Today: Take the day off. Go for a couple of bike rides around town. Read in the hammock. Get a good sandwich at a local cafe and eat outside. Swim, relax, and read some more at the public […]
hachyderm.io
Original post on hachyderm.io
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 24/07/2026
RE: hachyderm.io/@skade/116975810767744… I love Rust for what it is, but this is spot on. Don't reach for the hair shirt of borrow checking unless you're confident you really need that low level control.
hachyderm.io
000
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 22/06/2026
A reflection on LLMs and understanding: Maybe you've been in this situation before: you ask someone about their work, and they go on a long technical ramble about the intricate details of what they do. Then at the end you respond "Wow, I didn't understand any of that. You must be really smart" […]
hachyderm.io
Original post on hachyderm.io
000
Reposted by Jonathan Schuster
🎃🔪KNIFER🔪🎃 @knizer.toot.boston.ap.brid.gy · 13/06/2026
#BostonWeekend We've got a pretty solid #community in the #boston area on the #Fediverse - here's a roundup of local orgs and such that have been active here. fedidevs.com/s/Mzgz #massachusetts
fedidevs.com
Boston, Massachusetts, United States of America - Mastodon Starter Pack
Boston area groups, and people who regularly post about the Boston metro region - please contact me if you'd like to be added (or removed!)
111
Jonathan Schuster @jschuster.hachyderm.io.ap.brid.gy · 12/05/2026
You know you're yak-shaving when you discover Google Docs has a max-indentation level for sub-bullets in your TODO doc.
020
Reposted by Jonathan Schuster
Evan Prodromou 🇨🇦🇺🇸🇬🇷🇵🇸 @evan.cosocial.ca.ap.brid.gy · 22/04/2026
You deserve to take up space on the Fediverse. There is a you-sized hole in our feeds and there is only one way to fill it. If some busybody tells you you're doing it wrong and that your posts aren't welcome, block the fuck out of them and keep going.
010
Reposted by Jonathan Schuster
Marc Abrahams @marcabrahams.mstdn.science.ap.brid.gy · 11/04/2026
If your dream job is to work in a chocolate shop, and if Harvard Square is a place you'd like to be: a friend of a friend is opening this pop-up shop, and is eager to hire someone good to work there #Chocolate #HarvardSquare www.indeed.com/viewjob?jk=d25bd5a30…
127