← All posts Source on GitHub jacob@stephens.page
Notes · Languages · Interactive

From Machine Code to AI: the Same Hello World

August 1, 2026 · ~1,650 words · 8 abstraction bands · 24 runnable variants · reading this as an AI agent? agents.md is for you

The interesting part is not that each layer can print Hello, World! - it is how the source is written at that layer, and what the layer hides. Scan one signature language from each band in a single row (Fig. 1), then zoom any pair in the compare panel (Fig. 2). Running is optional verification on this host (Linux x86_64), not the main event. Source panels use highlight.js 11.11.1 (same family as The Animation Is a Replay).

I have been learning ARM64 Assembly on an Apple Silicon Mac in a private teach-skill workspace. This public ladder walks the same idea from absolute machine words (and a period-style sum job) through early high-level languages (FORTRAN, Lisp, COBOL), systems and managed languages, scripting, and AI Engineering (tight contract vs casual vibe). Within a multi-language band, use the side-by-side arrows or the keyboard after you focus a rung. Assembly here is x86_64 Linux GAS, not the macOS ARM64 dialect from the private course.

Checking runner…

What each level hides (and when it showed up)

Robert C. Martin (Uncle Bob) has long treated programming history as a climb through successive languages and tools - machine code, assembly, high-level languages, and whatever comes next - and has argued in parallel that professionalism and craft still matter no matter how high the stack gets. That historical ladder is the spine of his 2016 talk The Future of Programming; the craft claim is the throughline of The Clean Coder (2011) and the software-craftsmanship talks that followed. A more recent long-form framing is his conversation with Kent Dodds (2025). The sentence above is a paraphrase of those themes, not a single slogan he trademarked. Bands on this page are ordered by abstraction, not pure release-year purity (Lisp is older than C; Java sits between C and Go). Years on each variant are introduction years, not "first Hello World ever printed."

Before FORTRAN and COBOL, people still wrote real programs - just not in those languages, and not by authoring an ELF file. Jobs were numerical tables, ballistics, census-style tabulation, payroll, and short loops (load / add / store / branch). Two different things are easy to conflate:

That is why the earliest carousel is not a fake 1945 greeting. The absolute band offers a minimal Hello via raw syscalls only so the ladder has a continuous thread, and next to it a more honest period job: sum 1..10 and print SUM=55. The sum is not filler; it is the historically better artifact for that band. ELF is only a packaging footnote - the OS shipping crate, not the handwritten invoice. We cannot put a 1949 console in your browser; Run still executes a real Linux binary - we do not make you toggle twenty-three switches.

Fig. 0 · IBM-style punch card (80 columns)
Blue IBM-style 80-column punch card with rectangular holes and printed characters along the top edge
A classic blue 80-column punch card - source and data decks lived on paper like this, one character per column, holes for the encoding. The Machine code band's Punch cards (sim) slide is a teaching sheet for that form, not a live card reader. Photo: public domain (Wikimedia Commons; original by Gwern, horizontal crop by ArnoldReinhold). Source on Wikimedia Commons.
Fig. 1 · One signature language per level

Desktop width puts every band in one row so you can see how the same job is written as you climb the stack. Click a card to load it into the left pane of Fig. 2 and jump to that band.

Signatures: absolute words · hand-entered hex · Assembly · FORTRAN · C · Rust · Python · AI Engineering tight contract (vibe peer is on the same L7 carousel). Other peers stay in the ladder carousels below.
Fig. 2 · Compare any two side by side

Pick any two variants. The source shape is the lesson - how much of the machine is still visible, what is named, what is hidden. Run buttons on the ladder below are optional checks that the allowlisted host program still works.

Defaults: C (the hinge) next to Python (the high-level default). Change either side to any band variant - absolute words, FORTRAN, COBOL, Rust, AI prompt, and the rest. Sources load from the allowlisted programs/ files (or the absolute/tabulate/ELF views from the API).

Fig. 3 · Eight bands - read the source, optionally run

Each band shows source first. Open Run on this host only if you want a live check: Run once (×1) or Run Program (×10) posts to /blog/from-machine-code-to-ai-the-same-hello-world/api/run/{language}?samples=N. Multi-language bands: ‹ › sit together; after you click a rung, arrow keys move within that band. Full sources: programs/ · runner server/app.py · page index.html.

Loading host hardware…

Fig. 3b · Full ladder benchmark (optional)

Runs every language N times on this host, then builds a table of average runtimes and stdout. Use 10 for a quick compare; 100 is slower (interpreters and JVMs pay cold-start costs on each process spawn). These are wall-clock times on a shared droplet - not microbenchmarks in a quiet lab.

Fig. 4 · How the runner stays boring
  • Allowlisted language ids only (machine, assembly, c, …).
  • No user-supplied source, argv, or env from the browser.
  • Build once into cache/, then execute with a hard timeout.
  • systemd: loopback bind, NoNewPrivileges, PrivateTmp, memory cap.
  • Per-IP rate limit on the API.
If a demo needs to be interesting, the security story should stay dull. Arbitrary-code paste boxes do not belong on a public blog host.

What you should notice when you read the sources

Quiz · don't leave until one answer sticks

When you click Run Program, what does the browser send to the server?

What's still open

