My junior college courses and first personal computer

At some time in the near future, I hope to retire from my career in computer operations and programming. I don’t know if there will be a retirement party, but if so, it wouldn’t hurt to have written down a little history. The second part of “How I got into computers” barely talks about this.

For a year at least, I still lived with my parents and went to junior college. I’d also gotten a part-time job with Truline Corporation, manufacturer of printed wiring boards. I was supposed to become an electronics engineer like my Uncle Dick, my mom’s oldest brother.

I was on the engineering track but made the mistake of taking on 18.5 units of courses. I’d been a super student in elementary, middle, and high school, so of course I could take on a heavy load of college work. Three problems took me down:

  1. All work and no play made me a weary boy.
  2. My favorite grandmother died.
  3. I was always a nerd and uncomfortable around girls.

But there was one thing I loved about my junior college days: computer programming. We had an HP 3000 mini-mainframe, and I knew where there were a couple of terminals hidden in one of the unused classrooms. I almost never had to wait to use the computer.

I took two FORTRAN classes and a COBOL class. My COBOL instructor, Ruth Harner, had met Rear Admiral Grace Hopper in person at a conference.

I really liked COBOL. I very much liked the idea that if I name my variables and subroutines carefully, then what the computer is actually doing is spelled out in plain English.

My two FORTRAN courses were superb too. The first one was directly useful in my engineering courses because we were learning about eigenvectors and reducing arrays of algebra statements to solvable problems. I remember reading a book about how to lay out physical spaces by creating rules of priority; in a hospital, having the bandage and dressing storage closer to the emergency room is more important than having the restroom nearby. By assigning numbers to relations and multiplying each item in relation to all the others, and then by sorting the results, one could (in theory) get the optimal layout. Better yet, adding detail improved optimality. But the downside (in the book) was that computers were still too primitive to do large calculations. The problems scaled at log(n) but the mainframes of the day simply didn’t have much memory. I could see that the microcomputer tsunami was soon going to grow the amount of RAM available to make this an easily solvable problem.

My other FORTRAN class was even better, even though the instructor didn’t know anything about programming. He was a mathematician, but the college needed a FORTRAN instructor, so he was voluntold. I don’t recall his name, unfortunately.1

His choice of course material could not have been better. He taught us Nassi-Shneiderman flowcharting. Nassi-Shneiderman flowcharting makes breaking problems into “Actions”2, “Loops”3, and “Branches”.

Ruth Harner spelled out that programming is a process of top-down, step-wise refinement. Just like the Scientific Method can absolutely nail any problem in Science, top-down, step-wise refinement can solve any computer programming problem.

The beautiful idea our professor walked us through was to write our FORTRAN with gobs of tab characters, pushing the text to the right where appropriate. When we printed the source code out on green-bar paper, we could then take a yardstick and pencil and literally draw the Nassi-Shneiderman flowchart around the source code. The code execution operated within the flowchart and the flowchart showed the visual flow of the code.

Combine the flowcharting and the top-down, step-wise refinement, and man computer programming is fun!

Of course, at that time the mini-mainframe still has only a text based interface and no software to help. I wouldn’t see Dave Winer‘s ThinkTank program for another five years.

A mildly amusing event was at the end of the semester: the line of kids to type in their programs was twelve kids deep on every terminal, with only two days left in the semester. My best friend, Paul S. (also my boss at Truline) was one of those students. Paul saw me in the computer room, and said he didn’t know what to do! He also needed to work at Truline, and wouldn’t be able to come back in the evening when the terminals weren’t so busy. I looked at the lines and saw that the keypunches were empty. No kid wanted to put their program on punched paper cards…. I was comfortable with them, so… I told Paul, “Hey let’s use these.” He was hesitant because he’d never used one before, but I showed him it wasn’t so bad. I told him about putting the rubber band around the deck and filling out the paper for his job to be run. It worked like a charm. Within a minute of putting his deck in the input basket, the operator grabbed it, dropped it into the card reader and put the printout on completed jobs basket. heh.

One other thing (that sucked) was that some kids stole my high school graduation gift. My dad had gotten me a Casio programmable calculator as my high school graduation gift. We didn’t really have any money (my dad had lost his job), but this was the best he could afford. I don’t recall whether it was the FX-702P or the FX-700 but it really was fully programmable. Those kids who stole my graduation gift were minorities. I’d gone to the student union before my Physics Final. There weren’t any other kids in the student union. I’d put the Casio in my backpack and decided to get an orange juice before taking the big test. I left the backpack on the table because I had never previously had a need to consider that thieves existed.4 When I got my orange juice and went back to the table, it was a little weird that my backpack was unzipped, but I didn’t really notice that because I had the biggest test of my life coming up – that Physics Final. I get to class, get the test, get to the point where I need my calculator… and it is gone. I’m utterly demoralized. I hadn’t really liked Physics and Engineering, but this was going to hurt. Yeah, I flunked that Physics Final, too.

