Lessons Learned from Life as a Software Engineer


I have been known to mention two experiences in my life that have made me realize there are two kinds of people.  One experience was real, the other imagined.

The real experience came from my years as a software engineer supporting and developing code for the circuit simulation program called SPICE (Simulation Program with Integrated Circuit Emphasis).

Computer programs are broken down into subroutines.  Each subroutine has parameters which are its inputs and outputs.  In Spice, there was seldom an explanation of what a subroutine was trying to accomplish and seldom an explanation of the meaning of its inputs and outputs.  If you knew either what the routine was trying to do or if you knew the meaning of its inputs and outputs, you would have a much easier time figuring out the missing piece of information.  In the case of SPICE, you would start by making some assumptions about the two missing pieces of information, and then go round and round in circles trying to reconcile the two things.  If you succeeded in finding out what was going on, you frequently realized that your initial assumptions on both what the routine was trying to do and the meaning of its inputs and outputs were quite different from what was actually correct.  Of course the effect was multiplied because to figure out what a subroutine did, you had to figure out what the subroutines inside it did.  You were continually going up and down the hierarchy of subroutines trying to make sense of it all.  In bugs I found and fixed in SPICE, I could frequently detect that the person who wrote the bug didn’t fully realize what the routine was trying to do or what the inputs and outputs were supposed to represent.

What I learned from this experience was that I would never write computer programs in this way and inflict this amount of pain on whomever might have to work with the code I had written. As I saw other people work in this domain, it seemed to me these others took a different lesson.  The lesson they seemed to learn was that the code in SPICE was an example of how a PhD student ought to write code and lesser people should aspire to that same style.

The imagined experience was thinking about the hazing rituals in fraternities.  There too, I expect there were two lessons you could take away from that experience.  The one I took away from imagining it is that I would not like to go through that experience, and I would never want to inflict that kind of punishment on anybody else.  The other lesson I suppose you could learn is that if the people who did it to you could get away with it, you were certainly going to take your turn inflicting this on the next set of initiates.

I suspect that you can see these life lessons and my reactions to them reflected in many of the things I post on this blog.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.