The private ARM64 teach path and this public x86_64 ladder are deliberately different ISAs - good for honesty, awkward for copy-paste between Mac and server. A dual-target Assembly pair (Apple Silicon vs Linux amd64) would make the platform gap visceral. AI and vibe rungs call GPT-5.6 Luna with per-request cost reporting, a cumulative ledger, and an email if spend exceeds $5. highlight.js is loaded modularly from esm.sh - if that CDN is blocked, sources stay readable as plain text.

Sources

Ideas and authorities

  • Robert C. Martin, The Future of Programming (talk, 2016) - walks programming history as successive languages/tools from machine code upward and asks what the next layer will be. Recording commonly cited: youtube.com/watch?v=ecIWPzGEbFc.
  • Robert C. Martin, The Clean Coder: A Code of Conduct for Professional Programmers (Prentice Hall, 2011) - craft and professional discipline as independent of language fashion; the "craft still matters at every step" half of the paraphrase in the timeline section.
  • Robert C. Martin with Kent Dodds, Architecture, AI agents, and product empathy (YouTube, 2025) - recent long-form conversation that revisits architecture, agents, and long-view software practice. youtube.com/watch?v=RxxxGkFIUJ0.
  • Andrej Karpathy on "vibe coding" (2025) - the casual chat-driven coding style contrasted here with tighter AI engineering prompts. x.com/karpathy
  • Hello, World! convention (layered origin) - capability to print text strings exists from stored-program / teletype machines (late 1940s); greeting-style demos appear around BCPL (Martin Richards, ~1967); Brian Kernighan's 1972 B tutorial is the oldest surviving well-dated written form; Kernighan & Ritchie, The C Programming Language (1978 / 2nd ed. 1988) popularized the convention. Overviews: Wikipedia: Hello, world, HackerRank: History of Hello, World.
  • Brian Kernighan, A Tutorial Introduction to the Language B (1972) - earliest surviving, precisely dated hello, world source (four putchar calls). Popularization via K&R C came later.
  • John Backus et al., FORTRAN (1957) - early high-level formula translation. Overview: Wikipedia: Fortran.
  • John McCarthy, Lisp (1958) - list processing / symbolic computation. Wikipedia: Lisp.
  • Niklaus Wirth, Pascal (1970) - structured programming; namesake of PascalCase. Wikipedia: Pascal.
  • CODASYL, COBOL (1959) - business-oriented high-level language. Wikipedia: COBOL.
  • ENIAC / stored-program transition - plugboards and absolute machine programming before symbolic assemblers. Wikipedia: ENIAC, Stored-program computer.
  • IBM-style punched card (Fig. 0) - public-domain photo of an 80-column card (EBCDIC character set punched). Wikimedia Commons: Blue-punch-card-front-horiz.png · Wikipedia: Punched card.
  • EDSAC and early assembly - symbolic instruction entry in the late 1940s. Wikipedia: EDSAC, Assembly language.
  • Arm Architecture Reference Manual (A-profile) - instruction encodings (this page's live dumps are Linux amd64 via objdump). developer.arm.com
  • Procedure Call Standard for the Arm 64-bit Architecture (AAPCS64) - calling conventions for AArch64 (relevant to the private Apple Silicon track). github.com/ARM-software/abi-aa

Tools demonstrated or referenced

  • gcc / g++ / gfortran / cobc / sbcl / javac / rustc / go / lean / mcs+mono / bash / perl / php / CPython / Node - toolchains on the stephens.page host for allowlisted Hello Worlds.
  • Lean - theorem prover and functional language (Lean 4 on this host). lean-lang.org
  • GnuCOBOL - free COBOL compiler used for the COBOL variant. gnucobol.sourceforge.io
  • SBCL - Steel Bank Common Lisp for the Lisp variant. sbcl.org
  • HelloSilicon - Apple Silicon assembly examples (contrast with this page's Linux x86_64 GAS). github.com/below/HelloSilicon
  • Writing ARM64 code for Apple platforms - Apple ABI notes for the private Mac track. developer.apple.com
  • highlight.js 11.11.1 - browser syntax highlighting for ladder source panels (esm.sh modular load). highlightjs.org
  • FastAPI + uvicorn - loopback runner at port 3521; GET /levels groups variants for carousels. fastapi.tiangolo.com
  • The Animation Is a Replay - sibling stephens.page post that pioneered real server runners + highlight.js on this blog. stephens.page
  • Source for this post - post tree · programs/ · server/app.py · index.html
Drafted from the private learn-assembly teach-skill workspace (including its early high-level timeline note) and this site's interactive-post pattern (the-animation-is-a-replay server, Apache proxy, highlight.js). Run Program hits allowlisted builds on Linux x86_64 for metal through scripting; AI engineering and vibe coding call live gpt-5.6-luna (reasoning effort low); spend is tallied and shown on each response. Multi-language bands use click-only carousels. The decisions, the hosting, and the words are mine; the technical collaborator for scaffolding was Grok.

For AI agents: the machine-oriented version is at agents.md, with directives, the allowlist contract, verified endpoints, an operational checklist, and a self-test.

Run times
Mean wall-clock ms (server, default n=10). Sticky; sorted fastest first.
  1. Run a program to start the tally.