Back in college, we Computer Science guys had the distinction of having the second highest number of Math related classes in the university (BS Math obviously comes first). Given what I said about college education in a recent post, you might think that I would’ve preferred if the curriculum didn’t have those classes, and instead added classes on web development and design patterns.
I actually think otherwise.
First off, there’s the whole “BS in Computer Science” thing: I don’t think you have the right to be called a “computer scientist” if you don’t know how a computer works (thus the need for Physics and Electronics classes) or if you’re not familiar with the fundamental problems that brought about the need for computers (e.g. numerical integration, linear algebra; hence the need for higher Math).
On the software development side, I believe that these classes are important because they expose the student to abstract processes.
Software development is full of abstract processes. When you’re asked to build an accounting system, you will have to understand how the client manages their books. When your application interacts with a payment gateway for payment, you will have to learn how to handle all of the cases so that neither your client or their customers would lose money. Heck, even doing “simple” things like making a program that posts a Tweet will require you to learn new terms, new concepts, and new processes.
The main advantage Math has against these real world situations is that the abstract processes you learn in Math, Physics, etc. are “clean”.
Take for example the white board in the pic above. No, I didn’t take it from a Linear Algebra class: it’s actually from a Java training course I taught some years ago. It’s explaining the Laplace expansion, a method of getting the determinant of a square matrix, for an exercise.
In this abstract process, we can see how “clean” it compares with real world situations. First off, the vocabulary for the Laplace expansion is pretty small: just matrix and determinant and maybe minor matrix and cofactor. In the real world, glossary sections usually take up pages in business workflow documentations. The data input is also pretty small compared to what you’d normally find in typical systems.
I think the biggest difference here is that the requirements aren’t “wicked”. The whole process is set in stone, and you don’t have a user that comes by in the last minute to tell you that the process they told you before was wrong.
As “clean” as it looks, exercises like this can still provide valuable experience to prospective software developers. The process is still reasonably abstract; one would need some level of focused thinking in order to understand the whole thing. By honing one’s analytical skills with these “impractical” subjects, one can become a much better developer than someone who just took the classes in order to graduate.
Think about it this way: if a self-proclaimed software engineer can’t wrap his head around something as simple as this, would you expect him to be able to understand a client’s business process well enough to design and implement a working system for the latter?