After I burned out on my massive load of schoolwork, I moved out of my parents house, and into a shared apartment. After failing most of my engineering related classes (although I did great with the programming ones), I told Truline I’d go to work full-time in the evenings. Maybe I’d still do some college, but of course, I did not.

There’s a whole story about my not going to college and my dad losing his job. Perhaps I’ll tell it another time.

I still visited my parents, and talked computers with my dad. He had heard about a computer, the Osborne 1, which was a real computer, and it came bundled with $1,500 of software – and for a limited time only: dBASE II (which was worth another $1,800).

My dad helped me buy my very first personal computer. It was $1,795 total. I think he was able to help out with $500.

It was fun, because there was a magazine where I could type in program code listings and then run games (on a ridiculously tiny screen). I learned CP/M and PIP (Peripheral Interchange Program). I played with WordStar, SuperCalc, CBASIC and MBASIC and dBASE II. I didn’t get the modem, although a co-worker of mine had, and he dialed in to the junior college and wrote his code from home. Fancy!

At Truline, I’m seen as a kid with potential, and I start to get moved around. Eventually, I get to do every production job and became the “engineer”. Really, it was my job to take the artwork and blueprints from the customers and turn them into Work Orders. That’s where having done every production job at least once was helpful. But I’m jumping ahead a little bit.

I’d started out as a driller. We’d take the artwork, tape it to a flatbed, and then guide a table riding on dual rails (an XY table) over the artwork. The table held four small electric drills, one on each corner. Where there was a pad on the artwork, I’d align the scope (an angled mirror) and tap the foot pedal. The foot pedal would engage pneumatic locks on the rails, and drop the spinning drills into the PCB material. We’d stack the copper-clad PCB fiberglass four stacks high. With one foot tap, I would drill sixteen circuit boards.

Later, I ran the “programmer” which still used a flatbed and taped artwork, but had finger spinners. As I spun them, the XY table moved, this time floating on air bearings and driven by dual leadscrews. Instead of physically drilling the holes, it put the X Y coordinates on a paper tape. This was G-Code, although I didn’t really do any language work (yet). Once in a great while, I tapped the foot pedal an extra time, and then had to go back and manually slice the errant code out of the paper tape (and then glue the tape back into a continuous strip). Man I don’t know why so much of my early (electronic) computer programming recorded the data on punched paper. The paper tapes were stored in clear plastic boxes that looked like movie canisters. When it came time to drill the panels, I (or someone else) would load the paper tape into an Excellon Automation drill and drill the panels complete with automated bit changes and robotic speed.

Later I was on the router / profiler machine, and with it I actually did write G-Code to move the router bit around to carve the circuit board out of the panel. It was very much like programming an ink pen-plotter – we had one in the engineering department at the junior college, which I’d gotten to put a plot on, using FORTRAN.

So I ended up as the “Engineer” at Truline and started composing Work Orders. All the W.O.s were a photocopied piece of paper, and I crossed out the parts that we didn’t need. I wrote in numbers or text where the build needed things specified. The first line, I think, was (for example) “2 x 8” for a panel two circuit boards wide and eight tall. Later, when IBM had standardized the physical dimensions for ISA add-in cards, we did a lot of “2 x 8” panels.

After a while, I got the idea to write a W.O. generator in dBASE II. I brought in my Osborne and my trusty Okidata dot-matrix printer and showed my creation to the president of the company.

He offered me a job as their in-house programmer – if I would learn to program their mini-mainframe.

I’m gonna be a professional programmer!!! Life is going to be fun!

Next I’ll write about night school and becoming a full-time RPG II programmer on an IBM System/36.

  1. He did harm us students, though. Almost every student (of 31) dropped his class in the first two weeks. Only five of us stuck it out. Because he was a mathematician, he graded on a curve. One student would get one grade, each: A .. F. Yes, the kid who stuck it out and was doing (arguably) B grade work was assigned an F because with five students and five grades, that was the natural map. I got a B, but I do think it was unfair that Brian was given an F for trying. ↩︎
  2. Output, Input, copying, and calculations. ↩︎
  3. Technically, every loop is a branching statement with actions; but, the loop flowchart block simplifies the complex to be easy to see and understand. It maps really well when the programming language we’re trying to get to includes operators like “foreach $item ( @list ) { … }” ↩︎
  4. Is a lack of awareness about thieves White Privilege? If you think the answer is yes, I’d have you look in the mirror to identify the real problem. The only people who excuse thieves are those who are thieves. ↩︎

