From Machine Code to AI: the Same Hello World
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."
- Absolute machine program (c. 1945) - instruction and data words entered into hardware. ENIAC (first run Dec 1945) was plugboards and ~3,000 switches, not a stored-program text file. Carousel: Hello via syscalls for ladder continuity, a sum 1..10 job for period honesty, and a modern ELF packaging note.
- Machine code (c. 1940s) - numeric encodings on front-panel switches, hex/octal, paper tape, or punched cards - without rewiring the whole machine per problem. Carousel: Hand-entered hex and Punch cards (sim) (80-col teaching sheet, not a live reader).
- Assembly (c. 1949) - mnemonics for those encodings. EDSAC (May 1949) and its "initial orders" are the classic early assembler story; its first jobs were tables of numbers, not greetings.
- Early high-level (1957–1959) - FORTRAN, Lisp, COBOL: formulas, lists, business data.
- Systems (1970–1985) - Pascal, C, C++ (PascalCase comes from Pascal).
- Managed / safe systems (1995–2015) - Java, C#, Go, Rust, Lean.
- Scripting / dynamic (1987–1995) - Bash, Perl, Python, PHP, JavaScript.
- AI Engineering (c. 2022–2025) - code behind a model interface; carousel peers are a tight prompt contract and a casual vibe one-liner.
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:
- Capability - a stored-program machine with character or teletype output (EDSAC-class, late 1940s onward) could already print any string, including the letters of "Hello, World," if someone encoded them. Nobody treated that as the first-program ritual yet.
- Convention - the cultural demo arrives later. Similar greeting examples show up around BCPL (Martin Richards, ~1967). The oldest surviving, well-dated written form is Brian Kernighan's 1972 B tutorial (
hello, worldviaputchar). Kernighan & Ritchie's 1978 The C Programming Language is what made the phrase universal - it popularized the convention more than it invented the idea.
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.
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.
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.
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…
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.
- 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.
What you should notice when you read the sources
- Source shape first - Fig. 1 shows one signature per level in a single row; Fig. 2 zooms any pair (C next to Python, FORTRAN next to COBOL, absolute words next to Assembly). The syntax is the lesson.
- stdout mostly converges - later variants print the greeting; the absolute sum slide prints
SUM=55on purpose. Deltas are wall time, toolchains, years, and dumps (ELF / objdump). - Capability vs convention - early bands could print characters long before anyone made "Hello, World" the first-program ritual (BCPL ~1967, B tutorial 1972, K&R 1978).
- Carousel bands - Early high-level, systems, managed, and scripting pack peers on one rung; years label each language.
- 1950s high-level is not "toy" - FORTRAN, Lisp, and COBOL still compile and run here via gfortran, SBCL, and GnuCOBOL.
- C is a hinge - short source, native binary, still close enough that compiler output looks like Assembly.
- AI Engineering is one layer, two styles - tight contract and vibe coding share L7 (same live GPT-5.6 Luna path). Tight uses a precise prompt; vibe is
make a hello world. Cost appears in the Output panel and on the dashboard.
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, worldsource (fourputcharcalls). 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 /levelsgroups 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
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.