Fuck you, Programming Language Concepts professor!

So you’re going to be making programming projects worth 70% of our grade? M’kay. Oh, but it’s going to be a series of three projects, that each builds off the one before, so that if we don’t get one correct we’re fucked for the ones that follow?

And what’s that? We’re expected to use the Bison grammar parsing program in order to implement a complex calculator even though we’ve never had any experience with Bison before this class? And you aren’t bothering to teach us anything in it? Or the way C++ actually interacts with it?

Oh! All we need to do is use maps! And stacks of the framework! And make sure that our grammars can handle functions and utilize scope! Never mind the fact that you aren’t giving us adequate instruction on ANY of this. Or anything else for that matter.

Thanks buddy. Thanks for making me spend $33,000 a year to search on google in the vain attempt of finding anything that might actually help me get this second assignment an eighth of the way complete (with one more to go after this that I won’t even be able to attempt!).

This is the teacher who’s exact words to us were “My job is to break you.”

I might just say “fuck it” at this point. If I get an F in this course at least I can retake it again later with a competent professor and actually learn something. Right now that’s looking more enticing to me than a D that I will never be able to get off my transcript.

I really hope you have to account for this shit. I hope at the end of the semester the dean asks you why 75% of your class either dropped or withdrew. And why the other 25% who remained wrote death threats on your course evaluation. Have fun finding a new job buddy.

A good book.

On my first day in a course on databases, the assignment was to take PostgreSQL (which was written in C++, IIRC) and modify its buffer replacement algorithm from LRU to MRU. The assignment was given without regard to whether the students knew C++, or if they’d worked in a large program that was built using the standard Unix tools, etc.

The purpose of the assignment was, admittedly, to make the class size more manageable (it was overenrolled). But I loved the approach: sink or swim. No time to whine and bitch at the professor (plenty tried). You just had to adapt, learn new shit, and solve the problem.

I once had a class where part of the final was writing a B-tree class, conforming to a large pre-written unit-test suite, in under an hour.

That guy was a dick.

Kinda works that way IRL. Same with learning new stuff for a project. Just sayin…

I think he is doing you a favor. Many IT jobs are just like that day in and day out. I know mine is. The absolute most important skill you need to be successful in computer related work is the ability and desire to teach yourself. Technologies come and go at light-speed so most things you learn in college will be obsolete in terms of specific technology when you get a job. Most workplaces don’t actually teach people anything except at the basic levels. IT people get thrown a scary project using stuff they have never seen before and are expected to ask questions and figure it out.

And I’m “just sayin” that I’m paying $33,000 to be taught something. A novel concept, I know. Instead, I get a teacher who says “you had better already know this, because I’m not going to show you.”

If I already knew it WHY WOULD I NEED THE FUCKING CLASS!?!?!

It’s not a class on C++ or Yacc, it’s a course on programming language concepts.

Where I went to school, the “learn language X” courses were all self-taught courses that weren’t required for anything and were only taken by people who wanted to firm up a language before trying another class. Plenty of people never took them–they just made an effort to learn a new skill or tool so they could learn the concepts that were being taught in the class.

One of my jobs when I was a grad student was to teach the entire Operating Systems class Pascal in 2.5 class sessions. This was 30 years ago, pre C, so don’t criticize the language choice. The books are a lot better now. If you can’t learn a language quickly enough to do this sort of project, you probably need to find another major.

Oh, and my compiler class consisted of implementing a language using a compiler compiler - with the code written on punch cards running on a mainframe, with horrendous turnaround time. (Hours if you were lucky.) Count your blessings.

He probably already did much more than you can appreciate. It sounds like he set up a plan on how to approach a problem with the steps directed. There is nothing wrong with that.

By some bizarre turn of events, I became the only person in a 60,000 person company that could build business simulations on some of their highly complex software after I had been there 4 months. This is considered a very critical task to the company. I wrote 40 pages of documentation and then we had very mandatory 20 hour class for corporate managers that should be able to do it. We went over the rough things in class and I gave them homework that might require 16 hours for each assignment. About 3/4 of the class failed and they weren’t necessarily reprimanded but it seriously hurt their career goals.

I taught concepts which was the only thing I could do given the time-span. IT is not a generally structured environment and if you expect people to spoon-feed you things, you are in the wrong major.

I am overwhelmed with work right now. I have two projects that were thrown on my desk yesterday because all other people failed (I am the final stage of business and IT solutions by myself). One project involves a $20 million dollar money transfer to different entities based on poorly thought out rules. The other involves a $10 million transfer to lots of people based on poorly defined rules. I have never worked with many of the systems involved before but I smile and say that I can do it with absolute confidence. Once I build all of this logic, no one in the world can tell me if it is right or wrong. The cash goes out. The largest mistake I have made in the few months I have been here is $60,000 and that came back months later.

If you expect people to spoon-feed you, you are in the wrong business entirely. Your professor seems sound. Go buy some books or read on the web or something.

The sign of a great computer science program is that they don’t teach you specific technologies. Back when I was in school I thought it was horrible that you had to learn anything but the common language on your own time, but now it’s incredibly obvious to me why that’s the right way to do things.

We’ve all been there and done that. Suck it up and learn something.

Dude, writing an entire programming language with bison and C++ isn’t that hard. If you needed something feature-competitive with one of Intel’s super-optimizing compilers for x86 chips, I might have some sympathy.

