Slashdot Mirror


Followup On Java As "Damaging" To Students

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.'"

626 comments

  1. @_@ by Ojuice · · Score: 5, Funny

    I started with Java and I turned out just fine.

    1. Re:@_@ by rmdir+-r+* · · Score: 3, Insightful

      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.
    2. Re:@_@ by Anonymous Coward · · Score: 1, Insightful

      I think "started" is the key there. If you ended there, that would be completely different.
      I started with Pascal, then moved on to C/C++, assembler, etc. I wouldn't say Pascal had "damaged" me. Similar uses of Java should get similar results. Right tool for the right (in this case, teaching) job.

    3. Re:@_@ by ushering05401 · · Score: 5, Insightful

      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.

    4. Re:@_@ by M.+Baranczak · · Score: 5, Informative

      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.

    5. Re:@_@ by Anonymous Coward · · Score: 0

      My course, we started with Turbo Pascal assembler for software engineering, AIM 65's for hardware engineering/embedded systems for the 1st year, and a bit of Prolog for computing theory. Then moved onto Lisp, 68000 systems, before finally moving onto C for systems programming, and Modula-2 for real-time systems (our professor managed to demonstrate real-world multi-threading using the 18Hz interrupt timer of the IBM PC).
      Each interrupt would trigger a mini-process scheduler, along with monitors, semaphores and shared memory).

      I thought the embedded recursive nature of Pascal subroutines was a step backwards, along with use of BEGIN/END, as I eneded up having to rewrite my own routines into C.

    6. Re:@_@ by DataPath · · Score: 0

      If nothing else, by dumbing down the curriculum, the demeaned all CS degrees by granting them to people who did a whole lot less to earn it.

      And because it's so easy, you get people who see programming as an income and not as rewarding, satisfying work.

      --
      Inconceivable!
    7. Re:@_@ by smilindog2000 · · Score: 1, Insightful

      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.

      Yes! I couldn't agree more. As for Java dumbing down education, that's a huge crock. Educators who pander to the most gifted (which I feel they should) typically fail to understand that software in the real world is developed by teams. Java provides those teams hand-rails to guide them towards productive collaboration. C++, in contrast, provides pistols, cannons, nukes, potato guns, and super-glue with which to shoot oneself in the foot. The author attacking Java has piss poor sense for what we need here in the real world.
      --
      Beer is proof that God loves us, and wants us to be happy.
    8. Re:@_@ by jayp00001 · · Score: 3, Insightful

      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 challenges Worse case scenario with the intern- I lose an entry level employee- I can fire and hire those as needed. With the college kid, worse case becomes a question from the CIO: why didn't I just outsource the projects instead?

      I do not blame the professors on this issue. America sends completly unprepared kids from high school to college so they can get a job afterward. For an example see:

      http://www.youtube.com/watch?v=Tr1qee-bTZI&NR=1

    9. Re:@_@ by smilindog2000 · · Score: 2, Insightful

      That video you linked to is one of the scariest I've seen in a while. Sorry if I lost your sarcasm... I would post this as an example of how incredibly stupid parents ruin school systems by forcing us to ban evolution, or any other modern thought from the classroom. I hope that's how you meant it. That bitch on the video pushing monkey-see-monkey-do education is partly responsible for our dumb high-school grads. I've never seen the "Turk" math she's talking about, but from the presentation, it's clearly a major improvement over the old stupid memorization techniques taught when I was in elementary school.

      Sorry about being so acidic over a stupid parent. I spent eleven years of my youth in hell in a backwater Georgia school system where original thought was the enemy of the school. I don't blame professors on this issue. I blame the stupid backwards hicks.

      --
      Beer is proof that God loves us, and wants us to be happy.
    10. Re:@_@ by AKAImBatman · · Score: 5, Insightful

      It would be amazing if people actually read the article every once in a while. :-/

      I make a living as a Java programmer. I enjoy the work I do and feel that no other language/platform can even touch Java's capabilities in team and enterprise development. Even for single-programmer development, there are a lot of situations where Java is the solution to end all solutions.

      That being said, I agree with the article.

      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist.

      A much better approach is to force the student to work through lower-level programming before ever reaching a modern layer that abstracts everything away. Otherwise the student is liable to shoot himself in the foot at a much later date. (Primarily due to a lack of knowledge.) This is very comparable to many sports where expensive, advanced equipment can be an asset to a well-trained athlete. But in the hands of an amateur, the attributes that make the equipment powerful becomes liabilities - and even barriers! - to the athlete's success.

    11. Re:@_@ by wellingj · · Score: 2, Informative

      I don't know about that. I work on an embedded team of 4 people, and we enforce OO in C. We get along just fine. Most days.

    12. Re:@_@ by SL+Baur · · Score: 1

      A generation ago it was "BASIC causes irreversible and total brain damage."

      Nearly all computer languages come and go. Java is a fad. Others like LISP, are timeless. "C"/Unix and "C++"/KDE show no signs of going away either.

      I wouldn't worry about it. OO sucks, Real Programmers can code in more languages than they count. Functional languages ftw!

    13. Re:@_@ by s4m7 · · Score: 3, Interesting

      Ah a fellow Article-reader. we must both be new here.

      The thing that drives me nuts about this article is that I have been making this very argument for more than 10 years now, since my family tried to push me into CS school. The simple fact is that I was already writing in assembly in early high-school, and C shortly after that. As a manager and later, as a small-business owner, I've interviewed dozens of people with CS degrees who claimed they were programmers, only to find out quickly in an interview that they haven't the foggiest clue what a compiler does, or any relevant understanding of how a data structure manages to exist. Pointers? what are those? Why did you laugh when I said GOTO? Garbage collection? That's on Thursday.

      I don't know that there will be no call for the type of programming CS programs teach today, in the future... in fact the way I see it, 70% of the apps that business runs on can be done in the "plumber at the store" style. Many of these require intimate understanding of the problem domain, which is one thing that CS used to be fairly lacking in prior to the "Java Shift". But when it comes to serious applications for big iron, Java just ain't it. I guess what I'm suggesting is that Java is a great language for non-programmers to learn to get a task done quickly and painlessly. I hope you don't take offense at this, I'm simply pointing out where the language's strengths really apply.

      --
      This comment is fully compliant with RFC 527.
    14. Re:@_@ by AKAImBatman · · Score: 5, Insightful

      But when it comes to serious applications for big iron, Java just ain't it.

      You'll have to forgive me, but I must raise an eyebrow at this. While the (generically speaking) Java Platform has many potential homes, it has found no better home for its technology than on big iron. Its straightforward design allows for the Virtual Machine to automatically adapt to memory, processors, and optimize away sections of code at runtime in ways that a static compiler will never be able to match. In addition, Java's natural fault tolerance allows for complex multiuser applications that provide logical firewalls between each user. Except in cases of poorly designed code (extremely poorly!), no single user can take down the entire application.

      If anything, Java is the ideal solution for Big Iron usage. Which is why I must ask you to clarify. There are certainly super-computing applications where Java is a poor fit. This is due the non-standard low-level design of the hardware that requires a completely different toolkit to take advantage of. (Like it or not Cell is a prime example of this environment.) Other than that exception, though, I have a hard time imagining where Java would be ill suited for Big Iron work.

      I guess what I'm suggesting is that Java is a great language for non-programmers to learn to get a task done quickly and painlessly.

      I vehemently disagree with this statement. I deal with the incredible task of training amateurs on a regular basis. (Some are even degreed-idiots.) VB is friendly to these amateurs. PHP is friendly to these amateurs. .NET is friendly to these amateurs. Java is anything but friendly to someone who can't figure out how to setup their classpath. Even worse, the APIs are ripe for extremity destruction. Nothing says "I don't know what I'm doing" like a coder not using a data structure when it's available, using the wrong data structure (Ouch! My memory! Ouch! My CPU time! Ouch! My I/O!), or simply developing a massive megastructure of code to replicate (badly) something that should take 10 lines of code for anyone who bothered to read the JavaDocs!

      As I said, Java is a wonderful tool in the hands of an experienced programmer who knows what it is capable of. In the hands of an amateur or (sometimes worse!) an old hand who's not used to the tools that Java offers, using Java in your project is like asking for your company to be nuked from orbit.

      I hope you don't take offense at this, I'm simply pointing out where the language's strengths really apply.

      I'm not offended. I'm merely perplexed. You sound like the type of fellow who should have a solid understanding of the platform. So perhaps I am merely misunderstanding your statements?
    15. Re:@_@ by Anonymous Coward · · Score: 0

      Ah... to someone who only has a hammer, everything looks like a nail. While Java is a nice language for some tasks, it is definitely not even close to "a lot of situations where Java is the solution to end all solutions"

    16. Re:@_@ by Lally+Singh · · Score: 2, Informative

      I see where you're coming from (at least I think I do -- you're the ultimate judge on that), but I respectfully disagree.

      The advantage to java is that it's safer to make errors there. Screw up with a reference, and you get a nice stacktrace. In C/C++, your program just dies (you can get a debugger on there, sure, but 1st year students are rarely taught debugging skills).

      That said, Java's good for getting someone into the proper habits of programming. Let them cut their teeth there - make their typos, basic logic mistakes, etc in a safer sandbox. Teach them how to print out debug statements early to understand what's going on, and to identify what mistakes they often make. When they know how to properly type in a loop construct and declare/invoke a function, then let them play with pointers.

      And then you let them use C++. Not the big scary version of C++ everyone in /. is afraid of (IMHO unjustly so), but just the C with classes version. Let them use that for their data structures course. People still have to take a data structures course and write their own implementations of the basic data structures! It's what we do here and it's not too bad an idea -- the kids should get trained on more than one language.

      --
      Care about electronic freedom? Consider donating to the EFF!
    17. Re:@_@ by __aaclcg7560 · · Score: 1

      Your garbage collector worked. Mine didn't.

    18. Re:@_@ by s4m7 · · Score: 3, Insightful

      (sometimes worse!) an old hand who's not used to the tools that Java offers

      This is probably where I fit. :)

      --
      This comment is fully compliant with RFC 527.
    19. Re:@_@ by philwx · · Score: 1

      Agreed. I thought the whole point of using Java was to focus on using Algorithms to solve problems, and the whole basis of a CS degree is finding patterns in code and scientifically analyzing which ones work the best. And they make it clear that programming language picks are not very relevant because your skills in algorithms, OO, and other concepts will allow you to pick up any language and learn it quickly. If you want to learn C++ buy a book, or ten.

    20. Re:@_@ by philwx · · Score: 1
      On the one hand you're chiding people for "wanting a profitable skill set", and praising others who "want more profitable skill sets."

      I'm not sure what to think about that.

      Maybe you should just come out and say that Java programmers are lazy or something, I think that's the gist of it.

    21. Re:@_@ by Anonymous Coward · · Score: 1, Insightful

      Usually I agree with your posts, but here I think you, and the article writer, miss the point entirely. "A much better approach is to force the student to work through lower-level programming before ever reaching a modern layer that abstracts everything away." This can be done with Java or any other 'higher level' language trivially; a CS prof can require assignments to NOT USE Hashtable, Maps etc. Just because these handy structures exist in Java libraries has nothing to do with teaching them (just as they exist in the STL etc), it's just as easy to teach data structures using fundamental Java constructs as any 'lower level' language, and probably easier, due to fairly nice debugging info.

    22. Re:@_@ by dgatwood · · Score: 1

      You'll have to forgive me, but I must raise an eyebrow at this. While the (generically speaking) Java Platform has many potential homes, it has found no better home for its technology than on big iron. Its straightforward design allows for the Virtual Machine to automatically adapt to memory, processors, and optimize away sections of code at runtime in ways that a static compiler will never be able to match. In addition, Java's natural fault tolerance allows for complex multiuser applications that provide logical firewalls between each user. Except in cases of poorly designed code (extremely poorly!), no single user can take down the entire application.

      Agreed. Where Java falls flat is in end-user software, where responsiveness per GHz is the primary metric. That and embedded systems where responsiveness per MHz is the primary metric. :-D Oh, and responsiveness per watt....

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    23. Re:@_@ by AKAImBatman · · Score: 2, Funny

      Fair enough. :-)

    24. Re:@_@ by phpmysqldev · · Score: 1

      One thing I think that should be pointed out is that most schools use 'Computer Science', 'Information Technology', and 'Information Systems' interchangeably. Anyone in one of the programs knows the difference but, you're average person will just know that you are a 'technology' major. Even my roommates in college could never remember exactly what my major was.

      So, learning Java as a primary language may be just fine for an IS major who will be writing end user business apps. This person will not be designing drivers, OS's or any similar project.

      As an Info. Tech. major I chose mainly to focus on knowledge management and information retrieval. I took one basic intro class using C and took extensive Java classes (the C class came after Java). The rest of my courses included ones in Data Mining, JSP, Database Design, IR, SQL, and DSS. (I have since followed up on C on my own)

      Now the CS major should definitely have an understanding of a low level language like C. Having this working machine knowledge is exactly what separates CS from other tech majors.

      A better understanding of each of these different, but similar fields would also help when looking at what courses to offer.

    25. Re:@_@ by XaXXon · · Score: 1, Flamebait

      Wow. That's really funny. When the dumb bitch asked the question at the beginning I was like "yeah, students should have a mastery of basic math algorithms". But then she showed me the problem solving skills taught in one of the books she was trying to speak bad about and by the end I was like "wow, no. Problem solving skills are far more important than learning how to do stuff slower than a calculator". By the time she asked again I was in total disagreement with her. Because of exactly what she showed me.

      The other thing where they just taught messed up ways of doing stuff (lattice method of multiplaction) is just dumb. If you are going to teach strict algorithms, you might as well just teach it the right way.

    26. Re:@_@ by jadavis · · Score: 1

      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.

      This is essentially an argument against any kind of formal education, implying that self-taught people are the most qualified. I think formal education provides an opportunity to smart people to learn foundational knowledge which they might never get otherwise. Even smart people don't necessarily seek this knowledge out, and you can't count on finding it in the industry. So where are they supposed to find it?

      I think the most important thing formal education provides is the intellectual humility to realize that most ideas you have have already been considered and analyzed. It allows you to recognize whether an idea is fundamentally new (very rare), or if not, what previous ideas have been combined and what the consequences of those ideas have been.

      I recently wrote a program in a functional language, and many things surprised me. I think the most important things that I learned were:
      (1) Programming could be fun again.
      (2) Pointers (or references, as some languages call them) are not all there is to programming. There is another way.

      I wonder how many self-taught programmers decide to learn functional programming? Or OS design? Or computational theory? Or the relational model?

      --
      Social scientists are inspired by theories; scientists are humbled by facts.
    27. Re:@_@ by AKAImBatman · · Score: 4, Insightful

      a CS prof can require assignments to NOT USE Hashtable, Maps etc.

      An excellent point, which does indeed refute the authors' argument. To furhter back your comment, I've done advanced algorithms in Java before; sometimes as just a learning experience. There are no barriers to going low-level if you want to. However, I did mention that I felt that their argument only scratched the surface. ;-)

      My own argument tends to go farther down the line to the point of obtaining an understanding of how to code in the first place. What I have found is that a new programmer rarely knows how to put one line of code in front of another. (Yes, the mere logic of ordering statements often escapes them.) Introducing a new programmer to an object oriented environment at an early stage forces them to think in terms of "magic".

      "Yeah, don't worry about that 'public class HelloWorld' bit. We'll get to that later."

      "Trust me. You need to have that import in your code. Otherwise it won't work."

      "We'll get to that main() method later."

      "Why System.out.println? Don't worry, you'll understand that once you understand objects and fields and methods. For now we're just compiling a simple [ed: *cough*] Hello World program."

      If these barriers were truly debilitating to a student, then we wouldn't have a problem. They'd learn what they needed to know along the way. Unfortunately, these barriers are far more insidious than that. The student knows this magic works without understanding how it works. So he's able to coast through a variety of tasks without ever worrying about it. Then when he gets to the real world... oops. You mean that wasn't actually magic? I needed to know what that did? But all I ever learned was some control structures! My professor didn't even make me format my code properly!

      *sigh*

      That's the scene I see far too often. A good programmer can't do a good job unless he knows why he's doing it.

      "But AKAImBatman," you say. "Won't most kids going into school these days have prior exposure to programming?"

      You are correct! Which makes teaching them the basics that much more important. Once again, when they muddled through as teenagers, they focused on WHAT they could do and not WHY they could do it. Code snippets and tutorials and IDEs abounded! They didn't need to KNOW what they were doing. Just fiddle enough and it will work!

      If you take things down to a low level, the majority of the students will be forced to learn or find an easier major. If they already know what you're teaching, then great! They can help with the rest of the class. But if they don't, then they're learning something priceless. Either way, the knowledge is KEY to data structures. One cannot truly understand the intent of most algorithms and data structures until he's visited the metal of the machine and tried to work with the likes of strings, memory allocation, and low-level hardware control. That's when he truly "gets it" and 40+ years of computer science suddenly SNAP into place.

      "Ohhhh, I get it! I really do! Hey, I had problem X a month ago that I could have solved if I had just..."

      Best. Sound. Evar. ;-)

      (P.S. In case you're wondering? C++ should NEVER be taught in school. Worst drain bramage you can do to a poor kid. Especially as his first language!)
    28. Re:@_@ by SanityInAnarchy · · Score: 1

      1st year students are rarely taught debugging skills

      WHY NOT?

      Debugging is perhaps the best way to get a concrete understanding of what your program is doing. The only reason not to give them a debugger is that it might be used as a crutch.

      Java's good for getting someone into the proper habits of programming. Let them cut their teeth there - make their typos, basic logic mistakes, etc in a safer sandbox.

      As long as you can ensure that they will leave that sandbox at some point, maybe.

      I started with QBASIC, but I never learned more than if/then and input there. With no goto or subroutines, I couldn't really call it programming.

      But then I got a C++ book. At that point, I really felt like I understood programming. When I started using things like Perl, I knew what a hash table was. When I started playing with Java, I knew what reference counting was, and what garbage collection was.

      I basically understood what was going on in any language. Assembly was a little strange, but it wasn't until Lisp, Haskell, and Erlang that I had to do some fundamental rethinking.

      And I think that would have been much harder, had I started in Java. Concepts like callbacks make a lot more sense when you understand pointers. If you understand pointers, constructors, and destructors, then auto_ptr makes sense. If auto_ptr makes sense, then garbage collection does, and you come into Java well-armed.

      I only wish I could figure out what book that was. It needs a bit of updating (yes, old enough that it breaks on modern compilers), but it actually taught C++ reasonably well to a non-programmer. Actually had transcripts -- the entire book was emailed, chapter by chapter, to a woman who barely understood computers at the beginning, and who frequently provided comments and asked questions. It actually taught you how to program, whereas I'm convinced my college Java course does not teach how to program, it only attempts to weed out the people who don't already know. (Java's Hello World is a horrible place to start, especially when you attempt to explain what every part means.)

      --
      Don't thank God, thank a doctor!
    29. Re:@_@ by SanityInAnarchy · · Score: 1

      A much better approach is to force the student to work through lower-level programming before ever reaching a modern layer that abstracts everything away.

      I'm not really convinced of that.

      There are many reasons I'd suggest not starting with Java, but I think, even if you end up doing nothing but Java for the rest of your life, you should have a solid foundation in higher-level languages, even functional languages.

      --
      Don't thank God, thank a doctor!
    30. Re:@_@ by AKAImBatman · · Score: 4, Interesting
      While I understand where you're coming from, I think you need to understand how Java got where it did. Coders of the 80's and 90's were faced with a variety of problems on a regular basis. Problems that were wasting their coding time to the point where they spent more time trying to track down the issues than they did writing the software to begin with. Even the most experience programmer was regularly bit by these issues!

      What were they?

      • Manual memory handling lead to leaks
      • Mismanaged pointers would dive into the wrong memory by accident
      • Compiled software was difficult to debug (particularly for low-level DOS software where the debugger rarely worked)
      • Chaging a base class (C++ specific) would require a recompile of all related classes. Which invariably meant a clean and compile. (This issue was actually the origin of Java. ;))
      • Software rarely compiled across multiple platforms, much less shared binaries across platforms. Write, rewrite, #IFDEF your code like a Christmas tree, compile/test regularly least you break some other platform, yo-ho-ho it's a programmer's life for me.
      • Pay $5,000 a pop for a TARGA decoder or write your own? (Again and again and again.) Yup, that was life as a C/C++ programmer.

      Java solved these problems by looking to the most advanced technology in the industry, and packaging it in a way that was so straightforward and simple that it was the DEFINITION of the KISS principle. What were these wonders?
      • Garbage Collecting
      • Complete lack of manual memory management
      • Stack-based design
      • Easily implemented, reversible bytecode
      • Objects/Classes (there's a difference which I won't expand on here) as first-class citizens in the language.
      • Separation of Classes into dynamic code files
      • Portable bytecode
      • Abstract libraries that implemented common data structures and functionality similar to that proposed in STL

      The productivity gains from these changes were astounding! But it didn't completely replace low-level coding in C/C++. Why? Because sometimes you needed to get down to the metal to make things work well.

      Today, the JVMs have been optimized like crazy. They can automatically make a program run faster as long as you know how to work with the GC and data structures that it provides. If you fight it, your performance drops like a rock. If you don't know how to use it, you might as well be fighting it.

      Yet how is a student supposed to know what the JVM is doing if he's never had to scrounge for bytes? If he's never had a practical need for a linked list? If he's never had to implement memory management? If he doesn't have the first clue how to balance a tree? If he can't understand how a garbage collector works? If he doesn't know what a circular reference is? If he can't explain what a pointer is and how a reference is related but different to a pointer? If he doesn't even know what "Turing Complete*" means?

      Java as a tool can be sharper than any other blade. But it is a double-edged blade. If you swing it wildly, it will cut you. If you wield it like a master, it will allow you to attack your problems with precision and vigor.

      As a side note, I wonder if it isn't time to start teaching students using virtual machines that replicate the limited environments of yesteryear? Not only would it force them into solving the low-level problems, but it would also provide them with the ability to visually inspect the state of the virtual processor, memory, and I/O. Much better than a simple stack-trace, wouldn't you say? ;-)

      *Imagine a computer scientist with no knowledge of what "Turing Complete" means being assigned to design the future of computers. Frightening concept? Very. Perhaps Quantum Computing would already be here if we had a greater number of qualified scientists?
    31. Re:@_@ by Plaid+Phantom · · Score: 2, Insightful

      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist.

      As a current "IT" student, I have to wholeheartedly agree with this. Just last week, I was in a Data Structures class and we were sorting our first array. The guy beside me, instead of writing the bubble sort that we'd been using in previous classes (the intended solution), nearly the first thing he did was pull up the Java documentation and find the Arrays.sort() method. I asked him about it, since we were working on a team. His answer? "Why write out a sort when Java provides it for you?"

      To be fair, Java is far from the only language susceptible to this. The C++ STL has sort methods, and I'm sure most other languages have similar features. The real problem is that programs are moving away from programming fundamentals in the interest of getting to the advanced things that employers want. I took the AP Programming classes/test back when it used C++, and I learned things there that we *still* haven't gotten to after two years in the degree plan.

      I don't know that it's the specifics of the algorithms that is really what is missing, though. I think the real loss is that students aren't spending time reading through the algorithms and learning how to analyze code, leaving them less able to step through their own code when their Java Servlet won't start up or their Bean disappears. One thing I run into when helping others is that they really can't say what the code they just typed is actually doing either algorithmically or under the hood.

      But then, I do hail from a small(er) former community college. YMMV, I suppose.

      --
      All comments are properties and trademarks of the voices in my head. Not like I'm gonna claim them.
    32. Re:@_@ by ZachPruckowski · · Score: 1

      Just out of curiosity, what would you recommend as a first language? I ask this having dealt with the entry level programming courses already, and so knowing at least intermediate C++ and having struggled through a Java course (placing mid-level Java w/o any Java background = pain). I'm curious as to what your choice would be (are you leaning toward straight C?)

    33. Re:@_@ by brezel · · Score: 1

      http://www.youtube.com/watch?v=Tr1qee-bTZI&NR=1 oh boy that video really freaks me out. i mean, the US' education system was never...uhm...admired in the rest of the world but this is really harsh.
      of course not all education will be this bad but this surely makes the question arise if this is intentional to keep people uneducated.
    34. Re:@_@ by dintech · · Score: 1

      Java is a fad. Others like LISP
      If you call museum-piece code timeless then yes, I suppose you're right. But if like most sane people you look at how much code has actually been written in total (in both languages), I suspect there's a lot more Java out there than LISP. Good luck banishing it all so quickly to the history books where LISP is right now...
    35. Re:@_@ by Oscaro · · Score: 1

      Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. But he could reimplement all those data structures as an exercise, and he should be asked to do so. The problem is in the CS programs, not in the language.
    36. Re:@_@ by Lally+Singh · · Score: 2, Interesting

      1st year students are rarely taught debugging skills

      WHY NOT?

      Only so many semester-hours in the first year, and plenty of them go to non-CS materials. And frankly, when the kids are still learning to set up a basic for loop, debugging won't help you much. Worse, it'll make kids learn to depend on a debugger for problems that they should learn to figure out themselves. I *shudder* at the thought of students single-stepping simple for loops and method invocations.

      Here's my personal history of learning to program.

      Yeah, congrats. Think of this: if you had your basic programming skills down pat before switching to lower-level techniques like pointers, linked-list implementations, etc. wouldn't it be an easier learning methodology than jumping in the deep side of the pool early?

      Yeah, some self-motivated, self-teaching programmers will go through all of it happily (you and I both did), but this is mainstream education. If we only catered to the innate hackers, we'd have a small fraction of the already-insufficient graduating CS majors we do now. Like 1/10th, easily.

      The 2nd year involves building digital circuits and programming raw-metal asm on machines without an OS.

      By the 3rd year, those same students who were spoon-fed java are writing kernel code as part of their OS class. I'll happily submit that most self-taught programmers who jumped in the deep end of the pool can't speak to that kind of advancement 2 years after writing their first line of code. The training wheels come off, but they definitely help getting the students up & running.

      Furthermore, I know plenty of kids who taught themselves to program at an early age, only to get turned off by it /because/ they got bit too hard by the stuff Java can prevent. I submit that making it easier to learn to program is a better thing than making it harder. Just b/c you make it easier to start with doesn't mean the kids are suddenly weaker for the rest of their life. More often, you end up stunting their long-term growth.
      --
      Care about electronic freedom? Consider donating to the EFF!
    37. Re:@_@ by Alphager · · Score: 1

      Ah a fellow Article-reader. we must both be new here.

      The thing that drives me nuts about this article is that I have been making this very argument for more than 10 years now, since my family tried to push me into CS school. The simple fact is that I was already writing in assembly in early high-school, and C shortly after that. As a manager and later, as a small-business owner, I've interviewed dozens of people with CS degrees who claimed they were programmers, only to find out quickly in an interview that they haven't the foggiest clue what a compiler does, or any relevant understanding of how a data structure manages to exist. Pointers? what are those? Why did you laugh when I said GOTO? Garbage collection? That's on Thursday.

      I do not think that the source of this problem lies in the curriculum. The huge Problem is that no mayor company that i know of is looking for programmers who know what the best data-structure for a certain sub-problem is. They want someone who has $array_of_bullshit_bingo_words in his resumé. As long as companies are using that approach to hiring they will continue to drive universities into the wrong direction.

      I don't know that there will be no call for the type of programming CS programs teach today, in the future... in fact the way I see it, 70% of the apps that business runs on can be done in the "plumber at the store" style. Many of these require intimate understanding of the problem domain, which is one thing that CS used to be fairly lacking in prior to the "Java Shift". .

      The plumber may really be the right analogy here: most plumbers did not actively pursue that career. They are plumbers because it was a way to get money.
      The 80/20 gap is a good way to describe it: 80% of the people in the IT-industry go home at 5PM and do not touch/think about a computer till 9AM the next morning. Those are the guys who will be developing in JAva (but only if someone from the 20% did set up their environment&IDE correctly). These are the guys who consider unit testing to be unnecessary and who think that sourcecode-versioning is an unfair chore.
      Five years down the road they have not added one ounce of knowledge to their brain. They are simply ballast, but the companies haven't gotten that part of the message yet. Instead the companies think about outsourcing and out-contracting.

      To get to the point: universities only do what the companies want.
      We have a mayor problem on our hands: we have a high demand for IT-workers, but only IT-people who are in it "for the fun" will be delivering good work. Dumbing down the curriculum leads to more graduates, but 80% of the graduates will be useless in 5 years when their skillset is heavily outdated. Just keeping your skillset current is not enough in this industry; you have to constantly learn new things (unless you are the lucky guy who is a PROLOG-consultant robbing the banks ;-) ).

      But when it comes to serious applications for big iron, Java just ain't it. I guess what I'm suggesting is that Java is a great language for non-programmers to learn to get a task done quickly and painlessly. I hope you don't take offense at this, I'm simply pointing out where the language's strengths really apply That is not the strength of Java_the_language; it's the strength of Java_the_a_huge_collection_of_libraries.
    38. Re:@_@ by EveLibertine · · Score: 1

      While this point may be valid, it's not like CS degrees were assurances of any level of competence anytime in my recent memory The reason why CS degrees aren't useful measurements is specifically because the curriculum has turned to crap. His point is not only valid, but encompasses yours. Furthermore, simplifying courses further will only exacerbate the problem. I agree with you whole heartedly that these degrees aren't good ways to measure performance. Improving the curriculum and having them focus on multiple complimentary areas of expertise, instead of just lightly glazing over everything that like the Prof. in TFA was complaining about, will help to create a better system for producing more qualified students as well as providing once again a piece of the standard with which to measure them. Destroying the curriculum even further as you suggested does nothing to help the problem, it just makes the problem more obvious.
    39. Re:@_@ by SanityInAnarchy · · Score: 1

      I *shudder* at the thought of students single-stepping simple for loops and method invocations.

      I shudder to think of them becoming dependent on that, so you're absolutely right there. But I don't really see another way to give them a thorough understanding of what the for loop and method invocation is actually doing -- generally, the way I see it done is pretty much a "human debugger" -- that is, someone at least running through each line, explaining what it does, at least once, to get you to think that way.

      Yeah, congrats. Think of this: if you had your basic programming skills down pat before switching to lower-level techniques like pointers, linked-list implementations, etc. wouldn't it be an easier learning methodology than jumping in the deep side of the pool early?

      Well, it's possible to teach those in C. No need for classes; what you're really looking for here is loops and functions.

      Also, this same logic applies to the above comments about a debugger.

      I'll happily submit that most self-taught programmers who jumped in the deep end of the pool can't speak to that kind of advancement 2 years after writing their first line of code.

      I'll submit that this is as much because of the "self-taught" part as anything else.

      I submit that making it easier to learn to program is a better thing than making it harder.

      So teach them a debugger, first thing, right?

      I will tell you one thing: I don't have all the answers. I don't even have most of them. All I will say for certain is that I dislike Java at just about any stage, and that there are at least four or five major kinds of language that people should learn -- in fact, at least three completely different, mutually-exclusive paradigms (imperative, functional, and reflective).

      It is 3:45 AM, and I have insomnia, so it's possible that the above paragraph is incomplete, nonsensical, or a total ripoff of something on Wikipedia. If so, I apologize.

      --
      Don't thank God, thank a doctor!
    40. Re:@_@ by sydneyfong · · Score: 3, Interesting

      The advantage to java is that it's safer to make errors there. Screw up with a reference, and you get a nice stacktrace. In C/C++, your program just dies (you can get a debugger on there, sure, but 1st year students are rarely taught debugging skills). "Safer"? Unless the student is going to write any mission critical programs (during the course), there's no "unsafe" errors. Sure you'll get quite a few SEGV (I ran into these more often than not when learning C), but it provides a more rigid foundation than the "safer" Java which sometimes hides away problems that one might otherwise be able to spot with C/C++. Printing a stacktrace with a debugger isn't really that hard. And it's a bit shorter than your average Java stacktrace, which is a plus. (And if "debugging skills" are not taught in the first year... when should it be???)

      That said, Java's good for getting someone into the proper habits of programming. Let them cut their teeth there - make their typos, basic logic mistakes, etc in a safer sandbox. Teach them how to print out debug statements early to understand what's going on, and to identify what mistakes they often make. When they know how to properly type in a loop construct and declare/invoke a function, then let them play with pointers. I think Java actually makes it hard to do these things. Print out debug statements? When I first saw Java code I almost screamed at "System.out.println"... wtf? Besides, from what I know most Java programming courses provide a "friendly" GUI Framework, which has its own obscure classes and methods of doing I/O. Compare that with printf/cout, and you get what I mean.

      Besides, the problem with Java is that it has a very rigid (i.e. inflexible) programming paradigm. There are many programs which are not best modeled by OOP, and this includes the procedural iterative programs that a student will most probably begin with. I've always wondered how instructors were able to explain away "public static void main(String args[]) { ... }". Some magic incantation?

      I agree that C/C++ is too heavy on pointers and SEGV happy, but at least you can hide away those problems if you choose the right subset of C++ to teach.
      --
      Don't quote me on this.
    41. Re:@_@ by syousef · · Score: 1

      I make a living as a Java programmer. I enjoy the work I do and feel that no other language/platform can even touch Java's capabilities in team and enterprise development. Even for single-programmer development, there are a lot of situations where Java is the solution to end all solutions.

      I work as a Java developer and having seen how convoluted the J2EE and other common framework libraries are I have to disagree big time. I don't know if I've simply seen more systems than you (I've used a variety of languages and only specialized in Java in the last 3-4 years) and therefore know what's out there but I have to say things were being done much more effectively in the mid to late 90s. Most of the team and enterprise development products for Java aren't revolutionary either. I really don't know how you can hold this view. In fact I think we've gone backwards in the last few years. Ever since everything went web based mixing the hodge-podge of Javascript/JScript to accomplish things on the client side with the travesty that is inconsistent HTML and CSS, with libraries that generate Java on the fly or wrap everything in proxy clsses on the server side, WYSIWYG and RAD development have gone out the window. What use to take a few hours to code now takes a few days. I've even seen the tools make a mockery of incremental compilation leaving you to recompile large code bases for each little change, test them, and rinse repeat.

      --
      These posts express my own personal views, not those of my employer
    42. Re:@_@ by Anonymous Coward · · Score: 0

      The huge Problem is that no mayor company that i know of is looking for programmers who know what the best data-structure for a certain sub-problem is. You might be right if you mean "the majority of companies", but surely I can name "major companies" that look beyond a list of buzzwords on your resume. And no offense to your English but it's spelt "major".
    43. Re:@_@ by Weedlekin · · Score: 2, Insightful

      ""Yeah, don't worry about that 'public class HelloWorld' bit. We'll get to that later."

      "Trust me. You need to have that import in your code. Otherwise it won't work."

      "We'll get to that main() method later."

      Whereas the standard C "hello world" example will of course be perfectly obvious to any rank programming beginner due to the fact that people are born knowing all about functions, header files, and libraries, whereas objects and classes are something they have to be taught.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    44. Re:@_@ by Simon+Brooke · · Score: 1

      And then you let them use C++. Not the big scary version of C++ everyone in /. is afraid of (IMHO unjustly so), but just the C with classes version. Let them use that for their data structures course. People still have to take a data structures course and write their own implementations of the basic data structures! It's what we do here and it's not too bad an idea -- the kids should get trained on more than one language.

      Having just said, in a post up there somewhere, that languages are just tools and you shouldn't get to hung up on them, I continue to be of the opinion that C++ is a grossly over-rated language, with few real merits. From BCPL to C is a step backwards in my opinion (yes, I've programmed professionally in both); and the extensions that C++ provides are essentially a bag hung on the side of a crock. When C++ was first designed it was a long way behind the contemporary state of the art, and it hasn't got better with time.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    45. Re:@_@ by Lally+Singh · · Score: 1

      Dude, you missed the point of my post.

      See my response to another person's response on this post (e.g. a response to a sibling in this message tree) for some discussion.

      Java's a good first language. It's safer for the student to make common newbie mistakes there, as Java will give you better diagnostics, and makes it harder to screw up royally. Not safer in terms of a nuclear reactor, safer in terms of the student not switching majors. Move on to C++ after that for the lower level stuff. Then cover other languages later. There are multiple courses in a CS program, covering different things. But most of them aren't useful to a student who can't do basic programming yet.

      The unrelated digression about GUI libraries I'll assume are a late-night rant, and not a straw man argument. Complain all you want over the use of package names everywhere, but it does make it easier to construct large programs. As all large programs were small once, it makes sense to have them use the language construct early --- it's better than having to rewrite/heavily refactor them later.

      As for boilerplate, every language has it. Early students are happy to be told "trust us on this now, we'll explain later when you know more."

      --
      Care about electronic freedom? Consider donating to the EFF!
    46. Re:@_@ by LizardKing · · Score: 1

      1st year students are rarely taught debugging skills

      Why? In the first week of a HNC course I attended (a vocational qualification that's considered less of an achievement than a full degree) we were taught the rudiments of debugging and profiling our C code. That was only eleven years ago, so I find it hard to understand why an emphasis on understanding what high level code does when it's been compiled and run has been lost. To me this smacks more of laziness on the part of the lecturers, as debugging and profiling should be taught regardless of the programming language and th tools are provided with the Java SDK.

      As for the article, this guy's got a real hard on for Pascal. Sorry, but Java is a much better choice for an educational programming language - all you need to do is exclude the use of classes from the java.awt.* and javax.swing.* packages if you want students to avoid getting diverted by graphics programming. Likewise, the presence of the Java Collections doesn't preclude an understanding of data structures and algorithms - if anything they provide convenient examples of usage, as demonstrated by Weiss book "Data Structures and Algorithm Analysis in Java" which is a standard textbook on many courses.

    47. Re:@_@ by LizardKing · · Score: 1

      If you consider how long AI courses have been going, where LISP is (was?) the de-facto programming language, then there may actually be more lines of code written in Lisp than in Java. However, in the non-academic world it's pretty obvious that there's far more Java than LISP code in production.

    48. Re:@_@ by daem0n1x · · Score: 3, Interesting

      I had a great microprocessor teacher at college. He would use the Socratic method, not telling people how things are done but asking people and slowly building knowledge using the answers.

      His classes were great. He would start by drawing some components on the board and then asking people how to connect them for some purpose. Some students would suggest things, he would ask the others if they could find a flaw, and so on. Many times he would follow a wrong idea on purpose so that the students could find the flaw by themselves some steps ahead. Then he would erase everything back to the bad idea and start again from there.

      In the end of each class we would have a full circuit drawn and the greatest thing was, the teacher didn't explain it to us, we created the solution by ourselves.

      I loved his classes but almost every one of my colleagues hated the teacher's guts. They preferred to be spoon-fed with information, and that teacher committed the worst of sins: make them think.

    49. Re:@_@ by sydneyfong · · Score: 1

      Early students are happy to be told "trust us on this now, we'll explain later when you know more." Then I guess I'm in the minority. I tried learning Java myself a few years (around 2002-03) ago, got sick with all the obscure stuff I had to configure (classpath? javac/java?), then the horrendously verbose boilerplate. I knew nothing about OOP at that time, and every single bit of the language seems to descend from a distant planet. Needless to say, I didn't go through on that try. Well a year or two later I learned it when working in an internship, where the features of the language made a bit more sense. I could imagine if I had little to none programming background and trying out a Java course where half of the source code is voodoo and we are taught to "trust us on this now, we'll explain later when you know more", I think I'd switch majors if I weren't too keen on CS... So yes, on the "safer in terms of students not switching majors" measure Java probably fails miserably for me...
      --
      Don't quote me on this.
    50. Re:@_@ by oliderid · · Score: 1

      Java c# and other similar languages are economic necessities. You speed up the coding part of the project basically. I totally agree with the limits of these languages especially fr resource hungry apps or mission critical ones, but see the time/documentation you need to code in C compared to c#/java. It is almost the same argument used against windowed IDE apps.

      Purists can lament on the poor state of computer engineering...But in the real life only your number of contracts/happy clients matter. As a business owner too...Anything that makes my life easier and helps me to reduce the cost without jeopardizing the final product quality is welcome.

    51. Re:@_@ by Anonymous Coward · · Score: 0

      Otherwise the student is liable to shoot himself in the foot at a much later date.

      And here's how they'd do it.

    52. Re:@_@ by Lally+Singh · · Score: 1

      Don't let them get hooked on it too early, when they should be able to debug the code by inspection. Cover it later when the problems really need a debugger. Hence the "1st year" qualifier on my statement.

      --
      Care about electronic freedom? Consider donating to the EFF!
    53. Re:@_@ by Anonymous Coward · · Score: 0

      The parent to my comment has been marked "Funny" and I hope it was really meant to be a joke. The math demonstrated in that video is the most backwards, confusing approach imaginable. This issue is nothing like evolution. It's a simple matter of what process is most efficient, and that "Turk" method is the most absurd thing I've seen in a long time. What a waste of time.

    54. Re:@_@ by smilindog2000 · · Score: 1

      We do the exact same thing, though I suspect our style of OO in C might bend your mind just a bit. The hand-rails are the important thing, whether provided for by a strong group leader or by the language the group uses.

      --
      Beer is proof that God loves us, and wants us to be happy.
    55. Re:@_@ by dnoyeb · · Score: 1

      One thing I do agree on is that if one thinks Java is a good first programming course, then he indeed is missing what Java is about. It makes me suspect they are teaching a c course but simply using the Java language to do it.

      I don't see a problem doing that actually. Java's environment is so much cleaner that c with its built-in compiler and API and no header files. But they probably shouldn't call it a Java course but call it a basic programming course.

    56. Re:@_@ by daem0n1x · · Score: 1

      WTF???? The standard algorithms exist for centuries, are universal, work perfectly and are easy to understand. Why are people spending time and money to create these bullshit algorithm? Are you trying to go 3rd World?

    57. Re:@_@ by Lally+Singh · · Score: 1

      Try an IDE.

      --
      Care about electronic freedom? Consider donating to the EFF!
    58. Re:@_@ by Anonymous Coward · · Score: 0

      No offence to your English, but it's incorrect to start sentences with "and".

    59. Re:@_@ by debatem1 · · Score: 1

      I have to admit- while I hate Java with a burning passion, you're right on the mark here. Java's proper place in the scheme of things is as the language for developing systems where you don't trust anybody- not end users, not hardware, and not programmers. Big iron is exactly what the doctor ordered, and while I still think that languages like C and Python (C for low-level, Python for high-level) are probably better for actual programming classes, I think that Java should be used in all software engineering coursework for exactly this reason.

    60. Re:@_@ by Sam+Douglas · · Score: 3, Insightful

      Personally, I would go for a language with an interactive REPL environment, preferably one that allows/encourages functional style (Scheme, Python, Lua, etc.) to learn the concepts of computer programming. Not many programming languages can teach you that faster than a good Lisp dialect. C would be a distant second.

    61. Re:@_@ by colfer · · Score: 1

      You can teach any kind of craziness in math, it's interesting and deep. But few kids coming out of that Turc method of multiplication are going to be able to multiply two numbers with a pencil. (It teaches the kids to ad-hoc break down the multiplication by the associative property to multiplication by 5's, 10's and multiples of 10's.) Great for future math majors maybe, if they don't hate the chaos of their fellow students pretending to learn this craziness.

    62. Re:@_@ by JediTrainer · · Score: 1

      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist.

      There's a simple solution for that. When I went to University of Toronto for CS, the prerequisite intro to Java programming course had us implement those structures using a simplified version of the API as an interface. First few assignments? We implemented Vector, LinkedList (single and doubly-linked), Hashtables, etc. And the TA would give you a 0 if you tried to shortcut around it - you had to understand the structures to get a pass.

      There's no reason why you can't learn all of that stuff using high-level languages in Java if the curriculum is committed to it.

      --

      You can accomplish anything you set your mind to. The impossible just takes a little longer.
    63. Re:@_@ by Anonymous Coward · · Score: 0

      >Its straightforward design allows for the Virtual Machine to automatically adapt to memory, processors, and optimize away sections of code at runtime in ways that a static compiler will never be able to match.

      Yeah right. Maybe I am just missing a flag, but if you just call javac, it won't optimize something like:

      static int x;
      public void myfunc() { for (i = 0; i 10000000; ++i) ++x; }

      GCC/GCJ won't either unless you specify -O, but I could not find that flag for javac, which leaves (sun)java(2SE 1.5,1.6) in the slowpath, literally.

    64. Re:@_@ by Anonymous Coward · · Score: 0

      Java is a great language for non-programmers to learn to get a task done quickly and painlessly


      Wait a minute. You're seriously trying to argue that Java is a language in which things are done quickly and painlessly, especially by non-programmers? We are talking about the same Java, right? Developed by Gosling and all?
    65. Re:@_@ by smilindog2000 · · Score: 1, Insightful

      I'm glad someone found the post funny, but seriously, the long division and 2-digit multiplication the woman was teaching is 1) boring... sure to put kids to sleep, 2) easy to forget, 3) provides zero insight into why it works, and 4) is simply a great example of monkey-see-monkey-do education. I'll bet that over 50% of all Americans have forgotten how to do long division, that 90% of them never understood why it works, and that 99% of us hate it. The "Turk" method would seem to have none of these problems, even if it's less efficient. When these methods were taught to our parents, they were really important tools to live in society, just like proper spelling and brushing your teeth. In the computer age, I'd say teach them this "Turk" method first, and later in a more advanced class, teach them the efficient algorithms, probably about when you introduce algorithms for finding greatest-common-divisors and such. Unfortunately, in this "No child left behind" world, our kids aren't being taught the why's anymore, only the how's. I'd rather have my children understanding basic concepts they can build on rather than how to mimic a four-function calculator by hand.

      Here's a great test for your kids math teacher: Why is a negative times a positive negative? I asked every math teacher I knew in Georgia, and got nothing but blank looks. So, one day as a kid I sat down and worked it out, and discovered a lot about multiplication in the process that my teachers never knew. By college, I understood basic math operators well enough to recognize addition and multiplication in my digital electronics class: AND is multiplication, and XOR is addition. It then became obvious how to convert any boolean equation into a canonical AND/XOR sum of products form just by doing basic arithmetic. The poor kids who just did the monkey education thing can't even check their answers to see if the units are right and that the value is of the correct order of magnitude.

      --
      Beer is proof that God loves us, and wants us to be happy.
    66. Re:@_@ by SL+Baur · · Score: 1

      However, in the non-academic world it's pretty obvious that there's far more Java than LISP code in production. At one time, everyone had a mood ring. So what?

      LISP has a half century under its belt. It is widely used today in conjunction with XEmacs/Emacs.

      Let's have this discussion after the end of (signed 32 bit) time in the 2040s and we'll see how many people are still actively developing in Java. I'll bet anything that LISP will still be in use then.

      A fad is a fad because it's popular. A fad isn't a fad when it develops the kind of mindshare that the LISP language has gotten[1]. COBOL, like Java, was a fad. The fact that poor, lost souls are still maintaining COBOL code today doesn't make it any less a fad. But pay close attention Java lovers, that is your future, if that's the only computer language you can deal with.

      [1] In some respects, Java is a descendant of LISP, at least with respect to how it deals with byte code.
    67. Re:@_@ by Hognoxious · · Score: 0

      One thing I think that should be pointed out is that most schools use 'Computer Science', 'Information Technology', and 'Information Systems' interchangeably.
      I think you've hit the nail on the head there. It's almost like lumping pharmacologists and biochemists in with doctors.

      So, learning Java as a primary language may be just fine for an IS major who will be writing end user business apps. This person will not be designing drivers, OS's or any similar project
      If you're programming business stuff (I work with ABAP, on SAP) you don't really need to know much about things like stacks, pointers, linked lists.

      Not that it's a bad thing to know about them, because sometimes it's useful. Indeed knowledge is generally a good thing for its own sake. But if you're aiming for the business side, a basics of accounting course would me more useful to you than one on compiler theory or low-level languages.
      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    68. Re:@_@ by Anonymous Coward · · Score: 0

      The college kid spent 4 years learning java and c at a base level

      I sincerely hope that they did other things in their Computer Science course than learn to program a couple of languages in that amount of time. That's like a few "modules" (for want of a better word) out of 30-40 in that timespan. The other modules should have covered things from CPU architecture, assembler, operating system design, numerical analysis, functional programming, discrete mathematics, types, security, ethics, graphics, and myriad more.

    69. Re:@_@ by Anonymous Coward · · Score: 1, Interesting

      The concern I have with Java is that it allows a unskilled coder to develop what appears to be a secure and robust program without really understanding what they are doing. Because of this the coder doesn't realize how many holes are in their program because Java helpfully tries to fill all these holes, sometimes improperly. C or C++ on the other hand makes it fairly obvious that your program is completely full of holes.

      As as fair programmer myself (more focused on requirements by my company) I prefer to have my programs flaws laid out for me to see instead of hidden by attempts by the language to fix them but then my code goes into embedded applications in aircraft avionics, others may not care.

      (I do have to say my impression of Java may be off as its been four years since I coded with it...)

      Just my $0.02

    70. Re:@_@ by Simon+Brooke · · Score: 1

      Just out of curiosity, what would you recommend as a first language? I ask this having dealt with the entry level programming courses already, and so knowing at least intermediate C++ and having struggled through a Java course (placing mid-level Java w/o any Java background = pain). I'm curious as to what your choice would be (are you leaning toward straight C?)

      Scheme.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    71. Re:@_@ by Etyenne · · Score: 4, Insightful

      I am one of those passionate about IT (incidentally, I am also self-taught). While I recognize that those for whom IT (not just programming) is a passion are, in general, much more competent than those for whom IT is just a source of income, the reality is just that there are simply not enough of us. As such, I recognize that I cannot expect most of my colleagues to get excited about their job as I do, and it is all good anyway. It's really just too bad for them, I hope they have fulfilling hobbies.

      After all, the situation is not really surprising. I know very few people (if any!) that are *passionate* about accounting. Yet, millions of accountants worldwide reliably make the numbers add up. These unpassionate accountants do good services on average and make our economic system run smoothly; without them, it would collapse. I am grateful someone else is willing to do it, because I could not stand having to do it myself. Why would IT be any different?

      I am sure someone will try to invalidate my point saying the IT-as-income people have negative productivity, and hence we would be better off without them. Well, considering how few of us there are, I doubt we could make up for the horde. And I am already overworked as it is ...

      --
      :wq
    72. Re:@_@ by mmurphy000 · · Score: 1

      A much better approach is to force the student to work through lower-level programming before ever reaching a modern layer that abstracts everything away.

      C/C++ are a modern layer that abstracts everything away. Heck, assembler is a modern layer that abstracts everything away. By your rationale, if you're not hand-coding opcodes straight into system memory and executing them, you're too far from the bare metal.

      Generations of programming languages are simply a modern layer that abstracts everything away from the preceding generation. I can imagine a similar complaint lodged once upon a time against C/C++ as a teaching language, because it means students are reliant upon the "magic" of compilers to create the machine code, and everybody does device drivers in assembly language anyway.

      insert obligatory "get off my lawn" reference here

      With regards to students, not having built data structures by hand, therefore not knowing when to use them...I own a Toyota Prius. Before that, I owned a Ford Explorer. I know that the Prius gets significantly better fuel economy than the Explorer. I know the Explorer has much better handling in the snow than the Prius. All this despite not having built the Explorer or the Prius from parts by hand. All I've done is drive them. And maybe I'm smarter than the average bear, because I was able to figure those out just from specifications and, in the case of snow-handling, just looking at them. Telling me that the current crop of college students are lazy and won't read docs is one thing; telling me that having them build data structures is the solution only makes sense if building data structures is used as punishment for not reading the docs. Just as C/C++ students don't need to hand-compile their source to machine opcodes in order to learn the benefits of loop unrolling and such.

      I'd argue that students with a CS degree should be proficient in at least three programming languages, if not four or more. I don't really care which ones. Anybody doing computer programming is going to need to learn a new language every few years, so a skill we need them to have is how to learn a new language and learn how to use it effectively (e.g., which data structures work well in that language vs. others).

    73. Re:@_@ by JavaRob · · Score: 1

      I can second that. I've been making my living as a Java programmer for a long time as well (this is perhaps obvious), and this was another excellent article.

      Studying computer science needs to impart a deeper understanding than how to patch together Swing components to pop up a GUI. Well, yeah -- they're just learning the right chunks of code to paste together, then struggling their way through the compiler errors until it "works". That's not even programming. It's not even useful if they're planning to be Java developers when they graduate.

      His main point is that schools are trying to make compsci programs "easy and fun" by removing the hard parts, because enrollment is declining since the dot-com crash and they're getting panicky.

      And the article doesn't mention this explicitly, but I'll point it out -- they're shooting themselves in the foot.

      The demand for good developers is still going up and up. But the demand for shitty, clueless developers is NOT. So by loosing a horde of CS graduates who only know how to cobble together libraries with no idea as to what's going on under the covers, who will then have trouble getting employed... they're just exacerbating their image problem. Look at these unemployed CS grads!

      On the other hand, a more rigorous program would mean fewer but higher quality and more successful grads, which would in turn increase the demand for CS grads and convince more bright people that this is where they belong, no?

    74. Re:@_@ by ragefan · · Score: 1

      The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist. I would argue that the issue isn't with Java, but the way it presented to the students. I took a few Java classes at my university and before we could use the built-in structures we had assignments to implement them ourselves. We did not completely re-implement stacks, queues, hash tables, etc, to replace the entire interface but enough of the data structure to understand its workings before moving on.

      Provide students using C++ an API that contains all those structures implemented for C++ and the same issues would arise.
    75. Re:@_@ by luke2063 · · Score: 1

      Sorry - but it is not incorrect to start sentences with "And" - Starting Sentences with "And" or "But"

    76. Re:@_@ by plague3106 · · Score: 1

      Well, as always, I suspect it depends on the school. I'd like to think my CS degree from RIT is worth more than one from Devry..

      My suggestion would be only get into CS if you truely love programming, and view the money as nice bonus. Well, at least that's how you'll get better developers IMO.

    77. Re:@_@ by ciggieposeur · · Score: 1

      I usually define "big iron" as supercomputers, which often mean these days hundreds or thousands of 4-16 CPU boxes networked with a fast interconnect (myrinet or infiniband) and a batch queueing system on top. I haven't seen much Java in this space. I see lots of Fortran, C, and C++ though.

      I'm not sure why I don't see much Java here. Java's got MPI libraries available, and some of the programs being used could have been written in Java in their early days. I suspect that it is probably any number of reasons, including:

      1) "Java is the new COBOL", e.g. Java is perceived as generally a business-oriented platform.
      2) Java's performance problems in the 90's turned these scientist programmers away from it.
      3) JVM's weren't available for a long time on some of this hardware, and when they were they suffered from serious stability problems under load.
      4) Scientist programmers just aren't really into OOP yet, and may never be.
      5) Some combination of the above.

      But then I also don't see Lisp, Python, Ruby, or any of the other "hip" CS languages on this kind of "big iron".

    78. Re:@_@ by fireboy1919 · · Score: 1, Insightful

      monkey-see-monkey-do education is partly responsible for our dumb high-school grads

      Spoken like someone without much math experience. Until you get *past* diff-Eq, virtually all useful continuous math is wrote memorization (except perhaps proofs...that's mostly covered in geometry). Further, it's pretty much all memorization of algorithms. If you're not teaching algorithms, you're not teaching kids to understand math.

      Further, if you're not teaching the most efficient mechanism for arithmetic, you're not going to set anyone up to be able to do advanced arithmetic in their heads - which is necessary for the intuitive leaps needed to understand quite a few proofs. Do you expect all the famous mathematics papers to be rewritten to coddle you because you didn't learn arithmetic?

      The monkey-see-monkey-do portions of US education are GOING AWAY. The rest of the world still has them, but the lack of them is killing math and science education in the US compared to its peers. Creativity does need to be encouraged at an early age - which is what literature, music, and art do. Losing those would definitely be worse than losing science or math, IMHO. We need to not lose those.

      But we can't shift creativity into early science or math education. You've got to just memorize things for a really long time in those areas before you can start contributing actually useful creative notions.

      --
      Mod me down and I will become more powerful than you can possibly imagine!
    79. Re:@_@ by q-the-impaler · · Score: 1
      --
      Sierra Tango Foxtrot Uniform
    80. Re:@_@ by bunratty · · Score: 1

      But good writers break rules knowingly and purposefully.

      --
      What a fool believes, he sees, no wise man has the power to reason away.
    81. Re:@_@ by Dorkmaster+Flek · · Score: 1

      I have to agree with this full well. We used primarily Java in my university CS program (though also C, Scheme and some assembly and Python in other courses) and though we had access to Hashtable, LinkedList, et all, before we were allowed to use them in our more complicated programs, the first thing we had to do was actually implement them ourselves to understand exactly how they worked. The key is understanding what's going on before you jump into using all these data structures and APIs.

      --
      I like to think of online DRM as something akin to a college -- you pay for lessons until you learn something.
    82. Re:@_@ by RuleBritannia · · Score: 1

      The video is amazing... Although the woman comes to completely the wrong conclusion - all these methods are valuable. Children (no scratch that... people) who see the equivalence of all these methods are much more likely to be able to apply them in appropriate situations and really understand what they are doing.

      Without a piece of paper, adding partial products is difficult - so for quick sums, the reasoning technique (breaking 26x into the sum of 20x , 2x and 1x) lends itself well to approximation, which helps in quick decision making.

      I'd never seen the lattice method taught in school-maths but was extremely suprised to see her assert that people can't explain why it works? It's an array multiplier - 'My-First-Multiplication-Circuit' from digital hardware design 101.

      The question of selecting an appropriate multiplication algorithm is obvious in hardware design since we have clear metrics of power, performance and area to evaluate it against.

      Perhaps a better explanation of multiplication methods to children could be derived if we examined them in a framework which explicitly considered them in terms of verbosity, speed and correctness.

    83. Re:@_@ by The_Wilschon · · Score: 1

      Oy, somebody has never heard of Just-In-Time compilation, which Sun's Hotspot JVM brought to the mainstream (it certainly had existed previously, but not in any Languages for the Masses, to use Paul Graham's phrase...). No, of course javac doesn't do it. That's not the point.

      --
      SIGSEGV caught, terminating

      wait... not that kind of sig.
    84. Re:@_@ by hey! · · Score: 1

      Well, I can understand CS departments feeling the program has to be fun.

      I can't understand why they'd choose Java to make it so. If they wanted to make it fun they'd make you do everything in Brainfuck, or on a Turing machine, or in assembler. Figuring out how to do things is fun. Figuring out how thing have been done is deadly tedious. The only reason to use Pascal is to keep the focus on what is being taught, not on the language used in the assignment.

      With respect to Java making things to easy... I'd say the fault is the assignments given. If the professors want students to build one parser that builds a DOM tree from XML, and compare that to a recursive descent parser, they ought to assign that.

      People often go for a CS degree because they want to write software, so I suppose degree programs with lots of programming are more fun. And that may be the REAL issue: there's too much emphasis on programming. Somebody who has the makings of a great programmer just needs a nudge in the right direction, and a few years of professional programming will complete his education in that area. If he needs more than a good start, he'll probably never get there.

      While I'd really like any CS grad to have solid programming skills, what a CS program should do for students is to give them all the abilities they are unlikely to acquire on the job. This means that from a androgogical standpoint (pedagogy is about teaching children) programming is more of a necessary evil than the main focus. Would I like CS grads to come out with solid programming skills? Yes. But it doesn't mean they get it in a way that obscures the other things they're supposed to learn. Perhaps a better way to put this is that CS programs should have a better but less pervasive emphasis on programming. If a language choice is ruining a CS program, there is something very wrong with that program.

      There are of course certain topics that require programming so students can express their understanding of the topic. Data structures is a notable example. Data structures is about learning common and useful abstractions. Some assignments should make the students demonstrate their understanding of how the abstractions work. Other assignments should teach students that they are abstractions that can be used to describe systems in which they are not readily apparent. A natural way to do this is to give some assignments in a language where abstractions are easy to describe, and others in a language provides only rudimentary facilities like arrays and subroutines.

      I don't see a CS degree as the dividing line between a programmer and a non-programmer. I see it as the dividing line between a designer, or architect, and a programmer. It's the things that are hard to learn from programming that you should be getting.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    85. Re:@_@ by mwlewis · · Score: 1

      I mostly agree with you, but I guess I see less difference between .NET and java. I guess the classpath thing is a valid point, but you have the same misuse/ignorance of the APIs.

      --
      JOIN US FOR PONG!
    86. Re:@_@ by Fafnir43 · · Score: 1

      Um... Those "cluster problems" on the video? They're easily the most efficient way of doing non-trivial mental arithmetic. (I'm a maths undergrad in Cambridge [UK] and they're the method I use.) Try doing 44*97 in your head with the standard algorithm, then try reducing it mentally to (50-6)*(100-3) = 5000-600-150+18 = 4268, and you'll see what I mean. I've /never/ run into problems with a proof due to an inability to do mental arithmetic. The standard method, by contrast, is effectively useless in the modern age. It fails horribly for mental arithmetic, it teaches students nothing about the nature of mathematics, and when was the last time you had to work something out on pencil and paper?

      --
      To know recursion, you must first know recursion.
    87. Re:@_@ by smilindog2000 · · Score: 3, Interesting

      Spoken like someone without much math experience. Until you get *past* diff-Eq, virtually all useful continuous math is wrote memorization (except perhaps proofs...that's mostly covered in geometry). Further, it's pretty much all memorization of algorithms. If you're not teaching algorithms, you're not teaching kids to understand math.

      Well, I see we'll just have to agree to disagree. Math was my favorite subject at Berkeley, and even though I got an EECS degree, I took a math course ever semester. I was part of the math club, and frankly just love it. I have a patent on super-fast simulation of diff-eqs using backwards trapezoid with direct computation of the future point. I was the first person to ever create a commercially usable version of asymptotic waveform analysis - AWE (which is not as good as the patent I linked to). I dabble in high-frequency transformer design because it uses cool 3-D optimization techniques. Anyway, trust me, I like math, though I'm just an engineer.

      If China and India and Singapore want to churn out clones who can mimic smart people well enough to repeat their work, let them. To continue leading, we need creativity, not the arts/literature kind, and it needs to be nourished in children. I strongly disagree that prior to diff-eqs, math should be mostly rote memorization. Math can be fun and creative starting in Kindergarten. My kids go to Montessori school, where they teach the why's before the how's. It's not for everyone, but it certainly is for me in my family. Unfortunately, with "No child left behind", our country is headed in the exact wrong direction, focusing on the how's rather than the why's.
      --
      Beer is proof that God loves us, and wants us to be happy.
    88. Re:@_@ by Dr.+Smoove · · Score: 1

      And who taught you that?

      --
      "If you plant ice, you're gonna harvest wind."
    89. Re:@_@ by smilindog2000 · · Score: 3, Insightful

      Yep, that's how I do it, too. I like to say I took way too much math to ever learn how to multiply, but if you show me the numbers, I can usually guestimate quickly and move on. In your example, I'd just say it's something between 4,000 (40*100) and 4,500 (45*100), and in most cases move on from there. Especially as an engineer, I almost always know my required precision when doing math. Computing run-time or memory usage I only do within 20%. Even if I need 6 significant digits, I do the simplified calculations and make sure my final answer falls within my precision error from my guess.

      Once in college, the Electronics 101 professor handed out a really tough equation to solve. However, our standard practice was to only write out the answer to six significant digits. I realized in about 30 seconds that only one term in the sums on either side could contribute any significant digits, and I had the answer in a couple of minutes. The rest of the class thrashed out a solution over multiple pages of computations, and only a few of them got it right. I thought the professor was going to give a valuable real-world lesson on how real engineers do things, but no... the next lecture was entirely about solving the math the hard way. He sucked as a professor... completely lacking in creativity (he was a French visiting prof... most profs at my school were quite good).

      --
      Beer is proof that God loves us, and wants us to be happy.
    90. Re:@_@ by squoozer · · Score: 1

      Couldn't agree with the parent more. I'm one of those programmers that is passionate about programming but I choose to develop mainly in Java for a number of reasons. Firstly, programming is hard, if it wasn't hard we wouldn't have so many bugs so I want tools and languages that make it as hard as possible to srcew up. Secondaly, as I now move into a more managerial roll I see a clear need to be able to quickly hire new developers that can work on the projects I'm running.

      I admit that Java isn't perfect but right at the moment, for what I (and thousands of others) am doing, it fits better than any other technology.

      I'm pretty fed up with all the Java bashing. I feels like the Luddite movement. Java, for better or worse, has allowed us to produce more code in less time and generally with fewer bugs.

      --
      I used to have a better sig but it broke.
    91. Re:@_@ by Hognoxious · · Score: 1

      No offence to yours, but that's a myth.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    92. Re:@_@ by Anonymous Coward · · Score: 0

      1) "Java is the new COBOL", e.g. Java is perceived as generally a business-oriented platform.
      2) Java's performance problems in the 90's turned these scientist programmers away from it.
      3) JVM's weren't available for a long time on some of this hardware, and when they were they suffered from serious stability problems under load.
      4) Scientist programmers just aren't really into OOP yet, and may never be.
      5) Some combination of the above.
      C works, why change?
    93. Re:@_@ by Anonymous Coward · · Score: 0

      Yeah right. Maybe I am just missing a flag, but if you just call javac, it won't compile something like:

      static int x;
      public void myfunc() { for (i = 0; i 10000000; ++i) ++x; }

      There, fixed that for you.

    94. Re:@_@ by homer_s · · Score: 2, Insightful

      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 how they ended up with the result - kind of like the 'lattice method' which she rightly criticizes.

    95. Re:@_@ by Anonymous Coward · · Score: 0

      Personally I've had much more success with university graduates than anyone out of high school. From my experience those coming right out of high school don't know how to learn on their own and need to spend considerable time being taught. They muddle through their work, ignoring the hard parts (which is what they need to learn) and have to be taught far more than the university (or college) graduates. The university graduate at least understands how to write structured programs (mostly).

      I don't understand why you consider people with a university degree to be anything other than entry level staff? Maybe that is why I don't have the same difficulties with them. If you don't have IT experience (degree or no) you are entry level and treated as such until you prove otherwise. The university graduates prove themselves faster and more often than those without any post-high school education.

    96. Re:@_@ by Anonymous Coward · · Score: 0

      Say what? I think you're confused. The old ways work. This new Terk method is what she's railing against. In the 90's we had holistic reading where kids weren't taught to sound words out. Now we have these new math methods that will create a generation of math illiterates.

    97. Re:@_@ by Anonymous Coward · · Score: 0

      C is also a high-level language. From what I've heard, they use C every once in a while in kernel dev.

    98. Re:@_@ by jimbolauski · · Score: 1

      I don't see how one can apply most of the new algorithms to harder equations, with out the fundamentals and memorizing the problem (3x+8)*(7x-2) becomes much harder also how does one do (5x^3 + 7x^2 - 4x + 3) / (2x -1) with the new math. Like C and other lower level programming languages these fundamental skills are necessary in solving harder problems more efficiently. All your doing by teaching the new math or Java in light of C or long division is forcing students to learn the fundamental skills while trying to learn other more complicated concepts at the same time.

      --
      Knowledge = Power
      P= W/t
      t=Money
      Money = Work/Knowledge so the less you know the more you make
    99. Re:@_@ by everphilski · · Score: 1

      P.S. In case you're wondering? C++ should NEVER be taught in school. Worst drain bramage you can do to a poor kid. Especially as his first language!

      Have to disagree with you here. C++ was my second language, mere months after I started programming BASIC in grade school. When I discovered how hard it was to do what I wanted to do in BASIC (having real functions in a program), I ditched it and went straight for C++. No regrets, 12 years later I'm still programming in it (I'm not a CS, I'm an engineer, I write tools to support my work). Some of those late nights in grade and high school banging your head against the desk trying to figure out what was wrong (bad pointers :) ) gave me a much better coding approach and methods of just thinking about code I've used for the rest of my life.

    100. Re:@_@ by LizardKing · · Score: 1

      I expect there to still be a descendant of Java in widespread use come 2040. As a language and set of libraries, the Java environment is a fine combination of OO abstractions on top of a C like syntax while avoiding the complexity of C++ and the STL. Smalltalk fans may grumble that Java's not totally object oriented because of the fundamental types like int, double, and so on, but they strike me as bitter that Java got the success that Smalltalk could have had. And Java is undoubtedly inspired by Smalltalk, either directly or via Objective-C and the NeXTSTEP Foundation classes (which Sun were very interested in when Java was being conceived). Is Java perfect? Far from it, however it has improved my productivity and the robustness of the applications I work on more than any other language I've used (including scripting languages such as Perl and Tcl). I've dabbled in Scheme, and read up on Common LISP, but while they are both very "pure" in concept, the former strikes me as too limited to get anything useful done and the latter too unwieldy (and I don't mean the parentheses laden syntax).

    101. Re:@_@ by linuxrocks123 · · Score: 1

      > Its straightforward design allows for the Virtual Machine to automatically adapt to memory, processors, and optimize away sections of code at runtime in ways that a static compiler will never be able to match.

      Well, that may be, but those optimizations don't make up for the overhead of having a virtual machine in the first place. So, Java is still slower than C or C++ for any real-world task.

      --
      vi ~/.emacs # I'm probably going to Hell for this.
    102. Re:@_@ by marafa · · Score: 0

      brain dead! i agree .. i had a support personnel come over to help us on his software and was asked the question "what languages do you understand?" he replied with "english, french, arabic and a little german"

      --
      _ In Egypt Networks: Network Solutions with a Twist
    103. Re:@_@ by AKAImBatman · · Score: 1

      Who suggested C? ;-)

      I actually recommend classic assembly as early as possible. If you use a virtual machine that displays the state of the memory and CPU, it will give students a chance to get a grip on what the computer is really doing. THEN they can move on to C. (And/Or LISP, depending on what you want to teach them.)

      Of course, we don't quite live in a world where Virtual Machines of antique computers are accepted by teachers as a valid teaching method. (Yet.) So barring assembly, I recommend BASIC first. (Oh, I can hear Dijkstra's cries already. Mwhahaha!) Classic BASIC provides a set of I/O routines that allow a student to become comfortable with working out the logical flow of a program without worrying about the details of printing to the screen or reading a line of input. Just don't dwell on BASIC for too long or you may make the student too comfortable for their own good.

    104. Re:@_@ by kryptkpr · · Score: 1

      Java, for better or worse, has allowed us to produce more code in less time and generally with fewer bugs.

      In less time, with fewer bugs BUT poorly (or not at all) architected, unmaintainable, and resource-hogging. I'm not so sure that's an improvement.

      --
      DJ kRYPT's Free MP3s!
    105. Re:@_@ by imgod2u · · Score: 2, Insightful

      "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 really, it's better to start with Java (or some other language with a GC) and just require students not use the API data structures.

      You then get into all sorts of nice things like theory of automation, neural-p systems, algorithm scaling, etc. *NONE* of which requires intimate knowledge of low-level programming.

      If one chooses to go the route of programming, by all means, most CS programs offer that tree of study. But the idea that somehow, those skills are the "core" of CS is very narrow.

    106. Re:@_@ by aj50 · · Score: 1

      My course had an interesting way around the "Magic" problem. The first half of the first semester could be done entirely in BlueJ, an IDE which lets you define your classes and functions in a diagrammatic way, similar to how inheritance diagrams are drawn. Once they'd taught us the basics for conditionals, loops, methods, classes and inheritance they taught us what the imports and stuff that BlueJ hid away did and how to use them. We were also taught how to use stuff from the Java API and given a few pointers to the more useful classes. When it came to doing the coursework, it had to be done outside BlueJ, be compiled with javac and run correctly on the unix servers*. If you wanted to read around and never touch BlueJ from the start then that was fine too. That first semester got people to think about solving problems using the tools available. In the second semester we got taught basic data structures, how arrays work, what a linked list is and how to build GUIs. About half way through the semester, they let us use eclipse instead of emacs or our text editor of choice. We also had a module on C so by the end of that we all knew what pointers were, how you use them and what happens when you get them wrong. Using Java first got people to think like programmers, to get better at solving problems and to learn OO ideas. After we had got to the point where we could actually write something, they filled in all the lower level details that are important to know. *The coursework itself was not particularly well thought through (IMO). It was four questions, an RPN calculator with very strict rules on what should happen on an integer overflow and a few other details, an infix calculator, a compression program and a connect 4 game (with marks for a GUI and AI). Unfortunately, a lot of the people who hadn't done programming before took one look and nearly cried. Had they been better at solving problems, they could have realised that about half the marks should have been achievable by anyone in the class but the questions were complicated enough to confuse a lot of people. The results for the whole module were bi-polar, a big gap between those who 'got' programming and those who didn't. I believe they're changing the course this year to make it cater better for people who haven't programmed before and the start of the course is now in python.

      --
      I wish to remain anomalous
    107. Re:@_@ by Just+Some+Guy · · Score: 1

      I've never seen the "Turk" math she's talking about, but from the presentation, it's clearly a major improvement over the old stupid memorization techniques taught when I was in elementary school.

      I kinda of agree. Given the problem "26x31", I'd decompose it to "26*30+26". Apparently that's a new mathy kind of thing to do and somehow inferior because it doesn't follow the long-form multiplication the presenter likes so much. Having said that, if I had to pick, I'd come down solidly on the side of the presenter. Shortcuts are great once you've mastered the subject matter, but there's no way I'd want my kids to initially learn math by any of the techniques she demonstrated.

      --
      Dewey, what part of this looks like authorities should be involved?
    108. Re:@_@ by bishiraver · · Score: 1

      I agree completely, which is why I loved my high school computer science classes - in direct contrast with my college CS classes. In HS, we were using borland turbo c++ - admittedly, old. What was fantastic about it, though, is besides the basic io headers, we weren't allowed to use any pre-fix libraries. We had to write our own hash table library; our own linked list library; our own linear algebra library; our own string-handling library; our own self-balancing binary search tree library. Because we spent so much time learning how to do these basic things, we were more prepared going into college than many other students. The problem was, in college, we spent time futzing around with libraries in Java instead of learning how to build applications. The best CS course I took in college, actually, was 'math & physics for game programming,' in which we had to build our own physics library. Admittedly, it was only community college, and I dropped out in order to actually accomplish something in my life (I'm now a JS / C# developer in NY, as opposed to a pizza delivery guy in NC).

    109. Re:@_@ by BoomerSooner · · Score: 1

      It's the same everywhere, not just backwater Georgia. Granted my comparisons are Missouri, Oklahoma and Texas.

    110. Re:@_@ by entropiccanuck · · Score: 1

      I don't see the problem with teaching the methods that are simpler first (Turk method multiplication, Java programming) and later going into more of what's going on. It's not like we have one memory module for "multiplication method" or "memory management" that irreversibly closes to all other methods once we learn some technique. Disclaimer - I learned programming first with Pascal in high school and later C++ in college, but now mostly use Python. I learned the traditional long division/multiplication methods in school but use techniques similar to the ones shown in the above (GP) video for most mental math.

    111. Re:@_@ by bishiraver · · Score: 1

      , but 1st year students are rarely taught debugging skills
      That's funny, I was taught debugging skills in my freshman-highschool Pascal class! When you tried to ask a question, the first thing he'd ask you before he'd answer was, "have you tried stepping through with a few watches?"
    112. Re:@_@ by Thuktun · · Score: 1

      I actually recommend classic assembly as early as possible. If you use a virtual machine that displays the state of the memory and CPU, it will give students a chance to get a grip on what the computer is really doing. THEN they can move on to C. (And/Or LISP, depending on what you want to teach them.) I agree with this in principle. Teaching you the basics at that level weeds out those who aren't serious and lets you appreciate the successive layers for what they do for you.

      Being familiar with the available tools--assembly language, BASIC, Pascal, Ada, LISP, C, C++, Java, Perl, Python, PHP, shell scripts, etc.--is important to know what's available and how to select the best tool. Not every carpentry problem can be solved with a hammer and saw.
    113. Re:@_@ by electroniceric · · Score: 3, Insightful

      After all, the situation is not really surprising. I know very few people (if any!) that are *passionate* about accounting. Yet, millions of accountants worldwide reliably make the numbers add up. These unpassionate accountants do good services on average and make our economic system run smoothly; without them, it would collapse. I am grateful someone else is willing to do it, because I could not stand having to do it myself. Why would IT be any different?
      I think you're pretty close the nub of the argument. What Prof. Dewar is upset about is a broad trend away from university as an apprenticeship of those deeply and philosophically (why do you think they call it a PhD?) interested in the subject, with the elitism that entailed, towards university as essentially job preparation. This issue crops up all over academia, and the notion of any sort of quality standards (much less regulation) for post-secondary education is just in its infancy.

      I happen to agree with the good professor that the best thing you can do in college is to learn to think deeply and critically as well as communicate, though to my mind that speaks more strongly to a good liberal arts component of education than to the specific language choice within a CS major. You might not think think learning history or economics or English make you a better programmer, but they do. By learning different modalities of thinking, you become more aware of the strengths and weakness of your own methods. Not to mention that good engineering nearly always involves communication in the form or requirements and design. But I digress...

      I don't know how you tackle this make the courses hard vs. make them accessible issue. The reality is that a demanding course will in fact turn off a lot of students, and that does represent in some way a failure of the university's mission. On the other hand a demanding course (especially math) make a much, much, much better programmer/engineer/computer. Think of all the hollering software pundits do about how a good programmer can be 10 times as productive as a mediocre one - this is true and a lot of the skill of that star programmer comes down to grasp of deep algorithmic and mathematical concepts. So what do you do about the fact that most people are neither prepared nor dispositionally inclined to deal with those demands when they are 18 years old and just entering college, particularly if their family and friends are not that academically inclined and can't help them keep faith and slog through hard and sometimes tedious preparation? What's most fair to the students? It's not all that clear to me.
    114. Re:@_@ by 0xABADC0DA · · Score: 1

      Yet how is a student supposed to know what the JVM is doing if he's never had to scrounge for bytes? If he's never had a practical need for a linked list? If he's never had to implement memory management? If he doesn't have the first clue how to balance a tree? If he can't understand how a garbage collector works? If he doesn't know what a circular reference is? If he can't explain what a pointer is and how a reference is related but different to a pointer? If he doesn't even know what "Turing Complete*" means? Respectfully, I have done all those things. I often write code in low level C (with inline assembly and such). I've even seen the JVM code, but I couldn't tell you the first thing about wtf it is actually doing. The JVM is hard core, and you certainly aren't going to understand it from your 1000-level CS class using C instead of Java.
    115. Re:@_@ by Maxo-Texas · · Score: 1

      Man,

      I had no idea our 8 billion dollar a year java order web entry system that supports 2500 simultaneous users just ain't it.

      Okay- that's being a bit sarcastic.

      Dude,
      I'm at a 30 billion dollar corp and we have many major systems written in java that handle very heavy enterprise loads (look up Documentum for example).

      The code is truly generic and runs on any hardware. And on modern hardware, it runs well.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    116. Re:@_@ by piedmont67 · · Score: 0

      People outside of programming education have no earthly idea what it is like to try to teach info Sys at the college level. All 4 year colleges tend to teach to the engineer level, where most programming jobs are not, and not enough and in many cases not at all at the database programming level.

      There are very few jobs programming an OS for a company or game programming or supercomputer. Indeed, most of the jobs are in the database programming area.

      I teach VB, C++, and JAVA at a junior college. You would not believe the number of CS students who come to me for courses in database programming for these languages which were not taught at the 4 year level. Like making engineers nothing but mathematicians doing technical work, CS courses leave the industry demanded languages up to the graduate to learn on the fly AFTER they graduate. The mentality is that they will teach the theory and leave the piddly grunt work (considered beneath them) to the individual to learn on their own later. Why practical, industry demanded knowledge and skills are disdained I am not sure, except for the fact that higher ed tends to still hold on to the trappings of a college being a finishing school for wealthy people and not a very useful thing to industry.

      I have heard arguments to the effect that "well, the dominant language changes so often that you could never keep up! So what? That is why you update the curriculum every 18-24 months! The value of higher ed is also questionable when most graduates spend more than half their time in courses that have nothing to do with their major anyway. It makes them more rounded, e.g. knowing a bunch of impractical junk about a lot things that no one will hire you for (like feminist studies), but no real expert and practical knowledge about anything. Being that many people are now are self educating, like the inventor of virtual reality who was a high school dropout, colleges may eventually go by the wayside as silly and useless keepers of odd knowlege, a pointless diversion from real life in the future.

    117. Re:@_@ by ratboy666 · · Score: 1

      Um... that would be the same as the last language - scheme. (which probably echoes what everyone else will say).

      --
      Just another "Cubible(sic) Joe" 2 17 3061
    118. Re:@_@ by Etyenne · · Score: 1

      For the record, I completely agree with this. I was just giving a perspective on motivation for being in IT, which was a topic raised by the GP.

      What is most fair for the student appear pretty clear to me: employers should stop demanding a University degree for code-monkey position. A huge portion of IT job could be fulfilled by someone with a technical college degree, and there is nothing wrong about that. As for University, it should remain focused on teaching the fundamentals to those that care/need these things.

      As a disclaimer, although I claimed to be self-taught above, I do have a technical college degree and just finished a University certificate in CS. A certificate is a one-year program which is roughly the first year core class and a couple elective from first and second year. It's very popular for those in the workforce studying part-time around here (Québec, Canada). While I liked the experience and think that most of my class where intellectually stimulating, I doubt it was worth the time and money I sunk in the project. And it did not bring any skills directly applicable to my job (although I am not a programmer). Maybe I should just have spent more time hacking Free software in my free time, after all.

      --
      :wq
    119. Re:@_@ by Misch · · Score: 1

      It is.

      Well, you paid more for it at least.

      So did I.

      Still paying for it...

      --

      --You will rephrase your request for me to go to hell. Goto statements are not acceptable programming constructs
    120. Re:@_@ by ojustgiveitup · · Score: 1

      Perhaps a useful exercise for a Java data structures class would be the requirement to build one's own classpath for a project. For instance, you say "implement a program with the following requirements... This will require implementation of the following api classes and methods..." They learn Java, they learn about the API, they learn how to implement data structures, and if you want to make it real tough, you don't even give them System and they learn how to use JNI/CNI. Any data structures professors out there reading this?

    121. Re:@_@ by Anonymous Coward · · Score: 0

      People with CS degrees create things. People with IT degrees fix printers. I'll stick with my CS degree and Java and continue to yell at the IT folks when my email goes down (again).

    122. Re:@_@ by Anonymous Coward · · Score: 0

      ".NET is friendly to these amateurs." .NET isn't a language and probably isn't "friendly" to amateurs. It's (in general terms) a set of libraries that's available for use by several languages including C#, which is pretty comparable to java.

    123. Re:@_@ by plague3106 · · Score: 1

      Indeed. But it was well worth it, although I think my graduating year (2001) was the one they switched to Java. Hopefully the focus didn't change, just the tools.

      Of course many people (including employers) seem to know RIT and have good thoughts about it, so to me that's worth it.

      And yes, still paying for it also, although its technically rolled up into my mortgage now.

    124. Re:@_@ by Weedlekin · · Score: 1

      "I actually recommend classic assembly as early as possible. If you use a virtual machine that displays the state of the memory and CPU, it will give students a chance to get a grip on what the computer is really doing."

      A simplified virtual computer with a very basic CPU, small blocks of virtual ROM and RAM, and some simple virtual I/O devices would indeed be an excellent teaching mechanism. Students could run their code in slow motion, and see graphical displays of registers, stack(s), stuff getting read from and written to memory and I/O, etc. It wouldn't crash when they did something wrong, but stop on the offending instruction with all register and memory values intact and ready for inspection and discussion.

      "THEN they can move on to C. (And/Or LISP, depending on what you want to teach them.)"

      i think it'd be better for them to implement a simple high-level language for the virtual computer to give them a reasonable idea of how they work before moving on to something more abstract. There were some integer-only but otherwise pretty complete BASIC and FORTH interpreters for some of the old 8-bit microcomputers that "lived" in as little as 2K of ROM, including an (albeit not wonderful) editor, so a simpler language could probably be expressed in a few hundred lines of assembly code.

      "Of course, we don't quite live in a world where Virtual Machines of antique computers are accepted by teachers as a valid teaching method. (Yet.)"

      That's because there aren't many of them nowadays who would be comfortable enough with even heavily simplified virtual hardware of this sort to use it as an effective teaching aid.

      "Classic BASIC provides a set of I/O routines that allow a student to become comfortable with working out the logical flow of a program without worrying about the details of printing to the screen or reading a line of input. Just don't dwell on BASIC for too long or you may make the student too comfortable for their own good."

      There are three other advantages to "old style" BASIC from a teaching POV: (1) it has line numbers, so the execution order of instructions is easy to see from the source; (2) everything's built in, so students don't have to worry about specifying external code modules or headers; and (3) it's an interpreter, so they can run their code without having to save and compile it. The major disadvantage of course is implicit variable declarations, which are quite honestly a complete pain for both teaching and writing working code, although BASIC is of course far from being alone in having them.

      "Just don't dwell on BASIC for too long or you may make the student too comfortable for their own good."

      The fact that old-style BASIC only has global variables and cannot therefore be used to illustrate recursive algorithms, and has no data structures beyond arrays places an effective limit on its usefulness as a teaching tool. An excellent time to introduce a different language is therefore at the point where one is also introducing topics that are outside BASIC's capabilities. However, I'd tend to favour Python over LISP or C as the next step for the following reasons: (1) it's an empirical language like assembler and BASIC that makes good use of their existing knowledge, but has various functional bits (e.g. lambda functions) that can act as a spring-board to working with true functional languages later in the course; (2) the environment is still interpreted, so students spend their time learning to write code instead of messing around with files and compiler command lines; (3) it can be used to illustrate structured programming, modularity, and when the course calls for it, OO techniques; (4) despite the fact that it's controversial, enforced indenting makes students think in terms of indenting their code, while Python's system of using comments as documentation also helps instil good commenting practices; and finally, there are a variety of ways of interfacing with C that can also be used to introduce that language.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    125. Re:@_@ by DragonWriter · · Score: 1

      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics.


      This might be a problem if you don't learn anything but Java (but even then, probably not, see below)—though neither the first article, this article, or the comment threads attached to either pointed to any university that let you do that. Its not really a problem with learning Java first: a first course often touches on data structures and algorithms, but spends a substantial portion of its time teaching basic problem analysis and structured design of solutions, and even in the "golden age" when they were taught with Pascal or C (or now, when they are, at first rate institutions, apparently often taught with Scheme) these courses often made use of libraries, either industry standard, designed-for-general-pedagogy, or designed for the course specifically (often, a combination) to allow the students to focus on the parts of the problems they were intended to focus on an learn the process basics, that are more fundamental than data structures and algorithms.

      But even for a curriculum that always used Java or other languages for which such libraries are not merely available but included in the standard distribution, this shouldn't be a problem even beyond the first course. Having libraries available, even standard, isn't a pedagogical problem: so long as the coursework involves and requires learning about and implementing data structures without relying on the implementations in the libraries. Heck, in first or second courses using Scheme or other Lisps, implementing more robust Lisp variants relying only on the handful of primitive operators at the core of Lisp from the host implementation is fairly common. Having more efficient implementations of the other features available in the host implementation doesn't hurt pedagogy because use of them is specifically forbidden in the assignment.

      Now, certainly, having a limited teaching language may have utility, especially in first courses, for other reasons (How to Design Programs makes good use of successively-more-advanced pedagogical variants of Scheme, for instance), its not because having a robust library hurts, but because language features that are useful in other contexts (either because of support for legacy code, or notational adaptations to support certain flexibilities that aren't needed in early pedagogy, or otherwise) often make either notation or errors less clear than they could otherwise be for pedagogical purposes. But viewing the availability (or inclusion in standard distribution) of rich libraries as a bad thing seems unjustified in any case.
    126. Re:@_@ by snookerdoodle · · Score: 1

      I think part of the problem is that he keeps attempting to equate Computer Science with Software Engineering.

      That's like expecting a guy with BS in Chemistry to be successful working as a Chemical Engineer. Yeah, some guys figure it out and make really good Chemical Engineers. Most don't.

      If they're serious about making Engineers, they need to align their curriculae with the other engineering disciplines. They need to require the fundamental CS courses *PLUS* the broad exposure to the other engineering disciplines (by requiring them to take basic civil engineering, mechanical engineering, circuits and maybe *more* digital electrical engineering) *PLUS* real world software engineering, including project management.

      Until they do, they're NOT engineers of any kind.

      Mark

    127. Re:@_@ by mhall119 · · Score: 1

      Java can be optimized at runtime, so the JVM can watch the running code, see what gets executed most often, and optimize the _running_ code for that situation. C/C++ can only optimize at compile time according to what it _thinks_ will be executed most often. Sometimes one it better than the other, but profiled runtime optimization on a long-running server process is one of the situations where Java can perform better than statically compiled code.

      --
      http://www.mhall119.com
    128. Re:@_@ by DragonWriter · · Score: 1

      Whereas the standard C "hello world" example will of course be perfectly obvious to any rank programming beginner due to the fact that people are born knowing all about functions, header files, and libraries, whereas objects and classes are something they have to be taught.


      Actually, I find the whole "Hello, World!" magic discussion (whether about Java or otherwise) to say more about bad pedagogy and less about the language used: those first-courses or first-course-oriented books I've seen that start with "Hello, World!" examples in any language dissect the pieces of the example, rather than leaving everything as "magic".

      And those that use languages with an immediate environment that shows evaluation results tend not to cover I/O much at all until they've covered a lot of other material.
    129. Re:@_@ by mhall119 · · Score: 1
      Just to illustrate in code:

      static int x;
      public void myfunc(int myLimit) { for (i = 0; i < myLimit; ++i) ++x; } What is the best way to optimize that code? Well that depends on the size of myLimit, which the C/C++ won't know. But in Java, once the process is running, and the JVM sees that myfunc is being called several times, always with a small value for myLimit, it can optimize the execution for that. If the same binary is running in another process where myLimit is large, it can optimize for that.
      --
      http://www.mhall119.com
    130. Re:@_@ by mhall119 · · Score: 1

      That's how you know you did it right, when half the programmers in the world say it's too easy, and the other half say it's too hard.

      Either that, or it means you did it horribly horribly wrong.

      --
      http://www.mhall119.com
    131. Re:@_@ by Anonymous Coward · · Score: 0

      But "not incorrect" is a double-negative. And its something you shouldn't do.

    132. Re:@_@ by mhall119 · · Score: 1

      generally, the way I see it done is pretty much a "human debugger" -- that is, someone at least running through each line, explaining what it does, at least once, to get you to think that way. I think that's kind of the point, to make you internalize the logic process. Once you learn to think the same way your computer does you become a better programmer, because the things that won't make sense to your computer won't make sense to you. You start thinking about efficient code not by how many lines it takes to write it, but my how much memory is will consume, how many objects it is creating, how many context switches it will have to perform, etc.
      --
      http://www.mhall119.com
    133. Re:@_@ by bckrispi · · Score: 1

      ^ You can say the same thing about any language. Poor design is poor design.

      --
      Xenon, where's my money? -Borno
    134. Re:@_@ by Weedlekin · · Score: 1

      "first-courses or first-course-oriented books I've seen that start with "Hello, World!" examples in any language dissect the pieces of the example, rather than leaving everything as "magic"."

      The point though is that programming as a concept is completely alien to somebody who hasn't done it before, so the fact that some bits about a very simple Java program can't be explained without knowledge that students don't yet have is not something peculiar to Java, but is inherent in the nature of programming itself.

      "And those that use languages with an immediate environment that shows evaluation results tend not to cover I/O much at all until they've covered a lot of other material."

      Then they should, because the first thing any student needs to learn is what a program is, i.e. something that processes input, and outputs the result.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    135. Re:@_@ by nonsequitor · · Score: 1

      Spoken like someone without much math experience. Until you get *past* diff-Eq, virtually all useful continuous math is wrote memorization (except perhaps proofs...that's mostly covered in geometry). Further, it's pretty much all memorization of algorithms. If you're not teaching algorithms, you're not teaching kids to understand math.
      You got modded inciteful for this pretentious crap? When I was in High School, graduated '99, understanding of trig identities combined with AP Calculus made physics easy. Every time the teacher wrote an arbitrary algebraic equation for some obscure purpose on the board, I was figuring out how to derive it using calculus. Watch what you say about public schools, some of the smartest people I know got damn good educations from them.

      Continuous math? That's practically graduate level engineering, definitely advanced for undergrad. I don't think you'll get many undergraduate level physics classes going over things like Mass Spring Damper systems. Are you claiming that outside the US the average college graduate has learned about Discrete and Continuous Systems after finishing the equivalent of a CS Degree?

      Creativity does need to be encouraged at an early age - which is what literature, music, and art do. Losing those would definitely be worse than losing science or math, IMHO.
      It takes 2 decades of study to catch up to where the research is in Math and Science, so why bother? I assure you, not all math is memorization, and if you that was your only means of learning, without understanding, you personally had bad teachers. Don't generalize your bad education across the rest of the US, there are tons of good schools out there. When you understand math, you don't memorize it, you learn it.

      Applied Math, like algebra based physics is a different story. In fact, thats fairly equivalent to learning Java before micro-code. In my intro CS Class, the TA would write up some classes for us to use in our program, we did not have to understand the internal workings of those classes, just their API. In later classes we learned enough to make them ourselves. Understanding control structures and language syntax is a good starting point, it also familiarizes students with the concept of separation of duties, and compilers. At work, I need to trust that my coworker will handle the details on their side of the interface and I handle mine. We don't have time to do both. Teaching kids about black boxes is necessary for working on teams. Some institutions may be taking this to extremes with their intro classes, but an intro class is supposed to be a taste of what's to come and be accessible to students from as many disciplines as possible. This is a good thing, since it results in more people having some insight, however small, into what is involved in writing software. Just as high school physics leaves most kids with a basic understanding of Newtons 3 Laws, gravity, etc.
    136. Re:@_@ by tknd · · Score: 1

      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.

      No, never. There is more to an undergraduate degree than just a specialization of computer science. A high school diploma on the other hand is worthless. I've been on both ends. I was hired in my 3rd year in high school as an intern with some programming. I worked summers and produced code that was later used. After high school I got my bachelors in 4 years and then was hired back into the same company as a full time software engineer.

      If I had instead worked those 4 years and skipped a formal education, I would probably worse off. Two major consequences may have resulted from that path: incredibly bad decisions made for the company due to lack of insight and research in the field of CS (high school grads are incredibly stupid, including the "smart" ones) and a much lower salary.

      With the 4 year degree I was able to leverage professors in CS who had years of experience and could soundly prove to me why they were right. I didn't blindly accept that Quicksort was the fastest sorting algorithm, instead I was dragged along whether I liked it or not for the proof. And at the end of all that not only was I proven wrong (Quicksort is only optimal for certain conditions) but I was also forced to recognize weaknesses in the algorithm and other characteristics of it.

      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 challenges

      I don't know what college you speak of but from where I came from every student was exposed to the following languages: Java, C, C++, (Pure) Lisp / (Pure) Scheme, Assembly (x86 or MIPS), and probably some Prolog. Of all the courses I took, none of them had the programming language in the title. It might have been in the description but it was never a course based on the language. Instead it was a course in the study of programming languages (functional, imperative, object oriented, logic based) and how they are implemented, or maybe the study of the implementation and run times of data structures and algorithms. The only "intro to programming" course that you were required to take was the first one, where by the end of 3 months you were expected to fully understand object oriented programming including fancy things like inheritance and polymorphism. In short, the students were given very little time to get up to speed on the language whether they had used it before or not. And you can bet a boat load of students failed that first class.

      And that was one class out of a 3 or 4 class quarter and there are 3 academic year quarters per a year (summer quarter is optional). So if a student took 12 classes a year for four years with at least half of those being general education courses, that is 1 class out of 24 or 4.17% of the class time for CS. The other 23 courses were not on examining Java or C++, but rather understanding processor design (single cycle, multi cycle, pipelined, decoders, ALUs, register files), digital logic (build me a half adder, build me a multiplexer, do it again with only the following types of gates, etc), implementation of object oriented languages using a virtual method table (oh, it's not magic after all), understanding artificial intelligence algorithms and topics (bayesian, A*, greediness, constraints problems), analyzing algorithms (sorting, searching, running times, worst case, proofs on optimality, matrix multiplication, etc), compilers and interpreters (BNF, grammars, scanner, lexer, various optimizations, generating machine code, etc -- goodbye even more magic), operating systems (process scheduling, synchronization, paging, bootloaders, shared libraries, addressing, memory schemes including contiguous memory schemes and why they're stupid no matter what you do) and even some software engineeri

    137. Re:@_@ by billius · · Score: 1

      Why did you laugh when I said GOTO?

      Maybe this is why? As a CS student, I can tell you that people fresh out of college these days will laugh at goto since every CS teacher they've ever had has slapped them on the wrist for even *mentioning* the use of a goto statement, not to mention the damage that would be done to their grade if they actually used one in a program.

    138. Re:@_@ by fireboy1919 · · Score: 1

      You got modded inciteful for this pretentious crap? When I was in High School, graduated '99, understanding of trig identities combined with AP Calculus made physics easy. Every time the teacher wrote an arbitrary algebraic equation for some obscure purpose on the board, I was figuring out how to derive it using calculus. Watch what you say about public schools, some of the smartest people I know got damn good educations from them.

      understanding of trig identities ...which you memorized, and have a pattern for determining how to apply.

      combined with AP Calculus
      Which is a culmination of about 30 different algebraic tricks to make it easy (I know. I took that test, went to math competitions, etc., and missed very, very few of the answers). Knowing when to do what is just applying a pattern recognition algorithm. It's simple stuff.

      You'd probably be surprised how much of what you do is done by applying general algorithms over and over.

      Continuous math? That's practically graduate level engineering, definitely advanced for undergrad.

      Continuous math => All of arithmetic, algebra, trig, geometry, calculus taught in public schools in America. Discrete math is almost not taught at all outside of CS, and I wanted to make it clear that we weren't talking about that. The phrase "discrete system" versus the phrase "continuous system" does not mean the same thing as "discrete math" versus "continuous math." Roughly speaking, a good test of discrete math is that it is the kind that can be performed without an algebra.

      --
      Mod me down and I will become more powerful than you can possibly imagine!
    139. Re:@_@ by DragonWriter · · Score: 1

      The point though is that programming as a concept is completely alien to somebody who hasn't done it before, so the fact that some bits about a very simple Java program can't be explained without knowledge that students don't yet have is not something peculiar to Java, but is inherent in the nature of programming itself.


      I don't think it is. I think that the problems are that:
      1) Programs that perform I/O are inherently not "simple" programs—now, I/O is a requirement for useful programs, and might be pedagogically useful at an early stage to give people a feeling of making the computer "do something" productive, but its not simple, and it isn't central to understanding computing or program design, and
      2) The structure of Java (this is true of C and Pascal as well, though to a slightly lesser extent) programs inherently is not "simple", it involves lots of overhead.

      Then they should, because the first thing any student needs to learn is what a program is, i.e. something that processes input, and outputs the result.


      I prefer HtDP's description: "[A program] is a rule that tells us and the computer how to produce data from some other data." (SICP has a similar perspective, though expressed less directly.)

      Input and output (outside of the context in which inputs refer to function arguments and the like, and outputs refer to function return values) are—while important to practical programming, pretty much a distraction from the central focus of computer science.
    140. Re:@_@ by shutdown+-p+now · · Score: 1

      The problem is that you don't always get a segfault. With a dangling pointer, you can get all kinds of not-so-nice things, such as an overwritten vtable (so when you call a function via the pointer, the call is successful, but to a wrong function), silent modification of some unrelated data that is only noticed much later, etc. And the ultimate classic, a stack buffer overflow... I once spent more than a day debugging an error caused by a dangling pointer which resulted in an eventual Win32 heap corruption - "eventual" here meaning "in a few hours". Since then, I firmly hold to an idea that by default, all dangerous operations should have safety (null, bound etc) checks performed at runtime, and they should only be disabled for very specific parts of code where performance is absolutely critical. Unfortunately, it's pretty hard to enforce in C++, especially if you use its standard library. Whereas in Java and C#, it is the default (and in C#, I can disable the checks if I really want to, thanks to C-style pointer types).

    141. Re:@_@ by hoppo · · Score: 1


      There's no reason you can't implement your own hashtable or linked list in Java or any other high-level language. There's no reason you can't implement your own sort algorithm, either. Blame the curriculum itself, not the language used. That's where I think you the author fails to make the proper distinction.

    142. Re:@_@ by jayp00001 · · Score: 1

      I agree and what's scarier is that when I asked a couple of friends in a public middle school in NH about this they said that's what they learned but the teacher told them it didn't matter because in 7th grade they got calculators.

    143. Re:@_@ by bogjobber · · Score: 1
      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist.

      And like I said last time this story came up, the language has absolutely nothing to do with that. At our university, beginning CS classes were taught using Java. We learned how to implement data structures (although not Hashtables that was in a later C-based class) and algorithms in Java. We were explicitly forbidden to use outside libraries.

      The reason why Java is excellent for intro classes is because you can teach somebody basic CS concepts and programming while (mostly) not having to worry about memory management, crazy compiler issues, etc. You can save that until later. If you never teach that, it's the problem of the university program, not the language.

    144. Re:@_@ by StarvingSE · · Score: 1

      BUT poorly (or not at all) architected, unmaintainable, and resource-hogging. I'm not so sure that's an improvement.

      It doesn't matter what language you write in, you can always have a poorly architected and unmaintainable codebase if you really want to. If you have a bunch of know-nothing systems architects and programmers working for you, you will get crap whether it's in C++, C#, Java, or anything else you want to write in.

      As for the resource hogging, the latest versions of java have made many improvements in this area and its pretty much a non-issue for most applications.

      --
      I got nothin'
    145. Re:@_@ by StarvingSE · · Score: 1

      There's a difference between Java the Framework and Java the language. You can still program your own data structures using the Java language and not taking advantage of what the framework offers. We weren't allowed to use anything that was built into the framework besides simple things, like the Integer class for example. I highly doubt any university in the world would issue an assignment to program a hash table, and accept a program that simply creates a HashTable object.

      I think learning data structures with Java is actually a good thing. It allows the first year students to think about how a linked list works without confusing them with things like memory management that are really irrelavent to that topic.

      There are some people who enter a CS program who have never programmed before in their lives, and I can see learning the basics about data structures and what not using it to be a very good thing.

      --
      I got nothin'
    146. Re:@_@ by Anonymous Coward · · Score: 0

      I'm pretty fed up with all the Java bashing. It feels like the Luddite movement.
      No, actually it's exactly the opposite. The Luddites wanted to halt progress, turn back the clock, and protect the status quo where many unskilled laborers were required to do simple jobs. The Java bashers, on the other hand, generally bash Java because they believe that Java itself is the oldfashioned status quo, and that other languages would enable fewer programmers to be even more productive.

      Now, if only you could persuade two of them to agree on exactly which language should replace Java... ;)

      Java, for better or worse, has allowed us to produce more code in less time and generally with fewer bugs.
      More code than what? (And given that Java is such a public static final void verbose language, "more code" doesn't necessarily mean "more productive".)

      Less time than what? (Are you comparing like with like? Modern Java IDEs are better than ten-year-old IDEs for other languages, but other languages have also progressed in the meantime. And for all I know your company has also trebled in size since you adopted Java.)

      With fewer bugs than what? (What technology were you previously using? If it was C, then no surprise if Java produces less buggy code, because practically anything would.)

      Anecdotes are useless as evidence, but you haven't even given us an anecdote, just a meaningless assertion that Java is the best choice. (What other technologies have you actually tried? Or did you just stick with COBOL because everyone knows COBOL and everyone uses COBOL? Oh, sorry, slip of the tongue, I meant to say "Java".)
    147. Re:@_@ by Haeleth · · Score: 1

      Where Java falls flat is in end-user software, where responsiveness per GHz is the primary metric. That and embedded systems where responsiveness per MHz is the primary metric. :-D Oh, and responsiveness per watt....
      And yet, for some reason, if you put all the three together - demanding consumers, low-spec hardware, and strict power consumption concerns - you get the cellphone, where Java is surprisingly popular! Funny old world, isn't it?
    148. Re:@_@ by Weedlekin · · Score: 1

      "Programs that perform I/O are inherently not "simple" programs--now, I/O is a requirement for useful programs, and might be pedagogically useful at an early stage to give people a feeling of making the computer "do something" productive, but its not simple, and it isn't central to understanding computing or program design"

      I think you're misunderstanding what I mean by I/O. My use of the term is a generic one which does not imply any form of I/O devices, but refers instead to the fact that all meaningful processes (i.e. ones that do more than consume CPU time with empty loops) operate on data which can be described as an input to the process itself, and a result which is the process's output. Both input and output could therefore quite easily be (for example) a single variable that acts as both a data source (input) and data sink (output) for a process. This is such a fundamental concept that any course which doesn't teach students to think of data and processes in this way from the outset is failing to do it's job.

      "The structure of Java (this is true of C and Pascal as well, though to a slightly lesser extent) programs inherently is not "simple", it involves lots of overhead."

      Agreed. I've said elsewhere in this topic that I favour interpreted languages as vehicles for teaching very basic concepts precisely because they have little or no overhead, and I include things such as having to handle files and compilation phases in my definition of overhead that beginners shouldn't be distracted with.

      "I prefer HtDP's description: "[A program] is a rule that tells us and the computer how to produce data from some other data.""

      I fail to see where this is semantically different from my definition in any way that doesn't make it less generally applicable (e.g. "processes" can clearly include an arbitrary number of rules, whereas "a rule" implies that programs can only have one of them).

      --
      I'm not going to change your sheets again, Mr. Hastings.
    149. Re:@_@ by jonaskoelker · · Score: 1

      If you have a good tool, but need an auxiliary tool to use it, the tool is actually not that good.

    150. Re:@_@ by OwnedByTwoCats · · Score: 1

      In less time, with fewer bugs BUT poorly (or not at all) architected, unmaintainable, and resource-hogging. I'm not so sure that's an improvement.
      The implementation language has absolutely nothing to do with architecture, maintainability, or resource use.

      On the other hand, Java makes it easy to use well-designed and well-implemented libraries. It is much harder to code up a linked-list solution when you can use an off-the-shelf Stack or Hashmap.
    151. Re:@_@ by Haeleth · · Score: 1

      Java can be optimized at runtime, so the JVM can watch the running code, see what gets executed most often, and optimize the _running_ code for that situation. C/C++ can only optimize at compile time according to what it _thinks_ will be executed most often. Sometimes one it better than the other, but profiled runtime optimization on a long-running server process is one of the situations where Java can perform better than statically compiled code.
      Indeed. Though it's surprisingly hard to find rigorous studies comparing the two, so it's hard to say how far the theoretical benefits of runtime optimisation affect performance in practice. (Bear in mind that it has to catch up with the static code before it can overtake!)

      Also, things are complicated further by the ability to apply restricted versions of the same principle to statically compiled code. For example, you can profile a C/C++ program running with real data and then recompile using the generated profile to guide optimisation. I don't think I've seen any comparisons of that to runtime optimisations at all.

      So it's hard to say whether Java really has any performance advantage or disadvantage overall. Better IMO to focus on the less disputable benefits, like Java's immunity to segfaults and buffer overflows, and that nice compile-once-run-anywhere setup.
    152. Re:@_@ by Haeleth · · Score: 1

      But "not incorrect" is a double-negative.
      And? There's nothing wrong with double negatives. (Sometimes they're used in bad writing, but that's hardly their fault.)

      And its something you shouldn't do.
      Like omitting apostrophes, you mean?
    153. Re:@_@ by Wolvey · · Score: 1

      .NET is friendly to these amateurs. Java is anything but friendly to someone who can't figure out how to setup their classpath.

      You're saying Java is better than .NET because it is more difficult to configure?

    154. Re:@_@ by mhall119 · · Score: 1

      For example, you can profile a C/C++ program running with real data and then recompile using the generated profile to guide optimisation. But again you would be limited to optimizing for one situation and not another. Going to my code example in an above post, if your profile tells you to optimize for many calls to myfunc() with a small value for myLimit, it won't do you much good if the next day you're running a few calls to myfunc() with a large value for myLimit.
      --
      http://www.mhall119.com
    155. Re:@_@ by Daveeto · · Score: 1

      Fossils like Dewar are an aging breed who cannot grasp the future of computer programming. Many years ago, students of mathematics were prohibited from using calculators when performing their work. The teachers professed that without the ability to compute algebra solely with pencil and paper, the students were learning nothing - cheating, even. Why did the teachers have this opinion? Because that's how they were taught, and they blindly assumed that was the way all students of mathematics should be taught. They were wrong. The same concept applies here - CS teachers believe students should learn about call stacks and other low level CS jargon because that's what they were required to learn. Granted, there are certain concepts inherent to the trade, and these should be learned. Much like in mathematics the need to learn multiplication tables, or how to perform long division. The key here is that the programming landscape is changing. Programming languages will continue to be abstracted further and further, until we reach a point where the spoken/written word will be the program. In the future we will be able to tell a computer "this is what I'd like the software to do" and the computer itself will write the code for you. This trend is already on its way. In that paradigm, a student of CS will not need to know the low level details because it will no longer be a requirement of the position. Much like the calculator replaced the abacus. Times change, and educational methods need to evolve and adapt. Anyone who believes a single method of instruction should stand for the ages is a fool and is doing our students a great dis-service.

    156. Re:@_@ by DragonWriter · · Score: 1

      I think you're misunderstanding what I mean by I/O.


      Since you were responding to what I said about how I/O was presented in different circumstances, I think the problem is that you were misunderstanding what I mean by I/O.

      My use of the term is a generic one which does not imply any form of I/O devices, but refers instead to the fact that all meaningful processes (i.e. ones that do more than consume CPU time with empty loops) operate on data which can be described as an input to the process itself, and a result which is the process's output.


      Which wasn't what I was talking about first courses delaying, at all, and I can't see how you could misread that, since the specific example was outputting "Hello, World" via System.out.println().

      This is such a fundamental concept that any course which doesn't teach students to think of data and processes in this way from the outset is failing to do it's job.


      Of course it is.

      Agreed. I've said elsewhere in this topic that I favour interpreted languages as vehicles for teaching very basic concepts precisely because they have little or no overhead


      Whether a language is "interpreted" has little to do with it, in fact, "interpreted" isn't a feature of languages, but of implementations. Lisps (often compiled) has as little overhead as Ruby (interpreted at least prior to 1.9; whether bytecode run on a VM is "interpreted" or "compiled"—or both—is a side topic, though it relates to which side of that fence Java should be considered on, as well.)

      I fail to see where this is semantically different from my definition in any way that doesn't make it less generally applicable (e.g. "processes" can clearly include an arbitrary number of rules, whereas "a rule" implies that programs can only have one of them).


      Using the broad use of I/O that you have no clarified that you were using (which makes your original criticism misplaced with regard to the post it responded to), there is little difference. (Its not less generally applicable than yours, since a rule need not be simple; a compound rule composed of other rules can still be described as "a rule".)

    157. Re:@_@ by nonsequitor · · Score: 1

      If you think understanding how the unit circle is derived, and memorizing a few points on an eighth of it so you can approximate results quickly in your head, then yes I memorized a couple tricks. However the ability to apply a small amount of memorized material in a generic manner for solving a multitude of problems is very efficient. I think we're talking about completely different things though, I'm talking about the understanding that comes with learning, and being able to use that knowledge outside the context in which it was taught. That transcends the idea of "monkey see, monkey do." All learning involves memorization. Spelling vs. Language is a perfect example of this. However, I think Math is a very important subject for teaching critical thinking. The ability to take ideas away from the context in which they were learned and do something else with them is creative. Saying that Math class does not teach creativity is not giving the subject enough credit.

      I don't want to get in an argument over whether I actually learned calculus or just memorized a few "algebraic tricks" to make it easy. However, when I tutor hot girls in math in my free time after work, I explain the relationship between acceleration, velocity, and displacement, so they understand "What" the numbers describe and how they fit. I teach ways of looking at problems and how to think about the numbers you are given, not the derivative of x^3 is 3x^2. I was just teaching my waitress the other day to use sine and cosine to break vectors into horizontal and vertical components. That may be a trick I "memorized," but it has served me well for years and years, because I know how the unit circle works and push comes to shove, I could derive a unit circle by hand using the pythagorean theorem. For convenience though, I memorized a couple points on it when I was using it frequently.

      Its analogous to saying that since a writer is not inventing new words, only using ones memorized, it is merely "monkey see, monkey do."

      If that's what you consider memorizing instead of learning then please enlighten me with your definition of learning.

      For some reason I thought you were talking about continuous systems, which do require differential equations. I have taken a discrete math course and work with both continuous and discrete systems daily using MATLAB/Simulink. I've been out of college for a bit so I screw up the jargon occasionally. For the record I still think you're pretentious for thinking that people can't intuitively understand Continuous Math without having advanced beyond DiffEQ.

    158. Re:@_@ by dgatwood · · Score: 1

      Java is only "popular" because in most phones, there's no alternative to writing apps in Java. That's like saying petroleum products are popular among new car buyers.... :-)

      And, of course, the reason it is popular among cell manufacturers is that it makes it easier for them to limit what access applications have to the phone hardware. From the perspective of the phone company, it's a good thing. From the perspective of anyone else, it isn't....

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    159. Re:@_@ by cjHopman · · Score: 1

      If you have a good tool, but need an auxiliary tool to use it, the tool is actually not that good. You're right, a hammerhead is useless... I mean you need a handle to use it.
    160. Re:@_@ by Iron+Condor · · Score: 1

      The reality is that a demanding course will in fact turn off a lot of students, and that does represent in some way a failure of the university's mission.

      Only if you subscribe to the idea that "a university's mission is making as much money as possible" or some variation thereof. Turning away 99% of the population fits a lot of university department's missions when it comes to grad-school admissions, for example.

      To use the good professor's example: when I set foot into an airplane, I'd like to think that its designers (software- as much as hardware designers) came from places that turned off and turned away a lot of people and focussed on making sure the right people were coming through instead of focusing on making as many people come through as possible.

      So what do you do about the fact that most people are neither prepared nor dispositionally inclined to deal with those demands when they are 18 years old and just entering college, particularly if their family and friends are not that academically inclined and can't help them keep faith and slog through hard and sometimes tedious preparation?

      You send those people to a trade school where they can learn code-monkeying the way other people learn plumbing: both of them entirely valuable trades, both of them not without their challenges, but neither of them worthy of the designator "(any kind of) Science" and neither really requiring of the intellectual toolkit universities are supposed to prepare folks with.

      --
      We're all born with nothing.
      If you die in debt, you're ahead.
    161. Re:@_@ by jayp00001 · · Score: 1

      I don't know what college you speak of but from where I came from every student was exposed to the following languages: Java, C, C++, (Pure) Lisp / (Pure) Scheme, Assembly (x86 or MIPS), and probably some Prolog ...Instead it was a course in the study of programming languages (functional, imperative, object oriented, logic based) and how they are implemented,


      So if I undertand you correctly your argument correctly it's better to be competent in no particular language as long as you know the general theory. That sounds good but won't get you hired at many places I know of.

      In short it was incredibly hard to get out of college in my degree without knowing something about CS.

      It's also just as hard that someone interested in programming would not know something about CS from experience.

      Under your plan I would perhaps have made some extra cash for a couple of years and when the company hits hard times, you'd happily kick me out because I would only have a high school degree. No thanks PHB. In fact go to hell.

      Actually under my plan a guy (or girl) that's been programming for 20 years or so would be teaching you the trade. If I hire a college grad he's better be productive out of the gate since he's wanting more money. Yes during hard times you'd be gone- but that would be true whether or not you had a college degree (well except for the fact that if I was paying you more you'd be gone faster). You seem to assume that somehow I think you should be unable to get a college degree. In fact my company will actually pay for college courses. The difference is I pay less to find out if you're worth keeping or not.

      I went to a public university so there were few penalties from stopping a professor from failing the entire class if he felt like it. In fact, the penalties were more of a "slap on the hand" kind of deal since it is highly unlikely that every student in the class is that dumb.

      You'd be amazed to find out what kind of pressure is put on professors, take a look at: http://www.decliningbydegrees.org/
    162. Re:@_@ by kryptkpr · · Score: 1

      The implementation language has absolutely nothing to do with architecture, maintainability, or resource use.

      I will succeed architecture (Java certainly gives you the tools to do it right), and maybe even maintainability (good code is good code, and bad code is bad code) but I will not accept that resource use is implementation language independent except in the most trivial of cases.

      --
      DJ kRYPT's Free MP3s!
    163. Re:@_@ by Darinbob · · Score: 1

      As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java.
      And far more than just that. I probably fit into the category of "math isn't fun" nowdays (loved it in high school, had it ruined for me in college). And I don't use it all that much today. But without all that rigour under my belt I would not be as good as I am. It definately cleans out those cobwebs and makes you think in a matter appropriate to learning programming and engineering. (you can slowly forget it all after graduation)

      Students also need to learn about computability (P/NP, lambda calculus, finite state machines, regular languages, problem transformation). Theory is important, even if the student never actually has to prove the computability of something in their career. Students need to learn numerical analysis, floating point numbers (why 3.7 isn't represented exactly), infinite series, etc. They should have exposure to an abstract functional language (Haskell, Scheme) as well as a low level nuts and bolts language (C, Assembler, stack handling, addressing modes). They should understand parsing, lexing, and compilers. They should have exposure to computer architecture (boolean algebra, levels of memory, concurrency).

      It doesn't matter if the students whine and complain that they'll never have to do this stuff in "real life". It "builds character" which is important enough on it's own. And I've definately had to deal with most of this stuff in my professional career, and clean up after coworkers who haven't quite understood those concepts. If the student says "dude, I just want a job to pay the bills", then they should quit the university and go to a trade school.
    164. Re:@_@ by Darinbob · · Score: 1

      As long as companies are using that approach to hiring they will continue to drive universities into the wrong direction.
      Many companies do this, but not all. Somewhere along the line someone has to innovate. You can't snap together Lego pieces unless someone makes those pieces. I work on large embedded systems. A company absolutely can not build physical devices and succeed when they only hire generic programmers who have nice buzz words on their resumes. The leading edge of technology that is making all these wannabes say "oooh" is created by people who understand the fundamentals. The mobile phone was not created by these generic programmers, nor were the iPod, Blackberry, TiVo, DSL modems, medical devices, Mars rovers, etc. Ok, e-voting machines are probably an exception...
    165. Re:@_@ by Darinbob · · Score: 1

      An excellent point, which does indeed refute the authors' argument.
      Did you read the article? The professor is not ragging on Java itself. He's complaining about the courses being taught they way they are. If these courses actally taught the student to create the same old introductory Pascal programs but using procedural Java instead (with only libraries for text or vector graphic output), as suggested here, then I'd suspect the professor would be happy.
    166. Re:@_@ by Darinbob · · Score: 1

      Scheme is very good here. I like Pascal myself. But a lot of companies really pound on universities over this and claim these things aren't used in the real world. But these are for introductory programming courses!

      There is no need for students to have to use the latest popular programming language in their very first course to learn fundamentals! If the student can't make the adjustment from this first language to a second one (or third, etc), then they're probably not cut out to be a professional programmer.

    167. Re:@_@ by jayp00001 · · Score: 1

      I don't see the problem with teaching the methods that are simpler first (Turk method multiplication, Java programming) and later going into more of what's going on.


      I think you missed the bit where she explained that the next step is learning to use the calulator.
    168. Re:@_@ by jayp00001 · · Score: 1

      you mean adding 88+44 doesn't require you to understand place values? Turning every simple multiplication problem into a string of multiplication problems and addition problems makes math tedious. What irks me more howver is that instead of simply teaching the kids the normal way to multiply ( in order to speed things up), the next step is to teach calculator usage.

    169. Re:@_@ by jayp00001 · · Score: 1

      The video is amazing... Although the woman comes to completely the wrong conclusion - all these methods are valuable. Children (no scratch that... people) who see the equivalence of all these methods are much more likely to be able to apply them in appropriate situations and really understand what they are doing.


      You're forgetting that the students aren't taught these algorithms and then told to pick the best one to solve problem x, they're told this is the only way to multiply and divide. Note thhat if they do choose the quickest way to solve the problem- it's wrong. Simply ansering the problem 6*6 with 36 is wrong. it's 6*1+5*6. (note that I still haven't told you the answer but that's the acceptable answer.

      I'd never seen the lattice method taught in school-maths but was extremely suprised to see her assert that people can't explain why it works? It's an array multiplier - 'My-First-Multiplication-Circuit' from digital hardware design 101


      when I first saw this video ( a while back now) I asked the staff at a local school to explain it to me ( I have a friend that is a history teacher). Nobody could explain it to me either.
    170. Re:@_@ by homer_s · · Score: 1

      you mean adding 88+44 doesn't require you to understand place values?

      From the way it is taught, no. The children are reqd to add 8 and 4, carry the one (why? they don't tell you why, that is just what you do) ..etc and whatever number you end up with is the answer.

      You seem to think that the point of this is to make is less 'tedious' and enable the child to calculate faster. My opinion is that it is less important that the child calculates quickly and more important that they understand the ideas behind the math.

      When I teach math to my niece, I make it a point to solve a problem with various approaches. She may not multiply or add fast (well she does, for a 5 year old), but she sure can explain how multiplying two numbers relates to addition or how it relates to area of a rectangle.

    171. Re:@_@ by moonshinerat · · Score: 1
      Solid foundation is the key term here. I am relatively new to Java, but I have been programming since I was 6 years old (on a trusty ZX Spectrum, 1982). Too many students miss out on the basic skills of programming; those kind of skills built up in the age of retro coding. It's kind of like the current generation of processor engineers that AMD and Intel are familiar with. Many of them know how to use another computer to manipulate existing architecture to design a new chip. Hardly any of them could design a new chip from the ground up. Most new Java programmers these days understand how to piece code together..... just like the Sam's book says, but haven't got a clue what a stack is!

      I remember joining the Open University six years ago to try for a degree in computer science based on programming. The course materials required a system wipe and installation of an obscure OS called the P-System. It was like something from a Mission Impossible episode, any older and I would have installed from reel-to-reel. I gave up after six weeks because the material was so old fashioned. BIG, BIG, BIG mistake. If I had stuck at this course I would have realized (or remembered) how important the basics were.

      My advice to most rookie coders (regarding the article) is this: The article is right, Java isn't going to give you a solid foundation in programming. Once you have the SF, then Java is a fantastic way of becoming an unbiased programmer; especially a paid one. Technology moves fast but if you try to jump in at the latest level you're going to miss a lot of important stuff. Please don't flame me for this but, Python is great to start with. It teaches you how to coordinate yourself with programming. C (not C++) will ensure that you have learned everything that programming will almost ever require apart from tidiness and simplicity.

      Don't rip this article apart. The professor has been teaching computer science for a long time and clearly understands what the technology industry needs. In England these days experience is replaced with a $3000, ten day course and a guarantee of a job. This pis$%s off most of us until we realize that we still have a job after six months and we don't have to open our own mail.

    172. Re:@_@ by dave87656 · · Score: 1

      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. One point made clear in the original article was that students were not learning or understanding basic principles, which languages like java take care of for you, to an extent. I went to college in the late '70's. A language like Cobol was considered a 4th generation language, which was also taught. But you needed to understand the basics of assembly language and C or Fortran so that you understood what was happening beneath the surface.
      Do we need to know that anymore? Maybe not for application programming but for those who intend to work on the next technologies, such as new OS's for new devices, communications, database technologies, the list goes on, you need to understand more of the basics.
    173. Re:@_@ by jayp00001 · · Score: 1

      From the way it is taught, no. The children are reqd to add 8 and 4, carry the one (why? they don't tell you why, that is just what you do) ..etc and whatever number you end up with is the answer.


      They do teach "why". I know I was, long before multiplication was explained. I couldn't find any of my old math books so it's the web to rescue (note the explanation of place value):
      http://www.teach-nology.com/forum/showpost.php?s=693662959c4f03e8470834716c629237&p=14065&postcount=2

      You seem to think that the point of this is to make is less 'tedious' and enable the child to calculate faster. My opinion is that it is less important that the child calculates quickly and more important that they understand the ideas behind the math.

      I will agree to disagree. I think that you can explain all of the concepts behind multiplication and division using the more efficient algorithm and as a bonus not require calculators to actually get answers to the problems. It's not about speed per se. It's about not making math so painfully tedious as to make a calculator the first choice for anything more complicated than baseball scores. Wanna have some fun- give the kid behind the counter a different amount of cash after he puts in what he thought you were gonna give him. IE the total is 8.45, you pull out a 20, after he puts in 20 and gets a change total say wait and give him 10.25. Be prepared to give a math lesson (or watch them pull out a calculator)

      When I teach math to my niece, I make it a point to solve a problem with various approaches. She may not multiply or add fast (well she does, for a 5 year old), but she sure can explain how multiplying two numbers relates to addition or how it relates to area of a rectangle.

      I would love if they were teaching multiple ways to solve the problem (in fact I vaguely remember the lattice method as a seperate note in one of my math primers). The issue is that the tedious method is the only way (non calculator) taught to perform simple mathematics
    174. Re:@_@ by SanityInAnarchy · · Score: 1

      You start thinking about efficient code not by how many lines it takes to write it, but my how much memory is will consume, how many objects it is creating, how many context switches it will have to perform, etc.

      Which can still be done with the help of a debugger (provided you can step in deep enough), but I do see your point.

      --
      Don't thank God, thank a doctor!
    175. Re:@_@ by Anonymous Coward · · Score: 0

      weird... oak project (the java origin) was all about programable portable devices (I believe the internet became the target market after the language was designed... java is still morphing trying to better serve the niches were is now used)

      The problems you enumerate weren big issues in the ada and oberon projects i was working at that time.

    176. Re:@_@ by Weedlekin · · Score: 1

      "I can't see how you could misread that, since the specific example was outputting "Hello, World" via System.out.println()."

      If this was the only thing you'd taken issue with about Java, then I would agree that I'd misread things. Your original post did not however restrict itself to a criticism of this aspect of a simple Java program.

      ""interpreted" isn't a feature of languages, but of implementations."

      This isn't necessarily the case, because some languages are specifically designed for an interpreted environment. One example is Prolog, which has the ability to modify its behaviour at run-time by asserting new rules into its internal database. There have been compiled versions, but they've either required compromises to the nature of the language (e.g. being able to assert facts (data) but not rules (code) at run-time), or include what amounts to a full Prolog interpreter to handle run-time rule assertions, so they can at best be described as partially compiled versions. The other side of the coin would be represented by Eiffel for example, which requires global code analysis for some of its design-by-contract features, and is therefore ill suited to running in an interpreted environment.

      "whether bytecode run on a VM is "interpreted" or "compiled"--or both--is a side topic, though it relates to which side of that fence Java should be considered on, as well."

      A VM is neither more nor less an interpreter than a CPU is an interpreter. As for Java the language, it's most definitely compiled (or at least the most common implementations are compiled), because "javac" is used to convert source files into files containing op codes for the VM, which cannot in itself execute the Java language any more than current hardware CPUs can execute C or BASIC source code. There are however a number of other languages for the Java VM which use interpreted environments, so Java the language is an option with Java the VM, not a requirement.

      "Using the broad use of I/O that you have no clarified that you were using (which makes your original criticism misplaced with regard to the post it responded to)"

      This would be true if your original criticism of the Java fragment only dealt with the bit between the braces, and my initial response also restricted itself to the bit between the curly braces. I suggest therefore that you read both your original post, and my initial response again to see why neither you nor I addressed only that part of the example you used.

      "its not less generally applicable than yours, since a rule need not be simple; a compound rule composed of other rules can still be described as "a rule"a rule need not be simple; a compound rule composed of other rules can still be described as "a rule"

      There are many programs that perform a variety of unrelated tasks, and cannot therefore be described by a single rule consisting of sub-rules. iTunes is an excellent example, because in addition to managing media files (a rule), it can also be used to register iPhones with a cellular telecommunications service provider (a completely different rule that isn't a sub-rule of the managing media files rule).

      --
      I'm not going to change your sheets again, Mr. Hastings.
    177. Re:@_@ by Anonymous Coward · · Score: 0

      I teach IB Computer Science in an American International High School. I teach many courses such as webdesign, robotics etc. All involve some type of programming.

      Anyway about 4 years about the IB organization decided that all IBCS courses go to Java. Before that teachers could choose from a variety of languages to cover the basic concepts of programming, networking, etc. Now we have to use JAVA and follow a Java curriculum that is very rigid.

      I have students who can take a language like Python and learn more in a month than they can do in three months in Java. Mostly because Java is full featured but also its structure is daunting as a first language.

      The IB expects the students to start with Java. Some students have experience with other languages and they do much better, but for those who simply want to explore a topic (which is good for a teenager to do) Java is rough.

      We have a choice of 3 languages for robotics and you can imagine that students love robotics more than any other programming course. Mostly because you have a physical thing to control.

      Plus, many students want to learn Linux and FreeBsd bash programming. It is novel to them because there is no GUI yet alot of power. Plus they think they look cool. If we want to cover these topics in Computer Science as a class, it means we have to spend weekends making up classes.

      I think all areas of programming and IT are important for young students to explore. But for some reason Java is now seen as a crucial step in the learning process.

      I do not use Java for my non-teaching work because most of the work I do is online. But I can handle the language for my course and I try to make interesting projects and apps. But when a student comes in and says look what I made with Action Script / or / Look what I made with PyGames(Python) -- I can't beat that. Not in the amount of time I have.

      Java is just not engaging to the inexperienced programmer- although it is extremely powerful.

    178. Re:@_@ by AKAImBatman · · Score: 1

      oak project (the java origin) was all about programable portable devices

      Actually, James Gosling is on record having said that Oak began as an attempt to make a C++ compiler that didn't need to recompile the entire codebase when only one class changed. From there it evolved into a more complex platform that became Oak and later Java.

      http://www.artima.com/intv/gosling1P.html

      The Java programming language has things about architecture-neutral executions, for instance, and dealing with the fragile base-class problem. You can actually solve those problems within the context of C++. I mean, it's just sort of an artifact of the way the C++ compilers are built that they have this problem. My original goal was to build a C++ compiler that didn't have these problems. But then as I worked on that, and as the developers on the project sort of came after me, it became really clear that there were other problems that needed solving, and it sort of evolved into just a new language.
    179. Re:@_@ by cylcyl · · Score: 1

      In that case, he should have addressed the issue instead of pointing fingers at a fine, productive programming language

    180. Re:@_@ by Anonymous Coward · · Score: 0
      You'll have to forgive me, but I must raise an eyebrow at this. While the (generically speaking) Java Platform has many potential homes, it has found no better home for its technology than on big iron. Its straightforward design allows for the Virtual Machine to automatically adapt to memory, processors, and optimize away sections of code at runtime in ways that a static compiler will never be able to match. In addition, Java's natural fault tolerance allows for complex multiuser applications that provide logical firewalls between each user. Except in cases of poorly designed code (extremely poorly!), no single user can take down the entire application.

      My job involves supporting a JVM on big iron. It's funny how often I hear this claim about JIT compilers "automatically adapting" etc. I know that's the theory and I know that's what HotSpot is supposed to do, but don't assume that that's what actually happens with the particular JVM implementation you're dealing with. There's nothing straightforward about JIT implementations, the code is fiendishly complex and unlike (eg) gcc because it is closed source, only a few eyes ever get to see it.

      You'd also be amazed at how often the JVM crashes (and keeps me in a job :) so again in theory it's fault tolerant but the reality may be somewhat different!

    181. Re:@_@ by Hognoxious · · Score: 1

      I own a Toyota Prius. Before that, I owned a Ford Explorer.
      I understand what you're saying, but one of the reasons it's different with software is that physical objects have physical constraints, that we're aware of - even if that awareness is subconscious. That isn't there when all you're seeing is an API in an IDE that autocompletes code for you.

      And while you wouldn't make your own meccano parts or woodworking screws - you'd buy them premade, like libraries - having at least a basic understanding of how to do so means you're using them in a more informed way. It also means that, should the need arise, you could do it.
      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    182. Re:@_@ by AKAImBatman · · Score: 1

      the [JVM] is fiendishly complex and unlike (eg) gcc because it is closed source

      You don't say?

      You'd also be amazed at how often the JVM crashes

      I'm well aware that the JVM can (and does) crash. That's why there are certain precautions that should be taken. The key one is to not jump to the latest version of the JVM. Stay with the last major version until a few minor releases have come out to repair any possible defects in the JVM. The next best one is to ensure that the JVM has proper resources. (e.g. Setting -mXm can do wonders.) Another one is making sure that you're running on Big Iron. The JVM is less stable on Windows due to the Windows APIs. (You usually see this in high performance graphics work with the JVM, but it does occasionally happen on the server.)

      Last but not least, make sure your programs are correct! If your developers leak threads (yes, I've seen developers do this), of COURSE your JVM is going to crash! Solaris can handle a LOT of threads, but having several thousand hanging threads is not going to keep the JVM stable for very long. :-)
    183. Re:@_@ by Anonymous Coward · · Score: 0

      Universities that just concentrate on one technology are dooming their students for failure. A good CS program includes the necessary curriculum and internships (on the job experience) that gives the student the proper tools to solve a problem with the right solution.

      When I completed my CS degree, I've already had a full-time job waiting for me, due to the connections I made with industry in my internships. My job experiences during school helped me picked the right curriculum.

      In my opinion, a student that just takes CS courses and does not get job experience is doomed to failure.

    184. Re:@_@ by DragonWriter · · Score: 1

      This isn't necessarily the case, because some languages are specifically designed for an interpreted environment. One example is Prolog, which has the ability to modify its behaviour at run-time by asserting new rules into its internal database.


      Um, so? Lots of compiled languages can "change their behavior" at runtime by rebinding variables, or even, in some cases, updating running code. Nothing about that behavior is inconsistent with a compiled implementation, and most prolog implementations that aren't toys (and many that are) are compilers.

      The other side of the coin would be represented by Eiffel for example, which requires global code analysis for some of its design-by-contract features, and is therefore ill suited to running in an interpreted environment.


      How does that make it ill-suited to running in an interpreted environment? It certainly would require a two-pass interpreter that seperates analysis from execution, but that's not an uncommon interpreter design.

      There are many programs that perform a variety of unrelated tasks, and cannot therefore be described by a single rule consisting of sub-rules.


      There is no such thing as a set of rules that cannot be described as a single rule consisting of sub-rules. If "Do X", "Do Y", and "Do Z" are rules; "Do X, Y, and Z" is a single rule, of which "Do X", "Do Y", and "Do Z" are sub-rules. (More relevantly in the case of real programs with multiple "unrelated" functions, if "When C(X) Do A(X)", "When C(Y) Do A(Y)", "When C(Z) Do A(Z)" are rules, then "For subrule in [X,Y,Z] When C(subrule) Do A(subrule) End" (intepretted either a sequential loop or a concurrent construct) is a single rule that incorporates each of the others as subrules. The actual content of the subrules is immaterial, any set of rules that can be applied can be composed into a single rule.
    185. Re:@_@ by fugue · · Score: 1

      Having learned CS at a good school and taught CS at a crappy school, I'm struck by the difference in approaches. Princeton teaches "Here's a little bit of C to get you started; no complex syntax; and here's how to turn a thought into an algorithm." U of Colorado teaches "Let's make you memorise all of C++ syntax."

      I don't see how the choice of language much affects the decision of which approach to take, as long as the language lets you do something with minimal syntax. Incidentally, Princeton has since moved to Java.

      --
      "The biggest problem with communication is the illusion that it has taken place."
    186. Re:@_@ by Weedlekin · · Score: 1

      "Um, so? Lots of compiled languages can "change their behavior" at runtime by rebinding variables, or even, in some cases, updating running code. Nothing about that behavior is inconsistent with a compiled implementation, and most prolog implementations that aren't toys (and many that are) are compilers."

      I find it difficult to see what point you're trying to make here, because the phrase you quote was followed by:

      "There have been compiled versions, but they've either required compromises to the nature of the language (e.g. being able to assert facts (data) but not rules (code) at run-time), or include what amounts to a full Prolog interpreter to handle run-time rule assertions, so they can at best be described as partially compiled versions."

      Your reply also displays the fact that you don't know much about Prolog, otherwise you wouldn't be making comments about re-binding variables or updating running code. A Prolog dynamic rule assertion is a piece of _Prolog source code_ of arbitrary complexity that is added at run-time to the database (this is an internal Prolog construct, not a RDBMS, although some implementations support using a RDBMS as a persistent rule store). Code written in Prolog obviously requires something capable of "understanding" Prolog to be useful, hence the fact that compiled Prologs typically include some sort of Prolog interpreter in either the compiled code itself or its run-time support system. If implementing the full Prolog language requires an interpreter at some point, then it's fair to say that Prolog itself was specifically designed to take advantage of certain features that interpreted environments offer.

      "How does that make it ill-suited to running in an interpreted environment? It certainly would require a two-pass interpreter that seperates analysis from execution, but that's not an uncommon interpreter design."

      The term "ill-suited" does not equate to "impossible". Note also that an interpreter which requires two or more passes of the source for _an entire software system_ before it can start doing its job (i.e. interpreting) would be more correctly described as a VM whose input is derived from an in-memory compiler, because even insignificant changes to any part of that source will require re-compiling all of it.

      NB: there have in fact been several Eiffel interpreters, but they tend to leave out the global analysis bits, so although some can handle most Eiffel syntax, they're semantically only subsets of the Eiffel language specification (although to be fair, this has also been the case with some compilers).

      "There is no such thing as a set of rules that cannot be described as a single rule consisting of sub-rules."

      I concede this point.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    187. Re:@_@ by DragonWriter · · Score: 1

      Your reply also displays the fact that you don't know much about Prolog, otherwise you wouldn't be making comments about re-binding variables or updating running code. A Prolog dynamic rule assertion is a piece of _Prolog source code_ of arbitrary complexity that is added at run-time to the database (this is an internal Prolog construct, not a RDBMS, although some implementations support using a RDBMS as a persistent rule store). Code written in Prolog obviously requires something capable of "understanding" Prolog to be useful, hence the fact that compiled Prologs typically include some sort of Prolog interpreter in either the compiled code itself or its run-time support system.


      "Something that understands Prolog", sure, but that need not be a Prolog interpreter. A number of compiled languages can add bits built from of arbitrary source code at runtime using something that "understands" the language -- a compiler. Off the top of my head, Erlang, C#, Mozart/Oz, newer releases of Java, and some Common Lisp implementations each have some mechanism to do this. Its possible that no Prolog implementations do work this way, but nothing about the ability to add constructs built from arbitrary source code and runtime requires a language to use an interpreter rather than a compiler. It certainly requires either an interpreter or a compiler to be available to the running program, but a compiler compiled into a compiled program is certainly one way this can be (and for many languages has been) provided.

      Note also that an interpreter which requires two or more passes of the source for _an entire software system_ before it can start doing its job (i.e. interpreting) would be more correctly described as a VM whose input is derived from an in-memory compiler, because even insignificant changes to any part of that source will require re-compiling all of it.


      That seems to rest on a fairly narrow definition of what isn't an interpreter, but its not like there is a real concrete divide between interpretation and compilation; its certainly more of a continuum. But also, the argument you make here doesn't follow. That all of the source must be analyzed before any is executed doesn't mean that changes couldn't be analyzed incrementally if the right information was stored from the initial analysis. Note here that I'm not asserting this is practical or desirable for Eiffel.

    188. Re:@_@ by Eli+Gottlieb · · Score: 1

      Give them Python. I offers solid features for object-oriented, imperative, and functional programming, while giving teachers a place to show the usefulness of C by building extension libraries in the much-faster C.

    189. Re:@_@ by Weedlekin · · Score: 1

      ""Something that understands Prolog", sure, but that need not be a Prolog interpreter. A number of compiled languages can add bits built from of arbitrary source code at runtime using something that "understands" the language -- a compiler. Off the top of my head, Erlang, C#, Mozart/Oz, newer releases of Java, and some Common Lisp implementations each have some mechanism to do this."

      They have mechanisms for allowing pre-written pieces of code to replace other pre-written pieces of code, but a fundamental aspect of Prolog is its support for programs that can "learn" by modifying themselves while they're running. Supporting this with a static compiler would be non-trivial, because it's not always possible to predict when the backward-chaining inference engine will modify something, and what effect that this will have on the rest of the system, because each modification has the potential to make other modifications, which may in their turn modify something else, and so on, thus producing a situation where the system could become bogged down with multiple successive compilations of the rule database, with a consequent and possibly severe degradation in runtime performance. One could solve this problem with a dynamic compiler that only compiles the changed sections when it needs to use them (and there may well be Prolog systems that do this nowadays), but the difference between a dynamic compiler and an interpreter are a subject of much debate, so it would be possible to claim that such a system was interpreted, compiled, or both without being entirely right or wrong.

      "That seems to rest on a fairly narrow definition of what isn't an interpreter, but its not like there is a real concrete divide between interpretation and compilation; its certainly more of a continuum."

      It is now, because etymologically challenged people have muddied the waters by using both terms far more loosely than used to be the case. "Compiler" and "interpreter" are both English words that, like "editor", "command line", "memory", "kernel", "floppy disk" and a whole host of other terms "stuck" because most people in computing at the time agreed that they were a pretty good description of whatever they were being applied to (most of the more venerable ones had several alternative names that have now largely fallen into disuse -- "translator" for example was an early synonym for "compiler"). Compilers are people who incorporate a series of existing _written_ works into a new one by analysing, organising, annotating, and where necessary, translating the originals; while interpreters act as intermediaries in conversations between parties who understand different languages, translating what each of them is saying in small, sequential sections which permit the conversation to actually be a conversation, albeit one that's somewhat slower than would be the case if both parties spoke the same language, and therefore didn't require an interpreter.

      There have been a variety of architectures that use static compilers to produce intermediate code which is then run by an interpreter, some of which date back to the late 1950s. We would now describe some of those interpreters as "virtual machines", but that wasn't what their designers called them, because in those days they applied the "if it walks like a duck and quacks like a duck..." test, so the USCD P-Code system for example used what they called a "P-Code interpreter", which various languages used static compilers to generate code for. It's also important to note that there have been many compilers written to target a high-level language rather than a virtual machine, and some of these high level languages have been interpreted ones, e.g. several that were meant for early home computers which output source for the particular dialect of BASIC that shipped in their ROMs.

      Which brings us to the point of whether a static compiler that's part of an interpreter's run-time system, and must be invoked on source code before any interpreting can begin, ceases to be a static compiler when

      --
      I'm not going to change your sheets again, Mr. Hastings.
    190. Re:@_@ by DataPath · · Score: 1

      I think most of us aren't bashing Java as a productive language. I think most of the Java bashing going on here is because Java isn't a good LEARNING language.

      I think it is the opinion of those who object to Java as a learning language that just like we don't teach math by letting you use a calculator to do it all for you, we shouldn't teach programming where right from the start with libraries of functions that can do most of the work for you.

      I started programming in Basic on our Atari 800XL when I was 6. I, too, am one of those passionate, self-taught people. I learned C and Perl programming by the time I was in high school. I thought I had a pretty good grip on programming.

      Then I took an assembly language class, and my eyes were opened.

      When I got to college, the first CS class in my major (computer engineering) starts with understanding numeric representations, then introduce an instruction set for manipulating numeric representations (and machine code), then assembly, then abstractions of assembly building up to C programming. It was great watching the eyes of everyone around me open up as they REALLY began to understand what computers were doing. It was almost like experiencing that great (semester-long) epiphany all over again myself.

      When I TA'ed that class later, I could guess with better than 80% accuracy who the CS students were and who the engineering students were by their reactions to learning about ISAs and assembly and C programming. The CS students (generally) hated it. They also had to take an introductory programming class in Java before they took this class.

      --
      Inconceivable!
    191. Re:@_@ by NateTech · · Score: 1

      You're overworked and thinking that there need to be more of us because you choose to be... your employer will ALWAYS demand more, that's the nature of business. Start saying "no".

      As for the accountant story, accountants are tested and regulated by law. IT has fought this at every turn, and still has people who call themselves "Engineers". Real engineers have PE's and have to build to legally-mandated standards which are monitored by government inspectors.

      When IT gets to that point, we'll be able to call these people "Engineers" -- until then, they're just code monkeys. Same thing with professional system administration. Most sysadmins do what I call "sysadmin by feel" and couldn't be bothered to write down the EXACT steps they're going to take on the machine and have them reviewed by peers and clients before doing them.

      (In Telco, we do this. It's very rare in any other "IT"/sysadmin job. We do it because we have already MEASURED (Engineering) the amount of money each system makes and maximize it while also planning appropriately for heavy load conditions, which were also tested and measured before the production system ever hit the CO. And if we screw up a production system, I know the platform I work on will cost my customer a DIRECT hit of over $40,000 an hour if the cluster is down outside of a maintenance window. If the system you work on doesn't make or save your organization that kind of money, and/or you can't PROVE it to management... they aren't going to be hiring you any staff to help you any time soon.)

      --
      +++OK ATH
  2. You're deluding yourself... by rustalot42684 · · Score: 1
    FTA:

    To me, raw numbers are not necessarily the first concern. The first concern is that people get a good education. You must be new here....
    1. Re:You're deluding yourself... by Zeinfeld · · Score: 1
      There is absolutely nothing to be said for learning how to program using badly designed tools. Cobol, Fortran, Ada are obsolete tools.

      There is certainly something to be said for learning C. Can't say that I would bother with C++ at this point. If you are going to implement an interpreter or run time package you are going to need to understand pointers.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    2. Re:You're deluding yourself... by rustalot42684 · · Score: 1

      Thanks for reading my post. I can see you clearly have a lucid understanding of what I said by the fact that you replied on a completely different topic. My point, if you'd bothered to try to comprehend it, is that the universities/colleges/etc are interested not in teaching, but in producing "coding fodder" for the IT industry.

    3. Re:You're deluding yourself... by Zeinfeld · · Score: 1, Offtopic
      Thanks for reading my post. I can see you clearly have a lucid understanding of what I said by the fact that you replied on a completely different topic. My point, if you'd bothered to try to comprehend it, is that the universities/colleges/etc are interested not in teaching, but in producing "coding fodder" for the IT industry.

      You had a point? I thought you were just karma whoring with a contentless snark.

      I do agree that Universities should teach better karma whoring technique, not just produce coding foder, it is pretty sad to see folk like yourself who are still waiting to get their +1 karma bonus after over a hundred posts.

      Get rid of Cobol, Ada, SQL and FORTRAN. Students don't need 'em half as much as they need prime slashdot snarking skills.

      As for TFA, when is a dupe not a dupe? When it is posted as a followup to the original with zero new content.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    4. Re:You're deluding yourself... by Cristofori42 · · Score: 1

      FTA:

      You must be new here...

      --
      "Is that dad? Either that or Batman's really let himself go."
    5. Re:You're deluding yourself... by thePowerOfGrayskull · · Score: 1

      You had a point? I thought you were just karma whoring with a contentless snark. Which is, I suppose, somehow way worse than karma whoring by making an offtopic reply to a contentless snark, soley for the sake of its proximity to the top of the comment stack...
    6. Re:You're deluding yourself... by twiddlingbits · · Score: 1

      COBOL, FORTRAN and Ada (the proper spellings are the first two are Acronyms) are still very much around and are no where near obsolete. Older for sure but there are millions of lines of COBOL code out there on mainframes crunching away. The problem is the language is not taught in schools anymore so no one is avaialble to take care of the older code. That's the main reason the code is migrated to something like Java.

      FORTRAN (the current version) is still very much alive in academia. You'll find a lot of scientists still write programs in the language. In fact that was what it was designed for, it's NOT a General Purpose Language such as Java, Pascal, C/C++.

      Ada is not dead yet. It's no longer mandated for defense work, but like Cobol there is a lot of it out there in use that still needs care and feeding.

      Learning good programming practices and making them habits, understanding algorithms, knowing how a program compiles into an executable, knowing about the structure of the OS and the chipset all will make you a better programmer.

      I've written code in Assembler (8085, 8031, X86 and IBM 360), BASIC, FORTRAN, C, C++, Ada, Java, APL, ALGOL, SNOBOL, COBOL, Simula, PL/I and others. Each one had a different way of implementing things but if you know how that "thing" is supposed to work from first principles you can adapt.

    7. Re:You're deluding yourself... by SL+Baur · · Score: 1

      FORTRAN (the current version) is still very much alive in academia. You'll find a lot of scientists still write programs in the language. In fact that was what it was designed for, it's NOT a General Purpose Language such as Java, Pascal, C/C++. Historically speaking, that is not true. FORTRAN is important because it proved that compilers could make efficient translations of source code (think of all the strange rules and exceptions in the older versions like the odd restrictions on expressions to compute array indices). Before FORTRAN it was still a wide open debate as to whether "high level" languages were worth anything at all. Calling FORTRAN a specialized language is not fair either as later dialects greatly expanded its scope and at the time it was designed, the only use of computers was number crunching.

      Currently, FORTRAN is still meaningful because it defines specific evaluation order of expressions. That is essential for scientific computations. Today's FORTRAN is not your Father's FORTRAN.
    8. Re:You're deluding yourself... by mrchaotica · · Score: 1

      FORTRAN (the current version) is still very much alive in academia. You'll find a lot of scientists still write programs in the language.

      And engineering, too. I work on structural engineering software, and the people in charge insist that FORTRAN still produces faster code than C (or anything else). I don't necessarily believe them, but considering that chunks of this program predate most operating systems (and all modern operating systems) I don't think it's going to be re-written any time soon...

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    9. Re:You're deluding yourself... by Zordak · · Score: 1

      FORTRAN is not obsolete. It is still the most powerful language for hard-core mathematical operations. Sure, there are modern updates of it, so you don't have to worry about whether you're in column 5 or column 6. But the guts are still FORTRAN. It's not what people normally use for stuff like GUIs and stupid little web animations, but as long as computers have to do real math, FORTRAN is there to do the job. Now get off my lawn.

      --

      Today's Sesame Street was brought to you by the number e.
    10. Re:You're deluding yourself... by Zeinfeld · · Score: 1
      FORTRAN (the current version) is still very much alive in academia. You'll find a lot of scientists still write programs in the language. In fact that was what it was designed for, it's NOT a General Purpose Language such as Java, Pascal, C/C++.

      That is not true, certainly as far as Fortran8X is concerned. I discussed this point with the raporteur for the standard. It was intended to be a general purpose language.

      I have had extensive experience of watching scientists plug away in FORTRAN. It is not a pretty sight.

      At the time there was a real value in Fortran over C, it had array bounds checking for starters. And it was certainly easier to find a compiler that did vectorization for FORTRAN than for C. But the idea that FORTRAN was optimized for scientific computing is a fable. You could say that of APL but not FORTRAN.

      By the time 8x became FORTRAN90 it had been superceeded in every way by Microsoft BASIC.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    11. Re:You're deluding yourself... by twiddlingbits · · Score: 1

      I haven't used FORTRAN since FORTRAN77 so I don't know what improvements were made. Scientists writing software in any language is not a pretty sight. They don't think code. FORTRAN was designed for Mathematical programming as a language most any scientist, mathmatician, phycisist or Engineer could use since APL is so cryptic. I never said it was optimized for scientists.

    12. Re:You're deluding yourself... by Zeinfeld · · Score: 1
      FORTRAN is not obsolete. It is still the most powerful language for hard-core mathematical operations.

      I think you will find Mathematica is orders of magnitude more powerful.

      What specific feature of Fortran do you consider to make it more suitable for mathematical operations? The parsing of equations is rudimentary, the built in math functions minimal. Other languages support hints for vectorization.

      This is one of those statements that is endlessly repeated regardless of whether it is true.

      Incidentally, its been Fortran not FORTRAN since Fortran95 and FORTRAN was never an acronym.

      Having seen the code written by physicists it is clear to me that the less Fortran they see the better. It certainly does not teach anyone to write good code, nor does COBOL. Look at an extensive system in either and you will find acres of poorly abstracted template code. Hundreds of subroutines that do essentially the same thing in the same way with very minor changes.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    13. Re:You're deluding yourself... by Zordak · · Score: 1

      It is FORTRAN, as in FORmula TRANslation. Not an acronym; an abbreviation.

      What specific feature of Fortran do you consider to make it more suitable for mathematical operations? Can your namby pamby little Java applet correctly multiply two complex matrices with a simple, native multiplication operator? Didn't think so.
      --

      Today's Sesame Street was brought to you by the number e.
    14. Re:You're deluding yourself... by LizardKing · · Score: 1

      Fortran is no longer written all caps, and hasn't been since Fortran 90 came out.

    15. Re:You're deluding yourself... by Zeinfeld · · Score: 1
      It is FORTRAN, as in FORmula TRANslation. Not an acronym; an abbreviation.

      No, it was FORTRAN, right up to FORTRAN90.

      After that it became Fortran, as in Fortran95.

      If you are going to correct someone on a point of pedantry, get the pedantry right.

      Can your namby pamby little Java applet correctly multiply two complex matrices with a simple, native multiplication operator? Didn't think so.

      Can you do a Fast Forurier Transform in Fortran using a native operator? You can in APL. In FORTRAN you probably end up using Rene Brun's CERNLIB code, oh dear, bad luck.

      You are never going to be able to support every possible function in the core. The C approach of removing as much functionality from the core as possible and using libraries has proved much better in the long run. Fortran has built in I/O primitives based on an obsolete hardware reference model. Java and C# have no intrinsic I/O, nor do they need any.

      Far more significant than whether something is intrinsic or not is how well extrinsic functions integrate. Here C# beats Fortran hands down. You can overload any operator. So you can write code like a = b + c * d where the variables are complex or matrices and such. In Fortran you have to call a subroutine to do anything beyond the core. And because of the legacy issues it is probably called something like FFTRL2 because it was originally written for an MVS machine with a 6 character linker.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    16. Re:You're deluding yourself... by Zordak · · Score: 1

      Can you do a Fast Forurier Transform in Fortran using a native operator? You can in APL.

      Whoa. How'd we get from C# to APL? I'm supposed to be the one advocating arcane mathematical languages.

      You are never going to be able to support every possible function in the core.

      Exactly. Which is why you use the right tool for the job. If you want to make online games, use a byte code interpreter. FORTRAN was meant to be a straightforward way to TRANslate FORMulas for those who were primarily concerned with having a powerful tool for solving big math problems. It's not built for eye candy and networking. It has a very specialized function, and it does it well. And that's why I said a couple of posts ago that FORTRAN is not obsolete. FORTRAN code still powers lots and lots of mathematical simulation code.

      I'll yield the point to you as soon as you can show me a serious byte code language implementation of FSCATT (compute X-ray transfer given an X-ray event with an arbitrary black body spectrum through an arbitrary material) or proof that OrCad has re-worked the SPICE (yes, SPICE) core in Java.

      --

      Today's Sesame Street was brought to you by the number e.
    17. Re:You're deluding yourself... by Zeinfeld · · Score: 1
      Whoa. How'd we get from C# to APL? I'm supposed to be the one advocating arcane mathematical languages.

      You tried to make a point based on Fortran support for COMPLEX data types as built in rather than libraries. APL is reducto ad absurdum on that one.

      I'm supposed to be the one advocating arcane mathematical languages.

      You picked the wrong person for that weenie-measurement contest. I have probably designed more languages than you have used.

      Exactly. Which is why you use the right tool for the job. If you want to make online games, use a byte code interpreter

      Why? I think the byte code approach is a mistake. It was done for Sun tactical reasons in the days when they were still plugging away with SPARC. Byte code compatibility is not very interesting. The Microsoft approach with CRL is much more powerful: compile down to the target processor at install time or on the fly.

      The CLR completely eliminates the overhead associated with the byte code approach. The CLR output is simply the intermediate stage of the pre-existing Microsoft C++ compiler. So you get full access to all the power of the machine.

      This is going to become even more apparent going forward as the CLR format is extended to support vector operations. Then it becomes possible for the code installer to target code to the video processors. Try that in Java.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    18. Re:You're deluding yourself... by An+ominous+Cow+art · · Score: 1

      your Father's FORTRAN. "What's that?"

      "Your father's FORTRAN compiler. He wanted you to have it, when you were old enough. Not as clumsy as Java or random as Perl. An elegant language, for a more civilized era."
    19. Re:You're deluding yourself... by twiddlingbits · · Score: 1

      I've not used the language in 25 yrs so I only knew it as FORTRAN. Dictionary.com still shows it all caps and also as "Fortran" and "fortran". But they mention that ANSI decreed, in about 1985 via the ANSI FORTRAN Technical Committee TC, that it should be "Fortran".

  3. I started with C/C++ by KermodeBear · · Score: 5, Insightful

    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.

    --
    Love sees no species.
    1. Re:I started with C/C++ by StarvingSE · · Score: 4, Insightful

      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).

      --
      I got nothin'
    2. Re:I started with C/C++ by Anonymous Coward · · Score: 0

      I feel sorry for people that don't start with assembly. I feel sorry for people that don't start by assembling digitial logic circuits on proto-boards. I feel sorry for people that don't construct their own vacuum tubes.

      There are a million things you could learn by studying Java (or virtually any other language for that matter); and if you are unable to recoup the time you invest, then I'd suggest you aren't a very good student.

      The first article on this subject smacked of simple prejudice. This follow up makes me think /. editors have no sense of propriety whatsoever ... wait (headsmack) .. hahahaha - /. editors creating a tempest in a teapot for page reads! Now that would be unusual wouldn't it?

    3. Re:I started with C/C++ by mcrbids · · Score: 3, Interesting

      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!

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    4. Re:I started with C/C++ by giminy · · Score: 2, Interesting

      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 method? Most of my interviewers at MS could not answer the question, which I found telling. They're certainly wizards with algorithms and code optimization, but hadn't gone into much depth in how what they're doing actually works in memory. I find a lot of OO programmers don't know what a function pointer is, even though they use them with every new line of code.

      I definitely think that learning low-level languages first is the way to go. I do learn a lot of new stuff every day from my younger coworkers who have been using Java since day 1 (mostly programming paradigms and weird stuff in the libraries), but I find myself teaching them a lot as well -- and quite basic stuff too, like what thread an event fired by hardware will run in in their .net code ;-).

      --
      The Right Reverend K. Reid Wightman,
    5. Re:I started with C/C++ by schwartzg · · Score: 1

      In the introductory classes I took they taught us Java and glanced over C. Now I am taking more advanced classes and find myself wondering why they taught us Java and not C since in many cases the class is designed to be done in C. Thus it would have been useful to have been taught C, though I can see why they would want to teach us Java, if we never use it in our later classes it seems to be a waste.

    6. Re:I started with C/C++ by Anonymous Coward · · Score: 0

      Try to read his post.

      Then, when the full meaning of his post has sunk, separately from everything else, see if you can draw some sort of analog to the current discussion.

    7. Re:I started with C/C++ by samkass · · Score: 2, Insightful

      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 functionality and the ability to debug and maintain the code. The simple syntax feels a little limiting at first, but after maintaining some code for a few years you grow to love it. Parsers are trivial and thus all the IDEs have powerful analysis and refactoring tools, and it's very easy to see what's going on. The object model is simple and operators almost always do the same thing all the time. I really don't miss slugging through dozens of obscure .h files mentally parsing macros.

      However, I honestly don't know what learning CS is like in Java, as I went to school just before the "big bang" of Java, WWW, ubiquitous e-mail, etc. I could imagine it being a little harder to learn some of the data structures and algorithms, since the ones included in the language are so rich. And threading and concurrency is so much easier in Java than almost all the languages that came before it I'm not sure whether current CS students even know what dilemnas philosophers faced at round eating tables.

      --
      E pluribus unum
    8. Re:I started with C/C++ by ddoctor · · Score: 1

      I learnt Java at uni (Software Engineering, Griffith Uni, Brisbane), and found it was the perfect tool for the job. Free, quality tools available. Source available. Nice OO language. Gets you used to C-style syntax. Plus, there's jobs in it - I'm working in one right now. Java is good for beginner programmers, because there's fewer ways to do bad practise than C++.

      That said, C and C++ should be taught at uni. As should a whole heap of languages. My degree only focussed on 1 language and introduced about 6 others... but without much depth. Now, we didn't do any C++... but we actually did a fair bit of assembler... and heaps with raw logic circuits. So, this gets us pretty low-level... still, I would have liked to see a bucketload of C and C++ thrown in there.

      Also, strangely, there were zero subjects on web development at my uni... which was very backwards of them, especially considering our 2 major year-long team projects were actually web systems. We just figured it out ourselves... which was ok... but this can definitely learn you some bad habits.

      Before I started uni, I knew heaps of languages, and had been programming since primary school, so none of this really meant much to me. I just basically needed to study and apply myself to something remotely related to software for 4 years to skill up. I'm sure a lot of slashdotters are of similar calibre.

      But, I know a lot of people who left with IT degrees, but couldn't code to save their lives. I don't know if exposing them to something more "hardcore" will harden them up, or muddle their heads with details they won't understand for years, if ever. Some would go either way.

      We're starting to see programming taught in primary school, which makes perfect sense, because its a very abstract problem solving pursuit, but without the maths. I'm sure lots of people suck at maths because they can't do abstract problem-solving... and many others suck at abstract problem-solving because they can't handle maths. Simple programming fills a nice little niche in there... if taught the right way.

      I would have loved to have programming class in primary school... I had to wait until year 11. So, I basically had to teach myself... and spent years learning things the hard way, and breaking the bad habits I learnt along the way... and trying in vain to convince teachers that the text I was displaying on screen was deliberate, not the computer going haywire!

      Back to the point... kids learn quick. If you get them used to programming earlier in school, then you can get them into more hardcore stuff at uni.

    9. Re:I started with C/C++ by Anonymous Coward · · Score: 1, Insightful

      I learned a few assembly languages before and during college, prior to a course that contained BASIC, Pascal, and FORTRAN. A few years after college, I wound up writing a number of DOS and Windows drivers in assembler, so the courses I took paid off. Is that experience useful today? Only indirectly. Most of my work these days is in C# or unmanaged C++, with a little tinkering in Objective-C.

      Now, should I feel sorry for you because you started in a higher level language such as C, rather than mastering assembly language first? Or because you may have missed writing the microcode for a simple microprocessor prototype built with simple logic chips?

      Should the previous generation pity me, for not building my own logic circuits out of triodes, or creating ingenious analog computers out of gears?

      There are always roles for those who know the fundamentals, but over time the bulk of the work shifts to more advanced, high-level tools. Remember that the generation before you can always teach you something valuable, and that the generation after you will give you some good competition for your job in a few years --- and they'll teach you a thing or two as well.

    10. Re:I started with C/C++ by Strilanc · · Score: 1

      Algorithms is the killer course at my university. I'm not sure why, I absolutely loved it.

      I have a friend who failed it multiple times. I tried to help, but I think its a very "you get it or you don't" course.

    11. Re:I started with C/C++ by bladesjester · · Score: 1

      Thus it would have been useful to have been taught C, though I can see why they would want to teach us Java, if we never use it in our later classes it seems to be a waste.

      C is extremely easy to pick up, to be honest. Don't get me wrong, it will take a while to get *good* at it, but getting started is pretty easy. Grab a copy of K&R C, read it, and play a bit. That's how I learned most of it when our projects were in it.

      As for why they taught you Java, it's because a lot of modern languages work like Java. They'll teach you other things too.

      The intro classes (minus the very first one, which was in Pascal) where I went were in C++, then there were classes that used C (or a mix of C and C++ and a few assorted other things like lex and yacc in my operating systems and internetworking classes), one in assembly, one or two in scheme, etc etc etc.

      Over the course of your college career, you'll probably learn a number of languages, most of which they won't lead you through by the hand. You'll basically have to pick up a book, play with code, and ask intelligent questions, just like in the real world (sometimes you'll literally find yourself learning a language just for one or two programs someone else wrote that you have to maintain after they leave).

      --
      Everything I need to know I learned by killing smart people and eating their brains.
    12. Re:I started with C/C++ by poopdeville · · Score: 2, Insightful

      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.

      This is dumb. Very dumb.

      A programmer needs to think about what he is doing every step of the way, regardless of the language he is using. You know, to implement an algorithm (the steps). On the other hand, memory management is an implementation detail. If the problem at hand isn't about memory management, having to think about it is in fact a handicap. I know that I would rather focus my mental powers on solving the problem at hand than wrangling pointers, or allocing and freeing memory. If I'm learning about recursion, I don't care what the kernel is doing, or how the compiler and linker resolve memory addresses, or function pointer syntax. In fact, I want all that implementation crap abstracted away, a la Lisp and Scheme, or Ruby and SmallTalk, or even Java.

      Granted, there is a time and place for things like C. College isn't it, unless it's for a course in operating systems, compilers (though I'd prefer Scheme for this purpose), or some kind of electronics engineering, where stuff like memory management is actually relevant to the subject. And even then, the essentials can be taught in less than a week. Assembly programming alumni at your school probably decried C's introduction to the curriculum. Too dumbed down. Access to system libraries and "low level" (ha!) system calls and powerful APIs is too easy. Etc ad nauseum.

      Me? I started with Perl, of all things. My first project was a data analysis tool for a friend's Linguistics thesis as a college senior -- rather fitting. Moved on to Ruby (with ATLAS C libraries) for research in data mining algorithms. Later moved on to Scheme for an introduction to functional programming, and Erlang for more work in distributed data mining algorithms. Picked up some C and PPC Assembler somewhere. I'm not even defending Java in the classroom. I don't have any particular opinion about it, except that I dislike statically typed languages. Mere preference.

      --
      After all, I am strangely colored.
    13. Re:I started with C/C++ by TheMCP · · Score: 1

      I started my university studies of computer science with pascal, C, assembly, and FORTRAN. I learned all about different ways to sort stuff, linked lists, binary trees, etc. I learned about pointers, allocating and deallocating memory.

      It's years later now, and I have worked exclusively in garbage collected languages since Java came out. It's not the only language I've used, I actually do almost all of my work in Water these days, but that marked the end of my messing with pointers. I recognize that there are needs for lower level languages, but that's not the kind of programming I do.

      I find that in my present work, my knowledge of pointers, memory allocation, memory deallocation, etc are useless. The closest I've come to any of those in years was about a year ago when I noticed that the interpreter I was working with seemed to have a memory leak, so I communicated the fact to the interpreter's dev team and it got fixed. So, I had to know that pointers exist, but not actually use them.

      I find that the programming skills which are much more important to my work, and to most of the programming I've seen in the last decade or so, are the ability to model real world information as data structures (which most programmers are remarkably bad at; they'll create an efficient but awkward structure) and the ability to structure a large and complex application in a manner which allows for future growth. These are skills which usually come from experience, not school, and have nothing to do with whether or not the language being used is garbage collected or how high level it is.

    14. Re:I started with C/C++ by philwx · · Score: 1

      How did they teach OS, compilers, low level networking, etc etc with Java? Did they switch over just the introductory classes to java? Or everything. If it's just introductory stuff that's fine. The people who know C already will do well in the later stage classes, and the people who don't won't make it.

    15. Re:I started with C/C++ by Myrcutio · · Score: 1

      I was still in high school when they made the switch from C++ to java, and it saddened me greatly.

      My first CS class they threw us in the nitty gritty of low level C++ code, memory allocation, the works. It was mostly a weeder course for anyone who wanted to keep going with CS.

      After they switched to java, the only things covered in class (and this was the second year mind you) were loops (not nested loops, that was considered too complex), function syntax, and the very basics of applets. Most of us who had taken the C++ class were bored silly, and spent maybe 5-10 minutes doing the assignment, and the other 45 minutes toying with applet games we were writing in our spare time.

      Now, it gets worse. Once i got my first college CS class it turns out they were teaching the same curriculum as i had taken in HIGHSCHOOL. So, basically i hadn't moved forward an inch in 3 years of CS classes, at least without taking my own initiative outside of class.

      The first class freshmen in a CS degree should take is a low level systems course. Since the CS college has such a high dropout rate, the first class should be a weeder course, not HelloWorld. I ended up leaving my CS degree in favor of an English one, once i found out that it really wasn't needed except for most programming jobs. At least with English i learned some logic i can actually use.

    16. Re:I started with C/C++ by Anonymous Coward · · Score: 0

      Yeah, but your homepage link takes us to your blog where you claim work sucks and you turned down the development lead position because you want a managerial position.

      http://blog.kermodebear.org/index.php?/archives/93-Past-Few-Months.html

      What's wrong with this picture? Oh yeah, you're a moron asshat.

    17. Re:I started with C/C++ by TheMCP · · Score: 1

      One question that I like asking is, what does an object method look like in memory versus a static method?
      How does that matter to an everyday programmer? And, why should there be a difference?

      I find a lot of OO programmers don't know what a function pointer is, even though they use them with every new line of code.
      Why should they care?
    18. Re:I started with C/C++ by sydneyfong · · Score: 1

      what does an object method look like in memory versus a static method? Exactly the same? Basically a static method with the "this" argument passed in.

      More specifically, though I don't know anything about compilers, or operating systems, I'd think that a "method" would look different for compiled (to machine code) programs, programs under a VM and interpreted programs. I don't know how cautious the MS interviewers are (they might be reluctant to talk too much on unfamiliar topics to a random interviewee), but given the vagueness of your question I wouldn't be attempting to answer it if I'm not a pseudo-anonymous random guy on slashdot...
      --
      Don't quote me on this.
    19. Re:I started with C/C++ by dubl-u · · Score: 1

      Granted, there is a time and place for things like C. College isn't it, unless it's for a course in operating systems, compilers (though I'd prefer Scheme for this purpose), or some kind of electronics engineering, where stuff like memory management is actually relevant to the subject.

      I disagree strongly.

      I agree that languages that do memory management for you are great, and for most business programming, I think that's what people should use. I love Perl, I love Java, I love Ruby. However, I think it's important that any programmer know what is actually going on under the hood.

      Until you've managed some memory yourself, it's very hard to get what Java's up to, meaning it's very hard to write sane, efficient code. Some of the worst "enterprise" bullshit I've seen was written by people who didn't have a firm grasp of fundamentals, and therefore engaged in cargo cult programming.

    20. Re:I started with C/C++ by gihan_ripper · · Score: 1

      I asked my interviewers technical questions, too. [...] Most of my interviewers at MS could not answer the question, which I found telling.
      I don't know whether or not you wanted (or got) the MS job, but usually interviewers don't like being made to feel inadequate by their interviewees. In particular, they might begin to worry about their own job security. Better to show that you're good, but not quite as good as the interviewer!
      --
      Phoenix, Boston, Little Rock, see a pattern?
    21. Re:I started with C/C++ by itsdapead · · Score: 1

      Two years into college they changed everything over to Java.

      The problem with that decision is not the word "Java", its the word "everything". Any college-level "computer science" course that only uses one programming language is a joke.

      Heck, I did an extremely traditional Physics course with naff-all computing and a half-hearted practical component, and that managed to squeeze in Pascal (Before lunch: Learn Pascal; After lunch: write a program to solve this differential equation), 6502 assembler (before lunch: here's a 6502 and a wire-wrap gun; build a computer; after lunch: learn to program it) and microcode (on a CPU demonstrator built from TTL).

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    22. Re:I started with C/C++ by ultranova · · Score: 1

      C is extremely easy to pick up, to be honest. Don't get me wrong, it will take a while to get *good* at it, but getting started is pretty easy. Grab a copy of K&R C, read it, and play a bit. That's how I learned most of it when our projects were in it.

      Or grap a copy of Nethack sources and make a variant. That's how I learned it. Or just try to get NVIDIA's proprietary driver working with the newest stable Linux kernel in a machine which has GeForce 2 MX (which isn't supported by newer driver versions anymore) - low budget is the mother of invention ;).

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    23. Re:I started with C/C++ by Lodragandraoidh · · Score: 1

      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!


      This is a false analogy.

      To make a better analogy: imagine you only fly tricycle gear aircraft for your job (you work for FedEx delivering widgets cross country). Now imagine the management comes down and says "we're spending too much on fuel for this one leg that you are flying -- we are going to issue you a piper cub (tail dragger) aircraft. You will begin flying tomorrow."

      Of course, you've never had training on the tail dragger, so lo and behold - you ground loop on your first landing attempt. Luckily you survive, and they issue you another piper cub...and they cycle repeats itself. Meanwhile your customers are not getting the packages they wanted on time (or in one piece for that matter).

      Full disclosure: I too am a pilot, as well as a programmer.
      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    24. Re:I started with C/C++ by abc_los · · Score: 1

      Are aviation metaphors the new car metaphors? I better brush up then!

    25. Re:I started with C/C++ by Analog+Squirrel · · Score: 1

      At the risk of going too far off topic, I learned on a tricycle C150, then moved up to a tricycle C172 and C172RG. Then I went and got my tailwheel endorsement, and I have to say it *did* make me a better pilot. After my time in the tailwheel plane (Aeronca Champ), I never botched a landing in a Cessna - they are so much easier to land. A month ago I started in helicopters, which require yet another degree of skill. It's all fun, after all, flying is flying!

      --
      I'd rather be flying
    26. Re:I started with C/C++ by Anonymous Coward · · Score: 0

      I'm currently a junior in college and I got to say that I agree with the prof. OOP is great to develop applications, and teach beginner level CS courses. But as far as producing skilled programmers, there are setbacks. I took a C# course over the summer where everything was developed in Visual Studio with form builders. Needless to say, I got my A in the class and felt like I didn't learn a damn thing. Some professors get so caught up with the belief that "if they understand how to think in terms of algorithms, the programming part is easy". While this is often true to some extent, (i.e. complex application programs that run simulations), it is often never true in others. Take linked lists for example. Most any student can implement one of these in java, c#, visual basic, etc. just fine. Tell them to do the same thing in c/c++ and they're scratching their heads. And once the curriculum becomes advanced and requires such low level thinking (i.e. OS or network programming classes), the drop off rate increases dramatically. Sad but true. My advice, take a semester in college where you spend your time having either no CS courses or CS courses that don't require programming. Then, spend that spare time during the semester learning the low level details of C and or assembly, and write some systems programs for a Unix based OS on your own. You won't regret it!

    27. Re:I started with C/C++ by bladesjester · · Score: 1

      The thing that gets me is how people freak when they have to learn a language like C on their own.

      The book on the language, written by the people who created it, is less than 300 pages. It really is pretty easy (though, as I said, it takes time to get *good* at it). It's honestly one of the smallest programming books I've ever owned.

      I found it more time consuming to learn Java and C# because the libraries go on forever (though the basics are still pretty much the same as in any other OO language).

      The real fun, if you ask my honest opinion, is learning things about C++ by reading Stroustrup's book which is both rather long (you could beat people to death with the hard cover) and also very in-depth. A few friends have decided that it makes the most sense after one has attained a Master's degree in CS.

      Nice try on getting him to hack on a driver, though. Somehow, however, I don't think he's ready for that just yet :P

      --
      Everything I need to know I learned by killing smart people and eating their brains.
    28. Re:I started with C/C++ by Darinbob · · Score: 1

      Any decent curriculum will include an operating systems class which should have the low level programming assignments.
      I'm probably showing my age here. But I only had one single class that focused on a programming language and how to program in it. All other classes expected us to pick up most of the details on our own or with T.A. help. Some in-class time was spent on assembler for the assembly programming class, but it covered other topics as well and we didn't have enough time to wait for all the assembler instructions to be covererd in a lecutre. Some clases spent the first week covering basics of a new language (C++ for C users, Fortran for Pascal users, etc).

      In general it was considered normal and expected that a computer science student was fully capable of picking up a new language and running with it. Over time that notion has eroded.
    29. Re:I started with C/C++ by Darinbob · · Score: 1

      Of course, you've never had training on the tail dragger, so lo and behold - you ground loop on your first landing attempt.
      No, it's probably more like being assigned a Piper Cub and being given time to become acquainted with it. Then the Cessna pilot saying "but I can't find any certification courses that teach Piper Cubs", or "Microsoft doesn't support Piper Cub anymore", or "I'll have to go back to aviation school for that". Or maybe the pilot welds on a wheel to the nose that he constantly maintains, then spends the rest of the time at the job complaining that he never gets any decent tools.
    30. Re:I started with C/C++ by deepestblue · · Score: 1

      Sorry, but I stopped reading when you said "C/C++". Well-written C++ is nothing like C, and should not be. And while C has its place (OS kernels etc.), even Java is more suitable than C for most purposes. Of course, C++ beats them all hollow.

    31. Re:I started with C/C++ by ultranova · · Score: 1

      I found it more time consuming to learn Java and C# because the libraries go on forever (though the basics are still pretty much the same as in any other OO language).

      You don't need to memorize those libraries, though. Knowing the core language is enough to get started; the libraries can be searched as needed, which is simple enough since the documentation is available in electronic format and standard HTML for that (at least for Java, dunno about C#).

      The real fun, if you ask my honest opinion, is learning things about C++ by reading Stroustrup's book which is both rather long (you could beat people to death with the hard cover) and also very in-depth. A few friends have decided that it makes the most sense after one has attained a Master's degree in CS.

      Unfortunately, I've never received formal education - or any kind of education besides reverse-engineering source - related to IT, so I know almost nothing of CS. Heck, I don't even know how to use a debugger :(. So I guess I'd not make much sense out of it.

      Nice try on getting him to hack on a driver, though. Somehow, however, I don't think he's ready for that just yet :P

      The "hacking" in this case consists of finding out the new names and syntaxes for the functions and preprocessor directives which has been changed. Not exactly l33t stuff :).

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    32. Re:I started with C/C++ by Chris+Pimlott · · Score: 1

      My first thought was the same as yours, but then again - if the person interviewing you is someone you will be working with directly in the job - architect, co-worker, even manager - then it would be quite worth your while to try to get a feel of their skill level and intelligence before committing yourself to the position.

    33. Re:I started with C/C++ by cyphercell · · Score: 1

      actually, it's just a thought experiment in preparation for "flying car analogies"

      --
      Under the influence of Post-Cyberpunk Gonzo Journalism
    34. Re:I started with C/C++ by bladesjester · · Score: 1

      You don't need to memorize those libraries, though. Knowing the core language is enough to get started; the libraries can be searched as needed, which is simple enough since the documentation is available in electronic format and standard HTML for that (at least for Java, dunno about C#).

      It is indeed available in electronic format. However, while you don't need to *memorize* all of the libraries, it's a very very good idea to learn them well enough that you know roughly what is where. It saves you a great deal of time in the long run, because otherwise, you'd spend too much time digging through the docs trying to find the thing that you need.

      Regarding the debugger - learn to use one if you code much at all. It will make your life easier. They didn't teach it in a class where I went. I had to learn to use it on my own by reading docs, playing with it, and asking intelligent questions, and it was well worth it.

      --
      Everything I need to know I learned by killing smart people and eating their brains.
    35. Re:I started with C/C++ by poopdeville · · Score: 1

      Until you've managed some memory yourself, it's very hard to get what Java's up to,

      Not if you understand hashing, sorting, and counting algorithms -- the things all memory management systems depend on essentially. It is the specifics that vary. Knowing what's going on under the hood amounts to knowing what the interpreter you're using does, and presumably coding to fit that behavior. This is not a good idea, unless you have a reasonable assurance that the garbage collection mechanism won't change dramatically between releases.

      It's more important to choose robust data structures and algorithms for those data structures to solve your problem.

      In short, memory management is a non-issue unless it is an issue. And you'll know when it is.

      --
      After all, I am strangely colored.
    36. Re:I started with C/C++ by dubl-u · · Score: 1
      Until you've managed some memory yourself, it's very hard to get what Java's up to,
      Not if you understand hashing, sorting, and counting algorithms -- the things all memory management systems depend on essentially.

      I'm not saying you should code to your particular memory manager. I agree that you should avoid that unless you're desperate. Root of all evil, etc.

      However, I've come across all too many developers who have only ever worked in high-level languages that can't think about the lower-level stuff. E.g., they have no idea how many bytes an object might occupy, and they aren't clear on the cost of copying and allocation. Or even when copying or allocation happen. Or when their garbage collector can get rid of something.

      It's those kinds of people that build an awful lot of "enterprise" bloatware, and they desperately need a little more grounding in the basics.

  4. Turn turn turn... by TheLazySci-FiAuthor · · Score: 4, Insightful

    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.

    1. Re:Turn turn turn... by blueg3 · · Score: 1

      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.

    2. Re:Turn turn turn... by colfer · · Score: 1

      What's a cycl[oops, garbage collection]

    3. Re:Turn turn turn... by Anonymous Coward · · Score: 0

      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).
      And that's enough proof of the dumbing-down.
    4. Re:Turn turn turn... by Secret+Rabbit · · Score: 2, Interesting

      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, research in Computer Science. For this context, a programming language is just a tool to be used to really dig into an idea. And one cannot do that with Java when one is dealing with such low-level things as OS's.

      Your example of Feynman diagrams is also false and misleading. There it was about notation and practicality thereof. People will stick to what works for them and those "big names" that you mention already were "stuck in there ways" with the "old" notation. They PREFERRED to use the old one because they were used to it. Feynman diagrams stuck around because they conveyed the necessary information in an easier to understand way.

      Here we are talking about function. Basically, there are many many many things in the CS curriculum that require a low-level language to properly describe. This does NOT include Java. There is also a level of detail of thinking that one acquires when one programs in a lower-level language like C that one cannot get with something like Java.

      Basically, while Java makes business apps and such easier to write, it is counter productive with regards to the goals of a University CS program. But, if I'm wrong, just go ahead and show us an OS that was written in pure Java.

    5. Re:Turn turn turn... by Skreems · · Score: 2, Insightful

      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 it's doing. I've seen good programmers, people I would consider to be way better than me in many respects, tripped up by the way managed languages abstract away the concept of pointers by making all objects automatically act as references. And I remember in my own Java courses in college, that not only was it strange trying to wrap your head around the language implicitly treating objects as pointers, but not a single person, student OR teacher, could explain that internal memory system properly. Pointers and memory references are still there in Java and C#, you just don't use C++ style notation for it. But if you don't understand it, it's going to bite you.
      --
      Slashdot needs a "-1, Wrong" moderation option.
      The Urban Hippie
    6. Re:Turn turn turn... by japhering · · Score: 1

      From your point if view, I would presume that you are not from the US, which where the debate began. A distinction which is indeed significant to the discussion, as in the US there is funcionally very little difference between a College and a University. In fact, sometimes the biggest distinction of a college is that it is a subset of a university.

      Fifty or a hundred years ago there might have been a significant difference between the two, but in my lifetime (I'm 48) there
      has been no difference.

    7. Re:Turn turn turn... by cgenman · · Score: 1

      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 thrown into a cave on planet Ilum with a pick axe and a soldering gun, and would have to build a computer from raw ore and bits of plant life. Only then has he proven himself worthy of learning the secrets of "O of log n".

      Isn't Academia supposed to be academic?

    8. Re:Turn turn turn... by JPriest · · Score: 1

      Although you do have a good point, I think there is something to be said for working with the nuts and bolts of a language also. When you work with a high level language, you spend a great deal of time interfacing with this or that graphics library that may or may not be obsolete in the next version but certainly will be in the next language. When you look at it from this perspective, working with a high level language that abstracts many important concepts can have a negative impact on education.

      --
      Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
    9. Re:Turn turn turn... by bcrowell · · Score: 1

      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.
      Interesting, if true, but I find it hard to believe. Can you give any evidence that this really happened?

    10. Re:Turn turn turn... by Anonymous Coward · · Score: 0

      And this kind of thinking is the reason that, although processing power has increased exponentially over the past few decades, our computers are not any "faster" at performing simple everyday tasks. If anything, they have gotten slower. How do you expect programmers to start taking advantage of all the advances we make on the hardware front if they don't even know how a computer works on a basic level? What point is there to having faster, more streamlined, multi-threaded and multi-core CPUs if no one is taught how to code for them?

      High-level languages like Java or VB have their place, to be sure. That place just shouldnt include programming 101--let them take a supplementary course later to learn the syntax and nuance. It's easier to learn on a low-level language and move up than the other way around.

    11. Re:Turn turn turn... by Otter · · Score: 1
      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 are universities (in the sense you use the word) primarily in the business of training undergraduates to become researchers, except in the minds of the most snobbish professors. The job market for PhD's would be even worse than it is now.

    12. Re:Turn turn turn... by xenocide2 · · Score: 1

      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 with single thread memory model assumptions.

      This all said, I think they've abandoned Java for Python. They did recently redo the curriculum so that Formal Language theory and so on are electives rather than requirements, but on the plus side, Software Engineering is also no longer required.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    13. Re:Turn turn turn... by Secret+Rabbit · · Score: 1

      I'm 30 and live in Canada. Here there has always been a difference (at least within my lifetime).

      If you want clarification, here a College is something that gives 2-yr Diplomas (read: only practical, zero theory) and/or "the trades". Whereas, the Universities give out 3/4-yr (honours) BS Degrees (90%+ theory) where one has the possibility to go onto a Masters program. That Masters program possibly being at the same institution. Of course, that is being dumbed down (drastically in some cases).

      For the record, I have a 2-yr Diploma (Computer Analyst/Programmer) and worked in industry as a web developer. I found my education fine for that purpose. But, perhaps it was that I took an active interest in what was going on "under the hood" i.e. I went beyond the curriculum.

      I also have a Math Degree from an average University (I actually looked at different curriculum around the country so, yes, I can say that). I also took classes from another University (I've move a fair bit due to the spouse) which was a horror. There they had a significantly dumbed down and the mentality there was... They had significant problems even knowing where to start a proof in 3RD YEAR! Worse yet, I was prevented from using proper notation because it was "confusing" to the other students and if they weren't allowed/couldn't use it, then I wasn't allowed to either.

      This is where we are heading in Academia. Quite frankly, this profoundly disturbs me. To send out functionally retarded people in whatever area (highschool Math teachers scare me the most) is irresponsible in the extreme. I mean, right now I find the level of critical thought and output from people horrid. I shutter to think what it'll be in another 10 or 20 years.

    14. Re:Turn turn turn... by Secret+Rabbit · · Score: 1

      Your first point was just addressed in a response to the other gentleman.

      Regarding your second point, bullshit. Just take a look across the pond in Germany. Specifically, look at the Math and Physics programs (that is where I've looked and KNOW). You're also confusing what I say should be/is the primary purpose of a University (Academics agree btw) to what it currently offers. Check out the history of the dumbing down of the curricula in your own country in the last century.

    15. Re:Turn turn turn... by Anonymous Coward · · Score: 0

      Software is the closest thing we have which, to the majority of the population, is indistinguishable from magic. The point of the aricle is that this seems to apply to graduates of compute sicence curses (who should know better). Yes my Degree focused almost exclusivly on Java as a language and as a result there are a lot of things I still can't quite get to work (such as memory management).

      Self study is correcting this slowly, but it is a slow and painful process, which a well structured curse could have made much easier.

      As the article pointed out the fact that Java is the language is not necesarily the problem but what is taught. If you are going to use Java then fine, but make the sutdents understand it. Go down to the byte code level and look at what the java compiler is producing and how a virtual machine operates on it.

      Even in java it's useful to know that the bytecode generate for a switch statement where the cases are consecutive values is different (and much more efficient) then the bytecode generated if they are not consecutive values. I had a good attempt at going down to this level and it was defiantly useful.

      At lest one book I have been reading (writing Great Code volume 2) argues that every programmer should learn at least one assembly language, and I think he may have a point. As a programmer you should know how software works and what the computer actually does with your source code.

      the Fundamentals of computer science are not something to pick up along the way while learning how to program in some particular language, any more that being able to Read and Write teaches you the fundamentals of grammar. In my corner of the world the high school curriculum does not include the teaching of grammar and the end result is smiler, people leave school without a full grasp of how language works. In the business world the same people are expected to have excellent written communication skills.

      I can't see how either is supposed to work.

    16. Re:Turn turn turn... by martin-boundary · · Score: 1

      Really, when has a tool ruined the skill set of an industry?
      How about Windows 95? In the old DOS days, people on PCs used to know what a file was, and what a directory was for. Ever since Windows 95, there's a whole bunch of users who have no idea where their files are on their PC. The Windows OSes ruined people's understanding of how their computer works. Yet those skills are still important for backups, collaboration, troubleshooting, etc.
    17. Re:Turn turn turn... by PhoenixRising · · Score: 1

      Clearly the answer is that we should teach assembly.

      Well, yes.

      Among other languages, of course. In my CS program, we used a variety of languages, depending on what we were trying to accomplish. For our computer architecture courses, we did use assembly language. Data structures was C++. Languages and compilers was ML (with a little bit of APL for good measure), plus tools like yacc and flex. Operating systems was Java (seems like an odd choice, but the JVM's handling of multi-threading, monitors, etc. is pretty handy for illustrating certain concepts.) Numerical methods was Matlab. Algorithms generally could be written in pseudocode, though I think for the rare actual programming assignment, we could choose our language.

      Computer science involves an understanding of how the computer works, from the low level on up. Different languages are appropriate for different things.

    18. Re:Turn turn turn... by PitaBred · · Score: 1

      You haven't seen many programs written by people who only learned on Java, have you? Memory allocated all over the place, garbage collection penalties, non-releasing of memory throughout a program. All kinds of horrible stuff that you'd learn not to do if you ever had to allocate your own memory and design your own data structures and figure out how the actual hardware works in conjunction with the software.

    19. Re:Turn turn turn... by try_anything · · Score: 1

      Academics agree btw
      Looking past the humorous notion that academics could agree about anything, they certainly don't agree that universities are in the business of "get[ting] people to be able to go onto a Masters and PhD and be able to do actual research." Professors *know* what their students are going to do after university, they *know* most of them aren't going to be researchers, and they don't believe in preparing students for an imaginary future -- nor do they believe that students who are not future researchers should be excluded from universities. Quite a few academics believe that ideally, almost everyone would attend university. The closest your statement comes to the truth is this: Most professors (though not all by any stretch) believe that the same skills essential for research are essential for living an educated, critical, responsible life.

      P.S. Try picking up a copy of the Chronicle of Higher Education sometime, and you'll see that American professors do quite a bit of arguing about the proper role of universities, and very few of them conform to your characterization of academics.

      (P.P.S. Perhaps you wanted to specifically refer to a particular type of German institution? The English word "university" will not get your meaning across if you really mean Universität. A Fachhochschule is a university. But even if that's what you meant, there is no general agreement among academics, even German ones, that the German system is ideal.)

    20. Re:Turn turn turn... by mrchaotica · · Score: 1

      My CS curriculum did have a required course about that! We didn't do a whole lot of assembly or actually build any circuits, but we did learn about how digital computers work from transistors to gates to truth tables and Karnaugh maps to combinational and sequential logic to ALUs and RAM.

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    21. Re:Turn turn turn... by jadavis · · Score: 2, Interesting

      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, database connection, or session data? It's no longer good enough to just use a garbage collector, because that was only intended to collect certain types of garbage. You need to write your own, which is simple enough if you already know how existing systems work, but you are likely to make many mistakes if you go at it alone without understanding the trade-offs involved in the different garbage collection strategies.

      So just because someone writes a library, tool, or what-have-you doesn't mean that the entire class of problems disappears, it means that one manifestation of the problem has disappeared, but it will probably resurface in another form somewhere else. If you have the education to back it up, you will quickly recognize the problem and solve it. If not, you will surely make all the mistakes that people have already made in the past, and from which you never took the time to learn.

      --
      Social scientists are inspired by theories; scientists are humbled by facts.
    22. Re:Turn turn turn... by Anonymous Coward · · Score: 0

      "College" and "University" are the same thing you stupid, stupid fuck. Also, they are not fucking capitalized. Fucker.

    23. Re:Turn turn turn... by Lars+Clausen · · Score: 1

      Amen. Any time you pick one language, no matter how brilliant or versatile, and only teach that, you're crippling your students. Noone would expect a carpenter to only know how to use a powerdrill. Some assembly is a must, to understand the lowest level of the machine. One each of procedural, object-oriented and functional languages should also be in the toolbox of anyone with a CS degree. We can discuss all night which ones they should be, but that's like quibbling over which textbooks to choose for a subject. Irrelevant.

    24. Re:Turn turn turn... by petermgreen · · Score: 1

      You can try and teach conventional multithreading synchronization in C++, but you wind up lying to students, as the optimizers are typically built with single thread memory model assumptions.
      Surely thats why we have volatile to tell the compiler that something is touched by code outside the current thread (whether other threads or interrupts or whatever) and when I touch it the compiler had better do exactly as I say.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    25. Re:Turn turn turn... by Weedlekin · · Score: 1

      "All kinds of horrible stuff that you'd learn not to do if you ever had to allocate your own memory and design your own data structures and figure out how the actual hardware works in conjunction with the software."

      Because as we all know, malloc() and calloc() are part of every processor's instruction set, so those using them are talking to the hardware directly rather than merely calling an OS routine like those "quiche eater" languages that go around abstracting stuff such arithmetic and complementing, stacks, program counters, registers, and all the other things that every C programmer deals with on a daily basis.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    26. Re:Turn turn turn... by Weedlekin · · Score: 1

      "In the old DOS days, people on PCs used to know what a file was, and what a directory was for."

      They did indeed, hence the fact that 95% (I'm being generous here, because it was probably more like 99%) of DOS PCs had all those "file" thingies in the root directory. This was after all what it must be for, otherwise they wouldn't have required learning extra, complicated commands and parameters to put stuff elsewhere and then find it again if you forgot where it was after a week or two.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    27. Re:Turn turn turn... by japhering · · Score: 1

      For the most part what you are discussing are trade/technical schools. Things like Devry Technical Institute, ITT Tech which provide degrees, but which are not accredited in any manner, meaning if you do 2 years at ITT Tech, you get ZERO credit for it if you try to then go to University to obtain a 4 year degree.

      Life in general is being dumbed down. When was the last time a clerk counted back the your change after a purchase? How many governmental forms are now available in some grotesquely large number of foreign languages? Or ask the sub-twenty crowd to write a correctly formatted paper without the aid of a M$ word template, 90% of them can't do it.

      How about all the insane safety features being put on things because some idiot wasn't smart enough not to use a tool in a manner not intended, but was smart enough to go find a lawyer.

      Life in general is being dumbed down ....

    28. Re:Turn turn turn... by BillEGoat · · Score: 1

      Exactly.

      University seeks to make computing more accessible to people. News at eleven.

    29. Re:Turn turn turn... by martin-boundary · · Score: 1

      Nah, it was nowhere near like that. People knew the commands because they had to use them every time they wanted to install software.

    30. Re:Turn turn turn... by xenocide2 · · Score: 1

      Dear people,

      Volatile does not mean what you think it does. That is all.

      Sanity

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    31. Re:Turn turn turn... by Weedlekin · · Score: 1

      You appear to be suffering from Rose Tinted Nostalgia Syndrome, the most obvious symptom of which is an insistence that everything was better "in the old days", including people, who were invariably more honest, intelligent, and capable than today's lamentable horde of thieving, lying, know-nothing dross.

      "Nah, it was nowhere near like that. People knew the commands because they had to use them every time they wanted to install software."

      Most DOS software had automated installers that required nothing more complex than typing "A:INSTALL", which the user manual told them to type. Systems without hard-disks didn't even need that much -- the manuals told users how to back up the floppy, and they'd run the software off the backup disk by sticking it in the drive and typing the program's name. Not that the majority of users were capable even of this, so people like me made lots of lovely money setting up text menus that were called from AUTOEXEC.BAT (or PROFILE.SUB on CP/M), and allowed them to launch the two or three applications they were interested in by typing a one digit number.

      These supposedly technically adept DOS users also had some interesting practices for managing 51/4" floppies, such as stapling them together, punching holes through them so they wouldn't fall out of clip spine folders, folding them up before storing or mailing them, thinking that "send me a copy of the disk" meant that one wanted a photocopy of it, and taking the round brown bit out of the square black part "because it makes a funny scraping noise when it goes round and round".

      --
      I'm not going to change your sheets again, Mr. Hastings.
    32. Re:Turn turn turn... by petermgreen · · Score: 1

      That page does not seem to mention anything about what volatile means just that some compilers generate slow code when using it.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    33. Re:Turn turn turn... by xenocide2 · · Score: 1

      [...]that's basically what the C "volatile" keyword approximates: not atomic accesses, but *uncached* accesses!

      That's especially as "volatile" really isn't a very good feature of the C language, and is likely to get *less* interesting rather than more (as user space starts to be more and more threaded, "volatile" gets less and less useful. --Linus Torvalds, LKML Fri, 24 Aug 2007 10:19:50 -0700 (PDT)
      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

  5. "Core stack"? by mrami · · Score: 2, Interesting

    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?

    1. Re:"Core stack"? by Anonymous Coward · · Score: 0

      Checking the core with a debugger while the program is running?

      perhaps a core dump is a dumped core stack?

    2. Re:"Core stack"? by guruevi · · Score: 1, Redundant

      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.

      --
      Custom electronics and digital signage for your business: www.evcircuits.com
    3. Re:"Core stack"? by Anonymous Coward · · Score: 0

      I don't think anyone said "I've never heard of a stack" or "never heard of a call dump".

      I know both what a stack is and a core dump is. But I have never ever heard of the term 'Core Stack' being used to refer to the stack trace of the core dump.

      I wouldn't be surprised if the 'young programmer' knew exactly what a 'Core Stack' is in concept but just didn't know it by that name.

    4. Re:"Core stack"? by Colin+Douglas+Howell · · Score: 1

      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?

      Hmm, of all the replies here, only the guy who joked about using the Boy Scout compass was on the mark.

      A "core stack" has nothing to do with backtraces, call stacks, or stack data structures of any kind. It's a term for a magnetic core memory device. Core memory is constructed from "core planes", each of which is a square array of magnetic cores connected by wires. (See Magnetic core memory for details and a picture of a core plane.) Each core plane functions as a 1-bit-wide memory device, similar to a 1-bit-wide DRAM chip. Just as a DRAM module is built from several DRAM chips acting in parallel, a core memory device is built from a set of core planes literally stacked together to form a compact unit with the appropriate bit width. This is a core stack.

      I couldn't find the original reference you were quoting (it didn't seem to be in either article or in any of the previous comments), but I assume the engineer was being asked to check if there was something physically wrong with the core stack; perhaps an access panel had been left open or something, causing it to overheat. Core memory was very sensitive to temperature.

  6. Get that college credit by snappyjack · · Score: 3, Interesting

    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++.

    1. Re:Get that college credit by The+Anarchist+Avenge · · Score: 1

      My high school had a computer teacher who taught what amounted to the entire first year of my college CS degree over the course of 2 years. Started in BASIC for the first week, then moved to VB for the rest of the year, at which it switched over to C++. Those were the best classes I ever took, and I wish that the rest of my experience in the CS discipline was the same. Here's to you, Mrs. Davis!

      --
      Today's lucky number is: 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
    2. Re:Get that college credit by ushering05401 · · Score: 1

      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.

    3. Re:Get that college credit by sneakyimp · · Score: 2, Insightful

      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.

    4. Re:Get that college credit by colfer · · Score: 1

      Logic itself is the first thing to teach. College students may have had that only had in one class, geometry early in high school, and/or whatever kind of programming they teach in H.S. now.

      Java will do for that I guess, though BASIC and Pascal were simpler, with no libraries.

      Once they understand logic and loops, you could hit them with memory and pointers and data structures.

    5. Re:Get that college credit by gsmalleus · · Score: 1

      When I took the Advanced Placement exam as a high school senior in 2002 it was in C++. When I got into college, the intro courses were all C++ based. I took some time off from school last year and am now finishing up my degree. Last week was the beginning of the spring semester and when I got back to the computer science department, it is now all java based. The base level courses and some of the upper level courses had switched during my leave of absence. When I inquired about the change I found that the department had switched mainly due to the AP exam switching languages. It is hard to test out of an intro level course if the exam you take uses a different language then the course you are testing out of. The only downside is I now have to learn Java for this one course, which was originally C++ based a year ago, so I can graduate in May.

    6. Re:Get that college credit by The+One+and+Only · · Score: 1

      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++.

      --
      In Repressive Burma, it's not just your connection that dies. slashdot.org/comments.pl?sid=314547&cid=20819199
    7. Re:Get that college credit by The+Analog+Kid · · Score: 1

      When I inquired about the change I found that the department had switched mainly due to the AP exam switching languages

      Shouldn't the AP test fit what colleges are doing, not the other way around? That's pretty disturbing that a college will change a department's curriculum because of 1 test they don't even administer.

    8. Re:Get that college credit by sneakyimp · · Score: 1

      Perhaps you should try to think of a Java assignment that requires any system-specific code?

    9. Re:Get that college credit by The+One+and+Only · · Score: 1

      (Fortunately?) I have not had any Java assignments, nor have I had any assignments in Java. However, I have also never had an assignment in C or C++ that required a specific platform. If I did (i.e. if I was learning something that required system calls and attention to endianness), I doubt Java would be in any way useful. But your assignments in data structures, algorithms, sorts, etc. can all be written in the same C or C++ that will compile on any system compliant to the standard.

      --
      In Repressive Burma, it's not just your connection that dies. slashdot.org/comments.pl?sid=314547&cid=20819199
    10. Re:Get that college credit by sneakyimp · · Score: 1

      I have no first-hand experience, but I understand that the virtual machine implementation on any given platform is supposed to buffer your Java application from specifics of the platform. 'Immunity' of a sort. This would be helpful if you were trying to interact with GUI or implement a threaded application.

    11. Re:Get that college credit by ZachPruckowski · · Score: 1

      When I inquired about the change I found that the department had switched mainly due to the AP exam switching languages

      Shouldn't the AP test fit what colleges are doing, not the other way around? That's pretty disturbing that a college will change a department's curriculum because of 1 test they don't even administer.
      When the APs switched, I had just taken both of the CS ones as a freshman and sophomore. I recall the reason for the switch as being that Java was supposedly better supported at colleges.

      The reason that colleges would switch to match the AP test is simply because they'd have hundreds of students entering with Java skills. If you have a 101 course with C++ and the AP is in Java, you have two options:
      1. Let the AP students skip the 101
      2. Make the AP students take the 101
      If you go for option 2, you're going to lose CS students in a competitive environment. Standing is an important consideration in choosing a college (it shouldn't be, but it is), and getting 4-8 (CS 101 classes often have labs) credits at one school versus none at another is a factor. You'll also deprive top students of the ability to either double-major or take extra high-level electives.

      Option 1 forces your 201 professor to waste weeks reviewing the basics of the language, simply because half his class knows the language and the other doesn't. While all the students would have introductory theory and computer programming basics, the professor would have to contend with the massive knowledge gap.

      This is what makes option 3 most attractive. Switching to match the AP test eliminates all of those problems, but with the obvious downside of ceding all decision making to the College Board or ETS. That makes it a poor long-term option, but a decent short term one.
    12. Re:Get that college credit by dwye · · Score: 1

      > 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.

      Interesting. I was taught it because it was believe that programming in that fascistic language would force you to learn the rules, before C taught you how (and why) to break them. Learning in C sounds to me like learning to fly in a Sopwith Camel (notoriously unstable WWI fighter, therefore very nimble), guaranteed to kill you or make you great (and probably the former).

    13. Re:Get that college credit by caseih · · Score: 1

      College yes, University, definitely no. The purpose of CS in university is to train computer scientists to be able to use and develop algorithms in any language on any platform. When faced with a problem, a CS major will not say, hey I can solve that in Java. Rather he or she says, that looks an awful lot like this other problem which is typically solved with this algorithm. Or, maybe I can solve this problem in some new algorithmic or with some new combination of algorithms and heuristics. One basic CS skill should be knowing what data structure to apply to what problem. Do I need a binary tree? A red-black tree? Right-sibling-left-child? Is there one in a standard library? Given a stream of BER-encoded data, what structure is best to represent the parsed tokens? None of this has anything inherently to do with Java. But I might have done it in Scheme in school, and the concept translates straight across into C, c++, Java, C# or whatever.

      Seems like if we had more of a two-way communication system between universities and industry. If graduates would go out into industry and provide feedback to the unis, the courses could be improved. For example, grads could help professors with real world examples of problems that are solved with CS methods. Then students can learn by solving actual problems, rather than the contrived, busy-work problems most CS courses have.

      Seems to me that Java isn't the best teaching tool for this. Scheme has its place, and I think python too for much of this. Although introductory data structures should be taught in some lower-level language that makes you manage memory. Just so you're not surprised when your cute little Java program completely and utterly runs out of memory.

    14. Re:Get that college credit by Darinbob · · Score: 1

      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++.
      I never understood why there are even AP classes in computer science or why it's even on the high school curriculum... Just more stuff for the student to unlearn at the university?
  7. Could be worse by Anonymous Coward · · Score: 1, Interesting

    Imagine teaching MapReduce in Java.

    1. Re:Could be worse by ardor · · Score: 2, Insightful

      Imagine teaching closures, coroutines, true generics, conditions, pure functional coding, arrows, lambdas, etc. in Java.

      See? Java has very limited expressiveness. People are taught what's hot today. Tomorrow, different languages are hot, with different paradigma. Or, they get a job where other paradigma are important. Now, see how hard the people have to try to adapt.

      If all you ever got taught was to use a hammer for everything, you will have a hard time adapting to a scalpel.

      --
      This sig does not contain any SCO code.
    2. Re:Could be worse by Eli+Gottlieb · · Score: 1

      Imagine teaching closures, coroutines, true generics, conditions, pure functional coding, arrows, lambdas, etc. in Java. Admittedly, you can't really teach any of those things in C/C++ either. They require Scheme at least, and possibly some kind of pure-functional language to teach why certain things (like arrows, which I never bothered to learn) are actually useful.
    3. Re:Could be worse by ardor · · Score: 1

      True generics are one of C++ main strengths. Lambdas are somewhat supported, in a very limited sense via boost.lambda, and as a language element in C++0x, though it does have issues since full support for closures is not possible because of the lifespan of variables. The C++ template metaprogramming language is pure functional. Coroutines are possible with ugly hacks, but these are generally discouraged.

      But my point is that the knowledge of all these things expands your abilities and mental flexibility. You tend to see the problem from more (and different) perspectives. And I agree, Common Lisp/Scheme is best for teaching these things (although the syntax may be scary for starters). That's why I favor Lisp as starting language, NOT Java.

      --
      This sig does not contain any SCO code.
  8. Is it time for a split? by seanalltogether · · Score: 1, Flamebait

    I wonder if automotive engineers went through the same bitchfest right before the modern mechanic was born? 'Damn kids these days just want to learn how to change the oil in their car, they can't even build their own fuel injector!'

    1. Re:Is it time for a split? by colfer · · Score: 1

      "All they know how to do is read the codes" would be more like it.

    2. Re:Is it time for a split? by Gaston · · Score: 1

      Parent is flaimbait? I disagree. He actually has a good point; a little rough around the edges, but very valid.

      While it is possible for low-level programmers to program higher-level systems/interfaces, it's increasingly becoming less economically practical for them to do. So as software penetrates newer markets and further embeds itself within our lives, there has to be a transitional period wherein higher level programming enters into common knowledge for a much larger percentage of the workforce.

      Other posters have mentioned how entry level CS classes help to weed out those without deep interest in the nitty-gritty of computation, which in some ways counters the article author's pessimistic viewpoint, but it remains important to remember that the real motivator of any sweeping college curriculum change isn't idealistic java-zealous CS professors; rather it is the industries that hire CS majors.

      This article amounts to little more than feedback from a CS professor on what a traditional CS education means to him. IMHO it would be more productive to just say that the edge of this transition period has been made apparent by the introduction of java into the CS education (where else would you start??), and to address this, new majors need to be developed so that CS majors can concentrate on more intimate details of computing.

  9. C is overkill for most people by kemushi88 · · Score: 5, Insightful

    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.

    1. Re:C is overkill for most people by Azarael · · Score: 1

      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 your addition and subtraction, before multiplication and addition.

    2. Re:C is overkill for most people by Aadain2001 · · Score: 1

      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++?

      --
      Space for rent, inquire within
    3. Re:C is overkill for most people by cgenman · · Score: 1

      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 programming: Pointers. If that helps a person learn the structural difference between a linear search, a binary search tree, and a hash, then I'm all for it. Pointers are a pretty deep level of abstraction, and behing hit with those before people have a chance to wrap their heads around things like return values seems counterproductive.

    4. Re:C is overkill for most people by nlawalker · · Score: 1

      "all of the libraries, at least from my experience, are extremely well documented"

      I graduated from CSE at UW a couple years ago. Just wanted to clarify one thing here: One of the main arguments against using Java as an introductory teaching tool mentioned in the original article was the huge number of libraries that could be found. You could practically call DoMyHomework() for the intro classes.

      However, this isn't how the assignments were graded. If your homework was sorting algorithms in Java, you were asked to *implement* them and experiment with them, not just *use* them. The assignment was structured to ensure that you understood the algorithm, its speed, why it was good for certain situations and not others, etc.

      Standard libraries were only used when they were integral to the assignment, such as graphics packages for learning about how modern graphics packages work (points, areas, polygons, brushes, etc.)

    5. Re:C is overkill for most people by beckje01 · · Score: 2, Informative

      At my undergrad during my last year they completely redid the structure of the CS program, and looking at it now I very much like it. I am currently a CS PhD student and a software engineer doing everything from medical device programming to web development, so I've seen the gambit of the low level coding to the high level all the way to the CS research. When I see entry level classes taught in C and Java I think its just wrong. What are you trying to teach in the first 2 semesters? How to compile code and get things to work or are you trying to teach data structures and problem solving? My undergrad has moved to teaching the first two semesters in Python and I think it was a great move. Not only is it quick and easy to get into those people who would like to learn a little CS to help out in basically any science now get a tool that they can easily pick up and use later in life. (Also forces proper indenting.) After the two starting classes the 3rd course in the entry series is Java and all kinds of things you should know in CS that fall through the cracks. The profs went around to the seniors and asked what things were lacking in the current classes, so things like regular expressions, version control, and other very useful but overlooked items were added into this new class. I think its a good plan I'm not 100% as the first students should be coming out soon so we'll see how they turn out. After seeing the vast differences in low level programming to high level programming I almost see a need for a separate degree but all I'm seeing is companies hire EE people for embedded programming and hire CS for the higher level tasks. All well eventually schools will work it out and there will be a real distinction between Computer Engineering Degrees and Computer Science Degrees. Also to make it a bigger headache don't forget there are both Computer Science BAs and BSs. I actually have a BA which makes job interviews interesting sometimes but it hasn't seemed to hurt me yet.

    6. Re:C is overkill for most people by mrchaotica · · Score: 1

      By all means, schools should have a scientific computing or introductory programming class in Java.

      On the contrary, an introductory class ought to be taught in something like Scheme. After all, how are the students supposed to be expected to understand objects when they don't even know what an algorithm is yet?

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    7. Re:C is overkill for most people by TheCount22 · · Score: 2, Insightful

      I have to disagree C is not overkill and isn't hard either. It is a shame that people are getting CS degrees without knowing what is really going on at the machine level. I got news for universities teaching only JAVA!!! Your Students better know that computers aren`t magic. They should know why and how things work inside their computer or they will be flipping burgers before you know it.

    8. Re:C is overkill for most people by absoluteflatness · · Score: 1

      I'm a student at Virginia Tech, and we have a similar situation here.

      The early 1000-level CS courses are Intro to OO Programming I and II, and use Java. The 2000-level courses are Data Structures I and II, taught in C++, and Computer Organization, which uses MIPS assembly.

      The courses I am taking this semester are Operating Systems, which uses C and MIT's Pintos OS, and Human-Computer Interaction, which allows students to use any language, with C# recommended.

      The downside to using several different languages is that classes have to give time for students to adjust, with the plus being that the curriculum is much more language-neutral. I think the situation in our CpE department is much more focused on C++ only.

    9. Re:C is overkill for most people by Anonymous Coward · · Score: 0

      The school I go to teaches C to freshmen. It seems to be much easier for the students who have had no programing experience. The students who have used Java tend to be confused about ideas like pointers because Java hid how things really worked from them. C makes a better freshmen weed out class for the very reason that it is harder then Java. If you can learn C you can learn Java, but it doesn't work the other way. Second, platform independence really isn't a problem in a introduction programing class. Those introduction C programs that use basic data types and functions from stdlib will run on more platforms then Java.

      And just to think, I almost went to UW.
      Go Cougs.

    10. Re:C is overkill for most people by Anonymous Coward · · Score: 0

      I guess I think of something different when I hear of CS education.
      First you should not be tought a programming language, you should be tought to program. You don't need very much to do this, so no Java class library or documentation needed. To teach someone how to solve a problem with a program you may need a print command, but anything beyond that is unnecessary.

    11. Re:C is overkill for most people by cbart387 · · Score: 1

      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. I started out learning programming C++. In the past year year I've had several classes that are primarily C (some unix system programming and compiler design). While you can't do inheritance in C you can still use most of the OO ideas. Ie you can easily create private members/functions by using static in a file. I do agree with your assessment but C can done with the OO approach (just is harder).
      --
      Lack of planning on your part does not constitute an emergency on mine.
    12. Re:C is overkill for most people by Azarael · · Score: 1

      And my school did get around to teaching OO that way in the form of ADT's (abstract data types). I'll clarify my earlier point as well, what I meant by fundamental is procedural programming, and good habits with that. You only have to read a few articles at thedailyWTF to see some of the structural abominations even so called 'veterans' come up with.

      Yes OO is important and should receive a lot of attention, but I don't think that a lot of students are really ready for those ideas in an introductory class. People who are already experienced programmers entering College/University will find this kind of class a cake walk, but the real goodies for these people come in later classes anyway. Also, if it's not pointers for people to get confused about, it's references, inheritance, interfaces, inner classes and a bunch of other things that are more about the tool you're using than actual programming (i.e. how to develop and implement and algorithm).

  10. Truth by p0tat03 · · Score: 4, Interesting

    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.

    1. Re:Truth by ScrewMaster · · Score: 2, Informative

      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 knowing assembler (several assemblers) is a definite plus, really a prerequisite, especially if you do embedded systems work with limited resources.

      However, given the level of abstraction in more sophisticated programming languages (Java and .Net in particular), knowing how to use pointers and memalloc probably doesn't buy you all that much. You'll never use them directly, and you're so far from the underlying constructs you're better off just learning the best practices for the language of your choice. Otherwise, you're just guessing at what's going on under the hood.

      --
      The higher the technology, the sharper that two-edged sword.
    2. Re:Truth by Anonymous Coward · · Score: 0

      The fact that you called your program "electrical engineering-like" made me a little interested - a quick uwdir search later and I confirmed my hypothesis. Greetings from one tron to another! Also, yes, it is horrifying. The school essentially sold itself out to Microsoft some years back. What's worse is GeoEng and this awful new Management Eng program: they are taught VB.

    3. Re:Truth by mmyrfield · · Score: 1

      This sounds a lot like my experiences. Taking an Electrical Engineering/Computer Science degree (Eng Phys CPSC extension), I wonder how many 'code-monkeys' actually know how logic is executed or why instructions are in 8 (or 2^n) byte chunks.

      Regardless, I think the watering-down of the curriculum is occuring in every discipline. Everybody is told that university is the place to go to get a good job; instead of weeding out those that don't have what it takes, the universities have made it easier to get in and easier to get through.

    4. Re:Truth by broken_chaos · · Score: 1

      uwdir, huh. I'm another one.

      I'm only in first year, however - software (the aforementioned "electrical engineering-like"?). Hope things don't turn out too badly for me...

    5. Re:Truth by broken_chaos · · Score: 1

      (After a little more digging, no, not the "electrical engineering-like". But yup, same school.)

    6. Re:Truth by Mongoose+Disciple · · Score: 1

      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 kinds of programming, and classes in programming computers to solve math problems.

      If some horrible apocalyptic event had wiped out all computers on Earth shortly after my graduation, I probably could've built you a 286 out of NAND gates given enough time and a giant pile of NAND gates. If those survived for some reason.

      Unfortunately, the apocalypse did not immediately follow my graduation and I was unable to roam the wastelands of the near now like Mad Max's closest building-shit-out-of-NAND-gates equivalent. Instead I became the kind of developer who whores for businesses. Solving those kinds of problems rather than the 'close to the metal' kind of problems turned out to be what I enjoyed.

      I've used a database in nearly every project I've worked on in my career. My exposure to databases as an undergrad was zero. I tend to use languages like Java or C# for most of my work. My exposure to them as an undergrad was zero. I use object oriented design patterns and principles nearly every day. My exposure to them as an undergrad was... half-assed at best. Yes, here's C++, it has classes. Next week we'll talk about something else and never mention that again.

      For what I do now, my college education was of little real value. If I had become a game programmer, or someone who writes device drivers, or works on embedded devices, or a thousand other things, my education would've been great. Unfortunately, when you pick which colleges to apply to as a high school junior you're not really equipped to make those decisions. Even if you understood what school was good for what, your likelihood to understand what will really make you happy isn't great.

      So, I don't know. I'm not convinced teaching Java damages students so much as prepares them for different kind of jobs. I don't think it'd be good if all students learned the Java way and I don't think it'd be good if all students learned the C way. I've worked with brilliant people who started out with a language like Java and -- in that kind of project -- were awesome programmers who never would have had the right mindset to wrap their heads around pointer math. C and other 'close to the metal' languages never will and should never go away, but equally it's very possible now to be a good programmer and not understand those concepts. The abstractions have evolved to that point.

    7. Re:Truth by pavera · · Score: 1

      I agree with your general assertion that the market is broad, and knowing any given specific technology may not be the best for whichever job you eventually land in.

      However, having worked with both types of programmers (IE those who went through a rigorous CS program and those who went through a "here's java it'll solve all your problems" program) regardless of what language the current project is in, the rigorous CS program types are better hands down, every time.

      Yeah you may not know exactly how the JRE is allocating memory, but you are able to look at a chunk of code and say "well holy geeze, this program is going to have to allocate a whole ton of memory right there where its loading a select * query directly into a single array... and lets see yeah that table has 4.8million rows in it... " This sort of thinking completely baffles and befuddles most "java only" type programmers I've met. They consistently and repeatedly make these kinds of mistakes because they haven't ever been exposed to lower level programming. They don't even grasp the concept that RAM is finite, that CPU cycles are finite (well, I just ask the computer for more RAM, and it gives it to me..).

      Most of my projects these days are in python, yeah yeah its high level, and its interpreted, so its slow! Well, sure, except you can escape out to C if what you are trying to do really needs the speed. It has garbage collection so you don't *HAVE* to think about memory allocation. But I always do. I always run my code through profilers, test it on a large load, make sure it is acting sanely both in CPU time and memory consumption.

      This is not what Java or these dumbed down CS curricula teach students. Besides the fact that just firing up the JRE eats 256-512MB of ram, so you wouldn't even notice if your app which is adding up invoice totals and should only need 512k of RAM to do its work is actually using 5-20MB of RAM because you're loading whole tables from the DB into memory, which isn't a problem on the test DB (only 5-20MB), but when you throw that program at the production DB with 2.8TB of data... well most computers throw up when you try to load that into RAM.

      My point is simply that learning bigO, memory allocation, and the general trade offs between CPU usage and Memory usage which used to be taught in any decent CS program these things are 100% necessary to any programming career. Also, data structures and basic algorithms are good too, even if you aren't going to write a system to generate btrees, its good to know how a database index works... It's good to understand why regenerating indexes takes a long time, its good to know what operations take a lot of memory or a lot of CPU and WHY they take them.

      I learned programming in Pascal, C, and C++, I've never touched assembly. I feel I am an effective Java, c#, and python programmer BECAUSE I understand the basics of what the underlying system is doing. So sure in a higher level language you don't know the exact implementation of how it is dealing with dynamically allocated RAM, but you know its happening, and you understand the basic concepts of linked lists, heaps, stacks, and pointers and how memory management is probably being done. Without these basic foundations I don't think you can be a very effective programmer in any language.

    8. Re:Truth by Anonymous Coward · · Score: 0

      I'm a grad student in CS theory. I code in Python. When I take courses with engineers writing code in C/C++, my Python code tends to outperform theirs. I'm pretty sure this has to do with larger algorithmic issues that don't get enough attention when people code in low-level languages. Sure, you can optimize the hell out of all sorts of operations, but if you're implementing an inferior algorithm, its not going to matter so much.

      If computer science were the study of computational machines, C++ would be a great language. However, I'm pretty sure its supposed to be the study of computation, which tends to be easier to understand in higher level languages.

    9. Re:Truth by Manatra · · Score: 1

      If it's the University of Waterloo that you're talking about, you learn a whole lot more than Java and .NET. In fact, in talking with some of my upper year friends I've found that they haven't used Java much, if at all since their 3rd term of school. That said, the school has been teaching Java and C# to first years for awhile now, in addition to a Scheme entry point. However, at least on the Computer Science side of things, the school is phasing out Java completely for first year students next year, and having Scheme and good old fashioned C be the only entry point for those majoring in Computer Science. Unfortunately I know little about how the software engineers are affected by this.

    10. Re:Truth by Tablizer · · Score: 1

      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.

      I am not sure I fully agree with this. Yes, every knowledge helps to some extent, but I think you are exaggerating.

    11. Re:Truth by synx · · Score: 1

      I'll disagree with you here - when you know Java and .NET but don't know anything about memory management, you produce horrible bloated junk. Oh, creating 100 MB/sec of garbage is bad? Who knew?!

      Maybe you can get away with hacking together some shitty system, but the second you go beyond that you are in trouble. A full and in depth understanding of how the GC system works comes in real handy at times. If you are trying to do anything at scale, you will need to know these things. Or at least you'll need someone nearby who can come clean up your mess.

    12. Re:Truth by tieTYT · · Score: 1

      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.
      Everyone says this but I've never seen anyone explain why. I'm going to believe it's wrong until someone actually chooses to elaborate. For the past 3 years I've been programming in Java and not once have I been faced with a problem and thought, "If I just remembered what I used to know about Assembly/C/C++, this would be trivial". If you can go 3 years without needing to know how to operate close to the "metal" it can't be that important for a Java programmer.
    13. Re:Truth by Pelam · · Score: 1

      At the beginning of my CS education in Helsinki, the hardest lesson was that I actually need to do some hard work to improve my skills and thinking.

      Luckily the Math Department was happy to trash my overconfidence :) The CS department took quite a bit longer to reach the same level of complexity and depth that forced me to actually work hard instead of just relying on my intuition.

      From what I gather, the global trend is to lower the bar and remove anything that might overwhelm people. In my view, being given challenges that seem too much at first is just the thing that is educational.

      I probably learned much more from the first courses that I just barely passed than from the courses that I just breezed through, although sadly it took years for the lesson to really sink in.

    14. Re:Truth by p0tat03 · · Score: 1

      FYI the tron program is more mechanical than it is electrical, mostly because the head honchos are mostly out of the mech department. That being said, our programming courses are lifted out of EE, instead of SE or CS. What's odd to me is that EE's do C# for many of their foundation courses, whereas mechs do most intro courses in C/C++. It's always seemed a bit ass-backwards. Mechs just want their math to work, whereas EE's are actually concerned with optimization and whatnot, clearly one group needs to be lower level than the other.

      This is especially true as most mechs do VBA and other simple scripting for mechanical calculations in the workplace, whereas EE's actually have to do embedded work!

    15. Re:Truth by p0tat03 · · Score: 1

      Hallelujah! That's great news :) IMHO the move to Java as an intro language was a horrible one, and a move to C (and Scheme! w00t) is great :)

    16. Re:Truth by Sinbios · · Score: 1

      Interesting, you did not have a C# course in Mechatronics? Both the Electrical and Computer Engineering programs include it as the first year intro to programming course, and it's pretty much analoguous to Java in the context here.

      --
      Anyone can "stand up for what they believe", but it takes a very brave individual to change what they believe. - Loundry
    17. Re:Truth by p0tat03 · · Score: 1

      No, Mechatronics takes GENE 121, which (at least when I took it), was all C/C++. Likewise, my first year data structures and algorithms course was also exclusively C++. Heck, the second year digital logic course was done mostly in assembly (what a great time that was). Through my entire time here at Waterloo I've never touched a course with a "high level" language (to the tune of Java and C# anyway, some /.ers would argue that C++ is high).

      I came from a primarily VB and Java background before entering university, and C/C++ totally blew my mind. IMHO there are FAR too many things taken for granted in Java, which while useful for teaching abstract algorithms, doesn't teach anyone how your machine ACTUALLY works, something only a cursory understanding of assembly and C would give you. A proper CS education IMHO should go from the low to the high.

    18. Re:Truth by X · · Score: 1

      University of Waterloo, right?

      --
      sigs are a waste of space
    19. Re:Truth by IamTheRealMike · · Score: 1

      Yah, totally. If you don't bother understanding the whole system you get programs that, say, start a couple of threads for every copy of that program running on the local subnet (it's p2p! it's cool! it's new! it's 2002!). And then some poor schmuck gets asked to speed it up a bit because some people complain that the program is slow their system swaps a lot.

    20. Re:Truth by NoOneInParticular · · Score: 1
      Okay. You've got an application on your hands that won't fit into memory. How do you go about calculating the size of your data structures. How big is an Integer in java? How big is an an int in Java? Why is a List of a million members a bad idea? How much does an object actually cost? Why is a List of a million members not that hot either? How expensive is a java HashMap? Do it just by reading the code? And if the objects are Serializable? If you've got some exposure to the bare metal, these are questions you will already have considered, or you might have a way of finding out. If all you ever done is Java, you will probably say: I dunno, we might need to move to a 64 bit JVM?

      Answer for those who care: Integer = 20 bytes (yes. 8 bytes for it being an Object, 8 more bytes for it being serializable, and 4 bytes for the actual data. Any reference to it will take another 4 bytes for the referral. This is for a JVM from a while ago, maybe they cleaned it up, but I doubt it.). An int is just 4 bytes. Given all the cache effects that these issues bring make Java a very efficient language only if you restrict yourself to that subset that it has in common with C. With no library support for resizable arrays of primitive types, this is a pain.

    21. Re:Truth by tieTYT · · Score: 1

      Okay. You've got an application on your hands that won't fit into memory.
      I've been working with Java for 3 years and that's never happened to me. And I've worked on applications that need to load 5 gigs of data into a database daily (I don't have 5 gigs of ram). I think it'd be moronic to pro-actively learn C or C++ because this situation may come up some day. There ARE valid reason to learn C/C++, this isn't one of them. The solution to this problem is to use a profiler and discover the cause. You don't ASSUME it's your list that's causing it. You could spend 5 hours reducing the size of it and then realize later that you have a memory leak (which is possible even in Java).

      If you've got some exposure to the bare metal, these are questions you will already have considered
      I believe they call that pre-optimization. You know what they say about pre-optimization don't you? Here's a hint: It's bad.
  11. Two things by zanderredux · · Score: 2, Insightful

    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...

    1. Re:Two things by CastrTroy · · Score: 1

      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.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  12. Does the language really matter? by HauntedCrown · · Score: 3, Interesting

    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.

    1. Re:Does the language really matter? by duffbeer703 · · Score: 1

      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 tendencies of the professors didn't help either. (one of the assignments was to simulate an old Sun architecture in C (which nobody had used), working alone, in 4 weeks) The problem that I had is that they were fucking over students in their junior/senior year who should have washed out in the freshman spring semester.

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    2. Re:Does the language really matter? by ian-urnovel · · Score: 1

      For me personally, a person whom went to university and learned c/c++, java, assembly etc etc learning a language and learning how to code is two different things which is why I would have to agree that people either understand the problem at hand (what a OS/coding is) or wanting to put the time in to learn the problem. I still use allot of languages in my day-to-day living, and find each language as interesting and useful as the next in its own context, but to say that Java is damaging students I would have to disagree, it is the students that want to learn or have the ability to learn about what the course/class they are doing, not one language can text a student that is not willing or unable to grasp the fundamentals of what coding/OS etc is. IMHO

      --
      http://www.urnovel.com - place to make your own stories
  13. What a "BS" degree really is by bradgoodman · · Score: 4, Insightful

    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.

    1. Re:What a "BS" degree really is by Anonymous Coward · · Score: 0

      because no-one would understand all the theory and crap behind compiler design, OS design, carnal maps, finite automina and all the other "fundamentals" Preach on brotha! It's getting ridiculous today with these "developers."

      I mean, half of them don't know what a Wamachoohoo or a Whizamathang is. I asked this scro the other day and he was totally like "A whaaat?"

      These schools need to go back to school.
    2. Re:What a "BS" degree really is by GregAllen · · Score: 4, Funny

      I'm assuming you mean Karnaugh maps. Although I'll be the first to admit that carnal maps sound pretty intriguing to the lonely engineer type. :)

      --
      Please help find my missing daughter: FindSabrina.org
    3. Re:What a "BS" degree really is by Anonymous Coward · · Score: 0

      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.

      If the world went post-apocalyptic tomorrow, i'd say there'd be a bit of carnal mapping going on!

    4. Re:What a "BS" degree really is by Anonymous Coward · · Score: 0

      carnal maps Ah, good old carnal maps. Used by the lazy to find the minimal amount of sexual reciprocation required.
    5. Re:What a "BS" degree really is by Anonymous Coward · · Score: 1, Informative

      It is a Karnaugh Map(http://en.wikipedia.org/wiki/Karnaugh_map), not a "carnal map". Mechanics get an ASE certification(http://en.wikipedia.org/wiki/Automotive_Service_Excellence), not an ACE certification.

    6. Re:What a "BS" degree really is by Tablizer · · Score: 1

      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,...

      The opposite may be true also: if nobody had experience dealing with the higher-level and relating to the customer's world, how to learn domains, and communicate with the customer, we'd be really slow out of the gate.

    7. Re:What a "BS" degree really is by slashdotmsiriv · · Score: 1

      >carnal maps, finite automina

      karnaugh maps and finite automata

      >Disclaimer: I'm an EE drop out

      I would have never guessed ...

    8. Re:What a "BS" degree really is by Anonymous Coward · · Score: 0

      because no-one would understand all the theory and crap behind ... carnal maps, ... on which everything is built.


      It's Karnaugh map, and it's only used to simplify logic circuits. It's useless in any kind of software development.
    9. Re:What a "BS" degree really is by MadMidnightBomber · · Score: 1

      Carnal maps: for those who can't find someone else's arse with both hands.

      --
      "It doesn't cost enough, and it makes too much sense."
    10. Re:What a "BS" degree really is by Strych9 · · Score: 1

      I do agree, people have to understand something about University level education:

      First off, the University system is designed to promote research, teaching is secondary. Yes there are professors who care about teaching, but the University system is more concerned with the prestige and money / attention research brings.

      Secondly, a Bachelors Degree is designed to prepare students for ... entering a masters degree which in turn is designed to prepare students to enter a ... PhD, eventually a post-Doc where the University gets virtual slaves. (At least in Canada, there is probably better money that flows around in the US system)

      Another way of looking at it, goes something like this:
      Bachelors: learning how to think
      Masters : learning to think about what other people have done
      PhD : learning to think for yourself

      If you are lucky you have Professors that are practical minded and will teach to that, but Computer Science is not really regulated from what I've seen here in Canada at least, and is vastly different across the board. At least with Engineering in Canada there is a minimum standard for accreditation, but that is still not saying all that much.

    11. Re:What a "BS" degree really is by rk · · Score: 1
  14. Re:Happy nigger day! by Entropius · · Score: 0, Offtopic

    Humans are apes.

    Nice troll, though.

  15. Its not 42? by LaskoVortex · · Score: 2, Interesting

    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 looking for work in 2-year appointments at the age of 35+. Moreover, average biomedical post-doc salaries are less than what a fresh BS in engineering would make. Biomedical sciences have suffered from an overabundance of training funds and from a drive for departments to have cheap labor in the form of hard working grad students chasing the carrot of a PhD. So they (1) outsource lecturing to part time lecturers, (2) train more biomedical scientists, (3) shrink the size of permanent faculty. Moreover pressures from tightening NIH funds exacerbate these problems.

    In short, training should not be easy or overly encouraged. Colleges should provide training based on market needs and discourage weaker students from saturating highly technical fields.

    If CS departments can weed out potential programmers by making their curricula tougher, they should really do it. This would ensure that CS people were actually talented and devoted to the trade and that compensation in the future would remain commensurate with training, unlike in the situation in the biomedical sciences.

    --
    Just callin' it like I see it.
    1. Re:Its not 42? by blahplusplus · · Score: 1

      "In short, training should not be easy or overly encouraged."

      Ahh but in capitalist america, it's all a question of who benefits! Creating an oversupply to screw the highly trained in order to lower wages, is a genius idea from a business perspective.

    2. Re:Its not 42? by piojo · · Score: 1

      If CS departments can weed out potential programmers by making their curricula tougher, they should really do it. This would ensure that CS people were actually talented and devoted to the trade and that compensation in the future would remain commensurate with training, unlike in the situation in the biomedical sciences. Why? You haven't even claimed that there is a glut in the CS job market. The students of medium talent that get turned away would not be well served by your policy, while they might perhaps find happy jobs if they are allowed to study programming.
      --
      A cat can't teach a dog to bark.
  16. On the other hand by lakeland · · Score: 1

    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?

    1. Re:On the other hand by ultranova · · Score: 1

      Think of how much deeper the understanding of Objects, ER diagrams, ... will be for those students who started with Java.

      Actually, I'm of the opinion that to really understand the point of objects, you first need to make do without them. After all, knowing that the Answer is 42 doesn't do you much good if you don't know what the Question is. In the same vein, you really need to try to debug a 10,000 line BASIC program to really appreciate procedural programming.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    2. Re:On the other hand by rprins · · Score: 1

      You mean everyone should DIE once, to really appreciate life?

    3. Re:On the other hand by dwye · · Score: 1

      > You mean everyone should DIE once, to really appreciate life?

      Or almost die/think that they are going to die. That is why people like roller coasters and horror/monster movies. And war, for that matter.

    4. Re:On the other hand by lakeland · · Score: 1

      You could well be right, and for entirely selfish reasons I hope so.

      I went through undergrad a few years before you. When I went through C was drilled into every student until they spoke it fluently. I also covered some OO concepts - polymorphic types and whatnot, and I remember the lecturer commenting on how hard it was for the students who he'd taught programming ten years ago as they were all having to come back and train themselves in OO, much like old Cobol programmers had had to train themselves in C a few years before that.

      Apart from a little OO, I covered architecture. But unlike the generation of students before me, the deepest we got was theoretical discussions on nand gates and the like. As a result I memorised enough about gates to pass the exam but didn't develop the mastery I did of C. Now I can barely remember what a FPGA is, and I wouldn't be able to even start designing one.

      I don't know how the curriculum changed after I left in any great detail. I know they shifted from C to Java, and they ran design paterns, specification writing, and a few other bits and bobs. Out in the 'real world' I gain quite a bit of benefit from the OO stuff I did, and I gain even more from C. However, I cannot believe that whatever they've replaced the hours saved by dumping C is likely of equal benefit to students coming out now.

      Perhaps it is how to approach a really big class library (Java, .NET, QT, whatever) and get your head around it? Perhaps it is a deeper understanding of user interface psychology? Whatever it happens to be, I have a hard time believing that uni has got any less useful for a comparable kid going through today.

      But, as I said, I hope you're right - if so it has to be good for my job security!

  17. Authors have a vested interest by ZombieRoboNinja · · Score: 2, Informative

    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.)

  18. Duh by cvd6262 · · Score: 3, Insightful

    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.

    --

    I'd rather have someone respond than be modded up.

    1. Re:Duh by digital19 · · Score: 2, Insightful

      I think the best teachers in many universities learn to dumb their courses down. Professors that give easy A's have full classes and get great reviews. The one's that push for you to actually put in the hours and don't give out A's are avoided at all costs.

    2. Re:Duh by Eli+Gottlieb · · Score: 1

      Of course, shit professors that can't remember which homework they gave out which week and grade tests for factors that the questions didn't specify also get empty courses and horrible ratings.

  19. I learned Java before C++ by kcbanner · · Score: 1

    I learned Java before I learned C++, and I didn't know anything about memory management. I had to learn it the hard way with C++.

    --
    Obligatory blog plug: http://www.caseybanner.ca/
  20. No! by EmbeddedJanitor · · Score: 2, Funny

    He means checking the actual magnetic core. You can do this with a magnetic compass from your Boy Scout kit.

    --
    Engineering is the art of compromise.
    1. Re:No! by mrami · · Score: 1

      Heh!

      The story reminds me of my first paid-for job, in 1993. I worked for a company that had customers still running on PDP-11/73's with RSTS/E (1993!). I had coworkers giving me shit because I didn't know COBOL. Sometime later, they needed to get their VAXen with VMS integrated into a TCP/IP Unix environment, and all that C and FreeBSD I had done in school started saving their asses.

      Ignorance, regrettably, is relative.

  21. Not mutually exclusive by compupc1 · · Score: 3, Insightful

    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.

    --
    -James
    1. Re:Not mutually exclusive by blueg3 · · Score: 1

      "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.

    2. Re:Not mutually exclusive by compupc1 · · Score: 1

      No, someone from ITT probably wouldn't be able to handle it either. You missed my whole point: it's not whether something is high-level or low-level that maks it worthy of learning in a CS curriculum. It's whether it requires a level of problem solving and technical sophistication that one would only really get in that environment. In other words, learning how to use libraries from Java some "trained code monkey" could learn how to do. That's the equivalent of writing a pre-processor include in C. But there *ARE* significant technical challanges that require modes of thinking that you simply don't need in C. Of course, the opposite is true too.

      Oh, and like it or not, unless you're talking theoretical research (e.g. computational complexity, AI algorithms, etc.), any applied CS ultimately is professional training. And you'd damn well better learn how to use an appropriate sampling of the tools at your disposal.

      As others have pointed out, the languages themselves are terribly important. What's more important is that students understand memory managment and semaphores. And by that same token, that they understand OO design patterns and SOA architectures. Java is a tool, just like C is a tool. If students understand the concepts and know how to learn new languages, then in my book you're well-prepared. But in order to do that, they need to be exposed to both low-level and high-level languages.

      --
      -James
    3. Re:Not mutually exclusive by blueg3 · · Score: 1

      CS is properly theoretical learning. Perhaps you're confusing "professional training" with "learning that will be used for professional purposes in the future". No. Understanding memory management, semaphores, how multitheading is done at a basic level, data structures, algorithms, etc. -- that is CS. Learning a language or how to use particular library routines is immaterial; it's only a tool to make learning CS easier.

    4. Re:Not mutually exclusive by try_anything · · Score: 1

      CS is properly theoretical learning.
      Not any more than physics is theoretical learning. Computer science goes in two directions: developing theoretical models to help understand real systems, and making new systems with the benefit of theoretical insight. In addition to theory, you have to learn measurement, experimentation, and ways of building systems. Traditionally, the discipline of "computer science" includes mathematicians who happen to work on problems remotely motivated by computer science, but we shouldn't attempt to excuse even those very few people from practical work. First, we can't figure out who they're going to be ahead of time; many who aspire to it will end up doing practical work. Second, many of those who land the coveted research positions have to teach practical CS courses. Third, if they're so damned convinced they're going to be theoreticians, a math major is better preparation anyway.
    5. Re:Not mutually exclusive by blueg3 · · Score: 1

      Learning libraries and languages is more akin to learning how to use a particular experimental apparatus than it is learning general experimental skills -- and no physics program in its right mind places any more focus on learning how to use a particular apparatus than is absolutely necessary to support a lesson in something useful.

      Particular measurement devices, like libraries and languages, are professional skills and aren't useful material.

    6. Re:Not mutually exclusive by try_anything · · Score: 1
      If I need a compiler to try out my theory, but every "particular" compiler is useless, then I'm stuck unless I can use a bunch of compilers at the same time, or maybe download and install the Platonic ideal corresponding to "compiler." See, I'm getting the hang of it!

      Seriously, particular knowledge isn't bad. It isn't polluting. The fact remains that you can't get a decent CS education without hands-on work, and whatever tools you use for practical work will be "particular" tools. A certain level of technical competence is necessary to experience the relationship between theory and practice, and it should be designed into every CS curriculum.

      Besides, the line between "particular" and "general" is impossible to draw. Using gdb to debug a C program on an embedded processor and using the Eclipse Java debugger to debug a Java GUI are remarkably similar. Set breakpoints, examine the stack, watch variables, skip the next 142 executions of this breakpoint, whoops! can't see much in code compiled without debugging info. A debugger may seem very particular, but debuggers are remarkably pervasive throughout programming and remarkably similar to each other. Using one compiler is similar to using the next. Doing code generation that targets one ISA will prepare you to do code generation that targets another ISA. Using one regular expression library is remarkably similar to using another.

      All of these things may sound ridiculously banal, but building real systems is remarkably banal, even when you're building them to test exciting theories. You don't deal with the banal by struggling proudly and miserably through it, you deal with it by mastering it so thoroughly you never have to think about it again.

    7. Re:Not mutually exclusive by Lodragandraoidh · · Score: 1

      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.


      That may be how the world works, but I have news for you: it works very poorly.

      Case in point, several years ago we put out an RFC to build a system. The winning bidder built the system in Java -- but using several obtuse libraries. For about a year this system worked - to what we thought was spec. But then traffic on the system reached a critical threshold - and the system bogged down to the point of being wedged, at which point we had to restart the application.

      After poking around the java logs -- we determined that the system had a 'virtual' memory leak. Basically their application was allocating resources that garbage collection was not collecting because the objects were still in scope. This quickly filled up the available memory - reaching Java's 'high water mark' setting.

      We rebuilt the system in Perl for the cost of our time - *without* using libraries - and it runs faster and more reliably.

      The key problem here is that individuals are approaching problems with a largely empty tool kit. They only know Java and some specific libraries that they may have used before. As the cliche goes: every problem is not a nail, and every tool is not a hammer. Undoubtably this individual never learned system programming basics - enough to know that he was over-engineering the solution in a way that was detrimental to the performance of the system.

      I am not saying 'never use java'. What I am saying is use the appropriate tool for a given job - and that takes understanding how to use various tools, and more importantly their strengths and weaknesses in a given problem domain.
      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
  22. Why should people have to learn difficult stuff? by Anonymous Coward · · Score: 0

    Really, isn't that what the dweebs are for?

    I find it ludicrous that someone with a CS degree would not understand how computers really work at the hardware & software level to whatever level of detail required by the task at hand. Anything less is just pure BS.

    rhb

  23. nonsense by j0nb0y · · Score: 4, Interesting

    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.

    --
    If you had super powers, would you use them for good, or for awesome?
    1. Re:nonsense by John+Courtland · · Score: 1

      DJGPP was awesome. I learned a ton about protected-mode memory management, about the lowmem area and all the weird tricks you had to play to utilize DMA and VESA. There were tons of great tutorials and guides on the internet around 1999. I'm glad things have become more available, but I'm definitely glad I had a chance to trudge through DJ's DJGPP and 32-bit DPMI Extender and learn what I did.

      --
      Slashdot is proof that Sturgeon's Law applies to mankind.
    2. Re:nonsense by Beliskner · · Score: 1

      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.
      There are plenty of people who program using bad C++ memory management, I think they will just be bad at memory management no matter what language they use. I think the transition to programming in Java is timed correctly. Programmers nowadays don't need to use the more error-prone C++, they can leave us professionals to deal with that, in the same way a C++ program doesn't have to mess around with TLBs and page tables, we let the Operating System deal with that. I regard Java as a new Operating System, making everything easy for the average applications programmer who needs to build a program that does something, and needs to build it *fast*. In terms of "logic creation" Java is faster to program because you don't have to deal with the lower level stuff that C++ has, the same way that C++ doesn't let you have to deal with the rubbish that ASM has. I regard machine code --> ASM --> C++ --> Java as a natural transition to gradually higher and higher level languages with advantages and disadvantages as you go up.

      Java has appropriate to teach new coders, because current machines like an AMD Barcelona with 2GB RAM can kick the ass of any older desktops/workstations and can run even badly coded Java programs with ease.

      Java objects fall out of scope so you get "memory management for dumbasses". Even if the coder implements everything in main() they should be able to spot that they can reuse the variables on the first refactor, so they would save the garbage collector some cycles, making the program possibly more efficient but making the code a hell of a read for a non-trivial program, hopefully the programmer will eventually spot this and "learn" to use functions to split up his program. Don't forget, you can mess up memory management in C++ and all you'll have is a memory leak, on modern systems this could be unnoticable, especially on 64-bit systems which can address huge amounts of memory and open a 100GB swap file for the leak, while the scheduler maintains the important stuff in RAM

      --
      A caveman dreams of being us, the incalculable power and riches. We dream of being Q, then what?
  24. flamebait? by sneakyimp · · Score: 1

    I bet the olde-tyme professors who taught these whiny new professors complained about C and C++, pining for the good old days of punch cards. Is it really any surprise that a move to higher-level programming construct has tradeoffs? By making your language easier to understand, you:
    1) Open it to a much wider audience, improving adoption rates among would-be programmers.
    2) Increase the number of applications written because it's supposedly more expressive (or less tedious).
    3) Increase the number of poorly-written programs due to the generally poorer skills of your programming community.

    There can be no doubt that there's a point of diminishing returns. I'm trying to imagine a graph in several dimensions but failing miserably due to my poor calculus skills. Some of the possible axes:
    * Language expressiveness
    * Number of applications written
    * Application efficiency
    * Users served

    Or something like that. In my mind's eye, this graph would plainly show that writing in assembler results in amazingly fast code but is such a pain in the ass that nobody ever does it any more. Likewise it would show that Ruby is great for fast prototyping but sucks in certain colossal and demanding production environments. This sort of tradeoff seems obvious to me.

    I often wonder if there is some way that an elegant, expressive programming language might somehow be more tightly coupled with the underlying hardware. Seems to me that the multi-core concept should have come much sooner. We need some kind of Isaac Newton/Einstein/Turing type of guy to really take a good hard look at the relation between hardware and programming language and see if there's a better way.

  25. Give 'em a good mix by EmbeddedJanitor · · Score: 2, Insightful
    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.

    --
    Engineering is the art of compromise.
  26. Everything is getting dumbed down by MikeRT · · Score: 3, Insightful

    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.

    1. Re:Everything is getting dumbed down by Aardpig · · Score: 1

      You Americans and your soft education system. Where I went to University, I didn't get given a single grade for three years. Then, I sat eight 3-hour exams within the space of 12 days, testing *everything* I had learned (about physics) over the previous three years. That's not the sort of thing you can cram for.

      This modular shite, where students learn for the exam and then forget, is worthless. At the end of my degree, I had the whole syllabus in my head at once. This experience -- of grokking the whole of physics as a gestalt, rather than digesting bite-sized and apparently unrelated chunks, as one would in a modular course -- has proven an invaluable experience throughout my post-University life.

      --
      Tubal-Cain smokes the white owl.
    2. Re:Everything is getting dumbed down by muecksteiner · · Score: 1

      Ah, and what makes you think that these "brilliant professors" who were just "unable to communicate" were, in fact, as brilliant as they pretended to be?

      After 10 years in academia there is one sad fact that I've learned the hard way: no matter how good someone's reputation is, and how massive their ego - if they cannot properly communicate what they are doing, they very often are not brilliant scientists who are "just" unable to communicate.

      Very often, these are the people who were just able to successfully play the system to get a plushy job as a tenured professor, and who have never had an original thought in their lives. In most disciplines of academia, you can get amazingly far by just pretending you are super-smart, and that your "research" (whatever that may be) is of essential importance. You of course need an ego of psychotic proportions to pull something like that off over many years, but unfortunately, these are not exactly in short supply in academia.

      And the current culture of "everything goes" at western universities does not help, either: in academic circles it is very hard to tell someone that his or her work is, in fact, worthless. It starts with the students - you are not allowed to be "too harsh" in your gradings, lest you might hurt their personal feelings. And ends at academic conferences - at such events, I've never seen anyone get up and tell someone who just presented something "excuse me, but what you just showed us was a load of garbage" - even if the stuff that was being presented was, in fact, nothing short of applied idiocy that would have gotten a student kicked out of a seminar. As soon as a "reputable name" is on the paper, no-one will lift a finger. And even if stuff gets rejected - well, there is always some other conference and journal, and at the end of the day, all that counts is the length of your paper list, and not its contents.

      And as soon as someone is tenured... Well, that person is set for life, irrespective of any qualifications. Usually there is no-one at the same university who is actually capable of judging the work done by a professor, and even if there was - saying something negative about a colleague is next to impossible amongst faculty. Even if the guy in question is really a complete fluke.

      And how does one get tenured without any qualifications? Well, the same basic problem at work: if a university is trying to recruit someone in a certain field, chances are that they do not have someone (yet) who is actually capable of judging the candidates that apply. And bringing in external specialists is not necessarily a lot of help, either: in any given discipline, there exists at least one cabal of people who watch their respective backs, and who look after their former pupils if and when they are looking for their own professorships. And who gets full backing by such a cabal (the members of which would invariably be contacted as external experts due to their visibility) is not determined as much by competence, but rather by secondary politics (i.e. who was a good boy, and sucked up to the luminaires in the field during their PhD days).

      Just a short rant...

      A.

    3. Re:Everything is getting dumbed down by Weedlekin · · Score: 1

      "After 10 years in academia there is one sad fact that I've learned the hard way: no matter how good someone's reputation is, and how massive their ego - if they cannot properly communicate what they are doing, they very often are not brilliant scientists who are "just" unable to communicate."

      As Einstein said, a person who cannot explain something in simple terms doesn't understand it well enough.

      --
      I'm not going to change your sheets again, Mr. Hastings.
  27. Computer Science by mlwmohawk · · Score: 1, Insightful

    I've been in the business for more than a couple decades now, and what I see is the same old problem:Interpretive languages vs Compiled or assembly languages. Make no mistake, Java and .NET are "interpretive" languages. Argue all you want about this or that special case, but the intention and design of these environments is the elimination of physical hardware.

    People who are uninterested in the nature of computers chose interpretive languages. People who are interested in computer internals use a directly translatable language like C, Assembler, or C++. This is not a value judgment, it just is.

    IMHO, computer science is not about theoretical virtual machines, but the practical implementation of complex concepts on limited physical computers. The way I see it, the former is masturbation and the latter is sex.

    1. Re:Computer Science by jmauro · · Score: 1

      [C]omputer science is not about theoretical virtual machines, but the practical implementation of complex concepts on limited physical computers

      Computer Science is about theoretical virtual machines. Computer Engineering is about the practical implementation. That is why one is called "science" and the other called "engineering", most people get confused on the two due to how most all Universities structure (or more correctly fail to structure) their Engineering and Computer Science courses. Computer Science has more to do with the Math programs than the engineering programs, but it's usually part of the School of Engineering so it becomes all mush in the curriculum.

    2. Re:Computer Science by russellh · · Score: 1

      I've been in the business for more than a couple decades now, and what I see is the same old problem:Interpretive languages vs Compiled or assembly languages.
      What's not the same old problem is that we're living in a time of code abundance. Google and you can instantly find tons of code that pretty much almost does whatever you need, ready for you to copy and paste and beat into shape. This is really a game changer. The young kids are good at finding stuff online, and are oriented toward finding lots of variations of the same thing, and pulling things together from many different sources. a major skill in the future of programming is exactly what is decried in the article - rummaging and cobbling together a solution. However, I don't think you can or should teach that in school because it can't be framed in an academic way; it's a purely practical skill in an ever-changing environment. What you can teach, however, are things like code archaeology - how the hell do you dissect a huge, opaque code base? how do you visualize it, analyze it. That is something that really matters now.
      --
      must... stay... awake...
    3. Re:Computer Science by Version6 · · Score: 2, Insightful

      In my not especially humble opinion, you are completely wrong. Computer science is the mathematics of computers. It may indeed be mental masturbation some of the time, but again in my opinion, masturbation is sexual activity.

      Analysis of algorithms, theory of computation, numerical analysis, syntax and semantics of computer languages . . . there is a long list of theoretical topics which sometimes aid in "practical implementation of complex concepts on limited physical computers" but which merit study even if they don't currently contribute directly to that end. Just like mathematics, there may be eventual applications which less limited computers will allow, or the process of studying these things will provide tools and insights into current problems.

      Even in the "practical" world, the real question is "Which is the right tool for the job?" Interpretive languages are sometimes the right answer (though I'm not sure that Java is ever the right answer myself--I try to be open-minded on that). I think they are particularly the right answer in the early stages of learning computer programming and often in "exploratory" or prototype work. For a professional programmer it's important to have a repertoire. For a beginner or a non-professional, "Bus error: core dumped" is a little harsh. And no one should have to use the horror that is C++.

    4. Re:Computer Science by Anonymous Coward · · Score: 0

      Then I am happy to say that I am no longer a virgin. (Though I do tend to spend a lot of time theorizing...)

    5. Re:Computer Science by Anonymous Coward · · Score: 0

      IMHO, computer science is not about theoretical virtual machines, but the practical implementation of complex concepts on limited physical computers. The way I see it, the former is masturbation and the latter is sex. Then I don't see how you can expect any compsci student to ever get the latter.
    6. Re:Computer Science by Anonymous Coward · · Score: 0

      It's fairly obvious that you don't know jack. Java is compiled. Twice. The special case is when it isn't compiled (this requires third party JVMs or -Xint, however, you'd likely still be compiling it first into bytecode). There's also JET and GCJ if you're into that sort of thing, both of which has similar offerings to .NET, which can compile and link to an executable.

      I'll also mention that your definition is CS is wrong, just to emphasize what everyone else has posted.

    7. Re:Computer Science by Anonymous Coward · · Score: 0

      Dude, did you just called Dijkstra a wanker?

    8. Re:Computer Science by johannesg · · Score: 1

      Same as physics is about theoretical universes and chemistry is about theoretical molecules, you mean? I think you are confusing a helpful theoretical *model* (such as a turing machine) with the overal purpose of the study. The theoretical model is helpful in teaching and understanding algorithms and datastructures, but it is not the final goal of the study. Making that final link to reality, where integers have a finite size, floating point numbers are inaccurate, and speed and memory are limited, is not dirty or unworthy of academic attention. Indeed, I have trouble thinking of another study that eschews reality quite as badly as computer science.

      Ask yourself this question: What am I studying? If the answer is, "a theoretical model of computation that cannot exist in our physical universe", fine, go right ahead and study it, but don't be offended if the rest of the world is simply not interested in funding your distractions - or in offering you employment.

      The mistake, I believe is in thinking of computer science as a branch of mathematics. It isn't, except in the extremely narrow view of that same theoretical model.

      Oh, and for the record, I'm a computer scientist myself, with academic credentials and everything. But after learning about turing machines and more math than I'd care to remember at this point, I went on to learn C, and a few other practical bits. I don't think being tainted by the real world in that manner has hurt me in any way.

    9. Re:Computer Science by mlwmohawk · · Score: 1

      I wish I could respond to multiple posts with one, but this will have to suffice.

      In my not especially humble opinion, you are completely wrong. Computer science is the mathematics of computers

      Perhaps my post was misunderstood. Another response stated: Is chemistry the study of theoretical elements and molecules? Of course not. It is the study of "real world" elements and molecules and we have several models which we study and learn, but eventually it is always about "real" molecules and elements.

      Similarly, computer science must be about real computers. With real limitations. Yea, sure theoretical models are nice, but algorithms must work on real computers or they don't work.

      What is missing from the Java mentality is real knowledge of the science, the real computers and how they work. Memory limits are real. Numerical limits are real i.e. 64 bits vs 32 bits is a real world issue, and knowing that your are on a 32 bit system may allow you to write code that uses half as much memory.

      I'm very "theory oriented," but pure abstract theory is meaningless unless it has some practical application. The whole field of computer science is a set of maths and logic around getting basically stupid devices to do complex work.

      Put another way, thinking in EE terms. Java is to computers what the theoretical op-amp is to electronics. Yes, op-amps are a mathematical model of an amplifier and good for designing circuits, but you wouldn't expect an EE to disregard the work of designing "real" amplifiers as not relevant because op-amps exist. More to the point, like java, op-aps don't work perfectly on the edge conditions either.

    10. Re:Computer Science by jmauro · · Score: 1

      In the above example, you're confusing chemists with chemical engineers.

  28. Programming is different by Weaselmancer · · Score: 4, Insightful

    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.

    --
    Weaselmancer
    rediculous.
    1. Re:Programming is different by Lisandro · · Score: 1

      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.

    2. Re:Programming is different by Lisandro · · Score: 1

      Sorry about the grammar errors - i need to check twice before submitting :(

    3. Re:Programming is different by Tablizer · · Score: 1

      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.

      One of the selling points of PHP is that one *can* fairly easily make libraries for it in C if need be. This allows lower-level programming to be easily mixed with higher-level so that one is not forced to choose between a close-to-hardware language and a high-level one. Java didn't take this approach and it may cost them in the longer run.

    4. Re:Programming is different by Anonymous Coward · · Score: 0

      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

      VHDL programmers want to have a talk with you about your high level language C and how you don't know anything about hardware.

    5. Re:Programming is different by try_anything · · Score: 1

      yes, bytecode has to be interpreted
      Except when it's been JIT compiled to native code. And except when it's translated by hardware directly into microcode, which is the same thing that happens to "native" code on the same platform.

      The notion that Java can is a suitable C/C++ replacement for everything but drivers is sadly common
      That's ridiculous. Where did you pull that silly strawman from? Looking back to the GP, he says that for 10% of the tasks he has faced, Java isn't a suitable replacement for C or C++. Why don't you look over this thread and find someone willing to profess that belief?
    6. Re:Programming is different by starfishsystems · · Score: 2, 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 dialect was Interlisp.

      The Xerox model 11xx AI workstations used Interlisp as the system language. Lisp device drivers and network stacks were also implemented for the MIT Lisp Machine and its commercial derivatives based on variations of MIT Lisp and later Common Lisp. Note particularly that Lisp is running in silicon on these systems. There is no virtual machine.

      These systems were not a great commercial success, because they entered the market as very exotic and very expensive research workstations at exactly the same time as commodity microprocessors were experiencing exponential growth. The various Lisp systems just couldn't keep up with commodity growth effects on price/performance. There was nothing functionally lacking with them, and I can say from firsthand experience that it was a pleasure to work on their operating systems.

      I'm not convinced that I would enjoy working with an operating system written entirely in Java, but there's no reason such a thing couldn't exist. If a JVM can perform acceptably on top of a foreign processor architecture, it should only perform better without the virtual machine overhead.

      --
      Parity: What to do when the weekend comes.
    7. Re:Programming is different by Chandon+Seldon · · Score: 1

      One of the selling points of PHP is that one *can* fairly easily make libraries for it in C if need be.

      This is true for most programming languages. It's very easy for the "high level scripting languages" like Perl, Python, Ruby, Lua, Pike, moderately harder for languages like OCaml and Erlang, and still possible for languages that live "off in their own world" like Java and most Lisps.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    8. Re:Programming is different by Tablizer · · Score: 1

      Possible, but not as easy.

    9. Re:Programming is different by Anonymous Coward · · Score: 0

      One of the selling points of PHP is that one *can* fairly easily make libraries for it in C if need be...Java didn't take this approach and it may cost them in the longer run.
      WRONG WRONG WRONG
      JavaTM Native Interface (JNI) is a standard programming interface for writing Java native methods and embedding the JavaTM virtual machine* into native applications. The primary goal is binary compatibility of native method libraries across all Java virtual machine implementations on a given platform.

      http://java.sun.com/j2se/1.5.0/docs/guide/jni/index.html

      The parent post even mentions it.
    10. Re:Programming is different by Anonymous Coward · · Score: 0

      > All those JNI libraries that Java needs to actually
      > talk to your machine - they're written in C.

      Depends... just because most implementors out there have no better idea than writing this in C does not mean it has to be that way or was ever intended to be regarded mandatory.

      > AFAIK, nobody is writing an OS or even drivers in Java.

      "As far as YOU know" is far enough from truth to qualify as unnecessary statement. You might consider researching the topic beforehand the next time you make such "nobody" or "never ever" statements (start with jNode, Joe, Jikes RVM etc...)

      > I'd even bet that the first few implementations
      > of Java were written in C/C++.

      Seriously, I think this is still true of most implementations today... but just because most implementors out there have no better idea than writing this in C/C++ does not mean it has to be that way. Some would possibly prefer D to C and there's virtually no "limitation to certain syntaxes" as "the only ones suitable for building a 'managed environment' (aka VM+JIT)".

      Obviously the original post was a "me too complain about stupid programmers" rant and to get more attention, the Java-buzzword was thrown in. You should not have wasted your valuable time with adding something to such a thread. my 2c. But since I'm making the same mistake now, I won't blame you for it ;-)

    11. Re:Programming is different by Anonymous Coward · · Score: 0

      I'd even bet that the first few implementations of Java were written in C/C++.

      Erm, I'd even bet you'd have a hard time finding one that isn't written in C/C++ *today*. Heck, i cant see anything replacing C/C++ for a VM for at least another decade.

    12. Re:Programming is different by petermgreen · · Score: 1

      and still possible for languages that live "off in their own world" like Java and most Lisps.
      possible but much harder, this is one of the big differences between java and .net afaict. With java if you want to use an existing library written in C you have to write a peice of C code in a seperate file that uses rather unfriendly libraries to talk to the java code and then calls into the C library. Then you have to modify your build system to take account of compiling that code seperately. With .net afaict you can just use some form of unsafe block and immediately start writing native code.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    13. Re:Programming is different by Lisandro · · Score: 1

      Except when it's been JIT compiled to native code. And except when it's translated by hardware directly into microcode, which is the same thing that happens to "native" code on the same platform.

      No, JustInTime is nice and dandy, but as long as there's a program converting bytecode to native code, your code is still interpreted, which is done at runtime. It's simple, if your CPU can't execute the code directly without a third party, you're interpreting it for it. The way in which you interpret is irrelevant.

      That's ridiculous. Where did you pull that silly strawman from? Looking back to the GP, he says that for 10% of the tasks he has faced, Java isn't a suitable replacement for C or C++. Why don't you look over this thread and find someone willing to profess that belief?

      No, the GP said there are certain tasks for which only C makes sense currently, which is true. This can be interpreted as Java being suitable to replace altogheter compiled languages in every other task, which is wrong, hence my comment - based on MY personal experience. My wording was poor in that last post, but you're reading too much into it.

    14. Re:Programming is different by Anonymous Coward · · Score: 1, Insightful

      AFAIK, nobody is writing an OS or even drivers in Java.

      At least those people are:

      http://jnode.org/

    15. Re:Programming is different by DeadManCoding · · Score: 1

      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. I totally disagree with this opinion. And the reason is that a bad instructor teaching Java will not teach pointer, proper allocation, and proper garbage collection. A solid instructor that knows low level programming will know how pointers and allocations work, and will relay that information to students. The college I attended forced me to learn basic pointers and algorithms via psuedo-code, at which point it made learning Java right afterwards much easier. But what truly helped was having the same instructor teach basic programming knowledge, basic Java, and then advanced Java.
      --
      "The only constant in the universe is change." - Unknown author
    16. Re:Programming is different by VGPowerlord · · Score: 1

      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.

      While most of this is on track, in a garbage collected system, scope is the one thing you DO have to worry about... at least in a long running program.

      If a variable doesn't fall out of scope, its data can never be garbage collected. Moved to virtual memory, yes, but not garbage collected.
      --
      GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    17. Re:Programming is different by DragonWriter · · Score: 1

      Java is a virtual machine.


      The Java Virtual Machine (JVM) is, of course, a virtual machine. Java is a statically-typed, object-oriented programming language. It is most usually compiled to bytecode which is run on the JVM, but it compilers are available to compile it directly to native code as well either through byte code or directly.

      When Java is the first thing you learn, you learn sloppy IMHO.


      You learn sloppy if you are taught sloppy. It doesn't really matter if what you learn first is C, C++, Java, BASIC, Scheme, FORTRAN, Ruby, Haskell, or Erlang. There are some concepts that Java isn't ideal for teaching, but then, that's true of every language.

      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.


      Yes, a complete education in programming needs to cover a wide range of environments, languages, and problem domains, and insofar as it misses some of those, the environments, languages, and problem domains overlooked will present notions that are new if encountered later.

      This doesn't meant that learning Java first is bad because system work will be "new" after it. It does mean that learning Java exclusively may be limiting.

      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.


      Actually, if you learn to program well in a garbage collected language, you'll need to think about this, too. Which is probably why introductory books on Ruby and Java that I've seen tend to discuss it.
  29. Seen piss-poor Comp/Sci teaching firsthand... by javaC_CodeMonkey · · Score: 0

    Before I retired from the military, I taught an Air Force ROTC course for four years (BS/MS Comp Sci), where I routinely tutored engineering/comp sci students (cadets) in programming. I was amazed that engineering students were being taught Java (in their junior year) instead of C/C++ (who writes drivers in Java??). Also, they (the grad assistants) weren't even teaching about debugging: inspecting/evaluating, breakpoints, etc., leaving the poor students absolutely helpless. After I explained these, I told them to "gently" prod their profs/TAs for this information as its fundamental to delivering even functional software on a reasonable schedule (of course more to it, but these were new students) and all deserved to understand it. I had even heard anecdotal stories about students changing out of engineering BECAUSE of the java course-- why?!? Dumbing down the curriculum isn't going to help, but teaching (truly teaching it and helping ensure they understand it)-- you have to know how a linked list works (and even better, Big-O, etc.) before you just start slapping together your java using the standard libraries these days. You have to know about profilers, and should know fundamentally (not that its practiced that much) formal specs. If anything, make them more rigorous on the comp-sci side. The senior level shouldn't be when they learn about software engineering methodologies beyond waterfall-- these should at latest be a fall junior topic, if even a sophomore level. Most of all, teach them THERE ARE NO SILVER BULLETS (Rapid Development, McConnell: MS Press). My two cents.. JC-CM

    1. Re:Seen piss-poor Comp/Sci teaching firsthand... by glitch23 · · Score: 0

      Dumbing down the curriculum isn't going to help, but teaching (truly teaching it and helping ensure they understand it)-- you have to know how a linked list works (and even better, Big-O, etc.) before you just start slapping together your java using the standard libraries these days. You have to know about profilers, and should know fundamentally (not that its practiced that much) formal specs. If anything, make them more rigorous on the comp-sci side. The senior level shouldn't be when they learn about software engineering methodologies beyond waterfall-- these should at latest be a fall junior topic, if even a sophomore level. Most of all, teach them THERE ARE NO SILVER BULLETS (Rapid Development, McConnell: MS Press).

      At the very end there it seemed like you were starting to mix (I'm sure you are smart enough to not confuse them) CS with Software Engineering. I wish the college I went to took more time to show us how to debug our programs (we did do some symbol table stuff in the Assembly class) and there was talk of a SW engineering course but I never had the chance to take it because it started my last semester there and I didn't have time to take it. But the SW engineering course was just that, a course. There is a lot more to that than what can fit into a single course and it was a 400 level (advanced topics, i.e. optional) course to the CS program. It's SW engineering where student should learn exactly what you called software engineering methodologies. At least one course should be offered for this (even if many consider it boring) so that students get an idea for how the real world develops software. However at West Virginia University (up the highway from me) they offer a Master's degree in Software engineering. I think that is much more appropriate than trying to fit a bunch of it in at the undergraduate level and I apologize if trying to explain all sw engineering at an undergrad level wasn't what you meant.

      --
      this nation, under God, shall have a new birth of freedom. -- Lincoln, Gettysburg Address
  30. The usual, yes and no. by jd · · Score: 3, Insightful
    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.)

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
    1. Re:The usual, yes and no. by blitzkrieg3 · · Score: 1

      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.
      A teacher like the one you mentioned is likely to catch a lot of flack from parents and administrators. This is why immigrants from Asia and Europe usually complain to teachers that they're kids are not getting enough work. First we have to recognize that we baby our children to much, and then we have to make sure that administrators don't just have an interest in the paycheck and do have a passion for the students, and then do what you suggested. And that's just the tip of the iceberg...

      Doesn't seem too tough.
      On the contrary, this is a very hard problem.
  31. command line life partner? by peektwice · · Score: 1
    All this whining, albeit justifiable got me thinking... TFA says:

    we'll have people use nice visual interfaces where they can point and click and do fancy graphic stuff and have fun
    I love the shell and CLI tools just like any other Unix geek, but I couldn't help but wonder if this quote had anything to do with this previous slashdot post.
    --
    Other than this text, there is no discernible information contained in this sig.
  32. Big Assumption by Anonymous Coward · · Score: 0

    That all computer work is the sane as yours. The Net? Desktop? O/S? Embedded?
    60% of my tasks are ASM and C. That is all the CPUs will handle.

  33. Pascal by QuietLagoon · · Score: 1
    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#?

    1. Re:Pascal by Diordna · · Score: 2, Insightful

      Because no one teaches courses in C#...except for my freshman-level game programming course using XNA on a grant from MS.

    2. Re:Pascal by QuietLagoon · · Score: 1
      Because no one teaches courses in C#...except for my freshman-level game programming course using XNA on a grant from MS.

      Precisely. Now, with java out of the way, there would be more of a demand for Microsoft's c# to be taught, and Microsoft would not have to bribe people with grant money to teach c#.

  34. Good for Comp. Sci. Bad for Comp. Engineering. by ifakemyadd · · Score: 1

    Most of my classes right now are in Jave. I do most of my Co-op in C. OS-stuff, and lots of pointers. Most of my co-workers are computer engineers, and I'm a Compsci major instead. The algorithms interest me most, and are most interesting in my studies. That's where Java's been nice to me; abstracting levels so I can really understand the Algorithm quickly. However, it doesn't help much with software engineering. I've never needed to implement a new algorithm.

    So I'd have to agree that Java doesn't you be a better software engineer. But I'd disagree that it makes you a worse Computer Scientist.

    And in my department, C.S. ins't a professional degree; its not part of a tech school, not engineering. It carries similar weights to a physics degree as opposed to a M.E. degree. Algorithms are the focus. Implementations are an exercise. The program isn't geared towards making good programmers. Its geared towards making good algorithm developers.

  35. And this is why... by theJML · · Score: 3, Informative

    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...

    --
    -=JML=-
    1. Re:And this is why... by TheMCP · · Score: 2, Interesting

      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 produce various printable reports, some just of regurgitated data and some of statistical analysis thereof. It had to have interfaces which could be used by the support technicians to log data, and by the customers to view the status of their requests and make comments. These interfaces had to be useable via the internet from several campuses, in a mixed platform environment. Commercial systems for the purpose ran at about $250,000 for the cheapest suitable application I found, and that one would require additional consulting costs for configuration (which would take a month or two between waiting for a consultant to be available and actually doing the installation and configuration) and didn't tie in with our existing relational database or single signon solutions.

      How long would this take you to program in assembly? (Hint: if your answer isn't measured in man-years, I'll laugh at you.)
      What would the cost be for all that programmer staff time? (Hint: too much.)
      How long would my team have had to go without the new application? (Hint: we would have needed it long before you'd finish.)

      It took my team of programmers one calendar month to write a java/jsp/jdbc/sql web application that met all requirements and played nicely with our existing systems and was ready for use the minute it was done. If I was doing it again today, I'd use a higher level language and probably have it working in two weeks or less. The staff time cost $10,000.

      So, the university saved $240,000+ because we had a high level language available to us. So why should I have wanted to do it in Assembly, or even C ?
  36. Java not the problem by mandelbr0t · · Score: 3, Insightful

    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.

    --
    "Please describe the scientific nature of the 'whammy'" - Agent Scully
    1. Re:Java not the problem by John+C+Peterson · · Score: 2, Interesting

      As an educator, I see the other side of this a lot. For everyone who complains about the lack of formal math in the curriculum, I see students who would never survive 2 years of calculus and yet get good jobs in the IT community. There are many students who can't handle intense data structures or low level programming but do fine as network administrators. Over the years, I've seen computer science broaden incredibly. When I was in school, it was obvious what you had to study: low level programming (assembler and Pascal), algorithms (Knuth!), graphics, theory, numerical methods, computer architecture (Bell and Newall), operating systems, some high level programming language like Lisp, and that was it for just about everyone. We always look back to the "good old days" when things were so clearly defined. I'd like to teach a more rigorous program - some catagory theory (just kidding!), some formal methods, Haskell, low level C programming, serious software engineering, whatever. But I'd lose most of my students for no good reason. If I wanted to complain about something, I'd complain about lack of communication skills among CS graduates. That's something that we can address in higher ed that really impacts everyone with a CS degree, not just some narrow part of the field. Employers should quit whining and do a better job of looking at the experience and capabilities of their applicants. You can't assume a CS degree means programming. Don't expect us to put all the things you need in the core curriculum - look hard at the advanced courses that an applicant has taken. It's not dumbing down - it's a natural expansion of the field that keeps reducing the common core in CS.

    2. Re:Java not the problem by IWannaBeAnAC · · Score: 2, Insightful

      It is called Computer Science. What has gone wrong with the CS field that it is now turning out people to work as network administrators? What does that have to do with science? If you can't survive 2 years of calculus (or something of similar standard, it doesn't have to focus on calculus, perhaps group theory, algebra, statistics, discrete mathematics, etc), you shouldn't be doing any kind of science degree.

      Computer science != software engineering != information technology. But it seems that computer science programs have lost their purpose. It was happening at the school where I was too, by third year it had become a haven for the lazy and less bright students that couldn't handle the workload at physics, mathematics, chemistry etc. This was 10+ years ago, so I expect it is even worse now. I can see the day when computer science gets thrown out of the science faculty, actually. Perhaps into business/commerce, or even away from the university sector completely, into a vocational training school.

    3. Re:Java not the problem by ciggieposeur · · Score: 1

      If I wanted to complain about something, I'd complain about lack of communication skills among CS graduates. That's something that we can address in higher ed that really impacts everyone with a CS degree, not just some narrow part of the field.

      Thank you. My undergrad CS required two semesters of technical writing which worked WONDERS on making me a better fit into my first real job. Now I am working on a MS in chemical engineering and seeing a huge difference between the CS/IT world and the engineering world. I feel like back in the 90's CS became a sort of haven within the corporate world; programmers could dress in relaxing clothes, enjoy more flexible working hours (due the common necessity of night duty), and avoid much of the "corporate bs" that most other white-collar jobs had to deal with. But then the dot-com brought along with it a "geek counter-culture" such that it was expected that one could only prove themselves "hardcore" by dressing in boots and black t-shirts and such in contrast to "the suits", and now at the career fairs I see that all of the inappropriately-dressed students are from CS.

      I feel like academia tolerates this geek counter-culture when it really should be challenging it and insisting that students realize that the geek culture can be a real liability.

  37. Generation gap by Mr2001 · · Score: 3, Interesting

    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?

    --
    Visual IRC: Fast. Powerful. Free.
    1. Re:Generation gap by Lodragandraoidh · · Score: 1

      A key aspect of computer science is understanding the history of computers and computer development, from the earliest mechanical calculators to the present high speed systems (both those ideas that worked, and those that didn't...to paraphrase Alexander Bell when queried about all his hundreds of failures, "now I know 500 ways *not* to make a lightbulb").

      This would include understanding that magnetic core memory was a precursor to transistor based memory systems.

      This is also the source of the term you used: 'core dump'.

      Now, I may have never worked on a system containing magnetic core memory - but I understand the concept, its historical significance in the advancement of technology, and would be able to either figure out what the old timer said from context, or be smart enough to ask the question in a way that he would be able to clarify it for me in reference to a modern machine.

      The CS waters are deep. Most only swim on the surface. Some few dive deep.

      To grok, or not to grok; that is the question that should concern you.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    2. Re:Generation gap by ToasterMonkey · · Score: 1

      I think he knew that already. The term we don't understand is "core stack". I've never heard of it either, but I think the parent post is on the right track with stack trace from a core dump. In this case, I'm fairly sure the origins of "core" are irrelevant and possibly misleading.

    3. Re:Generation gap by Mr2001 · · Score: 1

      A key aspect of computer science is understanding the history of computers and computer development [...] This would include understanding that magnetic core memory was a precursor to transistor based memory systems. If you look carefully at the end of my first paragraph, you'll see that I know what core memory is. I still don't know what a "core stack" is, as it relates to debugging a program. A stack trace that's stored in a core dump file? The stack trace of a running program?

      I understand the concept [of core memory...] and would be able to either figure out what the old timer said from context, or be smart enough to ask the question in a way that he would be able to clarify it for me in reference to a modern machine. For all we know, that's what the young engineer in the story did. But the aftermath wasn't described; all we heard is that the old-timer thought it was a shame that this youngster didn't know the meaning of a term that, apparently, none of us on /. have ever heard either.
      --
      Visual IRC: Fast. Powerful. Free.
    4. Re:Generation gap by jschrod · · Score: 1
      I've got a M.Sc. and a PhD in CS, both with honors, with a solid grounding in math. (When I studied 25 years ago, this was a given, undergrad studies in CS and math were the same for 70% of our courses.) My field is computer languages, in particular formal semantics. I read ACM proceedings in the evening, for fun. I have actually used systems with core memory when I was young.

      With this background, let me tell you: As so many others here, I have no idea what he could have meant with core stack. Maybe that the cores where typically stacked in planes and a memory word was distributed over these planes. But it really is not a term that is in wide use.

      --

      Joachim

      People don't write Manifestos any more -- what's going on in this world? [Frank Zappa]

  38. From experience... by Anonymous Coward · · Score: 0

    I guess I would be one of those who started out in Java. I go to one of the most popular universities for computer science in Canada and when I started my post-secondary education, had never touched a programming language. Naive me wanted to try it because "I liked video games". Now, I nearly flunked out first year as it was completely the opposite of what I'd expected and I was so frustrated with it - yet it was accessible enough that after trying a generic slate of courses, I came back to give it another shot. You know what? I fell in love with it. From then on, I kept wanting to learn more, more, more. I was hooked - looking back, java helped lay the foundations for a solid programming STYLE. Now in my final year, we still have java courses - which I think is absolutely fantastic for teaching abstract concepts - so that you're not worrying so much about implementation details, however we've really only had 2 or 3 c/c++/assembly courses, which I find absurd. These days, if you want to learn that sort of thing, you have to do it on your own time.
    All this rambling to say - I don't think it's so much the courses that are offered - anyone can slip by with enough tact - but it comes down to a persons motivation for learning. Are they genuinely interested or are they just in it for the paycheck?

  39. Re:Happy nigger day! by Anonymous Coward · · Score: 0

    Sounds like someone is having a bad nigger day.

  40. Re:SLASHDOT SUX0RZ by Anonymous Coward · · Score: 1, Funny

    at least it's not a myminicity link

  41. RBK Dewar - great computer scientist and teacher by geophile · · Score: 1

    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 primitive type. Fourth, SETL was the jumping off point for his lectures on macro compiler optimization, which were expressed in concise, elegant set expressions. And he had his students visit and talk about using SETL to optimize itself. His courses were one of the great learning experiences of my life.

  42. I was there.. by hung_himself · · Score: 1

    I remember the transition from cards to terminals.

    It was generally though of as a good thing(TM) (if you've ever had the misfortune to use cards, you'd know why) though there was some whingeing about whether people would get careless and do less desk checking since it was so *easy* to just edit and run.

    As for C (C++ didn't come until much later), this was thought of as a really good thing - basically an Assembler with all the bookkeepping done for you. To an Assembler programmer, whose life is basically pointer arithmetic, C is pretty nifty. There were and still are knocks against C from the FORTRAN crowd because C code is harder to write optimizing compilers for and slower than Fortran in some situations. But back in the early 80's, it was all Fortran IV and '77 (if you were lucky) and a lot of very ugly spaghetti code. The control structures in C allowed for modern structured programming with only a small hit in performance.

    The equivalent that you are looking for to Java is PASCAL which almost forced modular programming. PASCAL was a great language for teaching but it never really penetrated into the science world as C did. Probably because it was too slow and too limited or because PASCAL programmers just weren't very good since they never learned memory management or pointer arithmetic (see the Java parallels..?).

    Personally, I think if you learn Assembler or C/C++ you learn a superset of skills that allow you to learn and use whatever language that is best for your situation. A C/C++ programmer has no problem moving to Java or Perl/Python but it often doesn't work the other way around...

    1. Re:I was there.. by sneakyimp · · Score: 1

      I had to learn assembler, pascal, c, and c++ in college and I'm thankful for the understanding I have. On the other hand, I was delighted to work with PHP, a weakly-typed language which would automatically cast variables from one type to another depending on context. As far as I can tell the performance penalty for that hand-holding is trivial in the web applications I've written.

      And what about all the system calls you might need in a C or C++ program to get at a socket or file system? Write it for Linux then try to run your program on Windows or a Mac. It might work. It probably won't.

      I doubt the variety of applications and data available on the internet would be nearly as vast if everything had to be written in C or C++. Or Perl for that matter. If you're writing a first-person shooter and need 500 frames per second, then C or C++ is your best friend. If you are writing Zork for myStupidGameSite.com then you no longer have to write in MDL.

      From an economic perspective I think these 'easier' languages have obvious benefits. They result in a larger, more robust, more diverse application ecosystem where a creative mind need not be discouraged by the tedium of learning pointer arithmetic to implement a useful program with modest resource needs. People who need better performance can always hire an expert like you!

    2. Re:I was there.. by hung_himself · · Score: 1

      If you re-read my post, I never advocated using C (though I know people that would...) for everything. I just believe that learning how things actually work under the hood is useful and should be learned early on. I can understand if you are going to learn just one language for something like a biologist who wants to do bioinformatics - then Perl/Python/Java are fine. However, for CS majors who aren't going to be sure which language or which application they are going to end up working on, learning C provides a good basis and foundation for whatever they decide to eventually pursue.

      This is not an elitist type of argument, that my language is better than yours. I'm with you - the right tool for the job, and more importantly, the ability to be able to adapt and use the right tool for the job. BTW, I use Perl a lot, simply because its so quick to get something up and running when you don't have to worry about typing or data structure memory management - however, having an idea of going on underneath still helps in debugging.

    3. Re:I was there.. by certsoft · · Score: 1

      Probably because it was too slow and too limited or because PASCAL programmers just weren't very good since they never learned memory management or pointer arithmetic (see the Java parallels..?). I can never understand why people think Pascal doesn't have pointers, they are in the ISO standard for even the lowest level specification.

    4. Re:I was there.. by Weedlekin · · Score: 1

      "PASCAL was a great language for teaching but it never really penetrated into the science world as C did."

      Perhaps the fact that Pascal was specifically designed for teaching structured programming concepts rather than as a general-purpose programming language might have had something to do with it not being very good for things other than teaching structured programming concepts.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    5. Re:I was there.. by hung_himself · · Score: 1

      Actually when I first learned of it in the late 70's I thought Pascal was a pretty cool and powerful language.

      At that time, Fortran IV was probably the language most people learned first (BASIC was starting to take hold too...). The local university provided time and DECwriters for high school kids like myself on the weekends and gave a lecture series. One of them was on this new language PASCAL. I remember being excited at the "else" statement and the recursive functions and of course not having to worry about column 7. The string manipulation was pretty powerful too compared to Fortran. The structured stuff didn't really sink in until it was hammered into us at university

      So in the context of the time, Pascal was (and still is) a perfectly reasonable general-purpose programming language. Maybe the general-purposeness of it might have hurt it more than anything else - it never was the best at anything (except perhaps enforced readability)...

    6. Re:I was there.. by Weedlekin · · Score: 1

      "Actually when I first learned of it in the late 70's I thought Pascal was a pretty cool and powerful language."

      Being specifically designed for teaching structured programming concepts doesn't preclude a language from being powerful.

      "At that time, Fortran IV was probably the language most people learned first (BASIC was starting to take hold too...)."

      Wirth's goal with Pascal was to instil an awareness of structure in students who would be likely to spend their careers writing COBOL and FORTRAN code. His first successful implementation was in 1970 for a mainframe, and it was extremely rare in those days to find a high-level language other than COBOL or FORTRAN on any computer outside research establishments, so it was natural for him to assume that most of those who learned Pascal would end up coding in one of them.

      "So in the context of the time, Pascal was (and still is) a perfectly reasonable general-purpose programming language. Maybe the general-purposeness of it might have hurt it more than anything else - it never was the best at anything (except perhaps enforced readability)"

      Wirth Pascal had a number of deliberate restrictions that prevented it from being a practical vehicle for commercial software development. I suggest you read Brian Kernighan's criticism of it (when compared to his and Ritchie's C) for a reasonable overview of them that might help you understand why many programmers disliked it. You can find it at (among many other places) http://www.lysator.liu.se/c/bwk-on-pascal.html

      NB: this is a fairly old paper, so most of the criticisms don't apply to modern Pascals such as FreePascal, which have been influenced by more practical implementations from the likes of Borland and Apple that specifically targeted applications programmers, and therefore both removed some of the restrictions that were only desirable from a didactic viewpoint, and clearly defined certain aspects of Pascal that were either not defined or ambiguous in the original specification.

      On a final note, I much preferred both Modula-2 and the later Oberon to C or Pascal, but neither of them managed to gain much of a foothold in the industry despite the fact that both had amply demonstrated their capabilities as both systems and applications programming languages whilst at the same time managing to avoid many of C's pitfalls.

      --
      I'm not going to change your sheets again, Mr. Hastings.
  43. 42 by msuarezalvarez · · Score: 1

    It is hard to take him seriously if he does not know that 42 is the right answer!

    1. Re:42 by jjohnson · · Score: 1

      You know, I wish Douglas Adams had been strangled in his crib, just so that the punchline of a cute joke wouldn't become a cliché that geeks feel compelled to drop anytime a question is raised.

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    2. Re:42 by msuarezalvarez · · Score: 1

      You must be really fun at parties.

    3. Re:42 by jjohnson · · Score: 1

      Are you saying that a discussion of cancer statistics isn't a good way to make small talk?

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
  44. Why waste time at all ?? by Axe4ever · · Score: 1

    Whether the language is C, C++ or Java does it really matter to a beginner ? These things become pretty much important when things reach to a much higher level...for a student learning a language, why should he consider whether this language will do fine or not ?

    I guess, it is upto the student to learn the languages that he is interested in.. after all you needn't be spoon fed on any particular computer language...i dnt think that an instructor is required full time to teach a language .. My view is that when a problem is given , a solution to that can be provided in any language.Ultimately, the logic remains the same.But every language has its own utilities that makes the life of a programmer easier or hell. So why fret upon what a language does..students have the freedom to study any language they want.
  45. Re:reality or theory. by Ruie · · Score: 1

    Maybe college is starting to realize they need to prep people for the "real" world versus the theoretical one. I'm not saying advanced math is bad or not important, but years of C, fortran, calculus whatever doesnt really correlate in the business world where most companies are using java, C# etc. Now if we are talking someone becoming a software engineer versus say a systems analyst there is a big difference.

    Preparing people for the "real" world in a university is actually very bad idea. Why ?

    Because you don't really know what the world is going to be like in 5 years from now. Will we still use single/double/quad core machines ? Will our network connections be still limited by 1 Gbit ? Will people be done with coding web applications and move to something else (like video, CAD or realtime control) ?

    Spending 4 years to acquire knowledge that will last for the next 5 is not efficient at all. If, on the other hand, you became fluent with math you can adapt pretty easily.

  46. Why focus on the language? by snkline · · Score: 1

    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 actually doing stuff, who needs high level language abstractions! He complains about students not knowing what a compiler does, but frankly, I don't recall any of my introductory courses( in C) teaching any specifics of what the compiler did. I learned that in a class....devoted...to...compilers. Should universities no longer teach any functional programming either? After all, functional languages are very high level, and not even commonly used in commercial applications. I guess since we don't have to worry about pointers in them they have to go too though *sigh* and I really loved LISP and Haskell. If colleges are not teaching the theoretical aspects of Computer Science there might be a problem. If you could actually get through a 4 year CS program doing nothing but wiring together Java libraries, there might be a problem. Using Java to teach basic object oriented programming concepts is fine, a much better alternative than the bastard child of object orientedness that is C++. I think they might be better off using something like Smalltalk, but if not that, Java is a fine alternative to C++.

    1. Re:Why focus on the language? by ardor · · Score: 1

      The main problem with Java is that it is monoparadigmatic, very limited, underpowered, and not only gives you few language tools to solve problems, it also kills of ANY attempts to try new ideas. Try to code in a functional style for instance. Or, true generic programming - and NOT the sad joke called "generics". Or, try inserting new features using the language; it won't work without serious performance losses. These are advanced techniques, and Java fails here. C++ does not - just look at the immense variety of techniques, tricks and features Boost give you, for instance. Or, try to replicate the STL in Java.

      C++'s main problem is not that it is a "bastard child of object orientedness", if you limit yourself to 1995-style OOP-only C++, you are using about 5% of the language's power. Its main problem is the crappy syntax, which makes it quite hard to use generic programming and metaprogramming - and these two are the ACTUAL center of C++. Java does not even remotely have this amount of versatility and expressiveness, not even close. There is no full alternative to C++; this is unfortunate, since C++ is really a mess. Extracting the generic/meta programming core and refactoring it into a new language that completely focuses on it would be wise; D seems to be a chance for this to happen, but they are too unfocused. We'll see.

      So, Java is a fine alternative to C++ ONLY if you want to teach basic OOP. More advanced OOP? LISP, Smalltalk, ObjC. Very different paradigma? Erlang, Forth, Prolog, Scheme, Haskell. Compile-time metaprogramming and generic programming? C++.

      --
      This sig does not contain any SCO code.
  47. The article is utterly ridiculous . . . by mmell · · Score: 2, Funny

    . . . 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.

  48. Starting off easy by Version6 · · Score: 3, Interesting

    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 aesthetic sensibility, but especially at the high school level, making it fun is much more important. Plenty of time to "graduate" to the drudge work of Java (yes, I've been paid to use it) and the painful bugs of C (used it since 1976, sworn bitterly at it, defended it valiantly against all detractors and it's still the one I'm most proficient in).

    Basically, when I started programming, a high percentage of computer users were programmers. These days, that percentage is vanishingly small. High school and introductory college courses should reflect that and focus on basic computer concepts well-learned by being fun enough to just fiddle around with.

  49. Java is a fine programming language... by Rix · · Score: 1

    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 a teaching tool. Real programmers need to skin their knees on things like pointers, memory management, and even just basic input without library assistance.

    Further, the best introductory languages are those that have no practical purpose, so that the student is encouraged to move on to something else as they gain confidence. This helps them gain the flexibility to easily pick up other languages. If they learn Java, there's an inclination to stay there and stop learning.

  50. higher level problem domain is not less complex by icepick72 · · Score: 1

    I'm sure the assembly language professors said that C/C++ was not "real" programming. When you get past memory management, linking, etc. you're in a different problem domain, one that most students might not understand. It's the world of modeling mass software, using design patterns to achieve goals. Problems are across a much broader scale at this level: like distributed across networks, inside the core of an organization's business logic. These problems are not necessarily easy to solve and definately not easier than low-level problems. After you trust the high-level language has your back, you can inject yourself into a whole other world of problem solving. You cannot say these people are just "cobbling" or not real computer programmers.

    1. Re:higher level problem domain is not less complex by augustw · · Score: 1

      I'm sure the assembly language professors said that C/C++ was not "real" programming

      Um, No. No, they didn't. They criticised C/C++ for their flaws, though.

      But, anyway: Computer Science is not a synonym for computer programming.

  51. Transition learning works best by Bushido+Hacks · · Score: 1

    If there is anything that I have learned in the past 10 years of writing code (since before high school), I have learned that the following sequence of learning is ideal.
    1. HTML/CSS/JavaScript - Get acquainted with web programming. None of that Nambly-pambly BBCode crap that they offer on MySpace.
    2. Python - I wish I had got into this before I learned C++. Good for learning about shells if you decide to switch to Linux or BSD, especially if you decide to create your own website through a webhosting provider that uses SSH.
    3. C/C++ and/or PHP/MySQL. - Playing with the big-boy toys at this point. The safety net that points 1 and 2 provided has been lowered.
    4. OpenGL or Assembly Programming. - Really advanced programming! OpenGL is high-level. Assembly is low-level.
    From there on, the sky is the limit.

    --
    The Rapture is NOT an exit strategy.
    1. Re:Transition learning works best by Aardpig · · Score: 1

      5. Fortran + CUDA -- then, my son, and only then, you have graduated from the CS level ("implement an OO model for a Coke vending machine", or "write a point-and-drool interface") to the Real Programmer level ("write a parallel hydro code for simulating thermonuclear bombs").

      --
      Tubal-Cain smokes the white owl.
  52. That can be said of any language by Rix · · Score: 1

    A good programmer has the flexibility to use the right tool for the right job. Java has it's place, and it does overlap somewhat with other languages.

    Most absolute statements are bullshit. Java can be a suitable replacement for C or C++ in almost all cases. That doesn't mean it's the best tool for the job.

  53. Believe me, by Version6 · · Score: 1

    no one is "pining for the good old days of punch cards".

    Drop the deck? Go back to start.

    Insert an new level of indentation? Well, the first time, you can just indent by two instead of four, or one instead of two, but there's an obvious limit. Of course, Fortran doesn't need indentation because you have label numbers and Gotos!

    And don't fold, spindle or mutilate--or let them get even a little damp. The accounting staff at the university kept the account data on cards because it was more "dependable" than tapes. Then the government asked to audit the computer charges for some research projects. The boxes of cards stacked like cordwood for a few years in the air-conditioned computer room repeatedly jammed the card readers. Someone learned a lesson and started keeping the data on tape.

    1. Re:Believe me, by sneakyimp · · Score: 1

      I'm certainly not pining for them, but it would appear that the state of Maryland is--at least for data storage. They offer interesting security improvements too! Hacking a punch-card stack requires that you (or your robot minion) have direct physical access to the stack. Also, your punch cards might have a better chance of retaining their data in the event of a huge electromagnetic blast in your area whereas your tape might be wiped clean if the janitor gets too close with the vacuum motor.

      Yeah you're right no one wants to go back there. I personally don't see the vast majority of programmers (if you can call them that) wanting to go back to c/c++ when they can write code without regard to the underlying OS or platform.

  54. Ummm...Yeeeaaahh by Anonymous Coward · · Score: 0

    That is how a computer geek would look at masturbation and sex, isn't it?

  55. Actually, quite the opposite by Rix · · Score: 0

    If you're trying to build things relevant to industry, Java isn't really a good choice unless you need to do it as fast as possible, and support multiple platforms without any additional work. Colleges need to teach their students the flexibility they'll need in the real world.

    Universities, on the other hand, could just as well be using a chalk board. If you're just doing research, you simply need to prove your point. It doesn't have to be particularity efficient. Java is a good choice for this because it's easy to use, and extremely forgiving of programmer error.

    1. Re:Actually, quite the opposite by Secret+Rabbit · · Score: 1

      Java is actually a good choice for a first language in this regards. This is after all the context of this conversation now isn't it. You're also assuming that I'm saying it should be the /only/ language. Are you sure that's a good assumption?

      Regarding research, let me know how I can test a new OS design with Java. Also, let me know how I can program on the metal in AI research. They do program these robots things that require control of servos, etc. Surely, there are many many many more examples. But, let's start there.

    2. Re:Actually, quite the opposite by srotta · · Score: 1

      If you're trying to build things relevant to industry, Java isn't really a good choice unless you need to do it as fast as possible, and support multiple platforms without any additional work.

      What industry are you talking about here? Quite a lot of software development is happening in Java, ranging from mobile to big enterprisy applications. The middle ground - desktop - may be a bit more quiet, but you'll find plenty of Java in mobile phones and server farms.

      On the other hand, particularly in mobile devices you'll pretty soon find out Java really isn't "write once run everywhere" as it was once advertised :P

  56. Computer Science and Programming by Anonymous Coward · · Score: 1, Informative

    The main problem today is there is confusion between Computer Science and Programming. Computer Science as it's supposed to be is for learning algorithms to solve complex problems in a logical and optimized way. While the practical side of this indeed involves programming, many theoreticians go their entire lives without coding one single thing on a computer.

    The problem lies in this notion that Programmer == Computer Scientist. Which isn't and shouldn't be the case. I could go on, but what really needs to change is the perception around what is to be expected from a computer scientist versus a software engineer versus a computer engineer versus someone who's taught how to program. Indeed there are curriculum based in hardcore coding in C/C++ and then there are others where are based in theory and use Java. It really depends on the school, its research focus, and its quality.

    I'll stop rambling here.

    1. Re:Computer Science and Programming by PitaBred · · Score: 1

      Even if you're a computer scientist, you still need to understand the how of the program, not just the what. Memory doesn't magically appear when you call new. It doesn't magically disappear with the garbage collector unless you make sure you do things in the right way. These are things that people learning only on Java never really "get". My buddy never really understood data structures until he took his C++ class, and then everything just magically clicked into place, the things that he just did in Java because he was told to, and why so many of the things he did were wrong.

      I've never worked in Java myself, I don't harbor it any ill will, though. I use Java programs professionally. But I don't think it should be the only language in a Computer Science curriculum, because the software is NEVER divorced completely from the hardware.

  57. Not the same thing by Rix · · Score: 1

    Java isn't just an incremental improvement, and C isn't some dusty old tool no one uses anymore. Both are in active, parallel, use for different purposes. Programmers need to be able to do both.

  58. I Call Bullshit by KagakuNinja · · Score: 1

    I went to college about 27 years ago. The favorite language of the staff was Pascal, a language with no pointers, which was interpreted (using some kind of "P-code" virtual machine). Even though all the computers were running UNIX, there was a strong anti-C bias. This was UC Santa Cruz, btw, not some wimpy junior college.

    The only reason I know anything about C / C++ and pointers is because I chose to learn C in my spare time. The program there emphasized theory, not practical programming courses.

    I can't tell you if the modern curriculum is watered-down compared to 27 years ago. What I can say is that I would take a Java programmer over a Pascal programmer any day. Even though I am an old-school C programmer, Java is now my language of choice.

  59. Dumbing-down vs simplification by Wolfier · · Score: 1

    There's a difference, and the difference is not so subtle - everyone can see it.

    Hints:
    1. A ballooning enrollment
    2. A higher drop-out in senior years
    3. An increasing amount of CS students who are downright horrible at mathematics and statistics

  60. You missed the point... by Rix · · Score: 1

    But, fortunately for you, the teaching methods managed to work anyway. Obviously, you managed to learn Java and C#.

    The point of education is to teach you to learn on your own, not to develop any specific skill set. It sounds like it was successfully.

    Had your situation been reversed, it almost certainly wouldn't be. (Or at least you would have had far more difficulty adjusting to the real world.)

    1. Re:You missed the point... by Mongoose+Disciple · · Score: 1

      Well, no, not really. I'd been programming as a hobby for about a dozen years before college, and the AP Comp Sci class I took as a senior in high school gave me the basics in things like data structures and cleaned up the worst of my bad habits.

      I can't say my time spent in college was worthless to me today, and I definitely learned a lot there that was never part of the official cirriculum -- but "learning how to learn" wasn't on the list.

  61. It's not just CS by Ralph+Spoilsport · · Score: 1
    I teach in a Media department. You would think that something like Communication Theory would be something that the students would be actively engaged with. Nope. "Buh buh buh THAT'S HARD. AND BORING."

    Gads. Every year, there's a solid 20% of them who whine and bitch and moan. Little fucking losers. I try to explain to them that "People who don't know theory work for people who do" but that doesn't seem to sink in.

    So,I have to dumb down the class just to get them to pay the least bit of attention. forget about memorising names and dates. If I can get them to leave the class learning a few ideas like "Hegemony" or "Encode/Decode" or get them to look at ANYTHING around them with a critical eye, I consider my work well done.

    I'd love to go sprinting along with stuff, but every time I do that, the imbeciles freak out.

    Sometimes I think we have too many people in the university system, and not enough working in the fields.

    Like the potato fields.

    RS

    --
    Shoes for Industry. Shoes for the Dead.
  62. Better to teach them English Lit.? by PeanutButterBreath · · Score: 4, Interesting

    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).

    1. Re:Better to teach them English Lit.? by Ornedan · · Score: 1

      While one does not have to be a "hardcore math geek" to do programming, one should have a solid grasp of formal logic. A programmer who does not understand logic is worse than no programmer at all, because they will waste the time of whomever ends up cleaning up their buggy mess - it would have taken less effort to do it right in the first place.
      However, logic is the bare minimum. For example, getting the most out of relational databases will require an understanding of set theory and relational algebra.

      Second, the reason we start at the beginning (or maybe somewhere in the middle and eventually visit the beginning) is to know what has been done before and *why* is was done so and why it is or isn't a good idea in the current environment. This is why a decent CS curriculum will have a course or two on the basics of hardware - everyone except maybe some of the algorithm people will at least occasionally be working within the constraints of real hardware.

      P.S. While C++ might not be particularly usefull to you, an assembly language would certainly provide insight into how those languages you do use ultimately work. The Structure and Interpretation of Computer Programs might also be a worthwhile read.

    2. Re:Better to teach them English Lit.? by sydneyfong · · Score: 1

      Most webapps don't require sophistication. However, that's for custom built webapps which only requirement is that it "usually works correctly". When you stress the requirements a little, or complicate the matters a bit, the problem can quickly degenerate into massively complex problems that only those with training on "basic" stuff could solve.

      I don't think the "former experiences are no longer relevant", it's just irrelevant to those without the training :) Employ a bunch of codemonkeys to build a project, try to extend it, stress it, and you get a pile of race conditions, scalability problems, architectural design flaws, and an unmaintainable mess. If PHBs are in charge, it won't occur to them that they should have hired a team with better clue than "PHP experts". Perhaps they'll try to fire some people, start cutting costs by giving you a 14-inch monitor, forcing employees to work longer hours, outsourcing the work, or whatever they (thought they) learnt in business school.

      --
      Don't quote me on this.
    3. Re:Better to teach them English Lit.? by augustw · · Score: 1

      perhaps the next step is for schools to adpot a more sophisitcated approach to organizing their CS programs.

      Uh, but that's exactly what he's suggesting. He's not suggesting that people a stop programming in Java, or that programming is a proesthood reserved for the CS elect. But He is saying that learning to programming in Java does not make you a computer scientist - and you seem to agree with that!

      FWIW, I think he's right. I'm a senior compiler writer for a major US silicon vendor. I did my CS masters almost 25 years ago. It was the rigourous, MIT-style theoretical math-based training. It's what you need for compiler writing. I'm finding it really really hard to employ new graduates who have that kind of knowledge. Or who even want to learn it, and become compiler writers.

    4. Re:Better to teach them English Lit.? by PeanutButterBreath · · Score: 1

      But He is saying that learning to programming in Java does not make you a computer scientist - and you seem to agree with that!

      I do agree, but when does an undergrad degree make anyone a scientist? My point is that more accessible technologies like Java have made programming relevant to more than eventual computer scientists.

      Attracting more people to CS probably won't drastically change the number of people who will become good compiler writers. Are you suggesting that switching to Java will turn off those who might? I would assume that the kind of person who will excel at that level of programming will be motivated to pursue the correct skills to do so. Schools need only provide that opportunity. If he is saying that schools don't, then I absolutely agree that there is a problem.

    5. Re:Better to teach them English Lit.? by PeanutButterBreath · · Score: 1

      Employ a bunch of codemonkeys to build a project, try to extend it, stress it, and you get a pile of race conditions, scalability problems, architectural design flaws, and an unmaintainable mess. If PHBs are in charge, it won't occur to them that they should have hired a team with better clue than "PHP experts". Is this a CS education issue or a Business Management education issue? Leading a successful team requires understanding the requirements and finding people who's specific talents meet those requirements. A sophisiticated software project is going to require talent at many levels. The programmer who excels at low level issues may not be the best UI designer or adept at translating business knowledge to code logic (or even understanding what the PHBs are trying to communicate).

      Not only does more accessible CS education extend the species of codemonkeys that the informed PHB can assign to a project, but it also increases the number of PHBs, project managers etc. who have a clue about what the codemonkeys are actually doing.
  63. The knowledge and the skill by Corson · · Score: 1
    To follow up on the previous post, I would say that Computer Science is the knowledge and Computer Programming is the skill -- the latter is not worth much without the former.

    I have been programming computers for almost 20 years and IMO it's a shame that C and Java have come to dominate this field. C was invented with the main purpose of writing operating systems. It is powerfull and flexible and therefore it is overkill for the vast majority of programmers who only need to get simpler jobs done, particularly for people who do not work in high tech (most people do not work in high tech). Java is even worse because it is like C without the goodies. C is good to understand what programming is really about but it's way too complicated and too cryptical for that purpose. I am not saying that we should go back to Fortran (although Fortran has been greatly enhanced, with pointers and such) but languages such as Delphi or Ada are much better suited for most purposes because they are more intuitive and therefore easier to learn and use.

  64. Contradiction here by Flexagon · · Score: 1

    Hmm. I found this telling:

    Most of my interviewers at MS could not answer the question... what does an object method look like in memory versus a static method?

    and

    They're certainly wizards with ... code optimization.

    These tell me that they're leaving a lot on the table.

    And of course Pascal should not be overlooked as one of the big sources of dumbing down computer science.

    Interesting note; thanks.

  65. CS Degree Means Writing Javas, not Using Them... by tjstork · · Score: 3, Insightful

    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.

    --
    This is my sig.
  66. Why do they limit it to Java? by TheCount22 · · Score: 1, Interesting

    Students in CS related fields need to learn low level languages! Primarily because it teaches you about the operating system the CPU, the memory etc.

    In the workplace it often makes sense to use languages like Java since it does in fact speed up the development process where program speed is not a major factor. But it is much harder for someone to go from Java to C/C++ then to go from C/C++ to Java and for that reason I think I would be a big mistake to only teach Java.

    I am also disappointed by the fact a lot of researchers in various fields limit themselves to interpreted or high level languages for writing distributed programs. They buy for example a $10 000 000 cluster running "insert interpreted/high level language name here"!!! They know nothing of C or C++ and will argue to the death that "insert interpreted/high level language name here" is faster or just as fast as C/C++. You know you have problem when your researchers dont bother researching best solutions to their problems! Btw what happened to making custom vector units for specialized algorithms using FPGA's 10x-1000x speed improvements anyone?

    At the end of the day the more you know the better your solution to a problem will be. Ideally someone in a CS or CE related field should be familiar with at least the following areas Processor Architecture, Compiler Design, Assembly, C and C++, Real-Time Programming, Operating System Development, Data Structures, Software Engineering, "insert popular high level language here".

    Seriously why should we limit ourselves to Java anyway? And could you really call yourself a Computer Engineer or Computer Scientist without knowing anything about lower level processes that are invisible in higher level languages?

  67. Yes by Rix · · Score: 1

    Someone who learns Java as a first language is going to have a fair bit of difficulty moving on to other languages. There will be a lot of bad habits and faulty assumptions to unlearn. It's a perfectly valid tool for an experienced programmer, but it's terribly damaging to a novice.

    I doubt very much you're research project will involve designing an entire OS from the ground up. In most cases, you'll just be whipping something together to prove a point. Java is fairly good for that.

    Bare metal programming is usually a bad idea in AI research. Simulated environments are almost always a better option. If they're not, there's no reason you can't write a library for hardware control and provide bindings for whatever language.

  68. The Language Designed to Teach Students to Program by devinoni · · Score: 1

    Pascal FTW!

    Not very useful, but it combines allows students from shooting themselves in the foot, yet allows it when it's required.

  69. How about Software Engineering by Anonymous Coward · · Score: 0

    Java is bad, at least according to my profs. Not because of reasons stated here on /. but because it is becoming too complex (with new syntax and features) and unsuitable for teaching basic concepts as of Java 1.5. For this reason from this year the freshman are being taught Python as well as Java, with Python apparently being 'as good as Java was'.

    I go to a Carleton University, Canada and have to say that we are taught a lot of Java, but we also have a number of courses in C++, C, and Assembly. All of these are mandatory. However, I feel that Java is a great tool for teaching students OO concepts and Design Patterns, while C and Assembly are a must for understanding underlaying system architecture, operating systems, compilers, etc... so I don't feel that my education is in any way dumbed down.

    In my opinion, it is important that a student be proficient in a programming language of each generation (ASS, C, Java) before they can get their degree. Denying students any of these is unforgivable.

    Of course I must point out that I am enrolled in Software Engineering and not Computer Science, and that in my first year we lost almost 40% of students, who found the program too challenging.

  70. why does he not pick on Ada? by Locutus · · Score: 1

    again, he goes off on Java and claims it is all bad for everyone because they'll end up graduating and only knowing how to cobble libraries of Java parts together. WTF, what university is ONLY teaching Java for a CS degree? He could say the same thing about Ada and pretty much not change another word in his bashing of Java and it would be just as true.

    There's validity to some of what he says but his continued bashing of Java is just bull IMO. He must have Java envy or something.

    LoB

    --
    "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    1. Re:why does he not pick on Ada? by j_ham3 · · Score: 1

      My university is teaching only Java for a CS degree!

    2. Re:why does he not pick on Ada? by Locutus · · Score: 1

      That's impossible or it should be. Where's the 'languages' course, where's the hardware/assembly course. I thought it was bad enough when most of the coders around me had no clue what a hardware register was or really just a serial port. I started off on hardware as a tech writing C code to test hardware to the component level. Some aspect of software were a breeze after knowing what it's doing under-the-hood. Cutting out all the embedded work on the market or in science/labs is what this Java-only CS major is doing and that's not good for anybody IMO.

      If this is the norm rather than the exception, the author of the article has a bit more validity added to his complaint. As much as I like the Java language, this kind of CS degree would not be as good as it can be. And there is actually some hope of doing embedded work with things like the SNAP modules, Sun SPOTs, etc. Still, knowing what the bits/bytes are seems to be getting lost.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
  71. Is java easier than C? by pruss · · Score: 1

    I don't actually get this. C programming is conceptually very simple. The most difficult concepts for a beginner are, I think, data/function pointers and structs, and these concepts strike me as conceptually very simple compared to the levels of abstraction involved in OO programming (inheritance, etc.)

    I find the concepts of OO programming intimidating. I am an experienced C programmer, particularly on the PalmOS platform where I am involved in a number of non-trivial open source projects, and I've done some pretty hard programming in Z80 and 8086 assembler, eking out every cycle, implementing low level Z80 libraries for an embedded device (Sharp Wizard 7xx), and writing email-safe 8086 code (at some point my printable-ASCII-only uudecode.com binary was included in the comp.sys.binaries.ibm.pc starter kit).

    I learned to program C shortly before C++ became popular. I started learning C++, but didn't really need it for anything I cared much about.

    So I think it is quite a mistake to think of C as harder than java. Granted, some tasks are easy in java and hard in C. But to program in java, or any other OO language, can involve rather harder conceptual thought, while in C it just takes grunt work (more than grunt work to do it efficiently and elegantly, of course). Likewise event-driven GUI programming seems to me conceptually significantly harder than writing console utilities.

    So I don't think teaching java should be thought of as a dumbing down. From point of view, C is the easy stuff.

    1. Re:Is java easier than C? by sydneyfong · · Score: 1

      Java the language is harder, but doing "interesting" stuff in it is easier.
      C the language is easier, but doing "interesting" stuff in it is harder.

      In C, I'm only given the bare bones. There are no data structures that most high level languages take for granted (resizable arrays, hastables/dictionaries, etc), and the "C string" is merely a collection of broken functions that not even everybody agrees on their use. (eg. see strcat, strncat, strlcat, and some glibc guy telling people to use memcpy instead...) So basically the programmer has to implement every data structure before he can do anything remotely "interesting".

      In contrast, Java basically has libraries and APIs for everything. Data structures are built into the core libraries, and creating a GUI is as simple as firing up an IDE and dragging things around and adding a few event hooks. You get automatic garbage collection as opposed to manual memory management, friendly NullPointerExceptions as opposed to segmentation faults...

      The extra features of Java makes it harder to understand at a basic level, but easier for beginners to skip the basic stuff and do "interesting" things.

      --
      Don't quote me on this.
  72. the right tool for the right purpose... by DrEasy · · Score: 4, Insightful

    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.

    --
    "In our tactical decisions, we are operating contrary to our strategic interest."
    1. Re:the right tool for the right purpose... by sydneyfong · · Score: 1

      why not use something like Python, Pascal or Scheme? Pascal is "old" (basically a fashion issue), while Scheme gets a bit cryptic (the LISP family's heavy use of parenthesis doesn't help either). But I do have the same question with python. It seems perfectly suited to be a teaching language, and powerful and flexible enough to perform well on most tasks. My only gripe with the language is that it doesn't do any type checking until runtime (but that's a feature...). I really haven't heard of any institutions teaching python, so what's holding it up?
      --
      Don't quote me on this.
    2. Re:the right tool for the right purpose... by Anonymous Coward · · Score: 0

      Some universities use Haskell as the first language their students learn.

    3. Re:the right tool for the right purpose... by chthonicdaemon · · Score: 1

      So, you have not counted the parentheses (and commas, by the way) in, for instance:

      f1(f2(f3(a, b), c)) vs (f1 (f2 (f3 a b) c))

      In practice, you end up with the same number of parentheses in lisp as any other language, and you save on commas and semicolons. Pretty much the only place that's a bit less efficient is with expressions with lots of binary infix operators.

      --
      Languages aren't inherently fast -- implementations are efficient
    4. Re:the right tool for the right purpose... by DragonWriter · · Score: 1

      In practice, you end up with the same number of parentheses in lisp as any other language, and you save on commas and semicolons.


      Well, no, I don't think that's correct. Because syntactic forms as well as function applications in Lisp are generally delineated with parenthesis, you usually replace a lot of other markers found in other languages (begin/end markers, then/else/when/end etc. in conditionals, curlies, square brackets, etc.) with parens, as well as keeping the same number of parens for function applications. This means you usually end up with more parens and less of everything else—at least, for the same number of characters of code.

      Of course, the ability to define new syntactic forms via macros may mean that you need less code in a Lisp variant.

    5. Re:the right tool for the right purpose... by T.E.D. · · Score: 1

      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.


      C would be an extremely good language to use to teach pointers and memory management with, as you can't really get by in C without them. For those other purposes, I have to disagree.

      From my own experience, I never really grokked recursion until I took a course that used Lisp. Its the basic method of iteration there (it has traditional loops too, but they are really a bolt-on to the language). It also teaches functional-style programming. Functional programming is something that can be applied in most languages, but only functional languages like Lisp really *force* you to learn it. So I really think a good CS education should include one sememster using a functional programming language.

      For learning data structures, C is really inferior simply because it isn't strongly typed enough. Not that it can't be done well in C, but a language that is strict about type compatability (like Pascal, Ada, or Modula-2) forces you to think hard about the design of the types in your program. Perhaps pros can do without that, but students should be forced to do this for a while.
  73. Alan Turing might well disagree by LandruBek · · Score: 1

    IMHO, computer science is not about theoretical virtual machines, but the practical bla bla

    Maybe you should read this paper, which arguably (1) established the discipline of computer science and (2) is about an idealized, theoretical machine.
    --
    $META_SIG_JOKE
  74. Java vs C/C++ by TheCount22 · · Score: 1

    Why you should learn C or C++ instead of a language like Java first. 1. If you know C or C++, you already know a lot of Java. 2. C/C++ teaches you about the Processor and Operating System. 3. Linux is written in C do I really need to say more? 4. Java does things for you. Can you imagine not knowing to multiply and having to use a Calculator for everything? Now imagine a Computer Science Student that doesn't know how to use pointers! 5. Forces you to understand memory management. 6. Java and Real-Time programming is blasphemy! Java is a nice language but it is not a general purpose language. Show me something in Java that can't be done in C/C++ and I'll show you a liar. I can however, give many examples of things in C/C++ that cannot be done in Java.

    1. Re:Java vs C/C++ by Cnik70 · · Score: 1

      Ok... write me a web app in C

      --
      -Cnik
    2. Re:Java vs C/C++ by SuiteSisterMary · · Score: 1

      Oh, it's a sad day indeed when people don't even remember that 'web applicatons' started as C, perl, and other such like programs using CGI.

      Which is funny, considering that /. is a web app writeen in perl, which could easily be written in C.

      --
      Vintage computer games and RPG books available. Email me if you're interested.
  75. Good Question by Bill,+Shooter+of+Bul · · Score: 1

    My university taught primarily in ada. Horrible language, it really did handicap the students. As seniors they were still writing command line programs that asked the user to space pad their input. What was I the physics major who had avoided the cs department like the plague doing? Just writing a multidimensional action minimizer complete with 3d graphing engine in C. Yeah Ada sucks. I will say however that they did switch to Java after I left. I think that was probably an improvement, but I do agree that it makes students lazy. But at least they aren't fighting the language.

    --
    Well.. maybe. Or Maybe not. But Definitely not sort of.
    1. Re:Good Question by Locutus · · Score: 1

      as an ancillary tool for other degree majors I can see Java having a place. Mainly because you can still get algorithms and structures taught with Java and bit twiddling is not so important. Also, the author of that article went off on the loss of command line skills and that has nothing to do with Java. Again, the curriculum could include ant or make for compiling to Java class files. It is not Java's fault schools have gone GUI gaga. Heck, he could go off on the Windows desktop and their poor command shell as the reason for the loss of command line skils. Not Java.

      But it sounds like you really had it bad. I'd only touched Ada for about an hour in a languages class where we did something like 8 different languages and Ada was one of them. Oh, and you don't do 8 different languages which span 20 something years with an IDE. I feel your pain and just be happy you we not a CS major at the time.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
  76. where's the goto statement? by Anonymous Coward · · Score: 0

    I haven't looked at a core dump in 25 years. This is some old fart complaining because he thinks the younger programmer keeps hiding his flowchart templates.

  77. never written large systems? by Anonymous Coward · · Score: 0

    I can imagine that some of those profs have never written really big systems. Java C#, etc. really start to give back as your system scales up- managing concepts with hundreds of classes, instead of a dozen classes and boatloads of C functions, like a lot of past systems (and many current operating systems) do. Concepts are modeled in small tight collections of classes, which can be used independently. And fast compiles, great IDE's and not being able wreak havoc on your processes memory obviously help too. But hey, go ahead and use eMacs, vI, and limit yourself to 10,000 line machine problems. Great. We will NEVER scale up to the next level of programming that way.

  78. IDEs and EJBs by Phantom+of+the+Opera · · Score: 2, Insightful

    The java of today has a vastly different feel of the java of 12 years ago.
    There are two major influences that has caused this change :
        * IDE's
        * EJB's.

    IDE's are not for me, but here is what I'd say are the pros and cons.

      pro : easy code navigation
                  saves time typing
                  UI development
                  debugging is easier

      con : leads to code concepts like MyAbstractFooBarFactoryFactoryBean
                  debugging takes longer (_look_ at what you've written, dammit)
                  gets you further from what the machine is actually doing

    EJB's. I have yet to find a real live person who thinks these are a well thought out idea.
    I won't shooting at this particular fish in a barrel, but I think its changed the java culture in the following ways

        * reliance of configuration files, with the express purpose of "making it easier so you don't have to code...just change the configuration". What do we wind up with? Logic that is spread far and wide and removed from the actual computer program.

        * layers and layers of 'ghost' classes that really don't do anything but pass the buck. Some call this a framework. I call it Kafkaesque.

        * XML, including the trifecta of embedding logic in configuration files in a language thats
                        > weak in human editing
                        > a horrible space hog
                        > poor in expressing trees
                        > overkill for 98% of what it is used for

    1. Re:IDEs and EJBs by AmaDaden · · Score: 1
      I mostly agree with you but I think you might be off on a few things.

      pro : UI development
      HA! My most painful college memory was trying to jam my own code in to a GUI I had an IDE generate. STUPID MOVE. The thing was a total disaster. And what did the GUI do? It was buttons and a list. In later classes I sat down and learned how to make a GUI from scratch. In the long run it was so much quicker.

      con : leads to code concepts like MyAbstractFooBarFactoryFactoryBean
      Sorry to break it to you but this seems to be a standard way of doing things in Java. It's encouraged. The idea is that a long name that makes sense when you read it is worth the extra trouble. Plus because we have IDEs it tends to make writing them trivial. Done right it can be painless and helpful.

      layers and layers of 'ghost' classes that really don't do anything but pass the buck. Some call this a framework. I call it Kafkaesque.
      Well C/C++ had pointers, Java has crazy class structures. Oh man reflection can give you some REAL surprises if you don't know what people can do with it. Now that I'm used to it i would much rather deal with that then a crazy pointer math or memory management in C/C++.
    2. Re:IDEs and EJBs by teh+kurisu · · Score: 1

      Sorry to break it to you but this seems to be a standard way of doing things in Java. It's encouraged. The idea is that a long name that makes sense when you read it is worth the extra trouble. Plus because we have IDEs it tends to make writing them trivial. Done right it can be painless and helpful.

      Plus, if you're concerned about performance or JAR size, you can use an obfuscator to automatically trim down the names of all your elements to be as short as possible.

    3. Re:IDEs and EJBs by Anonymous Coward · · Score: 0

      WTF mods? MOD PARENT UP!! Java has changed from what it used to be to what it is. So it actually depends what the professor is teaching the kids. Just saying java=bad is not even a honest attempt at making a statement.

    4. Re:IDEs and EJBs by teh+kurisu · · Score: 1

      • reliance of configuration files, with the express purpose of "making it easier so you don't have to code...just change the configuration". What do we wind up with? Logic that is spread far and wide and removed from the actual computer program

      My biggest objection to EJBs (using JBoss) was this; with plain old Java, if you'd done something wrong then the compiler (or your IDE) would pick it up and give you a stack trace, giving you a good idea of what you'd done wrong. If you'd done something wrong in one of the many, confusing and illogical XML configuration files, then good luck finding out what went wrong and how to fix it.

      I actually quite liked the principle of EJBs, but they took so long for me to get working properly that I decided it just wasn't worth it.

    5. Re:IDEs and EJBs by odourpreventer · · Score: 0

      then a crazy pointer math or memory management in C/C++.

      Nobody bothers with that anymore. Go check STL and Boost for your programming needs.

    6. Re:IDEs and EJBs by Anonymous Coward · · Score: 0

      Sorry to break it to you but this seems to be a standard way of doing things in Java.
      Sorry to break it to you, but that doesn't make it right. Fucktard.
    7. Re:IDEs and EJBs by computational+super · · Score: 1
      My most painful college memory was trying to jam my own code in to a GUI I had an IDE generate.

      Amen. I started coding in Java before there were any (usable) IDE's, so I learned the ins and the outs of the AWT (and, later, Swing) "by hand". I found it pretty straightforward to develop a usable GUI with no tools besides vi and the java compiler. In fact, it seems to me that Java's AWT was designed to be used this way (much like Tk appears to have been), in contrast to Microsoft's VB interface which was designed to require the IDE. Trying to do Swing in an IDE is a very square peg in a very round hole.

      Yet I know a guy who was fired from a contracting job because he also had learned to develop GUI's without the IDE and couldn't make heads or tails of the "make it work just like Visual Basic" GUI-generation tools in the IDE. He got "caught" one day hand-modifying the unusable IDE-generated code. Not making full use of the "productivity enhancing tools", you see.

      --
      Proud neuron in the Slashdot hivemind since 2002.
    8. Re:IDEs and EJBs by AmaDaden · · Score: 1

      Oh dear god VB. As a kid before I knew any better I programed in VB. For static GUIs nothing was better but if you wanted your program to do ANYTHING you were shit out of luck. I actually stopped programing for a while because VB was all I knew and it was just not fun. I eventually got in to C++ and continued. My VB experience is the main reason that I will never touch Visual Studio anything ever again.

    9. Re:IDEs and EJBs by saratchandra · · Score: 1

      Some call this a framework I prefer Catastro#%#@, borrowing from the Daily Show (Currently 'A Daily Show').
  79. Tradeoffs by Anonymous Coward · · Score: 0

    Why Java when starting out?

    The fail-fast easy to debug style. Java is a powerful functional language that blows up in your face as soon as you did something stupid (such as indexing outside of an array). It tells you where you did it and makes it difficult for you to write code that is not correct, but works anyways. I was trained initially on C++, and even though our teachers didn't let us touch 'new' until the 3rd quarter. We still had hour + long debugging sessions figuring out what went wrong for simple things like forgetting a ; after a class definition (which would often cause the compiler to complain about the .cpp file instead of the .h file).

  80. I agree one thousand percent (long) by WatersOfOblivion · · Score: 2, Interesting

    The CS program at my University is a joke and apparently it is as I have always feared: my University is on par with CS programs at other Universities. Partially you can blame the Universities, but mostly you have to blame the students. Let me tell you why:

    I've been programming since I was 8 when my father (who has worked for IBM since before I was born) taught me C (I am now 25). My Junior year in high school (10 years ago), I stopped using Windows and started using Linux, and have never turned back because I immediately fell in love with Bash.

    When I went to school, I started as a Music Major and actually stayed one for quite a while, but I was never very good at it since, instead of practicing my sax for three hours a day like I was supposed to be doing, I was coding about six hours a day. In my first three years of college, I taught myself Java, Lisp, Ruby, and OCaml, and not just the languages but the libraries as well. I read everything I could find about algorithms, data structures, software engineering (URL, Design Patterns, etc.), compilers, theory (FSAs/PDAs/TMs), and even some true graphics programming (ray tracing). All of this I learned from the internet, completely isolated from any direct contact with other computer science professors or students. I did it because I wanted to learn it because it was interesting, and not because anyone told me I had to.

    When I realized I was going to starve as a musician I decided to get a minor in CS, since it was something I had always just done for fun, and it would look good on my resume. My first month into the minor, I was already tutoring seniors in their classes, and simultaneously laughing at how easy their assignments were and being horrified that they couldn't do them. I had done more complex projects for fun and threw away the code because I didn't think anyone would want such trivial junk. I quickly found out that I had essentially put myself through a CS degree on my own and completely by accident!

    The next semester, I changed majors, was in senior level classes and was actively involved in a research project with one of the professors. Whenever I got an assignment due in two weeks, I would complete it in class, and then spend the next two weeks implementing it in other languages and extending it to something that isn't incredibly trivial. For example, we had two weeks to implement a Turing machine, and because the majority of the class couldn't do it, it got extended to almost a month. I wear shirts from ThinkGeek and my peers don't get the jokes. When I pull up a terminal their eyes glaze over, as if I'm performing some mystical black magic.

    The point is that any and all the information for the CS degree is out there and publicly available, but the students are simply not willing to go out and find it. I think the only positive thing I have gleaned out of the CS degree is what they are stripping from the degree programs: being forced to take the advanced math classes. My math classes taught me how to think formally about something that has always been intuitive and have been the most enlightening classes I have ever taken in college!

    Whenever I get frustrated with my University or my peers, I just reread theses and remind myself that there are others out there:
    http://www.pbm.com/~lindahl/mel.html[The Story of Mel]
    http://www.pbm.com/~lindahl/real.programmers.html[Real Programmers Don't Use Pascal]

    Also, the point of the above article is by no means a new idea. Edsger Dijkstra said it over a decade ago in one of my favorite EWDs:
    http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html[On the Cruelty of Really Teaching Computer Science]

  81. college == university. by XaXXon · · Score: 1

    colleges are universities.

  82. Too much to learn, to little time by mdemonic · · Score: 1

    The field of computing has expanded in all direction, even inwards and backwards.
    You simply can't stuff all the important wisdom into a 3 or even 5 years.
    In the olden days all they had was their math books and assembler, and
    life was simple.
    My suggestion: Make computer science hard and interesting again,
    and provide a different education for those who are allergic to math and metal,
    they might still become productive, and much needed, high level programmers.
    The know-it-all computer guru is becoming outdated. Just as know-it-all philosophers
    became outdated once we started doing some serious sciencing.

  83. Yep by Rix · · Score: 1

    There are always exceptions. Have you looked at the Android platform? It's very nice and could fulfil that promise.

  84. Java is not beautiful by Anonymous Coward · · Score: 1, Insightful

    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++.

    And yet, interestingly, an OS has been written in Lisp. The first implementation of at least a few major languages (Lisp, Smalltalk, Logo, even Javascript) were written in Lisp. There's no reason a properly-designed HLL can't be used for an OS or drivers or, yes, even its own first implementation.

    I eventually learned C, and it made me a better programmer, in the same way that learning any new language makes me a better programmer, even though I'll probably never use it again. When I learned Java, I don't feel it made me a better programmer.

    Lisp has a GC, but that doesn't mean you don't have to think about scope. In fact, with all the indirection you can do in Lisp (and which the standard library offers on a silver platter), you think about these things a lot. In Java, you have basically "C with a GC". If you want another layer of indirection, you make ... guh, a Factory. You get sloppy programmers because for a long time (maybe still?), the performance tools just plain sucked. Where's the profiler? Where's the disassembler? If these things aren't built-in, how do you expect newbies to know what their programs are doing, much less optimize it?

    Alan Kay's team tried to write Croquet in Java, but ended up giving up and switching to Squeak instead: Java's meta facilities just weren't up to snuff. These aren't shallow problems like "the programmers were newbies who didn't understand pointers". These are deep problems that require deep solutions.

    Java is not bad because it's high-level. It's just bad. It's the embarrassment of the HLL world.
    1. Re:Java is not beautiful by Anonymous Coward · · Score: 0

      The result is that this system today, called Squeak, runs identically on more than two dozen platforms. Java does not do that. [...] Once we realized that Java was likely not to be compatible from platform to platform, we basically said we'll generate our own system that is absolutely compatible from platform to platform, and that's what we did. And then real world happened:
      Pasting > 32kB of text crashes Unix VM
      JPEGReadWriter2Plugin seg faults on SPARC system because 'double' in structure not 8-byte aligned
      bug in Cross/vm/sqMemoryAccess.h
  85. Language needs to be... by blahplusplus · · Score: 1

    ... 'built into' the hardware to some extent, and by language, I mean you can translate raw machine code easily to other languages or 'plug' a compiler into a development machine and know what is going on and get an idea of how the machine is actually working, complete 3D visualization of the data flows, etc when you need it, while still coding from a higher abstract language, a real programming language (expert tool) should allow 'entry point' (i.e. layered access, to say assembly, etc) and manipulation within the language itself. Code needs to become 'adaptive', and not 'static' as it is now.

    The biggest thing holding comp-sci back is the ability to know what your code and data is doing and where it is going overall from disk to controller, to memory, to cpu, wherever. I agree with the professor on assembly language, but the whole problem is that assembly is 'divorced' from the language itself, when it should be an intimate part of the language *when you need it*. One should be able to set a flag - if platform equals x, use assembly routine y (if multiplatoform) etc.

    Data and computing have exact counterparts in the world of urban planning for waterways/sewage, or in electronics with enregy flows of energy in basic electronic circuits, whether one wants to admit it or not. I imagine the visualization tools for Electronic engineering or urban planning would shed some light on the horrible state of tools and compilers.

    IMHO the major roadblock is the lack of hardware -- tool integration, they should really be co-developed, updated and integrated where needed.

  86. I've heard of that by Weaselmancer · · Score: 0, Redundant

    And yet, interestingly, an OS has been written in Lisp.

    Yeah, I've heard of it. Isn't it called Emacs?

    Ba dump bump! Thanks, I'll be here all night. Try the veal.

    --
    Weaselmancer
    rediculous.
  87. Teaching Java - Prefer Python by Hairy1 · · Score: 3, Insightful

    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.

    1. Re:Teaching Java - Prefer Python by sydneyfong · · Score: 1

      What python libraries are you talking about? The core language is enough to play with for an introductory course, and most libraries do have adequate information (at least those that I use usually satisfies me).

      I'll grant you that finding the docs in the first place can get a bit tedious at times... google doesn't seem to return good search results for python for some reason... or maybe it's the way the python docs are organized.

      --
      Don't quote me on this.
    2. Re:Teaching Java - Prefer Python by Hannes2000 · · Score: 1

      No, I don't agree with that. Prior to showing your students the wonderful world of high level and interpreted languages, they should learn whats acutally going on, what exactly they are doing and what happens behind the scenes when they hit 'compile'.

    3. Re:Teaching Java - Prefer Python by NeoSkandranon · · Score: 1

      I've been scrolling down this thread trying to figure a reply that covers my disastrous java experience in comp sci classes(I'm a computer engineer by major, took a number of CS courses that were all in Java)

      I think perhaps you hit the nail on the head when you said:
      "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."

      --My professors (horrific teaching skills aside) did just that. "Oh, just copy paste this stuff at the top of your program each time" so we never really learned about classes or any real object oriented programming until the very end, and it was glossed over and probably skipped on the exam. Couple that with things like an unhelpful (IMO--the programming descriptions failed to illustrate many things to me by virtue of poor examples) textbook, developing in Notepad and testing from the console (Slow, tedious and uninformative to a beginner) made many of us just lose interest entirely in programming.

      Disclaimer:2 Yes, I ended up a software engineer (visual basic shop) I picked up OOP pretty quickly once I got ahold of visual studio and got some competent instruction from co workers.

      --
      If you can't see the value in jet powered ants you should turn in your nerd card. - Dunbal (464142)
    4. Re:Teaching Java - Prefer Python by Coryoth · · Score: 1

      Prior to showing your students the wonderful world of high level and interpreted languages, they should learn whats acutally going on, what exactly they are doing and what happens behind the scenes when they hit 'compile'. Indeed, and prior to showing your students the wonderful world of basic arithmetic, they should learn axiomatic set theory* and first order predicate logic so they know what's actually going on, what exactly they are doing and what happens behind the scenes when actually perform an addition.

      Or, you can realise, that for pedagogic reasons it is often better to start at a simple level that provides something concrete. Starting simple (with high level languages, or basic arithmetic) doesn't mean you don't teach the deeper material -- it is still as vital as ever -- it just means you throw the students in the deep end after giving them a chance to get their toes wet first.

      * If you want to be more modern (and I do) you can go for category theory and basic categorical constructions such as limits indexed over finite categories, pullbacks, (fibered) products and coproducts, adjunctions and representable functors in presheaf categories.
    5. Re:Teaching Java - Prefer Python by Hannes2000 · · Score: 1

      Guess you have a point (though I actually think that (basic) set theory should be taught as early as possible ;-)). Still I am convinced that students in college/university can (should) by all means understand basic low-level concepts. I myself had a class about Assembly as well as a class about high-level languages in my first year at university; one helped understanding the other and vice versa, which was quite helpful.

  88. Screw Java, I'm a Teachers assistant in.... by Anonymous Coward · · Score: 0

    Introductory programing in MatLab. Hows that for inefficient? But then again people who just want an advanced calculator, and isn't interested in millisecond efficiency MatLab is just a million times easier then real programming.

  89. Computer Science vs. Doing Work by TheMCP · · Score: 1

    IMNSHO, computer science is about improving the ability of computing devices to do work. Different languages are valuable in different ways. Languages closely related to computer internals are useful to deal with low level functionality. More abstracted languages are better for getting things done quickly without having to write a ton of low level code, and a quality optimizing compiler can write lower level code as optimally as the best human coder.

    To say that lower level languages which relate more to the hardware are somehow better misses the point. A computer isn't an art piece, it's a tool. High level languages are legitimate CS material because they facilitate certain types of work better. If I can spend 5 minutes writing code in a very high level interpreted language to do something that would take a week to write in Java or a month to write in C++ or years to write in assembly, unless I really need every ounce of efficiency I can get out of the program I'd be nuts not to use the high level language, and my employer would be nuts to pay me not to. This is not to say that interpreted languages are always better; indeed, they're not. But, in some cases they are, and in those cases, no matter how much you like lower level languages, you're just wasting your time by using them, in the same manner that no matter how much you may like a zippy little red two seater sports car, it's lousy for transporting a family of 8 to grandma's.

  90. No excuse by Sarten-X · · Score: 1

    There's no excuse for an outright incomplete CS program. Blaming the choice of language doesn't make the program any better. Here at my university (Northern Michigan University), we use Java for the first year of courses, before moving on to C, a nice survey class (introductions to LISP, Prolog, and such), and finally upper-level courses using whatever language is most suitable. Introducing students to programming through Java has harmed nothing, in my opinion. In Java, it's entirely possible to understand the basic concepts of pointers. Granted, you can't do the neat little tricks with pointer math, but those kinds of things are hardly wanted for introductory courses anyway. As for programming with a GUI, all I have to say is "Welcome to 1990." The Average Joe using a computer has been familiar with GUIs for at least two decades now. I personally love the command line (its power, especially for use with scripting, is unmatched), but for some programs, especially in my field (custom programming for small businesses), you need a GUI, just because that's all the user will be able to use. To concentrate on command-line programs throughout the short four years of college is hardly a service to the student. The code behind the GUI is still code, and today's students need to master both aspects. Regarding garbage collectors, they are perfectly acceptable as a programming tool. Yes, a perfect programmer will be able to delete his own objects more efficiently, but that's no reason to remove a useful aid from use when it just doesn't matter. A small program, where most of the processor is wasted waiting for user input, can afford to run a garbage collector, especially if it means the program is ready for use earlier than expected. Use that time for testing, code review, or interface design, instead of wasting it writing unnecessary routines. Reading this article (and re-reading the original), I am constantly reminded of another site I saw, discussing the state of CS programs, as compared to bricks. It's titled "A Degree in Brick Science", and is available at http://www.flounder.com/bricks.htm. This article discusses the same problems as Dewar does, but finds an entirely different conclusion: the underlying problem is how the universities arrange their CS courses. This makes far more sense than blindly blaming the current language of choice for introducing new students to the joys of programming. In my opinion, any CS program worth the name should cover all the topics necessary. What language they use is inconsequential. This is the same rejection of a new tool that has eliminated BASIC from the repertoire of most schools. I learned BASIC first, left it, and have not returned. I took with me the knowledge of how to break up large problems into small ones, and turn those small problems into individual steps to form a final program. I took my experience with boolean logic, my love for string manipulation, and my frustration with stupid mistakes. I moved on. It has not made me less of a programmer at all. Rather, it made me better. I learned quickly my strengths and weaknesses, and have carried them with me. I see Java in the same way: It provides a place for eager students to explore the possibilities without needing to know the details of the theory. Of course, the best programmers will always be the ones who know both. In our push for more theoretical knowledge, we must be careful not to do what Dewar has done. We must not ignore progress in exchange for upholding antiquated traditions. We could take Dewar's argument to an extreme, and claim that we should teach students to set 64 switches at a time to program a modern processor. This would quickly be rejected. Yet it is a more pure way to program, to actually have to think about the individual wires. Assembly language is a tool to make machine code easier to write and understand. C++ is a tool to make assembly easier to write and understand. Why must we stop there? -Sarten-X

    --
    You do not have a moral or legal right to do absolutely anything you want.
  91. Computer Science by jandersen · · Score: 1

    The important bit here is the word "Science". You can be a fabulous programmer even if all you know is BASIC, and you can be a very good computer scientist without being able to write good applications. The goals are completely different.

    It's like the distinction between engineers and scientists in general. Engineers have been educated to do practical work: building houses, bridges, ships, software - they may have learned advanced techniques, but of course with a view towards practical applicbility. Scientists on the other hands are not there to primarily make practical work - yes, it sounds funny, doesn't it? As a scientist you are supposed to investigate the unknown, and since you don't know what that entails, you have to understand things at a much more basic level. In computer science it means you need to know not just algorithms and a programming language, but also systems architecture, microcode, the mathematical models relevant for programming etc etc. In fact knowing how to program well is about as relevant to a computer scientist as 'being good with numbers' is to a mathematician; ie not entirely irrelevant, but there is a lot more to it than that.

    And that is why Java may be a less than perfect language for teaching CS - it isolates you from the physical machine and protects you from the pitfalls in C and assembler - a good idea in a production environmennt, but not if those are the things you need to learn about. In a way you can say that it the job of the scientist to make all the mistakes and find a way through the wilderness. After that the engineers take over and build a proper road.

  92. 1st year Computer Science Module by muzicman · · Score: 1

    When I did my degree in my first year we had a module in Micro Electronics Programming (Assembly), a module in OOP (Java), and a module in Operating Systems Management.

    I was luck enough to learn C and C++ off my own back in collage before I went to Uni. I do believe that splitting up the three components (whilst good for people who haven't come from an IT background) did leave me slightly bored with the whole thing.

    If they had used C++ for the whole first year I would have felt a lot happier. That said I also know people that wouldn't have passed their degree, but then again maybe they shouldn't have done anyway.

    --
    -1 disagree is not a modifier for a reason. -1 troll, flamebait, redundant, overrated are NOT acceptable substitutes.
  93. What's wrong with LISP? by seriv · · Score: 1

    Scheme was the first language in my CS program. I hated it when I was taking it, but I ended up appreciating what I learned in the class, mainly in relation to my approach to problems, quite a bit. C (and a mix of scripting languages) followed. I don't think there is an undergraduate class that teaches Java. Graduates might have a harder time becoming Java monkeys after graduation, but everyone is capable of tackling a far greater set of tasks and approaches.

  94. Java is suitable for teaching CS just as C/C++ is by master_p · · Score: 4, Interesting

    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.

  95. Tools != fetishes by Simon+Brooke · · Score: 2, Insightful

    It would be amazing if people actually read the article every once in a while. :-/

    I make a living as a Java programmer. I enjoy the work I do and feel that no other language/platform can even touch Java's capabilities in team and enterprise development. Even for single-programmer development, there are a lot of situations where Java is the solution to end all solutions.

    I have also made my living for the past ten years as a Java programmer. Before that I was a C programmer, and before that I was a LISP programmer. There's no doubt whatever in my mind that of those languages the most powerful, productive and expressive is LISP. However, there's equally no doubt in my mind that any high-level language is primarily a means to communicate with the programmer who has to maintain your code after you, and if it doesn't achieve that goal then it fails.

    Many languages have strengths. Java was designed as a special purpose language for programming the low-power, processor and memory-poor devices. For everything else it is compromised by those design goals. But it has the great strength that it is now a lingua franca that many people in the industry can read and understand.

    If you're fetishistic about your tools - if you believe that one particular language (normally the one you're familiar with) is somehow better than all others, then you are fundamentally a poor programmer. A good programmer can pick up any Turing complete language and produce good code - and, more importantly, can assess the strengths and the weaknesses of those languages. But in the end, any language is merely a tool, and every Turing-complete language can be used to achieve exactly the same results as any other Turing-complete language.

    Me? The most interesting new language I've seen for a while is Scala.

    That being said, I agree with the article.

    As the author tried to explain, programmers need a solid foundation in data structures and algorithms before they should even begin looking at Java. The specific problem he calls out (which I actually feel only scratches the surface) is that Java offers such a featureful API that the programmer isn't forced to learn the basics. He is able to simply use a Hashtable, a Sort, a LinkedList, or whatever he needs without understanding why it works. Which is a very dangerous thing for someone training to be a Computer Scientist.

    I, frankly, don't agree with the article. Firstly, Java has nothing to do with the case - it's a complete side issue. As a pedagogic language, Java has some merits; it's simple, reasonably orthogonal, and has very clear syntax for expressing structure. And it's just as easy to write a course using C++ which uses only very high level graphical toolkits as it is in Java. The issue isn't the language used for teaching (although I'd prefer to see students introduced to a range of languages); the issue is what is taught. A Java-based course, on the other hand, which takes the student through designing their own compiler in Java (not for Java) and then onto considerations of 'Just In Time' compilation will teach as much or more basic computer science as a course which teaches compiler design in C.

    If you think you can stick with the programming technology you learned in college for the rest of your life then you're in the wrong industry, my son. The core skill of a programmer is learning new technologies, not rehashing things in familiar ones.

    --
    I'm old enough to remember when discussions on Slashdot were well informed.
  96. Hi! I'm a Java Student! by Skreech · · Score: 1

    I don't need to even read the article. I've read enough of them, and I'm living this shitty fucking student life learning this dumbed down curriculum after getting all excited about learning C/C++ just in time for universities to switch away from it!

    When I signed up to go to the Uni right out of High School I was programming to the side for fun, so I figured... hey! I'll keep computers as a hobby... no need to make drudgery work out of something I think is fun. I'll be a biochemist!

    When I didn't want to be a biochemist anymore, I switched to computer science mid-way. Fuck, at least I was learning something as a biochemist. I have never had a lower opinion about higher education in general as I've had after I switched degree programs. I feel like I haven't learned a damn thing. This is a charade. It's obvious to me that any additional learning to what I knew before is going to come from outside of class. Everything I thought I'd learn about... I'm not. I think I used a pointer once in assembly class.

    All of this while I watch classmates write shitty fucking programs, and fall asleep during classes, all the while I'm wide awake and attentive, waiting for little nuggets of something I might not already know. Both of us get the same grades.

    Then I watch someone get hired at my fiancee's work to do some programming... he's fresh out of college with a fucking English degree. CS is a mistake and it's made me hate life! How's that then? Is that the vital feedback these CS programs wanted? I was right in the beginning... get a degree in something else if you grew up programming. Far as I'm concerned undergrad CS is worthless.

    1. Re:Hi! I'm a Java Student! by davek · · Score: 1

      as anyone will tell you, young one, undergraduate work has nothing to do with learning anything. It only proves you have the self discipline to wake up in the morning and finish something that you started.

      Heed the best educational advice I ever got on my second day of college: "College is just like high school. Eventually you just figure out how to get good grades."

      Figure out the professors and tell them what they want to hear. Get your degree and then go do something useful with your time.

      My 2 centavos.

      --
      6th Street Radio @ddombrowsky
    2. Re:Hi! I'm a Java Student! by LaskoVortex · · Score: 1

      When I didn't want to be a biochemist anymore, I switched to computer science mid-way. Fuck, at least I was learning something as a biochemist. I have never had a lower opinion about higher education in general as I've had after I switched degree programs. I feel like I haven't learned a damn thing.

      Switching from biochem was the smartest thing you ever did, trust me on that. Sure, its hard and its neat to know you are one of the few who can make an A in P-chem, but guess what, you'd be suffering now. You'd either had spent 6 years getting that PhD so you could tell the idiots what to do (instead of the other way around), or idiots with PhDs would be telling you what to do. Thank your lucky stars that you are smarter than you think you are.

      --
      Just callin' it like I see it.
    3. Re:Hi! I'm a Java Student! by Skreech · · Score: 1

      You'd either had spent 6 years getting that PhD so you could tell the idiots what to do (instead of the other way around), or idiots with PhDs would be telling you what to do. Thank your lucky stars that you are smarter than you think you are.

      I guess... sigh. I guess. Thanks. I forgot about that part in my blind angst. P-chem was something I remember hearing about a lot, and the part about just about having to have a PhD. I just feel like I could have chosen almost any other degree program and done just as well after graduation after seeing an English major get hired as a junior programmer.
  97. Slightly improved by Anonymous Coward · · Score: 0

    One of the issues I had with the previous article was that it appeared to be attacking Java as a language. In this clarification it's stating that it's not so much that Java is taught as what may later get left out.
    However, he does his argument a disservice in his comparison with Maths. In Mathematics, we learn counting, then addition, then subtraction, and so on, only much later coming to differential equations and so on. Why should programming be different in starting with the easy stuff (Java), and only moving onto the hard stuff later (C++)?
    After all, Java can fulfill the needs of various development requirements, just as Visual Basic is still the main language of a significant proportion of bespoke business applications, despite its limitations and the lack of understanding of underlying principles that many Visual Basic-only developer have, much as an understanding of basic Mathematics is useful in many areas without an understanding of the more complex calculations that are possible.
    It is not a completely like-for-like comparison, because the simple maths is the core parts, while simple programming tends to be using large libraries, then introducing additional aspects to consider in looking at lower-level develpment. However, just as if you introduced maths ideas too early you'd scare off a lot of potentially good mathematicians, the evolution of introductory programming courses has been to allow students to gain some understanding and confidence in producing their own code before delving into the depths of the subject.
    Yes, someone who has a full understanding of the underlying memory allocation, garbage collection, resource usage and other issues will likely be a better VB/Java/Whatever programmer. That doesn't preclude a Java or VB developer being able to produce a perfectly workable business application. Additionally, some of the libraries that are being denigrated in the article have been refined for substantial periods, and leveraging the libraries means that those functions should be suitably optimised, saves reinventing the wheel (and therefore reduces development and testing time), and reduces the complexity of the application-specific code. It also helps ensure that particular functions are properly encapsulated.
    You can achieve a lot of that with good programming practice, but it's useful to support that practice by encouraging sensible code reuse, rather than attacking the process.
    Yes, some of the courses will produce programmers who can produce basic dynamic websites but not complex business applications, but those domains can be very different - like aircraft engineering vs. automotive engineering - there's obvious crossover in engine theory and so on, but much of the supporting technologies being used are different. To attack a web developer for not being a good desktop programmer is just silly - they are different specialisations, requiring different issues to be considered.
    PASCAL was/is taught as an initial language because it's the preference of some of the lecturers. Yes, you'll then learn about pointer arithmetic, but if you go into the commercial environment straight from learning just that you'll need to learn a few libraries to even be employable as a Delphi programmer, and you'll have much more limited opportunities at that point than someone who has basic Java or VB skills. Java therefore makes a sensible foundation as it allows a subset of concepts to be introduced while largely ignoring other issues. You can then expand on the concepts. Yes, to have a full knowledge of the subject you'll need to know about pointers and buffers and so on, and will really have to look at C++ at some point simply because it's the language used for most driver development and the language used for core libraries used in various other languages.

    If you learn PASCAL then C++ you'll often never use PASCAL again. If you use Java then C++, or C++ then Java, you'll probably use C++ for driver development or other applications where performance or lower-level access is more importa

  98. Load of Crap by Heembo · · Score: 2, Informative

    These guys are shills for the "Ada industry" and are not really crying about "damaging to students", but rather how difficult it is to find Ada programmers in support of their personal financial interests. And they do so hidden behind academic titles. Depressing. The world of programming for new grads is mostly about web development which is either Java, PHP or .NET. A CS program "rich in Ada" is not very beneficial to grads. OO Java Development is an excellent teaching language and is very pertinent for a bachelors of science in CS education.

    --
    Horns are really just a broken halo.
    1. Re:Load of Crap by colfer · · Score: 1

      Ada is not difficult for anyone that knows another OO language. Oh, you mean employers should understand that... ;)

    2. Re:Load of Crap by BillWhite · · Score: 1

      I must agree with you. I was on the team that created the Ada 95 specification. My impression of Robert Dewar was that he was one of those people for whom winning arguments is better than being right.

      As an example of the Ada 95 design process, early on in design we produced something called Mapping Documents. These mapped requirements to proposed language changes. One of them had to do with the area I had just written a Ph.D. thesis on - types and object orientation. I read the Mapping document, but found it was total gibberish. It was not just mathematical gibberish, but real gibberish. The attempted sentences often did not have verbs, though they extended for tens of words and several lines. I pointed this out to the language designer, who is not Robert Dewar, and suggested that a simplified, grammatical proposal might be better understood. He said, and I wish that I could quote this exactly, that people in the Ada community preferred formal language to simple, formal language, so he was trying to make things more appealing to them. I realized from this that (1) people he wanted to impress were impressed by mathematics, and (2) mathematics was complete gibberish to him. So, he decided that if he wrote gibberish, people he wanted to impress would find it indistinguishable from mathematics, and be impressed.

      I would not myself recommend anyone wasting time on Ada.

  99. Old School by GottliebPins · · Score: 1

    I started out in CS before there were libraries that did everything for you. If you wanted to sort a list you had to write the sort yourself and you had to know what it was you were sorting to know which sorting method was most efficient because by God every CPU cycle came with a cost. If you wanted to create a indexed file you had to know what random access meant and what type of tree structure you wanted to use because there wasn't any query language to do the work for you. That was the eductation I got. Now you can write code with a few mouse clicks and have no idea what's really going on in the background. That ain't workin', that's the way you do it. Money for nothin' and your chicks for free!

  100. Limiting to ONE language can be dangerous by cbart387 · · Score: 1

    I agree with you on the algorithm issue. My school teaches through mainly through C/C++ then some classes of Java and then some mattering of other ones. Probably for the first 2 years we wrote stuff accessible through the STL like trees, linked lists etc. We did this even those things were accessible to us just to understand behind it. After that we're pretty much free to use the STL (notable exceptions being the classes geared towards unix programming and Compiler design which use straight C).

    There are certain things that C/C++ has advantage of over java. For example, I'm currently working on a project that implements different mathematical algorithm. To keep it readable to peers and to keep it efficient C++ is the best option. Java (while it definitely has improved) would be no where as fast with the interpreter.

    What's my point? Not really sure... I guess my point is that limiting the program to one language can be dangerous. For example, in AI we used prolog and Lisp for knowledge representation and list manipulation respectively. In a course about programming language theory we used ada (because it is very strongly typed compared to others).

    Once a student has learned the basic programming ideas I think it is important to show multiple programming languages. Each programming language has its strengths and its weakness. I think it's important to realize that different tasks call for different languages. If I want something tight and efficient I'll likely use C++ however if I'm writing a GUI environment I'll use Java (or VB.NET). And yes, the microsoft languages do have their advantages if only for the fact that many end-users are on it.

    So yes, I agree with you that one can learn algorithms in java as easily has C/C++ but that can't be the end-all to the CS program either.

    --
    Lack of planning on your part does not constitute an emergency on mine.
    1. Re:Limiting to ONE language can be dangerous by DragonWriter · · Score: 1

      What's my point? Not really sure... I guess my point is that limiting the program to one language can be dangerous.


      Probably it could be. Are there any concrete examples of schools with curricula that do that?
    2. Re:Limiting to ONE language can be dangerous by cbart387 · · Score: 1

      Are there any concrete examples of schools with curricula that do that? Assuming that you're asking because you're curious, don't know. Technical schools may be an example?

      Assuming that you're questioning if I'm conjecturing or not ... then yes, it's just a conjecture. Maybe a better turn of phrase would be something like:

      Using multiple languages in a program is likely beneficial to the students. This is because they'll have a better idea of what is available and it'll help them better decide the right tool for the job (I'm not trying to be a smart-ass. It is just hard to judge the tone of a written phrase)
      --
      Lack of planning on your part does not constitute an emergency on mine.
    3. Re:Limiting to ONE language can be dangerous by DragonWriter · · Score: 1

      Assuming that you're asking because you're curious, don't know. Technical schools may be an example?


      I was curious, and the first article (the one to which this is a "followup" of sorts) presented the problem as near-universal in American colleges and universities, and those schools that I thought to check to confirm it not only didn't use Java exclusively in their CS curricula, they didn't use it exclusively (or in many cases at all) in the first programming course intended for CS majors.

      I'm kind of curious if there isn't a lot of churn being generated over a problem that doesn't really exist in the first place.
    4. Re:Limiting to ONE language can be dangerous by cbart387 · · Score: 1

      You could very well be right. The good programmers are going to discover things out for themselves anyways. After that initial theory is laid down (in my opinion) a lot of the ideas can be picked by yourself. Our curriculum is very C/C++/Java centric (with the notable exception being AI and a class in VB.NET [which is for non-majors anyways]). I was able to pick up VB.NET/VBSCRIPT fairly quickly while working in IT as an undergraduate.

      However, in AI we were introduced to LISP (for manipulating lists) and prolog (for knowledge representation). I'm not sure if I'd be aware of them otherwise. I think people do tend to overreact to things. Kind of like the stock market. All this worry is focused on it and now look at it. It's self-fulfilling in my eyes.

      --
      Lack of planning on your part does not constitute an emergency on mine.
  101. CS| EE| Physics|Math -- pick one. by Anonymous Coward · · Score: 0

    The problems with the arguments against CS as a discipline are that you have to replace it with something. Those who advocate other means of technical training besides university, such as self-study, have a point, but if your entire market is dominated by people who are self-trained, then how does one determine whether any single individual is qualified?

    We have universities in part to provide a base level of qualification into a chosen field. If may not be sufficient for one to be successful in that field, but it is a starting point.

    Also, there is a wide range of CS education available -- some schools (even big name schools) are serving up complete crap, whereas others really are training "world-class" computer scientists. This is a problem with the universities, not with the discipline itself.

    The arguments against java are misguided. First, any CS program should include work with many languages and classes of languages -- I believe the ACM curriculum requirements even state as much, and if you went to a certified school than this is certainly the case.

    Java is the lingua franca of business computing today. Further, it has influenced the entire state of the industry -- look at .net, and the proliferation of interpreted scripting languages ala ruby, python, etc. Rather than doing so much complaining about what java is bad at, it would be much more productive if we instead used java in those domains where it is and can be successful and made other language choices in areas where it is not the right choice.

    Personally, I think all this pissing and moaning about java -- be it in academics or business -- is just silly. In the past year I've written productive, working code in java, c++, objective-c, ruby, not to mention making use of things like javascript, sql, and so on. Just because I chose a particular language to apply to a problem does not invalidate other languages. Should I complain because somehow French is not as good as German, or that one is easier to learn than another?

    If it is turing complete, go solve problems with it.

  102. Java doesn't seem to attact quality hackers by dskoll · · Score: 1

    When I think about all the really talented programmers I know, not one of them likes Java or even uses it much. They tend to fall into two categories: Hard-core kernel hackers who sling around C or assembly, or higher-level hackers knee-deep in Perl, Python, Ruby, Tcl or more exotic things like Lua, Scheme and Lisp.

    Quite a while ago, I bought "The Java Programming Language" and honestly couldn't see what all the fuss was about. An OO language with vaguely C-like syntax. The open-source scripting languages like Perl, Tcl, etc. are far more fun, funky and innovative.

  103. _@/" --- Salt Anyone? by Anonymous Coward · · Score: 0

    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.


    That makes no logical sense. The slug CS graduate has the same sheepskin as the excellent CS graduate. Given the way HR policies work, your chances of getting a slug are higher under your model.

    I would rather CS courses return to the model when I was in school: the entry level courses in system programming, computer architecture, logic design, and the mathematical requirements served to weed out the slugs. Case in point, my systems programming class started off with a packed auditorium -- 60 people. At the end of the course there were just 15 of us left - and quite a few of the dropouts changed their major to something less demanding. The professor even commented on it at the end of the course - that was its purpose, in addition to getting us a basic understanding of Unix system programming.

    That being said - there were those who were smart enough to squeak by the coursework and graduate during the dot-com boom - the main motivation being money - and these are the primary slugs I've had to deal with in my career. I'm just starting to come into contact with the new variety - and they strike me as being fundamentally clueless when it comes to the implications of various actions. I am frankly quite sick of fixing, or worse having to live with these people's shoddy craftsmanship.

    We need to add more salt - in the form of higher standards and more difficult coursework - to our CS degree programs. Every University should follow those minimum standards in order to meet criteria for accreditation of their CS program.

    Software has become as critical to life, health, safety, and society as the trades plied by doctors and lawyers. It is about time we demand an equivalent level of professional responsibility, as well as just compensation for that responsibility.
  104. Resolve C++ by Freeside1 · · Score: 1

    I know Java fairly well, but I started with C++ in high school. Then when I got to college, Ohio State, sorry, THE Ohio State University, the introductory computer science curriculum taught using a modified version of C++ called Resolve C++. In Resolve they mostly added keywords to the language that help explain things better to beginners, and included extended versions of the primitive types, eg int became Integer, and double became Real. It was a pain in the ass for me since I already knew C++, but it helped a lot of students I think. They also encouraged in-depth planning before coding, I won't go into the details. So I think OSU isn't one of the schools TFA is talking about.

  105. Did no one read the article? by Snyper1000 · · Score: 0

    Or did all of you who did just reply to others posts? Let me clue you in. a MINOR point made in the updated article was Java. More seriously it was the exclusion of Data Structures, algorithms, and other math classes to dumb down CS to make it more attrative to a wider audience. Java was simply a part of this dumbing down process. Its an easier language to learn and work with, and it does all sorts of flashy things immediatly, so its more attractive to the "dumber" programmer. I have to say I agree with him. I started learning C++ on my own at 8 years old. Yes. 8. Thats no exaggeration. By 14, I was in a community college programming class. And you know what, I did pretty well. However, I didn't really get a firm grasp on pointers until, dare I mention it? I took assembly. Not only did assembly enlighten me to what my C code was doing, it gave me a firm grasp of the underlying architecture (and now many other types of architectures as well), and easy understanding of pointers, and a lot of good programming practices. No, I'm not saying to make assembly the first language taught, far from it. I do think it should be encouraged though, as well as digitial logic, Digital Electronics Design, and other low level classes. Sure, your career web developer will most likely NEVER use any of those skills, but then, they won't use 90% of what a CS degree is supposed to teach either, so why should they even bother. Like the article said, we don't need them getting CS degrees. I have had the opportunity to sit in on some CS interviews, and its quite frightening. How can someone come out of college with a CS degree and not understand how their could, should, and how it is being stored in memory?! You can't tell me what a deadlock is? You don't have a clue how to implmeent a Tree, queue, priority queue, etc? These were in response to job postings for a small hardware development reasearch company. Yes, hardware company. These skills are still in demand! Amazingly I came out of college with this sort of training, even though I graduated 2004. I went to 3 different colleges, and all of them worked similary then. Community College, UNT, and PennState Harrisburg. Its not that I was shopping for schools, I had wanted to make video games since I was a kid, thats why I started learning programming at a young age. I transferred out to UNT to follow that dream. Turns out, the only professer there I felt at the time was a good teacher was the one teaching the games classes. I left the school after a major disagreement with the Chairman of the CS department there who could care less about undergrads, and the Dean of the College of Arts And Sciences (Yes I know CS moved over to the college of engineering there, that was the semester I left). It was the best decision I ever made. PennState Harrisburg was almost everything I had wished UNT would have been. Even with as much as I disliked UNT, they still required digital logic classes, data structures, algorithms, and other theory classes. PennState did also, but that school actually cared about their undergrads, and didnt have us trying to do ridiculous things in college like work with students in Turkey, with an immense time difference, language barrier, it was tough, add them not caring much about our grades, and the fact that this was a LISP course, and you have a recipie for a major pain in the butt. I am glad though these colleges at least hadn't compromised their programs like the professor in the article describes going on, and that i have seen the results of. It was tough, it was work, but most of all, it was fun, and still is.

  106. ObVicarofDibley: accountant joke by Anonymous Coward · · Score: 0

    Yet, millions of accountants worldwide reliably make the numbers add up.

    Q: What does an accountant do when he's constipated?
    A: He works it out with a pencil.
    1. Re:ObVicarofDibley: accountant joke by FuzzyDaddy · · Score: 1
      This joke is now officially dead - computers are now so ubiquitous that the phrase "worked it out with a pencil" is no longer used. Ask any eight year old what it means.

      Still, it was very funny when I was a kid... looooong ago....

      --
      It's not wasting time, I'm educating myself.
    2. Re:ObVicarofDibley: accountant joke by Anonymous Coward · · Score: 0

      Yeah, that's why I changed it to:

      Q: What does an accountant do when he's constipated?
      A. He shoves a calculator up his ass and scrapes the poop out with it.

      Eight-year-olds think it's hilarious.

  107. *...close to the guts...* by Xodmoe · · Score: 1

    "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."

    Compared with implementing Java solutions, I think that was largely the point. "Platform independence" implies independence from the hardware AND the OS.

    "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."

    ...which speaks to a different problem. Newcomers start off with Java, but don't spend enough time and effort on learning why things work as you were alluding to. ...problem-solving, data structures, algorithms, you get the drift. Ideally, Java allows a comparable level of performance (not every line of code gets compiled every time, nor needs to be) over more platforms within a level of security that C et al cannot match. Newbies who you may have worked with might not have known as much as they could about the Java API, which is rather substantial.

    If turning out entry-level programmers expediently was the goal of computer science programs, I'd imagine they'd teach them Perl and set 'em loose. ...fast, cheap, real easy.

  108. ghost classes by Phantom+of+the+Opera · · Score: 1

    My real point about MyAbstractFooBarFactoryFactoryBean wasn't that it was a long name. I can deal with that. It's an example of one of these ghost classes. The kind that are there to make it 'extensible'.

    The kind that are there 'just in case' you might need to use polymorphism, yet *much* more often than not lead to one single implementation class rather than a golfbag full of useful classes.

  109. I don't see how you can disagree by lightsaber777 · · Score: 1

    The point made in the article is 100% valid. Even if they never need to think about it in everyday life, programmers should know the basics of how data structures work or how pointers and at least be familiar with pointers and memory allocation. They should know that there is an alternative to Java's pass by value-reference. It's like learning long division or fraction arithmetic... does anyone write it out? No, if it's easy enough they do it in their head and if it's not they use a calculator. But when you learn it, you learn it without the calculator. Personally, I think that colleges shouldn't be in the business of teaching a language, they should be teaching the skills to learn languages. If you're in an OO class, you should be doing projects that explore concepts in the best language for demonstrating the concept. That's not always Java. In the real world, you will have to drop into situations where you need to learn a new language to solve a problem. In addition, there is always a time when the languages you learned in college are simply no longer in use. If you learned Fortran or Cobol in college, you either learned a new language or you aren't programming anymore... at least not professionally. The kids need to learn to fish, not simply be spoon-fed the hottest language at the time.

    1. Re:I don't see how you can disagree by lightsaber777 · · Score: 1

      That said, I will take American programmers any day over foreigners. At least the foreigners I've run into. The Americans I meet at least have a desire to do a good job where many of the foreigners are simply copy-paste artists. That's not to say there aren't good foreign developers, but I think the ratio of good to bad is much better for those educated in US schools than those educated in foreign schools... Japan, Britain and Europe being the exceptions.

  110. I agree by clckwrk · · Score: 1

    I think that all these schools that are teaching only Java to computer science students are going to end up cranking out a large number of application programmers. Not that it's a bad thing, but most won't have a thorough understanding underlying principles. I think it's good to teach Java it's an interesting language, but I thoroughly believe that needs to be sured up with a heavy understanding of how the underlying system works, and how lower level languages work. The most immediate thing that comes to mind is the memory management of C, while it's tough and a pain, it give you in depth knowledge about how the computers memory works. A very important principle in my opinion.

  111. Did Java kill your puppy or something? by nmaster64 · · Score: 1

    I've never quite understood this concept of why it's "cool" to pick on Java. It has pros and cons like any programming language, but for some reason because it's pros skew more towards the ease-of-coding side rather than performance, it becomes some kind of a pissing match between programmers about "skill" involved. It's the equivalent of a large tournament player debasing some "n00b" because he only casually plays Counter-Strike for a couple hours a day. It's absolutely ridiculous and unnecessary, and almost equates to a form of silly fanboyism.

    As a 3rd year CSC student in one of the better engineering college's in the US, I must agree 100% with the remarks of Professor Dewar. I do not feel remotely close to prepared to enter into even many entry-level programming jobs with just what has been taught in my courses. HOWEVER, I'm not really understanding as to how this pertains specifically to the Java language. This is an issue with CS departments nationwide, not with what languages are being used in the classroom. If all that is taught is a couple steps beyond Hello World, it's hardly the coding language to blame for poor training.

  112. I still like Java by museumpeace · · Score: 1

    that is a great article and a sound perspective on our business...But I still love Java.

    I feel entitled to that. I'd written in Fortran, Pascal, BLISS, C and half a dozen assembly languages from IBM 360 to PDP and Intel 80** and I earned my appreciation for how much Java was doing for me and exactly what it could not do for me.

    --
    SLASHDOT: news for people who can't concentrate on work or have no life at all and got tired of yelling back at the TV.
  113. What's the REAL question here? by RogueWarrior65 · · Score: 1

    IMHO, universities do not and never have truly prepared undergrad students to get a job in the job market at the time they're expected to graduate. I went to Boston University College of Engineering in the late 80s. What they taught was geared around Ada. What they job market wanted was C++. Defense contracting was taking a nose dive. So we all had a really tough time finding work. I ended up sticking around for a Masters and I still had a tough time although the advanced degree helped as did the fact that I played with computers on my own time. The weird thing was that I was eventually hired to program Macs and I had never written code for a Mac before. It seems clear that if it's being taught to undergrads, it must be passé. You gotta learn job skills on your own.

  114. What % of a Linux distro is written in Java? by jrbrtsn · · Score: 1

    Not much. Therefore i assert that Java is relegated to a few niches, and doesn't have a lot of relevance in the FOSS world.

    I know that I'd personally rather use programs which load quickly, run speedily, and don't need to have to have some huge proprietary runtime updated every few months.

  115. At least it's not COBOL by ortzinator · · Score: 1

    Our "Intro to programming" course is COBOL. And I have to take 3 COBOL classes before I can graduate. :(

  116. Re:Java is suitable for teaching CS just as C/C++ by PoderOmega · · Score: 1

    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.


    I totally agree with what your saying, but I am not sure who "they" are in the post. I graduated with a CS degree from the University of Iowa in 2001 and the CS degree required both a Discrete Structures and an Algorithm class. I would suspect that most colleges would have something similar, if not more. Calc 1, 2, and Linear Algebra were also required for the major (Calc2 was good at weeding students out of the CS major into business MIS!). I hope you were refering to specialized trade schools or technical colleges and not traditional colleges, as I believe they DO teach algorithms and data structures.

    As a side note, there was single "core" CS course taught in C++, and the other courses were Java. I would guess it is all Java now. I'm glad I took one C++ class, but I feel Java was overall better for learning. There was a lower level programming class (also required for the major) that taught basic chip design and 68k assembly that taught me more about what was "under the hood."
  117. Java is suitable for teaching CS | not all of it by Art+Popp · · Score: 1

    >There is nothing that makes Java unsuitable for learning algorithms and data structures.

            Can't completely agree there. Because one of your supporting points:

    >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.

            Seems narrowly focused. First off though, allow me to agree that Java is well suited to:

              * Teaching Patterns (which greatly expedite inter-programmer communication),
              * Using Exceptions (which unclutter everything),
              * Strong Typing (the ignoring of which is an optimization which should be reserved for experts)
              * Object Oriented methods (which are too popular to ignore even if you don't like them)
              * Threading (made especially essential in these up and coming multi-core days)

            So for these reasons I agree Java is great language, and not a bad language to start out with.

            However, as a Systems Architect I am regularly bitten by code from people who lacked a fundamental understanding of system resource management because they are Java adept, and their desktop computers (lovingly overbuilt) always had ample resources to throw at the problem. These people have never considered the "weight of their threading model," it's cost to the JRE or their options for choosing another one. They have never calculated or considered their maximum instantaneous heap usage. And when their application that is much cooler and spiffier than anything I've ever created gets offered the Internet and posted on Slashdot, they have no idea what is causing the exotic kinds of breakage that occur as their application's garbage collector tries to clean up 10k short-life threads at a pass and starts getting behind.

            There is a large and beautiful variety of desktop applications that will rarely get hit by such issues. Perhaps due to it's other merits it would be reasonable to start people with Java and simple desktop applications. But this is not the age to call people programmers and have them unequipped to write server-side code. We are doing these college students a significant disservice by giving them "A" grades at all the things they can easily learn in Java and sending them out into a world with deadlines and "we need this bug fixed TODAY" managers, and few/none of the tools it takes to "dig deep." The ugly-bits that C programming forces the programmer to be aware of are fundamental attributes of the machine and thus worth knowing.

  118. Very True by vivin · · Score: 1

    I program because I love it and I am passionate about it. I enjoy what I do. I don't simply do it as a 9-to-5 job. But a lot of people get a CS(E) degree just to make money. I went to college at Arizona State. The CS and CSE program there was pretty good. I took a class called CSE 225 and CSE 421. 225 was introduction to assembly programming. We used the Motorola 6811. 421 was advanced assembly and we used the 6800. Both classes were extremely hard, especially the second one where we had quizzes and labs where you really had to think hard about your logic. You were graded on efficiency and timing. 421 was the definitive CSE course at ASU. Sometime in my junior year the university tried to "dumb down" the program. They wanted to use the 68000 and replace the professor. The started with removing the professor who taught 225. A new professor started teaching the class, using the 68k. It was a terrible idea. The 6811, though old, was simple and gradually introduced assembly programming concepts. The 68k had a lot of features which made it very difficult for a lot of the students. Some students who came into 421 after taking 225 didn't even know what condition codes were. The university then tried to "dumb down" 421 and change the professor, but there was a huge student outcry and basically the class stayed and the professor wasn't replaced. In my final semester, I took 521 with the same professor. This class was even more difficult than 421 and used the 521. We wrote a basic OS for the 68k as our final project. It was an amazing class and I learnt a lot. I talk to new students who are taking classes now. I honestly feel the curriculum has been dumbed down a whole lot. A lot of them don't even know how to use any sort of unix system. When I was going to university we had to do a lot of our labs on the unix servers. Now they only use windows.

    --
    Vivin Suresh Paliath
    http://vivin.net

    I like
  119. Like the first article, just vague generalities... by DragonWriter · · Score: 1

    ...without any specific examples or support to point to of "dumbing down". It mentions a specific case where Java was selected instead of Pascal as the first language, and asserts that it was purely because of "student demand" and implies that pedagogical concerns weren't considered. But the very early arguments I heard when Java was young about it potentially displacing Pascal as a teaching language centered around the fact that it retained the features of Pascal that made it a strong teaching language, while at the same time being industrially useful. Dewar and the author point to no way in which Java is less pedagogically appropriate, only notes that popular texts spend a lot of time discussing libraries rather than the core language (something that was true, even decades ago, of popular books on Pascal—though popular books, of necessity, focussed on particular pascal implementations -- usually Turbo Pascal -- because there was little standardization beyond the core language.

    And from the review of the catalogs from a few major universities (Caltech, MIT, Stanford, UC Davis) I did at the time of the thread on the first article, it doesn't seem like either Java (as complained about in the first article) or graphics libraries and other "fun" in place of fundamentals (as complained about in this article) are as universally the focus of CS education, even in the first few classes where one might suspect "making it fun" to retain underclassman that might be insecure in the major and attract those undeclared and wavering that might be trying it out would be factors, if they were considered at all. Without some kind of concrete problem to point to, I'm left suspecting that Dewar was on the losing side of an academic turf war while on the faculty at NYU, and is attempting to extend his perception of that turf war and the effects he expected the other side to have to the whole of modern US academia.

  120. What They Really Need to Learn by prozac79 · · Score: 1

    While I do agree that teaching the fundamentals are important for a CS education, I think people put too much emphasis on the actual language that is taught. Is it important to know about sorting algorithms, pointers, memory allocation? Of course it is. Is it important to actually write programs that use those principles? Again, of course. But is it important to spend all night dealing with memory allocation issues in an interface design class or artificial intelligence? No, probably not. Just like in industry, schools need to use the languages that make the most sense for the topic being taught. That might be java in some caes, C in others, perl, python, etc. To get my CS degree, I had classes that used Lisp, C, C++, Java, and even Perl. I think that makes me a much more flexible programmer than someone who only used one of the "hard core" languages.

    What really needs to be taught in college is how to design and write maintainable code. When I got out of school I was so used to the "one week and then forget" projects that I really didn't know how to write programms that would need to change and be refactored over time. I didn't know how to get reqirements from customers and what questions to ask to make sure I was building the program correctly. IMHO, those are the skills that need to be taught in school over learning the particulars of a specific language since languages will morph and change over time. Foundations will remain the same.

    --
    "Oh dear, she's stuck in an infinite loop and he's an idiot" -Prof. Farnsworth (Futurama)
  121. In my experience... by nwf · · Score: 1

    There are still universities that are not dumbing down their curriculums. Carnegie Mellon is one of those. As a former CS technical recruiter for a large organization, there are definitely differences in degree programs. We generally got excellent folks from the top CS programs (MIT, CMU, Stanford, U of Illinois, etc.) However, there were several where we needed to be careful and many others we wouldn't even consider hiring from. In general, a degree in IT/CIS is useless whereas a nice theory-based (and math-based) CS degree is very useful.

    Regardless of where folks came from, I did notice a major shift in preparedness to enter the workforce across disciplines and schools. Kids were spoiled and are shocked to find that the real world "suffers" from some novel concepts:

    1. You won't always win. This isn't T-Ball.
    2. There are people who are smarter, having more impact, and who can apply their skills better. ALWAYS.
    3. You will fail. Get over it. Learn and move on. It's not the time for a melt down.

    And a really major issue is emotional stability. I can't imagine how some folks got through school. It's a tough world, and you need to be tough enough to take rejection, disappointment, failure and outright people being mean and selfish. I've seen people cry at design meetings where their designs were being critiqued. And this was in a group that was being particularly nice, IMHO. Think emotional intelligence. Oddly, I found folks with electrical and computer engineering to be more emotionally mature for some reason vs. pure CS. (And don't even get me started on IT/CIS degrees.)

    To the point of the article, I think Java is an excellent language that has made me much more productive as a developer. However, I know how the data structures work and the low level implementations. I've had many classes in low-level database development. I spent my summers in high school in 6502 assembly. I can see how using a high level language first doesn't encourage you to really understand computer science. To that end, I think people should be taught in C and have to do assembly. In fact, I had to do both assembly, C, LISP & Scheme, Prolog, SML, C++ and other languages just to get a degree. This was very valuable. That and implement part of a CPU in Verilog. All very helpful. Theory comes first, then we abstract some of the lower level things away. Now that you know how a hash table works, welcome to Java or STL or whatever.

    I do agree that dumbed down curriculums are producing a bunch of nearly irrelevant "graduates." But, look that most universities have to work with. High Schools are so dumbed down as it is, what are you going to do? My HS I had to take 4 years of science, 4 years of math, 4 years of English, 4 years of history, and 2 years of a language. How can you even think about pursuing a technical degree without trigonometry (to say nothing of pre-calculus) in high school?

    So, while university curriculums are being dumbed down, the real problem is the primary education. I know many teachers and they constantly complain about meetings with parents who try to argue their kid's grade up. (My aunt quit because of it.) "This will prevent them from getting into XXX University." Well, you know when tests are coming, how about trying to study? Cut back on the 100 sports/music/art classes. Can't do the academic work? Well maybe MIT shouldn't be your first choice.

    However, these trends are cyclic. We'll get some dumbed down and eventually people will be outraged (think 50 years ago with Sputnik and the mass panic over our science and math education.) But, we in the US can't plan ahead, so we'll just keep going until we are so wasted and far behind, we'll then spend tons of money getting caught up.

    --
    I don't know, but it works for me.
  122. Universities Should Not Teach Computer Languages by Anonymous Coward · · Score: 0

    I suggest Universities focus on problem solving instead. For some tasks, I can complete them in Ruby or Perl. For some other tasks, I need C or assembly. What is most important is teaching the student to decide what tools to use to solve a problem.

    Provide the student a problem and suggest tools to solve the problem. Let the students work cooperatively. And then review the results. This approach makes the most sense and is more applicable post graduation.

  123. Fun applications vs business applications by The_jos · · Score: 1

    While getting in the discussion way too late I'd like to share my thoughts on this subject. When I was in university besides my job, part of the cource was Java programming. I've looked through the materials for the next years and while it did touch some topics that were more in dept, a lot was not. The main problem I noticed that it was tuned a lot towards 'fun' applications. Build a nice GUI, perhaps connect it to a database and make some code to make that work. Perhaps catch some common exceptions, but that's it. At the same time, I was making a Perl application at work to convert a flat file with records from system A with financial information into an other flat file for system B(not exactly rocket science). The main difference between the applications from my cources and my work? The application at my work has 75-80% of it's code dedicated to error handling while the applications for my cource would at best have 10% dedicated to that. And most would have been the 'required' try{} catch (Exception e){} ones. It did not matter what caused the error, as long as it was covered. For the business application, we tried to think about every possible situation that could go wrong. Each field in the record from system A (input) is checked if it matches the expected format when entering the program (some are human input) and each field in the record for system B (output) is checked if it matches the expeced format. In between, every translation or conversion is checked to be correct. Each error leads to a specific message where the error occured an what caused it. Each faulty record is fully processed and then rejected specifying all errors. This is something people probably never learn in Java classes. And many would not consider this fun. However, this is what programming in a business situation is or should be about. Making sure an application does only what it is supposed to do, nothing more, nothing less. And when something goes wrong, give a clear indication what went wrong. The best way to teach that? Probably make people curious on how things work. Stop teaching a specific programming language and let them solve a problem in natural language. Make several solutions part of a bigger problem. Solve that. And after that let the students translate the found solution to a programming language. Could be Java, C(++), Ada, Perl. Let them stuggle learning the language habits. Make learning the syntax part of the 'problem solving' proces.

  124. A grave sin indeed by Krishnoid · · Score: 1
    I loved his classes but almost every one of my colleagues hated the teacher's guts. They preferred to be spoon-fed with information, and that teacher committed the worst of sins: make them think.

    If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you. -- Don Marquis

  125. Music Science by toddhisattva · · Score: 1

    In fact knowing how to program well is about as relevant to a computer scientist as 'being good with numbers' is to a mathematician; ie not entirely irrelevant, but there is a lot more to it than that. A computer scientist who can program can build his own "research vehicles," programs to explore a facet of the science.

    I find a strong correlation between music and programming. A good musician must know instrumental technique as well as music theory, must be able to execute that theory on an instrument, use an instrument to explore the theory.

    Techne the episteme, and episteme the techne.

    In this model, a programming language is like a style of music, and I cannot imagine being limited to just one style of music!

    And of course some styles are more "basic," lower-level if you will. How to understand classical styles unless you know the chamber and folk styles from which they came?
  126. C++ is more damaging. by Z00L00K · · Score: 1
    From my experience I have found that if anything - start with a simple language and then step into an object-oriented language.

    For this reason I have figured out that using a real classic language like Pascal to begin with is probably the best thing you can do. And I mean classic Pascal, not Delphi or anything remotely object-oriented. This is very similar to programming in assembly on a processor without interrupt handling. You have to decide yourself where to branch off and what to do. Basic will do almost as well.

    Next step is to increase the difficulty by introducing C. This will introduce a new set of problems where pointers has to be managed in a correct way. (OK, you can do pointers in Pascal too, but it's really awkward). If you do it on a machine without any memory protection at all you can end up almost anywhere in space and not knowing why, so doing it on a machine with memory protection is a lot better since the program usually dies where the error is (not always). Add some Assembly language programming into this segment and see how it integrates with C.

    Some may argue that C++ is the next logical step - but it is NOT. Not only is the syntax different from C, it is a different kind of animal that can create a really tiresome situation. The language is not really consistent but varies somewhat from platform to platform and the runtime library packages are varying wildly. OK, you may use this language, but it's not really consistent enough and can be written very cryptic. (OK, you can write cryptic in C too). The next logical step is instead Java or Ada. For practical reasons Java is the better alternative.

    So Java is a better alternative - but why? Well - it is more wide-spread than Ada, and is supported on a variety of platforms. And it is also possible to execute on different platforms without recompiling. It is relatively simple to create an usable application in Java, and it's relatively like C so anybody familiar with C will have a flying start. The big issue is to think object-oriented instead. An alternative to Java is C# (As I usually call it C-Hash) but I argue against it - it's bound to the Microsoft platforms and to the platforms where Mono is ported. Another issue to select Java is that there is a good support for it in development tools like Eclipse. Licensing costs is also a factor to consider - especially during education. And don't forget that many enterprise-sized projects actually use Java.

    Of course - you have a different set of languages too that's worth learning. Lisp is mentioned, and it may have some uses, but I would also recommend that Erlang is used in education. The important issue here is that Erlang is used commercially which means that the probability of getting involved in a project where Erlang is used probably is higher than a project for Lisp or Prolog.

    For those that wants to get their fingers really dirty there are still a few languages left like classic Basic and Cobol. Here Cobol may be useful to know, but Basic is actually used in several systems too, especially some embedded systems and control systems. The advantage here is that Basic is relatively "safe" when it comes to wild pointers and things, but it's still possible to do I/O in an easy manner.

    And still - some may argue that why classic Basic and not Visual Basic? Well - VB is better replaced with C# if it comes to that. The reason is that in classic Basic you have a relatively limited set of data types and you can keep them all in your head and it's relatively easy to figure out what's happening, but in VB there is no requirement at all to declare variables unless you say that you want it required. This means that you can get strange effects of conflicting data types and all kinds of evil effects. So PLEASE do us all a favor and skip VB and it's sub-variant VBScript.

    A language slightly better than VBScript is JavaScript, however it's not really a good language due to it's weak data typing. The good thing about it is that it's more widely supported than

    --
    If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
  127. java and its siblings are really dangerous by Anonymous Coward · · Score: 0

    java is a bloat of 80MB of compressed brainfucked C++ code. And you cannot even compile it with open source tools and there are critical components which are *NOT* open source (mainly crypto stuff).
    This is open source vendor collective lock-in since only the sun collective has the inertia with proper resources to maintain it.
    To build a real community with proper inertia on java code (where people are more important than a company collective like the Linux one) is unreasonable on such bloat.
    Better allocate resources on real important pieces of software like the build tool chain, the kernel and critical libs... than on a giga-bloat built *on top* of those already hard to maintain corner stone pieces of software.
    Better learn python/perl/ruby/lua which combined with C/C++ are much much more powerful

  128. "open-source" free academic communities by wikinerd · · Score: 1

    I have came to the conclusion that the modern academia, including universities and non-open-access journals, but also the wider education community (including high school etc) is not what it ought to be. In many ways I see modern universities as echoes of the old guilds and monasteries. They evolved through them, but unfortunately the academic community has failed to get rid of many of the social outlooks and conventions of the dark age.

    For me the only solution is to make it free, in the open-source way. Wikipedia opened the way for a better encyclopedia. Open access journals and some future free academic community will soon do the same for academic research and education. I am actually trying to bootstrap such a community, if you search a bit you can find it. Wikimedia also has a similar project.

  129. Re:Java is suitable for teaching CS just as C/C++ by General+Lee's+Peking · · Score: 1

    To me, it doesn't look like he was saying that C++ should be taught instead of Java, it seems to me he was saying he opposed teaching Java as a first language. He also believed that no language should be taught as an ``only'' language, and points out that many schools do that nowadays with Java. And actually he seemed to favor teaching C as a first language, rather than C++.

    He never says there's anything wrong with Java as language teaching Java, he just prefers programming to be taught first from a lower level language like C. In C style programming, memory addressing is generally handled quite differently than from within Java, for example, I don't I've ever heard the phrase ``pointer arithmetic'' associated with standard Java programming. If there's some way to do that, it's still not typical and would probably get students into unusual Java programming practices to get them to think that way in Java instead of just using C which is made for it.

    As for low level programming being appropriate for only system level coding, I think that precludes what an understanding of what low level programming is good for. No less than Donald Knuth has discussed the importance of understanding things at a lower lever in order for a programmer to avoid writing what he calls ``weird code''. By that, I'm only guessing that he means a programmer could develop a disregard for what's happening with the machine and write needlessly inefficient code. He even developed his own pseudo assembler for presenting his algorithms. This doesn't mean he doesn't believe in thinking and programming at a higher level in a higher level programming language, it just means he believes that some understanding of what's going on with the machinery is beneficial to a programmer's coding.

    Then there's the idea of Java and C++ being essentially the same language. I just can't see it that way. To me there's an important difference between the simpler single inheritance model of Java and the more complicated multiple inheritance model of C++. I know you can force your code between the two to look the same, but I think your code will be much more readable and maintainable if you try to find an approach more appropriate to the language. I learned that back when starting as programmer I tried make C code look like Pascal code, and C and Pascal are a lot closer to each other than C++ and Java.

  130. Elitist by SnailNobra · · Score: 1

    This isn't a matter of which language, it's a matter or concepts, foundational knowledge, a bag of tricks. The simple truth of the matter is those who learned in C think it's the only way to really grasp the concepts. Those who learned in Java or any other language for that matter will think their language is an excellent vehicle to grasp the concepts. Anecdotally, all our tests were paper based so if you couldn't write a Linked List on paper there was no way you were going to write one in any language. And as the article mentioned, it was not explicitly Java's fault for this but rather the fact that universities are continually reducing the number of courses focused around core concepts.

    Computer Science is a science degree. If you want to be a code monkey go to ITT.

    --
    Nihilism means nothing to the dancing peasants
    1. Re:Elitist by p0tat03 · · Score: 1

      You do bring up a good point, though FYI I cut my teeth in BASIC, later VB, and then Java, and was only heavy into C/C++ when I hit university. I fancied myself a capable coder in my VB/Java days, I knew the basics of how to make things work, especially considering that the "heavy duty" computation was all neatly wrapped up in libraries easily available.

      Getting into C was like an entirely different world. I could no longer appreciate the computer as this infinitely powerful black box that ran my code. I had to worry about resource allocation (especially in embedded applications), the speed of various computations, etc, and honestly speaking knowing this has made me a better coder in on the higher levels. A lot of the theoretical became very real, and it gave me a much better appreciation of the real impact of my code.

      IMHO not knowing your low level bits is not knowing how your tool works. Computer Science is a science, for sure, but that doesn't excuse you from knowing how the tools of your trade work. Most coders I would say will end up doing high level code, but IMHO if you start them off on lower-level languages they will not take the abstraction and niceties of high level code for granted, and we might get better code overall from everyone.

  131. Teaser Programs Should Be OK by OldSoldier · · Score: 1

    The part of the article that mentioned JAVA is used to entice students to try CS. So the problem isn't really JAVA but it's JAVA-AS-THE-ENDPOINT.

    I think colleges and even high schools should offer MORE teaser programs to expose students to as wide a variety of (for lack of a better term) career choices as possible. If said colleges want to make such programs as fun as possible they should also offer better guidance counseling so that someone will tell these kids what they're really in for if they adopt X as a career choice.

  132. less damaging than Ada by nguy · · Score: 1

    Oh, goodie, the creator of SPITBOL, the Realia COBOL compiler, and GNU Ada speaks about rigorous CS education!

  133. Natural Science. by cabazorro · · Score: 1

    In my school of Computer Sciences, which is part of the Natural Sciences Dept, along with Math, there was not a computer language course. We studied algorithms, Grammars, and set theory and and in the 2nd year were thrown to the lions ( EE School ) to learn Logic Design. The language used for our assignments was secondary. It was our job to learn the bells and whistles of whatever language it was used in the given class and concentrate in the ACTUAL assignment (a scheduler, device driver, a data base). At some point, we even made us program a virtual Motorola processor. We were doing VMWare! It was done in C. The point was for us to understand the complex human-logic and machine-logic dichotomy. In the last year we had a class that pitched programming languages against each other (compare/contrast) and we dove into functional programming(Haskell). Now, the question is whether or not Java has a place in the classroom to teach computer science, well, you don't teach English composition by learning how to use Microsoft Word, right? Java is just a tool and it won't teach how to implement an algorithm/interface/state machine. That being said, I know contractors that are so good with their tools and they have been building houses for so many years, they can actually design and build a house from scratch. They though would be the first to admit they can't build a suspension bridge. For that you have to go to school.

    --
    - these are not the droids you are looking for -
  134. But that's not debugging :) by curri · · Score: 1

    That's just stepping through with a few watches :). I think the original poster was pointing out that after a first programming course, most students don't know how to debug (find the problem and fix it). I don't think it is a problem with teaching, it is just that learning to program takes time.

  135. Java's hot today? by Tony+Freakin+Twist · · Score: 1

    My introductory courses were taught in Java... almost 10 years ago. Java has proven itself beyond a flash in the pan, despite many significant failures (AWT or EJB 1.0, anyone?). I would propose this would qualify Java as a language to be respected, if for no other reason than A LOT of useful work has been accomplished with this pointer-less, self-garbage-collecting, virtual-machine-using, heathen half-breed of a tool.

    1. Re:Java's hot today? by ardor · · Score: 1

      You were taught Java 10 years ago? This does not necessarily mean that Java is a good language, only that you were taught this language, nothing more.
      Did you learn all or most the things I mentioned with Java? No? Then, did you learn any other language that supports them? Were you taught these things at all? These are the really important questions, because too often, both are answered with "no".

      Java is used everywhere - so? This only proves that the industry is pushing Java, not that Java is a good language. It is a myth that the industry uses the best tool available. Actually, it is a complex sequence of hype, marketing, and politics. There are countless examples where the worse product won over the better one. In the case of Java, the masses of mediocre programmers are another reason; they are cheap, expendable, and quick to produce in the Java-codemonkey-factories that universities have become. The fact that 99% of the produced code is unnecessary and/or lousy is silently accepted.

      A lot of useful work has been accomplished with it. Yes. The same can be said about Visual Basic, Cobol, Mumps, ... it still does not elevate the language.

      --
      This sig does not contain any SCO code.
  136. how is this any different by Anonymous Coward · · Score: 0

    People can go to school and jump through the hoops while learning very little. Other people take there time and really work to understand the material instead of regurgitating it on tests or by writing a program. This is a problem with education because educators hope that everyone will walk out with the deep understanding of the material, when the reality is that few people really understand it to that level. However, the majority of the people do walk away with some type of understand or have learning to reproduce something that they could not do before making them believe they know more then they do. Or worse, they realize that they don't need to understand it, and believe that they are very smart by not wasting the time to learn it.

    Example: Most home work is learning to do problem A using steps x, y, and z. You notice that problem B is similar to problem A hence you use steps x, y, and z to solve it.

    You don't need an in-depth understand to do the steps, but this is what educations hope to provide. However, to change the system so that you get an in-depth knowledge might require you to figure out steps x, y, and z on your own. But this would be very time consuming and I don't see an easy way to do this. On top of this, businesses don't value that type of thinking, unless you're into research, so there is no real push to do thing differently. Hense the system that we have for education.

    Any ways, this is my 2 cents.

  137. The problem with Java is layering by Gazzonyx · · Score: 1
    I've got a theory that I've been musing over during my college education (I'm still in college as a software development major), as I've wondered what it was that separated the software development majors from the other CS majors (we have 3 CS tracks - IT, network/admin., and software development); we all start out in the low level classes and towards the upper classes we separate into the theories of our track. Although there are three tracks, there seemed to be only two types of students; namely those who 'got it' and would understand the theories from any track almost immediately, and those who seemed to be equally murky regardless of the theory on hand.

    My observation is that those who 'get it' are able to think in layers and can create a mental model regardless if the subject is SPARC assembly, Solaris administration (the CS departments use Sun servers that are segmented from the Windows servers network that the school database system is on), or Data Structures. I think that you have to be able to abstract layer from layer to understand anything in CS, regardless of your area of concentration.

    I use Java - I don't hate it and I certainly don't love it. It's not as near and dear to me as C++, but it's probably a bit more warm and fuzzy than straight C. I could list as many things about Java that I don't like as things that I do like. But I think that Java gets a bad rap because it assumes that you understand how its layered. It assumes that you understand layered interfacing and layered OO (inheritance). It is designed with this implicit structure. However, it's also a very forgiving language in that it'll let you use the library as you'd like (unless you think it'll be forgiving of an implicit cast... but that's fixed w/ autoboxing), and it doesn't slap you for doing things that you should know not to do. Rather, the problem comes in for those who don't know what it's doing under the hood while they are expected to know.

    Last semester I had a bug in my code when moving my framework to a GUI. It worked fine from a CLI, just the way I wanted, but moving to a GUI I didn't think about how my objects would now have a second reference and wouldn't be GC'ed. It took me all of 5 minutes to realize this, but took AP C++ in high school (I took the last exam before they moved it to Java). For a student just starting with Java, knowing nothing of pointers or GC, I suspect that they'd ultimately have to take their broken code to someone with more experience. Without a proper background, a student can very well create a Java program, albeit usually without any hint of OO design, so long as said program doesn't depart from their own layer(s).

    But for those of us who understand the concepts, Java.util.concurrent is an awesome library. If you're into concurrency, I also generally really enjoying using recursion, so YMMV. Why in the world would we write our own spinlocks and IPC when we have the concurrency package and notify() built in to the master object?! But, then we find that Swing isn't thread safe (I've found it's fine as long as you don't do anything that's just generally stupid), and now we're watching our code on two layers. I fear for anyone multi-threading swing who doesn't understand layering, the abstraction that Java appears to have has just been yanked out from under them. If you further tell them that their success will vary at home on a single core machine as compared to a multi-socket Sun box, you've just added a hardware layer that they might not have considered, and perhaps a JIT layer on top of that hardware layer. Then if you go and tell them that on that Sun box, they may or may not have problems due to cache coherency, you've just added a memory issue which Java has hidden from them. However, the toolbox still has more than enough heavy lifting tools that they could very easily drop on their own toes.

    Other languages don't give them option to fake their way through; if you don't understand memory management in C, you'll make it as far as stru

    --

    If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.

  138. Amazingly wrong, in every way by damncrackmonkey · · Score: 1

    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. That's pretty much the extent of pointers in Java. If knowing pointers is equivalent to knowing the name of an exception, then yeah -- it's impossible to know Java without pointers.

    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. Garbage collectors were created specifically so you don't have to nullify objects for the memory to be reclaimed. You may need to free other resources in a timely manner, but nullification is a very bad way to handle that.

    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. So the STL has no standards, and Java compilers/runtimes enforce style guidelines to the point where people can't just "make anything in any way." I learn something new every day.

    For example, many Java libraries use the listener pattern. Event handlers handle events -- er, implement the listener pattern -- stop the presses!

    Java treats exceptions correctly (despite of being boring to having to program around them), where is in C++ exceptions are not used You're a troll, right? Exceptions aren't used in C++? I guess this was modded interesting, and not insightful.

    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. Interfaces are not dynamic in any way whatsoever. They are entirely static.

    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. The lack of multiple inheritance automatically precludes it from being the best environment to teach OO. You need that in order to learn about the problems things like interfaces are meant to solve in the first place.

    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. Swing is single threaded. If you knew about interrupt driven programming from a low level class, you would understand that events can be handled without context switching between threads.

    In conclusion, I think Java is a language designed to solve many problems that programmers have traditionally faced. However, the abstractions that it makes take away from the foundation that a beginning programmer should have to build upon. It should be easy for any programmer with good fundamentals to pick up Java on their own, if they so choose.

    *I'm also rather amused at the numerous suggestions to teach scheme that have been posted on an article about the harm of teaching languages with heavy abstraction.*
    1. Re:Amazingly wrong, in every way by master_p · · Score: 1

      "That's pretty much the extent of pointers in Java. If knowing pointers is equivalent to knowing the name of an exception, then yeah -- it's impossible to know Java without pointers."

      Not really. You have to know that a pointer is not the object itself, it only contains the address of the object, whereas in value-type variables the variable and the object are one and the same.

      "Garbage collectors were created specifically so you don't have to nullify objects for the memory to be reclaimed. You may need to free other resources in a timely manner, but nullification is a very bad way to handle that."

      If you don't nullify pointers, how is the collector going to clear unwanted objects? suppose you have a linked list of client requests; when you receive a message on a socket from a client, you put the request in the list, then you wake up a thread from a thread pool to process the list. If the request is not removed from the list, it will stay there for ever. By removing the request from the list, what you essentially do is to nullify the pointers of the nodes of the list that point to the garbage data.

      "So the STL has no standards, and Java compilers/runtimes enforce style guidelines to the point where people can't just "make anything in any way." I learn something new every day."

      The STL has few standards that are useful in the real world. The functional part of STL is minimal and not very good, so it's better to use Boost or something else. Every GUI library has its own callback mechanism, making it impossible to connect two objects from different libraries. At least Sun writes some standards (bloated, I can say), so everybody has to write code in a specific way.

      "Event handlers handle events -- er, implement the listener pattern -- stop the presses!"

      But in the Java world, event handlers are more consistent in design than in the C++ world.

      "You're a troll, right? Exceptions aren't used in C++? I guess this was modded interesting, and not insightful."

      C++ does not use exceptions. In STL, operators like [] do not throw exceptions. STL streams does not throw exceptions. MFC does not throw exceptions. WxWidgets does not throw exceptions. Qt does not throw exceptions. GTK-- does not throw exceptions. And there are tons of other C++ toolkits out there, and they don't use exceptions.

      "Interfaces are not dynamic in any way whatsoever. They are entirely static."

      Interfaces in Java are manifestations of dynamic typing. The virtual machine searches the method table of an object for an implementation of an interface each time a method of an interface is invoked. The underlying object may be anything.

      "The lack of multiple inheritance automatically precludes it from being the best environment to teach OO. You need that in order to learn about the problems things like interfaces are meant to solve in the first place."

      Interfaces are about typing, e.g. about making objects behaving like a duck, a dog, a cat, whatever. Multiple inheritance does that, but it also allows merging of behavior, which is not necessary in 99% of cases, and when it is, it can be handled by aggregation.

      "Swing is single threaded. If you knew about interrupt driven programming from a low level class, you would understand that events can be handled without context switching between threads. "

      No, Swing is not single-threaded. When you write a 'main' function in Java that opens a GUI, the GUI event loop is in another thread.

      "In conclusion, I think Java is a language designed to solve many problems that programmers have traditionally faced. However, the abstractions that it makes take away from the foundation that a beginning programmer should have to build upon. It should be easy for any programmer with good fundamentals to pick up Java on their own, if they so choose"

      In conclusion, Java abstractions is what makes teaching CS easy.

  139. Confused Guy by tom's+a-cold · · Score: 1

    Poor guy said that Ada matters. I've had the misfortune to have had to develop some large systems in Ada. It's like a nightmare in which a QA person with some software engineering background decided to impose a language on the rest of us. Structured-programming hell, with lots of rigid structure in all the wrong places. IDE, build system, runtime, language, all in one: bad idea.

    Government agencies tried hard to push Ada in the 80's but fortunately, it choked on the sleeves of its own straitjacket. When I consider frameworks now, one thing I look for is real modularity, not a monolith. If I can't swap out a component, it's not a useful framework. Ada completely failed in that regard. It was Ada's way or the highway.

    Not that Java is devoid of faults. I've run into plenty of Java programmers who, in the day, would have been happily coding in COBOL. Baaaaah. But that's part of what Java was for: an OO-ish language for the boneheads who couldn't be trusted with something more powerful. Hence the strong typing, lack of pointers, built-in garbage collection, and absence of multiple inheritance. Having said that, I'd rather get a crew to code up a corporate IT app in Java than, say, C++. In fact there are few large problem domains where C++ would be on my list at all. And there are none where Ada would be an option, unless I needed a strawman solution alternative to eliminate from a shortlist.

    --
    Get your teeth into a small slice: the cake of liberty
  140. Re:Java is suitable for teaching CS | not all of i by master_p · · Score: 1

    I think the problem is more on the material taught at colleges rather than the language itself. Java programmers should learn resource management, because the language demands it. But they shouldn't have to deal with the ugly bits of C, because those bits are not about resource management but specific C problems.

  141. Graduating Students by Bottle+Washer · · Score: 1

    Being a hiring manager, I have been looking at the course work that many of the new grads have been doing during there time at university. I agree with the author that the course work in general is becoming dumbed down. I feel that there is a certain "abstraction" away from understanding how the under pinnings of software work. For example, the students in many universities are taught how to use software programs like mathlab to figure out problems rather than building software in order to learn. Also students I know use VHDL simulators rather than building actual simulators.

    1. Re:Graduating Students by Bottle+Washer · · Score: 1

      actually I meant to say "actual circuits"

  142. In the view of a student by jmerlin · · Score: 0

    I have to completely agree with the author, but I take a more ground up approach to the entire problem.

    From a very young age, I picked up, as my first language, basic by reading a book I found on a bookshelf at school. It had been untouched for years as nobody had an interest in it but me, and the title appealed to me. The book was a very basic introduction to the language and showed how it could be used to write simple textual input/output games. After completing it, I wanted more so I found my father's copy of visual basic 3 and proceeded to teach myself how to write applications in that.

    After a few months of playing with it, it got to the point at which I felt I had no real control over the computer and often was left wondering how people wrote software I commonly used, as I perceived it to be an impossible task in such a language as VB. So in light, I picked up C and read a book called "C by dissection." Soon thereafter, I learned C++ and was given a copy of Microsoft Visual Studio 6 by my was-then uncle. But still, though I could do much more in C, I felt that I still did not really understand what was happening as a result of the code I was typing. At this point, I started reading about assembly and purchased an assembly book to learn it. After a while, it explained so much in the way of what was happening on the machine at the lowest level and why things such as pointers in C and C++ are so useful (and relevant). From there, research into how compilers generated assembly and how operating systems used special features of processors to carry out their necessary operations gave a completely new insight into computing.

    From the approach, I found that I preferred starting with assembly and moving up to a language like C, then to C++ for object oriented programming. When in highschool I was first introduced to Java, I found its syntax to be very similar to C++ with which I was very experienced, and thus it was easy to pick up and use. I found the dizzying array of redundant packages that Java provided to perform such simple and mundane tasks for the programmer to be confusing. It made it almost "too easy" or "too stupid" to just google a problem with 'java' attached to it and out comes the name of a class which will perform the desired operation, turning what was to be originally called "computer science" or even what we were doing, "programming", into a game of fetch-and-copy style of piecing together a working program. I found it insulting to me and to everyone who has studied and written software with a strong understanding of what he/she was doing. I had to often times explain things that were not easily doable with an existing class to my classmates for the simple fact that this introductory "computer science" course did not cover underlying principles in computing, rather it delved right into using classes, types, flow control, conditional expressions, and functions, the implementation of which were completely lost on the student.

    In no means am I trying to say that people who prefer Java as a normal programming language are inept, rather I simply dislike it due to how easy it makes to write software by giving, as the author stated, the programmer a big barn shed full of tools with which he/she can use to perform an operation with no real understanding of the theory of software development or programming. I do see Java as a useful tool when I need to write quickly a cross-platform utility, and some of its packages useful as writing them in C or C++ would be extremely time consuming, but without a fundamental understanding of how things work and are carried out on the host machine, the true beauty of what is being done is completely lost. It just appears to me that what is happening now is a huge army of mindless drones capable of writing software instead of a core set of people who excel in using and manipulating computers regardless of what language in which they're asked to do so and without concern for what machine the development is to be on.