Professors: Java 'damaging' to students

January 8, 2008 6:18 AM PST – Posted by Andy Smith

Bring back the basics. Two computer science professors at New York University complain that universities aren't preparing students for today's software industry. They claim that students trained in Java "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."

Read the full story on Slashdot: "Professors slam Java as 'damaging' to students"

Add a Comment (Log in or register) 22 comments (Showing first 20 comments)
by DatabaseDoctor January 8, 2008 7:11 AM PST
No kidding! This has been a frustration of mine for years. I've been involved with software for over twenty five years and, each year, it becomes harder to find young talent that understands the basics of computer programming. Whether its SQL or simple techniques and methodologies, the kids today have a "shoot often and hard enough and something will stick" mentality. They didn't grow up in the era of "you have 6K of ram to program in" or "hard drives cost $1000 per megabyte, don't waste it". They don't comment their code, clean up their cursors or, most importantly, code for the "whatif" cases. Error handling is a lost art.

When I teach SQL, the students don't get to use GUI tools. They must use the command line. This may frustrate them but they will always have a command line to access, while they may not know what GUI will be present, if any. Our database design course uses NO COMPUTERS to get the students to understand that the mind is the best tool around, not some $25K piece of software.

I know that there are plenty of good, qualified new talent out there each year. Unfortunately, it becomes harder and harder to find through the morass of mediocre coders and lazy, miseducated wannabees.
Reply to this comment View reply
by mcugaedu January 8, 2008 7:12 AM PST
In 1960 somebody could have said, "It's damaging to teach our students FORTRAN rather than machine language. They don't know how to write a program that doesn't use the printer, and they don't know how to do their own binary-to-Hollerith conversion." Ditto for all the other advances in programming technology that have ever happened.

You don't have to learn all of computer architecture in CS 101. Pointers, in my opinion, are now a low-level feature that *should* be left to the programming language implementor rather than the programmer.
Reply to this comment View reply
by ssidner January 8, 2008 8:39 AM PST
Java is the COBOL of the 21st century.

I consider that a compliment. If you want to write killer apps, that get stuff done, and you want to do it easily and quickly, Java is perfect.

Remember, programming in C & C++ lower your IQ by 10 points. I have written hundreds of thousand of lines in both, and they are great for certain things. But applications should be written in Java, just like they should have been written in COBOL in the past.

COBOL is still alive and well, whereas FORTRAN and Assembler are pretty much gone.

When the Singularity occurs in 2043 and the first self-aware computers are born, I bet they will be able to run Java apps.

I have taught CS classes. I teach Java to everybody, and C/C++ to the system programmin types. Teaching Java first helps them understand why C & C++ programs must be written very carefully.
Reply to this comment View all 2 replies
by Razzl January 8, 2008 9:23 AM PST
Using calculators has been damaging to math instruction, but are you prepared to give them up? It's the job of instructors to find a way back to the basics through the layers of simplification. The fundamentals are always there for those who know how to teach them...
Reply to this comment
by yetiTrek January 8, 2008 9:41 AM PST
I think these professors are in many ways out of sync with the market demands. As a CTO, I find it difficult to find young programmers who are well trained in Java, AJAX, and Web 2.0 supporting technologies. This is simplistic, but I feel that if the universities were educating CS majors in the both the fundamentals of programming as well as tools and languages that support the marketplace demands, we wouldn't need to send so much of our work off-shore.
Reply to this comment
by ehfla January 8, 2008 9:46 AM PST
They are right in terms of Computer Science majors. But it does not apply to CIS or BIS majors which are focused on applications development, not systems level software.
Reply to this comment
by hodge3153 January 8, 2008 10:19 AM PST
I have to agree with Database doctor. I am also of the opinion that Java and .NET encourage poor programming practices. On such example is this: One can allocate memory without every being concerned with releasing it. While that sounds great, it does not work in languages such as C or C++. Did anyone every consider the amount of code required to be running in the back ground to "manage" those resources. What language do you think that code is written in?

As for FORTRAN and Assembly they are not dead. It was the assembly programmer who created the BIOS for the computers we use right now. It is all to easy for those who spend most of there time writing software for Windows ("Big Iron") as I call it, to overlook what made their job possible. Java was not used to create the Windows OS, it is C and yes Assembly. It is not Java that flies the planes that take us on vacations, makes the cell phone work, or allows the GPS navigation system to get us where we are going. Under the hood it is still assembly and C. What language was use to create and maintain Java or .NET for that matter?

