<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>README — culture</title>
<link>https://readme.news/tags/culture/</link>
<atom:link href="https://readme.news/tags/culture/feed.xml" rel="self" type="application/rss+xml"/>
<description>README pieces tagged culture.</description>
<language>en-us</language>
<lastBuildDate>Thu, 01 Oct 2026 13:20:31 +0000</lastBuildDate>
<item><title>The joke RFCs are the best documentation</title><link>https://readme.news/the-joke-rfcs-are-the-best-documentation/</link><guid isPermaLink="true">https://readme.news/the-joke-rfcs-are-the-best-documentation/</guid><pubDate>Wed, 01 Apr 2026 09:00:00 +0000</pubDate><description>RFC 1149, RFC 2324, and why the internet&#x27;s funniest specifications are also its clearest.</description><content:encoded><![CDATA[<p>Every April the IETF publishes a joke RFC, a tradition running since 1978. They are funny. They are also, consistently, better written than most serious specifications, and that is worth examining.</p>
<h2 id="the-canon">the canon<a class="anchor" href="#the-canon" aria-label="link to this section">#</a></h2>
<p><strong>RFC 1149</strong> — "A Standard for the Transmission of IP Datagrams on Avian Carriers." IP over carrier pigeon. Specifies encapsulation, MTU, and the failure characteristics. Notably: it was actually implemented and tested in Bergen in 2001, achieving a 55% packet loss rate and ping times measured in hours.</p>
<p><strong>RFC 2324</strong> — the Hyper Text Coffee Pot Control Protocol, which gave the world HTTP 418 "I'm a teapot." Still returned by a nonzero number of production servers and still occasionally proposed for removal, which reliably generates more discussion than any real feature.</p>
<p><strong>RFC 1925</strong> — "The Twelve Networking Truths." Not a joke, exactly. A list of things that are simultaneously funny and among the most useful engineering aphorisms ever written:</p>
<blockquote><p>(3) With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea.</p></blockquote>
<blockquote><p>(6a) It is always possible to add another level of indirection.</p></blockquote>
<blockquote><p>(11) Every old idea will be proposed again with a different name and a different presentation, regardless of whether it works.</p></blockquote>
<p>Number 11 is the most predictive sentence in computing.</p>
<p><strong>RFC 748</strong> — TELNET RANDOMLY-LOSE Option, the first April Fools RFC, which parodied the specification format so precisely that it reads as a real document until you notice what it specifies.</p>
<h2 id="why-they-are-well-written">why they are well written<a class="anchor" href="#why-they-are-well-written" aria-label="link to this section">#</a></h2>
<p>Here is the thing: a joke specification only works if the reader can follow the technical content exactly. The humor lives in the gap between rigorous form and absurd content, and the gap only exists if the form is genuinely rigorous.</p>
<p>So the author cannot hide behind jargon. Cannot be vague. Cannot leave the <a class="xref" href="/boring-technology-revisited/" title="Boring technology, revisited">failure modes</a> unspecified, because the failure modes are the joke.</p>
<p>RFC 1149 specifies the MTU, the encapsulation, the retransmission behavior, and the security considerations. It is a more complete specification of a transport protocol than a lot of real protocol documents, in one page.</p>
<h2 id="what-to-steal">what to steal<a class="anchor" href="#what-to-steal" aria-label="link to this section">#</a></h2>
<p><strong>Specify the failure modes.</strong> The joke RFCs always do, because failure is funny. Real specifications frequently do not, because failure is embarrassing. Failure is also the part your implementer most needs.</p>
<p><strong>Be short.</strong> Every one of these fits on a page or two. Length is not thoroughness.</p>
<p><strong>Use concrete examples.</strong> The absurd ones are memorable; ordinary concrete ones are just as clear and less funny, which is fine.</p>
<p><strong>Write the security considerations section honestly.</strong> RFC 1149's is a single sentence about the possibility of the carrier being intercepted by a predator. It is more informative than a great many real ones, which say "security considerations are out of scope for this document" — a sentence that should be banned.</p>
<h2 id="the-serious-point">the serious point<a class="anchor" href="#the-serious-point" aria-label="link to this section">#</a></h2>
<p>Technical writing quality is not about vocabulary or formality. It is about whether the reader can reconstruct what you meant.</p>
<p>The joke RFCs are readable because their authors were writing for an audience they wanted to make laugh, which requires being understood. Most specification authors are writing for an audience they want to satisfy, which does not.</p>
<p>If you want to test whether your specification is clear, hand it to someone and ask them to implement it without asking you a question. Every question they need to ask is a defect.</p>
<p>The pigeon RFC would pass that test. Most of what I have written would not.</p>
<h2 id="the-tradition">the tradition<a class="anchor" href="#the-tradition" aria-label="link to this section">#</a></h2>
<p>It continues, annually, and it is one of the better things about a standards organization that could easily have become entirely humorless.</p>
<p>An institution that can laugh at its own form is one that understands the form is a tool rather than a ritual. That is worth more than it sounds.</p>]]></content:encoded></item><item><title>GDC and the engineering nobody outside games learns from</title><link>https://readme.news/gdc-and-the-engineering-nobody-outside-games-learns-from/</link><guid isPermaLink="true">https://readme.news/gdc-and-the-engineering-nobody-outside-games-learns-from/</guid><pubDate>Wed, 04 Mar 2026 09:00:00 +0000</pubDate><description>Frame budgets, determinism, and shipping to a fixed target. Game developers solved problems the rest of us are still arguing about.</description><content:encoded><![CDATA[<p>The Game Developers Conference is running this week, and as usual the technical talks contain more transferable engineering than most software conferences, delivered to an audience that mostly does not overlap with the people who would benefit.</p>
<p>Here is what the rest of us should be stealing.</p>
<h2 id="the-frame-budget">the frame budget<a class="anchor" href="#the-frame-budget" aria-label="link to this section">#</a></h2>
<p>A game running at 60 frames per second has 16.6 milliseconds to do everything: input, simulation, physics, animation, culling, draw call submission, audio, and whatever the game is actually about.</p>
<p>Not on average. Every frame. A frame that takes 20 ms is a visible stutter, and players notice a single dropped frame.</p>
<p>That constraint produces a discipline the rest of software largely lacks:</p>
<p><strong>Budgets are allocated per subsystem, in advance.</strong> Physics gets 3 ms. AI gets 2 ms. If a system exceeds its budget, that is a bug with an owner, not a "performance improvement opportunity for next quarter."</p>
<p>Compare to how most web services handle latency: an aspirational p99 target, no per-component budget, and no mechanism that fails when a component regresses.</p>
<p>Steal this. Give each layer of your request path a latency budget. Assert on it in tests. A change that pushes the database layer from 20 ms to 40 ms should fail CI, not show up on a <a class="xref" href="/the-dashboard-nobody-looks-at/" title="The dashboard nobody looks at">dashboard</a> a month later.</p>
<p><strong>Worst case matters more than average.</strong> Nobody in games optimizes mean frame time. They optimize the 99.9th percentile, because that is what the player experiences as jank.</p>
<p>The web equivalent is obvious and widely ignored.</p>
<h2 id="determinism-as-a-feature">determinism as a feature<a class="anchor" href="#determinism-as-a-feature" aria-label="link to this section">#</a></h2>
<p>Multiplayer games with lockstep networking require that the same inputs produce bit-identical outputs on every machine. That is a much stronger constraint than "correct," and achieving it teaches you where nondeterminism actually hides:</p>
<ul><li>Floating point differences across compilers and architectures.</li><li>Iteration order over hash containers.</li><li>Time-based logic.</li><li>Uninitialized memory.</li><li>Anything threaded without a strict ordering.</li></ul>
<p>Every one of those is a source of flaky tests and unreproducible bugs in ordinary software, and most engineers have never had to hunt them systematically.</p>
<p>If your test suite is flaky, the game industry solved that problem decades ago and the answer is: make the system deterministic, then the flakiness is a bug you can find.</p>
<h2 id="data-oriented-design">data-oriented design<a class="anchor" href="#data-oriented-design" aria-label="link to this section">#</a></h2>
<p>The insight: modern CPUs are enormously fast and memory is enormously slow, so performance is dominated by cache behavior rather than instruction count.</p>
<p>Which means the layout of your data matters more than the cleverness of your algorithm, at least until the constant factors stop dominating.</p>
<p>Arrays of structs versus structs of arrays. Contiguous memory over pointer chasing. Processing in batches over per-object virtual dispatch.</p>
<p>This applies directly to any data-processing code and most developers have never been taught to think about it. If you have a hot loop over a collection of objects and it is slower than it should be, the layout is usually why.</p>
<h2 id="shipping-to-a-fixed-target">shipping to a fixed target<a class="anchor" href="#shipping-to-a-fixed-target" aria-label="link to this section">#</a></h2>
<p>Console games ship to hardware that does not change for seven years. You cannot tell the player to buy more RAM. You cannot autoscale.</p>
<p>That produces genuine engineering rather than procurement: measure, budget, optimize, cut scope, ship.</p>
<p>There is a lesson here for cloud-native development, where "we will scale it" has become a substitute for making things efficient. The teams that treat their resource envelope as fixed produce dramatically more efficient systems, and the constraint is a gift.</p>
<h2 id="the-thing-games-do-worse">the thing games do worse<a class="anchor" href="#the-thing-games-do-worse" aria-label="link to this section">#</a></h2>
<p>To be fair: game codebases are frequently a mess, crunch culture is a genuine industry problem, testing practices are often weaker than in other software, and "ship it and patch it" has become normalized in a way that undermines a lot of the above.</p>
<p>Take the engineering discipline. Do not take the working conditions.</p>
<h2 id="the-talks-to-look-for">the talks to look for<a class="anchor" href="#the-talks-to-look-for" aria-label="link to this section">#</a></h2>
<p>The technical postmortems are the good ones — a team explaining what went wrong in a shipped product, in detail, publicly. The industry has a stronger culture of this than almost any other software domain, and the material is excellent regardless of whether you care about games.</p>]]></content:encoded></item><item><title>Advent of Code and what a puzzle is for</title><link>https://readme.news/advent-of-code-and-what-a-puzzle-is-for/</link><guid isPermaLink="true">https://readme.news/advent-of-code-and-what-a-puzzle-is-for/</guid><pubDate>Fri, 05 Dec 2025 09:00:00 +0000</pubDate><description>The leaderboard broke years ago. The value was never the leaderboard.</description><content:encoded><![CDATA[<p>Advent of Code is running again, and so is the annual argument about AI solutions and the global leaderboard.</p>
<p>The argument is settled in practice: models solve most early puzzles in seconds, the global leaderboard is not a meaningful competition anymore, and Eric Wastl has asked people not to use AI for leaderboard attempts. Some people ignore that.</p>
<p>I think the argument is also beside the point, and I want to make the case for what these puzzles are actually good for.</p>
<h2 id="what-the-leaderboard-was-ever-worth">what the leaderboard was ever worth<a class="anchor" href="#what-the-leaderboard-was-ever-worth" aria-label="link to this section">#</a></h2>
<p>The global top 100 was always a competition between a small number of extremely fast competitive programmers, most of whom had done thousands of hours of practice specifically for this. For everyone else it was scenery.</p>
<p>If your enjoyment depended on that leaderboard, it was already not for you before any model existed.</p>
<h2 id="what-the-puzzles-are-good-for">what the puzzles are good for<a class="anchor" href="#what-the-puzzles-are-good-for" aria-label="link to this section">#</a></h2>
<p><strong>Practicing a language you do not know.</strong> This is the best use and it is what I do every year. Twenty-five bounded problems with clear specifications and verifiable answers is an excellent scaffold for learning a language's idioms. You are not fighting the problem, so you can concentrate on the tool.</p>
<p>Do it in something uncomfortable. Rust if you write Python. A Lisp if you write Java. Uiua or J if you want to genuinely reconsider what a loop is.</p>
<p><strong>Finding the gap between working and good.</strong> Almost every puzzle has a naive solution that works for part one and does not terminate for part two. That gap — where you have to actually think about the algorithm rather than just express the problem — is where the learning is.</p>
<p>That is also the part models are least reliably good at, incidentally. They will write the naive version confidently.</p>
<p><strong>Reading other people's solutions.</strong> The subreddit's solution megathreads are one of the better learning resources in programming. Twenty implementations of the same problem in different languages by people of different skill levels, all solving something you just spent an hour on, so you have full context.</p>
<p>You will learn more from reading five solutions after solving it than from solving three more puzzles.</p>
<p><strong>A shared thing.</strong> For a few weeks in December a lot of programmers are all thinking about the same problem on the same day. That is a rarer thing than it used to be and it is worth something.</p>
<h2 id="on-using-a-model">on using a model<a class="anchor" href="#on-using-a-model" aria-label="link to this section">#</a></h2>
<p>I do not think there is a moral question here for anything except the leaderboard, where the request is explicit and honoring it is basic decency.</p>
<p>For everything else: it is your time and your learning. If you use a model to solve everything instantly, you will finish faster and learn nothing, which is a trade you are allowed to make and which defeats the entire point of doing a programming puzzle for fun.</p>
<p>The interesting middle ground, which I recommend: solve it yourself, then ask a model to critique your solution. "What is the time complexity? What would break at larger inputs? Is there a standard algorithm for this I should know?"</p>
<p>That is a genuinely good use. You get the learning from solving it and you get the thing you did not know from the critique. It is closer to having a knowledgeable colleague than to having someone do your homework.</p>
<h2 id="the-thing-that-actually-bothers-me">the thing that actually bothers me<a class="anchor" href="#the-thing-that-actually-bothers-me" aria-label="link to this section">#</a></h2>
<p>Not the puzzles. The people who have decided that because a model can do the easy version of something, learning to do it is pointless.</p>
<p>That reasoning has been available for every tool ever built and it has been wrong every time. Calculators did not make arithmetic understanding useless. Compilers did not make understanding what the machine does useless. IDEs did not make knowing the language useless.</p>
<p>The understanding is what lets you tell when the tool is wrong. That has never been more valuable than it is now, when the tool is wrong fluently.</p>
<p>Go do the puzzles. In a language you do not know. Slowly.</p>]]></content:encoded></item><item><title>Stack Overflow's traffic fell off a cliff and it is not coming back</title><link>https://readme.news/stack-overflows-traffic-fell-off-a-cliff-and-it-is-not-coming-back/</link><guid isPermaLink="true">https://readme.news/stack-overflows-traffic-fell-off-a-cliff-and-it-is-not-coming-back/</guid><pubDate>Fri, 02 May 2025 09:00:00 +0000</pubDate><description>Question volume down roughly three quarters from peak. The knowledge commons has a serious problem.</description><content:encoded><![CDATA[<p>The public data dumps tell a clear story. Stack Overflow's monthly question volume has fallen to a small fraction of its 2014 peak, with the steepest part of the decline starting in late 2022 and continuing without a floor in sight.</p>
<p>The proximate cause is obvious. The consequence is not, and it is worse than the obvious version.</p>
<h2 id="the-obvious-part">the obvious part<a class="anchor" href="#the-obvious-part" aria-label="link to this section">#</a></h2>
<p>If you have a question about a <code>TypeError</code>, you ask a model. It answers in three seconds, in context, without telling you the question is a duplicate, without closing it as opinion-based, and without a comment from someone explaining that you should not want to do the thing you are doing.</p>
<p>That is a better product for the asker. It is not close.</p>
<p>The cultural failures are real and much-discussed — the moderation tone, the duplicate-hammer, the hostility to beginners — and they made the site fragile. But a site with perfect culture would still have lost this. The interaction model is simply better.</p>
<h2 id="the-part-that-should-worry-you">the part that should worry you<a class="anchor" href="#the-part-that-should-worry-you" aria-label="link to this section">#</a></h2>
<p>Stack Overflow's answers are a large fraction of the training data that makes models good at answering programming questions.</p>
<p>Follow that through. The models learned from a corpus that humans produced under a set of incentives — reputation, peer review, the specific dopamine of being right in public — and those incentives have now been substantially removed. New questions are not being asked. New answers are not being written. The corpus is frozen at roughly 2023 plus a thin tail.</p>
<p>Which means: for any technology released after that point, the model's knowledge comes from documentation, release notes, GitHub issues, and blog posts, rather than from thousands of people working through real problems in public and having their answers corrected by peers.</p>
<p>You can already feel this. Ask a model about a library that came out last year and the answer has a different texture — more confident, less battle-tested, more likely to be a plausible synthesis of the README than a real solution to a real problem someone actually hit.</p>
<h2 id="where-the-knowledge-goes-now">where the knowledge goes now<a class="anchor" href="#where-the-knowledge-goes-now" aria-label="link to this section">#</a></h2>
<p>It does not disappear. It moves to places that are worse for everyone:</p>
<ul><li><strong>Discord servers</strong>, which are unindexed, unsearchable from outside, and effectively write-only. A brilliant debugging session in a Discord thread helps four people and then is gone.</li><li><strong>GitHub issues</strong>, which are better — indexed, searchable, versioned — but scoped to a single project and rarely capture the cross-cutting "how do these two things interact" knowledge that Stack Overflow was uniquely good at.</li><li><strong>Private model conversations</strong>, which help exactly one person and produce no artifact at all.</li></ul>
<p>That last one is the real loss. Every debugging session that used to end in a public answer now ends in a chat log that nobody else will ever see.</p>
<h2 id="is-there-a-fix">is there a fix<a class="anchor" href="#is-there-a-fix" aria-label="link to this section">#</a></h2>
<p>I do not think there is a clean one, but a few things help.</p>
<p><strong>Write it down publicly.</strong> If you spent four hours on something, the blog post takes twenty minutes and it is the highest-leverage twenty minutes available to you. It helps the next person and it goes into the corpus.</p>
<p><strong>Answer in issues, not chat.</strong> When someone asks in Discord, answer in Discord and then put it in a GitHub discussion. Same effort, permanent artifact.</p>
<p><strong>Maintainers: write the <a class="xref" href="/boring-technology-revisited/" title="Boring technology, revisited">failure modes</a> into your docs.</strong> The reason Stack Overflow existed is that documentation describes the happy path. A "common errors" page in your docs absorbs an enormous amount of what used to be questions.</p>
<h2 id="the-honest-conclusion">the honest conclusion<a class="anchor" href="#the-honest-conclusion" aria-label="link to this section">#</a></h2>
<p>We are consuming a commons that was built by a specific social arrangement, and that arrangement has stopped producing. The models are good because a decade of people answered each other's questions for internet points, and we have replaced the mechanism that generated that with one that generates nothing.</p>
<p>That is not a reason to go back. It is a reason to be deliberate about what replaces it, and right now nobody is being deliberate about it at all.</p>]]></content:encoded></item><item><title>Everything is Ghibli now</title><link>https://readme.news/everything-is-ghibli-now/</link><guid isPermaLink="true">https://readme.news/everything-is-ghibli-now/</guid><pubDate>Mon, 31 Mar 2025 09:00:00 +0000</pubDate><description>Native image generation in a chat model produced a two-week global aesthetic event and a copyright question nobody wants to answer.</description><content:encoded><![CDATA[<p>OpenAI shipped native image generation in GPT-4o this week and within seventy-two hours a substantial fraction of the internet's profile pictures looked like a Studio Ghibli production cel.</p>
<p>The technical achievement is real and got buried under the meme, which is a shame, because the technical achievement is the interesting part.</p>
<h2 id="what-is-actually-different">what is actually different<a class="anchor" href="#what-is-actually-different" aria-label="link to this section">#</a></h2>
<p>Previous image generation from a chat <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a> was a handoff: the model wrote a prompt, a separate diffusion model rendered it, and the chat model never saw the result in any meaningful sense. You could not say "same picture but move the cat" because there was no shared representation.</p>
<p>Native generation means the same model produces the image tokens. That gives you:</p>
<ul><li><strong>Real editing.</strong> "Make the sign say something else" works, because the model understands the scene it produced.</li><li><strong>Text that renders correctly.</strong> This has been the single most obvious tell of AI images for three years, and it is largely fixed. Infographics, diagrams, menus, and UI mockups now come out legible.</li><li><strong>Instruction following at a level diffusion models never had.</strong> Ten objects with specified positions and colors. Diffusion models fall apart around four.</li></ul>
<p>For developers specifically, the practical unlock is diagrams and mockups. "Draw me an architecture diagram with these six services and these arrows, in a clean technical style" now produces something you can actually put in a document.</p>
<h2 id="the-part-everyone-is-arguing-about">the part everyone is arguing about<a class="anchor" href="#the-part-everyone-is-arguing-about" aria-label="link to this section">#</a></h2>
<p>Studio Ghibli did not consent to this and Hayao Miyazaki has been publicly, memorably contemptuous of AI-generated animation for years.</p>
<p>The legal position is genuinely unsettled. Copyright does not protect style — you cannot own "watercolor backgrounds and round faces" — which is why the outputs are probably not infringing on their face. Whether <em>training</em> on the works to acquire the style is infringement is the actual contested question, and it is being litigated in several jurisdictions simultaneously with no consistent answer yet.</p>
<p>The ethical position is less unsettled and more uncomfortable. A studio spent four decades developing a visual language through enormous manual labor — Miyazaki's teams famously hand-drew crowd scenes frame by frame — and that language is now a free preset. Whatever the courts decide, something was taken that was not offered.</p>
<p>I do not think "it is legal" resolves that, and I do not think "it is theft" resolves it either. It is a genuinely new situation and the reflex to force it into an existing category is making the conversation worse.</p>
<h2 id="the-practical-guidance">the practical guidance<a class="anchor" href="#the-practical-guidance" aria-label="link to this section">#</a></h2>
<p>If you are shipping a product that generates images:</p>
<ul><li>Do not name living artists or active studios in prompts you send on behalf of users, and filter for it. The legal risk is unquantified and the reputational risk is not.</li><li>Understand your provider's indemnification terms. They vary a lot and most people have not read them.</li><li>Provenance metadata (C2PA) costs you nothing to include and will matter more every year.</li></ul>
<h2 id="the-thing-that-will-actually-change">the thing that will actually change<a class="anchor" href="#the-thing-that-will-actually-change" aria-label="link to this section">#</a></h2>
<p>Stock photography as a business is finished, and has been finishing for a while. So is a large chunk of low-end commercial illustration — the spot art, the blog headers, the marketing filler.</p>
<p>What is not finished is illustration where the <em>point</em> is that a specific person made it. Miyazaki's films are not valuable because they look like that. They look like that because of what they are.</p>
<p>The model can produce the surface. It has nothing to say.</p>]]></content:encoded></item>
</channel>
</rss>
