Actually, this top computer science professor isnt exactly anti-Java but he deplores its effect on CS studies. And he sees dark clouds ahead if something doesnt change.
When I noticed that this list of the popular programming languages
placed Java in the top position, I picked up the phone to call Robert Dewar. Several months back I interviewed Dewar, a professor emeritus of computer science at New York University
, about Javas role in the college classroom.
What he said in that interview about Java in the classroom wasnt pretty.
In essence, he said that todays Java-savvy college grad is tomorrows pizza delivery man. Their skills are so easily outsourced that theyre heading for near-term obsolescence.
Dewar stresses that hes not against Java itself. But the fact that Java is taught as the core language in so many colleges is resulting in a weak field of computer science grads, he says.
The reason: students reliance on Javas libraries of pre-written code means they arent developing the deep programming skills necessary to make them invaluable. Colleges, alarmed by falling CS enrollment, have dumbed down the course requirements. Consequently, CS majors sail through a curriculum of Math Lite, earning a smiley-face on their papers for developing projects using pre-built libraries.
In the end, they graduate with a diploma whose value is questionable. They may be equipped for a dynamic career in fast food delivery, yet they are not fully prepared to compete against what is now a global field of rigorously educated software developers.
But What About the List?
But wait a second, Professor Dewar. (Actually, Dewar is both a professor and a CEO. He co-founded AdaCore, whose clients include Boeing and Lockheed Martin, so his experience includes decades in private industry.) I wanted to ask him, since this list of popular programming languges puts Java at No. 1 ahead of biggies like C, C++ and Visual Basic doesnt that negate his theory?
I mean, if Java is this popular, maybe universities should teach it first. It called being in touch with the real world, isnt it?
This list is pretty meaningless in my opinion, he says. Using YouTube and Google to measure popularity just means that you pick up the buzz factor. Many serious application developers are not even present on the Web, which tends to overemphasize academic and hobbyist views. As the list itself says, this has nothing to do with quality of languages or level of usage.
Furthermore, Java is mainly used in Web applications that are mostly fairly trivial, Dewar says, with his characteristic candor. If all we do is train students to be able to do simple Web programming in Java, they won't get jobs, since those are the jobs that can be easily outsourced. What we need are software engineers who understand how to build complex systems.
By the way Java has almost no presence in such systems. At least as of a few months ago, there was not a single line of safety-critical Java flying in commercial or military aircraft. I recently talked to a customer who had a medium-sized application in Java, which was to be adapted to be part of a safety-critical avionics system. They immediately decided that this meant it would have to be recoded in a suitable language, probably either C or Ada.
(Ada, by the way, is down at No. 19 in the list of popular programming languages.)
Dewar says he has been deluged with emails supporting his view that computer science programs must move beyond far beyond focusing on Java.
One was quite interesting, he says. It was from a software/hardware company in the Valley. The writer said that at the end of ads for software engineers, they added the sentence This job will not involve any use of Java, or any Web-based application programming, and that this single sentence was enough to essentially eliminate American applicants for their jobs which was their idea; they felt they had wasted too much time interviewing incompetent college graduates.
Questions for New CS Grads
Dewar says that if he were interviewing applicants for a development job, he would quickly eliminate the under-trained by asking the following questions:
1.) You begin to suspect that a problem you are having is due to the compiler generating incorrect code. How would you track this down? How would you prepare a bug report for the compiler vendor? How would you work around the problem?
2.) You begin to suspect that a problem you are having is due to a hardware problem, where the processor is not conforming to its specification. How would you track this down? How would you prepare a bug report for the chip manufacturer, and how would you work around the problem?
I am afraid I would be met by blank stares from most recent CS graduates, many of whom have never seen assembly or machine language! he says.
Lest he go too far, Dewar stresses that there are indeed some graduates who are unquestionably well prepared.
There are a couple of top schools where I think the students come in knowing a heck of a lot and they leave knowing even more, he says. Places like Carnegie [Mellon] and MIT those are not dummies who come out of those schools, by any means. So my comments dont talk about everyone everywhere.
To look back a few decades, universities once focused on programming languages that lent themselves to greater intellectual rigor, in Dewars view, like Fortran and Pascal.
But with the tech revolution of the 1990s, a blizzard of change swept through university CS departments.
I can relate what happened at NYU and I think its probably pretty typical of many places, he says. So were sitting around, and we ask, What language should we teach? And it was Oh, wed like to teach Java. Now no one around the table actually knows Java. But theyre sure they want to teach it because its an upcoming language that the industrys gonna use, and everyone will be doing everything in Java.
And it sort of swept the field pretty quickly. It swept away Pascal. At that time there were about 200 universities teaching ADA as a first language in the U.S. And a somewhat smaller number teaching C and C++. And it largely swept those away.
Java as a core teaching language is now universal. A good indication is that the [college placement] AP class is exclusively Java. Used to be C and C++. So Java has a really dominant place in the university curriculum.
As the sunny 1990s gave way to the troubled 2000s, two seismic shifts hit the software industry: the dotcom bust and a steady flow of outsourcing headlines. Both factors helped turn a healthy crowd of CS students into a comparatively smaller cohort. Enrollment trended ever downward. Academic deans felt anxiety tremors.
Here in 2008 the clouds are dark. Everyone is desperately worried about the dropping enrollments its dramatic, Dewar says.
We had 650 [NYU] undergraduate students in advanced courses, its now less than 300. A huge change. And youll find that repeated across the country, its not isolated, he says. You can imagine, if suddenly half your students disappear, then your budget gets under extreme pressure. The dean is unhappy if he sees that happening.
These are market economies in most universities no students, no faculty money, etc, etc.
In response, colleges have compromised heavily to attract students, Dewar explains. So two things: reducing requirements and getting rid of annoying math courses and things like that. And also trying to make courses fun. I believe that computer science should be fun, but the fun should come out of solving problems not making pretty pictures. Thats the danger, I think.
The situation has the potential to turn into a vicious circle: Enrollment is down, so CS programs lower requirements. This in turn creates more CS grads who are replaced by outsourcing. As a result, news of this outsourcing keeps driving down CS enrollment and the spiral continues.
Solutions (And a Ray of Hope?)
If its true that CS curriculums need to be improved, to be bulked up and made more in-depth, does Dewar foresee any improvements on the way?
I dont know, he says. We got a fair amount of interest going. And a nice thing thats happening is that theres going to be an ACM [Association of Computer Machinery] point-counterpoint, with me writing the point and some guy from some other university writing the counterpoint on this whole issue.
I just like to keep it as a topic of discussion. I know it strikes a chord among many university people, too. Part of the trouble with universities is that there are relatively few faculty members who know much about software. They know about the theory of computer science and the theory of programming languages. But there are relatively few faculty who really are programmers and software engineers and understand whats involved in writing big applications.
Its just not the kind of thing that universities are into, really. Because they tend to regard computer science as a scientific field rather than an engineering field. So Ive always felt that was a weakness.
Part of the problem is that programming is hard to teach. Programming is a mixture of a highly technical skill and an aesthetic art. And thats a very difficult combination.
Dewar sees at least four ways to better educate programmers:
More one-on-one mentoring My most successful teaching of programming was when I worked one-on-one with people, he says. Of course thats difficult at the university level, with a teacher-student ratio of 30 to 1, or 90 to 1.
Read a whole lot of good code One critical way of learning programming is to read a lot of code written by really good programmers. Most students dont get that opportunity.
Work in Groups I would like to see much more in terms of group projects. Now theyre hard to grade, and grading stands in the way of education, often and this is one of those ways. Its the same problem a manager faces, really understanding how much everyone has contributed.
Realize that copying code has value Its interesting when you think that the message that we give to students is: You must do this all on your own, you mustnt borrow anything from anyone else. And then we put them in a real industry situation and the message suddenly turns to, Reuse code as much as you can. Real life programmers get good at using chunks of other peoples code.
While those may all be good suggestions, Dewars voice alone isnt enough to produce change. As he sees it, CS departments need to light a fresh fire.
Ive got all these people saying Yeah, Yeah, Yeah, but thats not good enough to say Yeah, Yeah, Yeah you have to do something.
One obvious thing is that we need to get much more industry presence in the ACM curriculum discussion, because thats a real focus. ACM has a real influence over curriculums. Each year they produce a recommended computer science curriculum. So thats a real entry point.
One obstacle: The inertia is huge. So many members dont really want to learn new stuff, particularly.
Still, amid his doubts, Dewar believes that a bright, well-trained CS grad can have a good career.
My feeling is, its not a field where any idiot will be able to get a high paying job. Which at the height of the dotcom thing, any idiot could get a high paying. But competent, well-educated students will be able to find jobs without problem. I think thats a fairly widely held view.