Programming · Logic & imagination

The art of
programming.

From 6502 assembly to Java. A personal journey through the technology, thinking and enjoyment behind software.

Explore Programming

Programming begins with an idea. You try to understand a problem, discover how its parts relate and gradually give it a form a computer can execute. Between that first thought and working software lies a craft in which logic, creativity and patience constantly meet.

Technology changed dramatically during my career. My own journey began close to the hardware: the 6502, programmed in assembly. The Intel 8080 and 8086 followed, then Turbo Pascal, Fortran and BASIC, and ultimately Java. Different machines and languages — but always the same fascination: understanding how something works and then making something with it yourself.

The art of programming

A program that works is a beginning. The real art lies in a solution that remains understandable: a clear structure, meaningful names and a design that reveals its intention. Good code tells a story about the problem it solves.

That requires alternating between the details and the bigger picture. Sometimes you are tracking down a single error in a calculation. Moments later, you are considering how entire systems work together. That interplay makes programming so absorbing: a tiny detail can determine the success of the whole.

The language is the tool. Understanding the problem remains the craft.

When did the first computers appear?

The computer has no single, straightforward birthday. Mechanical calculating machines came first; during the 1930s and 1940s, machines emerged with more and more characteristics of the modern programmable computer. The answer depends on whether you mean programmability, electronic circuits or storing a program in memory.

  1. 1941 · Zuse Z3

    Konrad Zuse completed a programmable calculating machine using electromechanical relays. It was an important step towards automatic, program-controlled computation. Source: Computer History Museum.

  2. 1946 · ENIAC

    ENIAC's public introduction demonstrated the possibilities of large-scale electronic computation. Programming initially involved, among other things, configuring cables and switches. Source: Computer History Museum.

  3. The minicomputer

    Machines such as the PDP-11 brought computing power into laboratories, technical environments and control systems. A computer was still a substantial installation, but became accessible for many more applications.

  4. The microprocessor

    Processors such as the 6502 and Intel 8080 brought the main computing functions together on a single chip. A small circuit board became a computer you could experiment with yourself.

  5. 1981 · The IBM PC

    The IBM Personal Computer 5150 appeared in August 1981. It was not the first personal computer, but became an influential starting point for the IBM PC and its compatible successors. The original 5150 used an Intel 8088 rather than an 8086. Source: IBM.

The historical front panel of a DEC PDP-11/34 with buttons and a numeric display.
The control panel of a DEC PDP-11/34.Autopilot · Wikimedia Commons · CC BY-SA 3.0

My beginnings: 6502 and assembly

With the 6502, little stood between the programmer and the processor. Registers, memory addresses, status flags and instructions were everyday vocabulary. In assembly, you describe very directly what the machine should do: load a value, add something, change a memory location or jump to another instruction.

The Synertek SYM-1 belongs to that world of compact development and learning computers. An exposed circuit board, a small keypad and a modest display make it tangible how little is needed to make a computer work. At the same time, those limited resources demand careful thinking.

A Synertek SYM-1 development board with early VIM-1 lettering, a keypad and a display.
Synertek SYM-1, shown with the early VIM-1 designation.Chris Birchill · Wikimedia Commons · CC BY 2.0

That early work close to the hardware teaches you to consider the consequences of every choice. Memory is not an invisible abundance, and a program is not an abstract document: it actually changes the state of a machine.

From Intel 8080 to 8086 and PL/M-86

Moving to the Intel 8080 meant learning to think in a different instruction set. The 8086 brought the world of the 16-bit processor. Capabilities grew, but so did changes in how you organised memory and programs.

Intel's development systems belong to that period: specialised workstations with terminals, disk drives and tools for writing, compiling, loading and testing software. A development environment was often quite literally a collection of equipment on and underneath the desk.

A historical workspace with Intel development computers, screens, disk drives and printouts.
A workspace with Intel MDS development systems: hardware and software as one toolkit.Paul Downey · Wikimedia Commons · CC BY 2.0

PL/M-86 — Programming Language for Microcomputers for the 8086 family — offered a higher level of abstraction than assembly while retaining capabilities close to the processor. Intel's original manual describes, among other things, the compiler for 8080/8085-based development systems. This distinction is interesting: the computer you develop on need not be the computer you are building the program for.

View Intel's original PL/M-86 compiler manual from August 1980 ↗

Through Turbo Pascal, Fortran and BASIC to Java

My programming journey continued through languages that each offered a different perspective. Turbo Pascal provided an accessible combination of editor and compiler. Fortran emphasised computation and technical applications. BASIC made experimentation approachable. They were different ways of turning a thought into a working program.

Different tools, a broader view of software
StageWhat is the focus?
6502 assemblyDirect control of registers, memory and instructions.
Intel 8080 and 8086Different processor architectures and greater capabilities.
Turbo PascalStructured programming in an integrated development environment.
FortranNumerical computation and technical problems.
BASICAccessible experimentation with ideas and programs.
JavaObjects, clear responsibilities and collaboration between components.
An IBM PC 5150 with two floppy drives, monitor and keyboard.
IBM Personal Computer 5150 with monitor and keyboard.Ruben de Rijcke · Wikimedia Commons · CC BY-SA 3.0

Eventually, Java took centre stage. Attention increasingly shifted from individual instructions to the structure of entire systems: what responsibility does a component have, how do the parts work together, and how can software remain adaptable as reality changes?

From a handful of instructions on a 6502 to collaborating Java components, the scale changed enormously. The pleasure of understanding something and bringing it to life yourself has remained.