My introduction to computers

At some time in the near future, I hope to retire from my career in computer operations and programming. It occurred to me that I haven’t written down my history, at least regarding computers and programming.

This post will be a longer version of what I wrote in the first part of “How I got into computers”.

At this point, I’d watched the Wall $treet Week with Louis Rukeyser episode with my grandfather and had seen Mr. Rukeyser say, “In the movie The Graduate Mr. Maguire tells Benjamin: “I want to say one word to you, Benjamin. Plastics, young man: Plastics””, (Louis Rukeyser continues:) “If Mr. Maguire were talking to Benjamin today, he’d say, “Computers, young man: Computers”, and I thought to myself, “I’m a young man….””

So my very first introduction to programming was a calculator. I had previously been exposed to a Texas Instruments calculator with a red LED display – probably the TI-30. It was inexpensive, and the timing was about right: my junior high school math teacher warned us that we ought to learn to do math by hand because we wouldn’t always have a calculator with us1. The TI-30 came out in 1976, which is about the right time. My parents did not have much money, and this particular calculator was in the $30 range. My uncle, who did have money, had bought a different (earlier) calculator (also Texas Instruments), which cost quite a bit more, so I think my dad bought the TI-30 to prove that we could afford one. I liked that calculator, although I didn’t do a lot of math on it. It could do square roots, though, so it was a miracle machine as far as I was concerned.

I later got a TI-58 all on my own. I was employed part-time as a janitor at Sears in the early mornings. The TI-58 was a programmable calculator, and I wanted something I could program. Indeed, it had registers and op-codes for various commands. I remember that book, Personal Programming, shown in the flyer.

It had an op-code, JNZ = Jump if Not Zero, which is an “if” statement that allows loops. If the register is not down to zero, jump (goto) an earlier LBL (label) instruction and do the loop again. Presumably we remembered to decrement the register, so that eventually it did equal zero, and we dropped out of the loop.

So I did have an inkling of what computer programming was like.

My best friend at the time, Greg L., had taken a computer programming course at our high school – in 1978. That course would make him swear off programming forever2: he was taught the language RPG II. RPG sucks. Well, it does if you aren’t super detail-oriented, which many people are not. I’m not saying one has to be autistic to enjoy RPG, but it certainly wouldn’t hurt.3

Greg took a programming course in 1978. I didn’t realize that my high school even had computer programming as an elective course. But for 1979, I signed up. And that class taught FORTRAN. Doctor Larry Ray was our instructor, and he knew his stuff.

FORTRAN was the perfect language for me to learn as my first Third Generation language. If you’ve seen BASIC, you’ve seen FORTRAN.

Let me digress on Third Generation languages. The First Generation was op-codes like I’d seen in the TI-58. The Second Generation was in-between, and RPG and RPG II fit that definition. Third Generation was for languages like COBOL and FORTRAN. You could essentially write your programs in English, and someone who was not a programmer could read the source code and understand what the program was doing.

FORTRAN was fun!

One of the kids even tried programming a text adventure, “pandemic” where we fed in a punched card with a yes/no choice. Unfortunately, the programming wasn’t right, and there was never a way to avoid using nuclear weapons to destroy the infected city. But we had gobs of fun printing up stuff on green-bar paper, and learning to program.

Mind you, this mini-mainframe was primitive. The school district had purchased an IBM System/3 with 4 KB RAM and punched cards, although it did have a disk pack. It was both to run the bookkeeping and accounting for the school district and to be a vocational education training tool.

One day, a student, Mike P., iirc, brought in a new computer he (his dad) had bought. It was a TRS-80 (Tandy Radio Shack 80). Oh my goodness, Wikipedia tells me it was $600 back then, which is about $3,000 today. Anyway, Mike brought it in, and Dr. Ray asked how much memory it had. His $600 microcomputer had 16 KB of RAM, which was four times the memory of our $50,000 mini-mainframe with 4 KB of RAM.

Yes, my first real computer programming was on punched cards, in 4 KB of RAM.

Later, I would learn RPG II, and the lack of memory didn’t matter. RPG II came from the environment of wiring boards, which had zero memory. But in FORTRAN, one of our programming problems was to do a 30-year mortgage amortization report. Dr. Ray warned us that we would be tempted to use an array for this problem. A 30-year mortgage amortization looks like a grid (array) of numbers, and FORTRAN does math on arrays, so of course it looks like a natural fit. The problem, he explained, was that with 4 KB of RAM, we’d only be able to store about four columns and twenty rows of cells in the array before running out of memory. A 30-year mortgage amortization has 360 monthly payment lines….

