Skip to main content


Personal History by Eric Mintz
Computing Experiences starting at Cornell University and continuing

I cannot imagine how I would live today if I had not learned computer programming at Cornell during my high school days. From 1963 through 1974, I was involved with the Cornell Computing Center as a drop-in, as a legitimate student, and as an alumnus. I remember the days of the Burroughs 200, though I never used it, the reign of the Control Data 1604, and the delivery of the IBM 360/67. Computing filled my teenage years with inquiry and promise; from beginning to end, my time spent computing at Cornell formed the most exciting time of my life.

Computers always fascinated me. During elementary school, I read about them in Robert Heinlein’s stories, though he wrote his best computer-based story, The Moon is a Harsh Mistress, when I was much older. My parents bought me science books that contained articles about computers, and I read about (but really did not understand) hexadecimal arithmetic when I was in sixth grade. I always enjoyed seeing computers in the movies and on TV — the real computer that matched couples on the "People are Funny" show, and the fantastic computers shown in science fiction movies.

Early on, when all computers ran on vacuum tubes, I remember reading in Popular Science about a man who set up a used computer in his basement. I turned to my mother, and said "Mom, someday, I'll have a computer in my home, too." I have lost her exact words, but she disagreed strongly. I now have five personal computers at home — six if you count the PC Junior gathering dust in the garage — and I just ordered a used Sun workstation. Ironically, my mother has a computer, too, and we routinely exchange E-mails. Neither of us imagined the Internet, though James Schmitz did when he wrote the CommWebb into his Telzey Amberdon and Tales from the Hub science fiction stories, which I read at that time.

When I entered junior high school in September 1963, I met Captain John Powell Howatt, USN, Retired, one of the seven sailors who survived the Japanese attack on the Arizona at Pearl Harbor. He taught an experimental mathematics course written by the School Mathematics Study Group (SMSG). The U.S. was losing the space race at that time. The Soviet Union had successfully launched Sputnik while the Vanguard program crashed and burned on the launch pad. The military fretted that our population lacked the technical ability needed to win the Cold War, so the Department of Education (as I understand it) commissioned new curricula for mathematics and all the sciences, which yielded an alphabet soup of new courses. In addition to SMSG mathematics, the so-called "new" mathematics, we had PSSC physics, CHEM study, BSCS biology. I took them all, but the mathematics course changed me the most.

Throughout grade school, I got poor grades in mathematics, which convinced me that I was stupid. Day after day, year after year, we added columns of figures, divided seven digit numbers by three digit numbers, multiplied four digit numbers by other four digit numbers, and drilled, drilled, drilled. From grades three through six, I remember that the number of digits grew from year to year, but the underlying mathematics remained the same. If we wrote from an inkwell, the work would have been the same as school in my great-grandparents’ day. I expected that seventh grade would hold more of the same: taller columns to add, longer numbers to divide and multiply, and fatter fractions to reduce. I still remember dreading my first seventh grade math class. We sat at our desks, and Mr. Howatt (he became Jack much later) welcomed us, and gave us our texts: galley proofs of a new, unpublished mathematics textbook. I flipped through the pages, and saw the then-unfamiliar symbols of set theory. For the next year, we left clerical work behind and studied the structure of our number system. Mathematics became exciting — a joy to contemplate. With Mr. Howatt’s encouragement, I made up problems on my own, and tried to solve them. Jack Howatt practiced egoless learning long before Gerald Weinberg ever thought of egoless programming. If I solved one of my made-up problems, that was all to the good. If I made up a nonsensical problem, or a problem that I could not solve, he found some good in it. That year, I started to learn how to solve problems: to break them down into manageable chunks and make organized attacks on each piece. It was only a start, but it convinced me that I could amount to something, given a good teacher. Over the year, I apprenticed myself to Mr. Howatt, and he eventually invited me into his home. His wife, Alexandra, became a second mother to me, and his son Bob and I are still friends.

During that time, my father ran The State Bargain House, a used furniture store in Ithaca’s West Side. I wish I had been there the day that Jack Howatt asked my dad if he had any blackboards. Dad sent Jack down to the basement, where he had one. When Jack asked for a price, my dad refused to take his money. According to Jack (I learned about this many years later), he and Dad argued back and forth for the better part of an hour. Eventually, Dad threatened to dump the blackboard in front of Jack's house, and Jack relented. In my mind, this encounter resembled Jack the irresistible force meeting Dad the immovable object. To this day, I regret missing the encounter.

