Slashdot | Professors Slam Java As “Damaging” To Students
Seems everything old is new again. When I was in college, the language-du-jour was Pascal. Back then, there was a growing trend away from Pascal and how it abstracted away important parts from the system (like dealing with a filesystem, and so forth). In 1981, Brian Kernighan (the “K” in the K&R C book, and one of the authors of the C language) opined Why Pascal Is Not My Favorite Language. It rings true even today why instructors aren’t to pleased with the introductory languages. It’s a hard problem, because when you begin teaching a person about programing computers, you need to instruct them not only on how to interact with the computer (the environment, and the programming language), but then have to instruct them on how the computer will handle that code (the data structures, execution time, algorithms, etc.) Some computer languages effectively hide the underlying computer from the programmer (some better than others). Java is designed to run under a Virtual Machine (a machine that doesn’t necessarily correspond to the underlying hardware of the actual machine). This makes Java a seductive choice for a first language, and several institutions have gravitated towards that choice. Unfortunately, Java has become quite popular in the business world, so students, thinking they have learned the totality of computer science with one language, are then reluctant to try other, more difficult languages. This is the real trap of Java. It doesn’t matter if your first programming language is BASIC, Assembler, or Snobol; if you are interested in learning computers, you’ll learn computers. You may have a better time of it if you learn the lower-level concepts in a language like Assembler or C, but if you’re sufficiently motivated, you can learn anything. Unless the professors make it clear that the goal of their classes is not to learn Java, but instead to learn computer programming, this problem will perpetuate itself no matter what language is taught. It was true for Pascal, Basic (Visual or otherwise), and probably even Fortran (though I’m not sure if there’s a “Fortran is damaging to students” article out there).

I saw this article too. I’m still trying to make headway in the Python book I bought, but with school starting up I haven’t done as much (read: anything) in the last week. Like I mentioned to you before, Python, at least in the beginning, seems to be much easier to pick up. For now there aren’t any weird looking things hanging around in any code I write, I understand every part of what I’m writing at least in this early going. When I took my first programming class at OU it was a class using C++ and it seemed they assumed you knew some programming already so I was fairly lost with it. I know that now OU seems to be gravitating towards Java, which as you and this article both seem to point out, ain’t such a hot idea. Bah, I need to spend more time with this Python book so it doesn’t go to waste.
I stumbled on some course notes. The prof was using ‘J’, as a language for teaching functional programming. In pure functional programming, you don’t assign to variables. You pass parameters to functions, for example, the output of other functions, as is done in Scheme or Lisp. However, unlike Scheme or Lisp, ‘J’ has no variables to set. This prevents students who have learned Pascal from writing ‘J’ with a ‘Pascal accent’. They’re forced to learn functional programming.
You’d never use ‘J’ in real life. However, i’ve seen a semi-real application that is written in a totally functional style. So, it can be done.
My complaint with ‘J’ is that it’s a line noise language, like math proofs.
J wasn’t intended to be a first programming language…
Maybe something like LOGO is a good first language. It’s going to be obvious that you won’t use it for everything all your life. It’s not clear that it’s Turing complete, for example, though it probably is.
My first language might have been for a programmable calculator.
Another early language was PL/C, a teaching (simplified) version of PL/1. I wrote a program in it (using cards on an IBM mainframe). Another early language was BASIC. I’m still fond of BASIC. In the late 70′s, i was introduced to a very good BASIC compiler. It had the misfeature of being available on only one machine. Not just one machine type, but one physical machine. I learned 8080 assembly language in ’75 – my first computer. But i never got the idea that i’d need only one language until learning C. By that time, i’d learned nearly 40 languages.
I guess the point is if you’re serious about learning computer science, it doesn’t matter what your first language is: you’ll eventually outgrow it. Finding the perfect language to teach students so they’ll not only have a pleasant learning experience and also be able to learn the harder concepts (recursion, pointers, etc) is going to be tricky. BASIC was my first language, and I foolishly passed on learning Assembly (“Assembly is only for those who need performance”, which is the first mistake of listening to the computing press). Pascal was my second language, and from there I’ve learned a few more (some in more detail than others). I think it’s more important to instill a love for programming, and a discipline / hunger to learn new things than to find the one-true-language.
The original article talks about how teaching C++ prepared students for further work more than Java did. I can hardly imagine C++ as a first language either.
The first language when i was in school was Fortran. I bought the book, Ten Statement Fortran. The idea was kinda like a “top ten concepts” for Fortran.
But practical Fortran had to wait until i took a Mechanical Engineering course that required programs be written. These programs were exactly what Fortran was designed for. No text editors or calendars were assigned, as the computer science courses sometimes did.
The great advice was this: use simple statements.
Take complex calculations and break them into lots of little computations, each assigned to a new variable. That way, you could examine intermediate results with a debugger (or write statements) easily.
Smart users are often better teachers.