What Makes a Man? - What did maddog study for a career in computer science?

Paw Prints: Writings of the maddog

Jan 15, 2015 GMT

Jon maddog Hall

I was recently asked by a fifteen year-old Brazilian friend of mine, Samuel Flores Moraes, what courses I took in school that influenced my profession. This is a very good question for a young man to ask, so I thought I would take the time to answer him in my blog.

From an early age I have always loved reading. I read a lot of books, both fiction and non-fiction.

I also liked taking things apart to see how they worked. Some things I took apart and could not re-assemble, such as an old mechanical clock that once belonged to my grandparents. Fortunately for me the clock was no longer in use and was not a keepsake, so my parents were not too upset that it ended up in pieces.

My father also worked at a toy store (every boy's dream) and on weekends my father gave me jobs assembling complex toys, bicycles and swing sets as I got older. Learning to read and follow directions were key to these tasks.

I also was the navigator on family trips, learning to read maps and gauge distances.

As I got older I participated in the Boy Scouts of America, and learned a lot about how to take care of myself in terms of first aid, cooking and other necessary tasks. This came in handy one day during my 16th year when my mother was in the basement cleaning and a large pane of broken glass fell from a picture frame onto her leg, causing large amounts of blood to spray from an artery. I heard her calling for me, and seeing the blood, I grabbed some clean rags, applied direct pressure to stop the bleeding, and told her to hold the pressure while I looked for more sterile dressings. I found some sterile bandages and some antiseptic, bound the wound, and drove her to the hospital for stitches.

This brings up one major point of education: Education is often best when it is proactive, and you receive the education before you need it.

In high school I took three years of electronics “shop”. While other students were learning how to make things of wood or metal or fix cars, my class (under the instruction of Mr. William Roberts) was learning how to build things from electronic components such as resistors, capacitors, coils, tubes and relays. The components were very expensive back in those days, so we would take old TV sets and radios that no longer worked and take them apart for the components. Then we would design new units on breadboards that used the salvaged parts.

One mistake I made in high school was not paying too much attention to trigonometry, which I was taking in my senior year. This came back to haunt me when I started taking calculus in university.

One good choice that I made was to take a summer course in personal use typing the summer before I left for college. I figured that rather than find someone willing to type my papers the night before they were due, that I could just type them myself, never dreaming that I would spend many future hours in front of keypunch machines and (later on) computer terminals. My parents bought me a mechanical, portable typewriter that I still have, and I typed many of my papers on that machine until I started using text editors and (later) word processors. Another example of receiving education before I needed it, rather than after I needed it.

I had decided that I wanted to study Electrical Engineering, and I started going to Drexel Institute of Technology in Philadelphia, later to be renamed to Drexel University. Drexel was a cooperative education university, which means that not only did I study my courses, but I had to work for three six-month shifts in industry, and be graded on my work, in order to graduate.

For those people who have never attended university or think that a university is supposed to train you for a job, that is NOT what a university (and especially a university like Drexel) is supposed to do:

The undergraduate university program is designed to teach you how to teach yourself, and to help guide you in the underlying knowledge necessary to be a good employee, a good manager and a good citizen of your country. The fact that you know how to “do something” when you graduate is a secondary benefit.

This may surprise people, but when a person trained at a university finds their job obsolete, they can often train themselves to do something else. They typically do not have to go back to the university for re-training.

Philadelphia was a great place for a university student because they had a lot of used book stores. I bought hundreds of books on all types of topics. Chemistry, biology, beekeeping, history, hobbies such as clock repair and other things. Many of these were reference books, purchased so I would have them handy to answer questions I would have in the future. You might think of them as a hard-copy Google search engine in 1969.

I started studying electrical engineering at Drexel, but my weakness in mathematics made it difficult for me to understand Calculus, Differential Equations and other higher mathematics courses. I always understood the previous mathematics class after I took the next mathematics class. And because mathematics was so integral to the study of Physics, and Physics integral to the study of Electrical Engineering, I was not doing the best in my other classes.

I found in university that many students never adapt properly from grade school education and therefore flunk out. It is a fact that most of the information needed in university does not come from the professors' mouth. Unlike grade school, where the information on the test comes out of the mouth of the teacher sooner or later, university professors only “point in the general direction”, and expect you to find the information, discuss it among your other classmates and often “teach yourself”.

This was something I used to great advantage at my cooperative education job with the Western Electric Company (the manufacturing arm of the Bell Telephone System) in Baltimore, Maryland. I had signed up for a correspondence course on how to program the IBM 1130 computer. This computer and FORTRAN were used for engineering tasks inside Western Electric, and was typically programmed in FORTRAN, using punched cards.

From my correspondence course I learned how to program in FORTRAN (the book even taught us how to use the card punches), and started doing simple programming jobs for my boss and mentor John Kammer, who was a very good senior electrical engineer at the plant.

John Kammer could do anything in electrical engineering and electronics, but computers were not something he had taken any time to understand, and when I could solve problems with the computer that would take him hours or days with paper and pencil, he was astonished.

I kept returning to Drexel for more classes, and there I found a small lab of computers from Digital Equipment Corporation (two PDP-8 computers and a Link-8 computer) and one from Data General (a Nova). These computers I learned to program in assembly language by reading books, as well as program them in languages. But they only had 4000 words of memory, so the programs had to be small.

I should also say that in those days there was no “computer science” or “computer engineering” degree. If you wanted to do something with computers, you had a different major and a minor in “those computer things”. You used a computer to solve your own problems in your own profession. You did not typically write programs for someone else. I even had a professor tell me that I would never be able to make a living as a “professional programmer”. I am still waiting to find out if he was right.

I joined an organization called “DECUS” (The Digital Equipment Corporation User's Society) which had a library of Free Software, where you paid only for the copying charge to put the programs onto paper tape. I also helped form the Drexel Computer Club, and spent some of my time helping other people learn to program computers.

Eventually I decided to switch my major to “Commerce and Engineering”, which was half engineering and half business. Since I had most of my engineering courses already, I took business courses such as marketing, accounting, management, economics and more computer courses, such as comparative languages, data structures, operating design and compiler design.

While I had (and still do have) an interest in electronics, my new interest was in these “computer things” and the instant gratification I got when my programs worked.

It was at this time I learned some more important facts about studying in a university:

for every hour of study in class, you need to spend at least two hours studying on your own

you never study to try and pass a test. You study because you want to learn the information, and then passing the test then comes “easy”

the test is there to find out what you know and don't know, and whether the professor is doing their job in conveying the information

After this point I never received a GPA lower than a 3.8 out of 4.0, and I made the Deans List on graduation from Drexel University.

I did not go back to the Western Electric Company to work after graduation. They did not need me full time doing their programming. I had job offers from various companies, including Bell Telephone, to program in languages like COBOL or other high level languages, but I wanted to program in assembler language.

Eventually I got a job programming for an insurance company, Aetna Life and Casualty in Hartford, Connecticut, which is where I learned my next rule of education:

Your first job is very important to your education.

Just as I had learned that undergraduate education was “only a guide”, the first year at Aetna took a person who “knew about computers” and turned them into a programmer on a team. In retrospect it is obvious. How can a series of impossibly short courses of approximately 30 contact hours apiece provide the same solid knowledge that actually working with something 40 (or 50) hours a week, 50 weeks a year? The university provided the breath of knowledge and the skeletal information, the work provided the depth of knowledge and experience.

At that time Aetna Life and Casualty was the largest commercial user of IBM equipment in the Free World. Aetna automatically ordered two of everything that IBM announced.....no salesperson had to call us. If IBM announced it, Aetna ordered two of them.

I did not know IBM assembler before I worked for Aetna. At my interview they asked me how I had learned PDP-8 assembler language, and I told them that I had read a book and practised. They asked me if I could learn IBM assembler language. I asked if there was a book....and there was. So I taught myself IBM 360/370 assembler. And I both wrote programs in assembler and helped make other people's programs run faster.

While at Aetna I also enrolled in one of the first Computer Science Masters Degree programs offered through the Hartford Graduate Center, a branch of Rensselaer Polytechnic Institute (RPI) with headquarters in Troy, New York. I graduated with an MS in Computer Science in 1977. The university provided a Remote Job Entry system to a computer in New York for the students. I did all of my graduate work using the massive computing power of Aetna.

Right after I received my MS in Computer Science I took a job teaching at Hartford State Technical College. HSTC gave an associates' degree in computer science, and that is where I learned another tenant of education:

You never really learn something until you try to teach it to someone else.

and its corollary:

in order to learn something fully, try teaching it to someone else.

By this time I had taken operating systems and compiler design both at the undergraduate level and the graduate level, but I still struggled to read the books and keep ahead of the students. After teaching the course, I finally really understood the material. When you teach something, you are not allowed to “skip something because it probably will not be on the test”, nor are you allowed to “halfway” know things.

It has been twenty years since I last had to teach compiler theory, but because of my experience at HSTC, I could go to a white board and start teaching it today.

While I was at HSTC I also rejoined DECUS (Aetna had no DEC equipment at the time) and started becoming familiar (once again) with what today we would call “Open Source”. I ordered software from the DECUS library for my PDP-11/70 running the RSTS/E timesharing operating system and the PDP-11/34 running RT-11. I paid only for the copying and handling charges. The software itself was “free” (as in freedom).

In the time period of 1977 to 1980 not too many high schools had computers in the classrooms, and not too many people had computers at home, so many of my students had never touched a computer keyboard before coming to our classes. To take them from knowing nothing to being able to write a simple compiler or OS in two years was an accomplishment of which I am proud.

It was also at HSTC that I learned to separate the four main jobs of a university:

create a syllabus of things a student needs to perform a basic job

guide them through that syllabus

certify that the student has actually learned the material

Provide research to help move society forward

Each job I have had in my career used skills I have studied in university, or learned on the previous jobs, or read from books as I went along, and built upon those basic skills.

What university level teaching did NOT do (or SHOULD not do) was teach about a specific product.

The student is there to learn how to use:

an office package to automate their office, not how to use Microsoft Office or Corel Office or some specific office project

a database to help organize their data, not how to use Oracle or some other specific product

networking in general, not CISCO networking

While it is fine to use products to illustrate an example of these major items, the focus should be on the fundamentals as applied to many different products and in solving the problem that is presented.

With a certification, you are given a set of objectives, just as in a syllabus in university. You can then learn those objectives using any distribution or any method you wish, then you take the test, to make sure you know the information. It is that simple.

If what you learn is a product, then when that product changes or that company goes out of business (examples: Nortel, Wang, DEC, Compaq, Kodak), you have to go back and learn “another product” again. The argument that people use of teaching “the industry leader” is poor. You can not tell me that your student is smart enough to learn brain surgery, but too dumb to pick up a book or manual on an office product and not be able to learn the product in a day.

When I left HSTC, I was hired as a systems administrator for Unix systems at Bell Laboratories. I had never seen a Unix system before, but with lots of documentation, background knowledge from other systems, and two mentors (Tom Merrick and Bob Wessling) I quickly learned about Unix and made contributions to the system. My underlying knowledge of computer systems helped me in that task.

Eventually I started working for Digital Equipment Corporation. While I started as a software engineer, my knowledge of electronics, my talents in teaching, making complex items simple and my training in business eventually led me to product management and technical marketing, where I met Linus Torvalds and saw Linux for the first time. As my career became more management oriented rather than technically oriented, both the business courses I had at Drexel and the deep technical training I had served me well over a 45 year period.

In summary, while many people believe they will never use many of the things they learn in high school and university, I have found over the years that I have used almost every single thing that my instructors tried to teach me, and more. The trick is to learn the broad basics, and to build on top of them, so after you leave the university you can train yourself for the rest of your life.