Lambda the Ultimate

inactiveTopic If I were Dean
started 1/18/2001; 8:55:00 AM - last post 1/29/2002; 12:42:37 PM
Chris Rathman - If I were Dean  blueArrow
1/18/2001; 8:55:00 AM (reads: 2128, responses: 11)
If I were Dean
I'd set the curriculum of Scheme the first semester, followed by Assembly language in the second. :-)

What with the AP Exams fixing to go Java, and the high rate of demand for Java programmers, it's probably not long before Java becomes the choice.
Posted to "" by Chris Rathman on 1/18/01; 8:56:03 AM

Ehud Lamm - Re: If I were Dean  blueArrow
1/19/2001; 1:39:46 AM (reads: 2187, responses: 0)
Too many universities started using Java as a first language. From what I've seen the result is students that know about inheritance but don't know how to code a simple loop, or a basic recursive function. I find this problematic.

John Lawter - Re: If I were Dean  blueArrow
1/19/2001; 7:34:09 AM (reads: 2185, responses: 0)
Well, my old university has switched from using C++ to using Java; before C++ they used Modula-2. I had the "benefit" of experience all three languages.

It seems to me that if a student cannot code a loop or understand primitive recursion, this isn't the fault of the language (Java supports both) but is the fault of the instructor.

I don't think there is anything wrong with using Java as a first language if the courses which use it are taught well. Because it is strongly and statically typed, many feel it is a good language to use with students because it will prevent them from making mistakes that C-based languages allow. (Actually Modula-2 goes even further in this respect, but try convincing someone it is a better language....)

I had heard of problems similar to the ones Ehud Lamm describes when the university taught C++ has a first language. This led me to believe that instructors were not concentrating on the basics of computer programming, but instead were covering specific language features which don't really belong in introductory classes.

Ehud Lamm - Re: If I were Dean  blueArrow
1/19/2001; 7:44:55 AM (reads: 2159, responses: 0)
I agree. But the things is, there's a limit to the amount of stuff you can introduce during a one semester course. Using languages like C++ and Java 'just' to teach procedural programming is a bit strange. Usually if they say they teach Java they try to teach OOP, as well as basic programming. I just don't see how this can work. Maybe if you teach Smalltalk.

Another issue is that in Java you have a lot of syntatic overhead, around a simple procedureal code. You have to define classes etc. If you don't explain what all this means, you are just confusing students. If you try to explain it, you lose the focus required for an intro to programming.

John Lawter - Re: If I were Dean  blueArrow
1/19/2001; 12:23:32 PM (reads: 2193, responses: 0)
It is much easier to teach procedural programming in C++ than Java, because it is basically a C with some sharp edges removed. Java makes greater use of object-orientation, so an instructor would have to cover some things, but could probably get away with only covering the material necessary to get students through an assignment. A hack, but it could work.

It's a tricky issue, and there are reasonable arguments as to why or why not one should use Java as a teaching language. I think departments have to make the choice based on the ability and knowledge of their faculty to teach good OOP vs. procedural programming, as well as what suits the needs of their students.

(Myself, after thinking about it, I would choose Python as a teaching language.)

Ehud Lamm - Re: If I were Dean  blueArrow
1/20/2001; 3:52:47 AM (reads: 2160, responses: 0)
I agree that C++ is better than Java for use as a first language, for exactly the reasons you point out. The problem is, of course, that when you get to the more advnaced features, the C++ design can be problematic (just when do you teach MI?, what about namespaces etc. etc.).

I think that it is not a question of OOP vs. procedural programming. You simply can not be a programmer (of any sort) without understanding the basics.

