It's telling that CMU is considered such a great tech school. Even the best don't know how to teach programming (yet?).
It's telling that CMU is considered such a great tech school. Even the best don't know how to teach programming (yet?).
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.
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.
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.
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?