Domain: bluej.org
Stories and comments across the archive that link to bluej.org.
Comments · 53
-
Re:Lisp/Scheme!!
I shouldn't contradict you, since I'm co-author of an introductory CS text using Scheme, but actually the read-eval-print loop isn't a distinguishing advantage vis-a-vis Java, because there is a cool Java environment called BlueJ that essentially provides the same kind of interface, where you don't have to write I/O code to interact with objects' methods. See http://www.bluej.org/. (Of course, there are other reasons why Scheme may still be a good choice.)
-
Difficulties with Java in High School/CS1
While Java is usually considered more suitable than C++ for CS1, Java has a number of deficiencies from an educational perspective.
Remember that in general, the only issues that matter are those that make it harder to teach the general CS1 concepts. Speed of Java execution is *not* an issue for most. (By the way, please note the word "in general" and "most". There are counter-examples, but one generalizations about the teaching of CS1 are, in my experience, fairly accurate.) For what its worth, my experience is 14 years of producing/selling resources for teaching computer science in universities/high schools.
(1) No simple I/O package. To read an integer from the keyboard takes multiple lines of code. Most programs are not pedagogically improved by adding mandatory error trapping. The solution, of course, is helper classes. My company produces its own, but many are available free over the net. Interestingly enough, while 2 years ago, most university teachers were not interested in helper classes, or in books using them ("I teach pure Java"), there has been a fundamental shift towards the use of them over the last year. The other alternatives are a lot of handwaving ("use this block of code, don't ask why") or using applets only or have all your examples carefully not every need integer input from the keyboard. Each of these techniques are used in different books.
(2) References are Hidden. The fact that many variables are references and can't be treated the same way as primitive data types. This is a personal gripe of mine. I'd say that about 50+% of students who've completed CS1 can't give a clear answer as to what happens when you say "a=b" when both are references. Java doesn't help the situation with the class that most students first encounter - String. Because String is immutable, you can say "a=b" and it works. Even worse, most of the time you can get away with "a==b" for a comparison (because Java efficiently caches identical strings). I spend an inordinate amount of the Java courses I teach (to teachers, mostly) on this problem.
(3) C++ Syntax. In other words, a misplaced semicolon can still waste many hours of student's time for little pedagogical gain. Of course, this was simply a marketing trade off in the creation of Java.
(4) Overly complex environments. Of course, development is focused where there's money, which means education gets (for very little money, mind), what's developed for business. For educators, you generally want an environment that has the basic features but can get students writing programs within about 15 minutes. There are a few educationally focused Java IDEs out there. We have our own (Ready to Program), but there a number of others suitable IDE's out there such as BlueJ.
(5) The Java class libraries. This is both a good and a bad thing. With C++ there was never any question about teaching the Windows API. It just wasn't done. But with Java, you *have* to use part of the class libraries, and from there, it's a slipperly slope to (HORROR!) graphics, applets and GUIs. These can add a lot to a course, however, what concepts get eliminated so that you the fun stuff?
Aside: I've noticed a distinct reluctance when people suggest what should be added to CS1 to also suggest what should be removed so that it can fit. You only have so much time.
Anyway, that's a mini-capsule of what we've found. I could go on for hours (and do, as a few people at NECC will find out :-)).
Another Aside: Does anyone know any web sites that cover this topic in depth? I've been amazed at the paucity of web sites about high school/university CS instruction in general (lots of good individuals posting content, but few general resource gathering sites). -
Easy: use an environment designed for teaching.