I wrote a computer program when I was in graduate school at Purdue that
still attracts my attention. It was a simulator for a radio based
computer network. Although I got an A, I never quite understood what the
I am still
impressed that this is possible; that I could write a program
that told the computer exactly what to do, and that when it did exactly
what I said, I would find the results puzzling.
I've returned to that program recently. I have enough computer power in
my laptop to study it in ways that were not available to me then.
Desktop calculators were not yet generally available. In 8th grade math
class we went to the computer and programmed simple math problems in
APL. Wow! I could tell this machine how to do something, and it would!
I was allowed after-school access to play all I wanted. It was a big new
was an IBM 1130. It had a built in console that was just a
Selectric typewriter. To use APL you had to change the type ball and use
the funny Greek keyboard that was printed on the front of the keys.
A friend was a ham radio operator. He would talk with the inventor of
APL on the radio and then come in and show me what neat trick he had
Software as a field is so large. One person cannot possibly know
everything. My work keeps me continually expanding my knowledge,
I am a creative person. I cant sing, I cant compose, but I still want
to create something.
I like designing
stuff and punching ideas around and it seems to work
because its creative. It takes lots of brain power.
feel like I'm working. When I go to work, actually if Im in the
work place or at home I always do the same thing anyway. Im lucky they
In the early 1980s, I worked on code for a custom microprocessor for
Intergraph, using a language we called p-code. There was only a 256-word
memory area, and I learned to write tight little self-modifying code
chunks for it.
something so pure, so beautiful about having such a tight
constraint, that it forced you to really reach a kind of artistry in
making the damned thing work, and stretch its capabilities beyond what
the hardware designers had ever anticipated.
I was the sort of kid that would take watches apart to see what made
My friend and mentor Bill Croft wrote extremely well crafted programs.
He sent me a program written in Cobol for some old computer that the
U.S. Army used.
made it look as if Cobol had been invented to write this
sent me a program he had written in C to run on a PDP-11
was about thirty pages long and, again, made it look as if
the C language, the PDP-11 computer, and the Tektronix 4014 terminal had
been invented to make it easy to solve this problem.
I read the
program in an afternoon and felt like I had been him when I
I went to an open house at a local college and saw a Star Trek game on a
teletype. My quest was to create a Star Trek game for the school
Then I learned
Fortran and I knew when I left high school that I wanted
to have a career in computers.
When I read beautiful code I feel happy that I understand what another
mind crafted. If it's well done, I admire the intelligence of the
better than I could come up with, then I wish I could come up
with something like that.
I usually try to remember interesting tricks the author did, so
I can steal them for my future code.
The Altair 8080 computer. I would have killed for one of these kits. I
saw it in a 1975 Popular Electronics magazine, and expected to get one
every Christmas from then on. Never did, as it cost around $2000.00 at
My first program was a program to do synthetic division of polynomials,
which was something I had just recently learned at the time, and was, at
the time that I learned it, absolutely the coolest thing I knew how to
do in mathematics.
that I could write a program to do it as well was just awesome
If I had
a choice between writing a program to do synthetic division and
writing a video game I would still pick the synthetic division.
I was called. Most are not.
are not called are capable of beautiful work, but only if they
learn to feel/smell/taste/hear/see the code. Once you can
feel/smell/taste/hear/see it, it will call to you. Those who try hard to
produce beautiful code will fail.
code is the natural product of skill that encounters a need.
If you want to learn to produce beautiful code, you must practice hard,
train hard, until you have forgotten practice and training.
I first started with computers in advanced placement math in 7th grade.
Also, my dad was always bringing home kid science kits for me and my
sisters to play with.
computer at home was in late 70's with the Timex Sinclair and
a whopping 1k (.001 Meg) of memory (I have a PC at home now with 500 Meg
of memory now).
The first microcomputers came out when I was in high school. I lusted
after the Altair 8080, the Imsai 8080, and the Sol-20. I didn't have
anywhere near enough money to actually buy one, but I read all the
magazines and lusted still. The Imsai 8080 was the Cadillac of that
group -- powerful and expensive.
of having my own computer and being able to program it was very
attractive, yet unattainable.
Writing programs was such a puzzle. When you get it just right, it feels
good and you learn something about the essential nature of what you were
modeling with your program.
Because of assignments early in my career, I was fascinated by 9-track
tape and the drive used to read/write them. It was an interesting
marriage of electronics and mechanical sciences. Most people do not know
that data can be transferred to/from a tape faster than a disk drive, as
long as you've written the programs appropriately.
process is an exercise in mechanics: inertia and momentum.
Special columns were developed to anticipate the tape having to move
forward or back. Too much slack, and the tape can get tangled. Too
little, and it will snap under the stress of trying to be moved across
the read/write head and the reel holding the remaining tape.
My father worked for Texas Instruments and he brought home one of the
TI91As. I guess you could compare it to a Cadillac. The styling had
these bends, it was silver, it had black shiny keys. It was a
these little cassettes you could stick into it, but also it
came with this huge, beautifully printed book on how to put your own
programs in there, sit down and type them in, and it was extremely fun
to take one of those programs and type, and then go hmmm, what else can
I make it do, and then type in something else.
It was very
temporal because when you turned it off, you lost what you
Or you decided
to play a game on it and you lost what you did. But that
was okay because every time you did something that made something appear
on the screen, or made the computer play a song through this tiny little
speaker there was a sense of accomplishment. I did that! And when you
could finally get to the point where, gosh, when you didnt have to read
the book to do something!
thing I regret was in high school I sold it for $100. I
carted it around from Texas to New York, and all around New York and
then I decided whos going to want this? I mean I dont even take it out
and look at it anymore, so I just practically gave it away for $100. I
had tons of cassettes, duplications of all the books and I sold it and
every day I regret that because I want to take that thing back out and
play around with it again.
never thrown a computer away ever since then. I have every game
console Ive ever owned. I have 386s that dont do anything but prove
to me that you can have a computer up and running for years without ever
touching it. I will flip the screen on every once in awhile and oh yeah,
everythings fine, then shut it back off again.
I am a software tester. It is fun to break things
What do I consider to be beautiful software? The UNIX operating
system. This was a very powerful piece of software that was conceptually
of power and simplicity struck an aesthetic chord in me
that has inspired my own endeavors to develop very powerful software
through very simple conceptual models.
My high school received a teletype terminal from the university
computing center. They didn't know what to do with it, so I started
playing with it & figured out how to make it do things. Pretty soon I
was teaching others, including some of the teachers.
first year the school actually integrated it into some of the
math classes, and they required a "drivers license", a proficiency test.
I got license #1 :-)
I couldn't find a job in mathematics and I had resisted going into the
computer field simply to find a job (when I loved mathematics!). At a
math conference I met a famous person and I asked him what he was
currently working on. He said, "I'm teaching COBOL at a university." I
couldn't believe it. At that moment I began to seriously consider
I went back
to school to work on a master's degree. It was discouraging.
It seemed very inexact to me and almost whimsical. After math, it was a
let-down. Then I took a course in Artificial Intelligence and I worked
for a semester on a project with music -- a long-time avocation of mine
-- that helped me turn the corner.
I also started
teaching and I could see a tremendous difference in teaching
programming vs. teaching calculus. The
students loved programming and they absolutely, positively hated
calculus. The teaching was so much more exciting. Since I wanted to
teach, that sealed my fate.
My dad was a research scientist at Ford Motor Company, and I spent time
on Saturday afternoons in his office. There was a PDP-8 computer there,
and I learned to program it using a row of switches to load a single
machine instruction at a time.
I went from
assembly language to loading simple operating systems and
playing games, and then to playing with graphics software in the late
school, my dad brought a minicomputer home for the summer and I
got to play with the UCSD P-system, a simple interpretive system that
ran on a variety of different hardware. I wrote a simple screen editor.
I like to see how things work. I like to be challenged with
understanding how something works/how something doesn't work/how
something can be fixed.
I was a Junior in high school (1976-1977) and using the University of
Washington Academic Computing Center, which housed a Control Data
Corporation mainframe. It had a program, NUCHESS, that you could play
chess against. I recall using a Texas Instruments dot-matrix printing
terminal, and playing NUCHESS on the easiest setting, and getting
Actually I find huge code bases beautiful. Code bases that have existed
for 10, 15, 20 years. There are millions and millions of lines of code.
At one point Nortel had a switch that was 32 million lines of code.
There are entire generations of programmers that are either contributing
to or taking apart or refactoring or working on this huge piece of
software that nobody really understands.
It has taken
over a life of its own. Its a complete entity and its
used by millions of people all over the world and you come in every day
and do your changes, you never really know the entire picture, one
percent of it, and it just keeps on going and you know it will be there.
Your kids will probably work on it too. It will be there in one way or
The programming class in High School really clinched it, but I was
interested in computers before that.
reading an article in Scientific American before then, and
lots of Science Fiction books (Colossus, the Forbin Project is the first
one I really remember getting me into computers).
To be honest, probably all the geeky technology, and all the flashing
lights (I'm still a sucker for flashing lights).
I was intrigued with the way that things fit together to get a computer
program to work. Now, I learned on a punch card system (this was 1980 or
so, but my high school didn't have lots of money to update)...
I guess I first got interested when I was looking through an MIS book my
dad brought home for a training class. Also, I had a programmable
calculator in high school.
I'm lazy deep down, so if there was an 'easy' way to get
something done, I went for it...
My first computer was a Sinclair 81. It had an 80 chip inside, four bit.
I got it with my first paycheck.
excited me, I remember the exact day, almost, that I
discovered the commands that would allow me to write directly to the
machines memory. It was like I had a hole through the computers skin.
I could turn on the computer and have basic functionality so I liked it
straight away. But the day I discovered that I could get down to the
memory and start writing, that opened up the world for me.
It intrigued me for years and I actually went on in my career to design
this kind of system.
I needed to use computers to analyze data from my Chemistry labs in
college -- this was a long time ago! My first program was "least mean
squares for determining slopes". It was written in Fortran, put on
punched cards and run on a computer that was in the basement of some
building on campus.
the analysis of data from my labs more than I liked going into
the lab. I reached a point where my Chemistry courses were more math
than chemistry. And when the math gets sufficiently complex, you move to
It was a secret language. No one in my family had any idea about it. I
could escape the mundane family life and be in my secret, private world.
I used to play around with numbers...BIG numbers...numbers with LOTS of
decimal digits of precision. No particular reason, it was just fun.
So, when I had access to a 'real' computer, I decided to find fun ways
to make big numbers. Prime number generation was a hot thing for a
while, and someone told be about the Sieve of Eratosthenes. This
algorithm kept me going for quite some time. I wrote and re-wrote the
code for it several times, always wanting to trim down how much memory
and CPU time it took to execute.
In 1985 I started working as a contractor at NASA's Marshall Space
Flight Center, hired to build a new simulation laboratory for testing of
the controllers of the liquid propulsion main engines. We designed a new
set of languages, developed the compilers and linkers, and used the
concept of "virtual machines" to execute the resultant code.
The concept worked wonderfully for us, and to this day, the stuff that I
wrote is used to verify the safety and functionality of the controllers.
When I see well written code, I feel the same way that you feel when
you're a kid, and you get the Christmas present you wanted, and that
night, you fall asleep with it in your hands.
I think that there are certain students that you can tell right away.
You can tell from the code theyre writing that theyre seeing things a
little bit differently. And it doesnt always mean that theyre getting
the best grades, but you just get a sense from looking at their code and
reading it that they have a different sort of understanding.
I think theyre the ones that at the beginning explore a lot, and as
they explore they hand in assignments with all these useless features
that they think are cool. But they taper off over a certain period and
then they just get clear code that completely conforms to the assignment
and its done in the simplest possible way.
I read an article in Popular Electronics sometime in the late 1950s. It
was about how to build a flip-flop; the basic unit of computer memory.
I built three of them, connected them to a rotary telephone dial, and I
had built my first "computer."
The way I got into programming was with a 8080NEC kit that had a
hexadecimal keyboard. The keys were zero through F, increment address,
delete and enter. To program the computer you had to create a machine
me hooked was the fact that by entering different numbers you
could make that stupid machine do very different things, just by
changing the values or by feeding it a different program.
One sequence of numbers would create a hexadecimal display and make the
display blink. Another sequence would make the computer play a song
through a speaker. Other numbers would make it do other things through
both blinking and sound.
what got me hooked, the fact that
such a simple box, you could instill into it so much power just by
pressing different numbers.
All of a sudden youre a magician.
When I was in high school I heard that the computer had figured out the
value of Pi to some huge number of digits. I wondered how this could
possibly be. Weeks later I thought up the idea of breaking a circle into
slices and summing their area. I got about three digits of accuracy. I
made the slices thinner and got four digits. So I made them really thin
and got only three digits.
years later that IIT dropped their high school program because
of abuses of their computer. (I hadn't figured out just how long 600
seconds of processor time was until then. I bet the operator thought the
computer had crashed.)
I still like to know what is possible and what isn't.
I guess I was like one of those boys who always loved building things. I
was a Lego person. Consequently my ambition was always to be an
engineer. I think I probably viewed computing and Computer Science as a
bit soft. I wanted to build things.
So I started
off life as an engineer, maybe for design, the joy of
And I guess
over the years I discovered that building with computer
software was actually a much bigger world, albeit an artificial one, but
the scope and the things that you could do was like having a mega Lego
My dad bought a programmable calculator (50 pounds, nixie tube display,
99 steps of programming).
that big old clunky calculator. Nixie tubes are cool, like a
light bulb with 10 filaments, one in front of the next.
I wrote a program that would count up and down and sat for hours
watching the numbers coming closer and farther.
It's tough to say what specific thing locked me into this field. I like
to solve puzzles and see if I can make the machine do what I want. I
learn and move on...learning new things is fun!
it was all about money. I wanted to make lots of it and have
fun spending it. Now I focus more on time and the human element.
I am not a 'usability expert', but I do feel strongly that computers
should make peoples lives easier and not harder. ATMs are a good
example of the ubiquity of access to money facilitated by computer
networks. The counter example would be some of these web sites that
require you to almost know the answer to your question prior to
navigating through their maze of web pages.
My first desktop computer was a Radio Shack Model 2. Because I could
work with it at a very low hardware and software level, I came to
appreciate how much one could do with so little.
I have since
worked with machines which were much more powerful, and
capable of things I would not have dreamed of doing on that machine, but
I am still in awe of what could be done with a few thousand words of
memory and a 2MHz processor.
It was grade 11 and the math teacher gave us a problem, and she said
nobody will be able to do it. I took that up as a personal challenge.
Anyway, nobody could solve it except for the solution that I put on the
blackboard, which took nine blackboards to do, but I came out with the
answer at the end.
It was like
a personal challenge and I realized that it was easy enough
to go from point A to point B.
Writing software seems to be a lot like that.
Before 7th grade, my Mom worked at the University of Missouri, in an
office next to the Business School. Several times I got to go to
someone's office and "play" on the computer. It wasn't much of a system
back then, though it was hooked to a mainframe. The input/output was a
rigged typewriter that took in text and printed out text.
The summer after 8th grade, I was able to take a class in Fortran
programming through the Business School. The class was for faculty,
staff, and grad students. I think I was one of the better students. When
I told them I was a Freshman, they thought college, not high school.
|<--quotes from interviews|