I’m strongly considering changing my reading material for my software engineering class. I like Code Complete in a lot of ways, but it really does feel a bit old and a lot of bits are not super well organised or presented. And it’s big without being super nicely modularised. It’s not really a textbook. I’m planning a pretty significant reworking of the course (to consolidate some stuff) so this is the time to change.
I was looking at a text that has some good reviews and decent presence on Open Syllabus and a metric ton of supporting material. I’ve never used supporting material but one can see the attraction!
I’m skimming a copy starting with the intro. The intro of text tends to be a really weak bit especially if it’s didactic instead of tutorialesque, so I forgave the cutesy intro dialogue. There were some helpful fake graphs about characteristic error rates which seemed fun. Then I hit the following description in a list of “kinds of software”:
Artificial intelligence software—makes use of nonnumerical algorithms to solve complex problems that are not amenable to computation or straightforward analysis. Applications within this area include robotics, expert systems, pattern recognition (image and voice), artificial neural networks, theorem proving, and game playing.
Say what? “Nonnumerical algorithms”?!?!?! Right before talking about artificial neural networks??!?! Maaaaybe there’s a specialised enough variant of “numerical algorithm” (written primarily in Fortran?!?) where this is technically not wildly false, but it sure the hell is misleading here (given the standard distinction between symbolic and non-symbolic AI). Seriously bonkers.
But…ok. Does one extremely boneheaded bit of a sort of throwaway warrant tossing the whole thing? Maybe? I want to be fair. I can always guard against this in lecture…I guess. Then I hit:
- Software has become deeply embedded in virtually every aspect of our lives, and as a consequence, the number of people who have an interest in the features and functions provided by a specific application has grown dramatically. When a new application or embedded system is to be built, many voices must be heard. And it sometimes seems that each of them has a slightly different idea of what software features and functions should be delivered. It follows that a concerted effort should be made to understand the problem before a software solution is developed.
Oy. I mean, the dude has chapters on iterative and agile processes, so there’s some course correction. But. Come. ON!
Ok, now I dump it from the list.