There are a lot of people who drive cars that have no clue how things work under the hood. When the car breaks they are at a loss. It is the same with high level languages. Anyone can learn Java, it was designed to be easy. Teach students assembly and C so that they understand how things work under the hood. It is fairly short work to teach a programmer, who understands how things work under the hood, a high level language. It is a monstrous task to teach a high level programmer how to fix what is under the hood. Stated another way; It is easy to teach a mechanic to drive a car, he probably already knows. It is very difficult to a driver to fix his car.

Question, When you need your car fixed, do you hire a driver or a mechanic?
The same answer applies to hiring a programmer.
Reply to this comment View reply
by andyengle January 8, 2008 11:50 AM PST
I use Java because it does NOT have pointers, which make software more about debugging than about functionality. But all this is really turning out to be another which-language-is-better urinating contest. If the profs don't like Java, then don't teach it! They're the ones (supposedly) teaching the courses, so they can use something besides Java if they wish. Besides, it's up to them to make students learn the concepts; most students come to learn, not to demonstrate their knowledge of a topic.
Reply to this comment
by spayced January 8, 2008 11:52 AM PST
If you actually read the article you see why. The entire article is meant to promote Ada programming language because they work for AdaCore. They also promote SPARK, but we realize that Ada is a spinoff of SPARK. These guys are self promoting and I'm the only one who realizes it... "As founders of a company that specializes in Ada programming tools for mission-critical systems, we find it harder to recruit qualified applicants who have the right foundational skills." means "we find it harder to recruit applicants who know Ada"
Reply to this comment
by Ian Joyner January 8, 2008 3:24 PM PST
They are right, but for the wrong reasons and come to the wrong recommendations. They even quote Bjarne Stroustrup ? maybe the greatest self promoter in the industry (note how he taught the EEs so much better than the CSs and they had to come running back to C++) ? he invented what must be the worst language ever. This will hardly make up for Java's failings. And C to teach the language/machine interaction. Hardly. C exposes low-level details where you don't want them, but does not actually give you a good feeling for what the language to instruction set relationship is. For that universities should go back to Unisys Clearpath MCP machines (the surviving remnant of the Burroughs B5000, look it up in Wikipedia) and get a clean architecture where if you learn systems programming in ALGOL, you know exactly what the compiler is doing, you get clear stack traces, none of this C/Unix or Java nonsense.

Then if you want to do OO, use Eiffel and teach proper concepts to do with typing and how typing can help without getting in the way. Then for a different perspective languages like Scheme and Ruby. And trash UML completely.
Reply to this comment
by NearChaos January 8, 2008 5:51 PM PST
The truth is in the middle. We need Java, C# and whatever comes next as highly productive language to write the big code that makes the world go, that runs on big machines. But we also need the C++, C and assembler programs to write the little code that makes the world go in our PDAs, alarm systems and coffee makers.

It's probably time for Computer Science to mature as a trained discipline and develop some specialties. For how many decades have English majors been "Romatic Literature" or "Modern Novel" specialists? There should be a track for people who are interested in close to the metal programming. All students should have to take an intro course to decide if they want the specialization in the first place. Those who don't can at least come away with concepts like bitfields, which are indespensible in Java and about which most current degreed programmers seem pretty clueless.
Reply to this comment
by Scott.Walker January 8, 2008 8:11 PM PST
From reading the posts so far, it seems like most are overlooking the fact that there are two distinct disciplines in question here. From my POV (Computer Systems Engineering), the most powerful language is C/++ (depending on the application of course). It seems that much of the debate in the previous 11 posts is failing to recognise that if you want a pretty front end app, then sure, you use the language that's best suited to the cause, Java, C#, etc. If you're writing daemons, hardware drivers, or missile flight control systems, then no, java is not your friend, you want something low level, either assembly or something a little more abstract, like C, but in these situations, it probably doesn't matter too much since the Systems Engineer has most likely already stated that "The system shall be coded using language X", in which case, there's no room for debate.
As far as I can tell, there seem to be far more students today that want to learn software coding rather than digital electronics, and hence, firmware & low level coding languages.
If more students opted to learn digital (computer) systems from the ground up, then there would be more people around that know how to dereference/manipulate pointers, understand how to malloc & free dynamically allocated memory etc., but it's not really something that CS students learn unless they take on streams that teach compiler design or similar subjects.

