Caltech is on an "academic quarter" system, as opposed to the semester system in use at most universities. By the spring quarter of my freshman year (i.e., in March of 1970) I was weighing three potential majors: mathematics, chemistry, and /or electrical engineering. To deepen my understanding of EE and its applications, I signed up for a course in semiconductor physics taught by Carver Meade, and a course entitled "An Introduction to Fortran IV" (I'm sorry, but I don't remember who taught that course).
The semiconductor physics class was a lot of fun. Carver Meade was an engaging lecturer, and the lab work (which involved cutting a slice of silicon off a bar of the stuff with a diamond-coated circular saw blade, cleaning the surface of the slice with hydrofluoric acid, and then creating diodes with gold contacts formed in a vacuum chamber) was extremely interesting. I can still see the sparkle in Dr. Meade's eye as he described an integrator circuit, and told us that one day, when millions of transistors could be etched into a single semiconductor chip, a massively parallel array of simple integrator circuits would be able to simulate the function of the retina in the human eye. Today the miniature TV cameras embedded in laptop computers and smart phones represent the fruition of his prescient predictions.
The course on Fortran IV was heavily attended. But it was horribly boring. Mainly the instructor just repeated the material in the textbook, which was a large paperback entitled simply FORTRAN IV. The main thing I remember about the class itself is the lab project, which I'll get to in a moment. Although details of the course elude my memory's grasp, I still remember Fortran. Who could ever forget Fortran?
There were four parts to a well-written Fortran program: a heading, which gave the program its name; a "flowerbox" of comments, which explained what the program did; a data declaration section, where all the variables were declared; and an executable section, which contained the actual program logic. Note that this is very similar to the required structure of a COBOL program (Identification Division, Environment Division, Data Division, and Procedure Division; only the "Environment" is different from FORTRAN). Of course, comments could be included anywhere in a FORTRAN program. We were told to include copious comments, especially at the beginning of any embedded internal subroutines.
Data types included Integer, Real, Double Precision, Complex, and Character. Real variables and Double Precision variables were floating point numbers. Complex variables were actually floating point pairs (a, b), representing the value a + bi. Character variables were just character strings; there weren't many built-in functions to help you manipulate character class data. FORTRAN wasn't designed to produce beautiful reports; in keeping with its name (the FORmula TRANslator), it facilitated extensive numerical calculations fairly efficiently. Input and output functions were decidedly crude.
Formulas were easily written in FORTRAN. The symbols + − * / had their normal algebraic meanings (plus, minus, times, divided by). Exponentiation was represented by a double asterisk -- x = y**3 meant that x = y3. There were a number of built-in functons (SQRT, EXP, LOG, SIN, COS, TAN, etc.) that facilitated many scientific calculations. You could also write your own functions and embed them in your program code with the FUNCTION keyword. Alternatively, you could code the function's logic as a subroutine (with the SUBROUTINE keyword, amazingly enough) and invoke the subroutine with a CALL statement.
The Fortran course culminated in a project: individual students, or teams of students, were required to write a Fortran program to do something -- anything -- and then turn the source code in to the instructor, along with a paper describing what the program was supposed to do. I think we were given 30 or 40 hours of connect time per team member to complete the project. I teamed up with my friend Phil Marcus, who was in my Chemistry, Math, and English classes that year. We decided to write a program that could play the board game Risk against human opponents (i.e., us).
Phil and I spent quite a bit of time in the basement of Bridge Laboratory, first writing the program and then, once it was working, rolling the "dice" and trying to conquer the world. The most difficult things to program were the "borders" between countries. Early on we decided that an array with 42 elements would serve as the framework that represented the map of the world. The value stored in Country(i) was obviously the number of armies the computer program (or, if negative, the opponents) had placed in country "i". The tricky part was establishing the connections among the various countries. For instance, how did we represent the fact that "country" #40 shared borders with #38, #39, and #41, and not with anyone else? We eventually settled on a scheme that involved a matrix of "connections", and got our program working with about 20 hours of connect time to spare. We used the remaining time playing the game; we utilized a real game board to keep track of what was happening (we didn't have a graphic interface, just a sequence of "you win" and "you lose" messages from the program). As I recall, we played five complete games. The final score was humans 3, computer 2. We wrote up a report summarizing these results, and were gratified to receive a "P" for our efforts (Caltech uses pass/fail grading for the freshmen).
I didn't use computers a whole lot during my sophomore year. Over the summer I had settled on a major in mathematics, so my class load that year was heavy on math (Abstract Algebra, Differential Geometry, Real Analysis), and light on the physical sciences. I did take one class in Quantum Mechanics (Physics 102) taught by Rochus von Vogt. Robbie was a great deal of fun. I teased him mercilessly about his somewhat careless use of the integral calculus to sum up some wave function over all space and time. He, in turn, threw chalk at me. "Damn mathematicians," he would say. "Too worried about logical minutiae to see the big picture." I wrote my term paper about the positron. Carl Anderson was a professor emeritus who spent most of his time napping in his office. I had a part-time job on Wednesday afternoons, working in a little kitchenette right across the hall from his office, so I had several opportunities to talk to Carl about the train of thought that eventually led to his epic discovery of anti-matter. I included these details in my paper. One day professor Vogt called me to his office to discuss my paper. He liked it, and tried to talk me into a career as a physicist. I demurred. Mathematics is my thing, I explained. But thanks for the A. "Well," he said, "I gave you an A because of the personal notes from Carl Anderson." Oh, I replied. Were you impressed with his erudition? "No. As a matter of fact, I gave you an A because you were able, somehow, to wake him up!"
I lived about a mile off campus during my junior year, sharing an apartment on Euclid Ave with a couple of sophomores (Chris Goldberg and David Kazan) from Lloyd House. I didn't have a car, or even a bicycle, so I spent about half an hour each day walking to and from the campus. I had a few math classes (Probability & Statistics, Complex Analysis, and Differential Operators with W.A.J. Luxemburg). I took quite a few elective courses, in an effort to fulfill the degree requirements in three years.
Caltech installed a spiffy new computer network that year. The central processor was a DEC PDP-11; there may have been more than one of them in Booth Laboratory. I wasn't an EE troll, so I didn't get in there very often. What I do remember is that the 1052 typewriters were gone. They had been replaced by video terminals with a keyboard built right in. It seemed as if those terminals were everywhere. I had a PDP-11 account, and though I never gained much proficiency with the network-oriented commands that DEC provided, I did write quite a few FORTRAN programs for my class in statistics. A lot of the exercises required one to compute values of, say, the Student's T distribution; most of the traditional probability functions were accessible via DEC's library of built-in functons, so the PDP-11 was a convenient shortcut when doing the homework assignments. Why look up numbers in a table when you can tell a computer to calculate the value you need?