Plus, the docs for yacc, the GNU Project implementation of bison, are pretty good. If you don’t know anything about formal grammars, the documentation will teach you. (If you don’t know anything about formal grammars by this point, bucko, you’re well and truly screwed.) The GNU Project’s online bison manual. The manual has a whole section on how bison interacts with C++.

By 1976, Unix had been ported to C and was being distributed to sites around the world in that form. C might not have been available to you, but it was hardly ‘pre C’*. I do agree with the rest of the statement.

*(Unless you used ‘pre C’ to mean ‘pre-Cambrian’. ;))

I hate to jump on the bandwagon, but you should definitely get used to this practice if you intend to continue with an education in CS. I’m sure you’ll find that many classes (especially the more upper division stuff) take the iterative design approach. If you couldn’t complete the first assignment by the time the second is released, you almost certainly won’t be able to do the second.

I’m currently taking a raytracing class that started with about 30 students. Week 1: create a functional raytracer from scratch, Week 2: optimize the hell out of it, Week 3: extend it with a bunch of features, etc. By the end of week one, the class had diminished to less than 15. It’s not that the teachers are being mean, it’s just that its a very demanding class that takes a high level of comprehension and dedication.

Ironically enough, our program was required to use Bison to parse input script drivers (and I had never used it). Just be glad you didn’t have to learn Bison while writing a raytracer in a week :wink:

On a side note, it’s a shame that C++ isn’t the ‘standard’ programming languange taught in universities. Java seems to be the flavor of choice, but it’s much harder to transition from Java to C++ than it is the other way around. My area of interest happens to require C++ knowledge, so I’ve been getting a heavy dose from those classes (no formal introduction, however), but if I just took the standard required classes and a different set of electives, I would end up like many graduates with only a knowledge of Java (and maybe a little C). Unless you’re heading into client-side web development or specialized embedded devices, interviewers definitely won’t be scrambling to hire someone with no C++ experience…

I should also mention that my programming concepts class last quarter was taught in Standard ML and Prolog - I would have loved doing it in C++ at the time (though I’m better now for the experience)

Just to throw out an encouraging word for you – the CS department I teach in, we still start our students off with C++ for their first programming courses, including through data structures. I usually teach their main intro to object-oriented, and they don’t start off with all the libraries either – they have to learn how to build things up from scratch, and understand the details, like dynamic allocation and cleanup inside a class. (The advanced Java elective course I teach is only for those who have already taken C++).

I know lots of universities are going to Java, as you said, for CS1 and CS2. And I definitely agree with you – better to start them with C++, where they have to be responsible for more of the details and the depth.

IMHO, CS1 and 2 should be taught in some simple bare-bones assembler.

Hell, if I had my way, students wouldn’t even touch a keyboard until the second semester. Lots of CS programs seem to be turning out C++ and Java coders who have no real conception of how the damn computers actually work.

I’d venture to say that if someone expects to be spoon-fed at a university, then they are in th wrong kind of school. I can’t think of any major offhand that spoon-feeds people.

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.

I am irritated with a prof that says things like, “My job is to break you”. That kind of attitude isn’t going to inspire a good chunk of the class and inspiration is pretty much all the students should need. Just a worthy challenge that they feel they can meet. If the class is really clueless, then the prof and TAs should be helping by laying out a plan. The plan doesn’t have to give away any of the answers, just a lifeline to keep moving forward.

I don’t think it is a big deal to have 70% of the class based on programs that build of off each other. In my experience, if the class, as a whole, really misses one of the assignments, the prof usually level-sets everyone by giving out a working assignment to build from. Not sure if that was done for the OP though.

Also, not sure what the TAs are like, but use them, use them, use them. When a prof is an ass, the TAs usually try to bridge the gap. But if you are one of the students that doesn’t take advantage of the TAs, then you are at a huge disadvantage. For example, in this case, I’d expect the TAs to lay out a plan of attack for solving these problems as well as some Bison primers.

But as others have said, don’t be afraid to teach yourself technologies. That is the most important skill you can have if you want to develop software for more than 5 years. Employees that lack this skill are really obvious. Their careers stagnate and they lose interest in their work. They often seek refuge in a non-technical job because there is no way they can make it to 65 with what they have learned in school.

Finally, the one college programming lesson that I didn’t learn until it was too late is that the assignments are always much easier than they seem. If your solution is too complex, too long, or has too many exception cases, then take a step back and look for a more concise path. If you find one, it is always worth scraping your first solution and starting from scratch. You can spend days in the lab trying to get an inferior solution to handle all of the boundary cases or requirements, when often that time is all you need to do a clean re-write.

An even nitpickier nitpick. This timeline shows Kernighan and Ritchie C as having been released in 1978. While C existed before, it was K&R C that became the darling of the more hardcore academic community in the late 70’s. C took much longer to penetrate down to the undergraduate computer science courses. Especially because most classes at the time were being done on IBM mainframes, not Unix machines. (Our university didn’t get a Vax until 1980 or 1981, and while it was possible to run Unix on a PDP 11/60, there were limits to how many people you could get on it before it slowed to a crawl.)

Pascal was the programming language of choice because it supported modularity and (in theory) good programming design, however a bunch of us learned on PL/I or PL/C.