eighty characters per line

April 13, 2008

Java as a First Language

Filed under: Pedagogy — Tags: , — Chad Waters @ 5:49 am

1. The State of Computer Science

These days, numbers in computer science programs at most institutions are suffering. Enrollment is down 49% since 2001/2002. [1] This can be possibly attributed to the brainwashing that secondary school systems usually put their students through, impressing upon them how computer science is a “dime-a-dozen” field, and that the market will be flooded. Furthermore, rumors that the College Board was planning to stop administering the Computer Science Advanced Placement test were greatly exaggerated, thanks, in part, to a fallacious article in the Washington Post [2]. With numbers dwindling as they are, computer science programs are attempting to find new and better ways to not only improve their enrollment rate, but also to improve their retention rate. So what approach are programs taking to entice new students? Make programming fun.

2. Java to the Rescue

There are no arguments that Java is a useful language to know. TIOBE, which evaluates programming languages based on search engine results for both web pages and message boards, ranks Java the number one programming language in terms of popularity, possessing 20.529% of the market share as of April 2008 [3]. It presents an approachable syntax with a good deal of flexibility and the potential for rapid prototyping. Dismissing criticism for Java’s virtual machine is even simple: GCJ, the GNU compiler for Java. Compiling to native code? Sure, perhaps it lacks full AWT support, but work is being done, and it is quickly improving. So then what could there possibly be to complain about?

3. Java as a Starting Language

Java is a very common starting language for students. It makes programming fun for those who are unfamiliar with traditional syntax. It hides lower-level functionality to allow the programmer to think about the bigger picture. This being said, there is much lower level functionality that is important to learn. Dewar and Schonberg, with AdaCore Inc., put it best:

What we observed at New York University is that the Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging. [emphasis added] [4]

So, what is the solution? Do we continue to teach complicated languages, to the chagrin of entering students, and lower our retention rates significantly? Or do we continue to produce students who possess a skill set analogous to placing a square peg in a square hole, fitting a basic solution to a basic problem, but being unable to actually write code?

4. Finding the Solution

To prevent universities from continuing to produce a generation of replaceable developers, pains need to be taken to teach theory and paradigms, not languages with robust packages that coddle programmers. Languages, from C++ to Common Lisp to Ada, should be learned, to produce students better able to handle projects ranging in size from personal programming to large-scale code delegation. Predictions? No longer will scope and adherence to specification be the biggest evil to a programmer. Instead, evil will be known as working with colleagues who have no understanding of language fundamentals.

The storm’s a-comin’!

5. References

  1. Vegso, Jay. March 2008. Enrollments and Degree Production at US CS Departments Drop Further in 2006/2007. http://www.cra.org/wp/index.php?p=139.
  2. ACM. April 2008. AP Computer Science is NOT Going Away. http://usacm.acm.org/usacm/weblog/index.php?p=593.
  3. TIOBE. April 2008. TIOBE Programming Community Index. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.
  4. Dewar, Robert B.K., and Schonberg, Edmond. January 2008. Computer Science Education: Where Are the Software Engineers of Tomorrow? http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html.

1 Comment »

  1. I don’t think Java is particularly right for any sort of beginner.

    One issue is it’s object-oriented, and dogmatically so. To do anything you need a handful of objects, and to be ‘idiomatic’ (or even regular) you need to adhere to this standard; it severely inhibits flexibility in design of your code and probably has a more fundamental language impact in regards to evolution. This is more an issue as time goes on and you keep programming, though (seen lots of people who’ve always been OO and never looked back.) I don’t think this is the right model for a beginner.

    In regards to abstraction in relation to teaching, I think more fundamental concepts that can connect your code with the resulting program are more critical in the beginning stages. At least to the point where you understand the correlation between your code program execution.

    A much deeper problem however I think has been stated before: we’ve simply dropped our standards, and diluted our profession with easily replaceable people and not truly knowledgeable ones. Our courses aren’t as rigorous, and it’s simply a decline. Reform is needed, but maybe Eternal September has already begun?

    Comment by Austin Seipp — April 30, 2008 @ 5:58 pm


RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.