In essence, I think it's a 'horses for courses' situation where it's important to have both sides of the coin working in a symbiotic relationship to develop a bulletproof backend with a pretty frontend that gives a pleasant user experience. Personally, I really can't be bothered coding pretty interfaces with pulldown menus etc. and would rather focus on the low level functionality & leave the pretty stuff for those who prefer that side of coding, but that's why I followed the CSE stream rather than SWE.... Maybe it's just a matter of industries pushing for CSEs from universities - if they don't, maybe there's not as big a call for them as the article wants us to believe.
Reply to this comment View reply
by microsoft slayer January 8, 2008 11:49 PM PST
Java and Ada sucks...use PHP or Ruby on Rails instead...be productive and stop being a useless overpaid underachiever!
Reply to this comment
by stevenelliottjr January 9, 2008 7:05 AM PST
I love these academics that sit around all day and have this time to complain about software engineering fundamentals. They must sit around all day and show each other their radix sorts and do jumping high-fives if they shave off a 1/100th of a second.

Any developer out there working in an in-house development environment needs tools that will let him solve the problem as quickly as possible. Something like Java or .NET that allows you to focus on the problem and not the brillian coding you're doing is all that matters. At the end of the day, the users only care of something works for them not how smart you are as a programmer. I have never once met a user that said, "you must have really solid rudiments in C -- good work!"

Always remember this - Those who can do, those who can't teach... and those that can't teach... teach Gym
Reply to this comment
by MadLyb January 9, 2008 8:48 AM PST
I agree and diagree with the author's. Students need a foundation in more than the language of the day. They should be exposed to foundational languages like C, Fortran, and Assembly and supporting areas like business classes, but the math requirement is usually too much for the normal CS major.

