Dumbed down?

Published 31 December 05 11:23 AM
Joel Spolsky wrote an article that has gotten quite a bit of reaction. From Tim Bray saying he mostly agrees to Frans Bouma saying its absurd, there is a lot of feeling that this article has aroused. It aroused some strong feeling for me as well and I wanted to get them down while still fresh. The comments are entertaining as well.

I think most of the posters have missed the point I came away with. I disagree with much of what he says about java and will counter some of those points. But one point is not lost on me. I find it very difficult to work with new graduates. This point rings especially loud with me for two reasons. First, I will be going out to visit with university teachers in the coming year to tackle this very point. I have been very frustrated by the things that interviewees are not able to answer, haven't done, haven't even heard of. I need to answer this question more thoroughly so my expectations of what I will be able to hire are more in line with reality. But the more important point is trying to answer without huge amounts of thought: is a person from school X likely to be able to do the work I need done?

I am currently reading Thomas Friedman's "The World is Flat". One of his chapters is dedicated to the crisis he sees in the lack of young Americans taking on science and engineering degrees, and especially advanced degrees. There is no lack of Chinese, South Koreans, Indians and others pursuing these degrees and indeed they make up over 60% of the graduates in those programs according to figures he quotes. But I can't easily hire those graduates because of both immigration laws and increasingly because these graduates are going home to improved conditions, lower costs and probably greater opportunity at home. In his view, this will increase over time and the Americans like me will mostly have to look at Americans for hires.

Great, I like Americans and want to hire them. Joel's point is that the education received is not rigorous as it should be and this means he can't count on the fact that those that made the degree are smart enough and hard working enough to be trained in the specifics of whatever your environment is. I think he makes terrible points saying that java has dumbed down the curriculum, and that "rigorous training" must use pointers, closures and recursion to be effective. My fist CS101 class was done in fortran with punch cards, but while I got though that one OK, I was a music major and thought it was way to dull to ever consider as a career. I started over again about 10 years later. This time cs101 was everything Joel described. I was working full time, and this one class took up nearly 40 hours per week of class and homework time. It was taught in pascal and honestly I don't remember anything resembling pointers. The teacher was a mathematician who was absolutely maniacal about clean code, perfect procedural style, and perfect comments.  As in the classes Joel describes, at least half of the students weren' t there at the end of the semester. There was outrage and in some ways the students had a point. In part it was the amount of work in that first class which could have been shifted to the second semester. In the end though, I was able to convince a number of other students to write the administration in support of the teacher because in fact those of us that remained learned an incredible amout that semester. This ended up being factor in the teacher's eventual tenure decision, which he acheived. The attention to cleanliness in code has stuck with me to this day and eventually is what led me to OO. But it wasn't enough for me to be a good programmer.

I ended up leaving my systems admin type job and taking a programming job before I finished my degree in '96. I had taken all the core classes though. As I found out during the next few years, in addition to having to learn languages, I had missed some really important concepts during my academic period. In particular, as program size got larger, the concepts needed to deal with that and to still write clean code were a huge stretch for me and led me to OO. I had to really unlearn the procedural style. I had to unlearn the database oriented styles I first learned with the new languages I was working in business programming. Based on Joels derisive comments about OO, he obviously doesn't think those concepts have much value, but I would argue that have at least as much value as learning to write pointer arithmetic in a data structures class. Wouldn't certain design patterns be just as challenging for a new student for the hard thing to keep the bar high? Recursion is not limited to Scheme. Closures can be simulated in languages like c# but there would be no reason not to do that in Ruby whose basics can be picked up in a few days. Closures point to techniques that do need to be taught, those of using program structure rather than procedural programming to solve problems. Concurrency is a problem that is hard in every language. How about cache invalidation?

Really, the problem at hand for CS graduates is to learn challenging concepts over a wide enough array of problems to prepare them for a lifetime of learning. The inital CS learning will hopefully be a little closer to what they will actually do when they graduate to make them hirable, but more important is that they can use their minds to solve problems they are likely to encounter. These problems transcend languages and to pick on java as the cause of dumbed down graduates is silly to say the least. To think that CS programs couldn't think of hard problems in java to solve and filter out those who should find another career is silly.

I actually shared Joel's point of view when I first started hiring people in the late nineties. At that time we were doing a lot of VB programming and a little java and I felt that if I could hire experienced C programmers, I could train them in the languages we were using fast enough and their get it factor would accomplish the rest. Those were some of the worst hires I ever made. Even those that could code with function pointers with ease somehow got completly lost with even pretty basic OO techniques. It was the concepts that were wrong and the hard language issues of C didn't help at all.
Filed under:

Comments

No Comments
Anonymous comments are disabled