I started my professional career in May, 1988, at a newly formed environmental engineering firm of less than 10 people in Knoxville, TN. I had just finished my Master’s degree in Geology but I had already been programming computers since 1977.
For scientific programming, we used Basic, Fortran, Pascal, C, Assembler and a few other tools. Computers didn’t have a lot of memory or speed. Object oriented compilers and codes were not mainstream. We had to add math co-processors to the motherboards to get better computational performance. Today’s typical smartphone has for more computational capabilities than the computers we used then.
If you like this article and would like to see more of what I write, please subscribe to my blog by taking 5 seconds to enter your email address below. It is free and it motivates me to continue writing, so thanks!
The first job I was given was to get a 2-dimensional groundwater flow computer code running on a Personal Computer (PC, as they were called in those days). This Fortran code was developed to run on an IBM mainframe computer at the Oak Ridge National Lab.
My job was to get the source code off a tape drive and convert it to run on a desktop PC. The first challenge I had to overcome was to realize that the mainframe code was 7-bit ASCII and the PC required 8-bit ASCII. Once that bit-conversion was made, the second challenge was to get the code compiled and linked to be able to handle the size of the problem we were trying to simulate.
We had to compile and then separately link to libraries that provided functionality such as math routines, graphics routines, etc. Compiling and linking were separate processes completed with separate stand-alone executable codes.
For this task, I was using a Fortran compiler and linker from a company called Microsoft. There weren’t many choices available at that time but in future years the Watcom, Lahey, IBM, SVS, and other Fortran compilers would be invented.
Since the computers had very limited memory, the usage of every byte was important. I literally had to sum-up all the bytes used by all the variables and arrays for any model that I was going to create to make sure that enough memory would be available on the computer to run the executable.
Through the first few years of my career, I got to be really good at understanding items like memory allocation, deallocation and total consumption, computational speed, optimization, profiling, debugging and other detailed nerdy topics like those. In other words, I was becoming a computer programmer.
After a couple of weeks of unsuccessfully trying to get the code to run, I determined that the Microsoft linker had an undocumented memory limitation. Over a week or two, I made several calls to Microsoft and talked directly to the people in the Fortran development group.
I explained the problem I was having and told them the exact value (in terms of kilobytes!) of the linker memory limitation. They didn’t believe me, even after I explained to them how I determined the problem and determined the limit. I pleaded with them to remove the limitation so that I could get my model to run. They denied that this problem existed and essentially told me to go away and quit bothering them.
So I did just that. I moved the project along by using another fledgling compiler and eventually succeeded in getting the model to run. I had solved the problem and a 20-year numerical simulation career began.
At the time this occurred, I didn’t know much about Microsoft. To me, Microsoft was some relatively unknown company in Seattle that produced a few software products. All that I knew was that I had used DOS and GW Basic and their Fortran compiler. The hottest item they were producing at the time was a new operating system called OS/2. Windows had not been invented yet and Microsoft hadn’t grown into the powerhouse company that it would eventually become.
The Phone Call of a Lifetime
One day about two or three months later, I was sitting in my office when I got an unexpected call on the land-line telephone! It was the leader of the Microsoft Fortran development group. The call went something like this:
Microsoft: “We want to offer you a job. We want you to come to Seattle to work for us.”
Microsoft: “You were right about the memory limitation. It was exactly as you described it to us. Nobody in the development group knew about it. We figure that anyone that could see this problem without having access to our code needs to be working for us. So that is why we want you to work for us.”
Me: “I’ve never been to Seattle. I’m just a few months into my career. I have no money saved, I have student loans and my family all lives in Chicago. It would be hard for me to think about moving to Seattle right now…”
The rest of the conversation has been lost in my fading memory space, but what is very, very clear to me even now is that I declined the offer. How was I supposed to know what was going to happen with Microsoft?
I had no idea that I just had the phone call of a lifetime. There was no internet to immediately gather information on Microsoft. Bill Gates was not a household name.
I often think about those few minutes on the phone and wonder how my life would have changed had I decided to take their offer. Would I have become one of the wealthy Microsoft Millionaires if I had taken the job?
Thinking about this story makes me realize how chaotic life really is. One decision can change your path forever. The paths that you eventually lead through life cannot be predicted a-priori.
We can look backwards and understand where we have come from (i.e., “hindsight is 20/20”), but we cannot predict where will be going. The unpredictable nature of life is both exciting and scary. The only things we can do to lead the best life possible is to try to make good decisions and to minimize our own stupidity.
For me, I’m very happy that I chose the path that I did because I have my family and have had some truly great experiences throughout my life. I have made many friends and enjoyed all aspects of my life. To quote Joe Walsh: “Life’s been good to me so far”.