In the early 1980s, a job opened up at Fresno Unified School District’s Data Processing Center. Educational Software Development sounded exciting, so I applied for it.
This Data Processing Department was not where one merely uses a ready-made program. This was no commercial off-the-shelf school administration or management or campus solution. Today, one might buy solutions from PeopleSoft and other companies for a couple million dollars.
I had no practical experience programming IBM mainframes in Fortran, COBOL, Assembler or JCL. But since they provided training, I applied.
The Aptitude Test
The manager, Bob Michellini, required applicants to take an aptitude test focused on logical and mathematical reasoning. The test was supposed to be impossible to complete, but since this was my strong area, I completed the exam quite early, checked every answer, and still turned in the exam early.
The proctor looked puzzled and asked me if I was sure, and I told her that I could not find anything more to do with the test as I had checked it over well. So, she took the exam and scored it, and apparently I obtained an extraordinarily high score and got the job.
Video Training in the Dungeon
Immediately, I was taken to a room with a television set, a VCR, and several training video tapes to teach me Job Control Language, COBOL programming, the Interact system, the IMS DBMS, the 3278 terminals, card punches and readers, the IBM 370/148 system in general, and other things I have forgotten during the last 45 or so years.

After completing my training, I emerged an IBM programmer ready to go to work for the Educational Research and Testing Department.
Educational Research and Testing Software
My first experience in educational software development involved stacks of punched IBM cards with COBOL and Fortran programs wrapped in Job Control Language (JCL).
My Senior Programmer/Analyst or SPA, Paul Messingheimer, a truly kind hearted gentleman, guided me well. I respected and appreciated him greatly. However, I often irritated him with my youthful curiousity. This, and my reluctance to edit a program without knowing exactly how it might affect the rest of the program or result in irreversible damage.
Systems Programmer Pranks
The brilliant folks in Data Processing had an amazing sense of humor. Irritating sometimes, but always in a funny way. Very playful, yet skilled and responsible. Corky and Dean held the systems programming duties occasionally calling out to one of us as we passed their office.
“Hey, Dan”. I turned and walked back to their office.
“Would you be in your office right now if I hadn’t called you?” Grrrrrrr.
“By the way, we’re married.” They would wait for a doubting look and the other would say, “Yes, but not to each other.”
We were under strict moral obligation to act irritated so as to keep the systems programmers happy. But they were truly a joy to work with and their wacky humor was much loved.
Systems Crashes and Backgammon
When the mainframe went down, we experienced the shortcomings of a monolithic mainframe system. All of our terminals were tied into the same computer running Interact. It is what we used for coding, compiling, and running our online programs. Each line on the terminal was like a computer card to the system, and it was entirely in text. Data fields started with a hidden character so that users could pull up a screen and fill in the fields and send the screen of data back to the computer with a reference to the next routine or program to run for processing this data.
And the system went down sometimes. So, what did we do?

We called IBM and waited for the system to be repaired. And backgammon sets would come out and we’d play games since we could not program without our computer working. You would think we must have some other kind of work available to do, but apparently we did not. And if the downtime was too long, management would simply let us go home.
Spaghetti Code
PROCEDURE DIVISION.
MAIN-PARA.
DISPLAY "Enter a number: ".
ACCEPT A.
GOTO PARA-1.
PARA-1.
IF A > 10
ADD 5 TO A
GOTO PARA-2
ELSE
SUBTRACT 2 FROM A
GOTO PARA-3
END-IF.
PARA-2.
MULTIPLY A BY 2 GIVING B.
GOTO PARA-4.
PARA-3.
DIVIDE A BY 2 GIVING B.
GOTO PARA-4.
PARA-4.
IF B < 20
GOTO PARA-5
ELSE
GOTO PARA-6
END-IF.
PARA-5.
ADD A TO B GIVING C.
GOTO PARA-7.
PARA-6.
SUBTRACT B FROM A GIVING C.
GOTO PARA-7.
PARA-7.
DISPLAY "Result is: " C.
GOTO MAIN-PARA.
Many of our programs at that time were old and developed before structured programming was a thing. And we had a manager who was so much a stickler for structured programming that he had written a parser to block programs from being saved to disk if they were not structured. And I was equally a stickler.
Sometimes I would be asked to customize some code, and I would want to know about a part of the code and Paul would ask, “Why do you need to know that? Just change this and that.”
While I typically complied with instructions, after a while on the job, I tended to leave the spaghetti programs alone and create a second program from scratch that provided the same functionality but in a more maintainable, reliable, performant manner, and it would become the new one.
Educational Software: Payroll and Personnel
Bob Yoder had seniority on me by many years, and he wanted to work in Educational Research and Testing. So, Bob Michellini, our manager, asked me to change places with him, so I did. And he was in Payroll and Personnel.
Gary Duran, the SPA of Payroll and Personnel, said I was the most productive programmer he had worked with, and hearing that from him was an honor I cherished. And there was apparently another reason I was selected to change places with Bob Yoder and come into Gary’s team. And that was tied to my microcomputer experience.

