Software Engineering : The Missing Course

Never comment your code… if you have to comment it, you didn’t write it well enough.
This was the directive my daughter got in her Software Engineering course from her professor, a Ph.D. in Computer Science.
Another ruby from this Ph.D.’s bag-of-holding: I know you don’t want to be here [in this class]. I don’t want to be here either.
And, since he didn’t really want to teach software engineering, he, well, didn’t.
Instead, he turned it into an Introduction to Java class. I’m not saying Java isn’t useful, but it’s like going into a pizzeria and ordering a Hawaiian pizza (objectively the best kind of pizza) and twenty minutes later the waiter comes out with a tray of sliced pineapple and says “I don’t like pizza, and I know you don’t like pizza, and the cooks really don’t like making pizza, so here’s some fruit. And there’s a 20% gratuity already on the bill. You’re welcome.”
I asked my daughter if her teacher addressed coupling.
She said “Huh? Ummm,” thought a while, “He might have mentioned it once in passing.”
I asked if they’d talked about the formula for calculating coupling (the Fenton and Melton metric — full disclosure: I had to look that up since I’d long forgotten).
Blank stare.
“How about cohesion?”
Silence.
“Did he mention abstraction at all?” I asked.
“What’s that?”
I lost the feeling in my hands from gripping the edge of the table so hard.
“Did you talk about inheritance?”
“Not really.”
I believe that’s when I cracked one of my fillings.
…
I know this will sound bad, and I know times have changed since I entered the business 40 years ago, and that I am absolutely, incontrovertibly wrong… but I’ve always had a strong prejudice against people with advanced CS degrees, most especially Ph.D.’s.
Yup, I actually said that.
I dislike working with people that have PhDs for two reasons: 1) they think they know absolutely everything and 2) they absolutely don’t.
Ever had a guy tell you within two minutes of meeting you they had a Ph.D. from Cornell? My response is always: “Cool. I dropped out of KU.”
One phud I encountered at a meeting in Duesseldorf was so disgusted at me when he found out I didn’t have a degree (Europeans are big on titles, Herr Ingeneur), he wouldn’t even look at me. It was like I was covered in canola oil and his eyes couldn’t get a grip, kept slipping off to the side. I said something to him and he pretended I wasn’t there. It was like a flashback to middle school, except instead of a skinny blonde girl fronting me this was just some tonsured asshole in a crappy suit. I started casually moving around the room to get in his eye line, just to watch him twist in his seat to avoid contact. It was kind of hilarious.
Then, when I worked at US West there was a new hire that came in: a smart-looking person, nice business suit, no-nonsense attitude, introduced as something or other with a Master’s in CS from someplace. It so happened they got assigned to work for my friend Rasta, and after they’d been there a few weeks my buddy came into my office and closed the door.
“You’re not going to believe this,” he said.
He put a 3.5" floppy (yeah, the 1980s) into my machine and pulled up a C program file in Brief ( the standard PC editor of the day.)
“What am I looking at?” I asked.
“This is Erin’s [not their real name] work.”
I scrolled through the file, and scrolled, and scrolled.
“Dear Lord…”
It was a UI (if you can call anything in MS-DOS a UI) for an in-house configuration tool. It should have been a simple task, a toe-dip into our homebrew toolset bathtub.
Nope.
For example: back in the day, to make ‘window’ borders in DOS, we used the double-bars and corners in the ASCII character set: this person had hand-coded a border in each one of their menus. Line by line by corner, each time. No functions. The entire program — one long series of statements.
Navigation and control flow completely with if/else’s and…
(I’m sorry, I need a moment… the memory is just so traumatizing.) there were…
go-to’s.
But they had a Master’s degree. Yay?
…
Anyway, my dogma is that anyone who has spent time going those extra years to school instead of creating something probably isn’t interested in creating anything. And they almost certainly aren’t getting real-world experience.
I know that there are plenty of exceptions to the rule, smart people with advanced degrees — Bjarne Stroustrup has a Doctorate, for instance, but then again he wasn’t in the next cubicle with me at Ameritech.
There must be dozens or maybe even hundreds of people with master’s and PhDs who can truly code.
And I’m sure someday I’ll meet one without a Danish surname.
But until then, my daughter isn’t getting taught software engineering, and while I might be old-fashioned, I do believe you should at least attempt to be good at the work you are being hired to do.
It’s kind of funny (not really), that another professor, the one teaching C++ and databases at the same university, really knew his stuff. I looked at the homework and I could tell this guy had been a practitioner. He had the exercises prepared, they were to the point, the solutions all worked, and his lectures, even if perhaps somewhat dry, were informative.
And she learned C++.
This professor had come to the university by way of industry, so he knew what needed to be taught. But as teaching was his second act in life he is now retired, leaving the young(ish) Ph.D. to reign free in a kingdom of self-assured, blind ignorance. My daughter says he’s a very nice man (and truly, that does count for a lot), but clearly, he’s in the wrong position. He needs to leave the university, work for a decade in a sub-basement cubie of a bank or an insurance company and basically just learn some tough, boring shit before he is ever allowed within 1000 meters of a classroom of impressionable gen-whatevers again.
But, since that’s unlikely to happen, my daughter is still going to need a side of education to go along with her ‘education’. Additionally, a good friend of my other daughter happens to be going to the same school for the same CS degree, and so is facing the same Swiss cheese education. He’s a good kid, and I want him to learn as well. And I figure there must be others out there, those who through lack of opportunity or lack of a decent curriculum, missed some of the basics of the job.
I am certainly another of those who didn’t learn enough in a structured environment — while I was attending night school I kept getting better and better jobs, and before I completed my BS I discovered I no longer needed a degree. I got some great mileage out of a few classes (see Assembler Got my Wife Pregnant), but the vast majority of what I have learned is from sheer stubbornness: through books, through thousands of hours beating my head against walls of code until they broke, and from countless kind souls who pitied my ignorant youth.
All this to say that as a college dropout, I’m aware that I’m in no way qualified to teach software engineering. But since all available evidence proves that lack of ability isn’t an impediment in the field of education, I’ve decided to give it the ol’ college try and write my daughter the course she paid for but didn’t receive.
Thus, this is the introduction to my series of articles on Software Engineering and will all be published under The Missing Course series title, to differentiate them from those on travel and consulting. They will be in no particular order to start with, but as I continue on they will be collated into more logical divisions.
I hope to address some what I would have thought were common subjects that are apparently being missed in some classrooms (I don’t presume to know what goes on at MIT or Stanford, etc.), but which I have found to be important over the years.
Now, stop reading and go code something! Computers are for creating, not watching Tik Tok!
PS. Re: The Ph.D. stuff — that was then, and this is now, and it’s probably all changed. As I said, I know I’m wrong (though you’ll never convince me otherwise), so don’t bother filling the comment section up with what an idiot I am. I know already.
PPS. I know the professor picked up the non-comments thing from the Agile book. It’s still bullshit.