Yes, we kids tried it with arrays. Yes, I got to see the out-of-memory error code on the front panel of the computer.

As an aside, deep from my heart I want to thank Dr. Ray for adding an extra credit problem: run the amortization report with a single extra principal payment at the top of the loan. That one additional payment multiplied into three times the amount saved. He showed us the power of compounding interest with that little task. Later, when interest rates were higher, the savings were vastly greater. Later also, we got to use spreadsheets, and this sort of calculation is almost trivial to perform. But I wouldn’t have known the math and formulas if we hadn’t gone through the exercise.

So that’s a short history of my use and programming of computing devices, 1980 and prior. We didn’t have modems yet. We barely had screens. The magnetic disk packs were for the accounting data files; students got punched paper cardboard. And if you dropped your card deck, you had a long session of sorting ahead of you, to figure out how the program algorithm needed to be reconstructed.

Next I’ll write about my junior college days.

  1. This statement aged like unrefrigerated milk. Still, that particular teacher was one of my favorite teachers, and I am thankful I got to have Mr. Eitzen as a math teacher in 1976. The class was Introduction to Algebra (if I recall correctly). Yes, I was in the Gifted program, so in junior high we were being taught Intro to Algebra. Every week, Mr. Eitzen posted an extra-credit problem, and we kids were eager to figure it out. Mind you, 1976 was pre-Internet, so when he introduced a problem with the ! operator, all us kids were completely in the dark that there even was a mathematical operation called factorial, much less how to compute it. ↩︎
  2. Well, later Greg would dabble in Macromedia Flash, which was also a programming language, and that programming language didn’t suck. ↩︎
  3. I would later program in RPG II for two-and-a-half years at Truline Corporation. I knew it wasn’t a great language, but I loved being a programmer, building things. ↩︎

How I got into computers

My grandfather on my dad’s side was an immigrant from Germany, between World War I and World War 2. His parents put him on a ship and sent him to the USA when he was sixteen years old. Although it sucked for him that he never saw his family again, in many ways his new future was that he lived the American Dream. One of the things he did was buy stocks. In the 1970’s (before there were VCRs) on Sunday nights, there was a television show on PBS named Wall $treet Week with Louis Rukeyser. So we’d visit, and on Sunday nights, Grandpa would tell us kids to settle down; he needed to watch this TV show.

One Sunday, Mr. Rukeyser had a guest on who was going to pitch IBM as a good stock buy. (In 1974-76 that was great advice. Today I wouldn’t touch them). So during the intro, Mr. Rukeyser says “In the movie The Graduate Mr. Maguire tells Benjamin (played by Dustin Hoffman): I want to say one word to you, Benjamin. Plastics, young man: Plastics. If Mr. Maguire were talking to Benjamin today, he’d say Computers, young man: computers.”

And I thought to myself “I’m a young man….”

I did sign up for a computer programming class in High School. It was an IBM System 3 mini-mainframe, with 4 KB of RAM and punched cards. So I programmed my first computer in 1979. Dr. Larry Ray was our instructor, and one of the most insightful lessons he taught us was to calculate a loan payment schedule, with interest. Wow what an eye-opener the intrerest charges are on loans! But I digress.

My dad thought that getting in to computers was a good idea. I had one friend that got an Apple microcomputer, and my best friend got a Commodore 64. I saw a new computer being advertised that not only was the full hardware package, it came with software too: Obsorne 1. I had the later model one with the blue plastic case. But the kicker with this one was a sale that threw in the dBase II database program. It had everything, for the low low price of $2,200. My dad gave me half the money, and I ponied up the other half.

My last year of High School, I started working at Truline Corporation, a manufacturer of printed wiring boards. I started as a driller. But eventually I migrated up to programming the Numerical Control router (profiler) which cut the boards out of the sheet of fiberglass. This was the G-code programming language. Eventually, the factory needed some space, and moved me across the parking lot in with the president of the company. By this time, I was the “engineer” who measured the artwork, compared it against the blueprints, and created the work order the factory would work. I worked up a program in my Osborne to produce work orders on a printer instead of by hand. I showed it to the president, Jack Cederloff, and he told me that if I learned to program their computer, he’d hire me as their programmer. I was thrilled.

I went to night school to learn the language of their mini-mainframe. The computer was an IBM System/34. I learned RPG II. Eventually Truline moved to an IBM System/36, and I became a professional programmer, eight hours a day, five days a week, for two and a half years. I loved it.