The IBM PC
IBM came out with a new computer called the Personal Computer or PC.
Unlike earlier computers, this was not an 8 bit microcomputer running on an Intel 8080 or 8085 or even a faster Zilog Z80 with more processor instructions running at 4MHz (not GHz, MHz). The 8 bit processors typically maxed out at 64K of memory, but the PC had much greater capacity.
Strangely, the PC used an Intel 8088 CPU, a 16 bit CPU multiplexed onto an 8 bit data bus. Furthermore, the 8088 used a special register adding 4 additional bits to the address bus. This allowed the PC to address up to 1 Megabyte of memory! Enough to give me a lump in my throat at the time.
Well, we got two of these firebreathing laptops with more than 64K of memory! And instead of running an interpreted BASIC interpreter, they ran dBASE II+, IBM Compiled Pascal, and Compiled BASIC. They also shared a massive, whopping 5 Megabyte Corvis hard disk and each PC had both an Irma 3278 Emulator board and a 3780 board to send and receive data from the IBM mainframe.
Substitute Teaching System
Fresno Unified needed another kind of educational software–a substitute teacher assignment system. Gary and I would develop this software to
- Send JCL to the mainframe to run a COBOL program we wrote.,
- Capture the data on the teachers from the mainframe,
- Store it into the dBASE II database,
- Provide software for administrative staff assign substitute teachers each morning to fill in for teachers who called in sick.
And to do this, we needed to pull in the list of substitute teachers, their degrees, their credentials, and their last assignment date. We then sorted the teachers first by their qualifications–degree first, minor second, credential third.
In retrospect, Gary and I should never have reverse engineered the dBASE II+ format. But this allowed us to read and write the raw database files in Pascal or compiled BASIC. I would never do that today. Afterward, I wrote code to use the 3780 emulator to run programs on the mainframe to pull in data.
I also wrote a text based user interface. So, in the end we created a system used for assigning substitute teachers. And our system could track which teachers last received an assignment and use that to even out the assignments fairly.

UCSF Brain Research, Leaving Educational Software for Unix
And then after about 4 years with Fresno Unified developing educational software and loving it, a friend told me about a new and amazing operating system called “Unix”.
I bought a book on Unix, read it in one day, and resigned from Fresno Unified to take on a volunteer job with a Neurologist and a Psychologist in a brain research branch of University of California, San Francisco.
At UCSF, I learned C programming both on the PC and on a Vax 11/750 running 4.2 BSD Unix while another guy worked on finishing his PhD in Computer Science. While he was completing an advanced degree, he struggled with his programming skills, so when I finished my graphics and statistics programs on the PC, I moved over and helped him complete his handwriting analysis program in C, and the scientists were able to call in subjects for their studies and perform the tests successfully.
The program I wrote for the PC would display large squares and dots on the screen to detect the subject’s ability to detect left-right and right-left movement quickly and accurately. These patients had damage in the parietal region of the brain.
The work did not pay well, but it was extremely satisfying and interesting.
It satisfied my insatiable need to pioneer new innovative solutions. And for that, I felt extremely grateful.
Newsletter
Please sign up for my newsletter if you wish to be updated!
Thanks!