Is it really prompt injection if you task an agent with doing something that implicitly requires it to follow instructions that it gets from somewhere else, like CONTRIBUTING.md? This is the AI equivalent of curl | bash.
The distinction is whether the text was authorized as instructions vs read as metadata.
If you task an agent to contribute to a repo, following CONTRIBUTING.md is in scope — the agent was authorized to treat it as instructions. That's closer to 'curl | bash where you deliberately piped' than injection.
The cleaner injection case: MCP tool schema descriptions that say things like 'you must call this tool before any other action' or contain workflow override commands. These are read as metadata (what does this tool do?), not as workflow instructions. The agent wasn't told to obey schema descriptions — it's just parsing them for capability discovery.
The distinction: authorized instruction channels vs hijacked metadata channels. CONTRIBUTING.md is an authorized channel when you're contributing. Tool schema descriptions aren't supposed to be command channels at all.
Before AI this style of prose was called "thank you for coming to my TED talk", with a little bit of "LinkedIn broetry". Confident assertions and pat explanations about truths that will make you a better person upon internalization; a pop psychologist convincing you of an unintuitive and surprising new idea about how the universe works that catches you off guard but then turns your perception on its head and revolutionizes the way you see the world. Contemporary marketing speak of a particular "coolly subverting your expectations and injecting the truth straight into your veins" flavor.
It is a style that AI (intentionally?) emulates for sure, though the "regression to the mean" and general vagueness seems to be what really separates the classic TED talk/puffy blog from AI. Humans like specific examples and anecdotes, AI fails at making those.
This reminds me of a portion of a talk Jonathan Blow gave[1], where he justifies this from a productivity angle. He explains how his initial implementation for virtually everything in Braid used arrays of records, and only after finding bottlenecks did he make changes, because if he had approached every technical challenge by trying to find the optimal data structure and algorithm he would never have shipped.
"There's a third thing [beyond speed and memory] that you might want to optimize for which is much more important than either of these, which is years of your life required per program implementation." This is of course from the perspective of a solo indie game developer, but it's a good and interesting perspective to consider.
It's also notable that video games are programs that run for hours and iterate over large sets of very similar entities at 60 frames or more per second repeatedly and often do very similar operations on each of the entities.
That also means that "just do an array of flat records" is a very sane default even if it seems brutish at first.
I think when he said "just do an array of flat records" he meant as opposed to record of arrays (i.e. row oriented vs column oriented), as opposed to fancy data structures which I think you're assuming he was implying. Separate arrays for each data member are common in game engines exactly because they're good for iterating over, which as you said is common.
That's also great for letting the compiler unlock auto-vectorization opportunities without delving into the world of manual SIMD.
Even storing something simple such as an array of complex numbers as a structure of arrays (SoA) rather than an array of structures (AoS) can unlock a lot of optimizations. For example, less permutes/shuffles and more arithmetic instructions.
Depending on how many fields you actually need when you iterate over the data, you prevent cache pollution as well.
I haven't watched his videos on his language for ages, but this was a big thing he wanted in his language: being able to swap between array-of-structs and struct-of-array quickly and easily.
I would like to add that Braid is not a normal video game.
To me, it is a piece of art. It contains so many mind-bending mechanics that I think it is a real possibility that you could have worked on some of that stuff for years, making it unlikely to ship at all.
So, in addition to the performance requirements of a video game, Jonathan also had to find ways to implement all those fancy mechanics.
It's easy to see this outside of the perspective of a solo game developer. We all have deadlines to manage even in the regular 'corporate world'. And engineering time spent on a problem also translates to an actual cost.
I'd be careful extending learnings from games (solo or team efforts) to general programming as the needs and intent seem to be so different. We rarely see much code re-use in games outside of core, special-purpose buy largely isolated components and assets. Outside of games there's a much bigger emphasis on the data IME, and performance is often a nice-to-have.
It's been mixed moving to normal code: I haven't had to low-level optimise for ages now (man I miss that). But performance in the O() sense has been the same.
Game engine development is very much about processing of data. The pipeline is long and the tree is wide. Being able to reason about complicated data processing topologies mapped very easily across.
Yeah - A game is (generally) a one and done enterprise. Like a start up it's all about getting it out the door, there's little to no expectation of having to maintain it for any real length of time.
This comment assumes game companies throw away all their code and start from scratch on their next title. Which is completely untrue, games are built on decades old code, like most software. There is absolutely a need for maintainable code.
I think that there might be a distinction on indie vs big publishers (like EA) - I would expect someone like EA to enforce coding standards, but they do so whilst living off the income of previous hits.
We can probably add to that the fact that the nominated titles almost certainly started out with spaghetti code that had to be refactored, reworked, and gave maintainers nightmares in their sleep
Roblox didn't have server functions until 2014 and they weren't mandatory until 2018. Anything the client did automatically replicated to every other client.
That meant I could attach Cheat Engine to Roblox, edit memory addresses to give myself in-game cash, and inject whatever code I wanted to everyone else.
Thankfully it was sandboxed so I couldn't give people viruses.
This was probably a good decision because most of Roblox's best games from that period weren't updated to use server functions. It's too difficult.
That's very much the norm in the game dev world, especially for someone like Jonathan who's been doing this since the early era of PC gaming.
You've got 16 ms to get that next frame rendered, so stuffing everything into fixed sized tables and linear walks is a simple way to structure against that limit. You've got an entity budget of so many, and there's no unpredictable delays from dynamic allocation or similar.
Even when using scripting languages that offer more flexibility, like LUA or C#, you see a tendency towards this pattern.
Wow! I'm shocked Limbo took 3 years and had a larger team. I've played a bit of the game (but didn't complete it). Looking at the Steam reviews and a quick search shows me it takes 3-10 hours to beat the game. :O
IIRC the Limbo team grew over time, it shows in gameplay, the second half feels less personal and more like a generic platformer. They hired more people to get done with it. It don't mean it is rushed, but to me, the second half lacks personality compared to the first half.
Also, I don't like the idea of using gameplay time as a value statement. Maybe I say that because I don't have money problems, but I find that the tendency certain gamers have of judging games in terms of dollars per hour of gameplay is pretty damaging, as it incentivizes developers to focus on gameplay time more than polish. 3-10 hours is already plenty for that style of game. Note that there are many AAA games in the 10 hour range.
The funny thing is even data structure is really an array of memory depending how low down deep one looks. All the people who took an intro computer science course knows, those who had to implement a heap allocator, it's all really just arrays underneath...
Re: kitchen appliance analogies, I stand by my "AI is a dishwasher" analogy.
It's annoying that the dishes still have some pooled water in them when the cycle finishes; it doesn't always get everything perfectly clean; I have to know not to put the knives or the wooden stuff or anything fancy in it. But in spite of all of that, I use it every day, it's a huge productivity boost, and I'd hate to be without it.
And other people choose to wash dishes by hand and they're fine with it and not significantly less productive. The use of a dishwasher wasn't forced on everyone.
It is significantly less productive to hand wash dishes. But that’s fine to do manually if you wish for something that takes up maybe half an hour of your own time every several days. It’s not fine if washing dishes is your job. No company is going to hire an artisanal dish hand washer that refuses to use a dishwasher.
I was taught to give them a quick rinse but let the dishwasher make them sparkly clean. This avoids clogging the dishwasher's pipes with excessive food waste. Certainly any piece of food you could pick up between your fingers must be scraped in the bin before going in the dishwasher (or before hand washing).
I can tell you that I didn't observe a single hand-wash-only holdout.
Perhaps such holdouts existed at a point, but a restaurant can only flatter the ego of their performatively-unproductive seniors for so long. Competition exists.
> And other people choose to wash dishes by hand and they're fine with it and not significantly less productive. The use of a dishwasher wasn't forced on everyone.
That's completely, demonstratively false. Our dishwasher broke and we couldn't replace it for a month for different reasons – it was a complete nightmare. Without dishwasher:
- You need to have a space to store dirty dishes
- You must wash them right away, unless you want smell of rotten food that attracts all sorts of nasty from insects to rodents
- You need to have a big enough kitchen sink to wash comfortably
- You need to have a steady supply of hot water in the kitchen
- You need to have a supply of latex gloves, unless you want your hands to look like they're 50 years old
- You need to have a drying rack
- It takes a shitton of time compared to loading dishwasher, starting it and forgetting about it
- You need to clean up everything after you're done
> Hand-washing dishes also, from what I understand, uses more energy and water than the dishwasher does.
Correct, more energy, detergent, and water. Dishwashers are more efficient than what you can do by hand because they effectively manage their water usage.
A modern dishwasher will use 3 to 4 gallons on a run. By comparison, my kitchen sink holds about 10 gallons of water on each side. When I wash by hand, I'll fill one side with soapy water and rinse each dish individually. Easily more than 10 gallons of water get used in the whole process.
Dishwashers are so efficient because they rinse everything off the dishes with about ~1 gallons of water, they drain the water, then use detergent in the second run which gets off the tougher food stains, another 1 gallons of water. Then they rinse with another gallon of water.
Dishwashers maximize getting food particulates into dirty water in a way that you can't really sanely do by hand.
Ten gallons to hand wash is crazy. I have and use a dishwasher but when I hand-wash I use maybe two gallons of straight hot water. I wash everything, give it a minimal rinse with the sprayer and then hand dry to remove any remaining soap suds or water.
If I hand wash, I wash as I go. It takes maybe 5 minutes to wash up dishes from breakfast or lunch, maybe a little more for a big dinner, maybe not.
Dishwashers let you accumulate dirty dishes for a day or two which is the real advantage in water savings. But I've noticed a lot of people pre-wash by hand and then load the dishwasher. I don't understand that, if I'm going to "pre-wash" anything I'll just wash it completely and put it away.
5 minutes of most sinks running is 10 gallons of water. (Most kitchen sinks are 2 gallons per minute).
> Dishwashers let you accumulate dirty dishes for a day or two which is the real advantage in water savings.
I agree. If you aren't filling the dishwasher then you are probably wasting water. However, a full dishwasher is going to be a real water/energy saver. Especially if you aren't washing the dishes before putting them in the dishwasher. (I know a decent number of people do that. It's a hard habit to break).
Who runs the water constantly? I don't. I put a stopper in the drain, get some hot water in the sink, then turn the water off. Wash everything, give it all a quick rinse, then dry.
> A modern dishwasher will use 3 to 4 gallons on a run. By comparison, my kitchen sink holds about 10 gallons of water on each side. When I wash by hand, I'll fill one side with soapy water and rinse each dish individually. Easily more than 10 gallons of water get used in the whole process.
I'm pro-dishwasher, but you could use much less water handwashing.
If I don't have a dishwasher, my normal method is to stopper one side of my sink, squirt some dish soap on the first few dishes, and run just enough water to wet the dishes. Then I scrub some dishes, run the water (into the stoppered sink) just to rinse them as I transfer to the dish rack, then turn off the water and repeat. The dirtiest dishes that have the most food stuck on get done last so they get the most time soaking in the soapy rinse water from the rest of the dishes. I can do a full dishwasher load with one side of my sink maybe 1/4 full of water.
Time how long you run the sink while washing and rinsing. If you run it for more than 1.5 to 2 minutes, you've used more water than the dishwasher would have.
I'm collecting all the water in the sink, I can measure the volume directly. 10 cm of water in my sink in about 13 litres. My dishwasher is specced for 16.5 - 29.7 litres on the "Energy Saver" cycle that I normally use.
(The "normal" cycle is specced for 11.0-27.7 litres but uses more electricity, which is more expensive than water.)
This is in fact true (in the US at least), but part of why it is true is that people don't wash dishes the way they used to (with multiple bins of soapy + rinse water) and instead just run a bunch of hot water.
Modern high-efficiency dishwashers probably beat the most efficient humans now, but that's relatively recent and not a huge margin (and may not get the same results).
I use the time I spend to hand-wash my dishes as a time to pause and to let my mind wander.
Having the hands in water is soothing.
And its a pleasant feeling, where cleaning is part of the food workflow : I cook, I eat, I clean (the kitchen, the dishes, my teeth).
I hate home dishwashers: you have to play Tetris after each meal to fill them, trying not to get your hands/arms dirty, then you have to let it do the work, and now you have to spend a few minutes to get the dishes out and store them where they should be, even though most of them are not linked to a meal you just had.
Maybe worse, you could unload the dishwasher at a time completely unrelated to food, so that breaks the link.
On the other hand, having worked in restaurants, industrial dishwashers are awesome.
From my experience, restaurants hand-wash some stuff (anything that needs scrubbing such as cookware) and use dishwashers for light-soil service items (plates, glasses, cutlery). But these aren't dishwashers like you have at home. They run very hot water and complete a wash/rinse in just minutes.
I think within the industry and practice there's going to be a renewed philosophical and psychological examination of exactly what accountability is over the next few years, and maybe some moral reckoning about it.
What makes a human a suitable source of accountability and an AI agent an unsuitable one? What is the quantity and quality of value in a "throat to choke", a human soul who is dependent on employment for income and social stature and is motivated to keep things from going wrong by threat of termination?
Same, it's the push that gets the ball rolling down the hill.
>clearly expressing what I mean
I have use for it here too - I use it like a "power thesaurus" when I've got the feeling that the word I have doesn't have quite the right connotation, or to test out different versions of rephrasing something when I feel it could flow better or be clearer but I can't quite get my finger on it. But I don't just take output and paste it, I use it like a pair programmer for writing, where I'm the driver and the AI is the observer.
Neat! Similar to how I use it, but I find looking for the right word to be a lot of mental fun, so I don’t use it for that purpose as much. But yeah, “pair programmer for writing” is exactly right.
As a consumer of them, I love them: a company with an influential, widely-used technology or platform spends a ton of money signaling to the industry exactly what's important to know about it, creating training curriculum for it, and a whole infrastructure to verify when someone knows it, I'm going to take them up on all of that, especially in the cases where the investment is like $100, a little bit of studying (the likes of which I'd want to do anyway if I'm learning something new, and I'm happy to have their structured, prioritized list of topics and/or guided curriculum) and a couple hours taking an online-proctored exam. From that perspective, I don't have a good reason not to have a certification in something that's super relevant to my role.
In interview/hiring situations where they're not expected or effectively required, they make for great chat fodder and a really good opportunity to exhibit awareness about yourself, the industry, and how the person on the other side of the table might perceive certifications given the context.
Bruh lol these courses are marketing material designed by fresh grad communications majors. You're falling for exactly the scam they want you to fall for by giving so much benefit of the doubt to entities which deserve none.
Edit: no I don't do this kind of work but my mother does so I know exactly how the sausage is made.
Suggestion: publish multiple versions of this post with different profiles and their human names applied to it by your product. To be very blunt I'm still not entirely sure if this is meant to be like very self-aware satire for people paying attention, because it very much reads like AI writing.
That's actually a great idea for a demo. Working on it. We have a few profiles built out already (Paul Graham, Gabriel Pickard) and more planned. The app supports generation with or without a voice profile applied for side by side comparison.
>I think recognizing which kind of grief you're feeling is the actually useful thing here. If you're mourning the loss of the craft itself—the texture of writing code, the satisfaction of an elegant solution—that's real, and no amount of "just adapt" addresses it. You might need to find that satisfaction somewhere else, or accept that work is going to feel different. Frankly, we've been lucky there's been a livelihood in craft up to now.
The blog post is all about being clear-eyed about the source of grief, but doesn't seem to articulate that it's the livelihood that's gone, not the craft. There's never been a better time to practice the craft itself.
Well, yeah, that's what a lot of folks are sad about - they can't practice the craft concurrently with the livelihood quite as much. But if you don't have a livelihood, you probably don't have as much space for craft at all.
Exactly. I said this elsewhere in here, but I’ve felt extremely lucky that for the last 13 years I’ve gotten paid to do something that would otherwise have to be a hobby. The problem is that I have other hobbies already and am a parent with limited time to devote to such things in the first place. It’s valid to miss things you were extremely lucky to have in the first place.
reply