Wow, I’m surprised at the sink-or-swim attitude expressed thus far. Not that I disagree with it entirely, but here’s my thoughts:
First off, it sounds like this is an introductory course – it’s not clear to me how much has been covered in other courses. If students already have some working knowledge of a language or two, then OK, picking up bison shouldn’t be too tough. However, IMO, the prof should have devoted a class to basic syntax and practical usage. It doesn’t sound like that was done.
Second, it sounds like this is supposed to be a conceptual course that has strayed from its purpose. Does no one think that 70% of the grade being attributed to implementation is unreasonable? Really? In a conceptual fundamentals course? IIRC, bison and yacc aren’t that tough (haven’t touched either in over a decade); if you “get” the need for a parser / compiler, implementation is pretty straightforward – the translation of a grammar into code is a fairly simple exercise. But to expect undergrads with no experience to be able to sit down and just churn out code without the foundation is unreasonable. Again, it’s not clear to me that this is what happened, but that’s what I’m gathering.
Third, if 75% of the class is failing, it’s a good indicator that the professor is incompetent (as a teacher). Perhaps this is a research school, which mitigates it somewhat. However, I doubt that 3/4 of the CS students are that clueless. Personal anecdote: as an undergrad, I had a couple friends in an introductory C course. One of them had an entry level computer consultant job and the other spent a bunch of his spare time that semester reverse-engineering some graphics file format. Neither were idiots; in fact, they were the only ones in the course to not fail (one got a C, the other a D+). After going to a seminar given by the professor, I understood why – I think he would’ve had difficulty explaining how to make toast adequately. I had the distinct impression that he was going senile.
Fourth, it doesn’t fucking matter how CS works in the “real world”. It is unreasonable to expect a first or second year undergrad to be able to handle tasks on a professional level. It’s no wonder the “Nick Burns” stereotype is so applicable to IT people. There’s a reason they’re students and not getting paid to work. Seniors – sure, then you can expect something approaching that performance. But fer fuck’s sake, it’s like asking a freshman or sophomore math major to be able to do differential equations, or a beginning spanish major to translate a chapter from Man from La Mancha from the original.
Evidently, I have a different view of what the progression of students should be and what the obligations of a professor are. Or perhaps I just have a better memory of being a clueless undergrad. No matter.
As to introductory CS material, my humble opinion is that C++ is probably the worst of the major languages with which to start computer science students (perhaps it’s OK for computer applications people, as they need all the experience they can get in the language they’ll most likely be using). Personally, I think Scheme is the best choice for a first course; syntax just doesn’t get any easier (assuming a parenthesis matching editor), debugging is relatively straightforward (as it’s interpreted), recursion is (necessarily) adequately covered, and students get some exposure to functional programming. Data structures should be taught in straight C; the concepts translate directly into code and you pretty much can’t get away with not understanding memory allocation and run-time performance (space and time complexity) and pass such a course. I could see using assembly, but it’s not necessary – best tool for the job, and assembly detracts from conceptual presentation. From there, professor’s choice; whatever works (except for Operating Systems, which should also require C). Oh, and it should be required that at least one of the beginning courses require Unix. It’s scary to me that a junior wouldn’t know how to work from the command line (yes, I’ve met some).
Just my opinion, doncha know.