Adam Vandenberg - Re: If I were Dean  blueArrow
1/20/2001; 11:26:04 AM (reads: 2158, responses: 0)
While I was in college they switched the intro programming classes from PASCAL to C++ (and I believe they are now switching to Java, but I don't keep up).

Someone was telling me that near the end of the class the professor was trying to teach C++ operator overloading. Gah! That is definately a language feature, not a core part of basic programming knowledge (like, say, recursion).

But it gets worse! The class they were supposed to implement was a Boolean class, and the operators to overload were the logical operators.

Why is this worse? When you overload the logic operators they no longer use short-circuit evaluation. Since C/C++ short-circuit on native types, overloading these operators is blecherous.

I think I agree with Chris above about the Scheme/ASM thing!

Except that I would start out with LOGO, no joke, to give them something visual, and them move onto Scheme.

I'd also let them do Python or Smalltalk for extra credit. :)

Ehud Lamm - Re: If I were Dean  blueArrow
1/20/2001; 11:38:03 AM (reads: 2166, responses: 0)
I guess we all agree that it can be problematic to start with C++/Java

I think that going the functional route (starting, say, with Scheme) is a viable option. I still think that the procedural way (starting with Pascal) works pretty well.

Choosing between these two options, I'd consider the curriculum as a whole, and see how things add up.

Jo Totland - Re: If I were Dean  blueArrow
1/27/2002; 6:50:28 PM (reads: 2024, responses: 1)
Well, we all know it's Pascal, right?

Pascal is bletcherously simple, close to useless if you limit yourself to standard Pascal. This should leave plenty of room for learning real computer science instead of language details. And still, Pascal is close enough to C/C++/Java that the transition there would be very easy. Ada, Modula-3, Modula-2, Oberon, Simula, Delphi, etc would also be good choices.

But it all depends on where you want to end up. While there are good reasons for teaching a "typical" language, such as one of those above, there are also reasons for avoiding the mainstream choice of imperative (or OO) statically typed compiled languages. So I guess Scheme, Common Lisp, Dylan, Erlang, Smalltalk, Python, Ruby, Rexx, tcl, Standard ML, OCAML, Haskell, assembly language, Mozart/Oz, Prolog, Mercury, Forth, Joy, PostScript, Logo, APL, J, K, A+, Beta, Eiffel, Sather, Icon, Mathematica, or any other reasonably clean language that supports other programming styles would also be a good choice.

The important thing is that they don't stop learning...

Ehud Lamm - Re: If I were Dean  blueArrow
1/28/2002; 2:53:04 AM (reads: 2060, responses: 0)
One thing that must be considered is impact on the rest of the curriculum.

For example if you use a functional language, students may have to learn about the procedural way of doing things for their next course, which may use C or C++.

That's the main reason I am reluctant to advocate Scheme, if all the subsequent courses present things in a procedural style.

rev - Re: If I were Dean  blueArrow
1/28/2002; 11:47:16 AM (reads: 1948, responses: 1)
I'd vote for Smalltalk or a clean LISP for begining students.

I'm a big fan of Smalltalk. I admit that I'm a little partial to Smalltalk, but having learned C, C++, Pascal, Python and BASIC before touching Smalltalk, I feel that it really has the potential of being used for one of it's original intents: as a language for normal folks, and for the beginenr. Hell, you could even do programming in straight bytecode for a Smalltalk VM to teach some low level concepts.

As far as LISP, something like ISLISP (free-beer implementation called OpenLisp available), which isn't quite as barebones as Scheme, but isn't as intimidating, or doesn't retain all of the kludgeness preserved in CL. But then again, what is more useful, CL, ISLISP, or Scheme? If that's the idea, teach them CL which probably sees more "real world" action than the other two.

My school used C and C++ for CSI and CSII respectively. It did a pretty poor job of getting kids to understand how a lot of C/C++'s low-level features work, confusing a lot of kids. Now, this could be remedied by teaching these topics better, but also by using a language that doesn't provide these kind of neccesary but comfusing features that do nothing but confuse many of the first-year students.

I wish I could remember the name of the school, but I heard about a college that had three sections of introductory CS- one for Scheme, Java and C. I imagine a setup like this would work well, teaching concepts in lecture, and language specifics (syntax, semantics) during discussion.

Frank Atanassow - Proposition: Scheme is intimidating  blueArrow
1/29/2002; 12:42:37 PM (reads: 1951, responses: 0)
something like ISLISP (free-beer implementation called OpenLisp available), which isn't quite as barebones as Scheme, but isn't as intimidating, or doesn't retain all of the kludgeness preserved in CL.

What is intimidating about Scheme?