Before the Apple 1 computer was physically built, Steve Wozniak authored its BASIC interpreter by drafting assembly code on paper and manually entering it into hardware. This methodology, often referred to as 'slow programming,' was a standard practice for 8-bit hobbyists who lacked the resources for multiple machines or modern development environments.
The 'Slow Programming' Workflow
The original post on Hacker News explores how Wozniak managed to write the Apple 1 BASIC before the hardware existed. Commenters on Hacker News explained that Wozniak followed the default path for 8-bit hobbyists: writing programs on paper and testing them in situ.
One commenter, writing as femto, noted that this 'slow programming' was a deliberate trade-off. Because the process was slow, it forced the programmer to put significant thought into the logic before ever touching a keyboard.
This approach allowed developers to learn common instructions by heart, eventually enabling them to translate assembly to machine code almost entirely from memory.
Manual Assembly and Technical Reference
The technical process involved studying a CPU's technical reference manual to understand its Instruction Set Architecture (ISA). A commenter, billforsternz, described this as a process of 'molding functionality' by storing specific codes in memory.
This required writing out every instruction and hex code very carefully on paper, including adjusting memory addresses. The process was extremely intolerant of even the tiniest mistake, as a single wrong character could break the entire program.
One commenter, david-gpu, noted that while this is not inherently 'difficult' if the ISA is well-known, it is an incredibly tedious task that modern compilers have largely replaced.
Hardware Constraints and Offline Editing
In the era of the Apple 1, hardware and storage were prohibitively expensive. One commenter, MarkusWandel, recalled that even a single floppy disk could cost over $20 in today's money, making it difficult to save work frequently.
To circumvent these costs, some developers used line printers to output their code. This allowed them to 'save' their work and continue debugging with a pencil during their downtime, such as on a bus ride.
These constraints fostered habits that some developers still carry today, such as a preference for manual logic over modern conveniences like autocomplete or syntax highlighting.
Trade-offs of the Manual Era
The primary trade-off of this era was the sacrifice of speed for a deeper, more intimate understanding of the machine. Hand-assembling requires a level of mastery over the processor that is often bypassed by modern high-level languages.
While modern tools provide immediate feedback, the 'slow' method ensured that the logic was sound before it was ever executed. However, as one commenter noted, it took decades of experience to reach the level of mastery Wozniak displayed in 1975.
