{"slug": "making", "title": "Making", "summary": "Brian \"Beej Jorgensen\" Hall, a Gen-X hacker and CS instructor at Oregon State University-Cascades, argues that using generative AI to build things at one's request does not provide the same fulfillment as making things by hand, citing his own experiences with coding, woodworking, and art. Hall, who uses Claude Code sometimes but also codes by hand, expresses concern that the \"AI dev schism\" may diminish the personal satisfaction derived from the craft of creation.", "body_md": "2026-03-12\n\n# On Making\n\nI made this!\n\n*TLDR: I gain a lot of fulfillment by making things. I don't consider\nthings built by others at my request to be made by me, and are therefore\nmuch less fulfilling. And then I feel sad. This article starts strong\nand then heads off into the weeds.*\n\nThere have been a lot of pieces written about what I'll call \"the AI dev schism\" And I think there's a lot of truth to those:\n\n- Loss of the craft, coding things by hand\n- Loss of low-level problem-solving\n- Loss of fun\n- Gain of high-level problem-solving\n- Getting through back-burnered projects\n- Gain of fun\n\nWe'll just grant those as being correct for various developers. But there's something else that troubles me.\n\nBackstory before we get going, so you can get a better idea of my perspective:\n\n- I'm a Gen-X hacker; I cut my teeth 80s microcomputer era.\n- I hold a BS and MS in CS.\n- I have 20 years industry experience, (Hewlett-Packard, startups, cofounder, Activision, etc.).\n- CS instructor for the last 9 years, now at Oregon State University-Cascades.\n- I'm 65% Doom on the AI-Utopia/Doom scale.\n- I'm a Claude Code user sometimes.\n- I code by hand sometimes.\n- My father taught philosophy at a community college for 35 years. This might help explain the latter part of this blog entry.\n\nI'm going to use \"AI\" to mean \"Generative AI and LLMs\" in this essay. Sorry, veterans of so many AI winters.\n\n## Interlude!\n\nBefore we begin, I'd like to share with you a bit of my latest sci-fi\nnovel. Some of you might unaware that, in addition to [ Beej's\nGuides](https://beej.us/guide/), I also write science fiction.\n\nKael pressed his back against the shattered bulkhead, plasma scoring the air centimeters from his face. The Vorrkai assault drones had anticipated their route through the lower decks and now Rin was bleeding through her jacket sleeve and old Maret couldn't stop coughing from the vented coolant still hazing the corridor. Kael counted the pulse-intervals between shots. Three seconds. Maybe four. That was all the universe was offering him.\n\nThen he saw it: the maintenance shaft behind the collapsed generator housing, its grate blown half-open by the same explosion that had caved in their original exit. It was tight. It was ugly. It ran directly over the Vorrkai's forward position, which was either the most dangerous path imaginable or the last one they'd ever think to watch. Kael grabbed Maret's collar and pointed without a word. The old man's eyes went wide, then hard. He nodded. Rin was already moving.\n\nKael came last, returning fire blind around the bulkhead corner, not to hit anything, just to make noise, and to give the drones something thermal to track while his people scrambled into the dark. A bolt caught the generator housing and the whole structure groaned, raining sparks down into the shaft on top of them. He hauled himself in, knees burning on the torn metal, and pulled the grate closed behind him with a sound he was certain every Vorrkai unit on the deck had heard. In the black ahead, Rin's hand found his wrist. Move, her grip said. Now. And so they did.\n\n—Excerpt from\n\nThe Vorrkai Interval, by Brian \"Beej Jorgensen\" Hall\n\nAnd, in my now-copious spare time I make art! This is a woodcut, painted in pastels, showing some of my favorite subjects.\n\n*Mirrors of the Machine* by\nBrian \"Beej Jorgensen\" Hall, $1300.\n\nCarpentry? You bet I dabble! I rebuilt my front deck recently. The old one was rotting out, so I grabbed a bunch of cedar and put it together. I'd been meaning to do it for a while, but couldn't find the time.\n\nAnd, finally, here's some of the code I wrote for a TUI adventure roguelike:\n\n``` js\n    fn try_move(&mut self, dx: i32, dy: i32) {\n        let nx = self.player.x + dx;\n        let ny = self.player.y + dy;\n\n        // Check for monster combat\n        if let Some(idx) = self.world.monster_at(nx, ny) {\n            let result = {\n                let monster = &mut self.world.monsters[idx];\n                resolve_combat(&mut self.player, monster, &mut self.rng)\n            };\n\n            self.messages.push_many(result.messages);\n\n            if result.monster_defeated {\n                let monster = &self.world.monsters[idx];\n                let xp = monster.xp_reward;\n                let gold = monster.gold_reward;\n                self.player.xp += xp;\n                self.player.gold += gold;\n                if gold > 0 {\n                    self.messages.push(format!(\"You find {} gold!\", gold));\n                }\n                if self.player.try_level_up() {\n                    self.messages.push(format!(\n                        \"Level up! You are now level {}!\",\n                        self.player.level\n                    ));\n                }\n            }\n\n            if !self.player.is_alive() {\n                self.messages.push(\"You have been slain! Rest in peace...\");\n            }\n\n            self.advance_turn();\n            return;\n        }\n\n        // Check terrain passability\n        if self.world.is_passable(nx, ny) {\n            self.player.x = nx;\n            self.player.y = ny;\n            self.advance_turn();\n        } else {\n            let terrain = self.world.terrain_at(nx, ny);\n            self.messages.push(format!(\"The {} blocks your path.\", terrain.name()));\n        }\n    }\n```\n\nI'm an extremely prolific polymath, I'm sure you'd agree!\n\n## I Am Uncomfortable\n\nI don't like lying. And yet I feel, dear reader, I have misled you. Yes,\nall that has been created (including my deck) and I was the initiator of\nall that creation. But I don't really feel like *I made* any of it. I'm\nuncomfortable claiming that I did so.\n\nSince you are certainly aware by now that all of the above is AI-generated (except my deck, which was created by skilled, paid craftsmen), perhaps you feel a little bit of discomfort with me claiming credit for doing those things, too.\n\nHowever, I don't think everyone feels this way. I know many people who ask contractors to build things and they phrase it like they built it.\n\n\"I put in a new front deck,\" they'd say, even though other people did all the work. Personally, I feel that's misleading. I'm more of a \"I had a new front deck put in\" kind of person.\n\nAnd when I do have Claude create something for me, I just *can't* say\nthat I made it. Other people can, but I just can't. Again, I'm more\nprone to say, \"I had this code built for me.\" I don't even feel\ncomfortable MIT-licensing that (not-for-hire) work, if that's even\nlegally possible. I just [Unlicense](https://unlicense.org/) it all.\n\nAs a manager, I'd never say that I built a product. \"My team built this,\" I'd say. And as a manager of LLMs: \"My Agents built this.\"\n\nAnd that, for me, has very little weight in terms of *making*.\n\n* I don't feel like I did anything.* And I like doing things. I find\npride in doing things.\n\nCompleting projects is great. I love completing projects. Capitalists love completing projects. Real artists ship.\n\nBut having others complete projects I initiated is entirely less fulfilling to me.\n\nIt's not just the loss of the craft and the problem-solving challenge\nand whatever else. It's the loss of *making*.\n\n## What Did I Make Recently?\n\nMy wife wanted a no-frills flash card system for learning Spanish. \"I just want a thing where I can put the words I want in a spreadsheet and then see it on flash cards.\" A prompt!\n\nSo I wrote it. By hand. I did use Claude to learn some basics, like the easiest way to get the data out of a Google Sheet (spoiler: it's the CSV endpoint), but I told it to generate no code.\n\n```\n--------------------------------------------\nLanguage                     files      code\n--------------------------------------------\nJavaScript                       2       112\nCSS                              1        33\nHTML                             1        32\n--------------------------------------------\nSUM:                             4       177\n--------------------------------------------\n```\n\nDidn't take long. Only about 50x longer than it would have taken Claude to do it.\n\nBut I can put my name on that code and say that I made it. Was it a lot of code? No. Was it groundbreaking and amazing? Certainly not. But I'm infinitely more proud of that code than anything I've had Claude write, because I'm not capable of being proud of the latter.\n\nAnd my wife wouldn't go to her book club and say, \"I wrote a flash card system to study Spanish.\" Admittedly, part of this would be because she didn't want to appear a geek, but mostly it's because it's untrue, even though she initiated the process.\n\n## What About The Art and Craft of Prompting?\n\nAfter all, you create the prompts, don't you? You said you were proud of doing things. Isn't that doing a thing? And since so much got done, isn't it even more of doing a thing?\n\nI don't disagree. And I do agree that there is skill here in some important ways.\n\n- You have to apply vision.\n- You have to apply judgment.\n- You have to apply communication skill.\n- You have to apply prompting skill.\n\nNot all prompts are equally effective. Not all users of AI are as effective as one another. There's a very human contribution to be made here.\n\nBut the skill is in effectively asking someone to make something for you.\n\n\"Leadership is the art of getting someone else to do something you want done because he wants to do it.\"—Dwight D. Eisenhower\n\nAnd I'm the kind of person who really misses the *making* of software.\nAnd prompting for software, to me, isn't the same as making the\nsoftware. It's the same as asking someone else to make it.\n\n## What About Compilers, Smartypants?\n\nIsn't it just turtles all the way down?\n\nFor any given C or Rust program, did I write that program? I wrote it in C. I didn't write any machine code. The computer wrote that.\n\nThere's something different in my mind about that. I'm not sure if it's\nthe mathematically-precise relationship between the C and the machine\ncode...? And yet that's not spelled out. I'm relying on some hacker's\ndeep knowledge of the CPU to generate that magnificent set of optimized\ninstructions when I stupidly divide something by *seven*. And it's not\ndeterministic, strictly, in that Clang and GCC emit different\ninstructions. What about different platforms? The C is portable and the\nmachine code is not. Did I write that program that's running on Windows\neven though I personally only ever built it on Linux?\n\nGoing further in the murky gray, what if I instruct an LLM to be a C compiler and emit assembly code for some platform?\n\nLet's try:\n\n```\nConvert this C program into x86_64 assembly for Linux.\n\n#include <stdio.h>\n\nint fib(int n) {\n    if (n <= 1) return n;\n    return fib(n-1) + fib(n-2);\n}\n\nint main(void)\n{\n    for (int i = 0; i < 10; i++)\n        printf(\"%d: %d\\n\", i, fib(i));\n}\n```\n\nClaude says:\n\n```\n# fib.s - Recursive Fibonacci, x86_64 Linux, AT&T syntax\n# Build: gcc fib.s -o fib -no-pie\n\n    .section .rodata\nfmt:\n    .string \"%d: %d\\n\"\n\n    .section .text\n    .globl main\n\n# ┌─────────────────────────────────────────────────────┐\n# │  int fib(int n)          n in: %edi / return: %eax  │\n# │  Stack frame:                                        │\n# │    %rbp-8  = saved %rbx  (via push)                 │\n# │    %rbp-12 = n  (spilled so it survives both calls)  │\n# └─────────────────────────────────────────────────────┘\nfib:\n    pushq   %rbp\n    movq    %rsp, %rbp\n    pushq   %rbx                # callee-saved scratch\n    subq    $8, %rsp            # 1 local (int n); keeps stack 16-byte aligned\n\n    movl    %edi, -12(%rbp)     # spill n to stack\n\n    cmpl    $1, %edi\n    jle     .Lbase              # n <= 1 → return n\n\n    # --- fib(n-1) ---\n    movl    -12(%rbp), %edi\n    subl    $1, %edi\n    call    fib\n    movl    %eax, %ebx          # %ebx = fib(n-1)\n\n    # --- fib(n-2) ---\n    movl    -12(%rbp), %edi     # reload n (call clobbered %edi)\n    subl    $2, %edi\n    call    fib                 # %eax = fib(n-2)\n\n    addl    %ebx, %eax          # return fib(n-1) + fib(n-2)\n    jmp     .Lret\n\n.Lbase:\n    movl    %edi, %eax          # return n\n\n.Lret:\n    addq    $8, %rsp\n    popq    %rbx\n    popq    %rbp\n    ret\n\n# ┌─────────────────────────────────────────────────────┐\n# │  int main(void)                                      │\n# │  Stack frame:                                        │\n# │    %rbp-4  = int i  (loop counter)                  │\n# └─────────────────────────────────────────────────────┘\nmain:\n    pushq   %rbp\n    movq    %rsp, %rbp\n    subq    $16, %rsp           # locals + alignment\n\n    movl    $0, -4(%rbp)        # i = 0\n\n.Lloop:\n    cmpl    $10, -4(%rbp)\n    jge     .Ldone              # i >= 10 → exit\n\n    # fib(i)\n    movl    -4(%rbp), %edi\n    call    fib\n\n    # printf(\"%d: %d\\n\", i, fib(i))\n    movl    -4(%rbp), %esi      # arg2 = i\n    movl    %eax, %edx          # arg3 = fib(i)\n    leaq    fmt(%rip), %rdi     # arg1 = fmt  (RIP-relative)\n    xorl    %eax, %eax          # AL=0: no XMM args to printf\n    call    printf\n\n    addl    $1, -4(%rbp)        # i++\n    jmp     .Lloop\n\n.Ldone:\n    xorl    %eax, %eax          # return 0\n    leave\n    ret\n```\n\nOK, clanker, but does it work?\n\n```\n% gcc fib.s -o fib -no-pie\n% ./fib\n0: 0\n1: 1\n2: 1\n3: 2\n4: 3\n5: 5\n6: 8\n7: 13\n8: 21\n9: 34\n```\n\nWell, holy golden ratios! It even used XOR to set exit status `0`\n\n, the\ncheeky devil!\n\nSo did I write *that* program? Yes. I feel I did. (I actually did\nhand-code the Fibonacci thing just now—I've done it a million times for\nclasses.) I feel I wrote the program even though I didn't write the\nassembly, which is the program that actually runs! The LLM wrote that!\n\nTechnically, it's the machine code that runs, but going from assembly to\nmachine code now we're **really** getting into the land of strict,\nbrainless, mathematically-precise translation, which I feel doesn't take\naway from the act of making any more than using a hammer to drive nails\ndoes.\n\nWhat's the real difference in that gray area? I'm not sure. I think it\nhinges on something that has to do with *making* versus *asking to be\nmade*, even if that line isn't particularly clear.\n\n\"I know it when I see it.\"—US Supreme Court Justice Potter Stewart\n\nThings that I do:\n\n- Write C code and run it.\n- Use a hammer to drive nails.\n- Use an assembler to convert assembly to machine code.\n\nThings that I ask others to do at my command (inspired by a nice capitalistic investment):\n\n- Write a piece of software.\n- Build me a deck.\n- Paint me a picture.\n\nWhen I have ChatGPT create a painting, I don't feel like I painted it.\n\nWhen I use the hammer, I don't feel like I'm asking the hammer to do something for me. Same with a C compiler or assembler.\n\nAnd yet I just had Claude compile some C code right up there. Was that me writing C code and running it? Or was it asking something to write software for me? I have no doubt I could have prompted Claude with an English description of what I wanted and gotten the same output.\n\nIs it because AIs seem human? You are asking them to do things in imprecise, human language. They respond in human ways and do the things you ask. And the relationship we are used to in those circumstances is more one of manager-report than one of colleague and peer. Whereas our relationship with a compiler is more similar to that of one with a hammer.\n\nAnd yet... looking into that gray area makes me feel more confident that\ntelling the AI to make something for me actually *is* an act of\ncreation. What if I had an AI-powered hammer and asked it to hit a nail\nfor me? What's the difference? But at that point, I can't say that I\nhammered it. It is important to me, this difference. Why?\n\nBy now, dear reader, I suspect we're both running out of steam and maybe we should leave it here to ponder.\n\nI feel it's appropriate to conclude with some classic DNA:\n\n\"All I wanted to say,\" bellowed the computer, \"is that my circuits are now irrevocably committed to calculating the answer to the Ultimate Question of Life, the Universe, and Everything.\" He paused and satisfied himself that he now had everyone's attention, before continuing more quietly. \"But the program will take me a little while to run.\"\n\nFook glanced impatiently at his watch.\n\n\"How long?\" he said.\n\n\"Seven and a half million years,\" said Deep Thought.\n\nLunkwill and Fook blinked at each other.\n\n\"Seven and a half million years!\" they cried in chorus.\n\n\"Yes,\" declaimed Deep Thought, \"I said I'd have to think about it, didn't I? And it occurs to me that running a program like this is bound to create an enormous amount of popular publicity for the whole area of philosophy in general. Everyone's going to have their own theories about what answer I'm eventually going to come up with, and who better to capitalize on that media market than you yourselves? So long as you can keep disagreeing with each other violently enough and maligning each other in the popular press, and so long as you have clever agents, you can keep yourselves on the gravy train for life. How does that sound?\"\n\nThe two philosophers gaped at him.\n\n\"Bloody hell,\" said Majikthise, \"now that is what I call thinking. Here, Vroomfondel, why do we never think of things like that?\"\n\n\"Dunno,\" said Vroomfondel in an awed whisper; \"think our brains must be too highly trained, Majikthise.\"\n\n—\n\nThe Hitchhiker's Guide to the Galaxy, Douglas Adams\n\n## My Actual Contributions\n\nAs a post-script, here are my applied skills in the first part of this article.\n\nScience fiction (honestly, the result was so vomitous I feel genuinely embarrassed having signed my name to it):\n\nWrite three paragraphs of sci-fi. Setting: We're in the middle of the novel at one of the pivotal fight sequences. The hero (choose a heroic sci-fi name) is leading two other refugees out under heavy laser fire from the baddies (choose an evil-sounding sci-fi name for this group). Our heroes have just been pinned down, but now see a way out.\n\nWhat's the name of this novel?\n\nPaintings and artwork:\n\nGenerate an image that shows the following: a woodcut, but with pastel coloring. Two wizardly computers hackers, one on the left of the frame and one on the right, facing each other, computers between them, both head down and focused. The left and right sides should be complementary and opposite colors to show that both sides are the same, yet different.\n\nWhat's the name of this painting?\n\nUltima-likes:\n\nI'm thinking of a game like Ultima I, except with a TUI. Visually, I was thinking of a 3x3 grid of characters per map cell. Some of them would be animated, e.g. the water on the ocean cells. And the map on the screen would be 7x7 map cells (or whatever Ultima I had)\n\nIt would be also like Ultima I in that it was fantasy.\n\nThe world should be procedurally-generated maybe with perlin noise. And the monsters should roam randomly, though they will be of prebuilt classes (no need to procedurally-generate monsters on the fly).\n\nThere should be some kind of DnD-ish stats, as well. No classes--just a general player is fine.\n\nI'd like it in Rust using Ratatui. Color.\n\nAnd I'd like the code well structured, with good separation between the UI and the game logic, as well as good code directory layout.\n\nCarpentry:\n\nPlease replace my front deck.\n\nThough I really did drive that nail into that piece of wood. I needed a picture to open with.\n\nUses of em dash within this piece are deliberate. Vim digraph: `^K-M`\n\n.\n\n## Comments\n\n[View Comments](https://mastodon.sdf.org/@beejjorgensen/116217525027764351)\n\n[Reply](https://mastodon.sdf.org/@beejjorgensen/116217525027764351)", "url": "https://wpnews.pro/news/making", "canonical_source": "https://beej.us/blog/data/ai-making/", "published_at": "2026-07-22 15:33:48+00:00", "updated_at": "2026-07-22 16:05:15.834356+00:00", "lang": "en", "topics": ["artificial-intelligence", "generative-ai", "ai-ethics"], "entities": ["Brian \"Beej Jorgensen\" Hall", "Oregon State University-Cascades", "Claude Code", "Hewlett-Packard", "Activision"], "alternates": {"html": "https://wpnews.pro/news/making", "markdown": "https://wpnews.pro/news/making.md", "text": "https://wpnews.pro/news/making.txt", "jsonld": "https://wpnews.pro/news/making.jsonld"}}