Except for Jack Howatt’s math class, I was a poor student in junior high school. I almost failed spelling, French, and social studies in seventh grade, and turned in a mediocre performance in most of my other courses. I applied myself in my science courses, but learned very little. My teachers said that I "did not apply myself;" today I would be labeled an underachiever. In truth, I had an undiagnosed learning disability; I have difficulty seeing the details of print on a page. Nobody knew about this problem in the early 1960’s; even now, schools seldom test their students for my condition. A career councilor eventually diagnosed my syndrome — an inability to see detail coupled with strong spatial visualization skills — when I was 40. But you have to seek out a high-quality career councilor if you want this condition diagnosed. Most garden-variety psychologists don’t know that my condition even exists. So, I bumbled my way through algebra, where I grasped the principles intuitively but could not coax the right answers out of the problems, and got through the rest of my schoolwork as best I could. My science courses were mostly review for me; I was bored to distraction, but generally pulled A’s in science anyway. In most of my other courses, I got B’s and C’s, and made do. Even so, I visited Jack Howatt in school and at his house whenever I could, and read widely about sciences — especially physics and space travel — and mathematics, and dreamed about getting my hands on a computer someday.

My chance came in high school. In 10th grade, I met Tom Dimock, who helped me get started programming. Tom’s father taught in Plant Science in the College of Agriculture, and Tom had learned CORC before we met. He told me that the university would run short CORC programs for us if we kept a low profile and gave the students priority on the keypunch machines. Mr. Holman, a math teacher at Ithaca High School, had learned CORC the preceding summer; he lent me a manual and gave me some coding sheets. I read the CORC manual like a novel. As I remember, it explained the language clearly and concisely, and introduced all key concepts in a logical order. The manual contained several exercises: a simulation of cars parking along a street, a random walk problem involving a drunk man walking a tightrope, sorting three coins using three "if" statements, and other elementary problems. I remember reading that manual like a novel; I couldn’t put it down. Every time I had a question, I would ask Mr. Howatt. I learned about natural logarithms, measuring angles in radians, pseudo-random numbers, and other basic mathematical concepts. When I finished the manual, I had learned most of the subjects that would be covered in my 11th grade math class. Had I needed to understand trigonometric identities to program in CORC, I would have learned the whole course.

When I felt that I understood the language, I cast about for a suitable first problem. The problems in the book did not appeal to me; they were either too simple or too complex. I finally decided to approximate π by integrating a unit circle using the trapezoidal rule. Naturally, I did not know the proper vocabulary to describe my chosen method, so I described it as "adding a bunch of trapezoids." The problem appealed to me because I could understand the math, and could (or at least would) not do the calculations by hand. It was the only tractable problem that I could find that was not trivial, and I liked that. I worked hard to minimize the number of calculations that the computer would perform. My method divided the circle into 2n strips, where n > 0. The resulting symmetry allowed me to ignore half the circle. By leaving off the division by 2 in the formula for the area of a trapezoid, I could ignore the bottom quarter of the circle, and confine my attention to the first quadrant of the graph. Each trapezoid had the same height — 1/n — so I factored out the multiplication by the height and saved it for the end of the calculation. I exploited the fact that successive trapezoids shared common edges. Finally, I had all the algebra tuned the way I wanted it. I carefully printed the program on the coding forms, and brought it to school for Mr. Holman to examine. I thought that he would admire the effort I spent developing the program, and that he would encourage me to get it working.

Instead of praising my effort, he condemned the program as over ambitious. He suggested that I read some numbers from data cards and calculate their total. I declined to do that for several reasons: I thought that I had already had written a perfectly good program, and his problem was not interesting. He closed the conversation by saying, "If that’s your first program, I want nothing to do with you." Faced with the choice of solving trivial problems or going off on my own, I choose the latter, and I have studied software development on my own ever since.

At the time, a university student could run a CORC program a few times a day. I was lucky to get three runs during a week. I lived on the west shore of Cayuga Lake, about three miles north of town. I did not drive, so I could not get to the university during the week. In principle, I could run a program 4 times during a week: once during the week, once on Friday, once on Saturday, and once on Sunday. It took me several weeks to get my π calculation running; when it worked, it gave me the correct answer to 4 significant figures. I felt 10 feet tall, and took the program over to Mr. Howatt’s house. Alex — Mrs. Howatt, then — still has a picture of me standing triumphant on her lawn with a listing unfurled in front of me. I think it’s a picture of me holding my calculation of π.

Once I got the trapezoid calculation working, Jack suggested that I try a Monte Carlo algorithm. His suggestion struck me as brilliant — world-shaking. Pick several thousand pairs of real numbers distributed randomly and uniformly in the rectangle bounded by (0.0, 0.0) and (1.0, 1.0). Count the proportion of pairs where x2 + y2 ≤ 1.0. This calculation yields π /4.0.

