Professors: Java 'damaging' to students
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"

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.
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.
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.
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.
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.
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.
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.
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
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.
-
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.
-
Reply to this comment
-
-
See all 22 Comments >>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.