John Montgomery is wondering how people learned to program, especially non-professional programmers. Well, some years I make more money writing than programming, so here's my story:
My desire to learn programming was sparked by my Dad bringing home Ted Nelson's "Computer Lib/Dream Machines" -- an oversized paperback that contained cartoons, LISP and Basic listings, and low-contrast photos of minicomputers. What do I remember about it?
- It conveyed that computers were cool (well, actually that they were "groovy"), and
- It explained this program:
43 PRINT "HELP, I AM CAUGHT IN A PROGRAM LOOP
67 GOTO 43
68 END
I'm sure it had other programs, but it explained that program (so better than "Hello, World!") in enough detail that a 5th grader could "get it."
A few years later, for Christmas I got a Radio Shak "computer" that consisted of a plastic tray in which plastic rods could slide up and down. You could attach metal clips to the rods and plug in wires such that when the rod was in one position or another, a circuit would be completed and, ultimately, one of the 10 or 12 lights along the top would glow. It came with a book of "programs" (wiring diagrams) that you could build, and the back of the book had a bunch of blank schematics so you could write your own. Man, did I love that stupid thing. I think they had one program that essentially overflowed and "when light 12 goes on" you had to pull the wires and wire the next part of the circuit. Strangely, I think it was this piece of hardware that made me understand the plasticity of software: all that mattered was the arrangement of the wires and the position of the rods. And you could see there were literally repeating patterns in the wires and eventually I got to the point where most things I wrote (concentrating on sports "simulations") would take 2 or 3 rewirings that I only did to debug the program: the joy was in the logic.
Then came High School, which had a PDP-8 that was free to use for an hour or two after school. My Dad had given me a book of BASIC games that you could type in and run (Hammurabi, Artillery, etc.) and that was how I started. Around that time, I read Martin Gardner's "Mathematical Recreations" enthusiasms about Conway's Game of Life. By the end of my first semester in High School, I had programmed a BASIC version that ran in (I think) a 10 x 10 grid and burned up reams of teletype paper.
The summer of my 16th year, I was hired by C. Behrens Machinery to write a BASIC program that generated CNC codes to control the XY-table of a LASER cutting machines. The program I wrote cut mathematically perfect saw blades. The first one cut from metal hangs outside my door (you can no longer feel the one perceptible flaw, which was accumulated error after 36 rotations of the tooth shape). The first one we cut from titanium was acquired by the New York Museum of Modern Art for its industrial design collection. A photo of the laser cutting a saw appeared in National Geographic. I was paid \$3,000.
My programming career has been pretty much downhill from that ever since.