I was introduced to programming in high school by reading a book on
the topic. The book taught me how to write machine code for a strange
decimal-based machine. Unfortunately, there was no actual computer
involved in the process. Shoot, who had computers back then? Certainly
not our high school (the personal computers? not invented yet!)
In college, I learned a smattering of FORTRAN. Just enough to drive a
Calcomp plotter to plot data from my undergraduate physics courses.
But didn’t really get into programming until my junior year in
college. (Story continued in next question)
How did you get started in programming?
So, I was planning out the courses for my junior year in college and I
had a hole in my math courses. The math class I needed was not offered
that semester, so my adviser suggested taking a computer programming
course. He said it would be useful and, who knows, I might enjoy it.
So I signed up for an introduction to FORTRAN course, figuring it
would be easy because I already knew a little bit of FORTRAN. I show
up on the first day of class and after a few preliminaries the
instructor jumps right into some code, that looked like this:
(de member (pip deck) (cond
((null deck) nil)
((eq pip (car deck)) t)
(t (member pip (cdr deck)))))
I remember scratching my head and thinking this was the strangest
FORTRAN I had ever seen. I was totally confused for about three days,
then something clicked on the third day of class. I suddenly
“got” what the instructor was trying to get across and it all
made perfect sense.
If you haven’t figured it out yet, the instructor taught us Lisp as
part of an introduction to FORTRAN. The instructor turned out to be
Daniel Friedman, the author of The Little
Lisper,
and was well known in the Lisp community. That small exposure to Lisp
hooked me on programming from that point on. I took as many CompSci
courses as I could in my remaining year and a half in college. I
eventually graudated with a BS in Physics, but had a strong background
in Computer Science as well.
What was your first language?
Technically, FORTRAN was my first language. But Lisp is the language I
fell in love with and is what got me hooked on programming.
What was the first real program you wrote?
I have a very clear memory of the very first program I wrote
professionally. The reason it is so clear is that this was the first
program I wrote that was intended for actual use by someone who wanted
it. Everything else up to that time was done for my own personal
enjoyment or to satisfy some course requirement.
The program calculated the “critical angles” of “pieces”. I was given
the requirements by Anne Exline, a senior programmer, and proceeded to
write the program to spec. It took a few days, but when I was done I
showed the result to Anne and she was pleased with the result.
The funny thing is that I had no idea what a “piece” was nor what was
so critical about the angles I was calculating. I was so excited about
writing an actual program that I did not ask until the software was
done. When asked, Anne just looked at me funny and said “Rocket
Pieces”. When Cape Canaveral lauches a rocket, they track it very
carefully to make sure it stays on course. If it strays, the range
safety officer is required to activate the self destruct. The critical
angles are those angles that would cause the “rocket pieces” to land
outside the safety area of the flight path.
So, my very first professional program was not only useful, it might
actually save lives.
What languages have you used since you started programming?
Languages I have used as part of my professional career (in roughly
chronological order) include FORTRAN, various assembly languages,
FORTH, C, PL/M, C++, Java, Ruby.
Languages I have used in addition to those mentioned above: Pascal,
Perl, Eiffel, and Lisp/Scheme.
Languages I can read, but never wrote anything significant in them:
Ada, Python, Erlang, Smalltalk, SNOBOL, Algol, Pascal.
What was your first professional programming gig?
I was hired by the RCA Missile Test project in Cape Canaveral, Florida
as a Near Real Time Analyst. Duties included programming various
launch related software (e.g. the critical angle program mentioned
above) and working launch support.
The launch support was the “Near Real Time” part of the job
description. From the moment a rocket is launched until it reaches
orbital velocity, any malfunction could cause it to fall back to
earth. During this initial portion of the launch, the launch is
monitored in “real-time” so that we know exactly where it would land
if the engines were to cut off NOW. Trajectory calculations had to be
done in fractions of a second and updated constantly in real time.
After the rocket reaches oribital velocity (usually somewhere between
8 and 14 minutes into its flight), it won’t fall back to earth. At
this point the real time trajectory program is shut down and the near
real time program is started. The near real time program can take a
few minutes to calculate a more exact orbital prediction and then send
that prediction to downrange radars (e.g. the the Ascension
Island station) that
won’t see the rocket until about 20 minutes after launch. It was the
job of the Near Real Time analyst to run that program and provide
oribital predictions for downrange station.
If there is one thing you learned along the way that you would tell new developers, what would it be?
Find something that you enjoy and do that. Life is too short to work
in a job that you dislike.
What’s the most fun you’ve ever had … programming?
Oh, the fun I have had. This story still makes me smile.
My first computer was a single board Z80 microcomputer with 4 KB of
memory. I wrote a small FORTH-like interpreter for it and hacked a
version of the animal game in FORTH. The animal game is a program that
plays 20 questions to figure out what animal you are thinking of. It
constructs a binary tree where each node is a question and the
subtrees are the yes and no answers to the question. To play the game,
all the program does is walk the tree, ask the question at the current
node and follow either the YES branch or the NO branch as appropriate.
If the program guesses wrong, it will ask you for your animal and a
question that will distinguish your animal from the one it guessed. It
then adds your question to the tree. By this extremely simple
mechanism, it is able to expand its knowledge base. (see Ruby Quiz
#15 for more details).
I had just finished the program and had seeded it with a single
animal, a mouse. I turned to my wife and asked her to play the game.
She thinks of an animal and starts the program, which immediately
asked her “Is it a mouse?”. She turned to me with surprise and said
“How did it know?”. Of course, the animal she picked was a mouse.
I don’t think I have ever impressed anyone with my programming skills
as much as she was impressed with that game.
Who’s up next?
I’m tagging the following people. Remember, this is entirely
voluntary so don’t feel obligated to answer. But I’m betting the
answers are interesting: