back to article Academics slam Java

The choice of Java as a first programming language in computer science courses is undermining good programming practice, according to two leading academics. In a withering attack on those responsible for setting the curriculum for computer science courses, doctors Robert Dewar and Edmond Schonberg of New York University (and …

COMMENTS

This topic is closed for new posts.
  1. Mark
    Thumb Up

    I agree with academics

    Hi,

    I have done a computer science degree and computer systems engineering degree... and High level languages are just too removed from hardware...

    So what happens is that coding for performance and elegance goes out the window... where as knowing low level languages requires a good interaction between hardware and software...

    When I taught in university I always made sure my students psuedo coded everything... and then used the psuedo code as comments to code... That way in theory they could code in any language.

    However that said, what is really lacking in the graduates I have employed in the last 4 years, is a real foundation in language agnostic problem solving! Being able to look at a problem and figure out 2 or 3 approaches to solving the problem.

    Changing programming languages should be easy... However solving problems is where the focus should be on.

  2. TeeCee Gold badge
    Happy

    Programming courses.

    The second thing I was taught to write in at college (after BASIC of course) was Z80 machine code. That's right, the institution concerned was too tight to shell for an assembler, so we sat in front of the memory map and keyed the stuff in. The 0-9 and A-F keys on the keyboard were well worn and the remainder virtually untouched. If we wanted to write in Assembly language, we did it on a bit of paper, hand-optimised it and then translated it into hex ourselves.

    With the benefit of hindsight it was a bit like building a house without using any power tools. Perfectly possible, but you wouldn't want to make a habit of it.

    Kids of today <mutter, mutter>.

    I accuse Maksim of misuse of the "Joke" icon.....

  3. chris stephenson
    Coat

    Why can't we all just get along

    Cool your egos chaps, use whatever language, tools, or os for that matter, you like. If you and those that pay your wages are happy with the work you do then who gives a flying... Why is it that IT people get so fundamentalist about thier favourite language/framework/os? Different tools for different jobs chaps, diversity is a good thing.

    excuse me whilst i strap a bomb to myself and recite my mantra "there is one but language but ...

  4. Richard
    Boffin

    It's not about which language is best!

    This article was always going to produce a fanboy comment war.

    Steve Roper's comment above hits the nail firmly on the head - it's not about whether Java is a good language or nay, it's about whether it's a good FIRST language. It's not, just as a Hummer isn't probably the best vehicle to learn to drive in.

    The toolkit approach starts at way too high a level of abstraction. The problem isn't that you can't learn the techniques this way, it's that you start to assume that the toolkit IS the language and thus make completely invalid assumptions as to its capabilities and flaws. In a similar vein, I think that students should have to write and run programs outside of an IDE for at least a little while to realise what goes on under the hood.

  5. Rich Silver badge

    Sort-of agree

    I sort-of agree with the comments of the pofs.

    Personally, I don't like Java, but that's just me - I don't have a problem with anyone using it.

    The problem with Java (and indeed any very high level, highly abstracted language like it) is that it's very easy to loose sight of what's actually going on behind the scenes. Which, of course, if this is the only language you are using, you NEVER appreciate this.

    If your shiny new program is running in a multi-GHz, Multi-GB PC then this doesn't really matter much. The problem comes about when the hardware you are writing for is not so capable. Embedded systems with limited resources need a much better appreciation of what's ACTUALLY happening, rather than what a cursory glance at the high level source code would suggest is happening.

    If you don't realise that your single Java do_everything() method is actually allocating shed-loads of memory and churning through huge amounts of data, then you are going to come unstuck! Unfortunately, there are a surprising number of people who DON'T appreciate this. I see code all the time (written in C) that is desperately inefficient and resource-hungry. On an embedded system (which is what I usually work with), this matters. It matters a LOT. And this is code written in C; a language which SHOULD automatically give you an appreciation of what is really going on under the covers. Just imagine how bad (by 'bad', I mean inefficient and resource-hungry) the code would be if it was written in Java.

    And it's not just embedded systems. Why do you think today's desktop applications are massively larger than the ones we had 10 years ago, and despite it not actually doing a great deal more than the old software ever did, and running on hardware that is hugely faster and more capable, actually runs SLOWER?! The reason is, of course, because the code is massively less efficient!

    Comments by some people here on the lines of "why use something cruddy like C when you can just click your fingers and Java will do it for you" obviously don't need to worry about running their code on low-powered resource-limited systems. Indeed, some of them almost certainly do not even appreciate the problem. It is THESE people that the profs are referring to - softies that have been brought up on a diet of very high level coding that simply do not understand the full implications of what they are coding. As a result, these people are useless when it matters.

  6. Joe Stalin
    Stop

    Real Programers don't use Pascal

    Am I showing my age by using that title? If you remember it then you will know the author made some very good point, he favoured FORTRAN over PASCAL but his point stand the test of time. Some bubblewrapped kid can't compete with a dirty handed code monkey. Like him I would not trust a Java Programer to go back to his code 6 months after they last looked at it and expect them to fix/modify it, or worse still have them fix/modify some-one else's code. That would be a job for a real programmer not one of those quiche eaters.

  7. Anonymous Coward
    Boffin

    Re:So why the maths?

    @Trix,

    You know the computer games you play. You would be surprised to find many if not all of them have some rotational matrix calculations in there somewhere.

  8. Edward Rose

    I love these 'discussions'

    @Martin Gregorie

    I want what you're smoking, maybe then I would start to like my employers. Anywho, you'll find an awful lot of java web applications do have a graphical frontend. I'm not saying that Java isn't used as a backend, but I've never seen it (yes, humour intended).

    Pseudo-code is by far the best to teach first.

    I self taught Basic, then a small amount of assembly. School taught us pseudo as the teachers knew no languages, Best education I've had to date.

    Elec degree at uni taught us pseudo, C and assembly. Because that's what we'd use as gingerbeers (Okay, HDLs too).

    In current job a firm is being contracted to write fairly simple embedded system (I wasn't allowed, despite the saving it could have made the company, because I would have actually enjoyed it). They tried to insist on writting in C/C++. ???? Why?

    I mostly work in C, but there is no doubt that this project should be done in asm. It's just not big enough to need high-level.

    So, how about teaching the students a short bit on asm. a larger bit on C and some on a language like Java (about as much as you teach on C). There is nothing wrong with any of these languages (well, okay lots wrong, but meh ;) so let the students learn the differences and where each should be used. Of course, start with theory of structure, modules and pseudo code.

    A project on a language of their choice should be given (ie, write tetris, choose any of the taught, or maybe untaught, languages to do so). I think this is what is called an education, unlike what most places seem to give now.

    To the above comment, solving problems comes down to extracting fingures and trying to think. Kids of today sit back and expect everyone else to do the thinking (Yep, I'm nearly one of these kids, and I do work with these kids in my free time). They are always given the answer so don't ever expect them to work it out.

    Can we have an icon with a teacher/lecturer being spanked please?

  9. amanfromMars Silver badge

    Creating a New Language creates a NeuReal State?

    "I have regarded it as the highest goal of programming language design to enable good ideas to be elegantly expressed.".... http://www.cs.ucsb.edu/~ravenben/papers/coreos/Hoa81.pdf

    Amen to that Biggy, Brother. ITs Holy Grail.

    "You do realize that there's slightly more to programming languages than syntax, don't you?" ..... Would ConText be the Prime Core Discipline for Real Virtual Drive, AC? If Programming Languages do not Relate to Real Life Conditions they will not Drive IT Forward with Shared IDers* Programs....... NeuReal Agendas in New World Order Programming .....always AI Work in Progress, Intellectual Property Exercise ..... Presently executed Abysmally, probably definitely because it is not exercised at all outside of NEUKlearer HyperRadioProActivity Rings of Steganographic Stealth.

    * IntelAIgent Designers

    "Naturally, I don't post with my real name." ..Morely Dotes Posted Thursday 10th January 2008 22:48 GMT

    It is real enough for work here, Morely Dotes. And such CyberIDEntities as are Created for InterNetional Space Stationery Archives .... Virtual Reality Libraries for Realising Application .... can easily MetaMorph/Phlip Phlop In and Out of Imagined Spaces made Real. Today's Reality is only the Result of Yesterday's Thoughts Shared and Acted upon. Does C stand for C.ore? And C++, C.ore Creation/Immaculate Source. Or would that be a Special Application of Programming 42 Provide Virgin Root for New Growth for a Pretty Good Privacy Perly Gates Python snakeoil of ITs Own .... biding in the Open for Added Security with a Taste and a Swallow for all Languages.

    AI Unifying Script for Virtual Machinery, Magical Mystery Turing in Uncharted and Unchartered Waters/Environments.... Private Pirate PlayGrounds?

    Hmmm. I suppose UN Charted and UN Chartered Virtual Environments would be a logical Tangent for AI Political Control of CyberIntelAIgent HyperRadioProActivity although that would Create a QuITe Enigmatic Moral Dilemma for IT would surely be asked .."Who is in Control of Whom and Servering to What?" Suck IT and See will Answer that Riddle, Definitively.

    To ask the question is to Imagine that IT be True? :-) Indeed, In Deed, it does.

    Language is Siloed Hardware which Creates everything Artificial [the things that blight/enhance the Natural Environment .... which we also plant and infest with Seeds and their attendant Weeds. Although such Natural Growth is badly Abused and Used.

  10. Darrell

    @Sort-of agree

    Fair point, but surely this comes down to programming ability not the language.

    e.g.

    the String vs StringBuffer methods in java.

    if you append a String to a String then a new String object is created for every append., StringBuffer only uses the one object thus saving (potentially) shed loads of memory.

    You can write a poorly running, resource heavy, inefficient program in any language.

    (well the ones i have experience with, I know, I've done it!)

    P.S.

    Java was originally designed to be run on embedded systems (back in the old Oak days). So saying that Java is a web based only language is just plain wrong!

  11. Joe M

    Re:So why the maths?

    There are many situations where maths is an essential part of the solution e.g. minimal spanning trees, numerical analysis, linear programming and optimisation, goal seeking, signal analysis, Fourier transforms, pattern matching, statistics.... the list goes on and on. Although it is possible to use canned methods it's best if the developer at least understands the underlying mathematics.

    But the single most important reason for being a reasonable mathematician is because it makes you think in a certain way about logic, proof and method. This way of thinking is excellent for problem solving in the IT field. I have always found that although non-mathematicians can do a good job, mathematicians can often do it a little bit better.

    (And I won't bore you here about the guy who pulled my bacon out of the fire on a tricky printer driver job using advanced trig and calculus. But it happened.)

  12. Darrell
    Paris Hilton

    if only java didnt have a GUI

    "Students found it hard to write programs that did not have a graphic interface"

    If someone could find a way of writing a Java program without the need of a graphic interface, students could learn how to program properly. Hang on... I already do program in java and NEVER use the GUI interface.

    Its no different to using Visual C++ to build a form based program.

    Edsger Dijkstra described those exposed to Basic as "mentally mutilated beyond hope of regeneration"'.

    As far as Beginners All Purpose Instruction Code goes, I thought that it was supposed to be simple and easy to learn as a first step on the ladder to programming? Should every 13 year old computer studies student wanting to write their first "Hello World" program jump straight into C ?

    I started on LOGO, then BASIC then Pascal and finally C and C++ before learning Java. so does that make me mentally mutilated beyond hope of regeneration?

    Probably

    The Paris tag is to show what a real mentally mutilated person beyond hope of regeneration really looks like.

    Although I wouldn't kick her out of bed!

  13. Andrew

    Military Intelligence

    The actual article is on a "U.S. Air Force" affiliate website. This explains the bewildering choice of ADA as the "best first language" to learn. If you are programming for the military it's the only language they'll use (I've heard). I've never heard of ADA being used in any of the companies I've worked for.

    The Stroustup quotes come from "The Power of Ten – Rules for Developing Safety Critical Code", so it seems that these boys are only interested in teaching how to develop safety critical code for the Air Force in ADA, presumably using consultants from ADACore. Their assertion that you shouldn't learn java because it results in an inability to program without a user interface is also a bit inexact. Do you think they actually meant visual basic 6?

  14. David
    Stop

    Useless

    Well they've completely missed the point of Java spectacularly; to not be dependent on hardware/platform specific details. If they wanted to give students a grasp of more technical issues, they should get them to write java byte code to execute on the JVM.

    They also might want to know about System.out.println("Hello world"); which makes it easy to write non-ui programs.

    Maybe they should go back to doing something they're good at; plagiarising other people's material for their own courses (something I've seen done in academia)

  15. Philip Sargent
    Thumb Down

    ML

    The Cambridge computer science course uses lots of languages for different purposes, but the one that it is used to introduce new students to the idea of computer *science* is ML. This certainly inculcates some useful habits of thought.

    http://www.cl.cam.ac.uk/admissions/undergraduate/myths/

    "We start by teaching a language that few if any will have even heard of let alone used – so all our students start off at roughly the same level, and we build from there. "

    "Teaching yourself to program can lead to your picking up bad habits that will hinder your progress later. In particular, you should avoid languages like C and C++. "

  16. breakfast Silver badge
    Boffin

    @trix

    High level maths has everything to do with programming. Absolutely everything. Not just the basic language, nor the operations performed but the whole theory of how and why programs work, how efficient they are how they interact with the hardware or the virtual machine is all mathematics.

    The code you see may not look that way, but the best programmers are the ones who can understand the maths of what they are doing.

  17. Anonymous Coward
    Happy

    hrmm

    Any sensible uni course teaches a variety of technology and language; mine used Java as the main teaching language (that is, for things like OO concepts, software architecture/frameworks and various concepts) but augmented it with courses using languages like C and a few others for the specifics that Java couldn't cover (like lower level code/assembly, pointers, compiler writing, etc).

    It seems they're making a criticism of the language (derived from its real-world usage) when it really should be a criticism of the use of it in teaching, or teaching methods too wedded to a specific language or task area.

  18. David

    Abstract and Theorectical

    Well they've completely missed the point of Java spectacularly; to not be dependent on hardware/platform specific details. If they wanted to give students a grasp of more technical issues, they should get them to write java byte code to execute on the JVM.

    In the real world a lot of programming is in a web environment where platform details are explicitly not important.

    Scientists in Physics spend a large percentage of their time fixing pointer errors instead of writing code that solves their problems. What an earth has the exact details of an x86 processor got to do with the mass of a photon ;-)?

    They also might want to know about System.out.println("Hello world"); which makes it easy to write non-ui programs.

    Maybe they should go back to doing something they're good at; spending 'charity' donations plagiarising other people's material for their own courses (something I've seen done in academia) and why I did an applied degree instead of something abstract like computer science.

  19. Anonymous Coward
    Anonymous Coward

    Nice one Mars

    I was getting a bit worried because some of amanfromMars' posts on other topics were starting to make sense.

    Good to see he's back on top form with this one - but what happened to the little Mars icon? I smell a conspiracy.

  20. Llanfair
    IT Angle

    when I was a lad...

    I remember starting programming by learning Basic on the Amstrad CPC machines. That gave me the fundamentals of programming introducing for loops, while, if statements and so on. When I was at college, they taught Pascal and I loved the language as it was a strongly typed language.

    We also learnt Z80 assembler. The way we did that was we were given a problem and we had to make pseudo code in how to solve it. Then we had to convert it to assembler. We had to predict what would happen to all the registers and the stack. We also had I think it was a HP Z80 boards that would input with the built in keyboard. We had to convert the code into the opcodes and enter it in Hexadecimal. The other thing we had to work out was how long it would take. We also had hooked an oscilloscope to watch the pins going up and down when we used the step by step function. I really enjoyed programming from then on because I learnt exactly what my code was doing on the legs of the Z80 microchip (no innuendo intended). Those were the days.

    Unfortunately these days, when applying for jobs, they don't care that I used MSDOS or have used assembly language. It has never really helped me to get a job.

  21. Mark Wills
    Happy

    What about Forth then?

    : MYOPINION 10 do ." Forth Rocks" LOOP ;

  22. Shakje

    @David

    You have spectacularly missed the point of the article, and the following comments.

    Programming in byte code would nullify the exercise of learning a high-level language. The argument is, that Java is too high-level, and of course, byte code is too low level. A better way of illustrating what you have said is, teach them to write platform independent code in C (which is pretty straight-forward) so that they know platform-discrepancies and what to look out for, and then show them a platform-independent language such as Java, which circumvents the problems they may have faced writing platform independent code.

    In the real world, I would venture that a lot more code is platform-dependent apps and systems code.

    "Scientists in Physics spend a large percentage of their time fixing pointer errors instead of writing code that solves their problems. What an earth has the exact details of an x86 processor got to do with the mass of a photon ;-)?"

    This is a ridiculous statement, and completely off-topic. The article is based on programming taught in CS courses, nothing whatsoever to do with physics scientists who use coding to make their life easier. They should be using a high-level language, designed for science, and the comment is irrelevant to the discussion.

    println has been mentioned plenty already.

    It's not plagiarism, it's referencing.

    Lastly, why post the post you already posted again? How about just putting the new bit in the middle into a new comment instead.

  23. Dan Clark
    Happy

    I've heard of Java.

    It's a bit like Javascript isn't it? ;)

  24. Anonymous Coward
    Alien

    Hardware vs. Software.

    Java is promoted by a HW vendor, what do you expect. They argue it's platform independent, but they make sure the platform it runs the fastest on is theirs (which they having trouble with anyway, J6 is sluggish on T2 processors compared with Xeon or Itanium).

    So the slower & more bloated the better, it means more hardware.

    The next step, I think, is ship some hardware 'JVM add-on PCIe x 256 cards' to boost the slug. Which is going to be the JV(irtually)V(irtual)M, I see the irony comin' up.

    Come on it's not only bad teaching wise, it's bad on all counts, except marketing.

  25. James
    Jobs Horns

    another programming holy war!

    Anybody who spouts off about language a being better than language b, needs a bit of a reality check. It's really all about the best tool for the job, and there are times were C++ wins over a managed language like Java and vice versa.

    After all, you wouldn't write a real-time rigid-body simulation to u on specialist hardware in Java, would you? And at the same time, you would probably not want to write a web app, or multi-threaded server code in C++.

    And as for those of you claiming that a certain programming language makes it easier to make mistakes, I suggest you find another career outside of IT. Nobody's interested in your excuses for your incompetence, least of all me.

  26. Anonymous Coward
    Flame

    typical academic snobbery

    having worked at universities for 8 years now, i can safely say that this is the kind of crap academics spout ad infinitum. they are always poo-pooing stuff which they aren't involved in. 6 months/years later, when they are involved, they extoll the virtues of it.

    what riles me is that these people are the ones teaching others.

  27. Anonymous Coward
    Happy

    At last ...

    "If your shiny new program is running in a multi-GHz, Multi-GB PC then this doesn't really matter much"

    It's this attitude that lies at the heart of this debate. In a world that is trying to reduce power consumption and go-green all resources become important. A faster processor consumes more power and dissipates more heat, all that memory consumes power to remember the 1000s of extraneous bytes of code and data that innefficient resource use requires. Of course, if we used all those cycles efficiently those tasks we still complain are slow would be so much faster and thus use less power to complete but companies like Intel wouldn't be very happy as they wouldn't have such a ready market for their next multi-cored, faster processor 'cause we wouldn't need it!

    I have been arguing for many many years now that garbage collection is the devil's idea as it instantly increases a running programs footprint with 'dead' objects lying around waiting to be reclaimed and removes the programmer from understanding and controlling the lifecycle of their data.

    I admit to being one of the old breed of Computer Science graduate (not to mention having a childhood writing code to run on 6502s, 68000s and building hardware with my father that needed low-level bit-twiddling control code) who learnt how all these small black plastic bits with pins could be joined together to allow a game such as Elite to run using so few resources on a BBC micro. I'd like to see a modern 'programmer' create a game of such power with so few resources available now.

    Rant over! I'm pleased to see that these academics and so many readers here have the same view as me - there is hope for this industry yet.

  28. Anonymous Coward
    Anonymous Coward

    @Dan Clark

    that's the way it started, and should have stayed. Java descrepit.

  29. David Harper

    Re What about Forth then?

    Ah, Forth. A language which combines reverse Polish notation with the ability to define new keywords in the language itself. And it was invented by an astronomer to control telescopes. What more could a Real Programmer ask for!

  30. Dr. Ellen
    Flame

    Taking a utility belt from my professors

    Bear in mind that I'm speaking as a physicist rather than a computer scientist, but long ago (the 1960s) I was taking a programming course. ALGOL, nothing but ALGOL. I noted that I'd rather have FORTRAN. Steam started coming out of the professor's ears.

    Academe has a strong anti-utilitarian bias. Always has, always will. "Are we a trade school, then?" they will say. And as a result, they turn out people unfit for actually DOING things.

  31. Anonymous Coward
    Jobs Horns

    Sigh....

    I think oranges are better than apples because they have more citrus.... really now - ever heard the term Fitness for Purpose? Academia sometimes amazes me...

  32. Ross

    @Joe M

    [And another whisper: the guy who understands what “sub ax,ax” means (and implies)]

    It means you'd better hope you're in a 16 bit environment otherwise Murphys law says you're gonna have one difficult to trace bug next time you do anything with eax.

    Personally I prefer bitwise operands like xor or and to do the same trick.

    Back to the article, Java has its uses in teaching. It's a tool like any other language, and like any tool it can be used for the right reason and the wrong reason. For example I can use a hammer to put a screw in a baton on the wall, but it's an awful lot more hard work than using the right tool, and the result will be somewhat less elegant.

    Java is good when you're teaching logic and methods etc - the student can focus on the task at hand rather than wondering why their 4 hours of work just threw a SIGSEV. It's crap for teaching ppl about the link between software and hardware as it purposely abstracts that.

    Pick the right tool for the job at hand and you'll get a better result.

    And whilst we're randomly ragging on various languages - C++ is an abomination unto the Lord and it's use should be punished with fire. *Lots* of fire. You may as well add PEEK and POKE to Javascript as add OO to C. Anyway, you can approximate classes with judicious use of structs, function pointers and void pointers (oh no he didn't just say that? He did?!)

  33. Ishkandar
    Boffin

    @Basic Anonymous Coward

    Of course, Basic screwed up your IT employment opportunities !! Unfortunately, that was saved by your knowledge of COBOL. These days, to get a half-way decent COBOL programmer, one, frequently, has to fetch a Voodoo practitioner to "re-call" them !!

    Alas, excessively long hours, loads of black coffee and tons of ciggies have taken their toll !!

  34. Anonymous Coward
    Boffin

    Computer Science vs Computing

    *** Possible Rant Warning ***

    Personally, I think that a lot of comments here have been way off the mark.

    To my mind, as a Computer Science graduate, there is a very big difference between CS and Computing.

    I would expect a CS student to learn to understand how the CPU, Microprocessor or Peripheral Device they are coding for works **at the electronics level**. In contrast, I would expect a Computing student to learn to become a code monkey - someone who can code GUI / Web applications but relies on all the other support code (OS, Server, Comms Protocols, Support Libraries etc) to be written by others.

    Now, for Computing students who don't need to know the fine detail, Java is probably fine.

    On the other hand, a CS student NEEDS to know about and understand things like Pointers, Memory Management, optimisation of Algorithms and Data Structures, Threads and Concurrency (and how to do them properly). Java is not a good teaching tool for these concepts.

    Because Java shields the programmer from the 'low level' concepts it is not good for anyone who needs to know and understand the low level - eg. when coding for things like Operating Systems, Embedded Systems, Safety Critical Systems, SCADA, Military Systems, Command and Control etc.

    Java has its place - but its place is in courses churning out Code Monkeys, not on serious CS courses.

  35. Mo

    Object Pascal

    It's a shame Borland's Object Pascal is all but dead these days. {Turbo,Borland} Pascal 7/8 were fantastic environments for teaching the principles of programming in.

    If you've mastered Object Pascal, you can pick up most other languages fairly easily (including, of course, the lecturers' beloved Ada).

  36. Rich Silver badge

    @David

    "In the real world a lot of programming is in a web environment where platform details are explicitly not important."

    ...and a HUGE amount of programming is not in a web environment and platform details are very much important :-)

  37. Darrell

    @Computer Science vs Computing

    Hows the weather up there in your ivory tower?

  38. David

    @Rich

    "...and a HUGE amount of programming is not in a web environment and platform details are very much important :-)"

    ... So that makes the case of the web environment a tiny insignificant one then?

  39. David

    @Shakje

    "Programming in byte code would nullify the exercise of learning a high-level language. The argument is, that Java is too high-level, and of course, byte code is too low level. A better way of illustrating what you have said is, teach them to write platform independent code in C (which is pretty straight-forward) so that they know platform-discrepancies and what to look out for, and then show them a platform-independent language such as Java, which circumvents the problems they may have faced writing platform independent code.

    "

    Well I might well be wrong but I've certainly heard of people regarding this as a useful exercise. Never tried it myself though. I agree with write platform independent code in C.

    "In the real world, I would venture that a lot more code is platform-dependent apps and systems code."

    You can argue this until the cows come home. Platform independent code isn't some kind of tiny niche though and I'd venture it will increase in amount.

    "Scientists in Physics spend a large percentage of their time fixing pointer errors instead of writing code that solves their problems. What an earth has the exact details of an x86 processor got to do with the mass of a photon ;-)?"

    "This is a ridiculous statement, and completely off-topic. The article is based on programming taught in CS courses, nothing whatsoever to do with physics scientists who use coding to make their life easier. They should be using a high-level language, designed for science, and the comment is irrelevant to the discussion.

    "

    Not at all irrelevant. Much of computing is solving real world problems with a specified budget/time budget. Teaching should reflect this. The point is they don't use a high level language and pay for it dearly.

    "

    println has been mentioned plenty already.

    "

    Oh I''m sorry.

    "It's not plagiarism, it's referencing."

    Not when they remove it from a web server because its getting too many hits and their worried someone work out where they got it from ;-)

    "Lastly, why post the post you already posted again? How about just putting the new bit in the middle into a new comment instead."

    A simple mistake.

  40. marc caron

    Developer

    The point of C/C++ in the education of developers is that it is one of the few languages that you can move seamlessly from Procedural Programming to Object Oriented programming without having to either learn a different syntax or ignore half the code.

    Java and other strictly OO languages are confusing for newbies because of the excessive framework and OO constructs that mire up the beginners ability to do simple procedural programming.

    Also any new developer out of college is not expected to know any of the frameworks real well. That is one of those things learned in the workforce or on your own time. It's not the college's responsibility to teach you all the Vendor specific crap that's out there.

    Also to many colleges are allowing their curriculum to be dictated by local business needs. Ex. Here in Iowa Cobol and VB are pushed in many colleges because the local companies want a cheep development staff that just churns out code and doesn't question authority because they don't know any better.

  41. Darrell

    @ oliver jones

    "CS graduate comes out of University completely unprepared for the real world"

    your post nothing to do with which language they use and everything to do with poor teaching standards and the university curriculum.

  42. Rune Moberg
    Flame

    Java? Who cares?

    Where I used to work, Java was considered a bad joke. We would celebrate whenever a competitor chose Java, because it meant they had to hire more staff and their products would suffer. Java applets are usually memory intensive, CPU hungry and offers a clunky UI experience (to put it kindly). The deployment footprint grows and time to market is slow.

    For those of you that require platform independence, I sympathise... But ruining the user experience on all supported platforms is seldom the answer.

    Native Windows development: Delphi or C#. Use C/C++ for shell extensions and similar.

    Everything else? Well... Not Java in any case.

  43. Daniel

    Who watches the watchers?

    Ultimately, someone else has to write the software that sits too cose to the hardware layer for the hardware to be ignored. They have to do this, in order for others to be able to write the layers above that.

    On the whole, you do not need a higher level educatiuonal qualification in software design, to work in those upper layers of programming, and that's fine. These guys are saying that you shouldn't even have to go to university, if what you want to do is write in Java, or some similar higher-level language. However, someone has to work in the lower layers of programming, because those layers will never go away. If students on university degree courses are not the ones being taught to do this work, then who is? To quote minimsft, writing of an absence of such tallents in core areas of Redmond:

    "More and more candidates who can lay down the smack with Java and script can't manipulate memory and discuss deep operating system constructs just-in-time at all. I need you to be able to write a Garbage Collector, not be in an unhealthy co-dependent relationship with one."

    (From: http://minimsft.blogspot.com/2006/11/microsoft-academy.html)

  44. Francis Vaughan
    Thumb Down

    Read the cited article!!!!!

    Dear oh dear. I would have to say that almost every comment above has been made by people who never bothered to actually read the article being cited, but simply relied upon the paraphrasing of it.

    The authors DO NOT dislike Java. They probably don't even mind it being used as a teaching language. What they are worried about are the concomitant problems in teaching that have been allowed to arise. The section on Java is titled "The Pitfalls of Java as a First Programming Language". Pitfalls. I.e. problems that can arise if you don't watch out.

    I spent a long time in academia before joining industry. I taught second year data structures many times - in Java. I got involved in heated arguments many times with my colleges, and most of the issues raised have real resonance.

    I well remember when Java became the core teaching language. And soon after the first year introduction to programming course started to delight in showing the students how to pop up windows, do cute little GUI tricks. The idea being that the students saw some tangible gratification quickly. It didn't take long (about the time these students moved to the later courses) for everyone to realise that the students had actually failed to "get it" and were on a path to a toolbox (almost cargo cult) mentality. This is exactly the issue the authors of the cited critique cite. They are NOT criticising Java, they are criticising the mindset that uses the toolbox features early in teaching to the detriment of teaching how to program. There are only so many lectures, and so many hours available for programming in a course. Each is precious. Devoting any time early on to GUI coding is always going to be a bad deal for the students. It will always be at the cost of some other more important concept.

    One of the worst things that Java brought to teaching has been the OO theology. There has been a huge movement that OO must be taught right from the start. I found myself teaching courses (prepared by others) where there was more time spent trying to work through OO issues than fundamental data structure and algorithm issues. This again is appallingly bad. You can teach the basics of OO to a student that has a background in graph theory in about an hour. Less if they are bright. But if you try to teach OO first you just end up confusing the student. They think designing the class hierarchy is designing the data structure. And it just gets worse.

    The article bemoans the loss of mathematical skills. This is desperately true. We are beginning to see a generation of programmers who don't even know enough to know that they don't know. Numerical analysis was compulsory when I was a student. Like most, I hated it. Now I am quite convinced it should go back as a compulsory component. We have reached the point where there are programs out there that generate results which have no validity, simply because the programmers had no idea what they were doing. If a programmer uses floating point and cannot explain what the term "epsilon zero" means they have no right to claim the program is correct.

    Many programmers disclaim the value of "higher" or even basic mathematics. Again, with sufficient ignorance they don't even know what it is they don't know. An ability to understand, reason about, and sometimes design algorithms is always going to be important for any real professional. If you can't prove your algorithm is correct you shouldn't be doing it. If you can't derive its complexity similarly. If you can't reason about the selection of algorithms based upon complexity, and understand the pitfalls in simple order N analysis you shouldn't be designing programs. Further, discrete mathematics and language theory is critical in many diverse places. Automata theory, language translation basics, nobody involved in design of a complex GUI should be without these. So many are, and the dire mess so many interfaces are reflects this. And so it goes.

    An computer professional should be able to be totally comfortable with the hierarchy from gates to GUIs. There is a full lifetime ahead. To imagine you can survive without is naive in the extreme.

    To return to the article in question. It does not slag Java. It slags laziness in curriculum design and a worldwide move to dumb down and make "more accessible" and "sexy" computer science courses. Removal of hard maths, core computer science components, emphasis on ephemeral toolboxes, all are creating a generation of programmers that are far less well equipped for a lifetime in the industry than their predecessors.

  45. paddy carroll

    clever people

    The more senior they are the higher the grade of bollocks

    Me

    FORTRAN->BASIC->FORTH->6502->C->VB->C++->Java!

    I love it, it is a proper language.

    lets face it you could find some idiot to recommend Logo if you looked hard enough.

  46. Don Mitchell

    Learn C++

    I think it is important to learn a compiled language that allows you to allocate memory and see address pointers. An interpreted scripting language with garbage collection is much more removed from the hardware, just as they say. I remember one graduate student from Brown U. who applied for a summer internship. He knew Java, but had no idea how pointers worked. He was completely unable to help us with a project in C++.

    Java is pretty complete, but it is still an interpreted scripting language, essentially a modernized analog to Visual Basic. It is good to teach something like Basic or Java or C# in a course about GUI design and rapid prototyping, but not as a basic programming course. You want students to understand what the machine is really doing. Not assembly language, but at least a compiling language.

    There seem to be three catagories of languages:

    1. Pure academic experiments in programming like Haskel, Lisp, ML, CAML, etc. These language represent some clever thinking about computation, but I have never thought they were practical languages for big projects.

    2. Scripting languages like Python, Ruby, Javascript, Perl, etc. These languages expose important functionality, but they are often rather messy and amateurish in design. Not saying they aren't important, just that whoever designed them was not very familiar with basic computer science -- their grammers are full of ambiguities and readability/maintainability hazards.

    3. Practical languges designed to get computation done. FORTRAN, C, ADA, etc. The grammer of ADA is very professionally designed, free of ambiguities (like if-else) with a lot of thought about maintainability and QA issues. And they are designed to compile into efficient code. Programs written in these languages will run 10 to 100 times faster than an interpreted script (even with something like MIcrosoft's JIT engine).

  47. amanfromMars Silver badge

    Root Virgin Source ....... Krakatoan Cracked Tao*?

    "Because Java shields the programmer from the 'low level' concepts it is not good for anyone who needs to know and understand the low level - eg. when coding for things like Operating Systems, Embedded Systems, Safety Critical Systems, SCADA, Military Systems, Command and Control etc." ....Posted Friday 11th January 2008 14:35 GMT

    Java then shields one from Infections, AC? A Perl amongst Swine?

    Does Imagination code for things like Operating Systems, Embedded Systems, Safety Critical Systems, SCADA, Military Systems, Command and Control etc.?

    * http://www.cs.wustl.edu/~schmidt/TAO.html

  48. Joe M

    @Ross

    "It means you'd better hope you're in a 16 bit environment otherwise Murphys law says you're gonna have one difficult to trace bug next time you do anything with eax."

    I have an old embedded 80C186 in mind. I never had the need to program 32 bit assembler as I use 8 or 16 bit hardware, but thanks for the thought.

    Your comments on Java are well taken but what I find is that graduates leave University with Java only, which I find amazing. When I needed Java for server work it was great but even then there were a few problems diving below the line when needed.

    (I think anyone who makes a strong public argument for any one particular language should be forced to write a significant app in Forth. That will fix them!)

  49. Robert Harrison

    @Joe M

    "And another whisper: the guy who understands what “sub ax,ax” means (and implies) can probably change places with you and write some pretty good Java if he sets his mind to it. Can you do his work as well!?"

    Damn I wish I had replied earlier before the comments built up :o)

    A quick whisper in your ear Joe: Of course you could write good Java with your hands tied behind your back because all of us front-end/UI programmers just throw objects together OO style with lots of libraries and it all Just Works (tm). Obviously saying nothing about event-driven programming, multithreading, swishy fast graphics and all the other things that users demand more and more of. In answer to your admittedly slightly rhetorical question: Yes. Given some time and experience, in the same way that an embedded/system programmer would be able to 'cross over' to the interface code. Each arena has certain disciplines associated with it and each deserves some respect for the skills required.

  50. Anonymous Coward
    Black Helicopters

    moving away from the holy war...

    Am I the only one bothered by the fact this article is using Wikipedia as a trusted source of information, to illustrate the differences between C++ and Java?

    Maybe Wikipedia black choppers left Utah and descended upon Vulture Central...

This topic is closed for new posts.