In the past few weeks, I’ve been reading about some little aspects of web programming that I’d never really considered the existence of, let alone closely examined: for example, the DOM event model. There’s a deep amount of learning to be done here about the history, the problems that are being solved, and the present state of this system. While reading and researching, I was reminded of a discussion I tried to have with the School of Computer Science’s faculty during a planning retreat, back when I was a student representative. I do not remember the specifics very well because it was years ago, but it was along these lines:
Chair: (to all present) “Are there any other suggestions for areas of improvement in our teaching?”
Me: “I think we should do more to teach people about making applications for the internet — there’s a lot of deep information there, and we don’t really teach it. Sessions and login/password handling, HTTP verbs, caching, CGI, how web frameworks like Rails work — academically, we seem to live in a world where the internet doesn’t exist.” (only I was probably way more awkward)
Chair: “One issue with that is that we’re not in the business of teaching technologies; we teach concepts, and students are expected to be able to figure technologies out on their own”
A Professor: “I include some slides about HTTP when I teach my (optional) 4th year networking course” (which requires an optional 3rd year networking course)
Another Professor: “I teach students about REST and design principles in my (optional) software design course” (which has a reputation as a course for people who want to do nothing but write essays about design patterns)
Another Professor: “You have to use GET requests for the server we you write in second year — we talk about HTTP verbs then (we talk about GET)”
Chair: “Well, it’s not our job to hold people’s hands and give them every bit of knowledge, especially not about specific technologies. We’re not going to make a Ruby on Rails course. The concepts are being taught, you just seem to have missed them”
I am probably editorializing too much, because everyone there was reasonable and (mostly) friendly, but I was given a distinct sense of “learner’s machismo”, that if I don’t know the answer to a question it’s because I’m not trying hard enough, not because there’s anything wrong. I had spoken to several students and gathered their requests: education on the internet was perceived as sorely lacking, and a very useful thing to add.
There is a new stream in the School which is called “Software Engineering”, as opposed to the generic Computer Science program. It sounds like they’re doing some more hands-on work in it than we did in the CS stream, so perhaps new students will have an opportunity to learn these sorts of things. It’s difficult for universities to face the topic of “abstract vs applied knowledge”, especially in the realm of Computer Science, because both sides have valid arguments.
My experience and training at school was not to be a competent programmer. I really didn’t program much over the 4 years at all — probably less than half as much as friends of mine who went through 2-year college Software Engineering programs. And what’s worse, code quality was worth almost nothing throughout my time in school: deadlines were hard and fast and we were typically marked on correctness and presence of documentation. Almost no time was spent reading code or talking about how to write good code, or to design good code. It seemed like the portions of our education that most closely related were talks about coupling, cohesion, UML and sequence diagrams.
Colleges are supplying a high level of technical knowledge for our field, and the candidates seem less confident that they know theory, but appear to be very well versed in it. In my experience, University students seem to be half way between good programmers and good researchers, without being either. Well, now I’ve wandered off topic. Code quality would be a great thing to try to teach, but for now, I want to reiterate that the web is complex, and we need to have more information about creating applications for it included in our education.