With the best of intentions, a process control engineer rewrites some crappy Fortran code
only to apparently make things worse
The year 1969 was still in the very early days of computerized process
control. I had just left the aerospace industry to work as a process
control engineer in the pulp and paper industry. The mill I was
assigned to had recently made the switch from a small Westinghouse
computer that controlled only the Kamyr digester to a much larger IBM
1800 from which we were going to implement mill-wide control.
Several chemical engineers, one technician, a supervisor,
and myself, an electrical engineer, worked in a small block house in
the shadow of the Kamyr digester. A Kamyr digester is a huge structure,
hundreds of feet high with pipes going in and out all up and down the
sides. Wood chips go in the top, paper pulp comes out the bottom. To
get the proper quality of pulp out, it is necessary to add black and
white cooking liquors in amounts based on chip feed rate, moisture, and
One of the tasks for the new computer was to develop a
program to control the liquor feed rates. This task was assigned to
Bill, a chemical engineer who was in the group because he was told to
be and did not have a good grasp on computer programming. After several
months, he had a program written in Fortran that was embodied in a
stack of punch cards 10 inches high. Whenever he made the slightest
modification, it took the computer a very long time to compile his
program and build the coreload – much longer than it took the rest of
us to make modifications since we used subroutines effectively.
Furthermore, when Bill’s program would run, which it did
once each minute, there was almost no time left to run any of the other
control programs. So the computer got very sluggish and it took longer
and longer to compile and build programs such that everyone’s
efficiency went way down.
Although I had my own control projects, I decided to
re-write the liquor control program after work hours over a period of
weeks. I broke the program down into subroutines so that the whole
program did not have to be compiled every time. That solved the compile
and build time problem. I also used integer arithmetic instead of
floating point in the calculations to solve the execution time problem.
After I had tested to program in many ways off line, I was
finally ready to put it on line. I approached the supervisor to explain
all that I had done and why. He said he did not want to implement it
because it would hurt Bill’s feelings. I said I wasn’t interested in
Bill’s feelings. I was interested in good control and worker
efficiency. He said, “Well, not today. It needs to be tested first.” I
told him I had spent hours testing it and I was satisfied that it was
ready. He repeated that he wanted to postpone it. I said it was ready
and I was going to implement it. He left the blockhouse and I turned to
I called the Kamyr operator on the intercom to ask if he
had any problems that would prevent loading the new program. No, go
right ahead. It took me a few minutes to build the new coreload. When
all that was left was to substitute it for Bill’s, I called the
operator again and told him I was ready to make the switch. “Go right
I pushed the button and immediately there was a loud bang
then all the normal outside noises immediately and rapidly died out to
nothing! Oh oh! The mill was still.
I had shame in every cell of my body! What had gone wrong?
I did not know but immediately set about re-installing Bill’s program.
I got it installed and called the operator and told him he could start
things up again. He said none of his instruments had any power.
There was nothing in my program that had anything to do with power. I went out to the mill to see what I could find out. I ran into the supervisor, who told me that he didn’t have time to talk because he had cut some instrument lines going to the old Westinghouse computer not realizing they were still in use.It wasn’t my fault after all! He had cut the wires at exactly the wrong moment, making me and the digester operators think it was me that caused the shut down. I don’t know if they ever really believed me when I told them.
Nevertheless, after some wrangling with the supervisor, my
program was successfully reinstalled without modification and it worked
properly and, best of all, rapidly!