Fuck you, Programming Language Concepts professor!

Correction accepted. I should have known one was coming. :wink:

Plus, of course, it was designed to be easy to compile on generally insufficient machines and standard Pascal’s I/O model (so ably skewered by Kernighan) pretty much assumes punch cards.

I agree with much of this, and I disagree only in detail. I think ‘odd’ programming languages should be taught more, languages like Haskell (to teach type systems other than the C model), Erlang (concurrency, basics of IPC), Smalltalk (object systems, GUI design), Forth (write a device driver, extend the compiler), and, yes, both Scheme and Common Lisp (Scheme because it has first-class continuations, Common Lisp because it has everything else). I like the idea of teaching data structures in Lisp because it’s so easy to turn data into code and turn data processing into an exercise in compiler design. Memory references and efficiency is a topic all its own and should be taught in C, but I don’t get the huge aversion to assembly. Knuth likes it well enough.

A better way might be to have students design their own languages that must support different paradigms to a given extent. This dovetails neatly into a course on compiler design, which necessarily requires data structures and cost/benefit analyses (treating strings as lists: defensible; treating numbers as lists: not so much). My thrust is that we should teach students that paradigms and strategies matter more than syntax (or the lack thereof, in the case of Forth and Lisp), and we should dispel forever the hoary old fallacy that all languages are equally powerful. (The next one who claims that rewrites Microsoft Word in INTERCAL.)

OSes are another area where students should be exposed to a whole lot more than they ever are. Smalltalk, Lisp, and Forth are all good entries into OS design. There needs to be some focus on OSes that handle persistence transparently, as opposed to the filesystem model (Smalltalk, again). Students should understand what goes into designing a GUI, and why GUIs largely have not changed for over 25 years. Of course, they should also learn the advantages of the command line, as well as the advantages of batch processing and how batch gave way to the command line. (Or hasn’t, in the case of the AS/400 and so on.) Virtual machines (hypervisors, to you marketers out there) should be taught not only because they’re a useful and interesting topic, but because it’s blindingly obvious that they’re the New Old Thing and aren’t going away again for a while. A compare-contrast between VM (as in CMS), VMWare, and Xen is in order. Again, concepts rule over specifics and the Great Wheel will turn.

No it isn’t. C++ is a mess.

Maybe, but most programming jobs outside of web programming require a knowledge of it.

I like C++ as a teaching language because it’s impossible to just code and ignore issues of how memory and pointers work. You can’t be a great programmer if you don’t understand those topics.

In my experience, that attitude is very typical of CS people; I remember a professor responding to one of my homework questions by telling me I should change my major.

Definitely look for a TA (a course like this should have more than one). Also, see if any of the student organizations at your university offer tutoring or study sessions.

Translating part of “Man of La Mancha” into English would be well within the powers of any beginning Spanish major, as the work is already in English.

Now, a section of Don Quixote might be more difficult…

Just being helpful.

As long as we’re nitpicking, this is an entirely reasonable expectation. It’s actually not unreasonable to expect high school calculus students to solve very basic differential equations.

Yet they’re, in my experience, one of the hardest things to grasp. Enough people struggled with learning Java in first year here (one of the top five CS departments in the country) that I don’t think it’s unreasonable to believe that even more people would struggle if they’re having to deal with memory management as well. The drop out rate is high enough as it is (~300 in first year, ~40 third year).

The way our department now does it (different to when I started!) is to teach Haskell first, then Prolog, then Java, and C, Matlab, Python etc. is used in later years for specific courses. I think that that is a nice mix.

Thanks. I was gonna mention Forth, Smalltalk, and Prolog, but was already going a bit long. A lot of the other stuff I can’t really talk about at the requisite level – after all, I’m partially a product of exactly the type of academic program against which I’m railing.

Yeah–the danger of making a point by analogy. I was trying to come up with something not too outlandish (e.g., a pre-med student performing surgery), but not elementary. Being neither a math nor spanish major, I attempted to make the examples reasonable. So long as y’all got the point. :slight_smile:

Which is why I’m glad it’s my schools language of choice. When they start you out on one of the messiest languages, trying everything else is cake. Delicious cake.

If they can’t hack a beginner’s C++ class, I don’t want to hire them.

Sadly, though, in the Visual Studio-dominated environment that represents far too large a chunk of commercial programming environments these days, C++ is not as useful as it once was.

A co-worker of mine did some benchmark tests, and found that on the .NET platform, using pointers and such, which was once a way of using C++ to access memory in a more direct and speedy fashion, results in a performance hit.

The sad fact is that programming is now so far up on its own high level of abstraction that it doesn’t relate directly to the hardware at all. When I progarm using the standard Python IDE, I feel as far from the hardware as I did doing Logo (with Turtle Graphics!) as a kid. So much of that interface is now a part of the OS that a course in that subject is now the only place it’s practical to address that level of hardware/software interaction.

A couple of years ago, I taught a web design class and an Honors CS class at the high school I work at. The CS students had a hell of a time grasping OO concepts in C++, whereas the Web kids grasped the ideas right away with Javascript.

I now introduce OO with Javascript in the CS class. I make up for it doing a heavy dose of harward and assembler as well.

Interesting. So, why’d you start the thread in the first place? Obviously, bison should’ve been trivially easy to pick up…declicious cake, right?

