
Industry and University
academics
As a tutor of abstract mathematics for programmers, I often got the question ‘Why are we learning this, aren’t we supposed to do programming?‘. I have spent a countless amount of hours pondering on this question; How should programmers be tutored? What should be learned to be able to produce robust software? Does the University offer an outdated model, teaching subjects that are too abstract to be useful?
To draw an immediate conclusion: Despite the recent trend of tutoring programming with “pure” programming knowledge, I firmly believe in the more meticulous model that the University offers.This is in contrast to learning institutions focusing primarily on concrete knowledge, focusing on shortening the distance of what is taught and what is used in the industry. Holding a Master’s degree myself, one might say I am a little out of position to come to this conclusion. Allow me to elaborate.
Science, computer science in particaluar, is built on layers of abstraction. This is a model that is highly necessary when a product is to be used, like a programming language or a DBMS. Ideally, it should not be necessary to understand the inner workings of something to be able to use it. However, this only goes so far. What if the abstraction breaks? What if we want to make something, not just use it?
The teaching being done at traditional academic institutions emphasizes this approach to software. Both in the matter being taught and the way of thinking that underpins it. Learning a programming language by syntax does not.
The very abstract ability to be able to learn is also something that the University does a lot better than more modern institutions. Knowledge can never be taught in a one size fits all manner. So even though your learn some technology, it is far from certain that this knowledge will be transferrable to a slightly different environment. That is one of the big pitfalls of gaining concrete knowledge without a broader, or a more abstract, perspective.
Like so many other situtations, there is a risk/reward relationship at play here. The risk of learning fundamental principles is way lower than concrete knowledge. This is especially true in an environment where everyone is supposed to be learning the same.
A lot of learning methods fall under the hammer here; “programming schools”, certifications, instruction videos etc. I definitely think that these has their uses. My main point in this post is not to undermine these methods of learning, but to emphasize the value of abstract knowledge.
So when confronted with this question during a lesson on combinatorics for programmers, I would take a step back and appeal to the student’s romantic, knowledge-seeking side. And be met with indifference and “Will this be on the exam?“. Sigh…