Once upon a time there was an American software company on the fast track to going public in an exploding industry. Let’s call them D. The VP of Engineering was a brilliant engineer named Jim. Jim is one of those guys who, in a nerd discussion of “what’s your first computer,” always wins because he tells the tale of how he toggled in the boot loader on his KIM-1 until his fingers bled. Jim was, and is, an engineer’s engineer. All of D’s software was written either in straight C or C + assembly and shipping on DOS and Windows.
Ed was a new hire, 2 years roughly out of school, who had just joined the company off a job doing AI programming in Manhattan mostly using LISP. As a new hire, Jim gave Ed a task which was fairly generic and didn’t require knowledge of D’s large code base: write a memory manager. This was a very abstract task and really required knowing your stuff at a pretty low level. And while Ed, at the time, obviously wasn’t Jim’s equal, Ed was also damn smart. He would later go on to a number of senior industry roles ultimately ending up at one of the industry’s largest and most successful companies (but that’s years and years later). So Ed went off and works on this for about a month. And he prints it out and brings it to Jim for approval.
Jim takes it, rifles thru the pages, thinks a bit and then says “Ok. Explain it to me.” Ed looks at him and says something to the effect of “Well I know it works but it’s now so complex enough that I can’t actually explain it”. Jim hands it back to him and says “If you can’t explain it, it is not engineering. Rewrite it.” And Ed, to his credit, not only finished it faster than the first version but this version he could explain.
To me that’s the very essence of programming versus software engineering. Any idiot can be trained to be a programmer but a software engineer is something entirely different. All engineering is about fully understood, repeatable processes. And at the very of software engineering there is an element of professionalism and understanding exactly what’s going on.
I’ve likely told this story to every single engineering team I’ve ever had. And I’ve had times where I know that an engineer has gone off the reservation and is spiraling in the wrong direction but I felt that it provided this type of teachable moment. I’m not, yet, the type of engineer that Jim is but one of these days I hope to be.
￼  Yes readers, before there were keyboards, there were toggle switches. Think back to 1977 or so.
 The timeframe here was the early 90s so Ed was doing this in the late 80s when AI was hot as the Internet has been since 1995 or so.
 And still is. Writing a memory manager, 25 years later, is still a damn hard thing.
 Pre-internet guys, pre-internet. Its what you did.