Forgot your password?
typodupeerror
Education Programming IT Technology

Followup On Java As "Damaging" To Students 626

Posted by kdawson
from the many-are-called-but-few-are-chosen dept.
hedley writes "A prior article on the damage Java does to CS education was discussed here recently. There was substantial feedback and the mailbox of one of the authors, Prof Dewar, also has been filled with mainly positive responses. In this followup to the article, Prof. Dewar clarifies his position on Java. In his view the core of the problem is universities 'dumbing down programs, hoping to make them more accessible and popular. Aspects of curriculum that are too demanding, or perceived as tedious, are downplayed in favor of simplified material that attracts a larger enrollment.'"
This discussion has been archived. No new comments can be posted.

Followup On Java As "Damaging" To Students

Comments Filter:
  • @_@ (Score:5, Funny)

    by Ojuice (638639) on Monday January 21, 2008 @10:55PM (#22133412)
    I started with Java and I turned out just fine.
    • Re:@_@ (Score:4, Insightful)

      by rmdir -r * (716956) on Monday January 21, 2008 @11:03PM (#22133474)

      I started with Java and I turned out just fine.
      His point is less that Java as a language causes brain damage and more that the switch to Java is symptomatic of a move to liquor-up and lacquer-down University Computer Science curriculum.
      • Re:@_@ (Score:5, Insightful)

        by ushering05401 (1086795) on Monday January 21, 2008 @11:15PM (#22133536) Journal
        While this point may be valid, it's not like CS degrees were assurances of any level of competence anytime in my recent memory (I've spent about 15 years in IT).

        About all I can suggest is that students who are inclined to supplement their educations through their own creative pursuits will continue to surpass those who treat CS simply as a profitable skill set. If anything, simplifying CS courses will assist potential employers in identifying those who aspire to excellence in the field and those who are merely pursuing a career.
        • Re: (Score:3, Insightful)

          by jayp00001 (267507)
          Personally I'd rather have the high school grad that likes to mess around with programming and would like an internship than the same kid after 4 years of college. The intern is grateful that he's getting paid to learn. The college kid thinks he should now be ready to start paying off his student loans, bu thinks he know enough to get a job. The college kid spent 4 years learning java and c at a base level (meaning spending half of that time learning syntax and idiosyncrasies rather than working on actual
          • Re: (Score:3, Insightful)

            by homer_s (799572)
            I saw the multiplication part in the video you linked and I don't understand why she is against the second method - the one where you split up 31 x 20 into:

            30 x 20 + 1 x 20

            Her complaint that it takes time and does not make the students proficient and quick in calculations. But that method teaches place values and shows that the product can be found by addition.

            The traditional method that she seems to advocate just teaches a rote way of getting the result without making the students understand ho
      • Re:@_@ (Score:5, Informative)

        by M. Baranczak (726671) on Monday January 21, 2008 @11:16PM (#22133548)
        Exactly. If I recall, he was mainly talking about the fact that low-level system concepts aren't being taught. Java was only incidental to the argument, but the /. summary made it seem like another stupid language flamewar. Java is a high-level language: of course you won't be using it to write kernel code.
        • Re: (Score:3, Insightful)

          by imgod2u (812837)
          "Computer science is no more about computers than astronomy is about telescopes."

          For those who will be dealing with low-level programming (and certainly every college will have plenty of courses to teach them), there is a curriculum to teach it to you. But, and as one of my professors stressed, computer *science* is a *science*. The ability to debug pointers is hardly the de-facto starting point of computer science. Linked lists, stacks, queues, etc. are. And you can teach that in any language and reall
  • by KermodeBear (738243) on Monday January 21, 2008 @11:00PM (#22133442) Homepage
    When I entered college I was started on C/C++. I learned a lot about memory management, pointers, low level system calls, using system libraries, etc. Two years into college they changed everything over to Java.

    God damn, what a difference.

    To this day I am happy that I was able to have those two years of C, letting me get close to the guts of the OS, forcing me to think about what I was doing every step of the way. There is no question in my mind that it made me a better programmer in general, regardless of the language.

    I feel sorry for the people that start - then never leave - a much higher level language such as Java.
    • by StarvingSE (875139) on Monday January 21, 2008 @11:12PM (#22133526)
      I don't think it matters what language a university teaches their 1st years. Any decent curriculum will include an operating systems class which should have the low level programming assignments. My uni taught us data structures and OOP concepts with java our first year, and then we reverted back to C/C++ for the system calls, threads, etc. And any CS program that does not teach algorithms, well I don't know how they get accreditation (referring back to TFA).
    • Two things (Score:2, Insightful)

      by zanderredux (564003)

      C/C++ gives a nice inside view to the core of the machine and you have to learn all the good stuff you mentioned, but I still think the best way to understand programming as an abstract exercise is through some Lisp variant. It forces you to think about data structures and exposes to a whole different way of programming, which is quite useful.

      Then you mentioned you feelt sorry for those who started with Java, but then I really feel sorry for those who started with VBA...

      • by CastrTroy (595695)
        Well, I started with QBasic back in highschool, because it was already on all the computers. I don't think I ended up that bad in the end. I don't think the problem is with what languages you learn, but how you learn to use them.
    • by mcrbids (148650) on Monday January 21, 2008 @11:19PM (#22133578) Journal
      To this day I am happy that I was able to have those two years of C, letting me get close to the guts of the OS, forcing me to think about what I was doing every step of the way. There is no question in my mind that it made me a better programmer in general, regardless of the language.

      Reminds me of the debate I often see in aviation: "tricycle gear" vs "tail draggers". Tricycle gear planes have a steering nosewheel, and two main wheels under the wings. Tail-draggers, the "old" way, have two main wheels in the front and 1 small wheel (the "tail dragger") on the tail.

      It's considerably easier to land/takeoff in a tricycle-gear. But there are plenty of pilots who are dead-set on flying tail draggers because it makes them "a better pilot". Which, then, sparks another debate about whether or not new pilots should be taught on tail-draggers or tricycle gear.

      In short, it all comes down to whatever the student wants. They can choose which way they prefer. Myself, I learned in a tricycle gear Cessna 172, and I don't regret my decision. Flying is fun!
    • Re: (Score:3, Interesting)

      by giminy (94188)
      You know, I started thinking the same thing a few months ago. I learned to program with Pascal, then BASIC (basic sucked, but it's what they taught in high school), then C, Scheme, C++, and finally Java/C# (these two only in the last year or two). I've been primarily a unix guy in the past, but I actually had a job interview at Microsoft, maybe a year ago. I asked my interviewers technical questions, too. One question that I like asking is, what does an object method look like in memory versus a static
    • Think of how much deeper the understanding of Objects, ER diagrams, ... will be for those students who started with Java.

      Which will be more useful in the end, a bit more understanding of low level programming or a bit more understanding of ERP?
    • Re: (Score:3, Insightful)

      by samkass (174571)
      My Math/CS program didn't have any class that taught a particular language. Most of the classes had some primary language, but you were expected to learn it yourself outside the coursework. In various courses I used C, C++, Lisp, Scheme, SML, Prolog, and a few others. Everyone's biased towards how they chose to learn, but I think it's the breadth that taught me the most rather than just some low-level C hacking.

      As for Java, I think it's one of the most advanced languages in its balance between functional
    • by master_p (608214) on Tuesday January 22, 2008 @05:17AM (#22135684)
      There is nothing that makes Java unsuitable for learning algorithms and data structures. The fact that Java comes with a set of prefabricated components does not mean that it can not be used for such a task. C++ and Java have exactly the same algorithmic issues, because Java, despite what others may have said, is essentially C++ with a garbage collector and all objects allocatable on the heap. Java also has pointers; it's not possible to say "I know Java but not pointers", because even the language itself admits it has pointers: it throws a null pointer exception when a pointer is null. There is also a little bit of memory management thrown in, in the sense that pointers must be nullified as soon as possible so as that the collector clears unused objects.

      Java has some advantages over C++ that are important for teaching programming: it has an established set of patterns that all libraries use, whereas in C++ there is no discipline, anyone can make anything in any way possible. For example, many Java libraries use the listener pattern.

      Java treats exceptions correctly (despite of being boring to having to program around them), where is in C++ exceptions are not used, although they are available a long time now.

      Another advantage of Java is its typing system, which covers a great spectrum of typing systems: it is strong, it is static, but it is also a little bit of dynamic when one uses interfaces. It's very important, and since OO is dominant these years and for the future, it's a very important aspect and Java is the best environment to teach and experiment on these issues.

      Java is also suitable for teaching concurrent programming, due to its support for threads. In fact, a Swing programmer must already know threads, because a Swing application is already threaded right from the start.

      So what is left? low-level system calls and system libraries are operating system-specific tasks, and have no place in the programming course, unless the course is about kernel programming. Manual memory management is a C/C++ specific task, so unless someone is required to program in those languages, it's not a requirement for today's majority of applications.

      So, in conclusion, I believe that there is nothing wrong with teaching Java. I think the core of the problem is that they don't teach the fundamentals of programming (algorithms and data structures), not the language itself.
  • Turn turn turn... (Score:5, Insightful)

    by TheLazySci-FiAuthor (1089561) <thelazyscifiauthor@gmail.com> on Monday January 21, 2008 @11:02PM (#22133468) Homepage Journal
    I think there is a difference between dumbing-down and simplification.

    Really, when has a tool ruined the skill set of an industry? The worst a tool does is eliminate certain roles or industries altogether - and those who filled those roles will always complain (and sometimes revolt).

    From the study of C and Java I can say that for 90% of the tasks I've taken on I've needed no more than Java (and Java would in fact be overkill).

    This reminds me of the controversy when Feynman diagrams were first shown. These diagrams were a much simpler way of expressing complex summations - but the old-school (some pretty impressive names) felt that these diagrams were a dumbing-down and that the historical mathematics were the proper way to express these systems.

    Always a new tech will simplify something and those who have had to trudge through the complexity will shoot-down its simplicity - this happened with the GUI, and I have a feeling about 84% of you are reading this statement on a GUI desktop.

    There will always be benefits to be had from the classic way of doing things, but new tools enable people to climb to new heights. The brain only has so many cycles, If they don't need to be wasted with pointers and bleedingly-effecient machine code then save those brain cycles for algorithms and interface design.
    • by blueg3 (192743)
      Most of the classes I've seen still teach the summations, too. Then they teach Feynman diagrams and proceed to have you do the real work with the diagrams, as it's easier.

      Presumably, if they really taught the things that you miss with Java and then had you do higher-level problems in Java so you don't worry about important details, it wouldn't be nearly as bad to be using Java.
    • by Weaselmancer (533834) on Monday January 21, 2008 @11:42PM (#22133740)

      This reminds me of the controversy when Feynman diagrams were first shown. These diagrams were a much simpler way of expressing complex summations - but the old-school (some pretty impressive names) felt that these diagrams were a dumbing-down and that the historical mathematics were the proper way to express these systems.

      Feynman diagrams are just another way of looking at things. It's another viewpoint of the same thing.

      Java and C don't map so well. There are some things for which only C makes sense currently, such as driver development. Java is a virtual machine. Although it's possible to beat, mangle, and force java into submission and make it do those things, that's not what it's for. All those JNI libraries that Java needs to actually talk to your machine - they're written in C. AFAIK, nobody is writing an OS or even drivers in Java. I'd even bet that the first few implementations of Java were written in C/C++.

      When Java is the first thing you learn, you learn sloppy IMHO. You just assume there is a garbage collector. You can allocate whatever you want, whenever you want, and not have to think about scope. If you ever do have to do some system work later on in your career - all of these notions will be new. You'll have to think about pointers, and the size of an object in memory, and how long you should hold on to it before you free up that memory. You'll suffer serious setbacks when it's time to program down to the wire.

      Java is a beautiful language - my personal favorite - for application development, but application development isn't all there is.

      • by Lisandro (799651)
        I'd even bet that the first few implementations of Java were written in C/C++.

        Heck, i'd bet all Jav implementations are written in C/C++!!!

        Come on, Java is a nice language - an interpreted language (yes, bytecode has to be interpreted). The notion that Java can is a suitable C/C++ replacement for everything but drivers is sadly common, and flawed.
      • Re: (Score:3, Informative)

        Java and C don't map so well. There are some things for which only C makes sense currently, such as driver development. Java is a virtual machine.

        To be precise, Java is a language specification. It's typically implemented as a virtual machine, but there's no fundamental requirement to do so.

        Let's consider Lisp instead for a moment, since Gosling, Steele, et al used it as a conceptual basis for Java. It has an extremely rich history. Lisp predates Java in being implemented as a virtual machine. The

    • Re: (Score:3, Interesting)

      by Secret Rabbit (914973)
      You're arguing that what goes on at College should be going on at Universities. This is very very wrong.

      Java is fine to learn at College because of the reasons you cited i.e. the purpose is to get people actually building things that is relevant to industry.

      Java is a horror at University because learning to code is NOT its primary (or secondary, or...) purpose there. The purpose of a University is to get people to be able to go onto a Masters and PhD and be able to do actual research. In this case, resea
      • by Otter (3800)
        You're arguing that what goes on at College should be going on at Universities. This is very very wrong...The purpose of a University is to get people to be able to go onto a Masters and PhD and be able to do actual research.

        As someone else pointed out, you're latching on to terminology that means something completely different in the American context in which this discussion is taking place. (What you're calling a "college" is what we call "community" or "junior colleges".)

        That said, nowhere in the world

    • Re: (Score:3, Insightful)

      by Skreems (598317)

      There will always be benefits to be had from the classic way of doing things, but new tools enable people to climb to new heights. The brain only has so many cycles, If they don't need to be wasted with pointers and bleedingly-effecient machine code then save those brain cycles for algorithms and interface design.

      The point isn't that you should spend all your development cycles on pointers. The point is that even when you're using a language that handles that junk for you, you should have some idea of what

      • by xenocide2 (231786)
        At least for my undergraduate career, the guys teaching Java were probably the most familiar with pointers and the workings of the JVM. This is likely because their research was on compilers, langauge, and computational model proofs. In a lot of ways, Java is actually pretty great. It's the only popular language that was prepared to handle threading from day one. You can try and teach conventional multithreading synchronization in C++, but you wind up lying to students, as the optimizers are typically built
    • by cgenman (325138)
      Clearly the answer is that we should teach assembly. Otherwise, how are modern computer programmers to understand the importance of 15bit polynomial counters? The speed of assembly is unrivaled, so why deny our upcoming programmers the important knowledge of register juggling?

      In fact, people should be wiring the little chips together manually. Want a zero? Desolder a vaccuum tube. Need a matrix operation? Sorry, we don't have enough rackmount space.

      It would be like Star Wars. Billy Gates would be thr
    • But it is a *terrible* teaching language.

      I've you're looking to put something together quickly, to run on lots of platforms with minimal resource requirements, Java is just fine. It's not ideal for all cases, but it's a tool that should be in almost all programmers toolboxes. That said, someone who learns Pascal, then C, then C++ will be able to pick Java up with ease. Someone who learns Java first will have to unlearn a lot of bad habits before they learn anything else.

      RAD tools in general are terrible as
    • Re: (Score:3, Interesting)

      by jadavis (473492)
      From the study of C and Java I can say that for 90% of the tasks I've taken on I've needed no more than Java (and Java would in fact be overkill).

      The point of academia is that new problems are rare, and old problems are common but take on many forms. Java does automatic garbage collection for many objects correctly.

      But what about when your resource is something other than a few bytes of memory? What if your resource is shared among many processes, like a file, shared memory, some kind of protocol state, dat
  • "Core stack"? (Score:2, Interesting)

    by mrami (664567)

    The older worker suggested that the young engineer check the core stack to see about a problem, but unfortunately, "he'd never heard of a core stack."

    Core stack? What the heck's a core stack? Does that mean get a backtrace out of a core dump?

    • No! (Score:3, Funny)

      He means checking the actual magnetic core. You can do this with a magnetic compass from your Boy Scout kit.
    • Generation gap (Score:4, Interesting)

      by Mr2001 (90979) on Monday January 21, 2008 @11:59PM (#22133862) Homepage Journal
      I saw that too, and like the young engineer in the story, I also have no idea what a core stack is - despite the fact that I've been programming for nearly two decades, in environments from x86 assembly to .NET, and I know my way around a debugger. I assume he meant a call stack, maybe one saved in a core dump, but I can't help envisioning a pile of antique magnetic memory units.

      This seems like an example of the "old people have funny names for things" principle, not "Java makes you a bad programmer". I bet the young engineer wouldn't know where to buy oleo or Prince Albert in a can either, but what the hell does that prove?
    • Re: (Score:2, Redundant)

      by guruevi (827432)
      Never heard of a stack? Man, programming has come a long way since programming a TRS-80 with assembler. Core stack usually is referred to as doing a core dump stack trace. A core stack is how the program looks in memory up to a certain point (by design (breakpoint) or crash) and then you can output that and review it.
  • by snappyjack (1147601) on Monday January 21, 2008 @11:03PM (#22133480)
    It doesn't help that the only Advanced Placement computer science courses in high school are based on Java. If it's really a problem, it should be addressed here first. Never really did see why they moved away fro C++.
    • My district moved away from C/C++ because of the scarcity of properly educated teachers.

      It is easy to write horrible code in any language, but I was taught Pascal because there was a perception that it was more within the grasp of the instructors in the local employment pool.

    • Re: (Score:2, Insightful)

      by sneakyimp (1161443)
      Java runs on a virtual machine, isolating the programmer from the details of the OS. Write once, run almost anywhere, right? Seems if I was a teacher I'd want to teach that rather than wasting time on some specific OS which won't even exist when they get out of college.
      • I can't think of a single first-year computer science assignment that should require any platform-specific code when written in C or C++.
  • by kemushi88 (1156073) on Monday January 21, 2008 @11:09PM (#22133512) Homepage
    At the University of Washington, where I am a student, the introduction programming courses teach Java. These courses seem to serve two purposes. A number of majors outside of computer science require them for the general background knowledge of how computer languages work. They also are prerequisites to entering a CS major, so they serve to weed out people who really don't belong in a technical major. Although I don't care much for Java itself, there are a number of benefits to using it in these introductory classes. First of all, when you're working with a bunch of noobs, it is really nice to have the platform independence that Java offers. Secondly, all of the libraries, at least from my experience, are extremely well documented. But most of all, most of the people that take an introductory programming course won't ever reach the level of sophistication that C requires, so teaching C would be kind of overkill. And those of us who really will continue on to work requiring C, really shouldn't have a problem learning it.
    • by Azarael (896715)
      By all means, schools should have a scientific computing or introductory programming class in Java. The problem comes in where these two classes are mixed in with the CS stream. Neither group of people is served that well, the non-cs students will often find the work unnecessarily difficult and cs students will get bogged down in tons of Java OO business (like I did) when they could be learning fundamentals 'about programming'. OO and library support are *not* fundamental, when you're learning math, you do
      • by cgenman (325138)
        OO and library support are *not* fundamental, when you're learning math, you do your addition and subtraction, before multiplication and addition.

        OO is most definitely fundamental. Getting programmers to wrap their heads around inheritance and other important daily programming concepts is essential to being able to do anything with the damned things. Try partner programming with someone who has coded C for too long and you'll see what I mean.

        Java cuts through one of the biggest initial hurdles to programm
    • I would recommend that one thing people need in an introductory course is to be able to quickly figure out if they're interested in the stuff. To achieve this needs a good mix of programming etc..

      Sure, some link lists etc in Java/whatever are fine, but also introduce them to some assembler etc.

      If the kids are going to make a career of programming then an appreciation of what is going on under the hood is valuable.

    • But isn't the problem that the use of Java and like languages continues through the higher level courses, dumbing them down in order to avoid having to use the more complex and appropriate languages like C & C++?
    • Starting off easy (Score:3, Interesting)

      by Version6 (44041)
      My son's high school programming class starts in Python and finishes the year in Java. In previous years, they have started in Scheme. His instructor says that since they switched, he sees much more experimentation and "programming for fun".

      I started (over 40 years ago) with an Algol variant and proceeded to Fortran. (C hadn't been invented yet.) As a professional programmer with a computer science style background (as opposed to the engineering style of today--an improvement I think), Scheme appealed to my
  • Truth (Score:5, Interesting)

    by p0tat03 (985078) on Monday January 21, 2008 @11:10PM (#22133516)

    I'm in one of Canada's biggest CS schools, and though I'm in engineering, I really do feel sorry for them. Many of the toughest courses in that program are now optional, and one can cruise by and get a degree only knowing the most basic algorithms (quick sort?) and data structures. Naturally, the only people who take the original challenging courses are the alpha geeks who live for that kind of stuff anyway.

    Meanwhile people come out of the doors of this school knowing only Java and .NET, and then complain that the world of programming was not as interesting as promised. Hmm.

    On the other hand, I'm in an electrical engineering-like program, and we only deal with assembly, C, and maybe C++ on the odd occasion. I love it. IMHO any self respecting programmer needs to at least KNOW how to operate close to the metal, if only so it makes them a better coder at the higher levels.

    • Re: (Score:3, Informative)

      by ScrewMaster (602015)
      IMHO any self respecting programmer needs to at least KNOW how to operate close to the metal, if only so it makes them a better coder at the higher levels.

      Well, a lot depends upon your eventual focus. Me, I started out in life on a Rockwell PPS-4 4-bit micro, eventually graduating to an 8080 and then the 6502, 6800, 6809 ... didn't get much closer to the metal than that. I agree with you that, as a general principle, knowing the low-level stuff can make you a better programmer. With C/C++, I'd say that k
      • I pretty much agree with this.

        The reality is that there's a wide, wide variety of computer science careers out there, even just within the realm of programming, and it's hard if not impossible to teach to all of it in four years.

        My undergraduate programming was nearly all C/C++. I had all kinds of classes in computer architecture, computer hardware, assembly language, and all things 'close to the metal'. I had classes in compiler and operating system design. I had classes in math that's useful to certain
  • by HauntedCrown (692361) on Monday January 21, 2008 @11:20PM (#22133580)
    I got into University during the change from C++ to Java. The reasons that the professors gave was that they were wasting so much time with concepts that weren't critical to the class. They claimed with Java, they were able to focus on algorithms and data structures.

    In a way, they were correct. Java was used, but we didn't learn Java. It could have been any language. We went over addressing memory quite extensively, and how objects are stored 'behind the scenes'. We could have really substituted any language and had the same results. Unfortunately, the results *were* the same: some students 'got it' while others just couldn't come to terms with any of it. I suppose now they are coming to the realization that there is no good way to make a difficult subject easier. Perhaps that is why they are coming up with an IT program...

    With all that said, my university had yet to make the transition from 'everyone should know C and pointers by now' in the upper division classes. Perhaps that has been remedied now, but made things pretty difficult for those who weren't willing to put in the time. But the university is supposed to make you work, so I guess in that sense everything worked out fine.
    • I think you're right on - I had a similar experience.

      IMHO, a big problem with Java is that it's easy to skate along, while remaining clueless. At my university, everyone basically flunked the senior systems programming and network programming courses (based on C). I was a superstar, receiving an "A-" for getting 19/150 points on the systems programming final. There was literally dozens of people who got a 0 on the exam.

      Part of that was that it was a big state school that frankly, sucked. The masochist tende
  • by bradgoodman (964302) on Monday January 21, 2008 @11:20PM (#22133588) Homepage

    The curriculum in a BS program, as I have always understood it - isn't designed to necessarily prepare you to enter the workforce with all the "hands-on" technical skills - no matter what discipline its in.

    If you're to learn "hands-on" skills to apply towards work, that's what an associates degree, or trade-school is about

    Look at it this way - if the world went post-apocalyptic tomorrow, and everyone "knew Java", we'd all be screwed, because no-one would understand all the theory and crap behind compiler design, OS design, carnal maps, finite automina and all the other "fundamentals" on which everything is built. Just like if everyone got their ACE automotive technicians certificates, we'd have no one who knew how to design the cars.

    Now I'm not saying that universities don't try to balance out the BS curriculum with real-world, practical stuff - of course they do - but that's the idea.

    In my view, school gives you the foundation, and it's up to you to apply it. Reality is, once you get out there, any specific tools, languages, etc. change so fast anyway - a BS degree teaches the foundation, and its up to you to build on it

    Disclaimer: I'm an EE drop out - basically completely self-taught - the same rules apply - know the foundation - and your own your own from there.

  • Its not 42? (Score:2, Interesting)

    by LaskoVortex (1153471)
    CS should be made as difficult as possible to keep the numbers of graduates low. This may not be what CS department officials want to hear, but it would be the right thing to do. Right now, the biomedical sciences suffer from a serious glut of highly trained PhDs that find they need to extend training by 4 to 8 years as "post-docs" without solid prospects for long term employment.

    While this may be great for the advancement of science, it makes for a pretty bad professional situation for scientists who still
  • by ZombieRoboNinja (905329) on Monday January 21, 2008 @11:28PM (#22133650)
    They're pretty up-front about it, but it's worth noting that the authors here work for AdaCore and have a vested interest in getting people to use their language. (Notice how they keep talking about the importance of teaching "languages like C++ and Ada" and the section about why Ada is the best programming language ever.)
  • Duh (Score:4, Insightful)

    by cvd6262 (180823) on Monday January 21, 2008 @11:30PM (#22133660)
    Aspects of curriculum that are too demanding, or perceived as tedious, are downplayed in favor of simplified material that attracts a larger enrollment.

    Let me be the first to welcome you to higher education.
  • by compupc1 (138208) on Monday January 21, 2008 @11:31PM (#22133668)
    I don't see why students can't learn both Java (or C#, etc.) and C. I first learned Java in my undergraduate days, then in the second year we learned C++. After that we were pretty much expected to learn whatever language we needed with minimal instruction. It's not like CS programs need to do only one or only the other.

    High-Level != Non-Innovative
    I don't know why some people think that something can't be innovative if it's high-level. I frankly don't care whether something's written in assembly or JavaScript. It it brings something new and useful to the table, it's innovative in my book.

    Different Skillsets, Different Challanges
    Constructing a low-level system utility and architecting a large enterprise web-based application are two fundamentally different types of problems. It's true that students need to understand memory management and low-level OS concepts. But quite frankly students who come out of Universities understanding only this type of development consistently demonstrate a complete inability to design an enterprise web application using OO design patterns, SOA, and reusable components. There are significant technical challanges involved in this type of application development. They're just not the same as when you're living in the low-level world of systems programming.

    Ever heard of reuse?
    I don't know whether this guy seriously believes that students shouldn't be leveraging libraries in their code, but I've got news: that's the way the world works. It's true you should be able to dive into the low-level code if there is a specific need to, but nobody's going to pay you to reinvent the wheel (anyone who insists on implementing their own sorting algorithms in the real-world is probably a fool.) Reuse is something software engineering strives for, so why should we be painting it out to be something evil?

    Besides, where do you draw the line? I know some people in the supercomputing industry that feel C is "too high-level and bloated". They would like to see students spending most of their time in Fortran and assembly. So...do we expect students to write all their software in assembly? Should students be designing everything using sequential circuits and skip the software alltogether? My point is that what's considered "high-level" is very relative, and there's no good justification to sitting exclusively any any level or another. Part of being a good engineer is knowing how to select the right tool for the right job. Sometimes that's assembly, and sometimes that's Java. As long as you're proficient in multiple styles of programming, you should be able to handle most anything you need to.
    • by blueg3 (192743)
      "that's the way the world works"

      It's higher education, not professional training. If you want to learn how to use libraries from Java, you can learn that from ITT.
  • nonsense (Score:5, Interesting)

    by j0nb0y (107699) <`moc.oohay' `ta' `003yobnoj'> on Monday January 21, 2008 @11:32PM (#22133674) Homepage
    I was taught how to handle pointers in QBASIC when I was in junior high.

    The assignment was to implement a linked list. The instructor had us initialize an array which represented our memory block. The program then had to perform all the standard linked list operations, handling memory allocation and all that crap.

    The choice of language may seem odd, but consider that QBASIC is what we had available. All our DOS computers already had QBASIC on them, and we could use it without having to shell out the big bucks for a C/C++ compiler (none of us was aware of DJGPP at the time, though I later used DJGPP to teach myself C++).

    Now, if the problem is that students aren't being taught memory management, then that is obviously a problem, no matter what language is being used.
  • by MikeRT (947531) on Monday January 21, 2008 @11:36PM (#22133702) Homepage
    It's not just Computer Science. When it's not being dumbed down, it's often falling victim to tenured professors who are incompetent. That's what happened to us at my alma mater. We had some brilliant professors who were tenured, couldn't communicate, and frequently were so slothful that you couldn't practically learn from your mistakes. We'd get homework from the first few weeks back halfway between the midterm and final in some cases.

    I graduated with a 2.8 GPA overall, and about a 2.5 GPA in my major. That was mostly because projects were usually 10% to 20% of our grade. One exam was usually worth all project work combined. Our valedictorian, a girl who could regurgitate raw data on exams, but could barely write hello world in any language, had a 4.0 in Computer Science.

    A big problem that I saw was the hand-holding. Professors don't feel confident because of the crop of students they have, in just telling students that figuring out their development tools is their problem, not the professor's obligation to teach them.
  • by jd (1658) <<moc.oohay> <ta> <kapimi>> on Monday January 21, 2008 @11:43PM (#22133746) Homepage Journal
    Yes, computer science is massively dumbed-down, needlessly. Yes, this is to bolster numbers. Quite stupidly, as you could get the same results by making CS courses cheaper to take. Computer scientists make more money, so get taxed more, so some of that surplus could go back into funding the courses. Cheaper courses, more people taking them, even if they are hard. It's simple market forces.

    The "no" is with regards to comp sci being for a certain kind of person. It's for a certain kind of perspective, but anyone can learn to see things from any perspective they choose. It's not equally easy for all people, so the more people you want to have that perspective, the more appealing you need to make it. But that is very different from changing the perspective, which is what fee-driven universities tend to do. No. Leave the perspective alone. Then how to make it more appealing? After all, everyone hates numbers, right? Wrong. In fact, up until about the ages of 11 or 12, you'll find something like two to three times as many people absolutely love numbers, algebra, equations, algorithms and problem solving. (This is based on the fact that the number of boys who like maths stuff remains unchanged, but girls go from outnumbering boys as geeks younger than that to being virtually non-existent soon after.) If you ask people (and I have) over the age of 18 about their experiences in learning maths or science, guess what! You rarely hear complaints about the subjects themselves - it's almost invariably the teachers.

    So? So, if you want to double the number of CS students and revert to a tough, purist syllabus, all you need to do is replace all the middle school teachers with people who have an interest in the subject and a passion for educating the students, rather than an interest in the paycheck and a passion for the students. Doesn't seem too tough.

    (Of course, it's easier if the teachers are payed a living wage, or better, so that you can recruit talent rather than whoever is on the scrapheap of life.)

  • Wasn't that billed by professors as the perfect language for learning how to program?

    How much did Microsoft pay this guy? c# is supposed to be just like Java, why doesn't he criticize c#?

    • Re: (Score:2, Insightful)

      by Diordna (815458)
      Because no one teaches courses in C#...except for my freshman-level game programming course using XNA on a grant from MS.
  • And this is why... (Score:4, Informative)

    by theJML (911853) on Monday January 21, 2008 @11:56PM (#22133838) Homepage
    This is why things are getting more and more bloated. I learned in basic and was quite glad when I got to c that I was learning something closer to what actually goes on. I had 3 Pascal classes in HS and shortly into them I found out just how powerful Assembly really is. Luckily I had a teacher that let me use that knowledge with inline statements on assignments. Things just worked, and worked quickly.

    There are trade offs to be made. Sure you can probably hack something together using less lines in Java or .NET, but I know for a fact, there's no GOOD reason to have to install a 120MB .NET install for some of the simple control panels and apps that are out there (ATI, I'm looking at you...). I remember when people tried to make their programs smaller and more efficient, finding ways to both put it on a floppy, and run quickly on slow hardware. Now these young whipper snappers use some high level interpreters and say screw the extra cycles, Proc's are cheap. Corps aren't worried about running quickly, or taking up small amounts of memory with elegant programs. They just want it released. Now. No time to dilly-dally on making "good" code, just gotta keep cranking it out. If it's slow, just up the requirements. I long for the days of assembly and low level programming...

    • Re: (Score:3, Interesting)

      by TheMCP (121589)

      Corps aren't worried about running quickly, or taking up small amounts of memory with elegant programs. They just want it released. Now. No time to dilly-dally on making "good" code, just gotta keep cranking it out. If it's slow, just up the requirements. I long for the days of assembly and low level programming...

      Okay. Let me give you an example from my career a few years ago.

      I was running an IT group in a small university. We needed a new help desk management application. It had to store various data and

  • by mandelbr0t (1015855) on Monday January 21, 2008 @11:57PM (#22133844) Journal

    I agree with the professor's statements -- mostly. The fact is that Java is not to blame, a lack of rigor and mathematics is. I love Java, not because of all the wonderful graphical fiddling, but because J2EE is a great server-side environment. I have taken the trouble to understand all of the server-level stuff before abstracting it away into an EJB; I understand what work the server is doing for me, and know how to fine-tune that behavior if necessary. Likewise, students should have to write GUI code in a text editor before learning how to use the IDE to save time. Anyone who expects to do any serious software engineering definitely needs to take a course in Algorithms. Math should not be ignored, as it is quite often the mathematics that is packaged up into a neat application, invisible to the end-user.

    It's true, you can teach people how to use an IDE like a software application, and you will get "programmers" that can put together a basic program with no problems. Ask them to start debugging, add complex features, etc., however, and they have no idea how to begin. I've no problem with Prof. Dewar lambasting these people as they are a large problem in IT today. However to simply point the finger at Java (or .NET for that matter) misses the point entirely.

  • I took two graduate compiler courses from Prof. Dewar at NYU in the late 70s, which had a huge influence on me. First, he was a great teacher -- passionate about his subject, very knowledgeable, and drawing on long practical experience. Second, he was one of the authors of SPITBOL (Speedy Implementation of Snobol), the best implementation of my favorite language of the day. A really unique, very elegant language. Third, he was involved in the design of a research language, SETL, in which sets were a primiti
  • It is hard to take him seriously if he does not know that 42 is the right answer!
  • Why the focus on Java? Because it hides low level execution details? Well, those are important to learn. But if you are taking an Algorithms course, why should you need to take the time to worry about platform specific execution details? Shouldn't you be more focused on the general applicability of the algorithm itself? I am curious what this guy would want used. Maybe all introductory courses should be in various assembly languages? Make sure those freshman have a good understanding of how the machine is a
  • . . . my entire educational experience in college was augmented by drinking large quantities of java - I turned out just fine! Come to think of it, sometimes I had Dewar's in my java . . . ew.
  • by PeanutButterBreath (1224570) on Tuesday January 22, 2008 @12:53AM (#22134238)
    I am one of those "fake" programmers building web and database apps with VB, ASP, JavaScript and the like. FWIW, have I never referred to myself as a "programmer" of any type, as I suck at math and have no formal training in CS. I just use tools that are easily accessible and best allow me to make myself a more valuable to my employers. Every once and a while I get the bug to read-up on something like C++ or even Assembly but it is soon obvious that these are not relevant to the problems I was trying to solve and I would rather do other things with my time.

    The author strikes me as a typical "You kids have it easy -- I used to walk to school in the snow uphill both ways" type who resents the fact that his formative experiences are no longer relevant. How does the field progress if everyone is forced to retrace the same steps from the same start point? That is not to say that his specific concerns are invalid. But it seems to me that the evolving state of software requires a broader range of programmers. If Java introduces people who will never become excellent programmers to programming concepts, why is that a bad thing? There are many roles to play, and hardcore math geeks can't fill them all. Rather than chase everyone else out of the field, perhaps the next step is for schools to adpot a more sophisitcated approach to organizing their CS programs.

    I see an advantage in distributing programming skills as widely as possible. Being able to create my own tools makes me much more useful to my employers, and the combination of business knowledge and programming knowledge make my overall skillset more difficult to outsource. Win-win. Even a programmer who "only" knows Java is infinitely more useful to society than a technophobe with a Liberal Arts degree (speaking as a non-technophobe with a Liberal Arts degree).
  • I'm thinking that a good CS Degree should give you the background in compilers, machine architecture and structures, languages (in the theoretical sense), so that, you could write your own cheesy VM + byte code compiler for a senior project.
  • by DrEasy (559739) on Tuesday January 22, 2008 @01:34AM (#22134476) Journal
    Both C and Java have their purposes. I'd use C to teach pointers, memory management, recursion and maybe even complex data structures and algorithms. I'd use Java to teach OO. I would also go back to C when teaching operating systems, and to Java when teaching design patterns and software development methodologies. But I believe that neither should be used as an intro to programming.

    The first course on programming is where you can turn off a lot of students if the language gets in the way (weird syntax, a compiler with cryptic error messages, a mammoth virtual machine, etc.). If all you want is teach variables, conditions, loops, and simple data structures in order to solve simple problems, why not use something like Python, Pascal or Scheme? Let's please leave concerns like the understanding of computer architecture and efficiency (C) and software engineering (Java) for later courses. The C-centric crowd needs to understand that Turing is not married to von Neuman: understanding of pointers is not necessary for computing and algorithm design (hello Lisp?). The Java-centric crowd needs to understand that, for some, programming is just a tool (for problem-solving) and not a discipline (software engineering).

    And this does NOT mean I'm promoting the dilution of the curriculum. In fact, because students would get up to speed faster, you could solve more complex problems earlier, and actually hit those issues of efficiency and code reuse that C and Java are respectively supposed to solve. They will then be ready to enjoy and understand those courses that follow.
  • by Hairy1 (180056) on Tuesday January 22, 2008 @04:06AM (#22135338) Homepage
    A few years ago I taught a class in Java. I program in Java professionally, so I know it is a powerful language. In learning Delphi I developed Object Orientated skills which easily transferred to Java. The main principle of Java is protecting the developer from themselves, with strict typing and automatic memory management. The main problem with C/C++ is programmers stuffing up memory allocation. Right now I manage a project that has C++ code, and we still deal with unexplained fatal crashes and such like. Anyhooo....

    I thought it would be good to teach Java. Problem is that you are forced to make everything a class. That means you have the choice of either teaching all the principles of objects in the very first lesson - even before variables, or telling your class to ignore all the cruft at the top while you try to teach the basics. Even then basic things like keyboard input and outputs require in depth explanations of the Java API. I spent most of my time trying to explain why everything was so complex in Java.

    Bottom line; the best language to teach programming is Python in my experience. You can write a one line hello world easily and teach all the basic principles of programming. I don't agree that languages like C should be taught first, as they tend to overwhelm students with details of the language rather than the principles. Python certainly isn't an endpoint. A professional developer should know several languages, even if they are not 'commercially proficient'.

    The problem with Python, to be brutally honest is the poor quality of the documentation. I'm not talking about core Python so much as libraries. Often I get libraries and then spend ages trying to find references about how to use them.

Byte your tongue.

Working...