For several months, I calculated π, and solved other problems as they occurred to me. I quickly became dissatisfied with CORC's limitation — especially its weak formatting capability and lack of text manipulation. I saw that my heroes, the programmers who developed real systems, used FORTRAN and assembler language. I got to know Skip Williamson, Allan Esserman, David Bessel, Jon and Daniel Kasher, Richard Stone, Bob Blackmun, Robert Radford, and all the other denizens of the computer center. George Willard Goetz, a mechanical engineering student, became an especially close friend. We used to help each other debug our projects, and I soon gave as good as I got.

The Computing Center made it easy for me to write programs in CORC. Just about anyone could sign for a program number, punch up a program, and submit it for processing. CORC programs ran in large batches, and they ran so quickly (execution time was strictly limited to 1 minute, and output was strictly limited as well) that it was too much effort to identify each user. Also, since the system CORC interpreted its programs, there was no danger that a user could crash the machine. Programs in FORTRAN and Assembler lacked these protections. They could run for longer times, produce voluminous output, and crash the machine. The Center carefully controlled the use of these languages. A FORTRAN or Assembler programmer needed an account, which required sponsorship — either by a third party, or by the Center itself. I badly wanted to write FORTRAN programs, but I couldn’t fund it on my allowance of $2.00 per week.

I obtained the programmed learning FORTRAN text that Control Data Corporation published for its users — it had a white comb binding, a green cover, and it fit in a shirt pocket — and learned the language. Somehow, I found a user (I forget whom) who let me run some short programs on his account. When I felt confident that I had learned the language, I presented myself to John Rudan and stated my case. I was terrified that John would call the police and have me ejected permanently; instead, he listened attentively and gave me a staff account — CCC-008, if I recall correctly. I left his office walking on air, determined to learn as much as I could, and vowing not to be piggy.

Unfortunately, some of my friends had other plans. When they learned that I had access, they tried to run some programs under my account. This got me into trouble — rightfully so, but I was able to straighten it out. With help from the high school and the computer center, I persuaded my friends to behave themselves and to leave my account alone.

I remember several of my FORTRAN projects clearly, though I have muddled the chronology. I remember programming physics problems, to the consternation of Dr. Zein, my teacher. One problem stands out: the trajectory of a thrown ball, taking air resistance into account. I needed help finding the equation of motion; a university student (probably a sophomore) found the equation that governed the air resistance of a sphere in Dr. Sproull’s modern physics text. (Several years later, I took Dr. Sproull’s course and studied from that same book.) Integrated the equation using naïve linear approximations. I have no idea if my calculations yielded valid answers.

As an autodidact, I had to find my projects on my own. I did all the exercises in the CORC manual, and looked around for other problems to solve. At one point, I decided to redevelop Skip Williamson’s SIMPLOT printer-plotter subroutine library. I wanted to use the real plotter — the 11" wide CALCOMP plotter that was connected to the 160A, but I knew that I had no chance, so I decided to do the next best thing. I think that Skip looked down on my design. My program contained a page-sized character array, while Skip’s kept the points in a linked list and generated the page on the fly. At the time, I knew that Skip had the better design, but I continued with my project because I wanted to get it working. I had fun with that program. I plotted every conceivable graph — sine waves, projectile trajectories, circles and ellipses, and other functions that I can no longer remember. I applied the techniques in my sophomore year when I wrote a program to solve Schrodinger’s equation for a particle in a box. I printed graphs of the resulting wave functions on the printer.

The printer-plotter won a prize at the regional science fair. Two projects used a computer that year, and both entrants ran their programs at Cornell. The other project involved rocketry: a home made solid fueled missile powered by zinc dust and sulfur. The contestant came from Trumansburg, where the high school taught CORC to advanced students. This particular student had written a CORC program to calculate his rocket’s trajectory. His results were way off; his rocket blew up on the launch pad.

Boredom sometimes inspired my projects. One of my mathematics classes covered logic and predicate calculus. I quickly grew tired of computing truth tables — I never liked hand computations of any sort — and decided to solve the problem once and for all. I wanted a program that would evaluate the truth table for any valid logical expression. I came close. At the time, it seemed like a huge undertaking — much more difficult than applying the trapezoidal rule to the unit circle. Parser technology was primitive, and I knew nothing about it anyway. I got the parser working; and eventually emitted FORTRAN code that could calculate expressions containing AND, OR, NOT, and implication. I never got exclusive OR or equivalence to work, as I never figured out how to implement the necessary backtracking to emit the required code. My code emitter was extremely naïve. It emitted the necessary headers (the PROGRAM statement, for example), and declared all required logical variables. It then constructed a series of nested DO loops to cycle the logical variables through the required value permutations. It then translated the predicate into a FORTRAN-77 logical expression, calculated the predicate value, and printed the resulting table. Rube Goldberg would have appreciated the required job setup. The program produced FORTRAN source, which needed to be compiled and run. It required two scratch tapes: one to hold the compiled compiler and the compiled calculation code, and another to hold the emitted source code that performed the calculation. This made my run a "2S" job, which greatly increased the turnaround time and reduced the number of available runs. The program perplexed the operators because it invoked the compiler twice. Its operation always looked abnormal. It started with a conventional compile, load, and go. Then, it wrote some output to the "2S" tape, rewound all tapes, and re-invoked the compiler. They often thought that two jobs had accidentally become joined together, especially when they saw two compiler outputs in the printout.

