views:

148

answers:

6

This question prompts me to ask - why do universities still teach in languages like Modula2, when improved modern languages are available for free?

Are there uni's that still teach Pascal, for example? I mean, it was good 30 years ago, but... now? Why?

Why not Java, C#, Haskell?

Related: Is it backwards to still teach LISP?


Is this a duplicate question? If not, I think it ought to be a community wiki topic.

+10  A: 

The university's job is not to teach you a programming language, it's to teach you programming concepts. The language they use is only relevant in terms of the teaching material they have already generated or use from other sources.

I imagine that redoing a curriculum is something like rewriting a large application - something you do only if you have a compelling reason, and even then you think twice about it.

Mark Ransom
You know, I was going to write the same dang thing, but got too involved in my comment answer(s). +1
KevinDTimm
Having re-written a curriculum, I can without any hesitation say "YES!" rewriting a curriculum JUST because a language is out of fashion is really really annoying.
Brian Postow
A: 

Two reasons I can think of, one good, one not. (And I was a prof.)

The good reason: to simplify teaching. Teaching intro students is like herding chicks on a diving board. If there's a way for them to fall off, they will. If I had to teach C, I'd be tearing my hair out, what with char, unsigned char, char*, char**, char*[], char[10]*, and so on all being legal and different, and that's just a few splinters on the tree. For a second or third course, it's a different story.

The bad reason: academic freedom. We had one person teaching some far-out interpreted language because he liked it. Another one insisted on teaching spreadsheet programming, because that was the "wave of the future".

Mike Dunlavey
`char[10]*` is not legal. The legal expression should be `char(*)[10]` (pointer to array 10 of char), which is different from `char*[10]` (array 10 of pointer to char). Yes I see torn hair...
KennyTM
+2  A: 

Why not Java, C#, ...

In the absence of requirements to interoperate with existing code bases, what advantage does Java or C# have over, say, Smalltalk? I'm a C# programmer by day (and former Java programmer) and there are some good things about it and some bad things, but one thing that really sticks out is how incredibly complex it is. Look at how many questions there are here about the finer points of C# syntax and semantics. You'd waste your whole semester or year teaching trivia. Modula-2 is much simpler and perfectly adequate for many problems.

You need to learn assembly, too, and going from Modula-2 to assembly is a much easier step than C# to assembly. I would not want to try to teach assembly to a bunch of students who only knew Microsoft's professional tools.

Related: Is it backwards to still teach LISP?

(There's about 50 different ways to interpret this...)

I don't see what's "backwards" about it, unless you're seeing it taught {before,after} a lower-level language and think it should be taught {after,before} instead.

Can you suggest another language that does what it does? (Smalltalk? Forth? Icon? Factor?) For example, if you want to see the design of a real OO system (and arguably a more powerful one than Java or C#), you can pick up AMOP and see the whole thing in a short book, including complete source code. (Common Lisp isn't the simplest Lisp dialect, but it's a lot simpler than C# or Java, and AMOP uses a relatively small subset of it anyway.) How would you teach metaprogramming, or even multiple dispatch, with Java?

Or: the original purpose of Lisp was to replace Turing machines as a construct for building algorithms. (It just happens to be really useful for writing real programs!) Are you suggesting that you'd rather using Turing machines for teaching algorithms? Or C# for modeling computation? A Turing machine is a 7-tuple -- I can't imagine how many components the C# computation model would have! Lisp bridges the gap perfectly, and I've only seen one or two other languages in this space -- Forth comes to mind, but for whatever reason it's not become popular in academia.

...Haskell?

I think it's a great idea. I learned it in school. Then again, I think any member of that language family would do fine. If you learn ML in school instead, I don't think you'll be any worse off. The concepts are the same.

It's like studying mechanical engineering in Berlin versus Chicago: the language may be different, but the concepts are the same. But if you don't know anything, not even a language, it makes sense to start with the simplest language possible. If you want to be an engineer in Berlin but speak no German, it makes sense to study engineering and to also study German, but the conventional thinking is that it's less effective to start with German-only engineering classes.

Ken
+5  A: 
Norman Ramsey
"(Today's university students can expect to work at least until age 70.)" -- (even though today's companies don't hire anyone over age 35.)
Windows programmer
I never thought of C# or Java as insanely complicated. They both seem simpler to me than C++.
Cheeso
@Cheeso: this is like saying Ranier is easier to climb than Everest. True, but almost everything is easier to climb than Everest. But if you like, I will cheerfully anoint C++ as "doubly insanely complicated".
Norman Ramsey
Ok, I buy that C++ is complicated. I don't agree that C# is though. I've watched 13 yr olds pick it up.
Cheeso
The first thing they taught me in faculty was indeed PLT Scheme using Dr Scheme - and I must say it was a **great** way to start. Recursion, no cycle instructions, simple basic functionality, no data typing as far as I can recall... It was simple to grasp and get something basic going, and then you could expand and learn further concepts.
ANeves
A: 

Although this question seems to have been handled some time ago i wanted to add something (since i am the asker of the mentioned Question :) ) Why we learn Modula2 in our first year: Apart from all the already mentioned reasons, it is for getting a grip on how basic things (e.g. pointers) work before getting involved with something like Java where all that stuff is pretty invisible to the programmer :)

Samuel
A: 

The matter of Lisp/ADA vs C/Java is the same as Informatics vs programming. One is a science, the other is a craft.

SF.
an ambitious statement, but you make it without any foundation or support. You just state it as if it's apparent to everyone. It isn't.
Cheeso
@Cheeso: It is apparent to people who are there. A team of former demosceners, game developers gets a CS PhD on board... and they need to teach him everything. Meanwhile, they got flunked from the university for failing the CS classes...
SF.
Apparent to people who are... where? I asked the original question. I'm just saying, your answer hasn't added any insight.
Cheeso
There are languages made to create applications for day-to-day use (C#, Java), and there languages for use in academia, for making certain concepts more apparent or explore new ways of thinking. No sane person will write then use a text editor written in PROLOG. OTOH, teaching .Net to would-be researchers is considered counter-productive. (still, your list included Haskell, which is not very "production-oriented" and more "academic" - I bet it isn't known well enough.)
SF.