Thanks for posting this. I’m reading through this thread thinking a number of thoughts:

  1. If the prof isn’t supposed to teach him, then what is the prof supposed to do?
  2. In my personal experience, being taught something is far more efficient than having to research and figure it all out on my own. There should be an appropriate balance.
  3. I can’t think of any context in which the prof’s job is to “break you.”

95% of my computing history has been of the “sink or swim, learn it yourself” variety, and like most technical people that enjoy computers, I’m good at figuring stuff out in this manner. But that doesn’t mean my time wouldn’t have been better spent having knowledgeable people teach me.

I’m really confused by this comment. Given that the operating system for the AS400 is and always has been (as well as it’s predecessor the System38) a command line interface, what are you trying to say?

Here is a list of more valuable operating system concepts fairly unique to the AS400 in the commercial space that should be learned:
Object Based
Everything is an object with well-defined set of actions that may be performed. For example you can’t execute a “file”, only a “program”, etc.

Flat Memory Model
128 bit flat address space. Every permanent object is assigned a location which is mapped to memory/disk etc. Programmer refers to object by it’s pointer, programmer never needs to know if object is currently in memory or not, operating system handles that.

Capability Based Security
A very secure method of memory/object access that is of key interest to operating systems researchers. AS400 is one of few commercial systems that use this method.

Hardware Abstraction
Same program that ran on an AS400 in 1988 will execute on a current AS400 despite multiple CPU changes including hardware address size change from 48 bits to 64, and a switch from CISC to RISC.

The prof’s job isn’t to teach him to use a specific tool like bison. Instead, he should be teaching the concepts that underlie bison(like CFGs and how you parse a program with them). It’s up to the student to apply these concepts.

It’s a bit of hyperbole, but assuming this is a freshman/sophomore class, weeding folks out is the right thing to do. Demand for slots in undergraduate computer science programs far outweighs the supply, and so they do have to figure out who’s serious about it and who will do well.

I got my programming start in a votech institute specializing in computer programming, not the regular college kind of deal. We went full time for ten months, concentrating on different languages and concepts about once every month. Since that year, I have gotten a job in an academic library, and I’ve run into my fair share of CS professors, and they strike me as being more or less like the votech instructors I had.

I’m with the OP on this one, and in my opinion, most of these professors are sink or swim for the simple reason that they are lousy teachers. A lot of these guys don’t know how to talk to people, they don’t know how to get their points across to a class, and they absolutely cannot remember back to the time when they were helpless newbies. Most of my teachers ran the gamut all the way from “simply awful” to “not too awful”, with one teacher who was actually quite good at teaching us C++.

These “teachers” were snotty, arrogant, misfit sons-of-bitches, who thought that they had learned everything in life that they needed to know once they learned how to program a computer. IMHO, one teacher could probably have safely been categorized as severely autistic–He was later fired after the administration found that he could not relate basic computer concepts to the class (and that’s saying something). If you didn’t walk into the program knowing the basics already, it didn’t matter what your background was; they treated you like shit. I saw more bad attitudes, more arrogance, and more cluelessness from those teachers than I ever saw during my four year army hitch (and that’s saying something, too).

They would mouth off at a housewife who had spent the last 20 years raising three kids or a truck driver trying to learn a new skill and then get mad when they were called on it. One incident involved my VB instructor, a young punk in his early thirties, calling an ex construction worker in his mid-40’s a “moron” when the construction guy took it upon himself to ask what turned out to be an excellent question. After the instructor had safely locked himself in his office and three of us had pulled the raving construction worker into the break room and talked him down, we returned fully expecting the instructor to be on the phone to the police, or–at best–the administration to get this guy expelled. Luckily, the instructor apologized, answered the question, and the incident was forgotten. He was actually a lot easier to deal with after that. (Note that I’m not happy about what the worker did. He could easily have been arrested, and in any case, threats of grievous bodily harm are just wrong.)

Now once you hit the rarified atmosphere of expertise in any given subject, you can expect your profs to be like that. But this was an introductory course explicitly marketed to people with no background in computers. I didn’t expect to be mollycoddled. I did expect just a little recognition of the fact that some of us didn’t know what pointers were.

My advice to anyone considering the CS field without a background in computers? Teach yourself as much as you can before your first class. Instructors in most fields of study will refuse to hold your hand through the semester, but the dweebs in CS are among the few who will actively try to kick you out into traffic.

Apologies to Dopers who happen to be computer instructors if I sound bitter here. I’m still paying off the loans for that computer class, and the quality of instruction I had to endure there still leaves me a bit bitter. I know that not everyone is like that. Just the ones I’ve happened across

Why don’t they start you off programming in machine code?

Yacc predates GNU by quite a lot. It was developed at Bell Labs, and I used in the '80s sometime. I don’t know Bison, but it sounds like an extension of yacc.

In 1974 or so the Bell Labs memo on C came to Illinois. As a PDP-11 assembly language programmer my reaction was "++, --, this is assembly language. :slight_smile: )
Someone in my group actually did a UNIX port to a PDP-11 around '76, but it was in nowhere near good enough shape to put 100 students on. Some other people had developed the PDP-11 Pascal compiler, so we had some proprietary interest in it.

One of the reasons I have little sympathy for the OP was that for our assembly language class, the first assigment was a Pascal text formatter. It was a pretty easy assignment, but we graded the hell out of it. The purpose was to scare the students into using structured programming. We eventually dropped the lowest grade, but we did suffer student loss from this assignment - but their assembly language code was much better for this ordeal.

Yeah, he got it backwards. Bison is the GNU implementation of yacc(get the pun?), with a bunch of extensions.