When I showed the program to Bob Blackmun, he exclaimed "My God, Eric, you’ve written a primitive compiler!" In a way, he was right.

I submitted my truth table generator to the Westinghouse Science Talent Search, which is now run by Intel. It won an honorable mention. I believe that I was the only member of my high school class to submit a Westinghouse project, but I cannot be sure.

It’s funny. These days, I could write the program in a weekend. I would run the required grammar through a parser generator, and code the productions to generate a tree of pseudo-instructions. I would write an interpreter to evaluate the tree, given values for the variables, and write an engine to loop through each possible combination of variable values. I would use a value stack to hold intermediate values. The interpreter would supply variable values to the pseudo-instructions and maintain the value stack. The whole effort would take a day or two.

When I had learned FORTRAN, I turned my attention to assembler. I remember coding programs in assembler, but I do not remember writing large projects. I wrote a few simple programs to format numbers for printing and the like. When I felt comfortable with the instruction set, I started reading large assembler programs. I remember decoding the CORC interpreter’s profanity dictionary and examining the COOP monitor listing. My knowledge of assembler programming would help me when I looked for work.

I always wanted a desk on the second floor of Rand Hall. I eventually got one, but I had to work my way up to it. Professor R. C. Morris of the Sloan School of Business gave me my start. At the end of my sophomore year, he offered me my first summer internship when I was 15. I found the terms irresistible: no pay, an interesting problem, and all the sponsored — hence, high-priority — computer runs I could use. He needed help running his hospital cashflow simulation, and he had no funding for salaries. I asked him to give me a desk in the bargain, and we sealed the deal. I loved the job. His program filled an entire card drawer and produced reams of output each time it ran. It was written in LPF — a dialect of FORTRAN with list processing extensions that David Bessel had written. I had to find bugs, run the simulations, enhance the model per Professor Morris’s instructions, and generally make myself useful.

Professor Morris worked with a graduate student whose name I have forgotten. I think he came from the Far East or the Indian Subcontinent, but I cannot be sure. He smoked a pipe, which always went out on him. He would light it, and place the extinguished match carefully on the table. A few minutes later, after it went out, he would light it again, and place his second match across the first to form a ‘+’ sign. He would do this over and over, till his desktop resembled a one-sided game of tic-tac-toe. I am sorry to have lost track of him.

In spite of myself, I worked hard for Professor Morris, and produced some useful results. We ran the program in an unusual way. Professor Morris owned a tape, which we would mount on the ‘1S’ drive when we compiled the program. When we wanted to run the program, we would mount the tape, and load the pre-compiled program. Unfortunately, the program needed the LPF runtime library to load, which meant that the operator had to mount the LPF system tape for us. This effectively limited us to one run per day. I decided to try copying the LPF runtime library onto our tape. If it worked, we could run as an ordinary ‘1S’ job under the standard FORTRAN system tape, which would let us get several runs per day. Professor Morris was skeptical, but wished me well. David Bessel had a different reaction when I asked him for the library functions. Initially, he treated my request with suspicion. He reluctantly gave me compiled versions of the functions. I think he was worried that I wanted to take over LPF. I remember him telling me "Don’t ever ask for the source" as he handed me the binary decks. My plan worked. Once the tape contained the LPF library along with the compiled model, the software ran perfectly under the standard system tape. Our productivity soared because we could run our model more often.

At the start of the summer, the simulation consisted of two programs. We would send the results of the first into the second, which would produce our final results. I suggested that we combine the two programs. Again Professor Morris was dubious, but his grad student and I made it work. This further increased our productivity. I found and fixed a few minor bugs, like an underflow error that caused patients with minor illnesses — they would come to a clinic these days — to receive vastly inflated bills. I learned a lot about professional development practices that summer. Professor Morris strongly believed that a program should explain itself. He took pains to code clearly, and he commented extensively. I learned the techniques then, but I was too young and brash to realize their value. I do now.

When the summer ended, Professor Morris told me that he was pleased with my work, and agreed to write a letter of recommendation for attachment to my high school transcript. That letter was worth more than any salary I could have earned that summer. I’m convinced that it got me into college. I sure know that my grades did not; they landed me in the second quarter of my high school class. From my perspective, Mark Twain was right when he said "School is important in its way, but a young man shouldn't let it interfere with his education." I learned most of my life lessons in my two apprenticeships: working in my father's store and the Cornell Computing Center.




by Eric Mintz, January, 2000