College in the US, overall, is a detriment to preparing technology professionals requiring entirely too much time for subjects that should have been covered in High School (English, History, etc.) and not keeping their currriculum up to date with the industry.
Reply to this comment
by givemesugarr January 10, 2008 12:55 AM PST
well, i agree with them when they say that learning only java is dangerous. as a matter of facts a computer programmer MUST know how to use c and then how to use other programming languages. from what i've understood from the article, these professors are founders and active in the ada language and thus is obvious that they'd think of the language they've developed as the best around and would denigrate the programming language that is at the opposite of their programming concepts. now, i think that if students don't know how to program but only how to put together an application (that's what they say about the java students) this is due to the professors lack of knowledge about java programming. a true java developer always knows what the program does and how it does it, knows what does the code that he uses and knows how the code does the things. but the lack of this knowledge from the students is not due to the java language itself but to the lack of knowledge from the professors. if you want students not to use graphical interfaces make them use notepad or a text editor, restrict the access to the swing or javax packages and then make the students compile their programs with javac. this is the true way of teaching java. after some time that the students have done this type of programming then have them use other advanced productivity packages and a graphical editor.
if we were to analyze the floating point issue, that indeed is a good point in favour of the article, but if they'd be knowledgeable about java they'd know how java handles this problem. and that way is an elegant one.
now, let's speak about the strengths of java:
1. is opensource (recently has gone opensource for the ones that don't know it), which means that people could modify the behavior of the language itself or it can be accessed by every single developer for work without having to pay for it.
2. is platform and library independent and this is a point that c or c++ don't have. this feature is the main strength of java since it makes developing cross-platform software more rapid. this is not possible with c or c++. if someone writes c++ code using windows libraries is more likely that it won't work on unix platforms and that the memory is handles in different ways.
3. its code has a high reusability which implies that productivity is very high when compared with c or other languages.
4. it handles all the memory usage by the jvm and prevents memory issues or unallocated memory usage or other stuff that in c or c++ is mandatory to explicit. this prevents people from doing bad things that are possible in c/c++.
5. it has an exception handling that is the best around the world. the language lets you handle every single issue that might occur during the program execution. a true java dev uses exception handling very often.
6. the official free provided documentation is something awesome and that no other language has in the same terms.
7. the formal absence of pointers, even if you really are to look into the java code there are objects that behave like them (java professors should already know this).
8. junit, which is one of the best tools for code testing around the world.
9. easy to debug.
10. is very easy to mantain
11. javadoc is a godly invetion
the problems of java are:
1. no direct handling of memory.
2. slow execution due to the presence of the jvm.
3. formal absence of pointers.

now if we were to tell about what language to use you have to look at what you need to do:
- if you need to program core system features like kernel and bootstrapping you don't even need to chose since c is the language to use (not c++ since it has some issues in the memory allocation/deallocation).
- if you need to program an operative system you'd use mainly c++ or its derivates.
- if you want to program everyday applications you'll use java, since they're easy to write, to test, to debug and which work on every system that users use.
- if you want to develop web apps i suggest the use of ruby+jruby or java itself. now the world is moving towards the global connectivity and the future is in the applications that are to be used online (just take google office as an example). obviously the systems on which run these apps need to be developed in some other language, since they'd be critical ones.
in the article is mentioned the bios, but maybe they don't know that bios is slowly dying, now being slowly overcome by intel's efi and other stuffs like the new asus bios based on splashtop that is able to provide a working environment for usual people needs without booting into the os.

arriving to the conclusions, i'd say that:
1. java as a first language is not a bad idea but it has to be taught in the right way and the students that graduate with java as first language have only to be employed into the development of applications.
2. students who need to work in critical environments cannot use java as their primary language, or better, they'd be able to use it but they have to be able to convert java code to any other language code and have to do it in a very short period of time: the one actually needed to write down the code.
3. the companies mentioned there as complaining ones are:
- microsoft: we all know the "high" quality of the software developed by this company and how they boycot sun's java (they've created their own java that we all know how good is), so there isn't much to say about it
- ibm: which we all know that is a company that has its own software too and we know that we have to thank them for about everything that has happened in informatics.
- intel: why should an intel developer use java?!?! this is the real question. intel is known to be the world leader in silicon solutions and it's obvious that low level programming is mandatory for the devs working there, so java is obviously not good for them.
- national instruments: also this company doesn't have much to do with java programming.
- at&t: great user in the telecom industry for a long time now. it's obvious that it's interests are in firmware and low level programming and so also it's obvious that java devs would find bad time in this company, if it weren't for the development of java apps meant for phones.
- bloomberg: java devs here could have something to do, but also there are a lot of interests of this company that aren't adapt for java (financial management or television broadcast).
now, it's obvious that these companies would complain about java as being assumed as first programming language. so the solution is to slit up the courses among the ones with java as primary language and those without it.
Reply to this comment
 See all 22 Comments >>
Powered by Jive Software
What is News.com Extra?
Our reporters and editors handpick the tech stories you shouldn't miss.
News Extra RSS Feed
Add this feed to your online news reader
Google
Yahoo
MSN
Submit a story to News Extra
Got a tech topic not already covered on CNET News today? Write up an intro, include the link, and send it in for consideration.
Submit a story
Recent posts from News.com Extra
How fast is your flash?
Baseball 2008: Parsing prof's pennant picks
High hopes for China's 'eco-city'
The $350,000 big-screen, 3D 'VisWall'
How we hear one voice amid many

Inside CNET News

Scroll Left Scroll Right
  • News - Business Tech

    Dell planning to ditch factories

    CFO Brian Gladden has said the company has "more work to be done" to improve profitability. Now The Wall Street Journal reports that Dell is planning to lower costs by selling off its factories.

  • Gallery

    Photos: Ron Paul's RNC alternative

    As the Republican convention took place just miles away, a crowd rallied for the former presidential candidate and his message of limited government, ensured civil liberties, lower taxes, and peace.

  • Negative Approach

    Net-connected game consoles set to reach $8 billion in '13

    Revenue possibilities for games continue to grow, at least for the big console manufacturers, according to a new report.

  • Beyond Binary

    Microsoft begins big ad push

    Microsoft's multi-year push, estimated at $300 million, begins with a spot featuring Bill Gates and Jerry Seinfeld aired during Thursday's NFL game.

  • Video

    YouTube plays party politics

    During the presidential campaigning four years ago, YouTube didn't even exist. Now it's a tool candidates must master to get their message across. CNET's Kara Tsuboi stops by the YouTube upload booths at the Democratic and Republican conventions to find out why Google's video site has such a big presence in Denver and St. Paul, Minn.

  • News - Wireless

    Was EarthLink's failed citywide Wi-Fi a blessing in disguise?

    Wireless Philadelphia, the nonprofit charged with providing broadband bundles to low-income families in Philadelphia, may be better off in the long run without EarthLink.

  • Video

    Political party playlists

    We know the Democrats and Republicans are split over policy issues, but does their musical taste fall down party lines too? And what kind of gadgets did they bring to the conventions to listen to their music? CNET reporter Kara Tsuboi finds out.

  • News - Gaming and Culture

    Behind the prototyping of 'Spore'

    Many of the components of Will Wright's highly anticipated evolution game started out as small concept projects that are now available to the public.

  • News - Cutting Edge

    Execs predict next Google-like tech

    On eve of company's 10-year anniversary, researchers and business pundits speculate about what technologies might someday have as much impact as Google.

  • Gallery

    Photos: The brains behind Google Chrome

    Here's a look at some of the engineers and executives who took the stage at the company's headquarters as they unveiled the new browser.

  • The Cheapskate

    Record TV in style with a refurbished TiVo HD, $179.99 shipped

    TiVo is offering refurb HD units for cheap, though you'll still have to pay for the TiVo service.

  • News - Politics and Law

    McCain talks up oil drilling, green energy

    Republican presidential candidate says we need to drill new wells now, while supporting innovative transportation technologies and "the use of wind, tide, solar and natural gas."