- Is Microsoft preparing us to move beyond Vista?
- Why Google wanted to lose wireless spectrum auction
- iPhone shortage fuels rumors of imminent 3G phone
- XP for cheap PCs: a second crack in the wall
- Darts into data: Leveraging random action to competitive advantage
- Most iPhone buyers are existing Apple customers
- AT&T's so-called open network principles
- Mono dev tool offered
- ActiveState upgrades IDE
- Serena plans SaaS products
January 08, 2008 | Comments: (0)
Java panned, defended
Is Java partly responsible for a neglect of basic skills in computer science education?
Two professors emeritus at New York University, who also happen to be executives at AdaCore, which specializes in the Ada programming language, criticize Java in an article entitled "Computer Science Education: Where Are The Software Engineers of Tomorrow?" in CrossTalk - The Journal of Defense Engineering, this month.
"It is our view that computer science education is neglecting basic skills," particularly in the areas programming and formal methods, according to the article, written by Robert Dewar, AdaCore president, and Edmond Schonberg, AdaCore vice president.
"We consider that the general adoption of Java as a first programming language is in part responsible for this decline," they wrote.
Java, the authors said, has been used in introductory programming courses in a "misguided attempt" to make programming more fun.
"The irresistible beauty of programming consists in the reduction of complex formal processes to a very small set of primitive operations. Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want," the article stated.
"The result is a student who knows how to put a simple program together, but does not how know how to program," according to the article.
The authors did give Java points for concurrent programming and reflection, which is the understanding that a program can be instrumented to examine its own state to determine its own behavior in a dynamically changing environment.
At Sun Microsystems, which created Java, representatives scoffed at the article, noting that the authors have an interest in Ada.
"If you look at these guys, they specialize in Ada," said Tim Bray, Sun director of Web technologies. Ada, Bray said, was "the most expensive, embarrassing failure in the history of computer languages."
"I felt like I was reading something out of the '80s," given the article's Ada emphasis and its lack of discussion about Ruby, Python and agile methodologies, Bray said.
Java, according to Sun, is being used at more than 869 universities. Additionally, the BlueJ environment has been developed for the purpose of teaching object orientation with Java.
In an emailed response, Schonberg stood up for the authors' involvement with AdaCore.
"Of course, if we are involved in Ada software it is because we are convinced of its technical superiority in many areas, but our opinions do not come from business interests but from decades as academics, teaching across the curriculum, and participating in long-term language design and implementation projects. Our negative views of the impact of Java on early CS education come from experience (ours, and that of colleagues at NYU) teaching more advanced courses," Schonberg said.
Posted by Paul Krill on January 8, 2008 03:49 PM
RATE THIS ARTICLE:
-

- COMMENTS
I think there's a certain validity to the comments. How many of today's Java programmers could implement a HashMap from scratch? How many would be able to write a fast sorting algorithm capable of sorting several hundred thousand records in a very short time? How many understanding the functionality underlying their use of Java Sockets? Don't get me wrong, I really like Java and it's my language of choice these days. I did however spend 15 years writing code in C, C++ and a variety of other languages before moving over to. Had I not had that exposure I am not sure I'd be as good a developer as I am today.
Posted by: Simon Ablett at January 9, 2008 01:47 AM"How many of today's Java programmers could implement a HashMap from scratch?"
That is precisely what first year students do at the University of Utah. The problem has little to do with the language, but how the course is designed.
The university tried to teach introductory courses in scheme, but students complained loudly about learning a language which industry makes no use of. They will voice the same complaint if expected to use Ada.
Any language has libraries to rummage through, including Ada. That is why instructors must design assignments which prohibit the use of existing libraries or make assignments out of reinventing libraries.
Rigorous programs expose students to a variety of languages on every level of software design.
Besides, most software development in the future, will look very much like plumbers in hardware stores. Most applications will not have to be written from scratch. That was the point of object oriented programming, remember?
It's as important to know how to write programs out of existing code as it is to write them from scratch. Any good university teaches both skills and language is completely irrelevant.
Posted by: Clifton Brooks at January 10, 2008 06:08 AMClifton is right. Teaching Java as a language doesn't mean that you have to neglect algorithms and data structures. It's primarily a matter of course material; it should be possible to cover (for instance) hash map implementation in pretty much any language.
Especially compared to C++ (which I, too, learnt before Java), Java is good as a beginner's language because it has automatic memory management (garbage collection) and avoids pointer arithmetic. Both of these things can be learnt (if necessary) after learning Java (or another language with GC). It is much easier for beginners not to have to deal with them. Not having to do so, in fact, makes learning other aspects of programming easier.
But to re-iterate, the real point is: the programming language is largely irrelevant. It's the course structure/material that define what a student learns. Blaming Java for a perceived lack of skills in graduates is ridiculous.
I think that one of the primary benefits of ADA was that it makes you think about programming the right way. I think that much of this is lacking in modern computer professionals. Programming in ADA gives a student at least some exposure of a sound programming philosophy as well as the technology components.
I seem to recall a Mars lander that crashed into the planet a few years back; something that an ADA-specific implementation and a sound programming philosophy would have avoided (and at a huge expense).
We could use a bit of foundation for new programming students. College still makes you take World Lit, and History, though you don't ever really use this in the real world either.
I don't know about the rest of you, but I hope that they do not continue migrating Air-Traffic Control systems, or Nuclear-Missile Guidance systems with ANY of your JAVA or C++ compilers.
For everything there is a place.
Posted by: Marc at January 15, 2008 12:22 PMIMHO The need for that level (Sorting and Hashing) of development is not as prevalent as it used to be.
Is this really as big of a concern as we make it? For example, is there still a big Assembler community?
... my two cents...
Posted by: Jimmyt at January 15, 2008 01:00 PMAs a current computer science undergrad who was taught Java first, I can see both sides of the argument.
I largely agree that curriculum determines how well one knows how to program. Our program requires us to implement data structures from scratch very early on and also is designed to give us a good foundation in general logic and programming concepts. I've been able to pick up other OO languages on the fly at work based on my experiences in classes, so I'd say that was effective.
On the other hand, I sort of wish that I had started with C++, since it's easier to skip over something you already learned than to fill in the gaps later. For example, I am completely baffled by pointers, and since we use .NET at work and Java at school, I haven't really had a chance to learn.
I think an adequate compromise would be to adjust the program to accomodate majors and non-majors. Other disciplines (especially the natural sciences) have one introductory course designed to fulfill gen-ed requirements for non-majors, and another one that is an introduction for serious science students. Computer science should do the same--teach the non-major course in Java and the major course in C++, with crossover electives for each.
Posted by: kdub at January 15, 2008 01:32 PMI resonate with Marc that the language used tends to enforce certain lessons. The problem with Java is that it allows for too much lazy thinking. While the curriculum could be forced otherwise, academic intertia is against it.
As I have suggested elsewhere (python.about.com), this article creates a conflict where one does not exist. The original article is about what is best for teaching computer science, not which of Java and Ada is the better language.
Posted by: Al at January 21, 2008 05:10 AMTOP STORIES
ADDITIONAL RESOURCES

- Remote Access: Maintain Security and Decrease the Burden on IT
- Beyond AntiVirus: Symantec Endpoint Protection
- What Every Enterprise Needs to Know About VDI

- Solution for Open Virtualization Provides Server Consolidation
- Help Simplify Virtualization
- A Guide to Rich Internet Application (RIA) Security





