Hacker News new | ask | show | jobs
by angelbob 5290 days ago
Carnegie Mellon is quite a stronghold of this. They don't teach much coding -- they hand you the books, give you projects and grade the results. If you produce workable code, mostly you win :-)

It's telling that CMU is considered such a great tech school. Even the best don't know how to teach programming (yet?).

2 comments

It's funny because I was going to bring up a complete counter point to one of the features of the article, in which TAs never read code, using CMU as the school. I'm a TA for our operating systems class (http://www.cs.cmu.edu/~410/), and We Read Your Code. Every line.

We print out thread libraries (~1000 lines of code) and kernels (~4000 lines of code, prints on 70 sheets of paper or more), and then we go over it with a red pen. We think it's some of the best feedback people get at any school. For the kernel, each group gets a one-on-one meeting with one of the TAs (or the professor) to go over the whole kernel.

I've graded some really abysmal project 0s, but by the time they get to the bigger projects we've stamped out some of the bad habits, and I'm happy to read code written by those students, because they learn the most and produce good results by the end.

The philosophy is that code is for people to read; the next guy to maintain the code in 6 months (or just you 24 hours later with no sleep in between); your reviewers, and so on.

On the contrary, I don't really think that it is the University's job to teach "programming". University traditionally focuses around teaching the skills to do research. Higher level skills such as analysis and problem solving. Consider learning history. It is expected that you "know" how to write an essay. You may be critiqued on it, but it is not the primary motivation for your study of that subject.

My personal opinion is that university is not a place to learn tools (i.e. programming), but to learn to apply knowledge to form solutions to complex problems. We learn about algorithms, data structures and techniques because that is what we need to know to learn to solve hard problems. Programming, while not separate from this (i.e. you can hardly build anything without knowing how to use a screwdriver) is something that is assumed knowledge. Teaching it at university would waste valuable time in courses that are already too packed to give rigorous treatment of all topics covered.

I'd say you're wrong.

I don't think we should assume the students have the knowledge 1) because they obviously don't have the knowledge and 2) it doesn't match the methodology of every other applied science. I don't assume that students are competent to work in a biology lab before college. Why should Computer Science get a free pass from teaching the lab work techniques that all other applied sciences are expected to teach?

The CS undergrad curriculums that I have been a part of (on the student and teaching side) were designed so that people with no prior exposure to CS or programming could succeed. For that reason, the introductory class taught programming. Sure, they (we) tried to instill general CS concepts along the way, but the fundamental task was to teach the students how to think algorithmically, how to use that skill to solve a particular problem, and, yes, how to use the particular tools we chose (that is, the language, compiler, editor or IDE).

To do otherwise is to require that incoming students already know how to program. That is, I think, indefensible. If students want to test out of the introductory course, fine. But it must exist, just as the intro to physics course must exist for physics majors.