How to pick a good Computer Science degree May 16, 2007
Posted by Imran Ghory in Computer Science, Software development.11 comments
I recently came across a scathing article by a former Computer Science professor from the University of Leeds attacking his former department for “dumbing down” their curriculum. In the discussion on reddit that followed the question was raised about which universities still have good compsci departments.
I’d thought I’d try to answer that indirectly by coming up with a set of criteria any prospective student could use to judge for themselves how good an undergraduate compsci course is.
So without further ado the criteria:
- How difficult are the modules/subjects offered ? – do they include math heavy topics such as cryptography, complexity, quantum computing, speech processing, etc. Do they include theoretical topics such as information and concurrency theory. Are the programming courses in depth, do they cover functional programming and language engineering or are they just “what is a loop” lectures.
- Are there specialist units/subjects taught by researchers in that area ? – If a uni is teaching unique courses that are only available at a handful of universities around the world due to the specialisms then that’s probably a good sign. It means lecturers are driving the curriculum and you’re likely to have lecturers who are genuinely passionate about what they teach.
- What’re the average entry grades for students ? – this matters for a number of reasons, not least because having intelligent motivated students means that lecturers won’t have to dumb down their material. Lecturers have to make sure they’re teaching at a level right for their students. If you’re an A* pupil in a class of D students then you’re going to feel unchallenged as the work will be aimed at a level far below you.
- Who recruits at the university ? – Large tech companies tend to have a very good idea which universities are producing the best compsci graduates based upon the quality of those graduates they’ve hired. So look at a university’s website and see what companies regularly recruit there. Most big technology firms, investment banks, consultancies, etc. have campus calenders on their websites showing where they recruit.
- What do students do for final year projects ? – if the majority are doing “e-commerce websites” then it’s probably time to run away. If the majority are doing “hard-core” innovative and interesting computer science projects across a range of areas then it’s probably a good sign.
Does anyone have any other suggestions for good criteria – can we establish the equivalent of The Joel Test for universities ?
Programming Knowledge versus Programming Ability May 16, 2007
Posted by Imran Ghory in Uncategorized.54 comments
For some reason the single most common type of question on “programming language” exams seems to be of the form:
Which of the following are invalid variable names in Java?
- $char
- 1MyNumber
- case
- _int
(paraphrased from SCJP Exam for J2SE)
Imagine what a similar question might be in a football test:
Which of the following would result in a direct free kick to the opposing team ?
- attempts to kick an opponent
- attempts to trip an opponent
- attempts to jump at an opponent
- attempts to spit at an opponent
(paraphrased from the FIFA rules)
While it might be slightly useful for someone playing football to be able to answer the above correctly, the entire concept of trying to measure someone’s ability by measuring their knowledge is fundamentally flawed.
And that’s the fundamental problem with question posed above, as well as with programming exams in general.
There seems to be a popular misconception that if a software developer knows a lot about programming then it follows that they’re a good developer.
Returning to the football analogy imagine you were back at school picking players for your team. Who gets picked first:
- The kids who are athletic and good at football
- The kids who are athletic and can make a good run down the pitch, even if they’re football specific skills aren’t that great.
- The kids who aren’t athletic but know how to play football
- The kids who aren’t athletic and know nothing about football
If you had to pick a team now, made out of players you didn’t know anything about. how would you pick – would you give them all an exam about football rules and theory or would you have them run around the pitch kicking a ball ?
Hopefully most people will pick the second option and end up with a team that can actually play football well. However in the software profession there seems to be a sizable contingent of developers who hold the view that if someone knows a lot about programming then they’re a good programmer.
But it’s not just the pro-certification lobby who think like this, to take another example from a blog I read last month:
I don’t do well in programming tasks during interviews, and I’ve love someone to come into my comments and tell me I can’t program based on this event. No, I’ve only faked it while working for Nike, Intel, Boeing, John Hancock, Lawrence Livermore, and through 14 or so books–not to mention 6 years of online tech weblogging.
(from here, apologies to Shelley Powers for picking on her blog, but it’s one of the more eloquent blog posts on this topic that stuck in my mind, hence me quoting it).
Note that everything in that paragraph was about knowledge rather than ability. I’ve seen the CV’s of some vastly incompetent programmers who I’ve known and they’ve had phrases on their CV along the lines of “was involved in project X at big company Y”, when in actuality they were relegated to writing test scripts. Yet they could perfectly well talk about the project, what the development steps were, what the problems encountered were, how the team solved them, etc. These are all knowledge questions, not ability questions.
Similarly writing a book speaks about your knowledge of a language, not your ability as a programmer. Consider the following quote, would you want to work with this developer on a C++ project:
I have not written production software in over 20 years, and I have never written production software in C++. Nope, not ever. Furthermore, I’ve never even tried to write production software in C++, so not only am I not a real C++ developer, I’m not even a wannabe.
If you hadn’t already guessed – that quote is from Scott Meyers (one of the worlds most respected C++ authors). Not that I doubt Scott’s programming ability; but hopefully it does show that knowledge doesn’t necessarily mean experience.
So next time you’re trying to work out if someone’s a superstar coder, pause for a moment and make sure you’re considering both their programming knowledge and their programming ability, and not letting one substitute for the other.
Did Bill Gates say the 640k line ? February 20, 2007
Posted by Imran Ghory in etymology.82 comments
“640K ought to be enough for anybody.” -Bill Gates (1981)
One of the most quoted lines of the computer era. Certainly the most quoted line attributed to the Microsoft founder.
However it is only “attributed” as in 1996 Bill decided to publically deny it in an interview:
INTERVIEWER I read in a newspaper that in 1981 you said, “640K of memory should be enough for anybody.” What did you mean when you said this?
BILL GATES: I’ve said some stupid things and some wrong things, but not that. No one involved in computers would ever say that a certain amount of memory is enough for all time.
(…)
We at Microsoft disagreed. We knew that even 16-bit computers, which had 640K of available address space, would be adequate for only four or five years.[source]
But I’m not convinced by this denial.
Normally when someone denies saying something they do so fairly soon after the event. This as far as I can find is his first denial of this quote, and is at least four years after the quote was originally popular (usenet posts from 1992 refer to it) and fifteen years after it was allegedely made.
Somehow I find it hard to believe that someone can remember everything that they said 15 years ago. Of course Mr Gates goes on to back up how he never said it by talking about how Microsoft knew back in 1981 (the year the IBM PC launched) that 640k would be too small in 4-5 years.
It’s a pity Mr Gates seems to have forgotten an interview with the Smithsonian just three years prior, in which he talked about how they were surprised when they ran up against the 640k limit in 1986/1987.
BILL GATES: It [640K] was ten times what we had before. But to my surprise, we ran out of that address base for applications within — oh five or six years people were complaining.
[source]
So either Mr Gates has trouble remembering these things or he’s trying to rewrite history to make Microsoft seems more prescient. Which of course he’s never done before.
For a long while this quote was taken as “true”, after the denial it became false. But given the unreliability of Mr Gates claims I think that until someone comes up with some more evidence we should label this quote as having what snopes terms “undetermined or ambiguous veracity.”
Update: from the 1989 interview linked to by Dan Oblak:
BILL GATES:
I have to say in 1981 making those decisions I felt like I was providing enough freedom for ten years, that is the move from 64k to 640k felt like something that would last a great deal of time[source] – quote is at 22:28