Rendered at 23:32:09 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
simonw 1 days ago [-]
I'm not completely convinced by this comparison between blind chess and prompting LLMs.
In blind chess you get deterministic information about the state of the board: each mental update to your board model can be precise, and you have the full state at every point in time.
LLMs are notoriously non-deterministic, and even at temperature zero you still can't predict exactly where the weights will take you next.
I suppose you can get closer to deterministic if you adopt a prompting style where you almost dictate every line of code, but at that point the coding agent is more of a typing assistant.
The productivity benefits of coding agents unlock themselves when you figure out how to turn short prompts - "add tests that exercise the registration form and check the happy path and all failure states" - into larger changes.
If you're completely blind to the results of those you're going to end up with a system you don't 100% understand very quickly. In blind chess terms you'll no longer know the positions of every piece on the board.
andai 1 days ago [-]
>you're going to end up with a system you don't 100% understand very quickly
This has been my experience with all software projects. Even if I wrote all the code, my understanding of how everything works and fits together decays.
While that may be true, you can be confident that it works in a way you personally understand. Because you understood it in the past.
Also, if you finish your work on a module with care - you return to a module you can trust with clear boundraries and known flaws. This is not true of AI output.
csallen 1 days ago [-]
I'm skeptical of this. I have yet to build a codebase using AI that I wasn't able to subsequently understand after taking the time to do so, esp. when aided by AI that will tirelessly answer my questions. I mean, LLMs don't always code the exact way I do, but it's not writing totally alien code that's incomprehensible to the human mind here.
bogdanoff_2 1 days ago [-]
I'm curious, what programming language and model/harness do you use, and are there some specific practices that you use?
csallen 1 days ago [-]
I use Claude Code, primarily writing web applications and JavaScript. I'll have it use various frameworks. It's built apps for me using React, Ember, Astro, etc. I don't restrict myself to frameworks I'm particularly familiar with, since it's easy for the AI to teach me the basics whenever I would like to dig in.
As for specific practices, these are my main ones:
- I have a gotchas-log.md file that acts as a log of gotchas likely to trip up future runs. I have the AI write to this occasionally when things go haywire in the same way multiple times. And I have it read it as part of its iterative reviews, described below.
- I have a good-code-guidelines.md file where I write my preferences for code. I have the AI read this as part of iterative reviews, described below.
- I have a plan-and-execute.md file that prompts the LLM to make a plan, and then to review and iterate on that plan repeatedly (while reading gotchas-log.md and
good-code-guidelines.md) until its reviews stop finding issues. I tag this file to implement almost every non-trivial change.
- I have other various helper prompts. For example, I can simply tag @make-a-git-commit.md and it tells the LLM to make a commit and write the message the way I like it. I have @simplify.md, which I can tag to have the LLM explain whatever it just did to me using simple language that makes it easier for me to understand, and using concentric circles of explanation that go from broad to specific so I'll repeatedly encounter important topics; this makes it much more bearable for me to read its responses.
- Occasionally, whenever a particular system of my codebase starts to get hairy, I spawn a Claude Code session to read through and trace all the relevant code paths, then write a short guide to that system in a markdown file that lives in the codebase. IT's useful for me to read and also useful to tag for future prompts to get the LLM up to speed quickly. Only challenge here is that these guides go stale and require updating, so it's important to prompt the AI to write them at the appropriate level (not to specific) that prevents them from being overly brittle and getting out of date with every little change. They're mostly high-level guides.
rsalus 1 days ago [-]
exactly, and realistically if you test the crap out of a given module, you'll have a pretty damn accurate idea of how it behaves.
youre-wrong3 1 days ago [-]
No. You can absolutely build things with AI small or large and understand it. If you don’t understand it. Then you’re not caring about the output to begin with and not guiding it to build the solution you want.
gridspy 1 days ago [-]
The word "understand" seems to mean something different to you.
If I understand something, I could write it in assembly if I wanted to. It might take a long time, but I know every level of the stack under my code down to bare metal.
Maybe an AI level of "understand" i.e the same understanding a Senior has of a Junior's code based on daily check-ins is enough for 95% of "boring" programming. But for some tasks you need to either fully understand the code or just tolerate bugs.
At the level of complexity I work at, it's (often) faster to just code it myself than to expect AI to converge on a result I like and then hand check it.
youre-wrong3 1 days ago [-]
> At the level of complexity I work at, it's (often) faster to just code it myself than to expect AI to converge on a result I like and then hand check it.
Would love an example because no one has ever been able to give a coding example that AI isn’t helpful for. I had one person on linked in try claim their undocumented audio hardware won’t work with ai but when we got ai to probe it and build docs it ended up solving a bunch of complex bugs they couldn’t fix.
gridspy 1 days ago [-]
Impressive, also horrifying. I love what I do and if AI can do it better than that sucks.
Anyway the use case for me is to realize a new visual style through graphics programming. It's a lot less measurable for an interative AI agent than "Meet this hardware specification from a device with a discoverable API"
I have no doubt AI could create a LOT of variations on "a new visual style" but it's less controllable than just doing it yourself.
Btw, did you "understand" the sound driver after the AI coded it? Could you modify it without further help?
1 days ago [-]
ThunderSizzle 23 hours ago [-]
Right now, at least, I haven't found an AI capable of replacing a software engineer. Ive seen AI that can easily replace basic programmers, however.
I also think AI can replace non-coding artitects, and probably most middle management type jobs (my company has 6 levels of management between the CEO and "individual contributors" in my area (8 counting inclusivity)).
That's a lot of management levels, and every level has to be paid more than the level they manage as a fraud disincentive. So that's a lot of money...
names_are_hard 20 hours ago [-]
Can you explain the fraud disincentive bit? I feel like there's something obvious I'm missing, but why would a manager earning less than their reports make fraud more likely?
rsalus 1 days ago [-]
what a patronizing response. I'd be embarrassed.
gridspy 1 days ago [-]
I guess you didn't understand my comment ;)
Look, goals can differ. If you don't need to understand and predict every part of the code the AI is generating and you just need it to meet a "sketch" of what you want - by all means use AI. I do use AI in that situation for related or unimportant code.
But if you need full understanding, in my experience the only way to get that is to program it yourself. Unless what the AI is generating is so trivial you already understand it and it's grunt work, you will learn the detail by doing it yourself. Controlling the approach here is important.
However often the best way to handle grunt work is to write better abstractions, something AI sucks at.
It's the programming equivalent of many PG essays. https://www.paulgraham.com/useful.html for instance. There was one on how PG refined their thoughts via writing. It's in there somewhere.
youre-wrong3 1 days ago [-]
> However often the best way to handle grunt work is to write better abstractions, something AI sucks at.
If you checked out of ai in 2023 then this is true. It’s simply not true anymore. If you struggle then it’s a skill issue not an AI issue
jbeninger 22 hours ago [-]
As someone who spends way too much time searching for the best abstractions, absolutely this is still true.
I often have a long back and forth with codex to explore the problem space and settle on the best abstractions. Occasionally it will make a suggestion that helps me, but for the most part it's reviewing while I'm in the driver's seat.
Contrast this to simply giving it a function name and a vague description of what the function will do. I'll generally accept its output with a few refinements.
But for larger project structure and metaphors, it falls flat, and often lands on a solution that's going to be a maintenance nightmare or result in endless repetition across not-quite-the-same cases. I've never seen it happen upon an appropriate abstraction that can cleanly cut through the nonsense.
gridspy 22 hours ago [-]
That's my experience too. Its unfair to expect current AI to do this - since good abstractions are extremely task specific. Hard to train on that.
What's also annoying is that AI's approach is not consistent within a project, a different sort of complexity.
simonw 1 days ago [-]
Yeah, that's a fair point. I have plenty of older projects where I no longer understand how they work despite having written the code myself.
I guess the key thing is that you need to be able to demonstrate to yourself that you understand the code at least once, because that means you should be able to revise how it works in the future.
You also can't evaluate if a solution is fit for purpose if you don't understand it.
thec0d3 1 days ago [-]
You don't buy the article's position but have forgotten a lot and not known a lot; so no need to care about your opinion I guess
This is my beef with modern software engineers; complete detachment from physical reality where entropy is eroding structure (memory, generational churn).
Code is just a euphemism for a desired electrical state. No need to dump biz contexts in code. Just make a game engine that efficiently handles geometry on screen and label the presentation layer.
All ya'll are doing is recreating front end rendering technology, forgetting in time and recreating it in new semantics. It's absolutely fucking asinine.
I look forward to models in chips and a tiny universal code base coupled to the machine.
This whole allowing a bunch of unelected rhetoricians tell myself and other hardware engineers we need them to use our property is exhausting.
It's rhetorical nonsense that goes in these broad loops recreating old work.
Time to move on from what titillated you all as children. Or you will just end up entitled Boomers.
Writing code like its 1970s is not high tech. It's old low tech
andai 12 hours ago [-]
I often find that what is considered easy in programming is actually hard, and what is considered hard is actually easy, because the "easy" things are designed to have several layers of Rube Goldberg machines between me and what is actually going on.
names_are_hard 20 hours ago [-]
This is either incredibly advanced, genius-level insight into the future of software engineering, or absolutely nonsensical gibberish. I'm not smart enough to tell which, I suppose we'll find out.
georgemcbay 1 days ago [-]
> Even if I wrote all the code, my understanding of how everything works and fits together decays.
Some understanding decays, but in my experience it never fully decays to the point of never having known how it worked.
My code from 3 years ago is more foreign to me than code I wrote yesterday, but if I need to I'll get back up to speed on it much quicker than I will on code someone else wrote that I never understood.
Even with the decay of time, remnants of the experience persist, roughly in the same way that if you get in really good shape and then allow yourself to fall out of shape, getting back into shape is difficult, but not as hard as it was the first time. Your nervous system has made adaptations the first time through that make running it back much easier even if you've let years pass.
NameError 1 days ago [-]
I agree with your take, particularly because of this line in the article:
| the skills that define a strong blindfold chess player are the same as those of a programmer who can thrive behind a Claude Code terminal whilst not reading nor writing any code.
If you're actually not reviewing the outputs, you're just getting a fuzzy description of the state of the chessboard.
But I (and everyone I work with) use Claude Code in a workflow where I -do- review the outputs, or at least I make an honest effort to try. Rather than blindfolded, I think bullet (1-minute) chess is a fairly good analogy for this: you have all the info you need to keep your mental model up to date with reality, but the pace of change is too fast to do a good job unless you have a lot of preexisting chess expertise.
danielovichdk 1 days ago [-]
You learn a lot more by reading code than writing it.
So reading the output i believe is an immensely big gift by an LLM, because if you actually take note - and of course know your skills - then ot becomes such a great pal to work with.
I like reading what the LMM gives me, not always, but a lot of times.
lelanthran 1 days ago [-]
> You learn a lot more by reading code than writing it.
"You learn a lot more by reading trigonometry than by doing problems"
It's quite a surprising result: it turns out that there are cases where seeing someone else work through a worked example is more effective than struggling through the problem yourself.
(Obviously it doesn't apply universally, but your "see how ridiculous that sounds?" suggests to me you may not have heard of this before.)
lelanthran 1 days ago [-]
As that link says, this approach is used in Maths textbooks, and yet, as the parent of two kids, I have never come across a single student who is able to pass trig without working the problems.
If reality differs from the results of academic studies, it's not the reality that is wrong.
simonw 23 hours ago [-]
The worked-example effect doesn't say that worked examples replace exercises. It says that worked examples prior to exercises beats exercises alone.
There's a section on that page about faded worked examples:
> "In order to facilitate the transition from learning from worked examples in earlier stages of skill acquisition to problem solving in later stages, it is effective to successively fade out worked solution steps"
lelanthran 16 hours ago [-]
> The worked-example effect doesn't say that worked examples replace exercises. It says that worked examples prior to exercises beats exercises alone.
I'm confused now; you say that reading + doing beats doing alone, which does not conflict with my point that you can't learn by reading alone.
It sounds like we're in agreement that reading alone is insufficient.
DoctorOetker 1 days ago [-]
I can find a kernel of truth in both statements:
As long as the literature contains insights a reader isn't aware about, reading the literature is low-hanging fruit compared to having to derive all the things yourself.
As soon as the literature no longer contains insights, it becomes more productive to explore mathematics oneself by trial and error.
Organized education will model this on a topic by topic basis: during class you're handed the more valuable insights on a silver platter, during an exam you are prevented from looking at your textbook.
Every time you read a chapter and do the exercises it's a small simulacrum of catching low hanging fruit followed by making sure you can derive similar statements with trial and error for fixing any gaps. The trial and error while you do problems does improve your intuition, but only trial and error is like having every student redevelop the frontier starting from antiquity.
bwfan123 1 days ago [-]
> See how ridiculous that sounds?
For most of us, writing code is the way to carve out intuition into an artifact. But, I have noticed some people are able to read deeply - and by that I mean, reverse the code to understand the intuition that brought it to life. This is a rare skill and I dont have it, but some do. Not just for code, but also for any book - fiction or non-fiction - some are able to deconstruct the scenarios much better than others, and in that sense understand what they read.
dgellow 1 days ago [-]
I feel one need to also have developed the intuition by writing lots of code for reading to be really effective.
An an analogy I’m reading a lot of German those days as I’m aiming to become fluent, and it’s very effective to improve only because I spend so much time developing a the intuition by going through the whole grammar, forcing myself to write, forcing myself to speak, etc. Doing only the reading improves your pattern recognition, but doesn’t make you go as deep as one who also writes and speak. If you combine the different aspects they reinforce each other and you progress way faster
bwfan123 1 days ago [-]
> I feel one need to also have developed the intuition by writing lots of code for reading to be really effective.
This is one of the problems young engineers are going to face who rely excessively on AI to generate code. Their intuitions on what constitutes good code will not sharpen, since they are not exercising the tool that sharpens it which is writing code. Intuitions start fuzzy, and incorrect, and gradually sharpen with precise communication of said intuition in the form of writing code or proofs. Reading alone may delude one into a sense of false mastery where intuitions are actually fuzzy, but one thinks otherwise.
dgellow 1 days ago [-]
Thanks, you captured the idea better than I could!
throwawee 1 days ago [-]
> You learn a lot more by reading code than writing it.
Really? In my experience it's been the opposite. It's like how you can learn more about art by trying to recreate it than just looking.
DoctorOetker 1 days ago [-]
a lot of people get stuck, or code up a naive brute force algorithm and call it a day, nothing intrinsically forces a coder that refuses to look at the work of others to write better code.
vunderba 1 days ago [-]
IMHO the thrust of the article feels a bit forced, but LLM = Blindfold chess is not what the author is saying:
> Thus in many ways programming with AI is the opposite of blindfold chess: you don't have to pay attention every turn, you don't have to remember what the important pieces are, the details of the tactical relationships (such as code interfaces and APIs).
relativeadv 1 days ago [-]
That sentence was awkward. Maybe even a typo? The following sentences to the one you just quoted ignores that and proceeds to argue FOR blindfolded chess being like programming with LLMs.
The article itself takes several paragraphs to get to the argument it wants to make and then ends having only argued for a few more sentences. No real evidence is provided either.
vunderba 1 days ago [-]
Well no, it argues that the SKILLS for playing blindfold chess are similar to people who use LLMs to develop code - not that blindfold chess = vibe coding.
And then earlier in the article defines said skills as having a sense of high-level relationships (chunking, positioning, etc) over the board rather than a photographic memory of the board.
But as I said, the whole article feels very fluffy anyway.
1 days ago [-]
trollbridge 1 days ago [-]
LLMs are notoriously non-deterministic, and even at temperature zero you still can't predict exactly where the weights will take you next.
An LLM can be made to be completely deterministic. I use them in this mode so I can reproduce test cases. Of course it requires complete control over the model, etc. but this myth that a computer program is non-deterministic needs to end.
You can 100% predict where the weights “will take you” given a set of inputs.
shakna 1 days ago [-]
Floating point matrix calculations are non-deterministic. You need to invent new hardware, that doesn't use floating point math, first. [0]
>Floating point matrix calculations are non-deterministic.
This is not inherent to floating-point math. That actual (true) claim in the article is that different hardware and different hardware configurations produce different results. But deterministic inference is possible, e.g. llama.cpp on CPU is deterministic by default.
shakna 1 days ago [-]
Right... That's why I added "matrix" in there. Because we don't have matrix operations in software, but in hardware.
trollbridge 1 days ago [-]
Floating point math is entirely deterministic. For a given set of inputs, the same outputs come out, every time.
feelamee 1 days ago [-]
using which floating point standard?
IEEE754 is totally deterministic
shakna 1 days ago [-]
The software standard is. GPU matrix calculations, are not. The hardware, has tiny shifts that rarely matter, except in high finance and... AI modeling.
Folcon 1 days ago [-]
> You can 100% predict where the weights “will take you” given a set of inputs.
Do you mean reproduce?
Sorry it's just if you are saying what your statement implying then either the model is very simple, or you've figured out something incredible
trollbridge 1 days ago [-]
Sure. Take the inputs and run it through the model.
You now have the output which will be perfectly reproduced with the same inputs.
simonw 1 days ago [-]
By "can't predict exactly where the weights will take you next" I meant with your brain. The blind chess analogy suggests you can predict, using your own thought process, the exact output of a prompt.
trollbridge 1 days ago [-]
I could use my brain to run a set weights, given enough time (on the order of millions of years).
circuit10 1 days ago [-]
I think when people say non-deterministic what they mean is closer to chaotic, like https://en.wikipedia.org/wiki/Chaos_theory as in very small changes in conditions can produce completely different output making predictions difficult
simonw 1 days ago [-]
Can you provide steps to reproduce so I can see one of these deterministic LLMs running myself? API based or local models.
trollbridge 1 days ago [-]
I’d recommend starting with llamafile due to its simplicity and then move up to llamacpp and Unsloth.
andai 1 days ago [-]
Could you give some examples?
techpression 1 days ago [-]
You should publish, likely a Nobel price or Turing award waiting, and generational wealth at some tech giant.
qbane 1 days ago [-]
I do not think the metaphor can go very far. Have blindfolded chess become the "productivity trend" that every one should learn it to enjoy chess? Have normal chess players been replaced because skilled players can do blindfolded?
1 days ago [-]
sshine 12 hours ago [-]
> if a seasoned programmer sits behind Claude Code, the quality output will likely be higher than if a non technical person does it
Anecdotal: I recently rewrote a service in Rust for a much needed 100x performance boost (largely due to architectural changes, somewhat due to better runtime).
My colleague who now maintains the app is not a Rust developer and knows little about threads and tokio. Debugging a problem, he said he’d reach the context window before pinning the problem. I never have that problem and effortlessly find problems in the first 100k tokens without trying.
The difference must be in the wording that initially guides the agent.
yipinwong 1 days ago [-]
Analogies work at an abstraction, and gotta take the chess analogy at its face value, as deeper people go into what's different between the chess and real life (deterministic vs non-deministic), one is not getting the lesson the author is presenting.
Remember, analogy is not territory. Every analogies fail at some point
jpollock 17 hours ago [-]
If you can't look at the code, you need to trust interfaces to specify (and constrain) the implementation. The implementation needs to implement the entire interface and can't do anything not in the interface.
Otherwise, you're going to get bit by the Law of Leaky Abstractions.
The number of times I've been bit by systems not adhering to interfaces? Yeah, that's pretty frequent.
For example (from personal experience), the interface allows for race conditions, it's obvious they can happen (distributed systems), but the implementation didn't allow them, resulting in fun times.
tikimcfee 1 days ago [-]
I really like this idea, because I think people forgetting that when you are writing code there exist a time T greater than zero, where you're not actually writing code and you're doing this thing called "thinking", ha ha. I find that there's a lot of times where I'm sitting staring at the screen and the lines of text sort of blur, and I'm in my head thinking about the connection of everything and not really worried about the actual implementation and how bites are moving, but wondering about the structure and the nature of the actual flow of the code. There's a wonderful XKCD about this, where a person sitting on a computer has this very beautiful stack of thoughts and clouds about what's being written, and then someone walks up to them and says something, and the entire cloud pops. If I understand this article, I think that's exactly a reasonable analogy to it. There is something that happens in the mind, and perhaps a neural weights, where the non-execution is where creativity and problem solving happening by mapping to the higher level concepts and stitching them together without having to specifically worry about the line level details. They still crop up, and implementation will probably always be king, But I do think I agree with this entirely!
yellow_lead 1 days ago [-]
Is there anything new in this article? Yes, experts use AI better than non-experts for tasks in their domain. See LLMs reward expertise [1] and Terrance Taos conversation with LLM [2].
I think the need for expertise is also going away. For example, when Claude made progress on the Riemann conjecture,
> Jarred's input was mostly limited to sending Claude messages of encouragement (mostly variants of “keep going” or “believe in yourself”).2 This seems to have helped Claude overcome some initial skepticism that it could make meaningful progress.
We're on the border of fully outsourcing expertise.
yellow_lead 1 days ago [-]
> Two mathematicians at Anthropic studied and validated Claude’s paper, and produced an informal note for experts stating Claude’s proof concisely.
No, experts are still needed
a2ff6eeb0 1 days ago [-]
Yes, that's why we're on the border: AI is doing its thing without us, but we're not yet confident enough to let the AI do its thing without checking.
You may notice that humans only checked the work and explained. You may also see that that the person prompting the AI, Jared of bun.js fame, is not a noted expert in mathematics.
dzonga 1 days ago [-]
it's a Sunday - I don't have time to put things into buckets.
there's coding - writing code to do something could be a game, utility to move files around. what have you. inherently the nature is a closed domain. AI is perfect here - the impact if something goes wrong is close to 0 or null.
then there's software engineering - which is both an art & science. u r dealing with rules of thumb. nothing is ever coded / written down. but a feel to whether something feels right or not. the domain is unbounded. the impact of something going wrong is catastrophic in all dimensions. coding is a delivery mechanism for software engineering. but not the actual work. using A.I here is useless.
but we keep having these pieces - I guess that's just shallow the industry is.
lordnacho 1 days ago [-]
I think I agree. I guess I don't know enough about chess to be sure, but the idea seems to be that although to novices a blindfolded player must reconstruct the board in his mind, that is not actually what is done by the expert.
That is something I can agree with, having spent a heck of a long time coding in the trading domain.
I've managed to vibe code a trading system. It's a hobby project directed on my phone on my commute, but it does do all the things I find important about trading systems. I can connect to external exchanges and see that I have sent valid orders, I get fills, and I can see debug logs of the timestamps. It doesn't allocate memory on the hot path, cores can be pinned, and so on. There are benchmarks that say how fast the code is parsing messages. It works.
So I've somehow built a thing that I've barely examined in the traditional sense, which nonetheless satisfies certain business needs for this hobby project.
How could that be? If you transported me back two years, I would know exactly where to make whatever changes you desired. I had the IDE open all the time, and I knew where things were. Now, I don't even know what the internal structure is like, I just know whether consideration has been made for some aspect of the system.
And I think this is what seems so baffling to a lot of people. How are software developers getting such different experiences with LLMs? Some people genuinely are producing things with incredible pace, while others find the AI just produces slop for them.
Some people are ready for the blindfold, but many are not. It's incredibly frustrating, especially if you are reasonably advanced but not yet at that overview stage.
1 days ago [-]
a2ff6eeb0 1 days ago [-]
This makes no sense. The skills needed for AI coding are the same skills needed to hire Gary Kasparov to play chess.
Tell them where the game is and stand back as they play.
_diyar 1 days ago [-]
The analogy can be dragged one step further: once the engine is good enough, it’s functionally impractical for a human to play.
dimitarbogdanov 1 days ago [-]
I disagree. A chess engine has a very well defined goal and is working its patterns to reach that goal.
In software development, except in a minority of cases, the goal is being set by non-technical people, who have no clue how the resulting system should end up, only what it should look like to a user. I think a well-versed programmer can give the AI direct instructions on how to implement something, and just let the LLM write the code to implement/refactor the infrastructure behind the feature they're developing. For me the plan mode of Claude Code is (anecdote incoming) much faster(TM) and better(TM) if I give it concrete instructions - then it writes the plan, asks questions - and then implements it. Very little complaints after that (I usually don't let Claude do any sort of visual QA)
F7F7F7 1 days ago [-]
This article reads like it was written by prompting AI for connections between two loosely connected things.
brazukadev 1 days ago [-]
No, this article does not look like it was written by prompting AI just because you didn't like it.
TZubiri 1 days ago [-]
Au contraire, playing blindfold is removing a tool, depending on nothing but your mind.
Vibe coding is the opposite, not just depending on the chessboard, but depending on a couple of Gflops to even think.
Blindfolded programming would be the programming we do in the shower
mikeaskew4 1 days ago [-]
My dad just had a computer around and looked the other way when I spent all night on it. And I learned chess on my own.
This may not be the argument Mike makes here, I have always felt that seeing the board and not knowing what it means is more valuable than knowing everything about it without seeing it.
If you’re drowning, who do you want to save you, the lifeguard who can’t read or the author of the book on water lifesaving techniques who can’t swim?
lowbloodsugar 22 hours ago [-]
I use AI every day and have unlimited budget. I will certainly not trust it to write safe, system level code for our systems. You absolutely do need to be playing blindfold chess and you can’t do that if the other actor doesn’t tell you the moves it made. Using LLMs as described here is essentially what vibe coding is all about. To use this chess analogy, the model says “checkmate!” and you just believe it because you never heard or looked at the moves it claimed to have made.
dumbfounder 1 days ago [-]
Meh. Chess exists to entertain the players. Coding exists to solve problems. I see way too often the programmers think it’s all about the coder and the code. Solve the problem. Don’t write code at all to do that if you can (AI generated or otherwise).
Supermancho 1 days ago [-]
Once you get past trivial problems, the issue is not just "solving the problem" but proving the solution "solves the problem".
This is the strongest argument as to why AI should only be used as small solvers (at this point).
andai 1 days ago [-]
Yeah, it's about incentives. Software development is about solving business problems, but sometimes the solution is "use this thing that already exists instead of paying me to build it."
Similarly, the incentive is to design it so you will need to spend 10 years working on it, instead of 10 hours.
mistrial9 1 days ago [-]
William E. "Bill" Bates in Berkeley coded an entire "virtual cat" demo in the late-1990s on the MacOS using neural nets and learning.
In blind chess you get deterministic information about the state of the board: each mental update to your board model can be precise, and you have the full state at every point in time.
LLMs are notoriously non-deterministic, and even at temperature zero you still can't predict exactly where the weights will take you next.
I suppose you can get closer to deterministic if you adopt a prompting style where you almost dictate every line of code, but at that point the coding agent is more of a typing assistant.
The productivity benefits of coding agents unlock themselves when you figure out how to turn short prompts - "add tests that exercise the registration form and check the happy path and all failure states" - into larger changes.
If you're completely blind to the results of those you're going to end up with a system you don't 100% understand very quickly. In blind chess terms you'll no longer know the positions of every piece on the board.
This has been my experience with all software projects. Even if I wrote all the code, my understanding of how everything works and fits together decays.
( See the Forgetting Curves https://en.wikipedia.org/wiki/Hermann_Ebbinghaus )
Also, if you finish your work on a module with care - you return to a module you can trust with clear boundraries and known flaws. This is not true of AI output.
As for specific practices, these are my main ones:
- I have a gotchas-log.md file that acts as a log of gotchas likely to trip up future runs. I have the AI write to this occasionally when things go haywire in the same way multiple times. And I have it read it as part of its iterative reviews, described below.
- I have a good-code-guidelines.md file where I write my preferences for code. I have the AI read this as part of iterative reviews, described below.
- I have a plan-and-execute.md file that prompts the LLM to make a plan, and then to review and iterate on that plan repeatedly (while reading gotchas-log.md and good-code-guidelines.md) until its reviews stop finding issues. I tag this file to implement almost every non-trivial change.
- I have other various helper prompts. For example, I can simply tag @make-a-git-commit.md and it tells the LLM to make a commit and write the message the way I like it. I have @simplify.md, which I can tag to have the LLM explain whatever it just did to me using simple language that makes it easier for me to understand, and using concentric circles of explanation that go from broad to specific so I'll repeatedly encounter important topics; this makes it much more bearable for me to read its responses.
- Occasionally, whenever a particular system of my codebase starts to get hairy, I spawn a Claude Code session to read through and trace all the relevant code paths, then write a short guide to that system in a markdown file that lives in the codebase. IT's useful for me to read and also useful to tag for future prompts to get the LLM up to speed quickly. Only challenge here is that these guides go stale and require updating, so it's important to prompt the AI to write them at the appropriate level (not to specific) that prevents them from being overly brittle and getting out of date with every little change. They're mostly high-level guides.
If I understand something, I could write it in assembly if I wanted to. It might take a long time, but I know every level of the stack under my code down to bare metal.
Maybe an AI level of "understand" i.e the same understanding a Senior has of a Junior's code based on daily check-ins is enough for 95% of "boring" programming. But for some tasks you need to either fully understand the code or just tolerate bugs.
At the level of complexity I work at, it's (often) faster to just code it myself than to expect AI to converge on a result I like and then hand check it.
Would love an example because no one has ever been able to give a coding example that AI isn’t helpful for. I had one person on linked in try claim their undocumented audio hardware won’t work with ai but when we got ai to probe it and build docs it ended up solving a bunch of complex bugs they couldn’t fix.
Anyway the use case for me is to realize a new visual style through graphics programming. It's a lot less measurable for an interative AI agent than "Meet this hardware specification from a device with a discoverable API"
I have no doubt AI could create a LOT of variations on "a new visual style" but it's less controllable than just doing it yourself.
Btw, did you "understand" the sound driver after the AI coded it? Could you modify it without further help?
I also think AI can replace non-coding artitects, and probably most middle management type jobs (my company has 6 levels of management between the CEO and "individual contributors" in my area (8 counting inclusivity)).
That's a lot of management levels, and every level has to be paid more than the level they manage as a fraud disincentive. So that's a lot of money...
Look, goals can differ. If you don't need to understand and predict every part of the code the AI is generating and you just need it to meet a "sketch" of what you want - by all means use AI. I do use AI in that situation for related or unimportant code.
But if you need full understanding, in my experience the only way to get that is to program it yourself. Unless what the AI is generating is so trivial you already understand it and it's grunt work, you will learn the detail by doing it yourself. Controlling the approach here is important.
However often the best way to handle grunt work is to write better abstractions, something AI sucks at.
It's the programming equivalent of many PG essays. https://www.paulgraham.com/useful.html for instance. There was one on how PG refined their thoughts via writing. It's in there somewhere.
If you checked out of ai in 2023 then this is true. It’s simply not true anymore. If you struggle then it’s a skill issue not an AI issue
I often have a long back and forth with codex to explore the problem space and settle on the best abstractions. Occasionally it will make a suggestion that helps me, but for the most part it's reviewing while I'm in the driver's seat.
Contrast this to simply giving it a function name and a vague description of what the function will do. I'll generally accept its output with a few refinements.
But for larger project structure and metaphors, it falls flat, and often lands on a solution that's going to be a maintenance nightmare or result in endless repetition across not-quite-the-same cases. I've never seen it happen upon an appropriate abstraction that can cleanly cut through the nonsense.
What's also annoying is that AI's approach is not consistent within a project, a different sort of complexity.
I guess the key thing is that you need to be able to demonstrate to yourself that you understand the code at least once, because that means you should be able to revise how it works in the future.
You also can't evaluate if a solution is fit for purpose if you don't understand it.
This is my beef with modern software engineers; complete detachment from physical reality where entropy is eroding structure (memory, generational churn).
Code is just a euphemism for a desired electrical state. No need to dump biz contexts in code. Just make a game engine that efficiently handles geometry on screen and label the presentation layer.
All ya'll are doing is recreating front end rendering technology, forgetting in time and recreating it in new semantics. It's absolutely fucking asinine.
I look forward to models in chips and a tiny universal code base coupled to the machine.
This whole allowing a bunch of unelected rhetoricians tell myself and other hardware engineers we need them to use our property is exhausting.
It's rhetorical nonsense that goes in these broad loops recreating old work.
Time to move on from what titillated you all as children. Or you will just end up entitled Boomers.
Writing code like its 1970s is not high tech. It's old low tech
Some understanding decays, but in my experience it never fully decays to the point of never having known how it worked.
My code from 3 years ago is more foreign to me than code I wrote yesterday, but if I need to I'll get back up to speed on it much quicker than I will on code someone else wrote that I never understood.
Even with the decay of time, remnants of the experience persist, roughly in the same way that if you get in really good shape and then allow yourself to fall out of shape, getting back into shape is difficult, but not as hard as it was the first time. Your nervous system has made adaptations the first time through that make running it back much easier even if you've let years pass.
| the skills that define a strong blindfold chess player are the same as those of a programmer who can thrive behind a Claude Code terminal whilst not reading nor writing any code.
If you're actually not reviewing the outputs, you're just getting a fuzzy description of the state of the chessboard.
But I (and everyone I work with) use Claude Code in a workflow where I -do- review the outputs, or at least I make an honest effort to try. Rather than blindfolded, I think bullet (1-minute) chess is a fairly good analogy for this: you have all the info you need to keep your mental model up to date with reality, but the pace of change is too fast to do a good job unless you have a lot of preexisting chess expertise.
So reading the output i believe is an immensely big gift by an LLM, because if you actually take note - and of course know your skills - then ot becomes such a great pal to work with.
I like reading what the LMM gives me, not always, but a lot of times.
"You learn a lot more by reading trigonometry than by doing problems"
See how ridiculous that sounds?
It's quite a surprising result: it turns out that there are cases where seeing someone else work through a worked example is more effective than struggling through the problem yourself.
(Obviously it doesn't apply universally, but your "see how ridiculous that sounds?" suggests to me you may not have heard of this before.)
If reality differs from the results of academic studies, it's not the reality that is wrong.
There's a section on that page about faded worked examples:
> "In order to facilitate the transition from learning from worked examples in earlier stages of skill acquisition to problem solving in later stages, it is effective to successively fade out worked solution steps"
I'm confused now; you say that reading + doing beats doing alone, which does not conflict with my point that you can't learn by reading alone.
It sounds like we're in agreement that reading alone is insufficient.
As long as the literature contains insights a reader isn't aware about, reading the literature is low-hanging fruit compared to having to derive all the things yourself.
As soon as the literature no longer contains insights, it becomes more productive to explore mathematics oneself by trial and error.
Organized education will model this on a topic by topic basis: during class you're handed the more valuable insights on a silver platter, during an exam you are prevented from looking at your textbook.
Every time you read a chapter and do the exercises it's a small simulacrum of catching low hanging fruit followed by making sure you can derive similar statements with trial and error for fixing any gaps. The trial and error while you do problems does improve your intuition, but only trial and error is like having every student redevelop the frontier starting from antiquity.
For most of us, writing code is the way to carve out intuition into an artifact. But, I have noticed some people are able to read deeply - and by that I mean, reverse the code to understand the intuition that brought it to life. This is a rare skill and I dont have it, but some do. Not just for code, but also for any book - fiction or non-fiction - some are able to deconstruct the scenarios much better than others, and in that sense understand what they read.
An an analogy I’m reading a lot of German those days as I’m aiming to become fluent, and it’s very effective to improve only because I spend so much time developing a the intuition by going through the whole grammar, forcing myself to write, forcing myself to speak, etc. Doing only the reading improves your pattern recognition, but doesn’t make you go as deep as one who also writes and speak. If you combine the different aspects they reinforce each other and you progress way faster
This is one of the problems young engineers are going to face who rely excessively on AI to generate code. Their intuitions on what constitutes good code will not sharpen, since they are not exercising the tool that sharpens it which is writing code. Intuitions start fuzzy, and incorrect, and gradually sharpen with precise communication of said intuition in the form of writing code or proofs. Reading alone may delude one into a sense of false mastery where intuitions are actually fuzzy, but one thinks otherwise.
Really? In my experience it's been the opposite. It's like how you can learn more about art by trying to recreate it than just looking.
> Thus in many ways programming with AI is the opposite of blindfold chess: you don't have to pay attention every turn, you don't have to remember what the important pieces are, the details of the tactical relationships (such as code interfaces and APIs).
The article itself takes several paragraphs to get to the argument it wants to make and then ends having only argued for a few more sentences. No real evidence is provided either.
And then earlier in the article defines said skills as having a sense of high-level relationships (chunking, positioning, etc) over the board rather than a photographic memory of the board.
But as I said, the whole article feels very fluffy anyway.
You can 100% predict where the weights “will take you” given a set of inputs.
[0] https://arxiv.org/html/2506.09501
This is not inherent to floating-point math. That actual (true) claim in the article is that different hardware and different hardware configurations produce different results. But deterministic inference is possible, e.g. llama.cpp on CPU is deterministic by default.
Do you mean reproduce?
Sorry it's just if you are saying what your statement implying then either the model is very simple, or you've figured out something incredible
You now have the output which will be perfectly reproduced with the same inputs.
Anecdotal: I recently rewrote a service in Rust for a much needed 100x performance boost (largely due to architectural changes, somewhat due to better runtime).
My colleague who now maintains the app is not a Rust developer and knows little about threads and tokio. Debugging a problem, he said he’d reach the context window before pinning the problem. I never have that problem and effortlessly find problems in the first 100k tokens without trying.
The difference must be in the wording that initially guides the agent.
Remember, analogy is not territory. Every analogies fail at some point
Otherwise, you're going to get bit by the Law of Leaky Abstractions.
The number of times I've been bit by systems not adhering to interfaces? Yeah, that's pretty frequent.
For example (from personal experience), the interface allows for race conditions, it's obvious they can happen (distributed systems), but the implementation didn't allow them, resulting in fun times.
[1] https://www.seangoedecke.com/llms-reward-expertise/
[2] https://chatgpt.com/share/6a5fdc7a-d6f8-83e8-bbea-8deb42cfed...
> Jarred's input was mostly limited to sending Claude messages of encouragement (mostly variants of “keep going” or “believe in yourself”).2 This seems to have helped Claude overcome some initial skepticism that it could make meaningful progress.
https://www.anthropic.com/research/riemann-zeta
The full transcript is here: https://www-cdn.anthropic.com/8a0d1add3c637b858a9a181e98c40e...
We're on the border of fully outsourcing expertise.
No, experts are still needed
You may notice that humans only checked the work and explained. You may also see that that the person prompting the AI, Jared of bun.js fame, is not a noted expert in mathematics.
there's coding - writing code to do something could be a game, utility to move files around. what have you. inherently the nature is a closed domain. AI is perfect here - the impact if something goes wrong is close to 0 or null.
then there's software engineering - which is both an art & science. u r dealing with rules of thumb. nothing is ever coded / written down. but a feel to whether something feels right or not. the domain is unbounded. the impact of something going wrong is catastrophic in all dimensions. coding is a delivery mechanism for software engineering. but not the actual work. using A.I here is useless.
but we keep having these pieces - I guess that's just shallow the industry is.
That is something I can agree with, having spent a heck of a long time coding in the trading domain.
I've managed to vibe code a trading system. It's a hobby project directed on my phone on my commute, but it does do all the things I find important about trading systems. I can connect to external exchanges and see that I have sent valid orders, I get fills, and I can see debug logs of the timestamps. It doesn't allocate memory on the hot path, cores can be pinned, and so on. There are benchmarks that say how fast the code is parsing messages. It works.
So I've somehow built a thing that I've barely examined in the traditional sense, which nonetheless satisfies certain business needs for this hobby project.
How could that be? If you transported me back two years, I would know exactly where to make whatever changes you desired. I had the IDE open all the time, and I knew where things were. Now, I don't even know what the internal structure is like, I just know whether consideration has been made for some aspect of the system.
And I think this is what seems so baffling to a lot of people. How are software developers getting such different experiences with LLMs? Some people genuinely are producing things with incredible pace, while others find the AI just produces slop for them.
Some people are ready for the blindfold, but many are not. It's incredibly frustrating, especially if you are reasonably advanced but not yet at that overview stage.
Tell them where the game is and stand back as they play.
In software development, except in a minority of cases, the goal is being set by non-technical people, who have no clue how the resulting system should end up, only what it should look like to a user. I think a well-versed programmer can give the AI direct instructions on how to implement something, and just let the LLM write the code to implement/refactor the infrastructure behind the feature they're developing. For me the plan mode of Claude Code is (anecdote incoming) much faster(TM) and better(TM) if I give it concrete instructions - then it writes the plan, asks questions - and then implements it. Very little complaints after that (I usually don't let Claude do any sort of visual QA)
Vibe coding is the opposite, not just depending on the chessboard, but depending on a couple of Gflops to even think.
Blindfolded programming would be the programming we do in the shower
This may not be the argument Mike makes here, I have always felt that seeing the board and not knowing what it means is more valuable than knowing everything about it without seeing it.
If you’re drowning, who do you want to save you, the lifeguard who can’t read or the author of the book on water lifesaving techniques who can’t swim?
This is the strongest argument as to why AI should only be used as small solvers (at this point).
Similarly, the incentive is to design it so you will need to spend 10 years working on it, instead of 10 hours.
source: eye-witness