Slashdot Mirror


Professors Slam Java As "Damaging" To Students

jfmiller call to our attention two professors emeritus of computer science at New York University who have penned an article titled Computer Science Education: Where Are the Software Engineers of Tomorrow? in which they berate their university, and others, for not teaching solid languages like C, C++, Lisp, and ADA. The submitter wonders whether any CS students or professors would care to respond. Quoting the article: "The resulting set of skills [from today's educational practices] is insufficient for today's software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals... Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging."

1,267 comments

  1. tasty by User+956 · · Score: 5, Funny

    Professors Slam Java As "Damaging" To Students

    I dunno about you, but java was nothing but helpful to me as a student. the drinkable kind, at least.

    --
    The theory of relativity doesn't work right in Arkansas.
    1. Re:tasty by Pvt_Ryan · · Score: 5, Interesting

      I have to agree with the article. At Uni I was taught java much to my detriment and annoyance (I had taught myself VB6 prior to going to uni so wasnt a newbie to programming).

      I find I am now having to teach myself C++, and am struggling in a lot of areas that had I been taught in Uni I would be a lot more confident in.

    2. Re:tasty by Daengbo · · Score: 2, Interesting

      I don't understand ... what happened to the weeder courses that the CS majors went through when I was in Uni in the 80s? Hell, they tested you with stuff much lower level than C (IIRC, C wasn't even standardized back then). I mean, try doing really complicated stuff in assembly, and you figure out really fast who can think like a programmer and who can't. I never would have passed the weeder courses, but I knew it and went for S.E. instead of C.S.

      I don't know a lot about programming as a profession, but teh article feels on target to me.

    3. Re:tasty by khellendros1984 · · Score: 2, Interesting

      As a newly graduated CS student, the most I've had to do in assembly was "Read in a list of numbers, terminated with boundary value x, then sort using bubble sort".

      In the upper division courses, we generally have our choice of languages. I've been alternating between C++ and Python (except for the rare professor that actually requires Java).

      --
      It is pitch black. You are likely to be eaten by a grue.
    4. Re:tasty by Anonymous Coward · · Score: 0, Insightful

      Engineers Slam Wheels As "Damaging" To Engineering Students

      Where are the car designers of tomorrow? We need to be teaching solid principles such as wheel design. They just take pi for granted these days!

    5. Re:tasty by StarvingSE · · Score: 5, Informative

      I think there needs to be a distinction between learning concepts and the tools you use to learn them. I graduated from uni within the past 5 years, and they taught first year CS students in Java. They used these languages to teach data structure (ie stacks, dictionaries, etc) and some simple algorithms like sorting. At the same time, they taught us proper object oriented skills since that is what the industry is demanding.

      During the second year we took a class that taught C/C++ which basically taught pointers and memory management. In my upper level courses like operating systems and graphics, it was all C and C++ from then on. I think this gave me a pretty well rounded education.

      When I was done, I had used a number of tools (languages) to learn a variety of CS topics, and felt that I was well prepared for the industry.

      --
      I got nothin'
    6. Re:tasty by Anonymous Coward · · Score: 0

      Ada isn't spelled in all caps, unless they meant the Americans with Disabilities Act. I'd like to point out that there are zero compliant Americans with Disabilities Act compilers available on the market. There aren't any that are even close, actually. Nobody's even started on an open-source implementation!

      On the other hand, if you're talking about Ada, GNATPro fully supports Ada 83 and Ada 95. There's also a good deal of support for Ada 2005 as well, though I don't believe that is complete yet. If you don't have the dough to pay for GNATPro, gcc-gnat is almost the same thing, and is free (as in beer and as in speech).

    7. Re:tasty by Anonymous Coward · · Score: 5, Insightful

      I've been alternating between C++ and Python

      Do more. Try doing your homework in haskell or lisp or hell, write in forth or postscript. It's a billion times easier to learn a language when you have someone else telling you what to do in it, and a billionth of the stress when your paycheck doesn't depend on it working.

      I've wanted to learn ruby and rails for a while now, but I've got nothing to do with it at home, and like hell I'm going to show up at work and replace a production app with ruby for the hell of it, even though we've got a number of internal web apps that are basically exactly the kind of CRUD RoR was designed for.

    8. Re:tasty by Skatox · · Score: 1

      For me as student, java give me problems when i wanted to control the memory programming with C or C++. Is better to learn those languages first then move to object oriented.

    9. Re:tasty by TurboTimmy · · Score: 3, Funny

      I don't know a lot about programming as a profession, but teh article feels on target to me. I don't know a lot about comedy, but this feels like a pointer joke to me.
    10. Re:tasty by computational+super · · Score: 4, Funny
      doing your homework in haskell or lisp or hell

      Hell? Maybe you meant Perl?

      --
      Proud neuron in the Slashdot hivemind since 2002.
    11. Re:tasty by SQLGuru · · Score: 4, Insightful

      My biggest gripe with my college experience (graduated 1994 - BS in CS) was that even though they were teaching the "solid" languages, they still didn't really teach me what I needed to know in order to do the job I do today (DB App development). Sure, things like Algorithms and Data Structures had some low level fundamental use, but they didn't teach me how to develop a SYSTEM.....most of my "projects" were simple "take some input - produce some output" programs.

      Most of my professors had no real world experience, either. So, teaching things like team dynamics and working within a project schedule were really beyond their expertise. Granted, I've been quite successful, but I attribute most of that to my abilities, not what I learned in college. College just got me a piece of paper that opened the door.

      I don't think the problem is with the languages being taught, but in the lack of true engineering being taught. This is true of any of the programming related fields (CS, MIS, SE). All of them need these skills.

      Layne

    12. Re:tasty by kellyb9 · · Score: 1

      My experience was pretty similar. When I went to school, they were more concerned about the concepts and theory as opposed to the actual code itself. Instead of focusing in on one language in particular I was exposed to a variety of languages, and it this point I can probably code in just about anything with a day of reading.

      My only complaint is that there is a gap between what the industry is doing, and what is going on at educational institutions. Maybe its just me, I just feel like educational institutions need to get more involved with the so-called "corporate world" and begin to mine for what they are looking for in applicants and change their curriculum accordingly.

    13. Re:tasty by pyite · · Score: 4, Insightful

      So, teaching things like team dynamics and working within a project schedule were really beyond their expertise.

      And also beyond the scope of computer science. If that's what you wanted, you should have specialized in software engineering. People keep forgetting that computer science classes should feel more like math classes than engineering or management classes. One look at TAoCP would hint at that. For the record, I'm an engineer and I find the pseudo-engineering that most CS programs push out to be highly disturbing. Either do it right and call it software engineering, or remove the non-CS stuff and call it computer science. If you're not gonna do either aggressively, give it a fake major name like "Information Technology" or "Management of Information Systems" and teach a bunch of stuff really poorly.

      --

      "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

    14. Re:tasty by mhall119 · · Score: 2, Interesting

      It sounds like for you, and the professors in the article, the problem is not that teaching Java is bad, it's that teaching _only_ Java is bad. This absolutely makes sense, and is in no way a "slam" on Java, as the /. headline suggests. Teaching _only_ assembly, or _only_ C, or _only_ Lisp would be equally bad. They make several cases about why Java is a bad choice for a first language, but that is mainly because it makes hard things easy, but you can still teach students most of those hard things in Java. I agree that they need to teach more languages, I wish I had been taught more languages while I was in school.

      I taught myself Perl first (talk about a bad first language), then learned a bit of VB and C/C++ (not enough) at a community college, was taught mostly Java at university, then taught myself PHP at work, am now working on C#, and have a Python project already set as my next language.

      --
      http://www.mhall119.com
    15. Re:tasty by Anonymous Coward · · Score: 3, Interesting

      I have to say, the idea that you can not only graduate from college but consider yourself to have received a "well rounded education" while having learned nothing but ALGOL-syntax C-derived languages is quite sad. During my CS degree, I learned C, C++, MATLAB, Java, Lisp, ML, Prolog, and a made-up language we wrote a compiler for, and I feel a bit deprived at not having done more. In my opinion, the idea that only languages which look like C are significant or worth learning is one of the more damaging things floating around CS today.

    16. Re:tasty by fbjon · · Score: 1

      I would think Lisp or equivalent is mandatory at most universities. How else could you have a course in functional programming?

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    17. Re:tasty by StarvingSE · · Score: 1

      Well, yes, I did have courses that were in Lisp, prolog, clips, assembly, and we created a made up interpreted language as well. I wasn't about to type up my entire 4 year curriculum in my post, just what was appropriate for the topic at hand.

      --
      I got nothin'
    18. Re:tasty by j_166 · · Score: 1

      "College just got me a piece of paper that opened the door."

      Good point. This is the way I observed the world working. I graduated with a degree in the biological sciences and another in spanish, and now I'm a perl programmer. Go figure. Of course, most of the time my job demands skills in system integration rather than programming anything anyway.

      I later went back and took some technology courses and the professor gave the class the choice of what language to use. After we decided on Java (because that is what most of them had experience in lower classes in) then the project was unveiled and we had to actually to break into groups to design the system, each group taking a different "department" for our Point-of-sale application (ie one group did warehouse, another did gui, another did system db stuff, etc). Later I found out in my job that this experience was the one that helps me the most everyday. Thing is, it was a 300 level undergraduate class.

      So I guess what I'm saying is usefulness of any given course is directly proportional to the department and professor offering it.

      "I don't think the problem is with the languages being taught, but in the lack of true engineering being taught. This is true of any of the programming related fields (CS, MIS, SE). All of them need these skills."

      I would go one further and say that this is true of any field. Universities are concerned with handing out as many degrees as possible, not teaching a field of knowledge. Students are concerned with getting A's, not learning a field of knowledge. At the university I work for, our department regularly gets bitched out by the president's office because students have their mom call the president of the university when they don't get an A. How insane is that? The president's office then assume that our department is doing something wrong, because mommy is the one ultimately paying the tuition bill. The net effect of all this is undergraduate education in this country has become High School 2.0 .

    19. Re:tasty by Keeper+Of+Keys · · Score: 1

      If your web apps are crud, you really should replace them.

    20. Re:tasty by WindBourne · · Score: 1

      The fact that you missed MIX indicates that you are seriously lacking.

      Seriously, I doubt that the GP did not have comparative languages. Fortan/basic, cobol, snobol, prolog, ML, lisp, scheme, perl, etc are pretty common. It is required of just about all CS programs. But when studying structures and algorithms, it is best to use a single decent language. For years, CS was taught using Pascal. But these days it is C/C++. There is no issue with that. After all, the idea is NOT to learn a language but concepts. As it is, if you want to learn the language de jour, take up CIS. CS is about concepts.

      --
      I prefer the "u" in honour as it seems to be missing these days.
    21. Re:tasty by j_166 · · Score: 1

      Exactly. The thing is, I think Java is more ideal for teaching OOP to beginners. Things like pointers and memory allocation, in my opinion, get in the way of teaching OOP concepts because those things are mechanics of the language, like an if statement or a for loop. Once they get OOP concepts down, *then* have another class that teaches C/C++ and all its quirky kooky pointer and memory stuff.

      And while I agree perl is a bad first language, if you have the fortitude to see it through it *really* helps you pick up anything else, because you can always say, "Well, at least its not perl..."

    22. Re:tasty by StarvingSE · · Score: 4, Interesting

      The way I see it, a university education is supposed to teach you theory and provide a "well rounded education." It irritates me when I hear the classic "why do I have to take social science/english/art, I came here to learn how to program."

      Computer science is theory and math. Computers and langauges are the tools used to explore these concepts. The specific languages you learn in the university doesn't really matter; anyone with a CS degree and half a brain can pick up new languages within a very short amount of time.

      I think it would be a very bad move for universities to cater to the corporate world. If you want to just learn programming, get some certs or buy a book. If you want an education, go to the university.

      --
      I got nothin'
    23. Re:tasty by jjn1056 · · Score: 1

      Sorry you had such a negative experience learning Perl, particularly since one of it's overt goals is to make it possible for you to do useful programming right from the start. Since you didn't mention what kind of work you were trying to do I can't really make any suggestions. My recommendation to you or to anyone starting with Perl is to hop onto one of the many IRC channels at irc.perl.org and ask for some direction. The community has evolved very rapidly in that last two years and has primarily organized itself around IRC at the expense of blogging and other communication channels (not that those don't exist, they are just not the focus) so if you are looking for more modern practices that's the place to go.

      --
      Peace, or Not?
    24. Re:tasty by DigiNic · · Score: 1

      You must be a Colbert fan. Hope that feeling came from the gut.

    25. Re:tasty by mrlpz · · Score: 1

      Thou shalt not take the name of l_rd Perl in vain.

      Oops...I just did.

    26. Re:tasty by thrillseeker · · Score: 1

      Hell? Maybe you meant Perl? APL is the only way to fly ...

    27. Re:tasty by Kadin2048 · · Score: 4, Insightful

      I'd offer only one correction:
      anyone with a CS degree and half a brain should be able to pick up new languages within a very short amount of time.

      There are unfortunately a great many universities turning out a great many low-quality "computer science" grads who don't know the first thing about programming, much less the intricacies of stacks and pointers in C. I've met some alleged CS grads who didn't know a compiler from a hole in the ground.

      I think the problem may be improving from how it was a few years back (the dot-com bust knocked CS off the lists of many students just looking for an easy $80k paycheck on graduation), but there are still a lot of dolts around, devaluing the degree.

      --
      "Ladies and gentlemen, my killbot features Lotus Notes and a machine gun. It is the finest available."
    28. Re:tasty by Anonymous Coward · · Score: 1, Insightful

      There are no "fake majors" only fake programs. The strength of a graduate is largely determined by two factors: quality of student and quality of program. A strong student can excel with a mediocre program, it will take more preparation outside of the classroom. A good student can do well with a great program, he'll just lower the average some and won't be as good as other graduates of the program. An inferior program at one school does not mean the degree is worthless, except from that one school. To assume that "software engineering" as a major will always prepare a student for real-world business programming better than CS or Information Systems would is a fallacy. The strength of a program and its curriculum must be examined, as well as the specific requirements of the "real-world" position. For example, if low-level programming is required, perhaps a CS degree is better, especially for something like an operating system. Most organizations don't require OS programmers, they want someone who understands business processes and controls. This doesn't happen in most CS programs.

    29. Re:tasty by Mr_Perl · · Score: 1

      I don't think that he is objecting to the language. Perl was my first language also since it has such low barriers to entry, but I no longer use it for anything other than quick hacks because its object model makes it less desirable to me than some other languages for larger projects. The Perl community is fantastic, and it is a very practical extraction and reporting language. Just not a language I'd want to build anything large with because my inclinations are elsewhere. Being exposed to a lot of different languages and experiences in general during the educational process is the key to getting a good background for software engineering.

      --

      My poetry site welcomes the unusual.
    30. Re:tasty by cayenne8 · · Score: 4, Insightful
      "I think it would be a very bad move for universities to cater to the corporate world. If you want to just learn programming, get some certs or buy a book. If you want an education, go to the university."

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      College is a means to an end....and while it is nice to learn other things to be a bit well rounded, that is extra fluff if you have the time and money for it while there, but, don't forget the real reason for going.

      If people could make good $$ without college, I doubt you'd see so many people trying to go....

      A degree gets you in the door for a job....regardless of what it is in often...you have to have one these days to get a good job.

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    31. Re:tasty by mhall119 · · Score: 1

      I had a wonderful experience with Perl, it remains one of my favorite languages actually. It's not that it's a bad language, it's that it's a bad first language because what you learn in Perl doesn't usually translate well to other languages. As another poster already mentioned, it's object model is very much a hack and in it's syntax, while wonderful once you know it, makes the transition to other languages much more difficult. Perl is very good, but it's habit forming, and not all of those habits are good.

      --
      http://www.mhall119.com
    32. Re:tasty by somersault · · Score: 1

      I knew before Uni that I didn't like Java. I'd already done 'Amos Pro' Basic, Delphi, C and C++ coding on Amigas, Macs and PCs before I came to Uni. They then had us using Java and Visual Basic for a lot of our courses (though admittedly we did get to use C on our Operating Systems course). Sad that it has taken 'professors' so long to realise that you need to teach the basics first. Though admittedly these days a lot of coders can get away without knowing many basics, using pre-made libraries to do all the heavy lifting, etc. Before I went to uni my idea of coding an application involved doing *everything* myself, I was a little terrified of the idea of networking code because I was thinking of it on a bit-by-bit level, heh. These days I know that if I want to do anything, there has probably been a library written to do it, though of course you won't learn that much if you do everything that way, but we can't all be experts on everything, and building on the work of others is a basic principal of human society anyway.. okay, getting offtopic a bit. I think that it would be better to teach students how to code in a C/C++ environment before moving them into environments where they're wrapped in cotton wool, just so that they have more of an idea of what the language is doing for them behind the scenes. Though of course following that line of reasoning, you could say that we should all just learn to code in assembly, or pure binary. I do wish I knew more about assembly actually, we only ever did pseudo-assembly code on an imaginary processor while at Uni... :P Basically I think there should at least be cursory practical introductions into lower level languages before moving the students up to the high level languages, otherwise we'll all be up to our asses in virtual machines, and one day we'll realise that nobody knows how to write a new VM for that new processor that's just been invented ;)

      --
      which is totally what she said
    33. Re:tasty by Anonymous Coward · · Score: 0

      Are you suggesting automotive engineers shouldn't have a basic knowledge of geometry...?

      --
      Slashdot requires you to wait between each successful posting of a comment to allow everyone a fair chance at posting a comment.
      It's been 4.5 billion years since you last successfully posted a comment.

    34. Re:tasty by dwater · · Score: 1

      The way I see it, a university education is supposed to teach you theory and provide a "well rounded education." It irritates me when I hear the classic "why do I have to take social science/english/art, I came here to learn how to program." I don't see why they can't do both.
      --
      Max.
    35. Re:tasty by CaptainPinko · · Score: 5, Insightful

      Sorry, but universities are meant for education not job training. The fact that jobs are the reason main people go is sadly just another sign of the times. If you look at the long history of universities you'd realise that they have focused on research and the arts. Even the sciences were so abstract that they've didn't have a use for it at the time and for many years to come. Please, lets stop perverting universities for the industry. If universities don't produce well-rounded educated people where will they come frmo?

      --
      Your CPU is not doing anything else, at least do something.
    36. Re:tasty by Anonymous Coward · · Score: 0

      "I had taught myself VB6 prior to going to uni so wasnt a newbie to programming..."

      Sorry, but you were still a noob if all you knew was VB6.

    37. Re:tasty by DittoBox · · Score: 1

      Visual Basic isn't programming. It's a glorified scripting language.

      --
      Good. Cheap. Fast. Pick Two.
    38. Re:tasty by Stamen · · Score: 4, Insightful

      Sad commentary; unfortunately you are correct, this is the view of many people.

      I think anyone who is spending 4 to 6 years getting an a degree in computer science only to get a high paying job when then get out, are a tad silly. They are really, really wasting their time. They can get an intern job right now, at a software consulting company, study their ass off (as we all have to do in this field). Within a year they will be making decent money, within 3 years making really good money. 4 years later when the person has their shiny degree, after studying Java (which probably wont' even be used then), they get the joy of getting a junior developers job.

      There is an old adage: "How do you become a writer?" "Write... a lot". This is the same with programming. You can't fake your skills, and a PHD in CS won't matter if you can't bill your clients because your application doesn't fulfill requirements or even work.

      Truthfully if all you care about is money, work in finance, or become a salesperson. The best developer in the world won't compete with a high end salesperson dollar for dollar; hell CEOs can't compete with top salespeople. Zero education required.

      I very much value a university education, but it has nothing to do with making more money. Learn, create, become a very educated person; the money will follow; the money part really isn't that hard.

    39. Re:tasty by Anonymous Coward · · Score: 0

      When I was in college, the entry level classes were all taught in Pascal. A totally useless language, but they did cover pointers and such if not memory management. But since college I've done pretty much exclusively Java programming and have had zero need for C/C++.

      In the end it's really just a question of what you plan to do. I'm not writing high performance search engines, or databases, I'm writing various types of web based applications. The emphasis in my development is on time to market and stability, and that's not C++'s strong suit. Having said that if I was doing a CS curriculum, I'd probably set it up like you described with Java being the intro and C++ being taught later on.

      However, to all of this I would add some coursework that we didn't go anywhere near when I took CS. Requirements gathering, specification development, UML, etc. Basically a solid course or two on actually designing systems rather than just algorithms and raw computer science. That's all stuff I had to learn on the fly as I was doing the work.

    40. Re:tasty by bckrispi · · Score: 1

      I would think Lisp or equivalent is mandatory at most universities. How else could you have a course in functional programming?
      Back in my day, it was Pascal. *shudders*
      --
      Xenon, where's my money? -Borno
    41. Re:tasty by b17bmbr · · Score: 2, Interesting

      Please, lets stop perverting universities for the industry
      I used to teach the AP comp sci class at my high school, but it's been dropped due to lack of interest. If you think industry has skewed what the universities are doing, you ought to see how the unis have skewed what we are doing. My school boasts that we have something like 80-90% of students graduating with A-G (A-G is the list of requirements to go to a UC or CSU, California public universities) complete. We send like 25% of our graduating seniors to a 4 year yet prepare almost all of them? This basically ensures that foreign language, which is technically an "elective" is a required course. And the list goes on...

      That the unis have become almost vassals to industry mirrors that high schools have become vassals to the unis.
      --
      My problem? I was perfectly gruntled, until some numbnuts came by and dissed me.
    42. Re:tasty by yo_tuco · · Score: 1

      "I don't understand ... what happened to the weeder courses that the CS majors went through when I was in Uni in the 80s?"

      I don't understand either. I wasn't even a CS major and had to learn Assembly and Fortran as weeder courses for an ME degree.

    43. Re:tasty by mr_mischief · · Score: 1

      I'll ask you the same question I ask everyone unhappy with "Perl's object system". Which object systems for Perl have you tried?

      There is rudimentary object support (enough for many tasks when you're not in need of a full-fledged object system) based on blessed hashes with no enforced encapsulation. That's the one most people consider since it's been around a while and most of the older docs talk about it.

      There are also a number of other object systems written as modules that are well supported by the community. Object::InsideOut is pretty popular. So is Moose. You can always just search CPAN for the word 'object' if you want to look at any others.

    44. Re:tasty by jjn1056 · · Score: 2, Informative

      Yeah, I think the basic OO support that was addd to Perl in version 5 leaves a lot to be desired, since it's extremely minimal and requires a lot of typing boilerplate to do even basic stuff. The thinking was to make the most minimal solution and see what people needed.

      If you are interested in doing real OO, I'd recommend using the Perl OO Framework called 'Moose', which you can install with 'cpan Moose' is you have a reasonably modern Perl (you might need to sudo that command, btw.)

      Moose is a full meta object system with introspection, Roles (sort of like Interfaces on steroids), and a neat syntax. check out the tutorial at:

      http://search.cpan.org/~stevan/Moose-0.33/lib/Moose.pm (which is the lastest version as of this posting)

      There's also a very active IRC channel at irc.perl.org#moose

      If you like Perl but feel envious of languages with more strongly defined OO systems, I really recommend looking at Moose. It's a big step forward for the community and give you one of the nicest and most productive OO systems around.

      --
      Peace, or Not?
    45. Re:tasty by Anonymous Coward · · Score: 0

      That's messed up on so many levels. I went to college because I wanted to expose myself to different modes of thought, new ideas, and immerse myself in a topic I found interesting, not to make more money. If you want a specific skill, such as programming in Fortan (sorry, arbitrary), go to a tech school for it. Contrary to your belief, college does not exist to prepare you for some corporate job.

    46. Re:tasty by DuckDodgers · · Score: 1

      Weeder courses are a totally wrong way to approach a subject. You eliminate a whole host of perfectly intelligent candidates who could be brilliant if they just had some more time to assimilate the material.

      It's like taking a bunch of guys who want to be strong into a weight room, putting them on the bench, and then kicking out everyone who can't bench press 225 pounds the first day. Just because some of the trainees aren't strong yet, it does not mean they lack the genetic potential to ever be strong.

    47. Re:tasty by rmessenger · · Score: 1

      I think there needs to be a distinction between learning concepts and the tools you use to learn them.

      I am currently studying computer science in university, and was first taught Java. While I agree with the distinction between concepts and tools, I do believe that C++ would be just as effective as a concept teaching tool as Java. When I first taught myself C++, I was impressed by, first, how robust the language is, and second, by how easy it would be to teach simple concepts in it without full knowledge of the inner workings of the language.

    48. Re:tasty by ceoyoyo · · Score: 1

      They don't teach C++ AT ALL anymore?

      I thought it was a bad move when my old university moved the intro courses from Pascal to Java. I much preferred the model where you do Java LAST. But after two courses in Java you always moved to C so you'd be able to understand the OS, graphics and networking courses. Plus assembly and assembly-with-wires of course.

    49. Re:tasty by Thomas+M+Hughes · · Score: 5, Insightful

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      College is a means to an end....and while it is nice to learn other things to be a bit well rounded, that is extra fluff if you have the time and money for it while there, but, don't forget the real reason for going.

      If people could make good $$ without college, I doubt you'd see so many people trying to go....

      A degree gets you in the door for a job....regardless of what it is in often...you have to have one these days to get a good job. I want to preface my comments by saying that a lot of people have a similar mindset as you do. It's highly prevalent in the United States at this point. So, it certainly isn't your own personal shortcoming for thinking like this, it's a larger societal problem.

      For a moment, put the reason why YOU go to a University to the side and consider what the purpose of the University is. It's an institution that's literally thousands of years old, dating back to the old Greek institutions of education. When Plato and Aristotle founded their schools, they didn't put up a big sign that said "When you're done, you get more money." That wasn't the promise. The promise was that by teaching you about the world, you would become a better person. That is to say, the founding concept of the University was that education lead to human excellence. And, for the Greeks especially, human excellence was not directly related to the possession of wealth.

      This understanding of education was dominant up until very recently. Everyone was required to learn Greek and Latin, so they could read Homer and Plato. Reading the Homer isn't going to get you a job, it's not going to get you a promotion, it's not going to get you an interview, and it's not going to get you laid this Friday. No one at the University used to make the claim that it would. They'd claim that reading Homer made you a better person, even if it doesn't get you a job.

      Now, as to why YOU should go to a University? If you're going for the purpose of getting a job, you're not going to understand the vast majority of your classes at the University. You're going to be wondering "Why do I have to take this anthropology class?" or "I have no interest in Operating Systems, why do I need this Operating Systems class?" and "Why do I need a foreign language, I'm going to be working with code all day." All these questions miss the larger point of what the University is trying to do to you. And if you're missing the point of the entire institution, it's exceptionally difficult to do well there.

      The whole thing is really just the result of multiple generations of corruption, I think. Employers realized that well-rounded, educated (dare I say, excellent) human beings are better for the health of a company. So they pay more for people who are excellent, and a University degree used to be a short-hand of some form of excellence. The masses of uneducated began to realize this, and started saying to their kids "If you want a good job, you need a degree." So their kids started going to the University, thinking the point was to make money. Professors, having tenure, just did what they were going to do anyway, but now we've gone two or three generations like this. We're reaching the point where current professors went to school thinking it was for money. We have boards of Universities with pressure from the state to focus less on the goal of education for excellence and more on the goal of education for job skills.
    50. Re:tasty by ceoyoyo · · Score: 1

      The purpose of going to a technical college is to give you the skills to go out and be a competent cog in the machine. The purpose of going to university is primarily to teach you how to learn and understand, secondarily to give you wide ranging knowledge in several areas. That does tend to make you employable at something above cog-level, but it can also form the basis for other careers, research, for example.

    51. Re:tasty by Creepy · · Score: 3, Interesting

      Forth and Postscript are useful for what, learning stack based languages? I learned Forth for one reason - to hack the PPC mac OpenBoot (open firmware), also used on some Solaris and IBM systems. Postscript I mucked with a bit also for hacking (I enjoyed trying to get root in college when I was a bored lab TA). I was much more successful with OpenBoot, as postscript is more geared to page layout and it's harder to do programming type operations.

      Lisp and Scheme I'll lump in "parenthesis hell." I've never seen the allure of list processing languages - they drive me nuts. In the real world, you'll probably never see them even for what it's known best for, AI (python or lua are much more useful these days).

      Haskell I've never used and seems to be stuck in the university wasteland. Ruby and Rails seem more practical, but no more than Python. To be honest, I dislike python because it uses indent significance, the one thing I despised most about Make. I've been meaning to look at Ruby, as well, because I like the Smalltalk object model, but I'm not sure how much I like linebreak significant line endings.

          As abusive as it sounds, languages like COBOL (banking/finance) or Ada (government/military) or even FORTRAN (mech-E) will get you a job faster than Haskell. Or learn RPG and dedicate your life to IBM and Unisys mainframes (*shudder*).

    52. Re:tasty by Tablizer · · Score: 1

      they still didn't really teach me what I needed to know in order to do the job I do today (DB App development).

      Universities tend to be anti-database for some reason. Perhaps because if students see how easy it is to chomp data with a few commands, they'll lose interest in mowing the lawn with bit tweazers.

    53. Re:tasty by Locutus · · Score: 1

      Thank you, the fact that it is a curriculum issue and not a Java issue was what my post was going to say, you said and lived it. The other thing I was going to post was that it didn't take long for someone to come out and attack Java. I say "didn't take long" because there was just an article on how the Alice( http://www.alice.org/ ) project was a great programmers learning tool and it so happens that they are porting it to Eclipse and Java for the v3.0 release. If you don't know, Alice is a drag-N-drop programming tool for manipulating a 3D graphics environment/world.

      Here's the spiel on the next version:
      http://www.alice.org/index.php?page=sims_announcement/sims_announcement

      BTW, a few years ago, Microsoft was out and about paying off university professors to change their curriculum to use MS .Net instead of Java. Some Universities got nailed for accepting such tainted deals. So when I read about Alice and watched the videos, besides thinking how cool it was, I also was wondering what kind of response from Redmond we would get tossed at us. It's pretty lame to say that Java is to blame for CS sudents not knowing what data structures are or what C++ programming is all about. Now I'll have to read the article and see if they advocate MS .Net instead.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    54. Re:tasty by Locutus · · Score: 1

      There are many who still have serious financial hardships getting an university degree. And many of these are doing so in hopes of having a better life than their blue collar parents. That is where I see the mixture of people wanting universities to be more business prep and less theory. Those with the bucks and/or social connections to get any job they please when they get out of school aren't so worried about what is taught.

      But having seen some noob employees coming right out of school, it's a tough on for businesses no matter what. I saw students from tech schools sleeping on the keyboard while others were running around looking for books and trying to figure stuff out. I could not put a finger on if it would be better for fine tuning IT skills since alot has to do with the person and their drive.

      I will say that for those who are literally starving students and getting a job right out of college is vital, there would be more piece of mind if they knew what they were being taught was more closely related to what was needed at the businesses in the area. But I also don't think that this is a good way to go since a core education breads people who can think for themselves and think outside the box when required. Since we seldom design software down to the methods or even classes, a society full of grunt programmers isn't going to cut it. They will need to think for themselves to get the job done right.

      A well rounded and well structured CS curriculum will do this and it has nothing to do with the Java language.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    55. Re:tasty by Anonymous Coward · · Score: 0

      That sounds like my experience at MIT.

    56. Re:tasty by dasbush · · Score: 1

      I would say that the thought that university is greater than college is a fallacy when it comes to CS. I think it has more to do with the program offered than the piece of paper that you get at the end, aside from making money perhaps.

      I am currently attending Algonquin College in Ottawa, Ontario. Many people have left Carleton University (also in Ottawa) to come to Algonquin because they felt the program was better at Algonquin. I don't know if it is true, but I do know that after three semesters I have learned at least the basics of 9 languages/scripts, including C/C++ and M68000 Assembler. On top of that, I am currently working in the field through a coop program adn getting paid to test scanners. A friend of mine is working on HD-Video Switch boards programming in assembly (he has the better deal).

      So I say that one should choose to go to the school that offers the better program to suite his or her needs, unless all he/she cares about is money... then go to university.

    57. Re:tasty by ChrisA90278 · · Score: 1

      "College is a means to an end....and while it is nice to learn other things to be a bit well rounded, that is extra fluff if you have the time and money for it while there, but, don't forget the real reason for going."

      "College" is a general term that can mean a university or a trade school or a Comunity College. Basically learning a programming language is something that should be covered in a trade school or two year community collage. If all you want to do is write the back end to some web site go the trade school route and learn all about 2008 vintage technology.

      A computer science student at a university should be learning "computer science" not 2008 vintage technology. The importent stuff that you need to know will let you do more then just right small programs. You should be lerning some theory that will remain valid for decades. Kind of like what a math major learns -- stuff that will remain valid in 2108.

      Where I went to school I think they did it right but then back then a CS major was almost an "independent studies major" and we were able to adapt the program to each student. My faculty adviser would load me some of his books and we'd make up some assignments and we'd talk every week about my projects. (Hard to make that system work in a 30,000 student public university.)

      Bottom line: ALL university CS education is not screwed up. A lot of it maybe is. What save it is that to graduate the university requires that you have a rounded education that includes liberal arts and so on. and after four year of this ou learn how to think on your own. This last part is the most important thing they can teach.

    58. Re:tasty by engwar · · Score: 3, Insightful

      Universities certainly do both educate and prepare people for jobs but I'd guess that the main reason people go to universities is to get a good job and make more money than they would otherwise.

      Let's imagine for a moment that going to a university would have ABSOLUTELY NO IMPACT on the kind of job you get or money you can make and that the ONLY thing anyone could get out of it was to be a more rounded and educated person.

      Do you really think that people would pay the kind of money that is required to go to a university if this were the case?

      The vast majority of people go to college to end up with a better job.

    59. Re:tasty by celle · · Score: 1

      "But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone."

      Wrong!

          A trade school or college is for getting skills to make money. If all you want is to increase your income this is where you should be. Where information learned at universities is specialized for what is required in the corporate world.

          A university is for research and education. A repository of knowledge. Learning centers to enable individuals to better benefit themselves and society by preserving and increasing our body of knowledge. You know, "learning for its own sake". Increased income is just a side effect of learning and doesn't always happen. Making more money should be just a side issue, not the main one. It's amazing what we'll do to ourselves for just a few more pennies rather than just because its a good thing to do. You can't measure benefits of learning in just monetary terms otherwise you've wasted your time and the universities time.

      A trade school/college is a means to an end. A university is a means and its own end.

    60. Re:tasty by hackstraw · · Score: 1

      There is an old adage: "How do you become a writer?" "Write... a lot".

      Small typo there.

      How do you become a writer? Read ... a lot, then start writing.

    61. Re:tasty by smithmc · · Score: 1

        For the record, I'm an engineer and I find the pseudo-engineering that most CS programs push out to be highly disturbing. Either do it right and call it software engineering, or remove the non-CS stuff and call it computer science.

      Oh c'mon, you can't teach an engineering discipline with teaching at least the basic math/science underpinnings. Removing all the "CS stuff" from software engineering would be like trying to teach an Electrical Engineering program without ever discussing electrons, or electromagnetic fields, etc. Engineering is the application of science, ergo you need to understand at least the basics of the appropriate science, at least moderately well.

      On the other hand, there is certainly a important place for a "pure science" track - i.e. one that is entirely academic and does not focus on techniques and practices for real-world application. Sorta like how you can get a Master's in EE (engineering), or in Electrophysics (academic). But the engineering track still has to include a fair amount of science (and the math necessary to describe/express the science) - although, at the same time, I think it is equally important to start emphasizing engineering itself as early as possible - i.e. with labs and courses that emphasize problem-solving, problem definition, functional decomposition, etc. in general, alongside courses that teach the discipline-specific math/science.

      --
      Downmodding is the refuge of the weak. Don't downmod, make a better argument!
    62. Re:tasty by Tacvek · · Score: 1

      They don't teach C++ AT ALL anymore?

      I thought it was a bad move when my old university moved the intro courses from Pascal to Java. I much preferred the model where you do Java LAST. But after two courses in Java you always moved to C so you'd be able to understand the OS, graphics and networking courses. Plus assembly and assembly-with-wires of course. Well, actually, I would recommend C then Java then C++. C first because it gives you the basic concepts used by all three languages, as well as general fundamentals of concepts like pointers. Java would be next as a way to teach the fundamentals of OO programming without having to worry about some lower level concepts nearly as much. Finally, with foundation in both the general concepts like pointers, as well as OO techniques, C++ is far easier to teach. In fact, teaching it is mostly teaching about the additional facilities, and how objects are managed in the language (objects default to pass by value (using copy constructor) rather than pass by reference as seen in Java and C#, etc.)
      --
      Stylish sheet to fix many problems in Slashdot's D3: https://gist.github.com/801524
    63. Re:tasty by Radres · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      A common misconception, and one that has ruined our higher education system. It used to be that jobs didn't require a college diploma, and not nearly as many people were interested in going to college. If all you want are vocational skills, I suggest going to a vocational school like DeVry. If you want to learn for the sake of learning, that is what university is for.

    64. Re:tasty by Radres · · Score: 4, Insightful

      I don't think the OP's point was that learning those languages would directly put the student in a better position to get a job after college. I think the point was that learning those languages would help the student to understand more about computer science.

    65. Re:tasty by nobodyman · · Score: 2, Interesting

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      No. The whole reason to go to a university is to learn . Not just learning the subject at hand, but also learning how to learn. That's what seperates a decent school from a training seminar.

      If all you want is more money, go get an IT certification
    66. Re:tasty by bidule · · Score: 2, Funny

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. What! Heresy! Perversion!

      University is there to teach you how to think, first and foremost. You'll get hired at a higher salary because you're expected to think and not just be a technician. Otherwise a degree is just a piece of paper, nothing more than a multi-year cert.

      It also means that you aim at being more than just a corporate drone. Well at least that's the theory.

      BTW, do you know the difference between theory and practice?
      In theory there's none, but in practice...

      --
      ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
    67. Re:tasty by Locutus · · Score: 1

      gotta reply to my own post since there's not 'edit' option. I just read the story and looked into who wrote the article. I will say that it does not look like Microsoft is behind getting this published except that AdaCore Inc has put a lot of effort to meld their AdaCore Pro product with the Microsoft .Net framework. They address an number if issues related to poor CS education but seem to target Java as the main reason even though they start off with how mathematic skills are getting downgraded in most CS course work and why that's bad. There is some good stuff on why different languages should be tough but really plug Ada since after all, that is what they are in business with.

      So, having read the article, they are just an Ada business run by some former NYU CS professors who are seeing some universities slack off on the general CS curriculum and incorrectly( IMO ) blame it on Java.

      FWIW, I had to take Pascal for my initial CS course work even though I had years of C and C++ programming experience. There was nothing that I can recall which couldn't have been taught in Java. The follow-on courses were either C or C++ with the exception of the Languages class and a class requiring assembly. IMO, most of that course work could be better taught in Java or Smalltalk or whatever as long as OOP techniques were used.

      I have a hard time believing what the article said about students being able to program a GUI but not being able to developer non-GUI applications. That probably has to do the curriculum and IDE usage. How difficult would it be to show that a class does not need to access GUI API's yet still contain valid/important data. Heck, just use System.out.print() and look at the console. It's the curriculum stupid but these guys are Ada nuts so they blame Java since it's finding its way further up the CS food chain. IMO.

      And they are just going to LOVE what Alice v3.0 is going to provide. not!

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    68. Re:tasty by Paulrothrock · · Score: 1

      Most of my professors had no real world experience, either. So, teaching things like team dynamics and working within a project schedule were really beyond their expertise. Granted, I've been quite successful, but I attribute most of that to my abilities, not what I learned in college. College just got me a piece of paper that opened the door.

      This is why I'm thankful I basically flunked out of the CS program at Penn State and went into their IST program. I got a much more well-rounded education, learning everything from database normalization to computer networking to web app programming and XML integration. They usually let us use the languages and applications we felt most comfortable with.

      Because of this, I am able to do pretty much everything from debugging Perl to setting up a database to writing a shell script to hardcore coding. (Right now I'm working on Fitnesse fixtures in Java.) And those folks in CS programs? They keep coming to me to fix their computers. They've got a great theoretical knowledge, but little working knowledge.

      --
      I'm in the hole of the broadband donut.
    69. Re:tasty by Zeinfeld · · Score: 4, Interesting
      I used to teach the AP comp sci class at my high school, but it's been dropped due to lack of interest. If you think industry has skewed what the universities are doing, you ought to see how the unis have skewed what we are doing. My school boasts that we have something like 80-90% of students graduating with A-G (A-G is the list of requirements to go to a UC or CSU, California public universities) complete. We send like 25% of our graduating seniors to a 4 year yet prepare almost all of them? This basically ensures that foreign language, which is technically an "elective" is a required course. And the list goes on...

      I think you are missing the mark here, the profs who wrote the original architects are both principals at a company that sells Ada tools. What they are complaining of really is the lack of demand for their stuff. Treating the argument seriously is a mistake.

      I don't think that there was ever a time when Ada was a popular teaching language for any purpose other than coding in Ada. Same goes for COBOL, Fortran and such at this point.

      Nobody would claim that there was a desperate need to teach CPL or BCPL, Pascal, or the like these days. They had their moment, they were found wanting. There are much better teaching languages these days and much better production languages.

      These days I would probably teach either Java or C# as the intro language, depending on which is ahead at the time. I might teach C# to comp sci students simply to force the students to acknowledge the fact that they need to be able to adapt to new languages. Most other cases Java is most likely to be the most useful language.

      The big change that came with Java is that when Java appeared it was the first time that a mainstream language was an acceptable teaching language. Pascal was popular in universities but the architecture was bjorked (arrays of ten elements are not a different type to arrays with eleven). The functional languages had dreadful performance and pawky support libs.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    70. Re:tasty by Oddster · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. That is absolutely wrong. You go to a University for undergraduate education so that you can learn how to learn in your field of choice, so that you can be equally well footed to learn anything in your field, be it further in academia or in industry. If you want to be directly taught the things that will "make more money" without regard for academics, you go to Vocational School.
    71. Re:tasty by StarvingSE · · Score: 3, Interesting

      If people could make good $$ without college, I doubt you'd see so many people trying to go....

      Art majors

      English majors

      Performing arts majors

      I could go on... I don't see how you have a valid point. I am not saying that the above fields are not worthy of pursuing, but people do not get into them for the money.

      --
      I got nothin'
    72. Re:tasty by Blnky · · Score: 1

      So, teaching things like team dynamics and working within a project schedule were really beyond their expertise.

      And also beyond the scope of computer science. If that's what you wanted, you should have specialized in software engineering. People keep forgetting that computer science classes should feel more like math classes than engineering or management classes. One look at TAoCP would hint at that. For the record, I'm an engineer and I find the pseudo-engineering that most CS programs push out to be highly disturbing. Either do it right and call it software engineering, or remove the non-CS stuff and call it computer science. If you're not gonna do either aggressively, give it a fake major name like "Information Technology" or "Management of Information Systems" and teach a bunch of stuff really poorly. I believe you have been unfortunately misguided. You statement that computer science classes should feel more like math classes appears to arise from the idea that computer science is a subset of mathematics. It is not. The mathematics is necessary to teach formalized reasoning, without which a computer scientist is useless. It is all telling that you comment on pseudo-engineering and then immediately mention software engineering as a valid concept. This is almost comparable to denouncing quantum mechanics as a fairy tale concept and suggesting people study the transmission of light propagation through space via ether.

      Computer science is not and never has been engineering. However don't be surprised if areas of your field happen to overlap into others and they are taught when they do. This does not mean that computer science is a superset of any field either. A skilled computer scientist no more guarantees a skilled engineer or mathematician than a skilled engineer guarantees a skilled computer scientist.

      As a professional computer scientist, I understand how it overlaps with many fields. While several mathematics and engineering principals are integral to computer science, if I had to choose, I would say that computer science is closer to philosophy than any other field.

      And as for the original quote you were replying to, I must say that the instruction of any field that requires you to work with others should always include teaching things like team dynamics and working within a project schedule.
    73. Re:tasty by StarvingSE · · Score: 1

      However, university education would be much cheaper... supply and demand at work. There would also be less money flowing, as many industries feed money into uni's in exchange for research.

      There is a definate connection between college education and getting a job/industry. However, I think many people think that the only reason that college is valuable is to make that paycheck afterward. These people tend to be your classic "i have a degree but know nothing" types. People who value the education typically have more drive and see that college is much more than an avenue to a paycheck.

      --
      I got nothin'
    74. Re:tasty by Zeinfeld · · Score: 1
      It's like taking a bunch of guys who want to be strong into a weight room, putting them on the bench, and then kicking out everyone who can't bench press 225 pounds the first day. Just because some of the trainees aren't strong yet, it does not mean they lack the genetic potential to ever be strong.

      No, its worse, its like kicking folk out for not being able to sprint 100m in a certain time.

      I have coded FORTRAN, its not that difficult. But developing a system of any size in it is dreadful and the system just kicks you in the teeth constantly when it comes to debug. I have also hand assembled plenty of machine code. I would see that as an essential skill for microprocessor design, but it isn't a programming skill any more than coding microcode is.

      Ada on the other hand is not a language that I have ever used, but for a singular reason: my Oxford college tutor famously left the design committee telling them that the language they were building was so hopelessly complex that they would not complete it in any meaningful time. And he was right.

      The reason I bring this up is that the hook in the article is that ADA is presented as being on the cutting edge of Formal methods. Well I know something about that, my college tutor was Tony Hoare, pretty much the dean of the formal methods brigade. Although Ada does have some features that make it easier to support formal methods it has even more features that make it impossible to produce a formal definition of the language, let alone prove a compiler correct. It is much easier to add formal methods features to a language like Java or C# than to remove the ugly and unnecessary complexities of Ada.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    75. Re:tasty by omfglearntoplay · · Score: 1

      Interesting, but I haven't seen the real reason most people go to college. To have some fun! Learning is secondary. ;) I'm trying to be funny, but honestly, don't live your life without a little fun. College is a good place for that.

    76. Re:tasty by dgun · · Score: 1

      I don't understand how anyone could learn java and then have the least bit problem with c++, or the other way around.

      --
      FAQs are evil.
    77. Re:tasty by ceoyoyo · · Score: 1

      Oh, I agree. Except I'd modify it a bit. Teach something that can be dead simple to start with. Pascal, Python, something like that. Get the real basics down. Then move on to C. Yeah, it's uglier, but you get speed in return. Plus it teaches the concept of a compiler, and gives you options to go to OS and compiler courses. Then I'd go back to a different language (Python is actually really good for it) to teach things like object orientation. C++ you cover in a specialty course because you'll need know about it, but it really is too ugly to efficiently teach any concepts.

      As you're doing all that, you do the digital design and assembly courses. When you've gone far enough the high level programming and low level wires and registers bits come together.

      Last, you get into things like Java. Once you know the basics then you can have the basis to understand what's going on with those languages.

      It really is a good idea to try to stick with systems the students have the capacity to understand as much as possible. Starting with Java means the whole thing is a black box until you get to fourth year where you can actually (hopefully) understand what's going on under the hood.

    78. Re:tasty by Bedouin+X · · Score: 1

      Well said, clearly these guys are complaining that their ivory tower devised business plan is tanking and taking it out on CS programs. Some of the things that they complain about like profiling, and GUI-centric design (what?) can easily be accounted for in Java though the commentary about pointers holds a bit of water.

      Regardless, I can tell you now that there is tremendous demand where I am (Atlanta) for semi-competent M/CIS-quality programmers that can render a UI and connect to a DB to perform CRUD stuff.

      --
      Dissolve... Resolve... Evolve...
    79. Re:tasty by CaptainNerdCave · · Score: 1, Insightful
      >But, the whole reason to GO to a University, is to get the skills/education to make

      >more money when finished, than you would have if you had not gone.

      funny, that's what i used to think. now that i have a couple of degrees, i finally realize that there is more to life than money. THAT is why one gets a bachelor's degree - to learn that there is more to life than just making money.

    80. Re:tasty by Zeinfeld · · Score: 1
      Well said, clearly these guys are complaining that their ivory tower devised business plan is tanking and taking it out on CS programs. Some of the things that they complain about like profiling, and GUI-centric design (what?) can easily be accounted for in Java though the commentary about pointers holds a bit of water.

      And they are from the ivory tower!

      Yes, there is a demand for the skills they seek, but that is a constant in pretty much all the computer industry. Someone learning Java can hope to work at any number of exciting forward thinking companies on the cutting edge of technology. Someone who learns COBOL can pretty much expect to spend their time maintaining someone else's code at a bank.

      It isn't the function of universities to turn out cannon fodder for companies with decrepit IT infrastructures.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    81. Re:tasty by chriseyre2000 · · Score: 1

      That's an insult to real scripting languages.
      At least VB6 was.
      VB.NET (visual fred) is a slightly different beast (although it has a known bug that will create invalid il).

    82. Re:tasty by Cederic · · Score: 1


      I could've made excellent money, a good solid well paid professional career, leaving school at 18 and getting a job. I had the opportunity, the skills, the contacts.

      I went to Uni instead out of curiousity for the experience and the fun.

      If people could make good money without college, many people would still go. Getting the skills/education to make more money is only part of the attraction of further education.

      Incidentally, if I want someone that knows how to program, I'm not going to look on a computer science course. Frankly they're usually shit programmers. In my experience the best programmers have a degree in physics*. So much for university teaching you that sort of skills. University (as the person you responded to highlighted) gives you an education, teaches you how to think. Buy a book if you need to learn how to program.

      * based on a very small and highly subjective sample set. I'd guess it's because people doing physics degrees these days need to write software to test/analyse their experiments/theories, and so learn how to write software - which isn't the focus of a CS degree.

    83. Re:tasty by cayenne8 · · Score: 1
      "I would say that the thought that university is greater than college is a fallacy when it comes to CS..."

      I'm not sure what you're saying here...are you implying that college != university??

      Strange thought to me....for instance, I went to college at the University of Louisiana...college is the general term, University of LA is the specific place I went to college.

      In Canada, does it mean something different than in the US?

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    84. Re:tasty by pyite · · Score: 1

      But the engineering track still has to include a fair amount of science (and the math necessary to describe/express the science) - although, at the same time, I think it is equally important to start emphasizing engineering itself as early as possible - i.e. with labs and courses that emphasize problem-solving, problem definition, functional decomposition, etc. in general, alongside courses that teach the discipline-specific math/science.

      That's fine. I think you're just misunderstanding me. Once you bring in software engineering topics, it's no longer computer science. Obviously you need to learn about computer science to understand software engineering. But at that point it's software engineering and not computer science. There's a reason that people on pure math tracks only end up with a cursory set of physics courses. It's applied math, not pure math. I hesitate to call software engineering applied computer science, but the analogy works well enough.

      --

      "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

    85. Re:tasty by Locutus · · Score: 1

      and another thing about having a "languages" course is that at some point, you are going to have to use a command line and compile something to run. Besides the article authors being down on the deteriorating math skills of current CS graduates, they are pretty much blaming Java for the lack of skills associated with IDE-only development. I know a few developers today who I've shared code with and who spend a way too much time dealing with their IDE instead of just looking at the code, compiling with a simple commandline and seeing what it did. Developers are showing up who rely way to much on all the wonderful things IDE's do and have lost the understanding of the commandline tools and the speed with which they can give you.

      CS classes shouldn't hide so much from the students since there are so many places where access to the underlying system is a must and an advantage.

      LoB

      --
      "Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
    86. Re:tasty by Anonymous Coward · · Score: 0

      > But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than
      > you would have if you had not gone.

      Bullshit!

      Furthermore, I think java is a CRAP teaching language. As is any other language that insists I define a class just to print 'hello world'.

      When I began teaching at college 15 years ago, we used Modula-2 as our teaching language.

      First bad decision: replace M-2 with C++. Terrible language for teaching programming.

      Second bad decision: replace C++ with java. Another dreadful language for teaching programming.

      First good decision: replace java as initial teaching language with python.

      I must say that both C++ and java look as if they were designed in the 1960s. The world has moved on and I want to use a more modern language.

    87. Re:tasty by doom · · Score: 1

      doing your homework in haskell or lisp or hell
      Hell? Maybe you meant Perl?

      Brainfuck. Real programmer's can do anything in Brainfuck.

      Or if you really want to impress someone, try inventing a language of your own and implement it on Parrot by writing a grammar in Perl 6.

    88. Re:tasty by Darinbob · · Score: 1

      I was a bit concerned when the university I was at migrated to C instead of Pascal :-) As a grader and teaching assistant, I saw a lot of students who easily learned bad ideas and then had trouble unlearning them (especially those who had dabbled in BASIC). Much like music teachers have their students practice scales endlessly, students of programming should theoretically do a bunch of rigourous exercises in order to develop their chops. Pascal was much better at "doing the scales" than C in many ways, with tougher requirements on typing. But the school was pressured to change, because "no one uses Pascal in the real world" without understanding that some sort of learning and practicing has to occur before the real world.

      Ada is a good compromise with Pascal here (too bad Modula-2 never really took off). I do wish more programmers knew Lisp or Scheme though, that's a great way of practicing your scales. I really wish more C++ programmers knew Smalltalk; most of the C++ programmers I know don't really understand object oriented programming. And everyone needs some time being frustrated with assembler. In short, an all round exposure to different language styles makes a much better programmer.

    89. Re:tasty by mrdarreng · · Score: 1

      Hell? Maybe you meant Perl? Amen!
    90. Re:tasty by emilper · · Score: 1

      The purpose of going to a technical college is to give you the skills to go out and be a competent cog in the machine. The purpose of going to university is primarily to teach you how to play the machine to your advantage.

      there, fixed that for you

    91. Re:tasty by Anonymous Coward · · Score: 0

      > That is to say, the founding concept of the University was that education lead to human excellence.

      It obviously doesn't lead to spelling 'led' correctly... ;)

    92. Re:tasty by grmoc · · Score: 1

      While it is true thgat a degree is often a prerequisite for getting many jobs, I disagree with your assessment of a university's purpose.
      What you're describing is a trade/vocational school. These exist. They train people job-skills.
      What Universities exist for is different-- they exist to teach and to learn. The imparted knowledge is only partly informational-- a good university teaches you patterns or ways of thinking that can be applied to many (and varied) situations.

      As someone who hires programmers (and being one myself), I expect a programmer to understand the concepts of programming. I do care about them knowing specific langauges, but this is merely a plus-- any good programmer will pick up a new language without much ado.

      Java is troublesome as it doesn't teach concepts that a good programmer should know. These concepts include (but are not limited to) pointers, cachability/fitting into cache, program memory size, tradeoffs between maintainability and code speed, asynchronous IO (e.g. select, poll) and others.

      A more succinct summary-- java programmers often seem (unless they have knowledge of other lower-level languages) to have little awareness of what the interaction is between their software and the hardware.
      This is purely based on my experiential evidence.

    93. Re:tasty by Bedouin+X · · Score: 1

      A agree on the analysis and design stuff. With all of the CIS stuff that has been co opted by CS programs over the last ten years, you would hope that this was one but, from my experience, it isn't.

      --
      Dissolve... Resolve... Evolve...
    94. Re:tasty by kndyer · · Score: 1

      I believe this is a critical point of discussion and one that is lost on most students entering University. Pure Computer Science revolves around development of solutions to well constrained and highly technical problems. Improving routing, devising optimal peer-to-peer algorithms, rapid search algorithms, etc.

      Good CS programs (predominantly math and science based) focus on these skills. These programs DO NOT teach how to develop complex systems, because that is Engineering and there is a separate faculty for that. However, the common understanding is that CS == application development and this is a fallacy.

      The result of this confusion is many many students entering the wrong program and complaining when it is too hard ... they wanted to be code mechanics not mathematicians. Usually, the program begins to soften, further blurring the lines and you end up with CS grads who can neither build a system nor solve an algorithmic problem.

      What industry needs is MANY well-trained Computer Engineers and a very few, extremely talented Computer Scientists.

    95. Re:tasty by ceoyoyo · · Score: 1

      That would be business, law or poly sci. The arts and humanities are more like learning to stand on the curb and scream at the machine. The sciences are about staying out of the machine's way.

    96. Re:tasty by Yaztromo · · Score: 1

      In Canada, does it mean something different than in the US?

      Yes, it does. In Canada, Universities are publicly funded institutions that are at the apex of the educational system, granting degrees in the usual selection of fields. Community Colleges are privately owned and operated concerns that are mostly analogous to the US concept of a "trade college", and typically don't offer degrees (just diplomas).

      Yaz.

    97. Re:tasty by linuxrocks123 · · Score: 1

      You're confusing the reason many (you claim most) people want a degree with what a degree represents.

      You are correct that if it weren't necessary to go to college to get most high-paying jobs, most people would not go to college. Enrollment in Ph. D. programs is low precisely because most people are motivated more by money than by intellectual curiosity.

      But, people's motivations for wanting a degree doesn't change what a degree represents. A Bachelor's degree represents a well-rounded education with a focus on a specific science or art (the major area). A Master's degree represents a thorough knowledge of a field (a mastery of it, actually), and a Ph. D. represents a proven ability to push back the frontier of humanity's knowledge in a specific area of study.

      If employers want people with only a specific technical skill, then they should hire those with associates' degrees, because that's why that degree level exists. The solution is not to change what the higher-level academic degrees mean, because a well-rounded education is beneficial for many types of work. To put it in business language, being well-rounded lets one better "think outside the box".

      Now, applying this to computer science in particular: I agree with the grandparent that focusing a bachelor-level curriculum around the language of the day is a bad idea. CS undergraduates should be taught a wide range of languages, including representatives from each of the imperative, functional, and declarative paradigms. This gives students a broad knowledge of the computer science field. Employers often want to hire people with a broad knowledge of computer science because those with a broad knowledge of computer science are needed for several types of jobs, but, even if industry demand for CS bachelor's degree-holding individuals declined, it would only mean that fewer people would likely want to pursue the degree, not that the degree has not done its job. Teaching specific vocational skills is the job of vocational schools, not universities.

      --
      vi ~/.emacs # I'm probably going to Hell for this.
    98. Re:tasty by neil-ngc · · Score: 1

      A degree gets you in the door for a job....regardless of what it is in often...you have to have one these days to get a good job. Since entering the working world, I've realised that this is patently untrue. There's specific areas where degrees are required - think engineering, medicine, those sorts of things. But people with general (or no commercial value) degrees are being hired into the same jobs as people without degrees. Decent, white collar jobs for sure, and yes, for further advancement an education is required. But what I discovered is that while my peers with degrees are getting paid the same as me, they have tens of thousands of dollars in debt that I don't have, and yet I can now get the education I need for promotions on the company dime. This myth of a degree being a requirement of a decent job is just that - a myth.

    99. Re:tasty by peterpi · · Score: 2, Funny

      I graduated with a degree in the biological sciences and another in spanish, and now I'm a perl programmer. Go figure.

      So does perl make sense to a Spanish-speaking biologist? It sure as hell doesn't to the rest of us!

    100. Re:tasty by Max+Littlemore · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      Didn't used to be. Used to be that the reason for going to University was to study and further knowledge. If you wanted to make money, you did an apprenticeship.

      I still maintain that most people who go to University to learn CS would be better served by an apprenticeship because most people learn CS to get jobs where they end up using pre-existing tools and concepts to implement pre-existing solutions to problems - much like a plumber. Sure we may now talk about java and xml, but nothing has fundamentally changed since the 1960s. It just got more bloated and easier to understand as machines got quicker.

      The industry at large would be better served too. At the moment business has to take risks on people who are qualified but lack a solid real world grounding in applying theory to day to day business problems. Some graddies come out already instinctively knowing how to fly, some take a while to get it and some never learn, but all of these types of people remain qualified and the idiots are able to jump from job to job for years building up their CV while bringing the trade into disrepute. At times a lot of graddies have problems finding work because when the economy is slower, business is less inclined to take that risk.

      If more qualifications were gained through apprenticeships, a qualification would mean that not only has the person learned the theory, but they have a few years of real work experience which they have completed in a competent and timely manner.

      True, some people may occasionally "invent" a new way of doing things using existing tools and concepts that catches on, but this is also true for plumbers. Plumbers have trade magazines, we have the internets. It is entirely in the technological realm and has nothing to do with science. It doesn't belong in University.

      --
      I don't therefore I'm not.
    101. Re:tasty by Anonymous Coward · · Score: 0

      The fundamental problem with comparing Software Engineers to corporeal engineering is that while both can be classified as engineering, the techniques involved in software engineering are vastly different from those used in corporeal engineering.

      In corporeal engineering (civil, mechanical, etc.) The most important engineering technique is design. Need to build a bridge? Better make sure you evaluate your design really well, because you only get once chance and if you screw up the bridge will fall. In software engineering, the most important aspect is testing. Unlike the bridge, you can build (i.e. compile) that program an indefinite number of times because there is relatively little penalty for a program to fail.

      Perhaps if someday other techniques are developed (we try constantly) software engineering will become more like corporeal engineering. Until then, trying to shoehorn corporeal techniques into software is a recipe for failure (most software projects fail). Of course, this doesn't mean one shouldn't have a design for software, but unlike a blueprint the final product rarely will look much like the final product, especially in the details, and that's fine as long as you have the test coverage necessary.

    102. Re:tasty by ebullient · · Score: 1

      A-men. We had to do the assembler weeder courses, too. And operating systems, and lexical analysis, and algorithms, and .. and .. and.

      I can look at most resumes today and know within a few minutes whether or not they've had any kind of theoretical underpinning to their education, and it's very very sad.

      --
      'Waste of a good apple' -Samwise Gamgee
    103. Re:tasty by Anonymous Coward · · Score: 0

      >But, the whole reason to GO to a University, is to get the skills/education
      >to make more money when finished, than you would have if you had not gone.

      I have to weep that things have degenerated so far on ./ that such is marked "insightful".

      No. The whole reason to go to college is *NOT* to make more money. If that's what you really think, you haven't had a proper educational experience.

    104. Re:tasty by insertwackynamehere · · Score: 1

      It also used to be that going to a University was not 10s of thousands of dollars. Universities have to decide what they want because they've increased their prices at twice the rate of inflation for decades and so the only real reason anyone WOULD go is basically to invest in a lucrative future. So if unis want to go back to basics and be about education and well-rounding that go back to charging a couple grand a semester and stop building the 15 millionth library or whatever just so some billionaire's name can be attached. And by the way I go to NYU, for computer science, on my parent's bill and you'd better believe that I want to get a good job when I get out and so do they. But I love computer science and I love programming, and I also like to think I'm not just a codemonkey because my true interests lie in computers and they have since 8th grade and probably even before that. Although I agree with what the people are saying about Java, however I learned Java but I also did a lot of stuff outside class just for fun with it and I think I learned a lot more than just "this is some boilerplate for doing this function, no need to understand how it works." In fact my professor was quite good, its really whether or not the students want to be programmers I think, because you can learn whats happening or memorize a few pages of sample code. My professor also made some jokes about Java not being too great.

    105. Re:tasty by Checkmait · · Score: 1

      I very much value a university education, but it has nothing to do with making more money.

      While I would dearly love to agree with your sentiments, that statement is very wrong. Unfortunately, most jobs these days won't even consider you seriously if you don't have either a university education or technical experience. And even for those that do, there is a significant pay difference between those who have a degree versus those who do not.

      It would be great if what you said is true. That way people who really don't belong in college and who would prefer not to go wouldn't be practically forced to. The reality, however, is that there is a very large pay difference (probably $20-25K/year) between people with degrees versus those who have just a high school diploma (see http://www.earnmydegree.com/online-education/learning-center/education-value.html)

      --
      "All you need is ignorance and confidence; then success is sure." -- Mark Twain
    106. Re:tasty by insertwackynamehere · · Score: 2, Interesting

      Tell me about it, everything about high school was about getting into college, since 9th grade. I think that's ridiculous, but as you can see in my other post in this thread I think it's also ridiculous that college is so expensive and then people can say "its for becoming a well rounded person." Yeah, I'm not going to make my parents happy if I graduate a couple hundred grand later and all I have to show for it is that I'm "well rounded." I'm at NYU to learn programming because I love programming and the fact is I want to get a job in programming and I want to increase my skill and have a degree so that I can actually get an interview. Sorry but I'm not going to beat around the bush and say that I never thought about my monetary future when I was decided on college at the end of high school. It's how it is, high school throws people into college which throws people into jobs. Now, dont get me wrong, I like college life and have a bunch of friends and dont sit around acting bitter the whole time, and I also don't mind taking courses outside of programming. It's just that there is the career aspect, like it or not. I just think its ridiculous that I've been under the stress of my future since I was a high school freshman and sometimes it seemed we were just being taught for the test whether it was a final or an SAT.

    107. Re:tasty by insertwackynamehere · · Score: 1

      I'm at NYU because I want to learn more about computers and because I want to be able to get a job. Jobs are not easy to get these days, and a lot of times you can't even get an interview without a degree. I'm not saying that's a good thing, I'm just echoing the reality of whatever the situation is, for better or for worse. However, I've been reading books on compsci throughout high school and in 8th grade. I've self taught myself a ton of things. But I think that I learned a lot more in my last class (which happened to be a 2nd level Data Structures taught in Java, preceding Computer Systems Organization C/Assembly) then I could have in a book. This is because I felt that I was taught as opposed to just reading. I still like reading compsci textbooks but something tells me it will be much easier to learn more over the next 4 years with an actual class. And for the record, I dont think I suffer from codemonkey syndrome because I actually do my best to understand what we're doing and not just mimic it, even if it is Java. Java has it's shortcomings, I will READILY admit that, but I think it's a red herring to some extent in this situation.

    108. Re:tasty by insertwackynamehere · · Score: 1

      I would like to add I frequently talk to people (especially Business majors) who are surprised I actually enjoy my field. I ask them "don't you enjoy yours?" and they say "of course not, but I'm gonna get rich!" Most of them have whitecollar business parents. I want to get rich but I love what I study (compsci) and cant imagine planning my entire life around something I despised. it makes me pretty fucking depressed thinking about it actually. I'm just saying this so people dont assume i'm only majoring in compsci for the cash. I like compsci but there is no way I could ignore the whole "future" and "career" thing either. Plus college is fun socially :P

    109. Re:tasty by datawhore · · Score: 1

      Actually, not exactly. While it's a popular meme of 'college = job prep', colleges aren't trade schools. That's what trade schools are for. There's a reason why you cannot get out of general ed courses, for instance. Colleges are as much a journey as their access to jobs is a destination.

      Many people have forgotten that college is for a) providing young adults time to discover who they are and what they want, b) developing a necessary understanding of citizenship and rational decision making in complex societies, c) providing a basis of knowledge to prepare future generations, and d) providing flexibility of mind and knowledge to adapt to future situations. Without these, the average young adult would have less idea of what they wanted in life, would be more susceptible to negative influence and false logic, would have a society that may not run in a way that provides a means of making a good living, and would be in a society where the trickle-down effects of poor education would compromise their grade-school learning. College is about a lot more than just getting you a plush job in a cubicle somewhere (which, by the way, will probably be ripped from under your feet in 15-20 years when you're older and less capable of change).

      If you ignore these, you fall for a typical fallacy among college students, whereby majors that are not directly leading to a job and career is considered a waste of time. One specific outcome of believing this is
      believing women getting a degree and then exiting the work force to have kids as having inherently less value to society than their partner who stays in the workforce, which when you consider the above reasons for college, clearly is a thought lacking in scope. But there are many other silly outcomes like this you'll come to if you think college = better job.

      I'm not disputing that you can typically get a better job with higher pay with a college degree. I recognize the way things work now with degree inflation is that nearly everyone should go to college, because most other people have and you have to prove yourself at least at their level - a vetting and ranking process. In many respects the masters degree is the college degree of the first half of the 20th century, thats why I have two :) Nevertheless, the money as driving factor is a presumption that I'm not sure is entirely correct. Lots of people go because other people are going, because it's the thing to do, because it's a rite of passage in society. Most everyone would agree that having a degree is better than not, obviously. But we're intellectual beings in an increasingly intellectually rigorous society, and there are many needs that the promise of more money does not satisfy to your average 17-18 year old. They want to know what the world is, where interesting stuff is, who they are not who their parents want them to be, or even just what college is. Its only a select few that are occupying themselves with thinking about being investment bankers and other high paying post-college jobs, and those kids often burn out or change their minds when they realize things like law or accounting are, indeed, boring professions.

      These kids aren't thinking job job job, they're thinking life life life. Let me put it another way - if money via job was the reason for college, why are there so many college grads that are going into obviously low paying professions? And don't answer with some elitist internet 'because they're dumber and less logical than me' stuff, please.

    110. Re:tasty by Unoti · · Score: 1

      I was taught java much to my detriment and annoyance (I had taught myself VB6 prior to going to uni so wasnt a newbie to programming).
      Never too late. Stop blaming the university and go learn C. Don't be discouraged; it's easy to write programs that compile yet don't work in C, so be prepared for that. But go do it. Best way to learn it is to try to write something simple, like Blackjack or whatever interests you.
    111. Re:tasty by ClosedSource · · Score: 1

      You say that as if it were something important to know.

    112. Re:tasty by Trouvist · · Score: 1

      By the way Locutus, for your own edification, it is "a university" rather than "an university." The requirements for "a" and "an" have to do with the sound of the initial letter. Since the 'U' in University is not a vowel sound, "a" is accepted. However, since I don't mean this to be a derogatory post, I would like to add that it was refreshing reading someone who had proper grammar and spelling besides the aforementioned, minor nitpick. Slashdot is rife with posts that are painful to read, especially when they are obviously trying very hard at being proper.

    113. Re:tasty by emilng · · Score: 2, Insightful

      You're lucky that you don't have to take out a student loan and that your parents are paying for your whole education to NYU no less. It's good that it seems like you have a passion in programming. I wonder if it's really necessary for you to be attending such an overpriced school as NYU though. For an undergrad education I think there are probably state schools or other private schools that can offer you a comparable schooling in learning how to program for a much lower price. I think the only advantage you gain going to NYU for undergrad is having the NYC experience, but working here and having grown up here, I'm getting pretty sick of it. Given the cost of your education you have to figure in the amount of time you will have to work to recoup the cost. You should also calculate the cost with compound interest and inflation. I think a better route would be to do some research and transfer to a cheaper school that offers a comparable education and then dish out the big bucks when you feel like you need to go back to grad school.

    114. Re:tasty by Anonymous Coward · · Score: 0
      I think you're missing a point here. It used to be that grade school gave you enough education to become employed, and anything after that was meant purely for "education." Then jobs got more complex, and it was high school that gave you the minimum education to become employed, and anything after that was meant purely for "education." Now jobs are even more complex. A bachelors degree is required. In the past 10-20 years, the bar has been raised yet again.


      As the world becomes more complicated, the minimum level of education required to get a half-decent job increases. It would be wrong to hold on to and reminisce about old standards. If you want to learn for the sake of learning, it's time to get your PhD.

    115. Re:tasty by insertwackynamehere · · Score: 1

      I know that I am lucky and I really appreciate my parents because they are able to pay for it, but it isn't necessarily the easiest thing in the world for them either. It's a very noticeable bill, to say the least. I personally like NYU and once I've graduated, although the state school thing has crossed my mind, however one big thing at NYU that could be very beneficial is a 5 year compsci program where the 5th year is for a masters AND NYU will pay half the tuition.

    116. Re:tasty by Hucko · · Score: 1

      Actually I think it was supposed to be a plural form of lead, as 'education' can be plural as well as singular. It is similar to "All roads lead to Rome." "Education lead to human excellence." Doesn't quite render correctly to my ears either, though.

      --
      Semi-automatic amateur armchair Australian philosopher; conjecture ready at any moment...
    117. Re:tasty by Chaos+Incarnate · · Score: 1

      It doesn't help any when there's institutions that offer CS programs but not SE; that leads to that blurring you mentioned. Half the faculty at my school focus on the theoretical aspects, and the other half are focused on applied development. Oftentimes, you never know what you'll get until you show up on the first day of class.

      --
      Benford's Corollary to Clarke's Law: "Any technology distinguishable from magic is insufficiently advanced."
    118. Re:tasty by Hucko · · Score: 1

      It generally means two different types of institutions in Australia. Probably any of the Commonwealth countries.

      --
      Semi-automatic amateur armchair Australian philosopher; conjecture ready at any moment...
    119. Re:tasty by Anonymous Coward · · Score: 0

      Didn't get there much, did you...

    120. Re:tasty by MorePower · · Score: 1

      In my experience, the people who study Art, English, Liberal Studies etc are only in it for money. They feel they need a university degree to get higher paying jobs but they have no particular interests or skills so they just take whatever major seems easiest/has the fewest requirements/doesn't involve much math or other difficult subjects.

    121. Re:tasty by Anonymous Coward · · Score: 0

      > You can't fake your skills, and a PHD in CS won't matter if you can't bill
      > your clients because your application doesn't fulfill requirements or even work.

      Than again, the reason for getting a PhD is to invent new things for which
      no requirements has ever been written, and things that clients don't even
      know are possible.

        - A Cowardly Anonymous CS Professor

    122. Re:tasty by Pollardito · · Score: 1

      I don't think that there was ever a time when Ada was a popular teaching language for any purpose other than coding in Ada. i don't know about popular, but i grew up next to a major air force base and i believe that both of the state schools in the vicinity used Ada quite a lot, because loads of their graduates went to work for one of the local government contracting companies and Ada was mandatory on a lot of air force contracts (and lots of their night school students were military or contractors). if the military is no longer demanding Ada to be used on their projects, these two guys probably have a lot to be sad about in general
    123. Re:tasty by eeyoredragon · · Score: 1

      Universities haven't been about education (vs getting a job) for... well, as long as I've had a brain enough to think about college. If university wasn't about "getting a degree", you wouldn't have tests. There'd just be a forum and people coming to be enlightened. And, as much as I would absolutely love that, that isn't going to happen. As long as there are student records that employers can get a hold of, university will never be just about learning. Though becoming more well rounded would be a great side benefit ;)

      For it to be just about educating people, teachers wouldn't get paid salaries, students could attend for free, and there'd be no third party record keeping.

      I believe the "for enlightenment's sake" people should see wikipedia as their utopia. Or close enough at least.

    124. Re:tasty by Samarian+Hillbilly · · Score: 1

      You are correct. Hiring people these daze means rummaging through dozens of identical resumes with 2-year Java courses written on them. The programmers barely know Java, forget about asking them what is paged memory.

    125. Re:tasty by Anonymous Coward · · Score: 0

      tasty is so appropriate . They get a taste for the arts and or the genitalia of their choice (the theatre kids party so hard)

    126. Re:tasty by aliquis · · Score: 1

      We actually did read C, C++, Java, Lisp, realtime programming, ..

      But anyway, I think it's good since it's stupid to code in a language which let you do so many misstakes.

      Well duh, I don't do misstakes and that's what you should learn someone will say.. Well yeah, sure, that's why there are no bugs and exploits in any apps.

      I do understand that it's kind of suck to have no people who understands the old code and can handle it thought. Or the lack of hardware knowledge, or people who can write new languages and kernels.

    127. Re:tasty by aliquis · · Score: 1

      ... and Motorola 68HC12 assembly. And that was only on bechelor anyway.

    128. Re:tasty by doktor-hladnjak · · Score: 1

      This point is actually more important than you're making it out to be. Why is college fun compared to all the other things somebody in the typical age group could be doing? Because you're surrounded by lots of other young, motivated people who are exploring their independence for the first time while figuring out what they stand for, what they want to do with their lives, what their identity is, etc. The reasons that make it fun are precisely the same reasons it's personally and academically enriching.

    129. Re:tasty by Shadow99_1 · · Score: 1

      I do better than Masters degree holders at thinking 'outside the box' in my experience, but I 'only' have 3 & 1/2 years of college. Then again I'm amazingly well rounded and college didn't have anything to do with that what so ever....

      --
      we are all invisible unless we choose otherwise
    130. Re:tasty by j_166 · · Score: 1

      It doesn't, but at least its *really* efficient at not making sense.

    131. Re:tasty by PastaLover · · Score: 1

      Haskell I've never used and seems to be stuck in the university wasteland. Ruby and Rails seem more practical, but no more than Python. To be honest, I dislike python because it uses indent significance, the one thing I despised most about Make. I seem to recall the thing that sucks about make is it requires a \t somewhere. Python can use tabs or spaces. I prefer tabs but apparently most people prefer spaces, go figure. In any case, you're unlikely to ever encounter the same type of problems you had in make.
    132. Re:tasty by Deagol · · Score: 1
      It would be great if what you said is true. That way people who really don't belong in college and who would prefer not to go wouldn't be practically forced to. The reality, however, is that there is a very large pay difference (probably $20-25K/year) between people with degrees versus those who have just a high school diploma

      The problem with that logic is, those who do go to college will likely be no better off in overall net worth than someone who didn't go to college (say, worked straight out of high school, vocation/tech school, or community college). The reason? Good financial smarts are not taught any more.

      Your *typical* college weenie will go 4 years, racking up a ton of debt. That not only includes the cost of their schooling, but the load of credit cards that are given away with t-shirts and 2-liter bottles of soda. Now, once they get that fancy job, they'll need a fancy car, fancy house/apartment, while eating our for lunch and a quick jaunt into Starbuck's to/from work every day. They'll be working 20 years to pay off that debt, and will be lucky to have a positive net worth by that time.

      Now, take your non-college person. They won't get a ton credit, and they won't have the enormous bills. Sure, their first "real job" may be making $10/hour at Bob's Hardware shop or apprenticing as an electrician or auto mechanic. Their rise to the middle class will be slow, but deliberate. And, if they're careful, they'll be in pretty good shape once they're there.

      Now.... don't misunderstand me. Most people are financially stupid -- from college grads to high-school drop-outs. Take this lovely housing collapse as a prime example of people from all levels being stupid and greedy with their money and now feeling the pain.

      I truly believe that we've reach a tipping point in this country, where a college degree is more of a liability for middle class Americans than an asset. I was given a paid-for education at Purdue by my folks (though I never finished a degree) -- and I'll forever be in their debt for that. However, my wife and I are not only *not pushing* for college (as my folks did with me), we're somewhat discouraging it for our kids, unless they *really* want to pursue a career where you simply cannot get there w/o a college degree (medical, law, etc.). That's not to say that we're slacking on making them learn some real-world knowledge and skills. Guile is what we're pushing on our kids -- that, and financial smarts.

    133. Re:tasty by __aaclcg7560 · · Score: 1

      My community college taught Java for the longest time in part because the computer department didn't have the funding to renew the Microsoft site license. When they got the site license, they were able to offer courses in other languages. Some instructors offered students an choice between Java and C++. During my last year, I was taking C++ in all my courses. I was disappointed that I couldn't take Assembly Language since I was the only student who signed up for the course.

    134. Re:tasty by ceoyoyo · · Score: 1

      Microsoft site license??

      Any language you have to pay to use isn't worth it.

      I spent most of my undergrad in a university transfer program at a regional college. The first years and business and ed students used windows machines, but we had a nice shiny Linux lab (this is ten years ago). I didn't realize we were so unusual. I guess the GUI programming course used Windows and Visual Studio, but that was it.

      The university had some godawful centralized NT system mixed up with some Netware and Unix elements. I don't think anyone actually knew how it worked. We did discover that if you put a floppy with a bad sector in one of the workstation drives it would bring down the whole system for about a day though. A nasty trick to pull on the day an assignment was due to spoil the curve.

    135. Re:tasty by xmda · · Score: 1

      "Lisp and Scheme I'll lump in "parenthesis hell." I've never seen the allure of list processing languages - they drive me nuts. In the real world, you'll probably never see them even for what it's known best for, AI (python or lua are much more useful these days)."

      Thanks for telling me, I have to rewrite my mp3 search engine in some other language then Common Lisp now. And we need to tell everyone doing all those neat CL apps to start using it for AI only, it's all it's good for, right?

      Pshh...

    136. Re:tasty by ccoakley · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      Which is precisely why Universities shouldn't go corporate. Corporations at large are very bad at assessing the human capital needs of corporations even in the near future. The language du jour ... is precisely that. What is in vogue today is not necessarily even important tomorrow. University should teach you how to learn more efficiently and give you a broad base of fundamental skills (such as theory and math) that will be important no matter what direction industry moves in. Being well rounded isn't fluff.

      Besides, if your primary goal is to make more money, those additional courses are probably of equal value. There have been many studies over the years that have shown almost no correlation between programming capabilities and pay (for some older references, read Peopleware). Take a course in verbal communication. You will make more if you sell yourself. Your metaphors and anecdotes gained from your history class may get you a better job than your actual programming skills.

      --
      Network Security: It always comes down to a big guy with a gun.
    137. Re:tasty by lejerdemayn · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. that's your reason, it's not necessarily everyone's reason I am there because I have a desire to learn.
    138. Re:tasty by Wiechman · · Score: 1

      I learned C++, C, VB, Lisp, Python, Perl, Prolog, Java, and some J2EE at my university. I had to learn Bash Scripting, PHP, and Javascript on my own. There was limited education on Linux, and barely anything on Windows from a technical standpoint. Most colleges seem to focus too much on theory, but not enough real world conditions. When I graduated, most of the work was in .NET and J2EE technologies... very discouraging for having such a variety of programming languages under my belt, and not be qualified for most of the jobs.

    139. Re:tasty by Anonymous Coward · · Score: 0
      That's ridiculous...

      That is to say, the founding concept of the University was that education lead to human excellence


      should be

      "That is to say, the founding concept of the University was that education leads to human excellence."

      which is probably the source of your confusion. It would also be reasonably normal to argue that there should be better concordance of aspect between the primary clause and the subjunctive clause, so:

      "That is to say, the founding concept of the University is that education leads to human excellence."

      or

      "That is to say, the founding concept of the University was that education led to human excellence."

      however, since the founding was in the past, we should keep that clause in the past, but since education continues to lead to human excellence, that should be in the present. As "education" is a singular noun, it's "leads" rather than "lead" or "led".

      Finally:

      My education
      Your education
      His education
      Our educatio (although "educations" is also acceptable: "Our respective educations...")
      Their education (ditto, "Their educations were very different from one another" vs "They were showing off their education.")

      Doesn't quite render correctly to my ears either, though.


      Trust your ears more.

    140. Re:tasty by shadow169 · · Score: 1

      >>If people could make good $$ without college, I doubt you'd see so many people trying to go....

      Art majors

      English majors

      Performing arts majors

      I could go on... I don't see how you have a valid point. I am not saying that the above fields are not worthy of pursuing, but people do not get into them for the money.


      No, he didn't say "If people could make just as crappy $$ with college as without, ..."

      I don't see how _you_ have a valid point. You included examples that are completely opposite of what the gp meant.

    141. Re:tasty by dookiesan · · Score: 1

      This is insanity. How do you even get an interview for these positions at "software consulting company" without having the degree on your resume? You can send your resume out all day long but if you don't have CSBS on it no one is biting.

    142. Re:tasty by Doctor+Memory · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. You're confusing a university with a trade school. If all you want is training in a specific line of work, then get a two-year degree and pick up some industry certifications and fall to. A two-year degree with an MCSD will get you in the door in a lot of places.

      However, your career path will likely be capped at "senior developer" — you'll never get the "software/systems architect" role (and the really big zorkmids) w/o a full CS degree. Or if you do, it'll be five years or so later than you would have if you'd had a degree to start with, because employers won't assume you can do the job (or worse, will assume you can't do it) and you'll have to prove that you can.
      --
      Just junk food for thought...
    143. Re:tasty by mrjb · · Score: 1

      I don't do misstakes Right.

      --
      Visit http://ringbreak.dnd.utwente.nl/~mrjb/growingbettersoftware to download your free copy of the book
    144. Re:tasty by Biffers · · Score: 1

      I went to uni part-time thus it took me quite a while to graduate. During the years that I attended classes, the CS curriculum changed a few times. The language of choice went from C to C++ and then to Java. In truth, the skills of the student population declined with each change. The more abstract the programming language the less the students seemed to understand what they were doing. so, whats the difference? if you ask an undergrad with a "java education": "whats involved in creating a socket"? the reply is simply "create a new socket object" if you ask the undergrad with a "C education" the very same question, the answer will be "create a socket descriptor, bind to a port, listen to a port, accept a connection, signal handling, etc..." which student do you suppose knows more? This is absolutely not a slam at Java. I truly believe that Java allows you to produce fantastic results with less effort. My real complaint is that for students, writing software in java abstracts the underlying logic. This is what uni students should be learning

    145. Re:tasty by Stamen · · Score: 1

      It's called an internship, you work for free. And you demonstrate programming ability, I don't know how many people I've interviewed that have no project that they've worked on to show me. Would you hire an artist who doesn't have a painting to show you? That's insanity. Trust me, you get very few candidates that actually show an interest in development and are promising. If free sounds terrible to you, do the math on your university education (mind you, I really think you should get a degree, but not for a development job only).

      True some companies have stupid HR departments that simply grep for keywords; which is just silly as no entry level person will know c, c++, java, Windows, Unix, AJAX, HTML, XML, .net. etc, etc. In that case, just lie to get through the HR department. Actually, once you have enough experience to pick your job, I'd just avoid these type companies altogether, as that is a red flag to me. Only technical people can interview technical people.

      Second, like all good positions in the world, move to where the industry is. If I wanted to be an actor, I'd move to LA; it's infinitely harder to get started in acting in Omaha.

    146. Re:tasty by Anonymous Coward · · Score: 0

      It irritates me when I hear the classic "why do I have to take social science/english/art, I came here to learn how to program."

      Why does it irritate you to hear people voice their preference to learn one particular subject over another? While I would agree that being a well-rounded student is always an advantage, the definition of "well-rounded" is relative. Instead of being well-rounded in respect to all subjects, maybe someone would rather be an expert in one subject and at the same time be well-rounded within their field of study. Instead they are forced to waste time being well-rounded in all subjects which really frustrates and detracts from more genuine, interest-based learning. Further, if a student learns about a subject they aren't interested in, as time goes on, much of the information that was learned will be lost. In my view, that has always been the problem with our education systems all the way from grade school through college -- a lot of wasted time for the appearance of being well-rounded.

      The specific languages you learn in the university doesn't really matter; anyone with a CS degree and half a brain can pick up new languages within a very short amount of time.

      Doesn't matter, eh? Let's just teach them BASIC or some other obsolete language then. In truth, the material and languages taught matter a great deal. If colleges are to be viewed as a place to learn the skills necessary for a successful career, they will need to teach current and relevant material to that end. Otherwise, college should be viewed as a place to learn for the sake of learning only and not for the advancement of a career.

      I think it would be a very bad move for universities to cater to the corporate world.

      Maybe it was that well-round (cough, cough) education that taught you that universities would be catering to the big, bad "corporate" world if they teach the current skills needed for today's IT careers. While the corporate world does have unmistakable influence on the IT industry, there are many other forces at work and it shouldn't be assumed that just because the corporations are on-board with a particular technology that it must be a bad thing. Further, there are many other non-corporate institutions that one could work for if they have something against organizations that make money. Although, that would be a little hypocritical unless this person plans to work for free. :-)

    147. Re:tasty by Checkmait · · Score: 1

      I would say that you have an excellent point. It is most unfortunate that in our nation instant gratification and an attitude of throwing money around is prevalent. I guess I didn't figure that into my estimation. What I was pointing out was that the high-school graduate who starts out at $10/hour as a cashier will be outdistanced by the college-graduate programmer earning $60,000+ a year (unless he/she gets a job at EA).

      What I should have said was that the high-school graduate will be outdone by the college graduate after several years, providing that both are fiscally responsible (and that's a BIG if, especially considering the very laidback, "it's not my problem" culture in campuses today).

      --
      "All you need is ignorance and confidence; then success is sure." -- Mark Twain
    148. Re:tasty by Mark_MF-WN · · Score: 1

      Do more. Try doing your homework in haskell or lisp or hell, write in forth or postscript. It's a billion times easier to learn a language when you have someone else telling you what to do in it, and a billionth of the stress when your paycheck doesn't depend on it working.
      Maybe I'm a little behind the times ... but back when I was in school, we had assignments in every one of those languages.
      • AI was taught in prolog and perl.
      • Functional programming was taught in Haskell, Lisp (for some reason...), and some kind of weird micro-lisp that the professor invented.
      • Operating systems required C for the assignments, although they never bothered to teach anyone how to use it; they expected you to learn C, unix programming, how to use GCC, and the intricacies of pthreads completely on your own during the narrow window of time in which the lab was available.
      • Computer architecture used assembly and Verilog (does that count?) for computer architecture.
      • Graphics class used a touch of postscript for procedural graphics.
      • Database apps used VisualBasic and SQL.
      • Windows programming was taught in C++/MFC (frankly, every major C++ API is like it's own language; I suspect you're familiar with this).
      • Networking was done in Java and bash scripts.

      I didn't even finish the degree (I switched to chemistry), and we covered all of that. Granted, that was at a university and not some little cow college. Still, I'm surprised that even the most basic of CS curricula wouldn't include SOMETHING other than Java.

      Don't get me wrong -- Java's great, and I dig coding in it. But there are much more appropriate languages for many types development. And by knowing multiple languages, programmers gain a vastly deeper understanding of how programming is actually done, rather than just a bunch of syntactic tomfoolery that just happens to get the job done.

      and like hell I'm going to show up at work and replace a production app with ruby for the hell of it
      It doesn't have to be a production app. I've been learning the windows scripting shell, WMI, and Active Directory's COM automation stuff, just so that I can shave maybe 15 seconds off of my call-time. I do tech support; we're not timed or anything, but I'm deeply impatient. But I suppose it takes a very special kind of impatience to spend hours reading TechNet and inflicting VBScript upon oneself.
    149. Re:tasty by Mark_MF-WN · · Score: 1

      Did you actually go to a university? If so, you must have somehow completely failed to notice the vast numbers of Literature, History, Womens Studies, and Philosophy -- all working hard and paying good money for little more than the satisfaction of learning. And of course, for opportunities to perform the reproductive act, one of the few tangible benefits of taking those programs.

    150. Re:tasty by Ash+Vince · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. That might have been your reason to go to university, but it is certainly not everyones reason. I am a software developer, I learnt to program before I was 10 years old (ZX Speccy). When I went to Uni, I could have just gone and got a CS degree. I would have rehashed alot of stuff I had long since taught myself or done evening classes in but been given a nive piece of paper telling me I knew how to program.

      Instead I choose Physics with Space Technology because it sounded interesting. I got to spend several years doing stuff that was very hard and did not come to me naturally thereby expanding my mind quite considerably. I got to learn about exploring the universe even though I knew some of the theory we learnt would never be put into practice in my lifetime.

      I always knew I would eventually go back into working with computers as I have always loved software development since the first game I wrote on that Speccy.

      If people could make good $$ without college, I doubt you'd see so many people trying to go.... You can. It is harder but if you are very good at what you do and stand out as having a passion for it all you need to do is get your foot in the door. My first job involved me doing an unpaid apprentiship for 5 weeks. By the end of week 1 I was bored and asked for a proper project of my own. The boss gave me one but said not to worry if it got taken from me when someone else was ready to start it as I was not expected to be working on my own projects yet. By the end of week 2 I had made significant progress, had already been near gauranteed a job and the original developer who was tasked with the project was starting something else instead. I worked for that company for 2 and half years after they started paying me.
      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    151. Re:tasty by Freebirth+Toad · · Score: 1

      But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone. College is a means to an end. Money is a means to an end. Maybe you want to put your (possibly future) kids through college, or pay some horrendous medical bill, or maybe something else entirely. But you shouldn't assume that money is going to solve ALL your potential problems, and thus not set any actual goals in life.

      I don't think money is as effective as learning in providing me satisfaction. If I could, I'd remain a student forever. In the Real World, I have to do something productive instead of just acquiring skills that could theoretically be productive (all MTV jokes aside).
    152. Re:tasty by bgee · · Score: 1

      I can't open the website of http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html Who can post the whole article "Computer Science Education: Where Are the Software Engineers of Tomorrow?"

    153. Re:tasty by bgee · · Score: 1

      I can't open the website of http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html [af.mil] Who can post the whole article "Computer Science Education: Where Are the Software Engineers of Tomorrow?"

    154. Re:tasty by Anonymous Coward · · Score: 0

      "But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

      College is a means to an end....and while it is nice to learn other things to be a bit well rounded, that is extra fluff if you have the time and money for it while there, but, don't forget the real reason for going."

              Congratulations, you've just described a community college. They'll get you up and being able to write in some specific language and development environment in no time. In University you are supposed to learn all the theory etc. as well, that is in fact the point of it.

                Basically the point of the article, and what you don't seem to understand, is that the "fluff" is the real reason for a university education. I must admit, most of my classes were also in Java (switched from..ugh...Pascal.. the semester before I started). But, I took several classes where we did work in LISP, Standard ML, C, probably a few others. Really the point of that was not to LEARN standard ML, LISP, etc... it was intentionally set up to expose us to radically different programming paradigms, to keep the mind flexible. Now if someone is like "Hey, we want to write this project in language xyz" instead of just being screwed if it's not enough like Java, I've usually got some basis to compare it to and can pick the new language up easily enough. (Well, maybe not so much if someone decided to write a project in brainfuck.. but you know, who can possibly be good at that 8-).

                The other "fluff" where we did a roughed-up design of a 68000 CPU, looked into operating system design, etc. is also useful. Well, in some instances it's not, but in instances where it's like "why is this code running so poorly?" it's good to know how a CPU actually works, at least in general terms how it's interacting with the OS, have some idea of what the high-level code is actually doing in other words. Really for examples of code people can make that DON'T know this, see thedailywtf.com 8-).

    155. Re:tasty by rbanffy · · Score: 1

      "Lisp and Scheme I'll lump in "parenthesis hell." I've never seen the allure of list processing languages - they drive me nuts"

      It's obvious that, although you may have achieved a passing grade, you didn't learn the real lessons being taught.

      "As abusive as it sounds, languages like COBOL (banking/finance) or Ada (government/military) or even FORTRAN (mech-E) will get you a job faster than Haskell"

      A lot of your points could be explained by you entering a CS career with the "get you a job" priority. First you learn what you can do well, then you get the job.

      Compsci is as much capable of turning Joe Sixpack into a programmer as any amount of swimming classes are capable of turning him into a fish.

  2. University should be about people by Anonymous Coward · · Score: 2, Funny

    I'm concerned about the narrowm view of the world IT people and engineers
    have these days. I think the problem starts at college -
    There's a culture that somehow science is more rational and usefull
    then the humanitities. Lecturers encourage students to joke about arts
    students, and humilaite them whenever possible. This encourages
    eliteism, and I for one am sick of it.

    Let's tell it like it is. 'science' is just as much about opinion as
    the humanities. Research simply follows the fad of the day. Take
    dieticians for example. These men and woman believe that just because
    they have degree in medical science that they are all knowing. Why,
    what they recommend one day may kill you the next! (see the DDT story
    for more information.) Science is 95% opinion then facts, lets face
    it. What about astrology, the most rediculious of the sciences! But I
    degress...

    Another example is music. We know what sounds good. Everyone aggreed
    that Valves for instance sound great. But knowitall engineers use
    trensastors with inferious sound quality just to save a few bucks.
    They argue with numbers. Hey, I don't want to do maths just to listen
    to music. I know what I like. You cannot apply objective reasoning to
    a subject which is intristically subjective. But try telling those
    recent grads with their useless piece of paper that and they go all
    mightier--then-thou.

    The problem with you technical guys are that you are all so eliteist.
    Whilst you want to trun collage into a trade school with yore narrow
    minded views that collage should be a job training centre, humanities
    are focused on making you a well rounded person who is auctually
    interesting to be with, not a boring focuesed geek. Really, it makes
    me so mad when people say "oh, he's doing a humanities degree, that's
    easy". I have to read *3* *books* *a* *week* on average. Not picture
    books either I assue you. It is a lot of work, but the upshot is
    improved grammer and spelling skills that are lacking in the
    technical. As for those that say "you will be working at mcdonalds" ,
    I'm going on to so a PhD in socialolgy where I'll be line for tenure
    where I have a much more rewarding job then beeing a science freak or
    an engineer. Anyways, all I have to do to be a engineer wold be to get
    my MSCE and how hard couyld that be? techincal stuff is simply
    whatever fad the market thinks is hot at the moment, but all great
    things were done by humanities.

    You technical types are far to narrow minded and cynsical. You should
    learn to enjoy life.

    Peace be to god, he transcends all.

    1. Re:University should be about people by Anonymous Coward · · Score: 0

      you're the reason the humanities have fallen into disrepute. you, and people like you.

    2. Re:University should be about people by Exitar · · Score: 5, Funny

      "I have to read *3* *books* *a* *week* on average. Not picture books either I assue you. It is a lot of work, but the upshot is improved grammer and spelling skills that are lacking in the technical."

      It does not work for you. In your post mispelled:
      narrowm, lets, aggreed, trun collage, auctually, focuesed, assue, grammer, socialolgy, beeing, couyld, cynsical

      Read more...

    3. Re:University should be about people by Anonymous Coward · · Score: 0

      I'm concerned about the narrow view of the world IT people and engineers
      have these days. I think the problem starts at college -
      There's a culture that somehow science is more rational and useful
      then the humanitities. Lecturers encourage students to joke about arts
      students, and humiliate them whenever possible. This encourages
      elitism, and I for one am sick of it.

      Let's tell it like it is. 'Science' is just as much about opinion as
      the humanities. Research simply follows the fad of the day. Take
      dieticians for example. These men and woman believe that just because
      they have a degree in medical science that they are all-knowing. Why,
      what they recommend one day may kill you the next! (see the DDT story
      for more information.) Science is 95% opinion then 5% facts, lets face
      it. What about astrology, the most ridiculous of the sciences! But I
      digress...

      Another example is music. We know what sounds good. Everyone agreed
      that Valves for instance sound great. But knowitall engineers use
      transistors with inferior sound quality just to save a few bucks.
      They argue with numbers. Hey, I don't want to do maths just to listen
      to music. I know what I like. You cannot apply objective reasoning to
      a subject which is intrinsically subjective. But try telling those
      recent grads with their useless piece of paper that and they go all
      mightier--then-thou.

      The problem with you technical guys are that you are all so elitist.
      Whilst you want to turn college into a trade school with your narrow
      minded views that college should be a job training centre, humanities
      are focused on making you a well-rounded person who is actually
      interesting to be with, not a boring focused geek. Really, it makes
      me so mad when people say "oh, he's doing a humanities degree, that's
      easy". I have to read *3* *books* *a* *week* on average. Not picture
      books either I assure you. It is a lot of work, but the upshot is
      improved grammar and spelling skills that are lacking in the
      technical subjects. As for those that say "you will be working at McDonalds" ,
      I'm going on to do a PhD in sociology where I'll be in line for tenure
      where I have a much more rewarding job then being a science freak or
      an engineer. Anyways, all I have to do to be a engineer would be to get
      my MSCE and how hard could that be? Technical stuff is simply
      whatever fad the market thinks is hot at the moment, but all great
      things were done by humanities ?.

      You technical types are far too narrow-minded and cynical. You should
      learn to enjoy life.

      Peace be to god, he transcends all.

      The defence rests. -(Current CS student with degree qualifications in Genetics, Chemistry. Reads 3-4 books a week for fun. Assures you they are most certainly not picture books, either.)

    4. Re:University should be about people by Anonymous Coward · · Score: 2, Funny

      Did you mean: grammar

      FAIL

    5. Re:University should be about people by Anonymous Coward · · Score: 0

      On the contrary, this poster raised my opinion of arts students tenfold!

    6. Re:University should be about people by GNUALMAFUERTE · · Score: 1, Troll

      Talk about narrow minds. You start complaining about elitism in science, and how engineers supposedly make fun of humanities.

      Well, We actually make fun of assholes like you. Music is hard math. Poetry would be impossible without math. All knowledge has it's hard, strict, logic and mathematic side, and a more artistic, soft side. In Computer Science, it's pure math and logic to learn assembly, but an elegant hack is nothing but art. Poetry comes from the heart, once you learn what a dactylic hexameter is.

      Smart people loves knowledge, and they respect it, so they choose one particular kind of human knowledge that they like the most, and they specialize in that field, but they understand that once philosophy covered all sciences, and that eventually a musician and an engineer are just equally valuable professionals developing in different fields, they have to complement each other.

      OTOH, small minds, like yours, that have a mother that wants their son 'to be a doctor', and doesn't have the brains or the nuts to compute an integral, but still want to go to college to somehow magically feel superior to others, get into humanities, thinking that just debating nicely about what came out of their asses is still science. The sad part is that most of you get away with it.

      At a given point, people start pointing out an obvious fact: You are an asshole, and so you post angry, off topic comments to slashdot, trying to denigrate engineers, when actually you are only denigrating yourself.

      And if throughout your post, still some reader is not sure about the obvious fact that you are a brainless asshole, you freed them of any doubt by confessing your believe that 'god' created as out of his ass.

      Your IQ varies between Mr. Not Sure and President Camacho, but overall, you behave like an amoeba.

      --
      WTF am I doing replying to an AC at 5 A.M on a Friday night?
    7. Re:University should be about people by tscholz · · Score: 1

      Wow, aren't we full of ourselves!?

    8. Re:University should be about people by antek9 · · Score: 1

      I have to read *3* *books* *a* *week* on average. Not picture books either I assue you. It is a lot of work, but the upshot is improved grammer and spelling skills that are lacking in the technical. As for those that say "you will be working at mcdonalds" , I'm going on to so a PhD in socialolgy where I'll be line for tenure where I have a much more rewarding job then beeing a science freak or an engineer.
      Oh, the irony! My advice: read even more books, or use Firefox while posting. It comes with a spell checker.
      --
      A World in a Grain of Sand / Heaven in a Wild Flower,
      Infinity in the Palm of your Hand / And Eternity in an Hour.
    9. Re:University should be about people by Fred_A · · Score: 1

      Talk about narrow minds. You start complaining about elitism in science, and how engineers supposedly make fun of humanities. Oh, lay off him, he has to read *books* already !

      --

      May contain traces of nut.
      Made from the freshest electrons.
    10. Re:University should be about people by lottameez · · Score: 1

      um..."mispelled"?

      --
      Yeah? Well I think you're overrated too.
    11. Re:University should be about people by mofag · · Score: 1, Funny

      What's the big deal with writing grammar as grammer. He is just being a good American and helping to further differentiate and dumb-down the US version of the English language. After all when: tyre is spelt tire; gaol is spelt jail; realise is spelt realize (my gods - how do you play scrabble?), it can only be a matter of time before grammar is spelt grammer.

      My point being that if you're gonna act like you have a stick up your arse (ass being a beast of burden), you need to get a nice British passport like mine. If you're happy being American then accept that its your job to make the English language more phonetic.

      Oh and for the record, university should not be about people. It should be about standards but that argument was lost in the US and Canada a long time ago it seems.

    12. Re:University should be about people by GNUALMAFUERTE · · Score: 1

      And not just picture books. Boy, that must be hard.

      --
      WTF am I doing replying to an AC at 5 A.M on a Friday night?
    13. Re:University should be about people by halber_mensch · · Score: 1

      The problem with you technical guys are that you are all so eliteist.
      Whilst you want to trun collage into a trade school with yore narrow
      minded views that collage should be a job training centre, humanities
      are focused on making you a well rounded person who is auctually
      interesting to be with, not a boring focuesed geek. Really, it makes
      me so mad when people say "oh, he's doing a humanities degree, that's
      easy". I have to read *3* *books* *a* *week* on average. Not picture
      books either I assue you. It is a lot of work, but the upshot is
      improved grammer and spelling skills that are lacking in the
      technical
      .

      From this revealing snippet, you may want to re-evaluate the effectiveness of your education.

      --
      perl -e "eval pack(q{H*},join q{},qw{70 72696e74207061636b28717b482a7d2c717b343 637323635363534323533343430617d293b})"
    14. Re:University should be about people by jollyreaper · · Score: 1

      Yes, this is a troll, but it's a brilliant one. I don't want to start a religious war here but I think he should be modded up.

      --
      Kwisatz Haderach
      Sell the spice to CHOAM
      This Mahdi took Shaddam's Throne
    15. Re:University should be about people by linguizic · · Score: 2, Funny

      I studied to become a sociologist, but all those circle jerks made my dick hurt!
      Seriously, sociology is full of shit. It's just an excuse for liberals (of which I am one) to make up reasons why everyone else should be liberal.

      --
      Does this sig remind you of Agatha Christie?
    16. Re:University should be about people by Exitar · · Score: 4, Funny

      Ehm...
      .
      1. English is not my first language.
      2. I'm a techie...
      3. I read only books full of pictures!

    17. Re:University should be about people by KenshoDude · · Score: 1

      All knowledge has it's hard, strict, logic and mathematic side, and a more artistic, soft side.

      Your post, especially this part made me snicker. I'm sure you believe indignation has some mathematical algorithm associated with it too, right?

      The extent to which professedly "rational" people will become overwhelmingly *emotional* in defending their strictly logical rationality just tickles me. As Eddie Vedder wrote in the song "Not For You"... When you hate something... doncha do it too?

      You are an asshole, and so you post angry, off topic comments to slashdot Oh the irony :)
    18. Re:University should be about people by Tablizer · · Score: 1

      You just dammaged the reputation of Anonymous Coward. Now Mr. Coward will never get a job.

    19. Re:University should be about people by Anonymous Coward · · Score: 0

      "I have to read *3* *books* *a* *week* on average. Not picture books either I assue you. It is a lot of work, but the upshot is improved grammer and spelling skills that are lacking in the technical."

      It does not work for you. In your post mispelled:
      narrowm, lets, aggreed, trun collage, auctually, focuesed, assue, grammer, socialolgy, beeing, couyld, cynsical

      Read more...


      Yeah, but imagine how bad his/her spelling was before all this reading!
    20. Re:University should be about people by Chris+Burke · · Score: 1

      1. English is not my first language.
      3. I read only books full of pictures!


      Just some advice for a non-native speaker... In English, Penthouse is referred to as a "magazine" not a "book". ;)

      --

      The enemies of Democracy are
    21. Re:University should be about people by Anonymous Coward · · Score: 0

      "Oh and for the record, university should not be about people. It should be about standards but that argument was lost in the US and Canada a long time ago it seems."

      Certainly this would never happen in the UK, where institutions with such flowery names as "Thames Valley University" could spring up, with corresponding "standards" to boot.

      Lay off and get back to "basket weaving 101" (US) or "MA in Cultural Studies" (UK) ...

      Not that there would be much of a difference.

    22. Re:University should be about people by mofag · · Score: 0

      Fair point. In the UK though, and I think across Europe too, academics from one university come and checkup on the final exams and grading of students at another in an attempt to make sure that fly-by-night universities do not get to hand out degrees willy-nilly. So far as I know there is no such quality-control mechanism in North America. That is not to say that North American tertiary education is rubbish and European is great - that would be nonsense.

      However, the quality of North American education and the value of a degree gained in North America appears to rely entirely on the standards in place at the institution granting the degree and even in that particular department whereas, in the UK and so far as I know throughout a large part of Europe, we have a system of academic institutions keeping each other in line. My wife teaches at a Canadian University and, due to the business model embraced by most academic institutions worldwide these days, there is a ridiculous pressure to please the students.

      She comes from Eastern Europe and I come from the UK and in both places we can safely say that the teachers did not give a flying fuck whether we passed or failed so long as standards were maintained.

      In short then, in North America, at present at least, University IS about people (or perhaps one should say "clients") whereas in Europe, whilst standards may be slipping, there is still a mechanism in place to attempt to maintain them.

    23. Re:University should be about people by Anonymous Coward · · Score: 0

      "Seriously, sociology is full of shit. It's just an excuse for liberals (of which I am one) to make up reasons why everyone else should be liberal."

      If you'd stuck with it beyond the first year, you might have a different view. But that would have required - gasp! - reading. Possibly as many as three books a week ...

    24. Re:University should be about people by Anonymous Coward · · Score: 0

      Also:

      rediculious, degress, yore and techincal.

      Not to mention all the grammar errors (then instead of than, improper usage of words, etc.).

      And please. Who among us considers astrology to be a science?

    25. Re:University should be about people by Anonymous Coward · · Score: 0

      You missed one: God is capitalized.

    26. Re:University should be about people by linguizic · · Score: 1

      I know you just finished your first semester in college, but do you have to bring your arrogant idiocy here? Look, my education is in a "humanity" (linguistics if you want to know), and it's arrogant little pricks like you that give those of us that are actually interested in discovering real falsifiable knowledge about the human condition a bad name. You want to know why it's hard for people with degrees like mine to get a job in the real world? Because of pricks like you. You want to know why sociology and linguistics programs around the world are underfunded? Because of pricks like you. So go back to working on your lame ass page on MySpace and then curl up in a ball on the bunk bed in your dorm and Foucault yourself.

      --
      Does this sig remind you of Agatha Christie?
    27. Re:University should be about people by Anonymous Coward · · Score: 0

      I studied in France when Foucault was still alive, and to see him considered a sociologist (certainly no one did then, not even in France) has me somewhat worried - which particular community college did you have your degree printed at?

      For what it's worth, "people with degrees" have fewer problems getting a job "in the real world" than you think - provided they are a little less opinionated, and perhaps a trifle more literate, than you are. And yes, that certainly applies to linguists.

      Perhaps you ought to loosen up a little ...

    28. Re:University should be about people by spwatkins · · Score: 1

      You missed a bunch - usefull, humanitities, humilaite, rediculious, degress, trensastors, inferious, intristically, yore, wold, techincal.

      This *must* be a troll, no real person could make such a perfectly ironic post.

    29. Re:University should be about people by linguizic · · Score: 1

      For the record, I never referred to Foucault as a "sociologist". I am happily employed with a major dotcom doing work that I love. It was hard won getting here, perhaps because of my "illiteracy". And yes, I'm an easy going guy until people start throwing BS around.

      --
      Does this sig remind you of Agatha Christie?
    30. Re:University should be about people by DJGravitron · · Score: 1

      Actually he/she spelled those words you listed correctly, it's just that he/she misspelled narrow, lets, agreed, ? college, actually, focused, assure, grammar, sociology, being, could and cynical. Oh, and you misspelled misspelled. 8^)>

    31. Re:University should be about people by Anonymous Coward · · Score: 0

      "I'm an easy going guy until people start throwing BS around."
      Get a mirror, and then see what happens.

      You're merely suffering from that same disease which afflicts a lot of kids after their first degree (a second one rarely follows in those cases) - i.e. the delusion that they know something. Given your unshakeable - though unjustified - belief in yourself at the expense of others, you'll probably make it to middle management, which is the civilian equivalent of an NCO.
      Good luck.

  3. software engineering != computer science by gangien · · Score: 5, Insightful

    "A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada)"

    that's true, but again soft engineering/programming is a subset of computer science (maybe, i suppose you could argue they aren't)

    "Computer science is no more about computers than astronomy is about telescopes."
    - Edsger Dijkstra

    1. Re:software engineering != computer science by hedleyroos · · Score: 5, Insightful

      Dijkstra did say that, and if the software world consisted of only theory then we could all get 90% for our efforts and be happy with that.

      In practice systems have to work 100%, and when your graph search algorithm (by Dijkstra naturally) segfaults due to dereferencing a wrong pointer then computer science is very much about computers.

      I'm just worried that too few students these days know assembly and C, which leaves us in a predicament when the current generation of kernel devs retire.

    2. Re:software engineering != computer science by Jackmn · · Score: 3, Insightful

      and if the software world consisted of only theory then we could all get 90% for our efforts and be happy with that.
      University is not occupational training.

      In practice systems have to work 100%, and when your graph search algorithm (by Dijkstra naturally) segfaults due to dereferencing a wrong pointer then computer science is very much about computers.
      Computer science is not computer programming.
    3. Re:software engineering != computer science by bigstrat2003 · · Score: 4, Insightful
      True. Besides, the idea that Java is damaging to students is pure bullshit anyway. If the students are learning the Java way to do things, and nothing else, then they have horrible professors. I learned CS from good profs (well... one good and one bad), and surprise, even though I got my start in Java, I am perfectly capable of doing things in other ways.

      When I took data structures, and we used C++, I didn't have mental convulsions because Java had wrecked up my thinking so much (although I did have mental convulsions cause C++ is incredibly messy to read at a glance), I learned different ways of doing things. So, maybe these professors should look at whoever's teaching these kids so sloppily, not the language.

      --
      "16MB (fuck off, MiB fascists)" - The Mighty Buzzard
    4. Re:software engineering != computer science by timmarhy · · Score: 5, Insightful
      unfortunately he doesn't go far enough into the core of the problem, which is today's universities are mass producing what employers want, rather then the thinkers of tomorrow.

      employers want nothing more then easily replacable drones who come with an easily definable skill set which they can replace when a new buzzword comes along. this is NOT what universities should be pandering to.

      --
      If you mod me down, I will become more powerful than you can imagine....
    5. Re:software engineering != computer science by epine · · Score: 5, Insightful

      Anyone with a true gift to become a kernel dev has probably engaged in flame wars with his/her professors already, regardless of what she/he teaches.

      Pointers aren't rocket science. If you never perform an operation where you haven't first met the operation's preconditions, you never get a pointer error.

      If you aren't rigorously checking preconditions on *every* operation you perform, you're not going to cut it as a kernel dev anyway. Pointers are the least of your problems. Race conditions can become exceptionally hard to reason about. The prudent kernel dev architects the system such that this doesn't transpire. That requires a whole different galaxy of aptitude beyond not leaking pointers.

      When I first learned C in the K&R era, I thought those greybeards were pretty clever. Then I came across strcpy() and I wondered what they were smoking that I wasn't sharing. I thought to myself, their must be some higher level idiom that protects against buffer overflow, because no sane architect would implement such a dangerous function otherwise. Man, was I ever naive.

      More likely, too many of them had learned to program on paper teletypes, and just couldn't bring themselves to face having to type unsafe_strcpy() when they had reason to know it would work safely and efficiently.

      The C language deserves a great deal of shame in this matter of giving many beginning programmers the false impression that any function call should dispense with formal preconditions.

      Interestingly, if you sit down to implement an STL template algorithm manipulating iterators, it proves pretty much impossible to avoid careful consideration of range and validity.

      OTOH, C++ makes it charmingly easy for an object copy routine, such as operator=(self& dst, const self& src) to make a complete hash of managed resources if you fail to affirm dst != src.

      There are plenty of amateur mathematicians who can manipulate complex formulas in amazing ways. The difference with a professional mathematician is that the necessary conditions for each transformation is clearly spelled out.

      A = B ==> A/C = B/C iff C != 0
      A > B ==> C*A > C*B iff C > 0

      Infinite series must converge, etc.

      I'm not even getting into defining A,B,C as fields, groups, rings, monoids, etc. for maximum generality.

      Yet the average programmer feels sullied to exercise the same intellectual caution manipulating pointers. I've never understood that sentiment. My attitude is this: if that's how you feel, get your lazy coding ass out of my interrupt handler; go code a dialog box in some Visual Basic application that won't work right no matter what you do.

      Why did the software industry play out this way? Other professions have much harsher standards. Primarily because software was in an exponential expansion phase, any work was regarded as better than no work (perhaps falsely), and industry couldn't afford to reduce the talent pool by demanding actual talent.

      Now we've allowed many people to enter the profession without comprehending the rigors of preconditions. It's as if we had taught a generation of lawyers how to practice law, but omitted liability. Oops. What to do about it? Invent Java, and tell all these programmers it wasn't their fault in the first place.

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect.

    6. Re:software engineering != computer science by Anonymous Coward · · Score: 0
      More to the point, software engineering != engineering.

      Sheesh, the whole SW engineering thing is nothing more than boosterism to convince the public that dweebs are real men and should be paid accordingly.

      Personally, I think one of the funniest things I ever heard was when someone referred to his brother, who pumped gas at a service station, as a "petroleum displacement engineer".

      Yeah, kids -- there really was a day when you could get your tank filled, oil and water checked and windows cleaned, all without stepping out of your car. Watch some old movies if you don't believe me.

      And the pumps made a "ding" sound as each gallon was dispensed. You wouldn't want that nowadays, because each ding would mean you'd just pissed away $3.50, at least if you lived in San Francisco.

    7. Re:software engineering != computer science by igjav · · Score: 1

      Astronomy is a lot about telescopes, in fact good astronomers do not rely in "amazon" telescopes but in builing their own reflectors/refractors.

      But in fact,
      the word "quality",
      has nothing to do
      with the word "fast".

    8. Re:software engineering != computer science by cicatrix1 · · Score: 3, Insightful

      Isn't that kind of like saying science is not math? Of course it isn't technically, but computer programming sure is a great way to describe a lot of the theory and put it into practice, and in many ways make it easier to discuss.

      --

      I know more than you drink.
    9. Re:software engineering != computer science by jacquesm · · Score: 0, Troll

      you're an absolute moron, if you read the above and actually grokked it then you'd realize that GP has a lot of *VERY* valid points.

    10. Re:software engineering != computer science by erc · · Score: 5, Insightful

      I thought to myself, their must be some higher level idiom that protects against buffer overflow, because no sane architect would implement such a dangerous function otherwise. Man, was I ever naive.
      Naive about the purpose of C, anyway. C was never designed to prevent you from shooting yourself in the foot. Writing C requires you to think, which is sadly out of vogue these days, as you point out later. C was never designed to protect you from yourself, as explicitly pointed out by Dennis Ritchie many times. If you want a language that will protect you from yourself, program in VB.

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking.
      But C obviously does - like checking boundary conditions. I don't understand how you can slam C in one breath, then praise it in the next.

      --
      -- Ed Carp, N7EKG erc@pobox.com PGP KeyID: 0x0BD32C9B What I'm up to: http://intuitives.mine.nu
    11. Re:software engineering != computer science by daem0n1x · · Score: 4, Insightful

      It's just the usual senseless Java bashing. It has ZERO to do with Java. If the students are taught VB or C# and nothing else, like it happens in my country today, the problem is the same.

    12. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      there is no great employer / employee divide any more - look around you most people choose to act like a drone - better a sheep than a seagull.

    13. Re:software engineering != computer science by aenikata · · Score: 2, Insightful

      Most teaching adopts the approach that you learn the easy stuff first, and then move onto harder and harder bits. In teaching Java first, and only teaching ones like C++ later, this is taking much the same approach. It seems that the argument is essentially about taking the view that you should learn languages like C++ first to get an understanding of all the lower-level concepts, and to look at libraries later. At uni I studied C++ and Prolog, and Java was reserved for the 3rd year. So I learned a bit about memory allocation and pointers, and now know that I prefer to stay well clear of that - and in fact have been influenced by other academics who suggest that such low-level access to memory is better avoided unless it is necessary. If you need all-out performance, then you may need to do this, but the cost can be obscure crashes, memory leaks, code insecurity, and so on. I also learned about recursion, learning to work with just a single method for iterating through a list. I still use it when it's appropriate (e.g. when parsing trees of data). However, it also taught me a greater appreciation of the value of having more options - for loops, for each especially (again avoiding invalid references). Yes, you can learn to use Java to design a GUI using an IDE, leveraging libraries to achieve most of the 'hard' stuff. And you know what, for most business requirements, this is probably the most productive way to code. Minimal reinventing of the wheel. Maximum leverage of tools to enhance productivity. No, that doesn't give a full appreciation of memory streams, stack vs heap memory issues, hardware I/O, etc. But you're talking about catering for the mainstream. I think the authors are WRONG in saying that a university should be focussed on the academic. The reason people go to university (apart from the social aspects and cheap drink, or dossing around for another few years) is to become more employable, and to earn more. They don't achieve this by learning skills which are in minimal demand in a real world workplace. As a result there should be a balance between the academic aspects and the more employment-friendly ones. Learning to use an IDE and use toolkits also allows the developer to focus on things like the User Interface, something which is often severely overlooked, and relatively incidental to the final design. Rather than criticising teaching a GUI-focussed course, this should be encouraged as part of a complete education, covering essential skills that are often missing from an academic course. I've known a brilliant mathematician and developer who has worked on a number of commercial games, but who took some time to get anywhere because they haven't got the skills in user interface design. Equally, I've know various developers with a shaky grasp of logic and maths, who created a nice GUI and couldn't get the code behind it working right. So yes, there is a place for mathematics and learning the details that require more thinking, because you have to sort the chaff from the wheat. It's a typically academic article - in that it presents the authors particular biases as fact, and one which doesn't necessarily mesh academic utopia with commercial realities sufficiently.

    14. Re:software engineering != computer science by rucs_hack · · Score: 4, Interesting

      Last year I was in the decidedly odd position of having to teach third year CS students (who had primarily used Java), what pointers were, how memory allocation worked, and how to use C.

      That they didn't know C wasn't too surprising. That they didn't have more than a basic grasp of memory management was shocking. They were also completely baffled when it came to not using an IDE to develop software. Makefiles had to be explained several times.

      I've grumbled many times about this concentration on Java, and the resultant lack of detailed understanding about programing, but each time I did so at my university I was disregarded, and someone always trotted out that age old nonsense "not re-inventing the wheel".

      I mean, sure, I see the point, but surely you should have a basic idea of how wheels are made?

    15. Re:software engineering != computer science by James+Youngman · · Score: 5, Insightful

      Anyone with a true gift to become a kernel dev has probably engaged in flame wars with his/her professors already, regardless of what she/he teaches.
      Piffle. You are equating software engineering talent with a propensity to participate in shouting (or its equivalent) matches. Those things are, to say the least, incommensurate.

      If you aren't rigorously checking preconditions on *every* operation you perform, you're not going to cut it as a kernel dev anyway.
      I disagree. Once a precondition has been checked once (on entry to whatever subsystem we're talking about) there is no need to re-check it all the time. Especially if it's an invariant of the algorithm. Sometimes such precondition re-checking gives rise to bugs anyway, since the negative arm of the conditional may contain code with a bug in it (though obviously using an assert macro will prevent that) - error cases get poor test coverage so such bugs may persist for a long time, too.
    16. Re:software engineering != computer science by DerWulf · · Score: 4, Insightful

      They aren't as valid once you've realized that abstraction is the key to tackeling complexity, that how hard somethings is does not equal it worthiness, that a language where even K&R wrote unsafe code is probably not for everyone and that not every architect needs to be a Michelangelo.

      --

      ___
      No power in the 'verse can stop me
    17. Re:software engineering != computer science by jacquesm · · Score: 4, Insightful

      Different languages have different purposes, C has gravitated to a 'niche', system level stuff, situations where performance is more important than security (not everything is connected to the internet, impressions to the contrary). And - surprise - 30 years ago we were living in a different world security wise. The biggest problem with strcpy is not that it is 'inherently unsafe', it is that if you do not do proper input sanitation you can not rely on it.

      This goes for most of the so called 'insecure' functions in C, they only become insecure if you have already messed up in an earlier stage of your code. If you are aware of the limitations of the standard library routines (even the unsafe ones) and you are operating in a 'hostile' environment (and todays internet certainly qualifies as such) then you'll need to take great care to accept only input that matches your assumptions in the code further down, if not you are in trouble. But good programmers will work like that anyway.

      It's perfectly possible to write crappy code in *any* language, not just in C (though, in the words of one old timer programmer 'C is like a racecar, you can cut corners but if you do that too often you'll end on your side).

      To come back to a fairly well thought out piece with an answer like what was written several levels above here is not in any way helping the discussion, it is simply insulting.

    18. Re:software engineering != computer science by Stooshie · · Score: 1

      ... gallon ... ... $3.50 ...

      Hah, $3.50 per gallon?! Try £1.05 per litre (which translates to $7.84 per gallon at todays exchange rate).

      --
      America, Home of the Brave. ... .and the Squaw.
    19. Re:software engineering != computer science by KDR_11k · · Score: 1

      IMO C (and C++) was not designed to be nice in any formal way, to be easy to learn or read, to avoid errors or to be educational. C was made to get shit done.

      The safety padding on many other languages can get in the way when you're dealing with limited systems that can't run a VM, a garbage collector and what have you. That's not to say more padded languages don't have their place, many common PC applications can afford a higher level of code abstraction, especially if the code gets large as humans will always make errors and some languages handle errors better than others.

      --
      Justice is the sheep getting arrested while an impartial judge declares the vote void.
    20. Re:software engineering != computer science by DerWulf · · Score: 1

      My comment was a troll and I am fully aware of it. But the OP was just waving his dick around and that's a fact. Go read it again and tell me with a straight face it isn't so. I don't like this kind of elitism eventhough I do know how to code in C.

      --

      ___
      No power in the 'verse can stop me
    21. Re:software engineering != computer science by arivanov · · Score: 1

      Well, well, well

      You should not use the Dijkstra name in vain.

      How the hell you are supposed to teach students data representation and data architecture in a language which has deliberately removed the possibility to do all low level data manipulation? Pointers in java? Difference between pointer and the data it points to itself in java? And so on.

      It is the old story, you may never in your life drive in manual but if you learn on manual you can drive in both manual and automatic. If you learn on automatic you have to go through learning how to handle manual if you have to later on.

      --
      Baker's Law: Misery no longer loves company. Nowadays it insists on it
      http://www.sigsegv.cx/
    22. Re:software engineering != computer science by 12357bd · · Score: 1

      When I first learned C in the K&R era, I thought those greybeards were pretty clever. Then I came across strcpy() and I wondered what they were smoking that I wasn't sharing.

      I also learn C is the K&R era, and honestly if you feel strcpy() is/was wrong, I thing you are not being logically coherent, if strcpy is 'bad', then memcpy should be the devil! :)

      So no, C is just as bad as assembler is, and for me the real question is what were you smoking in those days? :)

      --
      What's in a sig?
    23. Re:software engineering != computer science by Ed+Avis · · Score: 1

      The point is that with C you can write a program and have some mental model of what the hardware is doing underneath. You learn what an address is, you can visualize the values being loaded into registers (even if an optimizing compiler will do it a bit different to how you expect), and so on. With assembler that link to the hardware is even stronger. With Java it is missing.

      When I studied CS we learned a little bit of assembler, just enough to have basic familiarity with what a computer does under the hood. When we learned Java we also studied Java bytecode and how it is executed by the JVM.

      --
      -- Ed Avis ed@membled.com
    24. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      not every architect needs to be a Michelangelo


      By aiming for mediocrity, you guarantee that you are going to suck. Anybody who is not aiming to be the best they can has no business writing software.
    25. Re:software engineering != computer science by cheater512 · · Score: 4, Interesting

      In Australia, universities are spewing out people who can pass a test but cant think in programming terms to save their life.

      I was rolling on the ground laughing when I saw the problems people were having making a simple Sudoku program in C#.
      Once they were done drag/dropping all the UI elements, they all got stuck.

      Mind you your right about they are teaching what they think employers want.
      We didnt get to see a *nix system let alone use one.
      Although that may be because of that rather large donation Microsoft gave.......

    26. Re:software engineering != computer science by jacquesm · · Score: 5, Interesting

      Exactly. C is best thought of as a very powerful assembly preprocessor. I know that sounds harsh but when I look at a chunk of C code I have a pretty good idea of the assembly language the compiler is going to emit. Even with C++ that works to a certain extent.

      With Java and most other 'friendly' languages you have literally no way of knowing what is going on under the hood unless you are prepared to invest a lot more time and effort than is available to the average comp-sci student.

      With C that's as close as a single flag on your compile line and you can study the generated code until you're tired of it.

    27. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      > If you mod me down, I will become more powerful than you can imagine....

      Does that mean that the fewer people that read your posts the more powerful you are? Because that's what low karma causes... Strange logic.

    28. Re:software engineering != computer science by trifish · · Score: 1

      When I first learned C in the K&R era, I thought those greybeards were pretty clever. Then I came across strcpy() and I wondered what they were smoking that I wasn't sharing. I thought to myself, their must be some higher level idiom that protects against buffer overflow, because no sane architect would implement such a dangerous function otherwise. Man, was I ever naive.

      Yep, pretty naive. The standard C library was created in times when each damn if() cost *PRECIOUS* CPU cycles. Now that everyone can, and does, write bloatware, it's somehow no longer understandable why these standard functions did not check every boundary (like eg. BASIC). Oh, well.

    29. Re:software engineering != computer science by teh+kurisu · · Score: 2, Insightful

      They were also completely baffled when it came to not using an IDE to develop software. Makefiles had to be explained several times.

      That's a teaching problem, not a Java problem (you can teach badly in any language). If they can't function without an IDE then they've obviously not been taught how to use Ant, or even java and javac come to think of it.

    30. Re:software engineering != computer science by 19061969 · · Score: 1

      That's true. It seems that empoyers want nothing more than a drop-in replacement or perfectly working employee without having to invest in all that training. Of course, it is perfectly possible for colleges and universities to fulfill this need, but when Java falls out of favour, what jobs are the people they taught going to do? Without a broad background in computer science and with a concentration upon a single language, they are going to be unemployable and their degree could be worthless unless they move into HR or management. I can see a day when a persons employability lasts for a shorter period than their education took.

      I think employers confuse the terms "training" and "education". Universities are primarily not for training but for education. The employers want training and they're not willing to pay a cent for it but they're happy to bitch and whine when the world doesn't go their way.

      "You want an employee? Cheap, good skills, good education. Pick any two."

      --
      bang goes my karma... again...
    31. Re:software engineering != computer science by mwvdlee · · Score: 1

      Here you go on ranting about how pointers are perfectly safe as long as you check all preconditions yet claim strcpy() is the work of the devil because it's completely unsafe and will never be safe and such.

      Dude...

      strcpy() has preconditions too. Check them.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    32. Re:software engineering != computer science by blahplusplus · · Score: 1

      "So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect."

      Have you ever considered that software is so complex that those "ignorant programmers" need to be specialized, i.e. there are people like you that work on the *foundations* and there are others that work *at another layer of abstraction*. I don't think many programmers really grasp the enormous complexity of modern programming projects, and the need to simplify and mask complexity and take care of it ** automatically ** for the worker and end users.

      The job of the great mind, is to realize and make usable tools for those who are not quite as able, but still able none-the-less.

      Your ideal is nice in theory, but in the real world replacing these kinds of people who have 1) The same interest and 2) the same talent and 3) in enough numbers. Is ultimately very difficult and unrealistic.

      The fact of the matter is the world is changing too fast for professors and teachers to keep up with it, we are overflowing with information, but we have increasing educational costs, and tighter budgets and whatnot, and not enough time to do everything.

      Note that today's children take almost 15+ years to get to a point where they can even *function* in the market at a living wage, the amount of time children spend in school has grown enormously over the last 100 years and sooner or later the realization will finally sink in: We're trying to do too much. The fact is the economic situation is creating this delusion that we can keep burdening children with ever increasing education, classes, and higher asbtractions, and this delusion is going to backfire sooner or later.

    33. Re:software engineering != computer science by Salamander · · Score: 1

      soft engineering/programming is a subset of computer science
      One could just as well argue the exact opposite. The things you learn in CS are useful to a working programmer, but very CS curricula that cover things like source control and debuggers explicitly; usually you're just supposed to pick those up on your own in the process of completing your assignments. Important skills like writing a decent spec, reviewing a spec, laying out a realistic schedule, running a productive meeting, conducting an intervew, etc. get even shorter shrift, as does the entire business side of real-world programming. CS profs only care about computational cost, not human or financial. But I'm not really arguing that either is a subset of the others. The real point is that CS and programming merely intersect, and not nearly as much as some people seem to think. That's OK, colleges aren't necessarily supposed to be about job training, but - as someone who has been a corporate/academic liaison to some of the best CS programs in the country and mentored grad students - I'll be damned if I'll let some undergrad claim that what I do is a mere subset of CS. That's like saying what a CEO does is a mere subset of accounting.
      --
      Slashdot - News for Herds. Stuff that Splatters.
    34. Re:software engineering != computer science by epine · · Score: 4, Insightful
      I don't advocate protecting the programmer from him/herself.

      I do advocate designing primitives as essential to the language as the C string functions to powerfully remind the programmer using those functions of the programmer's logical obligations and support the programmer to reason correctly about those obligations, without having to digest 15 lines of preceding context to see that calloc() provided the implied terminating NUL.

      strlcpy and strlcat - consistent, safe, string copy and concatenation by Todd C. Miller and Theo de Raadt, OpenBSD project

      There are several problems encountered when strncpy() and strncat() are used as safe versions of strcpy() and strcat(). Both functions deal with NUL-termination and the length parameter in different and non-intuitive ways that confuse even experienced programmers. They also provide no easy way to detect when truncation occurs. Finally, strncpy() zero-fills the remainder of the destination string, incurring a performance penalty. Of all these issues, the confusion caused by the length parameters and the related issue of NUL-termination are most important. When we audited the OpenBSD source tree for potential security holes we found rampant misuse of strncpy() and strncat(). While not all of these resulted in exploitable security holes, they made it clear that the rules for using strncpy() and strncat() in safe string operations are widely misunderstood. An Interview with OpenBSD's Marc Espie

      We have had a lot of success explaining the issues and getting a lot of people to switch from strcpy/strcat to strlcpy/strlcat.

      Weirdly enough, the Linux people are about the only major group of people that has constantly stayed deaf to these arguments. The chief opponent to strlcpy in glibc is most certainly Ulrich Drepper, who argues that good programmers don't need strlcpy, since they don't make mistakes while copying strings. This is a very mystifying point of view, since bugtraq daily proves that a lot of Linux and free software programmers are not that bright, and need all the help they can get. The original C strcpy() could just as easily have had the semantics of strlcpy(), with insane_strcpy() provided to copy strings/trash core without a cycle wasted.

      One must recognize that in a solid code base, thinking occurs more often while reading code than writing code. Correctness is not a write-only proposition in any living code base.

      We came to the conclusion that a foolproof alternative to strncpy() and strncat() was needed, primarily to simplify the job of the programmer, but also to make code auditing easier.

      The original C string functions were (and remain) a pedagodic disaster. Most beginning programmers failed to realized how much thinking had been folded into the surrounding context. If they were reading K&R, that thinking existed. If they were reading any code they had at hand, it likely hadn't, by any survey of average C code quality ten years later. With the original string functions, whether this careful thinking existed is not obvious without doing a lot of mental work, and that work has to be repeated *every time* the code is seriously reviewed.

      Worst of all, the strcpy() function seemed to imply "buffer overflow is no great concern, we're not even going to give you a single argument on this very dangerous function to help you avert it". It was a false parsimony to save that extra argument in the default case.

      This isn't at the level of whether the handgun has a safety or not. It's at the level of whether it is possible to chamber a round too large for the barrel. I can point the gun successfully, but I'd greatly prefer it not to detonate in any other direction.

      A more thoughtful C string API would have averted mistakes on the magnitude of chambering bad ammunition, without encumbering the pointy end in the slightest, or failing to endanger the programmer's foot.
    35. Re:software engineering != computer science by smittyoneeach · · Score: 1

      C has gravitated to a 'niche', system level stuff, situations where performance is more important than security (not everything is connected to the internet, impressions to the contrary). And - surprise - 30 years ago we were living in a different world security wise.
      That is certainly a great trope, except that there are whole systems, such as the Gnome desktop, that are coded in C. You might well argue that GTK+ is almost a separate dialect, by the time you absorb the GObject system, but that really drives home my real point:
      It's really all information. Tool fetishism is a bore.
      The real question to be asked is: how heavy of a run-time do I really want? The minimalist wrapper you have with C/C++, a medium-weight one as with a scripting language, or the 800lb gorilla of a JVM/CLR?
      A Venn diagram of the choices would show _significant_ overlap.
      --
      Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
    36. Re:software engineering != computer science by joto · · Score: 1

      I thing you are not being logically coherent, if strcpy is 'bad', then memcpy should be the devil! :)

      strcpy() is bad, not because there's something inherently wrong about a function copying bytes from one pointer to another until it encounters a zero-byte, but because its name and how it is described in most C texts is misrepresenting this function as something one would want to use on text strings. Text strings are usually user input or at the very least, external data, and should be treated with caution. If you can't guarantee an upper bound on the length, and 0-termination, it shouldn't be used.

      In practice, this means, strcpy() shouldn't be used, and if you (as unlikely as it sounds) actually need such a function, you can just as well write it yourself. That strcopy() can be written as easy as while(*dst++=*src++); should tell you something about the amount of thought that went into determining C's "string" functions in the first place.

      memcpy(), is at least safe. And it has a name that corresponds with its function. Compared to the evils of strcpy(), memcpy() is salvation!

    37. Re:software engineering != computer science by ultranova · · Score: 1

      Yep, pretty naive. The standard C library was created in times when each damn if() cost *PRECIOUS* CPU cycles. Now that everyone can, and does, write bloatware, it's somehow no longer understandable why these standard functions did not check every boundary (like eg. BASIC). Oh, well.

      Out of curiosity: how can you check that the size of a memory block pointed to by a pointer in C ? Because if you can't, then making boundary checks in strcpy() and fellows is impossible, so you have to leave them for whatever function calls them.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    38. Re:software engineering != computer science by Rogerborg · · Score: 1

      Besides, the idea that Java is damaging to students is pure bullshit anyway. If the students are learning the Java way to do things, and nothing else, then they have horrible professors.
      I'm not sure if we're reading different articles, but it seems to me that's exactly the point that the article makes. That students are learning only Java, and the Java way of doing things. But I guess if you can't read C++, you shouldn't be expected to read English.
      --
      If you were blocking sigs, you wouldn't have to read this.
    39. Re:software engineering != computer science by ultranova · · Score: 1

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect.

      A programmer who refuses to use a language with automatic memory management and mandatory bounds checking due to professional pride is the computer world equivalent to a truck driver who refuses to use a seatbelt, a miner who refuses to use a hardhat and a scryscraper window washer who refuses to use a safety rope out of professional pride.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    40. Re:software engineering != computer science by trifish · · Score: 2, Informative

      Out of curiosity: how can you check that the size of a memory block pointed to by a pointer in C ?

      The modern secure variants of strcpy() solve it by requiring additional parameters where you pass e.g. sizeof(dest) and sizeof(src).

    41. Re:software engineering != computer science by trifish · · Score: 1

      Of course, if you dynamically allocate a block of memory, you won't use sizeof() but a relevant variable (number of allocated bytes).

    42. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      What uni? I go to UNSW and you cant be further from the truth.

    43. Re:software engineering != computer science by joto · · Score: 1

      Dude...

      strcpy() has preconditions too. Check them.

      1. src points to a char array in memory that is zero-terminated, and having length shorter than n. (n-1 if you don't count the termination character)
      2. dst points to a char array in memory that has length equal to or above n

      Part of the idea behind writing and checking preconditions (and postconditions, and invariants, and so on) is that by doing so, one gets a clear design that is easier to verify with formal methods, semiformal methods, a quick unformal code-inspection using techniques somewhat inspired by watered-down semi-formal methods, or even just handwaving.

      The precondition that exists for strcpy() is notoriously difficult to verify without having already done the work done by strcpy() some other place in the program, even when you are just handwaving. And considering that it is intended to be used for external data (which strings usually are), it's also very difficult to ensure those preconditions in practice. All the "elegance" you get inside the function (which is a one-liner), is completely irrelevant when you consider the hoops programmers have to go through to actually be able to call this function safely. Basically it forces programmers to do book-keeping themselves, instead of helping them do the bookkeeping. And it's the bookkeeping that's the hard work, not copying the string, so the library function is typically of no use whatsoever.

    44. Re:software engineering != computer science by Daengbo · · Score: 1

      C has gravitated to a 'niche', system level stuff, situations where performance is more important than security ... and Gnome. ;)

    45. Re:software engineering != computer science by DoofusOfDeath · · Score: 1

      the core of the problem, which is today's universities are mass producing what employers want, rather then the thinkers of tomorrow.

      It's always a trade-off. The true "thinkers of tomorrow" are abstract mathematicians, physicists, poets, etc. And they have a remarkably hard time getting jobs. I think that ideally, would-be software engineers should get a spectrum of training from the immediately practical (SQL, C, etc.) to the profound (group theory, quantum physics, philosophy, etc.) It's hard to pack too much into a 4-year program, but you can still cover a lot of bases.

    46. Re:software engineering != computer science by vegiVamp · · Score: 1

      >> Anyone with a true gift to become a kernel dev has probably engaged in flame wars with his/her professors already, regardless of what she/he teaches.
      > Piffle. You are equating software engineering talent with a propensity to participate in shouting (or its equivalent) matches. Those things are, to say the least, incommensurate.

      Well... flamewar survival instinct *is* a basic skill on kerneldev :-)

      --
      What a depressingly stupid machine.
    47. Re:software engineering != computer science by shutdown+-p+now · · Score: 1

      We're getting there, though. Design by Contract is moving from an obscure idea into mainstream, with virtually all next-gen languages (Fortress, Scala etc) having it, and persisting rumors of its inclusion into the next version of C#.

    48. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      Hah, $3.50 per gallon?! Try £1.05 per litre (which translates to $7.84 per gallon at todays exchange rate). And that is with a favourable exchange rate too.

    49. Re:software engineering != computer science by asc99c · · Score: 1

      This sounds unfair on C. Every introduction I ever had to C included the disclaimer that C assumed I knew what I was doing. Java would check most stuff and C wouldn't. C is fast partly because it assumes you know what you're doing. Check your inputs and then you're into a safe area. After that you can just do everything quickly because the conditions are already checked - no need for the language to check it all again.

      For writing things like an OS kernel this is hugely important. The kernel has to run quickly. If the language is wasting time checking things the programmer already knows are true, it isn't going to run as fast.

      The problem is that significant amounts of modern software just don't have these requirements. They'll run on a fast CPU with plenty of memory and have a load of functionality that runs through once when the user clicks button A. No point thinking about the safe zones - just check everything. This might as well then be something the language does instead of sitting there waiting for the inevitable programmer error.

    50. Re:software engineering != computer science by Daniel+Phillips · · Score: 1

      Once a precondition has been checked once (on entry to whatever subsystem we're talking about) there is no need to re-check it all the time. You misread the OP I think. He meant check preconditions as in figure them out, which you seem to have taken to mean insert runtime checks. OP is right, that is exactly what kernel devs do.
      --
      Have you got your LWN subscription yet?
    51. Re:software engineering != computer science by DerWulf · · Score: 1

      Extending the methaphore: you really think that Michelangelo would have liked to design and build appartment houses? Face it, software is a commodity and as much as you need the Sistine Chapel (as an operating system i.e.) you also need guys building solid, cheap and practical. Why the hell would you use C for an application in this day and age? What concepts can C teach you that you can't understand any other way?

      --

      ___
      No power in the 'verse can stop me
    52. Re:software engineering != computer science by digitalgiblet · · Score: 1

      Summary of article:

      We are old and founded a company that requires an old language no one learns any more. This makes it hard for us to find cheap labor. We are angry at universities for not teaching that language. Companies that use Java can hire kids directly out of college (or better yet from 3rd world countries) for very low pay. You kids get off our lawn.

    53. Re:software engineering != computer science by Daniel+Phillips · · Score: 1

      You could also have mentioned that strcpy has no way to handle zeroes embedded in strings. The zero terminated string is arguably the leading candidate for single most idiotic design feature of C. Thankfully, C has few enough idiotic features that it is possible to list them.

      --
      Have you got your LWN subscription yet?
    54. Re:software engineering != computer science by Octorian · · Score: 1

      Gah! And in my Freshman year of CS education, I was learning complex data structures in C++. Thank goodness that I went to college just before everyone started switching to Java. Because Java lets you completely gloss over some of the most important concepts to understand, IMHO, it really should not be used as an introductory language. Actually, aside from perhaps one real class, I never even used Java in college. (and I really didn't get into IDEs of any sort until after college, regardless of language)

      Of course today I mainly program in Java and C#, but its comforting to know that I could easily go back to C or C++ if the need arose. (and feel like I need to start up a side-project in one of them, just to prove to myself that I can still program in a *real* language, hehe)

    55. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      I think you will find that C is still very prevalent. This includes in security where it is a good speed boost for performing cryptography. It is also used in truly cross-platform systems, more so then C++. By true cross-platform systems, I mean ones that one on more obscure platforms like Netware, z/OS, etc. These systems have somewhat lackluster support for C++/Java if they have any support at all. In addition, their support is sometimes significantly slower, which can matter a lot when you consider how much legacy hardware probably exists that is still running these systems.

    56. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      It would be implementation dependent but probably do-able. Most slab allocators work by prepending a small header to the start of each malloc()'d block of memory that specifies the size of the block, so that free() will know how much it is expected to free. The implementation could use that to determine the size of any block of memory given by a pointer.

      It wont happen though, and it shouldn't happen, for good reasons. The most obvious of which is that C is intended to be a systems programming language and as such it should simply do as it is told. Useful constructs like struct hacks would no longer work if C started bounds checking, for instance.

    57. Re:software engineering != computer science by makomk · · Score: 2, Informative

      Except that's not true anymore with modern optimising compilers, and assuming it is is a good way to shoot yourself in the foot. (Apparently, gcc does some really interesting things sometimes - for example, see this thread and the related lkml thread.)

    58. Re:software engineering != computer science by bmartin · · Score: 1

      The following was my programming sequence in college: 2 Java courses, 1 C++ course, 1 assembly, 1 C/C++. Google has contacted me three times, asking me if I'd seriously consider a job opportunity with them. I may not be hired by them yet, but my resume is attracting some attention and my work experience commands an upper-class salary in a small southern city in the US... less than two years after graduation. My resume doesn't mention ANY work in C/C++, .NET, or anything like that... just Java.

      EVERY JOB I've had has been J2EE-related. Most corporations are looking at web-based solutions, whether it's J2EE, .NET, Ruby, Groovy (Java-based), etc. The two things I would've liked to had exposure to in college were Oracle and SQL, which are unlikely to be replaced any time soon.

      In response to the three main points of the article:
      1. Not many computer scientists leave college to work at a math-related job, especially not one that relies heavily on calculus or set theory. Set theory is more applicable for research in computational complexity. Most of us are headed out to develop the software of today and tomorrow.
      2. Learning to use existing software is an incredibly useful skill set. 95% of programming needs are met by pre-existing software. I've ALWAYS needed Apache Tomcat, JDBC, and Spring/Hibernate at work. The odds that I'll be cooking up such a package myself are pretty low.
      3. Safety and security are primarily about design and development. In the case of design, good techniques can be taught in ANY language. When it comes to development, you're best off having a code security team work on that; not every programmer is cut out to be a debugger. It takes a special knack to break security.

      It's been shown that reformed criminals make the best cops: they know all the tricks. If you want to learn about security, hire a hacker. It takes drive and quirkiness to do a job like that (and skills like reverse engineering, often via black box testing, etc.)

      --
      "You could almost look at defense of Microsoft as a form of the Stockholm syndrome." -neapolitan
    59. Re:software engineering != computer science by Fred_A · · Score: 1

      True. Besides, the idea that Java is damaging to students is pure bullshit anyway. If the students are learning the Java way to do things, and nothing else, then they have horrible professors. I learned CS from good profs (well... one good and one bad), and surprise, even though I got my start in Java, I am perfectly capable of doing things in other ways. It really shows in the article. The crux of the problem seems to be that the Java teachers aren't very good, other than that there's nothing wrong with it as a teaching language.

      Or maybe they should use something like INTERCAL or Malboge to teach programming so that the students get overjoyed with how easy and friendly C is when they get to it.

      Hello World in INTERCAL :

      DO ,1 <- #13
      PLEASE DO ,1 SUB #1 <- #234
      DO ,1 SUB #2 <- #112
      DO ,1 SUB #3 <- #112
      DO ,1 SUB #4 <- #0
      DO ,1 SUB #5 <- #64
      DO ,1 SUB #6 <- #194
      DO ,1 SUB #7 <- #48
      PLEASE DO ,1 SUB #8 <- #22
      DO ,1 SUB #9 <- #248
      DO ,1 SUB #10 <- #168
      DO ,1 SUB #11 <- #24
      DO ,1 SUB #12 <- #16
      DO ,1 SUB #13 <- #214
      PLEASE READ OUT ,1
      PLEASE GIVE UP
      --

      May contain traces of nut.
      Made from the freshest electrons.
    60. Re:software engineering != computer science by utnapistim · · Score: 1

      I think you're missing the point here. This is not about Java being worse than C# or VB. It's about the fact that if Java (C#, VB python, Ruby or any other managed language for that matter) allows you to write code without understanding memory management, then most teachers will happily ignore memory management and move on to algorithms.

      It's not that Java somehow produces stupid programmers, but that you finish the course without having covered some critical areas at all.

      --
      Tie two birds together: although they have four wings, they cannot fly. (The blind man)
    61. Re:software engineering != computer science by Junior+J.+Junior+III · · Score: 1

      Yes, but apparently NYU grads can only program in Java.

      --
      You see? You see? Your stupid minds! Stupid! Stupid!
    62. Re:software engineering != computer science by JavaRob · · Score: 3, Insightful

      unfortunately he doesn't go far enough into the core of the problem, which is today's universities are mass producing what employers want, rather then the thinkers of tomorrow. Is that even true, though? The "drones" are the reason why so many projects fail (because they have no clue about larger risks, and no way to solve difficult problems), which costs those same employers vast amounts of money.

      I code mostly in Java in my professional life, but when I was in school we were forced to diversify, and it was a definite plus.

      The intro course used mostly JavaScript for some reasons (!), but other (even relatively low-level courses) required projects written in C, Schema, and Java. I took an operating systems course where we had to write a project in some kind of mini-assembly language... it's all a bit fuzzy now (I graduated 10 years ago), but I remember it being tough to wrap my head around for a while. And that's a good thing, right?

      I also did a couple of summer-long solo projects that probably taught me more than anything -- just fighting through the problems on my own, learning the hard way about the value of clean code, OO, version control, debugging skills, etc. etc..

      Perhaps obviously, I'm much better a *Java* developer than I would have been without the other stuff. So I agree wholeheartedly that students must learn more than one language in their schooling -- either for professional reasons OR for academic reasons; you simply have to flex your thinking in more than one way if you're going to learn.

      It also strikes me as a tough way to learn... how do you learn what X language is, and the reasons behind its design, totally in isolation? How do you learn what OO is if "functional" is a meaningless concept to you?
    63. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      > situations where performance is more important than security

    64. Re:software engineering != computer science by Etyenne · · Score: 1

      But should they teach simple stuff such as using javac and Ant in University ? Sorry to sound like an elitist asshole, but it is pretty reasonable to expect a CS undergraduate student to be able to figure these details by himself. I mean, surely the lecture time could be used for something more fundamental.

      At my alma mater, we had optional "labs" where a third-year TA would explain and help practice tools that had to be used for assignement. That should be plenty enough.

      --
      :wq
    65. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      The C language deserves a great deal of shame in this matter of giving many beginning programmers the false impression that any function call should dispense with formal preconditions. I'm sorry, since when is it the language's fault for poor education, design, usage, etc?

      C doesn't falsely impress anything upon anyone. It's up to you to express yourself correctly and thoughtfully. That's like screaming frothing blue murder at the hammer for splitting your thumb asunder.
    66. Re:software engineering != computer science by Simon+Brooke · · Score: 1

      It's really all information. Tool fetishism is a bore.
      The real question to be asked is: how heavy of a run-time do I really want? The minimalist wrapper you have with C/C++, a medium-weight one as with a scripting language, or the 800lb gorilla of a JVM/CLR?
      A Venn diagram of the choices would show _significant_ overlap.

      Well said!

      With the proviso that if you don't have a rich enough runtime, you're going to have to code those parts of a rich runtime environment that you need yourself, and although any general purpose runtime has lots of features which are not needed for any particular program, in general you're going to save a lot of time (and a lot of bugs) choosing a runtime which supports most of your needs.

      Apart from anything else, hundreds of thousands of programs are testing the JVM (for example) every day - and doing different things with it. If there's a bug in it, it's going to be found quickly. If there's a bug in code that's custom-written for one particular project, it can lurk around for a long time before manifesting itself in some horrible way.

      There's a trade off between producing tight, lightweight code with low overhead, and economically producing good quality systems. That tradeoff involves the right choice of runtime for the particular project.

      But tool fetishism, and 'my language is better than your language' pissing matches, are, indeed, a bore.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    67. Re:software engineering != computer science by cshotton · · Score: 1

      While the quality of the product (or the lack thereof) isn't in question, I find it ironic that the professors crying foul are likely to never have had to write a line of production code, maintain it in a live environment, or do anything remotely approaching what their students will be asked to do 5 years after they turn them loose. The burden is on the professors to teach, and not to blame tools. It's like a contractor saying "Gee Mr. Smith, sorry about the crappy job on building your house, but my hammer sucked." The ivory tower denizens need a dose of reality before they lob hand grenades like this.

      Honestly, if they want to teach systems fundamentals, make the kids write a chip simulator and an assembler in Java. Then they can kill two birds with one stone. It doesn't take much creativity to devise a curriculum that teaches proper computer science fundamentals, even if it involves a mandate to use a "squishy" language like Java. I fault the professors screaming the loudest about this problem. It's theirs to fix, not programming language designers.

      --

      Shut up and eat your vegetables!!!
    68. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      A few comments:

      1. "C has gravitated to a 'niche', system level stuff, situations where performance is more important than security"
      I cannot agree with you. Security of the language has never played any noticeable role when choosing a language for a project in which I have been involved. In fact the main reasons have been expected effort and availability of tools/components required.

      2. "The biggest problem with strcpy is not that it is 'inherently unsafe', it is that if you do not do proper input sanitation you can not rely on it"
      I would say I agree. It's difficult to decide if a tool is _inherently_ safe or unsafe. You can cause harm with (almost) anything. But you can surely make unsafe use of strcpy. And safe too if you know it's limitations.

    69. Re:software engineering != computer science by Ed+Avis · · Score: 2, Interesting

      Java is much, much closer to Java bytecode than C is to assembler. You can take a .jar file and decompile it to get readable source that almost exactly matches the original (modulo private variable names). That's not true of C.

      --
      -- Ed Avis ed@membled.com
    70. Re:software engineering != computer science by gsslay · · Score: 1

      If you aren't rigorously checking preconditions on *every* operation you perform, you're not going to cut it as a kernel dev anyway. Quite the reverse. If you need to check preconditions on **every** operation then you clearly don't have enough control over what your sloppy code might be doing. You check preconditions when necessary and relevant. Anything more is exactly the kind of wasted effort you don't want in a kernel.

      I thought to myself, their must be some higher level idiom that protects against buffer overflow, because no sane architect would implement such a dangerous function otherwise. Welcome to C, have you been introduced? A real programming language that treats you like a big grown-up coder without baby-sitting your every call. C assumes that you are smarter than it, and so are capable of designing your own code. If you want to code crap then it's your problem, you're the coder.

    71. Re:software engineering != computer science by coop247 · · Score: 1

      I was learning complex data structures in C++...Of course today I mainly program in Java and C#
      There's the conundrum. If you teach abstract C concepts people complain that you aren't preparing them for the real world where everyone is using managed languages. If you teach them Java, they complain about not knowing how to read compiler errors and create makefiles.

      At most 4 year colleges, even a CS major only really has around 6 compsci classes. Thats not enough time to teach the principals of programming AND the nuances of some flavor of IDE. Personally, I'm glad I know C, but I have no interest in ever using it again, I'll stick with Intellisense and visual debuggers.
      --
      //TODO: Insert catchy phrase
    72. Re:software engineering != computer science by 0xdeadbeef · · Score: 1, Flamebait

      Congratulations, you're a one-trick pony. And you're actually advocating learned helplessness.

    73. Re:software engineering != computer science by asc99c · · Score: 1

      I've seen *EXACTLY* that problem myself with a relative of mine. Two and a half years in to a programming course, they had seemed to be understanding it and getting good grades (NB this was adult learning college not uni).

      They asked me for something interesting to try out and I suggested a Sudoku solving program. They got to the stage of the GUI for a user to input the problem, and an array to hold the numbers. But the actual algorithm to solve the problem had them 100% stumped. I added code to track the options for each cell, rule out options based on already known numbers, and checked they actually understood and could solve Sudoku with pencil and paper.

      But the algorithm they just couldn't do. The course taught students how to program a GUI with .NET, respond to button presses a little, but never went through any stages of how to break down a problem.

    74. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      If people are too stupid to figure out the limitations of strcat() and strcpy() and their "n" variants, then upon what grounds, sir, do you assert the are smart enough to side-step the limitations of strlcpy() and strlcat()?

      Ulrich Drepper is dead right. People who manipulate strings should know how long they are and act accordingly. And direct use of str[ln]cpy(), str[ln]cat() and the like should be avoided, instead of encouraged.

    75. Re:software engineering != computer science by Dancindan84 · · Score: 1

      Why did the software industry play out this way? Other professions have much harsher standards. Primarily because software was in an exponential expansion phase, any work was regarded as better than no work (perhaps falsely), and industry couldn't afford to reduce the talent pool by demanding actual talent. This seems to be the case in my (limited) experience. Things need to get done, not necessarily done right, so the skill of the programmer isn't even a question to management. I've noticed it more in the realm of security than low level programming concepts though. Try to tell management that a project needs to be delayed a month for security testing. They don't know what SQL injection is and don't care unless it becomes a problem. That doesn't excuse the schools from not teaching it, but it's a cyclical problem. Industry needs to be demanding entry level people have those basic skills. As soon as alumni employment rate drops because students got turned away on the based on the lack of these skills, you'll see the schools push it harder.
      --
      "Always forgive your enemies; nothing annoys them so much." - Oscar Wilde
    76. Re:software engineering != computer science by dcollins · · Score: 1

      After years of thought (and work as an educator), here's my counter-thesis:

      "Computer science is about computers the same way that literature is about the alphabet."

      --
      We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
    77. Re:software engineering != computer science by hobo+sapiens · · Score: 1

      "Piffle. You are equating software engineering talent with a propensity to participate in shouting (or its equivalent) matches. Those things are, to say the least, incommensurate."

      After I read GP's post, I had a totally different opinion on that statement. I think you are getting hung up on a stray statement in a well written post.

      One thing that I have noticed about good programmers, and geeks in general: they like to argue. I am not saying I am a great programmer, but I have been at it for a while and have been pretty successful. And my wife will tell you I love to argue. Arguments are, for us, not heated angerfests, but opportunities to test our logic against a worthy opponent. The more worthy the opponent, the better. Me, I love to argue not because I hate people and want to tell them they are wrong and stupid and blind, but rather because it is a wonderful mental exercise. I have learned more from the flamewars or arguments I have been in than any one course I have ever taken. Arguments and flamewars have the effect of making you think about your viewpoint on a matter. You may doggedly cling to your viewpoint during the argument, but afterwards you critically evaluate your position. If you find you need to adjust your opinion about a topic, then this is where you do just that.

      I think the point he was making that someone willing to challenge a professor probably also has what it takes to be a good software engineer.

      Disagree with me? Fine...but the very site you are on is a veritable monument to geeks who like to argue with one another.

      --
      blah blah blah
    78. Re:software engineering != computer science by BVis · · Score: 1

      You know, some of us read Slashdot before our second cup of coffee in the morning. Your posting of brain-spraining code in a comment should really take that into account.

      Ow, my brain.

      --
      Never underestimate the power of stupid people in large groups.
    79. Re:software engineering != computer science by AndersOSU · · Score: 4, Insightful
      Ok, I'm not a programmer, but a mechanical engineer, and I know precious little about programing, but I find articles like this very interesting. I was reading your post, and I stopped dead in my tracks here:

      I think the authors are WRONG in saying that a university should be focussed on the academic
      People don't go to the university to get real world skills, people go to the university to understand the foundations of their field, so that they can adapt their fundamental understanding to solving the problem at hand. People get certificates to learn routine use of employment friendly tools.

      As I said, I'm not a programmer. I could (if I had to) model the frequency response of a simple mechanical system to a range of perturbations by hand. The chance that I'd have to do that in the course of my professional employment is so slim as to be laughable. Yet, the fact that I could do this (if I really had to) tells me that I don't want to put an eccentric load on a rotating shaft with out a lot of careful consideration. Now if I sort of knew this was a bad thing, but didn't really understand why I might to something silly like put only a single U-joint in a shaft. After all, it provides flexibility, and as long as the shaft is straight there is no eccentricity. The problem occurs when there is a deflection, then your single U-joint translates a nasty sinusoid down-stream. If you do that things tend to break.

      Now, I agree that the university should have some courses focused things that practicing professionals in the field use. I could draw a part by hand (if I really had to), but if I've never seen CAD before, I'd be at a serious disadvantage if I ever wanted to be a machine designer. However, fundamentally, a university is an academic institution. The suggestion that it should be an employment mill would severely compromise our education system.
    80. Re:software engineering != computer science by geminidomino · · Score: 1

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect.



      A programmer who refuses to use a language with automatic memory management and mandatory bounds checking due to professional pride is the computer world equivalent to a truck driver who refuses to use a seatbelt, a miner who refuses to use a hardhat and a scryscraper window washer who refuses to use a safety rope out of professional pride.

      Or an olympic swimmer who refuses to wear water-wings...
      Or a bowler who refuses to use bumpers...
    81. Re:software engineering != computer science by jacquesm · · Score: 1

      Yes, that's absolutely true. Building a 'decompiler' for C would be pretty much impossible except for very limited use cases (and disallowing any form of optimization). I did some reverse engineering in the mid 80's and a multi-pass disassembler (to separate out code and data by 'simulating' the code) and stack frame rebuilder were fun tools to build and use. But the output was definitely not ready to be fed back in to the compiler.

      I was more thinking of the 'forward' path, when you are compiling source to assembly and then to object code. In C (and C++) it is trivial to ask for all the intermediate files. I'm not sure how you do that (or even if it is possible) to do that with Java (there probably is some way to do that, it would seem to be a logical step in writing a compiler).

      The Java bytecode implements a stack machine and it is also quite possible to write for that stack machine directly, one way is to use the 'jasmin' (http://jasmin.sourceforge.net/) assembler.

    82. Re:software engineering != computer science by alefq · · Score: 1

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect. You were explaining your point very well, but with this allegation, you are way wrong. Are you telling me that the concepts behind great Java projects lack of thinking, mmmm Compiere is a competition for SAP because they have nothing but a bunch of non-thinking programmers? IBM and the Eclipse Project, full of professionales without self respect? And the list can go on and on... I think not, you could also do smart and well designed programs in Java, an university that teaches only recipes for programming in an "easy" language, is wrong, I agree, but you can't state that everybody and every project done the "easy way", are garbage.
    83. Re:software engineering != computer science by DerWulf · · Score: 1

      The definition of "safe" is not that if everything goes according to plan nothing bad will happen. What's inherently unsafe about C is that it is possible to corrupt the complete memory area that you have access to. So a module that doesn't sanitate it's own input suddenly goes from being badly designed software to posing a danger to the physical representation in memory of the program calling it, the data of that program or even the data of other programs.

      This coupled with the fact that C programs are not fail-fast at all makes it completely unsuitable for beginners. You should learn about programming concepts first and only venture into C programming when you no longer struggle with data structures, algorithms and so forth and can focus entirely on avoiding core dumps.

      --

      ___
      No power in the 'verse can stop me
    84. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      In practice systems have to work 100%
      Have you ever even used a computer? Seriously now. No system works 100%. Even the space shuttle computers run buggy software.
    85. Re:software engineering != computer science by $1uck · · Score: 1

      I wish I could mod you up more. The issue is not Java any more than it is English. The issue is the education system is going down the toilet. The issue is teaching people what to do to accomplish X and not teaching them how to think about solving X (so that they can go about solving Y).

      I'm thankful that my school taught CS and not Java/C#/VB or whatever flavor. We had classes in Java, C++, scheme, lisp, assembly, chip design etc.

    86. Re:software engineering != computer science by scruffy · · Score: 1

      Makefiles had to be explained several times.

      I despise makefiles. Java has dependency issues, but they are an order of magnitude less than C/C++.

      Maybe the next things on your list are getting lost following include dependencies and OS-dependent #define and #if spaghetti.

    87. Re:software engineering != computer science by plsander · · Score: 1

      And a Real Programmer can write code using OO principles in any language, just like a sloppy programmer can write spaghetti code in any language.

    88. Re:software engineering != computer science by treak007 · · Score: 1

      A programmer who refuses to use a language with automatic memory management and mandatory bounds checking due to professional pride is the computer world equivalent to a truck driver who refuses to use a seatbelt And a programmer who can't use a language without automatic memory management and mandatory bounds checking is the computer world equivalent to a trucker who doesn't have a driver's license.
      --
      Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
    89. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      So yes, Java doesn't teach very darn much about the harsh realities of actually thinking.

      But C obviously does - like checking boundary conditions.

      I hope you were joking. Checking boundary conditions in C isn't a matter of thought; its a matter of procedure. I know a few idiots who could code in C; but never managed to get Java. They couldn't understand anything beyond functional programming.

    90. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      I hope you realize that the professors/instructors that teach the class don't get to choose the curriculum in most cases. If your teaching a Java class and decide to teach C++ instead thats an easy way to get fired.

      My old university recently switched from C++ to Java for the intro. level programming classes, which I think is a huge mistake. This means that not just the intro. level classes are in Java but all the classes that follow are, you can't assume that the students took elective programming classes for C and C++ so you have to change all the upper level classes to Java as well or you end up making a tangled mess of the prerequisites. I'm not sure what their solution is for Operating Systems but I promise you that if a students hits Operating Systems with only Java they will probably drown really quick.

      To me the natural way of teaching programming is C then C++ then Java. For someone who already knows basic programming concepts (the real ones not the ones Java teaches) it takes maybe a day to learn C. C is a simple language for the most part. Once you have C then you can move on to C++ which can be done in a few classes (no pun intended), then you finally move to Java.

      Personally I have Java. It's great for writing GUIs but this is a language where if you divide by 0 the result is infinity or negative infinity, a language without pointers, and a language that forces everything to be classes. OOP is great for SOME problems, If I'm writing hello world I don't need it to be an object.

    91. Re:software engineering != computer science by Lodragandraoidh · · Score: 1

      If you RTFM, you'll see that they come around and say there is a place for Java in the CS curriculum and spell it out - it is just not the 'only' place.

      I don't see that as java bashing.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    92. Re:software engineering != computer science by danaris · · Score: 1

      But should they teach simple stuff such as using javac and Ant in University ? Sorry to sound like an elitist asshole, but it is pretty reasonable to expect a CS undergraduate student to be able to figure these details by himself.

      Don't be an elitist asshole.

      If they shouldn't teach simple stuff such as using javac and ant, why should they teach foundations or principles at all? Why shouldn't they just teach the high level stuff, and let the CS undergraduate students figure out all the details themselves?

      If the course is for people who are already grounded in the basics of programming, and who understand how to use the command line to begin with, then perhaps you can dispense with teaching them how to use javac and ant, but you still need to at least tell them which tools they should be using.

      If, on the other hand, the course is for people who have never programmed before, you absolutely need to teach them about how to use javac and ant.

      Your attitude is the kind that drives perfectly good people away from programming, and computers in general, because they feel like everyone shoves them out into the cold and says, "Figure it out for yourself. It was good enough for me, so anyone who can't do it is obviously an idiot."

      Dan Aris

      --
      Fun. Free. Online. RPG. BattleMaster.
    93. Re:software engineering != computer science by Nurgled · · Score: 1

      Although this is probably pulling the analogy to tearing point, you could probably think of the ".class" files that javac emits as being roughly equivalent to the ".o" files your C compiler might emit. Java doesn't do static linking, so there is no compile-time linker step. The equivalent of your linker is the class loader in the Java runtime.

    94. Re:software engineering != computer science by halber_mensch · · Score: 2, Interesting

      But should they teach simple stuff such as using javac and Ant in University ? Sorry to sound like an elitist asshole, but it is pretty reasonable to expect a CS undergraduate student to be able to figure these details by himself. I mean, surely the lecture time could be used for something more fundamental.

      I would agree with you, if the students were encouraged to learn on their own and given direction in which to point their curiosity. But they aren't. They're encouraged (from early in childhood, really) to do the bare minimum work to get through the course, to stick to the examples and lectures given by the instructor explicitly, and not deviate from what everyone else is doing, or you'll stick your neck out too far.

      Case in point, in my data structures class we were given an assignment in which a requirement was that we used a hash table which had an underlying structure of a pointer-based linked-list. The assignment could be completed in any language, but since Java was the curriculum language, the course was taught using only Java examples. I preferred C, but knowing STL list was available I wrote my implementation with C++. I got half credit for the reason "Not use pointer based linked list". Now, aside from the obvious flaw that Java does not have pointers per se, and the Java kiddies all got full credit, STL list is in fact implemented with pointers. I argued this with the instructor, who relegated me to the TA that graded the assignment. When I explained to her that STL list is pointer based, she told me I was wrong. So I directed her to the SGI documentation that says "STL list is implemented by a doubly-linked pointer-based linked list..." Reluctantly, she gave me full credit. However, she wouldn't correct the scores of the other handful of people that also used C++ and STL list unless they came in and showed her the same web page. It wasn't enough that she had been proven undeniably wrong. Lesson learned: don't deviate from the strict curriculum and curriculum tools, or you get screwed. That is, at least, how the others took it. I was too angry to let the man get get the better of me, and I was determined to fight it. So many other people just rolled over and took it, though, and they abandoned all other languages for Java for the rest of their undergraduate classes.

      --
      perl -e "eval pack(q{H*},join q{},qw{70 72696e74207061636b28717b482a7d2c717b343 637323635363534323533343430617d293b})"
    95. Re:software engineering != computer science by rucs_hack · · Score: 1

      every IDE uses a from of Makefile, only they are typically referred to as projects. I focus on Makefiles specifically because they cause the student to understand what goes on behind the scenes with IDE project files.

    96. Re:software engineering != computer science by autophile · · Score: 3, Insightful

      Naive about the purpose of C, anyway. C was never designed to prevent you from shooting yourself in the foot. Writing C requires you to think, which is sadly out of vogue these days, as you point out later.

      I know, it's insane nowadays! Why, just the other day I was just remarking to my barefoot wife, who was cleaning our clothes by beating them against the rocks in the river, and then rolling them through a wringer, that all these fancyboys with their pushbutton machines and laundry powder just don't value godly, manual labor anymore! Then I went to my factory job where the machines have no safety features, so they really require you to think, which is sadly out of vogue these days with OSHA and safety goggles and whatnots.

      The shame!

      --Rob

      --
      Towards the Singularity.
    97. Re:software engineering != computer science by daem0n1x · · Score: 1

      It's not about TFA, it's the stupid summary bashing Java for no reason.

    98. Re:software engineering != computer science by teh+kurisu · · Score: 1

      The first thing to remember is that a first year CS undergraduate doesn't necessarily have a computing background. Most universities will let you on such a course with high school maths and science qualifications, and basic computer literacy. This means that at some point you're going to have to define the terms 'compiler' and 'interpreter'. If you're teaching Java programming, it's basic common sense to say, "You'll be using the javac compiler and the java interpreter." That's all that's really necessary.

      Ant is quite a complex tool. I wouldn't expect any lecture time to be given over to it, but I'd expect a lab on it. (I'm also quite surprised that your labs were optional. They were a core part of my course.)

      If a student thinks that such things are beneath them, they can always go for advanced entry straight into second year.

    99. Re:software engineering != computer science by kwerle · · Score: 1

      Come on! Programming in C is no more "Thinking" than programming in Java. It's just thinking about lower level crap.

      I cut my teeth in C, back in the day (before Java). But I never enjoyed system level programming. I like app and server programming. And I sure as hell don't enjoy doing it in C. Gimme a nice, garbage collected, pointer free language any day. I don't like thinking about all that crap.

      But one man's crap is another's manure. And I thank god for the hardware and system programmers. I'm glad someone enjoys it.

      Our assembler class sucked. I'm not sure whose fault it was, but it was really terrible. But we did have one. And we had a processor design class, which was a lot less crappy than the assembler class.

      So I think having those classes is good and important. And I think if your Uni is going to have a "Computer Science" program it should probably have upper div assembly and processor design classes. But it ain't everyone's cup o' tea.

    100. Re:software engineering != computer science by stryder100 · · Score: 2, Insightful

      Good point - C was invented primarily not to make assembly language safe but to make it portable. That being said, to use it as an application development tool is not a good idea, even if the developers are "real" programmers. Things like checking for buffer overwrites, null pointers, etc. should definitely be automated, like it is in C++. Otherwise you're reinventing the wheel at every turn.

    101. Re:software engineering != computer science by aenikata · · Score: 1

      It's where you try to strike a balance. A lot of people object a lot more to government funding for students to study degrees which provide little if any benefit in the real-world job market.

      Yes, you need to have academia - as I noted in my previous comment you can have too little understanding of principles which you may only rarely use (and I've worked with some who clearly demonstrated little understanding of the code they blatantly copied out of a book - I kid you not). However, my intended statement was not that universities should focus exclusively on skills currently in demand from businesses. I should perhaps have said 'focussed EXCLUSIVELY on the academic'. It was that for a course to be of maximum benefit to the STUDENT, it should include skills which are in demand, and which improve the students employability and salary potential.

      The point about CAD is sensible, but actually promotes my line of thinking to some degree, because the old-school IT courses tend to promote hand-coding over using modern tools to aid the process. And there is an area where there has to be a balance. You should come away with a reasonable understanding of how the user interface, for example, is put together, but in daily use you would be at a disadvantage if you only knew how to hand-code, and not use an IDE to quickly design the interface. The latter is less about understanding the subject and more about using it in the real world, but it's still important.

      You are of course right that vocational courses and certificates should be the most focussed on business-essential skills.
      Degree courses do offer more scope for covering underlying theory. Where the degree needs to be business-led is in using reasonably current languages and technologies.
      There are very good reasons for learning Java immediately. You can write Java code for your mobile phone, your computer, your Blu-Ray player, for your webserver. While it doesn't teach you pointer arithmetic, there's a very good reason why it is in demand with employers, and that's because it has a use in many places. Another reason it is in demand is that it DOENS'T require pointers - pointers are the ticking time bomb of C programming, because you can introduce fatal memory leaks, security holes and so on by making a mistake using them. Yes, if you need to use them, you need to be able to use them properly, but for most applications a developer could pick a language that doesn't require them.
      One of my disagreements with the course was that the 2 languages we studied in the first year were C++ and PROLOG. I didn't mind the C++ as a principle, but it skipped using a modern IDE in favour of hand-coding, insisted on coursework using drawing libraries which weren't readily available for a home PC, and so on. JAVA wasn't an option until the 3rd year, and Visual Basic, etc weren't options at all. In terms of academia, it looked at Systems Analysis And Design, but listed things like the Jackson method as a programming-focussed design method, and skipped it to focus on SSADM. Then, the project wasn't to analyse a computing-related requirement, but to model a business instead. It tried to cover academic fields related to Computer Science, but managed to cover them in a manner that seemed almost actively inapplicable to IT employment requirements.

      In my opinion, a Bachelors Degree should aim to provide a student with the skills required for employment in that field. That DOES include academic study, because as you mentioned a sound understanding of the theory is required at times to make accurate decisions. It should also lay the foundation for further academic study in the form of a Masters degree or PhD. In those later qualifications I would expect the focus to be more on academia.
      The reason for this is that a Bachelors degree course is generally the first point that a student can fully focus on a chosen subject of study, and potentially the final point where they formally study the subject, so it has to fully prepare them for focussing their future life and

    102. Re:software engineering != computer science by Bodrius · · Score: 1

      Sounds like their teacher was as much of an elitist asshole as you, and this is the result.

      It worked: the students figured it out by themselves: press the "Build" button on the IDE and it works.

      Why on earth would they think there is an issue with that, since you let them figure out the details by themselves?

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    103. Re:software engineering != computer science by ciggieposeur · · Score: 1

      University is not occupational training.

      Well gosh, maybe we should tell that to the corporate world so they will stop requiring university degrees for occupational jobs.

    104. Re:software engineering != computer science by Etyenne · · Score: 1

      (I'm also quite surprised that your labs were optional. They were a core part of my course.)

      Some labs where compulsory (even had graded exercise!), some where optional. Going to those that where optional was sometime pretty valuable even you mastered the topic, as the TA (who was often hired to grade assignement too) would spoonfeed you the solution for the assignements.

      But I did skip the "Linux command line introduction" lab though, where they teach you about such exciting concept as moving around the file system using cd, and listin the content of your home directory using ls. :)

      Most University assignment being rather simple in term of scope (I was in CS, not engineering!), I doubt that they really to dive deeply into complex tool such as Ant; the 20 minutes introduction tutorial would generally suffice. Of course, it is different for graduate studies.

      --
      :wq
    105. Re:software engineering != computer science by jacquesm · · Score: 1

      > "that it is possible to corrupt the complete memory area that you have access to"

      That goes for *every* program that is linked together as a single binary. There are some very fancy schemes where objects have their own memory protection but this is very much outside the scope of most hardware.

      Granted, a language like java may give you the illusion that all your objects are nicely compartimentalized but that really is just that, an illusion. All those objects and the associated code live in the same space and while it is arguably harder to overwrite some other objects memory space, once you've achieved it (whici is a lot harder than in C, granted, but still possible) good luck finding the cause.

    106. Re:software engineering != computer science by roman_mir · · Score: 1

      I've grumbled many times about this concentration on Java, and the resultant lack of detailed understanding about programing, but each time I did so at my university I was disregarded, and someone always trotted out that age old nonsense "not re-inventing the wheel". - seriously, you can reply to that with this: Why bother teaching kids arithmetic? Just teach them what numbers look like and how to push the buttons on a calculator.

    107. Re:software engineering != computer science by Lodragandraoidh · · Score: 1

      Point taken.

      *tips hat*

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    108. Re:software engineering != computer science by linkedlinked · · Score: 1

      I think you're missing the point. While it's true that a "real" programmer can write in any language (I knew 10 by the time I was 17), what matters most is your *first* language.

      Java/C++/C/Lisp/ADA are *ALL* terrible choices for a first language. The problem we're encountering today is one of retention rates- 30% of the computer science majors at my school change their major after taking CSE 231 (Intro to C++), unless they're in the experimental, alternate route (Intro to Python). Programming in "real" languages like C++ and Java isn't fun, and typically, it's frustrating to learn unless you have some experience, or serious drive. Languages that some people consider "inferior" due to their ease of use, or lax conventions, may be more attractive to students trying to learn. And that should be the main goal of CS departments at colleges across the world.

    109. Re:software engineering != computer science by DerWulf · · Score: 1

      Unless you use native bindings (C knocking again) the JVM gurantees you can't. Please show me an example to the contrary. I know it would be very easy to do in C.

      --

      ___
      No power in the 'verse can stop me
    110. Re:software engineering != computer science by juanfe · · Score: 1

      I was a student in the first Java course taught at Cornell to undergrads -- CS 201 for non-majors, basically -- led by Professor Keshav Pingali. That's exactly how he structured the class -- throughout the class, we used Java OO concepts to build a virtual CPU that interpreted an assembly-like pseudo language that we had to use to learn about how the concepts behind low-level programming work (opcodes, registers, instruction pointers, etc).

      So I got two things -- an (basic for a non-CS major) understanding of how computer software works, which has helped in my professional life, as well as skills in a programming which have gotten me the jobs I've had since graduation (even though I'm not a coder).

      The issue is not the language that something is taught in, it's how that language is used to teach.

      --
      ***Foucault is watching you..***
    111. Re:software engineering != computer science by jacquesm · · Score: 1

      The jvm is itself a program written in C ...

      That kind of a guarantee is as good as the code, there is no way to guarantee software at that level, all it takes is a single bug for that guarantee to be worthless. There is no piece of software even 10% the size of the JVM without bugs. All that you know for sure is that there are undiscovered bugs.

      Do you have a reference for that guarantee ? I'd like to read that bit, I've always been interested in software that comes with assurances.

      just one second in google:

      http://seclists.org/bugtraq/2007/Oct/0417.html

    112. Re:software engineering != computer science by OptimusPaul · · Score: 1

      well whoever wrote this article needs to get out more. I was recently working with some CS students, they were interns, and none of them had any problems, they all knew C and C++, some were well versed in Obj-C and all knew Python and Ruby better than anyone else in the company (we are a bunch of dinosaurs though). It really does sound to me that the problem is specific to a few courses and a few institutions.

    113. Re:software engineering != computer science by Ed+Avis · · Score: 1

      Programming in C is no more "Thinking" than programming in Java. It's just thinking about lower level crap.
      Exactly! And this lower level crap is something you should learn at least a bit of during your CS course. I program in higher-level languages too but I wouldn't hire someone who couldn't understand what an address is or why byte-aligned accesses might be slower than word-aligned.
      --
      -- Ed Avis ed@membled.com
    114. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      javap -c YourClassName

      (as a pointer in the right direction :-)

    115. Re:software engineering != computer science by Surt · · Score: 1

      Software engineering is a superset of computer science, programming is a subset of software engineering.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    116. Re:software engineering != computer science by jacquesm · · Score: 1

      cool ! thank you, learn a new thing everyday. Now to find a reason to write something in Java...

    117. Re:software engineering != computer science by fbjon · · Score: 1

      You mean a .class file? .Jar files "decompile" with unzip.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    118. Re:software engineering != computer science by DerWulf · · Score: 1

      I can't believe you are really comparing a security vulnerability in the JVM ( a bug ...) to off-by-one errors corrupting the heap in C. That's would be like saying that C is unsecure because of hypervisor exploits i.e. completely missing the point.

      Yes, the JVM will not be bug free but the stuff it's hiding from the programmer will be done by code that is of much higher quality than what can be expected by an application programmer writing replacements for that code ( because he is using a lower level language).

      --

      ___
      No power in the 'verse can stop me
    119. Re:software engineering != computer science by Surt · · Score: 1

      That had me laughing out loud. If ever there was a language designed to help you shoot yourself in the foot, surely it is vb.
      I guess if all you care about it API level security, maybe it is ok, but if you have security concerns, surely you have design level security concerns as well?

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    120. Re:software engineering != computer science by roman_mir · · Score: 1

      My background: self taught Basic on Atari 600, then Pascal and TP, then C and Assembler for 86/87, then C++ and then Prolog. Then at the UofT got BSc at comsci and astrophysics, where was taught datastructures, algorythms, numeric theory, computational analysis, OS/compiler/language/graphics/parallel computing and other problems in Assembler 6800, OOT, Lisp, Scheme, Prolog, ML, Unix shell programming, C, Java and SQL. Studied and worked at the same time since 1995 building C++, ASP/HTML, SQL solutions, eventually moved to Java/J2EE stuff. I don't consider the fact that Java was taught to me at the university to be detrimental to my understanding of computing. I disagree with you on this: So yes, Java doesn't teach very darn much about the harsh realities of actually thinking. And since thinking is hard, it's an impediment to productivity anyway, so it hasn't much been missed. The only thing we lost in the shuffle is our professional self respect. - At the university the main goal of computer science education is not to teach Java or any other specific language, it is to explain algorythms, analysis, computing, it is to teach people to solve problems.

      Programming in principle should teach about harsh realities of actually thinking. Java is a tool and can be and is used to provide solutions to real problems, whether it is a space/time/load balancing problem or a communications problem or a parallel processing problem or a computational problem or a user interface problem, Java can be used to solve that problem. Memory and CPU management is still a problem with Java just like with any other language, which must be solved with proper use of algorythms and by knowing the specifics of the platform.

      My point is that the real concern of the article should not be about universities using a particular language to teach people about computer science, the real concern is whether computers science is actually taught.

    121. Re:software engineering != computer science by Ed+Avis · · Score: 1

      Yeah, look inside the jar file and you'll see the class files which are Java bytecode.

      --
      -- Ed Avis ed@membled.com
    122. Re:software engineering != computer science by fbjon · · Score: 1

      The thing is, code frequently gets that large, or larger. Also, how may limited systems can't run a VM these days? Most phones are limited systems, and even they've been running Java for a long time already. Not that I particularly like it, but just sayin'.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    123. Re:software engineering != computer science by ceoyoyo · · Score: 1

      Programming is a subset of computer science. Software engineering isn't. Software engineering is to computer science something like what building bridges is to physics.

    124. Re:software engineering != computer science by ceoyoyo · · Score: 1

      Sure is. Math is the LANGUAGE of science. Programming (and math) are the LANGUAGES of computer science.

      No computer scientist should ever be worried about making something run 100% of the time, writing a "mission critical" program, or any of the other buzzwords. That's what software engineers do, and they're trained for it. Real computer scientists are like physicists - they push the boundaries to see what's there but you wouldn't let one build a bridge unless they were going to immediately blow it up to see what happened.

    125. Re:software engineering != computer science by darkwing_bmf · · Score: 1

      Ironically, the authors of the article are employers telling Universities to produce what they want.

    126. Re:software engineering != computer science by ceoyoyo · · Score: 1

      Try teaching them assembly.

      We thought an assignment to write Break Out or Snake in assembly was fun. My last class thought putting their name on the screen was an unreasonable expectation.

    127. Re:software engineering != computer science by Skapare · · Score: 1

      If your code segfaults due to dereferencing a bad pointer, then it is not a correct implemention of the graph search algorithm. It might be close, but close does not count. Yes, in practice, systems must work 100%.

      --
      now we need to go OSS in diesel cars
    128. Re:software engineering != computer science by prestomation · · Score: 1

      Last year I was in the decidedly odd position of having to teach third year CS students (who had primarily used Java), what pointers were, how memory allocation worked, and how to use C.

      I'm a freshman at the Ohio State University and I just started my 2nd quarter. My 2nd quarter general engineering course is basic C/C++. It's all C for 70% of the quarter and then they will dive into classes. The very first day of class my prof walked in and wrote on the board "Pointers contain a memory address to another variable" or something much clearer. He told everyone to drill it into their heads, even though the majority didn't know the first thing about computer science.

    129. Re:software engineering != computer science by CodeBuster · · Score: 1

      Having once been a computer science student myself (graduated and working now) I can appreciate your point of view. However, it is my opinion that the problem has less to do with Java and more to do with the reservation of general programming language courses for the second year at the earliest and the third year of study in many universities. This means that any programming concepts which are NOT part of the language used in the introductory programming courses (i.e. Java) are likely to be poorly understood at best. This problem is inevitable to a certain degree because no ONE language includes all of the concepts and features which are taught in general course on programming languages and it would be difficult to appreciate them in any case without at least some concrete basis, however imperfect or incomplete that basis may be, for comparison.

      IMHO, rather than simply throwing first year CS students straight into the meat grinder of their first programming class as their first freshman course (i.e. the find who sinks and who can swim approach) the CS programs should take the time to ensure that basic general knowledge of the subject and even basic computer usage skills are present. Most of these kids grew up in a Windows GUI world without knowledge of Unix, command line, or even basically how their computer works so it should not be assumed that they all begin their first year ready to dive straight into their first course on Java programming. Perhaps an increase from four (4) years to five (5) as in many other engineering disciplines would allow enough additional time to ensure the proper progression of CS students through their course of study...just my two cents worth.

      BTW: If they don't know these things (i.e. pointers and memory management) now, they will have a chance to learn when the get their first real work assignments. The really good stuff that you need to work in the industry isn't taught in CS programs anyway, the CS program simply prepares you to go out and learn the necessary details on your own time.

    130. Re:software engineering != computer science by AndersOSU · · Score: 1

      I don't know, maybe it's a quirk of your field where it is difficult to teach from the bottom up.

      I can tell you that an automotive engineer with a Mechanical Engineering degree would be much less employable if he didn't study thermodynamics, fluid dynamics, and heat transfer (the fundamentals of jet propulsion), for the simple reason that those are required areas for an accredited degree. The automotive engineer would also have have a basic understanding of chemistry, be able to write an essay, and have a passing familiarity with the social sciences in order to receive an accredited degree. Even Kettering University (formerly the GM institute) teaches those things.

      Now the reason for that is probably partly academic, but it also makes the aspiring automotive engineer a better problem solver in general.

    131. Re:software engineering != computer science by maomoondog · · Score: 1

      But when the system architecture of the day changes (say, from 32-bit to 64-bit addressing), your 100% accurate pointer code will work 0% of the time. The theoretical computer scientist will then hire a new coder (super-cheap and fresh out of schooling on current architecture) to fix the implementation of her still-correct algorithm. Or they wrote it in Java and let Sun do the updating for them.

      Don't get me wrong, I think systems classes are essential for understanding how layers of abstraction provide us environments where we can get real work done. But asking your university to give you vocational training in particular low-level tools is praying for obsolescence. Concentrate on teaching kids C (or, god forbid, ADA), and you'll see even more complaints of outsourcing and low job security in the future. In the long run, the economy simply can't support very many people whose specialty is boilerplate low level code that SHOULD be abstracted away in most circumstances.

    132. Re:software engineering != computer science by jacquesm · · Score: 1

      fair enough, but it doesn't really matter does it ? In 'C' the run time environment is the standard library, that's what you were pointing at earlier, in java the runtime environment is the JVM + all supporting classes and libraries. The end result of either is a complex environment with lots of potential for bugs. And not just bugs by the programmer of the application, all the supporting code has to be counted as well. Whether the insecurity stems from mis-use of a library routine or from a bug in the JVM is not really relevant. It is probably true that over time the bugs in the JVM itself are being ironed out so long term this should be an issue that occurs less and less.

      It is probably true (I simply don't know enough about java) that the JVM makes it a lot harder to do bad stuff, but any programming language that is versatile enough to get real work done usually gives you enough rope to hang yourself with and java is most likely not an exception in this respect.

      The number of times I've had java stuff crash on me with very cryptic error messages and not a clue as to what you could do to fix that sort of problem are countless (commercial software, no less), my experience with 'C' and 'C++' based stuff has not been much better in that respect so I don't favor the one over the other based on perceived stability.

      I just think that it is shortsighted to prefer java over C or any other language because of a single (debatable) advantage.

      Strongly typed languages will have certain advantages over weakly typed languages such as C and asm, but invariably that comes at some price, there is always a trade-off.

      Which tool is proper for the job is a complex question that has a lot of factors, and the inability to corrupt local memory (easily) is just one such factor. In C that is mostly a matter of training yourself to stay away from risky constructs and to test your code rigorously. I'd even go so far as to argue that the awareness of the effects of your code in C sets you up for being an excellent programmer because there are no training wheels. You're literally on your own when things die, if you're lucky you have a core dump but most of the time you don't and you'll have to use your wits to figure out what went wrong. The only thing less forgiving than that would be embedded programming without access to an emulator. With 'java' the training wheels literally never come off, they can't.

      And for many people that's probably a good thing. Interrupt handlers, kernels and other code like that will *never* be written in something like java, there simply is no room for 'side effects', the code has to be completely deterministic. The same goes for real time stuff, machine control and so on.

      And as for you attacking the original poster a long long thread ago about his 'prick waving' (in your words), now you are actually arguing that there are different levels of programmers ('quality' coders and 'applications programmers'), which was one of the original posters main points...

      To me C is like a powerful tool, it is great for certain jobs, but lots of code is much easier and simpler written in a less powerful language. Just like sometimes you need the soldering iron and sometimes you need the stickwelder :)

    133. Re:software engineering != computer science by elhaf · · Score: 1

      I'm in favor of damaging CS students. More for me.

      --
      Six score characters.
      Brevity being wit's soul
      I have enough space.
    134. Re:software engineering != computer science by Frank+T.+Lofaro+Jr. · · Score: 1

      Windows isn't 100% and Microsoft isn't anywhere near broke.

      --
      Just because it CAN be done, doesn't mean it should!
    135. Re:software engineering != computer science by celle · · Score: 1

      "Now we've allowed many people to enter the profession without comprehending the rigors of preconditions. It's as if we had taught a generation of lawyers how to practice law, but omitted liability. Oops. What to do about it? Invent Java, and tell all these programmers it wasn't their fault in the first place." Is it just me or did you just describe politicians and our current political nightmare in America(US)?

    136. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      I know you are joking but those things really do create generations of idiots.

    137. Re:software engineering != computer science by celle · · Score: 1
      "Now we've allowed many people to enter the profession without comprehending the rigors of preconditions. It's as if we had taught a generation of lawyers how to practice law, but omitted liability. Oops. What to do about it? Invent Java, and tell all these programmers it wasn't their fault in the first place."

      Is it just me or did you just describe politicians and our current political nightmare in America(US)?

      PS. Sometime this board linefeeds and sometimes it doesn't.
    138. Re:software engineering != computer science by tknd · · Score: 1

      C is best thought of as a very powerful assembly preprocessor. I know that sounds harsh but when I look at a chunk of C code I have a pretty good idea of the assembly language the compiler is going to emit.

      Strongly disagree. Code generated is entirely up to the compiler. You have to understand your compiler(s) just as much as you have to understand the VM(s) in Java.

      The abstractions don't end there either. The CPU can also have it's own quirks solved or changed between models and microcode.

    139. Re:software engineering != computer science by Krishnoid · · Score: 1
      Worst of all, the strcpy() function seemed to imply "buffer overflow is no great concern, we're not even going to give you a single argument on this very dangerous function to help you avert it". It was a false parsimony to save that extra argument in the default case.

      Aren't you being a bit harsh? When programmers used two digits instead of four to represent the current year, they saved a not-insignificant amount of memory for that time without any serious repercussions.

      Now if you'll excuse me, this new show called 'Enterprise' is on. The special effects are cool, but what I like most is the original concept, about Earth's first foray into deep space. I like the fresh face who plays the captain; I hope he goes on to do another TV show.

    140. Re:software engineering != computer science by Chandon+Seldon · · Score: 1

      Are you seriously arguing that college computer science graduates should be left completely unaware of low level concerns simply because many of them will have to deal with such problems only occasionally? C and C++ code is reasonably common - sometimes it's even the right tool for a job. If CS graduates don't have experience dealing with the complications of programing in a language with pointers then who does that leave to do it?

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    141. Re:software engineering != computer science by KZigurs · · Score: 1

      Java has nothing to do with it. I work primarily in Java. Yet, memory fragmentation, stupid implementations of GC (without heap compacting), re-implementing String class to utilize implicit char[] buffers to prevent re-allocations on most basic operations when getting some fucked up code to fix and get up to speed - this all is there. Machine is no different than C or Lisp with all the same problems.

      Any fuckin language will have the same challenges if you push it far enough. It is easy to leak memory in Java, it is easy to mess up GC if you are using any of (GCs) implementations in C(++). Overflow stack in lisp, run out of memory in haskell. Piece of cake. Alas for the usual CS course the assignments and problems ignore the 'we do this ___because otherwise you will be toasted if...___' part. Just truncated to 'we do this'. algorithms. data structures. Everything. And the problems to solve never have practical limitations.

      Want to see your CS course suddenly realize fully what happens underneath? Assignment/Competition: Calculate 10'000'000th fibonacci number (ish 26M digits (base 10), btw ;)) in least amount of time. Java can do bitwise operations just as easily as C. C can overflow just as easily as java. Basic might struggle a bit, thou ;)

    142. Re:software engineering != computer science by Khelder · · Score: 1

      Based on my experience, I'd say that the reason so much software is so buggy is not that programmers are stupid, ignorant, uneducated, lazy, or whatever (although those may apply).

      The main problem is that high-quality, robust software takes a lot longer to develop and/or is a lot more expensive. And it seems like people have decided that in many cases, they'd rather have the cheaper stuff.

      I don't know if this is a rational decision or not, because it depends on how much extra cost lower-quality software incurs and how much more it would cost to make it better. But I think just saying "people are just stupid for not making it better" ignores the huge economic aspect.

    143. Re:software engineering != computer science by broken_chaos · · Score: 1

      You seem to be right, from my experiences so far. I'm in first year software engineering at the University of Waterloo (Canada, for those who don't know), and I'm already noticing this a bit...

      First, we're learning Java - it's just first year, and I'm reasonably certain we do get into other languages later on. It's a reasonable language from my perspective so far, and we aren't just doing GUI programs... Mostly, yes, unfortunately, but I honestly can't say most of the class seems to know much about anything beyond Windows and GUIs (some people, certainly, but not most).

      Everything so far seems to be aimed at making everyone do the same thing in (most often) the same way. Most of our courses so far are very closed-ended, as in everything basically has one way to do it, so you have to do it the same way as everyone else is. Perhaps this will change in future years, but so far it's not been fun for me (which is part of what accounts for some of my less-than-stellar marks in the first term - repetitive, uninteresting work is not the best way for me to learn, although I don't know about other people).

      I'm also beginning to wonder (although if this is accurate, I'd bet it's a general problem with universities) how much actual experience some of the professors, TAs, and so forth have with real-world programming, as some of the courses are seeming a little... Over-the-top with theory, and lack many real applications of the things introduced. (It's amazing just how much math theory seems to be only really applicable to creating... Yup, more math theory. At least that's all we're being taught.)

      The co-op system is one of the parts that many people seem to really enjoy of the entire system. I'm a little concerned about the lack of university involvement in some parts of it. They're the ones setting up many of the job positions, and students *do* receive grades/credits they need for graduation, but I was told by someone in the "career services department" that the university has no part in, for example, employee contracts signed by students, nor has there been any course that deals with contract law and common sense. I fear that when it comes to it, some of the co-op positions will have hefty legalese contracts that most students can't understand, and will sign blindly - with clauses claiming ownership to all 'intellectual property' they ever create. The general world getting into the mindset that such things are 'right' or 'just the way things are done' is something I fear greatly.

      Overall it really does seem aimed at turning us into good little drones, possibly because the university receives money from these co-op corporations, although I'll have to see how a co-op term goes before I can make any real judgments on that.

      As a note, since I'm not posting anonymously, this is just my opinion and views based on observations and impressions, nothing terribly concrete. As I'm only in first year, I may also be rather off-base on a lot of this.

    144. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      "A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada)"

      This should be:

      "A Real Programmer Can Write FORTRAN Programs in Any Language"

    145. Re:software engineering != computer science by KDR_11k · · Score: 1

      Yeah and those phones fequently take a second to react to user input. You can't afford that for an electronic brake or something.

      --
      Justice is the sheep getting arrested while an impartial judge declares the vote void.
    146. Re:software engineering != computer science by Cederic · · Score: 1

      people go to the university to understand the foundations of their field Engineering and the traditional sciences are pretty much the only areas where this is actually true.

      People go to university for many reasons, and mostly go into jobs unconnected to their degree. Understanding the foundations of their field doesn't really help them on either count.

    147. Re:software engineering != computer science by clampolo · · Score: 1

      Don't forget about its use in embedded systems. For every processor that is chugging away at java, there are hundreds running on lean C code: your average car has over 300 embedded processors. With the limited memory and processing power in an embedded systems nothing beats the speed, low memory overhead, and low-level features of C.

    148. Re:software engineering != computer science by edwdig · · Score: 1

      No computer scientist should ever be worried about making something run 100% of the time, writing a "mission critical" program, or any of the other buzzwords. That's what software engineers do, and they're trained for it.

      The vast majority of the business world doesn't make that distinction. If you want to do something with your degree, you're almost guaranteed to be handling both of those roles.

    149. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      although I did have mental convulsions cause C++ is incredibly messy to read at a glance

      C++ is no messier to look at than Java. Java is a C like language for crying out loud. In fact, I hate what is considered the Java de facto style guide.

      Just because you would generally write
      if()
      {

      }
      else
      {

      }
      in C++ does not mean you couldn't write it as
      if() {

      } else {

      }

      You cannot teach certain concepts using Java as a programming language that you can teach with C/C++. That's the way Java was written. No pointers!

      I found learning Java very easy because of my initial training with C and C++. The other direction would not work as easily because then you would have to teach about dereferencing and pointers, etc.

      What would be truly ideal is exposing students to different languages early on. Possibly teaching core programming concepts in one language and then asking the students to apply that knowledge with different programming languages. Furthermore, as a computer science student, I really wish I would have been exposed to different paradigms earlier. For example, in a data structures class, teach me how to do lists in Prolog. It doesn't have to be anything really in depth, just show students that there are different approaches to programming. Make sure they don't get stuck thinking imperatively.

    150. Re:software engineering != computer science by ceoyoyo · · Score: 1

      It doesn't matter what distinctions the business world makes. They want software engineers. They can hire software engineers. Actually, they don't really. What they want is a few software engineers to be managers and lots of tech school code monkeys to do the grunt work.

      The business world will quickly catch on to the difference between an engineer and a scientist. They're not stupid. The confusion is with students and administrators. The former can be straightened out by beefing up the math requirements for CS programs.

    151. Re:software engineering != computer science by owlstead · · Score: 1

      "Last year I was in the decidedly odd position of having to teach third year CS students (who had primarily used Java), what pointers were, how memory allocation worked, and how to use C."

      Good.

      "They were also completely baffled when it came to not using an IDE to develop software. Makefiles had to be explained several times."

      Yeah, well, you can start teaching Emacs and VIM to them again as well. There is a reason that command lines and makefiles are going the way of the dodo for code generation. There is no need to master all this trap, especially if they are only going to be used once in a while. Explaining that Makefiles care used to compile and link code is ok, but please don't let them actually learn the syntax. They'll forget anyway.

      The last time I saw a relatively small Makefile produce it's completely useless and unreadable output, I almost started to cry and laugh at the same time. And I threw away the entire project when the linker crashes with an equally unreadable error right at the end of minutes of producing even more garbage. I'll have my IDE with automatic parsing and linking in the background *anytime*. Of course, you can use automake and M4 and the like to make it even *more* idiotic, but you might want to leave that as an exercise.

      Your students were right about not understanding it, and I hope they've forgotten that nightmare already. And I hope that they are producing software instead.

    152. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      The true "thinkers of tomorrow" are abstract mathematicians, physicists, poets, etc.

      Sorry, this is absolutely ridiculous. Mathematicians, physicists yes - as well as inventors, engineers and everyone else who works in the physical sciences.

      Poets? No.

    153. Re:software engineering != computer science by zoips · · Score: 1

      You know, everyone is always bad-mouthing Javascript, but there are only two other languages that even work similarly to it: SELF, which is a PITA to use, and io, which is a great language (and conforms better to the prototype paradigm invented by SELF). Javascript is a good bridge language between prototypes and classical OOP (as used in C++/Java/etc) that people can grasp a bit easier. Javascript also supports a number of features not supported by the big name languages, such as closures, first class functions, prototypes (obviously), and expando properties. Prototypes and expando properties add some interesting meta-programming aspects (though kind of b0rked due to the poor implementation of prototypes in Javascript).

      Please, bad mouth the interpreters, which have mostly been junk (especially Microsoft's, which is abysmal), but not the language itself.

    154. Re:software engineering != computer science by h4ck7h3p14n37 · · Score: 1

      Last year I was in the decidedly odd position of having to teach third year CS students (who had primarily used Java), what pointers were, how memory allocation worked, and how to use C.

      That they didn't know C wasn't too surprising. That they didn't have more than a basic grasp of memory management was shocking. They were also completely baffled when it came to not using an IDE to develop software. Makefiles had to be explained several times.

      Is the modern computer science curriculum broken? I would expect that a CS major would be well versed in computer theory along with the applications of that theory, with a course list including: digital design, computational theory, algorithms, data structures, assembler, C, computer architecture and operating systems. Basically I'd expect the student to know the theory along with how a computer works from the gate level on up. Things like object oriented programming languages, databases, etc. would then simply be electives, but every student would know the fundamentals.

      I believe that poor instruction of computing fundamentals is to blame for the current state of affairs. Why would a CS student not be exposed to memory management and the command-line during their first year of coursework? Hell, the book on Color Computer Basic that I read when I was seven covered memory management (using a P.O. box analogy). Is the use of languages like Java and IDEs simply a crutch to improve the scores of mediocre students? Are professors incapable of teaching the subject matter, or has the computer science curriculum simply been dumbed down in an age where many (unfortunate) people will simply be installing and configuring third-party software packages on a server that's managed by some group off-site and then calling the support line if they run into problems?

    155. Re:software engineering != computer science by edwdig · · Score: 1

      Most slab allocators work by prepending a small header to the start of each malloc()'d block of memory that specifies the size of the block, so that free() will know how much it is expected to free. The implementation could use that to determine the size of any block of memory given by a pointer.

      You can't rely on that. What if the string you received is contained within part of a larger data structure? That information you think is malloc data will really be random data used by the program.

    156. Re:software engineering != computer science by OAB_X · · Score: 1

      What is a university doing teaching C starting in the 3rd year? That's absurd. Java is great as a learning language for stuff like if statements, looping, file input/output, recursion, etc. in a "safe" environment. Meaning, you don't shoot yourself in the foot every 30 seconds with segmentation faults because you are making newbie mistakes.

      As for makefiles, the best way I have found to describe it is as a specially formatted shell script that compiles (your) program. Using the makefile, it will only compile files that have not been compiled yet, or have changed based on the last time the compiler was run. The first time any programming is done, it should be done in Notepad (or equivalent) with a command-line compiler. Auto-compilation to tell you what you are doing wrong is for people who know what they are doing in the first place, not to help you learn.

      My university starts teaching C in the 1st year.

      1st semester: Intro to Programming (Java)
      2nd Semester: Intro to Programming 2 (Java)
      2nd Semester: Intro to C/Unix (C and Unix shell programming obviously)
      3rd Semester: Data Structures (in C, you fail this course if you don't know pointers)
      4th Semester: Computer Organization 2 (Assembly)
      4th Semester: Software Engineering (in any OO language you want, the textbook uses Java for it's examples)

      My thought is that if you understand C (or C++ even, they are similar), you can learn just about any other language.

    157. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      That's rubbish.

      First of all, even though Java does the array index checking for you, it will still throw an exception if you pass in an invalid index which will still cause your program to barf even if it doesn't segfault. So for correctness you still need to check the index yourself, and this applies to the List class also.

      Additionally there are all sorts of other things Java developers have to think about. Thread safety is a particularly interesting one, even if it wasn't properly taught in university.

    158. Re:software engineering != computer science by clampolo · · Score: 1

      I know a few idiots who could code in C; but never managed to get Java. They couldn't understand anything beyond functional programming.

      Functional programming is not C programming. Functional programming is a programming paradigm where the state is maintained by the implementation (usually on a stack) as opposed to maintaining state with assignment statements. C and Java are both imperative programming languages as opposed to functional programming languages.
      As for bad programmers, there are bad ones in every language.
    159. Re:software engineering != computer science by sfjoe · · Score: 1

      They were also completely baffled when it came to not using an IDE to develop software. Makefiles had to be explained several times.

      Maybe you need to learn how to communicate to your students. Make is a tool. vi is a tool. An IDE is a tool. That your students knew how to use one tool but not another isn't necessarily a sign they can't program.

      --
      It's simple: I demand prosecution for torture.
    160. Re:software engineering != computer science by PrashantV · · Score: 1

      I go to uni in Australia, and I'm about to start my third year, and I can tell you that is definitely not how my uni teaches things. The first thing was learnt was the concept of a machine, followed by C, and then algorithms, still in C. We then moved on to Java for more serious OOP. We have not learnt to code ANY gui programs, (we've learnt the basics of cgi, that is literally, c programs generating html, then moving on to perl + php).

      I think it is the specific uni that is the problem, as I think my uni is definitely teaching things the right way. I've learnt C, Perl, Bash, AVR Assembler, Java, and I realise that the language does not really matter. Obviously C is a much lower level than Java, and Java lower than perl, but you learn the concepts, and can code in any language easily.

    161. Re:software engineering != computer science by h4ck7h3p14n37 · · Score: 1

      So you're actually admitting (and providing great examples) that you're totally dependent on IDEs for writing, building and troubleshooting code? That doesn't sound like a good thing to me.

      There is a reason that command lines and makefiles are going the way of the dodo for code generation.

      They are? Funny, I just upgraded the packages installed on an intern's FreeBSD system here and I saw plenty use of Makefiles and the command-line.

      The last time I saw a relatively small Makefile produce it's completely useless and unreadable output, I almost started to cry and laugh at the same time. And I threw away the entire project when the linker crashes with an equally unreadable error right at the end of minutes of producing even more garbage.

      It sounds to me like you don't know what's going on; any programmer worth his salt should be able to read and understand the output from cc or ld. God help you if you ever try to port software to a new system. So what's your solution when you can't get a known good piece of software to build on your system? Use something else, or have someone build it for you?

      I'll have my IDE with automatic parsing and linking in the background *anytime*.

      Of course you would, you'd be unable to produce a program that compiled and ran properly without it!

      Of course, you can use automake and M4 and the like to make it even *more* idiotic, but you might want to leave that as an exercise.

      It appears to me that you don't even understand the problems that those tools were created to solve. Not a surprise since you've already stated you must use an IDE.

      The bottom line is that if you can't sit down and code with a pen and paper, then you're not ready to use any of the more advanced tools.

    162. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      Please remind me never to hire you. It is not only possible but relatively easy to write C code which compiles and runs without changes on all kinds of different architectures. The only really difficult part is realizing which assumptions you need to question, or finding all of the bad assumptions in existing code. That you think switching architectures somehow requires a rewrite is scary.

    163. Re:software engineering != computer science by RedWizzard · · Score: 1

      Exactly. C is best thought of as a very powerful assembly preprocessor. I know that sounds harsh but when I look at a chunk of C code I have a pretty good idea of the assembly language the compiler is going to emit. Even with C++ that works to a certain extent.

      With Java and most other 'friendly' languages you have literally no way of knowing what is going on under the hood unless you are prepared to invest a lot more time and effort than is available to the average comp-sci student.

      With C that's as close as a single flag on your compile line and you can study the generated code until you're tired of it.
      I don't see the distinction. Between the language spec, the virtual machine spec, and the fact that Java comes with a disassembler it is no more difficult to find out what Java does under the hood than it is to find out what C does under the hood. If anything it's easier as the Java VM and bytecode is relatively simple compared to most modern processor architectures and assembly languages.
    164. Re:software engineering != computer science by PCM2 · · Score: 1

      If the course is for people who are already grounded in the basics of programming, and who understand how to use the command line to begin with, then perhaps you can dispense with teaching them how to use javac and ant, but you still need to at least tell them which tools they should be using. If, on the other hand, the course is for people who have never programmed before, you absolutely need to teach them about how to use javac and ant.

      OK, fair enough. So which is it? I kind of lean toward the idea that a Computer Science program need not necessarily teach students how to program in ANY language, any more than an English composition program should include a course on the ins and outs of Microsoft Word. "Here's an assignment. Pick a language and solve this problem, using an implementation of this data structure."

      I recently took a CS110A class at my local community college, just to get "free" transferable credits, and I was kind of shocked. It was a C++ programming class that assumed no significant knowledge of computers or programming concepts at all. Although it was a C++ class, and not C, the word "object" was never mentioned. By the end of the semester we had been taught multi-dimensional arrays. Throughout the course, all exercises used C-style strings where strings were called for. We had done the basic control structures, including for and while loops, if, and case/switch, but several students seemed to be forever writing while loops where for would have been more appropriate, and others never really got the hang of else -- in other words, there was no real emphasis on coding practice.

      My question for you: Is that properly called a Computer Science class? At the same community college, you can take classes in elementary math, algebra, geometry, algebra II, and so on ... but only Calculus and up is going to count toward the lower-division coursework of a science degree. CS110A, on the other hand, is a foundational course for a Computer Science degree. Seems like we're cheating the students, if you ask me.

      --
      Breakfast served all day!
    165. Re:software engineering != computer science by jdigriz · · Score: 1

      Were you using U.S. Gallons or Imperial Gallons?

    166. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      What the hell does this have to do with Java?

      Java has better support for rigorous thinking (strong type safety, unsafe code having to be behind a JNI boundary, declared exception handling and direct support for exception handling in the first place) than the C libraries (and C in general), although it is not as deep at static checks at STL C++. Java actually encourages (as a matter of style, not built in the language) precondition checking and throwing of exceptions at violated preconditions. It's typically done only for argument checking, but that's a bonus over C's old fashioned "don't waste the CPU cycles" style.

      I liked your whole article, except the for the last two paragraphs where you tried to tie your good thesis in with the article's subject line. You were already well within the subject matter by discussing how students nowadays are lazy (or their profs are).

    167. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      "In practice systems have to work 100%"

      In the famous words of Lois Griffin when she hears Peter "didn't care for the Godfather:" "whaaaaaa?!"

      I hope people aren't paying you to deliver software, because with your attitude you'll never deliver any. In theory software (algorithms) have to be 100% (well they don't really, but you have to document why they aren't); in practice they have to work most of the time.
      And this isn't even a bad thing. There's a lot of give and take in developing systems that work well for the intended user. For example, you might use an inefficient algorithm that you can check more carefully so that you can be sure you get things done right regardless of the extra time.
      Or, and I think this one happens more, you might use a ridiculously complex algorithm to handle your data to shave off 10% of the time (you thought you'd knock of 90, but you were prematurely optimizing and unwilling to throw one away) and find it incredibly buggy.

      But seriously, nobody delivers 100% perfect software. I'm willing to bet even air traffic control software has delivered a few bugs.

      People who develop kernels are going to pick up C. It doesn't matter what you teach them because they didn't learn to code in class. Okay, a few of them did; but you get the point: Kernel developers are often hardcore geeks, and they'll pick things up all on their own.
      My concern is that the current generation of mediocre programmers is getting the Java culture which is: Never deliver anything, and if you happen to accidentally deliver just complain about how it's broken and you want to rewrite it with technology XYZ.
      Then spend 80 hours coming up with a uselessly complex class structure for incredible flexibility no one will ever use. Write 12,000 lines of boilerplate and 1,000 lines of code because you're afraid of functions longer than 20 lines.

    168. Re:software engineering != computer science by smellotron · · Score: 1

      At most 4 year colleges, even a CS major only really has around 6 compsci classes.

      Corollary: At most 4 year colleges, CS majors aren't well-prepared for Computer Science. 6 classes in a subject sounds like a little bit more than a minor. At least I can speak for UIUC—over two thirds of my undergrad hours were spent in CS courses.

    169. Re:software engineering != computer science by smellotron · · Score: 1

      I despise makefiles. Java has dependency issues, but they are an order of magnitude less than C/C++.

      It's certainly a shame that Makefiles seem to be half of the solution. They have all sorts of built-in rules to make C (and by extension C++) compiling/linking easy, but they don't handle #include dependencies. makedepend is your friend here. In my experience, learning about Makefiles necessitates learning the whole toolchain, be it gcc+gmake+makedepend+ctags+vim or ant+javac+jar+eclipse or devenv+vcproj+vsprops.

      I'd rather that Makefiles eschew the implicit rules by default; but beyond that, they're certainly sufficient for any student-sized project.

    170. Re:software engineering != computer science by aenikata · · Score: 1

      There's long been debate about developers calling themselves Software Engineers, because the level of knowledge expected is generally rather less complete. Speaking as a developer, I don't think it's a particularly suitable title, for that kind of reason. I trust my life regularly to the designs of engineers, but a number of developers I've met and whose code I have worked on have not had remotely equivalent standards and understanding. I can list only 2 developers I've worked with who I would definitely want on my team if I was assembling one, and at least 3 whose code I would probably never trust unless fully vetted by someone else. Having said that, with regards understanding the separation of domains of computer science understanding, perhaps I chose a bad example - in Computer Science there are many different models for analysis, different (and conflicting, sometimes) models for design, more languages than you could realistically cover, plus knowledge of hardware, device I/O, networking, maths and logic, and so on. In the first year you'd cover a couple of programming languages, and still not have an in-depth knowledge of all of the main libraries around for that language, as well as only rudimentary knowledge of systems analysis, related maths, and so on. Many areas would still be untouched. A good course will give the user knowledge of several programming languages over the 3 years, allowing a focus on particular ones later on to get a solid knowledge of that language. However, it will leave out far more programming languages than it covers, and other areas would be a mix of required courses and electics - e.g full understanding of the main database design and modelling theories, Device I/O and assembly language, maths for more advance 3D geometry calculations, knowledge of multiple design methodologies, AI and Cognitive Science, coverage of web development as well as desktop programs, GUI design principles, mobile device development, etc... I don't think it is possible to adequately cover the full spectrum in a good depth within the limits of a 3 year course, not when the course assumes no prior IT knowledge. Most developers are therefore specialists - on Desktop (GUI) development, back-end (database, etc) development, Web development, Mobile development, Game Development, 3D, Financial Analysis, device driver or assember... sometimes 2-3 areas, but few developers that I know (with or without a degree) would claim to be an expert in more than a few areas. A mechanical engineer in whatever field will generally need some understanding of fluid dynamics, chemistry, and so on. A desktop designer doesn't necessarily need any experience with HTML, Javascript, Flash, SOAP, AJAX and all the other technologies that are web-focussed. Most developers will not need to have knowledge of device development. Most developers do not need knowledge of complex AI development or 3D engine development. It's hard enough to find a developer who has a sufficient breadth and depth of knowledge in a particular field, let alone one with a similar understanding of several fields. Some open source luminaries are of course exceptions...

    171. Re:software engineering != computer science by JavaRob · · Score: 1

      You know, everyone is always bad-mouthing Javascript, but [...]
      Please, bad mouth the interpreters, which have mostly been junk (especially Microsoft's, which is abysmal), but not the language itself. Oh, I'm badmouthing the interpreters all right, though the language features you're mentioning weren't in there yet either -- this was the mid-nineties, remember.

      That should be another rule controlling language choice for students -- please, please don't choose a language whose implementation is so raw that your students will spend more time learning how to get around specific bugs (useless information the next year...) than they will actually learning how to use the language features.
    172. Re:software engineering != computer science by hackstraw · · Score: 1

      A more thoughtful C string API would have averted mistakes on the magnitude of chambering bad ammunition, without encumbering the pointy end in the slightest, or failing to endanger the programmer's foot.

      I would have expanded that to a more thoughtful C array API. Technically, strings don't exist in C, they are just arrays of characters that may or may not have a null character at the "end".

      Libraries like glib (and others) have do have pretty good string and array data types, but the standard C library is pretty lacking there.

    173. Re:software engineering != computer science by hackstraw · · Score: 1

      unfortunately he doesn't go far enough into the core of the problem, which is today's universities are mass producing what employers want, rather then the thinkers of tomorrow.

      I think that the latter is primarily reserved for degrees beyond the basic 4 year ones. And there is more demand for mass produced junk than there is for bright forward thinkers that think of things that cannot even be made into production for decades to come.

    174. Re:software engineering != computer science by Stooshie · · Score: 1

      U.S. Gallons according to google. and GBP->USD on google as well.

      --
      America, Home of the Brave. ... .and the Squaw.
    175. Re:software engineering != computer science by zoips · · Score: 1

      All of those language features have existed since the first version of Javascript.

    176. Re:software engineering != computer science by monaco66 · · Score: 1

      I think the authors are looking at one kind of software development and proclaiming that it's the only one that matters. Full disclosure: I did study comp-sci, but I don't have a comp-sci degree. I did, however, have a mom that was a human resources manager an embedded systems company through a formative part of my childhood. Many of the engineers who worked with her were my friends. I learned a lot from them. But I did not grind my way through all of Knuth's work before I started coding. Certainly not before I began to make a living at it.

      There are many people for who building valuable systems, even beautiful ones, will never need the kind of knowledge you proclaim "matters". The most interesting program I've seen was written by someone who knew about another field of knowledge very deeply and by the force of his intellectual will he coded something that worked well for him that I would likely have taken much longer to do, even though I can code circles around him. Knowledge about something other than programming can -- and often does -- matter more than knowledge about Computer Science or even software does. If we all waited until we knew enough to know what we were doing, we would never do very much.

      As far as Java is concerned, the idea of Java is very important: that your investment in software need not necessarily fall victim to Moore's law in that your hardware can move forward while your code doesn't need to know the difference. Many languages have tried to solve the problem in different ways, some better than others. Java is the only language that seemed to take it seriously to the level that the binary is actually portable and the abstract CPU can be optimized to perform better than the down-to-machine-code compiled ones with "knowledge" of the native CPU. So now Java routinely out paces other languages (including C!) in real world problems. I, for one, think this is great!

    177. Re:software engineering != computer science by bigstrat2003 · · Score: 1

      I never said I couldn't read C++, just that it gives me a headache. If I put effort into it, I can do it, but I have yet to use a language (well, except INTERCAL) which has messier, more difficult-to-read syntax than C++.

      --
      "16MB (fuck off, MiB fascists)" - The Mighty Buzzard
    178. Re:software engineering != computer science by JavaRob · · Score: 1

      Existed as in being part of the spec, or existed as in being useable across the platforms that "supported" JavaScript?

      It's been long enough now that I don't have a clear memory of the state of these individual features, but I definitely remember being constantly frustrated by the things that JavaScript could supposedly do, but which were impossible to get working across Netscape and IE on the Mac and Windows.

      Point being, at the time it was not a good first language. Banging my head against that wall was useful in a way when I got out of school (since I had a long list of hacks and things to avoid for cross-browser compatibility) but that cost me a huge amount of extra work with no extra gain in my CS knowledge, just a gain in my knowledge of browser bugs.

    179. Re:software engineering != computer science by zoips · · Score: 1

      Existed as in in the spec and in every interpreter. Those are core language features that have existed since the absolute beginning; you can't very well leave them out like you can, say, generators, since those are a Mozilla add-on in 1.6. Not to mention that no one has left them out at any point anyway.

      I think you're confusing DOM level 0 stuff with Javascript anyway. Your mention of browsers pretty much seals it.

    180. Re:software engineering != computer science by sjames · · Score: 1

      I would argue that they intersect rather than programming being a subset.

      For example, CS cares about the theoretical aspects of the algorithm and how it's expressed, but not at all about requirements specification, waterfall vs. pair vs flavor of the day, project timeline, etc. Engineering cares about the design methodology, requirements gathering, project timeline, the practical aspects of the algorithm, and how it's expressed.

      Note that CS cares about the beauty of the expression, engineering cares about the maintainability. Engineering wants to know the best algorithm for the given job, but doesn't much care how that was proven, CS is the opposite. Both care about correctness but for entirely different reasons.

      CS cares about relative efficiency. Engineering cares about absolute speed atleast until 'good enough' is reached.

      Some of the criteria for good code are shared between the disciplines, others mutually exclusive.

    181. Re:software engineering != computer science by Raenex · · Score: 1

      Paragraphs.

    182. Re:software engineering != computer science by sjames · · Score: 1

      Once a precondition has been checked once (on entry to whatever subsystem we're talking about) there is no need to re-check it all the time.

      It's a matter of semantics. If you can prove that all preconditions are necessarily met for an operation then you have, in fact, checked it. Of course, hacking at it and testing for conditions that can't happen (which is what I assume you're talking about) is just as bad as you say. It's also a sign of not really understanding the code in the first place.

    183. Re:software engineering != computer science by JavaRob · · Score: 1

      Existed as in in the spec and in every interpreter. Those are core language features that have existed since the absolute beginning; you can't very well leave them out like you can, say, generators, since those are a Mozilla add-on in 1.6. Not to mention that no one has left them out at any point anyway.

      I think you're confusing DOM level 0 stuff with Javascript anyway. Your mention of browsers pretty much seals it. I'm not "confusing" language features with support for various DOM objects and the built-in functions -- I'm saying we certainly didn't learn about or use any of them at the time. That's NOT saying they weren't there -- it just looks like we spent so much time fighting the browser implementation bugs and DOM incompatibilities that we never got to them. Personally, I assumed the functions-as-objects, closures, etc. were added a few years later, because that's when I first saw them.

      Hence my point, again, that it was not a good first language at the time.
    184. Re:software engineering != computer science by JavaRob · · Score: 1

      Here's an illustration, from 1999 (4-5 years after we were using JavaScript in class...):
            http://www.webdevelopersjournal.com/articles/javascript_limitations.html

      That covers some DOM support, but also some basic language stuff -- events, math, objects like function, arguments, array, string... basic stuff that still was wide broken. No mention of exception handling... that's another thing I don't know about support at the time, because we sure weren't using it.

    185. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      "The C language deserves a great deal of shame in this matter of giving many beginning programmers the false impression that any function call should dispense with formal preconditions."

      Bollocks. You might as well accuse machine code too because it too dispenses with the diaper. It's obvious for all your self-proclaimed erudition you never had a clue what C was all about. How unfortunate for you - and especially for your shortchanged employers.

    186. Re:software engineering != computer science by sjames · · Score: 1

      Makefiles had to be explained several times.

      That's a real shame for several reasons. From the acedemic standpoint, make is a perfect example of a fairly simple (and limited) AI system with goal seeking behaviour complete with an understanding of chronology. It's also a fine example of the old AI lament that as soon as something actually works, it's no longer thought of as AI.

      It's also a shame since I have yet to meet an IDE as powerful and flexible as the commandline tools and a decent editor (vi or emacs, take your pick, no holy wars please!). A well crafted Makefile can automate things no IDE could dream of automating (Just the other day, I wrote a makefile to auto-generate an include file defining a string correlating system call name and number by parsing unistd.h for example. Try that with an IDE and no CLI tools! How in the world does one set up a nightly build and regression test with an IDE?

      As for re-inventing the wheel, that's part of the learning process! If that's to be thrown out, the students should skip hello_world and go directly to something unique like a 4-D CAD with raytracing. Naturally the next semester, that will then be re-inventing the wheel so they'll have to do something else.

    187. Re:software engineering != computer science by sjames · · Score: 1

      I fault the professors screaming the loudest about this problem. It's theirs to fix, not programming language designers.

      Nobody's blaming the language designers (NOTE, a few of the professors who are complaining have already designed one or more languages). They're not saying java is a bad language. They're not saying nobody should ever learn java.

      They're saying that Java may not be the best first language and that Java only policies are certainly a problem. They're saying that a university CS program is NOT vocational training and should not be approached as if it were.

    188. Re:software engineering != computer science by Anonymous Coward · · Score: 0

      Depending on the context, superfluous consistency checks is a sign of poor quality code, and unjustified concern a sign that you have your priorities mixed up. At some point you have to be assured that the conditions are already met, or your application is already fubar'd. That's why most standard library routines don't do consistency checks (like check if dst == src in a strcpy() implementation). If the condition proved false, then what? As if the user would make use of any meaningful error return, having already fscked up the simple task of providing sane inputs.

      This is not a context where "defense in depth" provides any meaningful benefit beyond some non-sensical peace of mind for somebody who has a loose grip on the issues and problems in that domain of application.

      Its not laziness. Quite the contrary, its the logical end to a deliberate and careful examination.
      Same thing with arithmetic overflows. Soon you'll see code checking for overflows every 3rd line. All that proves is they have a poor understanding of their code program flow. Not that they should have a perfect understanding. But there are bounds within which one can and should be reasonably assured of consistent state after some point and before another point (i.e. points of external input, etc).

    189. Re:software engineering != computer science by trogdor8667 · · Score: 1

      My university does teach a Java course as the intro course for any CS concentration. You take it (programming or Java 101, you could say), and then it goes on to what equates to Java 102, where you learn about data structures, and linked lists, and all of the other fun things that programmers should know. But, to be honest, we did not learn much if anything really about pointers. However, the THIRD course you take is a C++ course. You learn about pointers, software engineering principles, and the list goes on. The next semester, you take Intel assembly. So, at the very least, our department sounds like it is doing a bit better with teaching some of these concepts than others are.

      However, on the parent's comment on arguing with the TA, I remember when I took the second Java course, our TA was a grad student who hadn't touched Java in 5 or more years himself... it was also the semester our University upgraded to 1.5, and a good number of the functions we learned were depracated. I remember having to argue with him for an hour that BufferedReader and Scanner did both accept input from the keyboard, and that I had not, in fact, made up the scanner method. All kinds of fun.

    190. Re:software engineering != computer science by kyb · · Score: 1

      Seems like whatever the current favourite language for teaching is always gets this kind of flak. I remember when it was "BASIC considered harmful", then a little bit later "Oh Noes! Pascal is damaging our children".

      I assume that this argument has so much support here because of our natural sense of superiority. It is however a complete load of rubbish.

      Programming is the art of abstraction. Software engineering is the art of compromise between functionality and elegance.

      Neither of them are about memorizing sort algorithms or knowing the details of how a processor or a specific language work. These are the things you can look up.

      Critizing the use of libraries is also crazy. Learning to use libraries well and not reinvent the wheel is one of the single most important thing you can learn as a programmer.

      The whole point of computer science has been to create layers of abstraction and to enable you to work at the one that is appropriate for you. If a level of abstraction has been correctly designed, it is positively NOT required, and can often be harmful (leads to premature optimisation) to know how the one below works.

      Some of the most talented and respected programmers around program in languages like Haskell or Scheme (both of which were the taught languages at my university), and never have to deal with the bizzare way that C likes to reference and dereference pointers. The idea that this is somehow a precondition to 'good programming' is laughable. It's more likely to encourage exceptionally poor programming.

      That you can broaden your horizons and knowledge by mastering many different levels of abstraction, and by learning many different ways of doing things is not in doubt, but the idea that you can dismiss an education because of the language used has been around for too long and it's time it died.

  4. You have to start somewhere... by KillerCow · · Score: 4, Interesting

    Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.


    Yeah, I just read a press release from the FAA blasting driver training courses. Apparently, flight students who just got their drivers licenses were not able to navigate in the air, execute banks, take-off, or land properly.

    Students have to start somewhere. It's easier to start with simple stuff than to try to cram their heads full of everything all at once.
    1. Re:You have to start somewhere... by TeknoDragon · · Score: 1

      Java is neither the simplest programming language nor more valuable to an education than straight C.

      Also, I'm a Java professional.

    2. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      Provided the simple stuff carries over in a straight forward manner. Unlearning is harder than learning.

    3. Re:You have to start somewhere... by noamsml · · Score: 1

      My suggestion: start off with Python/Ruby, move on to C and, when you mastered it, add some C++ in.

    4. Re:You have to start somewhere... by vux984 · · Score: 4, Interesting

      C is a lousy beginners language.

      I started programming in Pascal, and then moved to C/C++. Structured programming, language syntax, variable typing, functions, parameters, recursion, etc I could ALL learn in Pascal.

      When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

      Also you can easily write command line apps in java, so i don't know why they blamed gui dependancy on java.

      And as for 'systems programming' well DUH. Your first language is where you learn the basics of programming, before you start taking systems programming you should also have a lower level course ideally in something like assembly language (even if its just on emulated hardware) or C.

    5. Re:You have to start somewhere... by superash · · Score: 1

      I would suggest C -> C++ -> Python -> Ruby.... in that order.

    6. Re:You have to start somewhere... by jandersen · · Score: 4, Insightful

      Don't be silly. Flying an aircraft requires a whole new set of skills, that are outside the normal experience of most people. Driving is not just flying with a number of 'security enhancements', whereas programming in Java is like programming in C, but without the need to learn about pointers or good programming discipline. So if C is like a manual car, Java is an automatic.

      It is reasonable to expect that a CS student has both the ability and the interest it takes to learn all the details of programming well in C.

    7. Re:You have to start somewhere... by doktor-hladnjak · · Score: 2, Insightful

      It really depends what you're trying to teach when. A few years ago I taught a data structures course (second out of a three course lower division sequence) in Java and thought it worked fairly well. About a year before that, I was a teaching assistant for a data structures class taught in C++.

      Language choice affected the content of both courses quite a bit. In the Java course, students spent more time understanding how specific data structures worked and working on more interesting programming assignments. Students got to a working knowledge of Java fairly quickly after having only a semester of Scheme under their belt. In the C++ course (which followed a semester taught in ML), the students as a whole spent a lot more time learning about memory management along with the ins and outs of C++. Instruction on data structures was much more limited. Both sets of skills are valuable for practicing engineers, but I think it's fair to say that both the staff (myself and the teaching assistants) and the students enjoyed the class taught in Java more than the class taught in C++, probably because the interesting parts of such a class have to do with efficient data structures more than fighting with pointers and copy constructors.

      Following the Java course, those students normally took an introductory hardware class. That course was taught in both assembly language, C and Verilog where learning pointers fit in better with the other material. Following the C++ course, I don't think those students saw much more C or C++ programming for a while (possibly not until upper division topic-specific course work) and instead went off to complete 4 more semesters of more theoretical Computer Science.

    8. Re:You have to start somewhere... by Osty · · Score: 4, Interesting

      When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

      Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own. That was one of the main arguments against Java in the paper, and it was a problem even a decade ago when my school was transitioning beginners classes to Java (I was ahead of the change by a semester or two in each class, so I got to start from Scheme, learn data structures in C++, learn AI in Lisp, etc). Yes, in the "real world" you don't want everybody reimplimenting their own linked list or hashtable. However a beginner must learn the concepts behind those data structures in order to advance, and Java just makes it too easy to use the standard set of classes.

      That's not to say that Java is all bad. With a good teacher and a good curriculum, it's absolutely possible to teach core concepts in Java (or any language, really). You have to be merciless about banning standard library usage such as collections, and teach your students the theory behind those data structures. People understand theory best when they can actually see it in practice, so you have to have your students implement their own linked lists, doubly linked lists, trees, etc. With Java it's an uphill battle getting people to ignore the standard libraries for "academic" purposes, but it's possible to do.

      Personally, I'm thankful that my first real programming language (not counting BASIC in its various forms) was Scheme, and that I was exposed to a number of languages through my college career (the afore-mentioned Scheme, C/C++, and Lisp, as well as ML, Java, and MIPS assembly) even though my current day job consists of C# and SQL. Because of my background, I can easily pick up pretty much any language (and have done so several times), which gives me an advantage over those "programmers" churned out of today's Java-mill universities.

    9. Re:You have to start somewhere... by pegdhcp · · Score: 1
      Being easier to start with, does not mean it is good to do so.

      As a programmer, I believe that (without religious undertones) any decent programming language is as good as any other decent language, provided that you do not need something very obscure. However, there is no guarantee that, in RL(tm) you will have access to easier to live conditions. If students learn only easier tools, GUI embedded compilers -that links each and every library automatically- and 4GL look-a-like's and such, they will find themselves in deep shit when start working. I have programmers who cannot port a program's SQL portions from MSSQL to PostgreSQL, because our local schools here in Turkey are teaching only Pascal as introduction and then VB based scripting languages. Thay do not learn Assembler, C, COBOL, FORTRAN etc. If you have a, deeply buried in time, COBOL file and only a C compiler available, should this be a problem? No, but lots of programmers around me will just fill in their pants with the most recent meal they had, when facing such problems...

      Students have things those are not very available in later stages of life, a fresh brain with lots of learning capacity, and some really free time. They should spent this time in preparation for the difficulties waiting them, which means learning Assembler, C, Ada, LISP and FORTRAN even if they would not need to see a single line of it after graduation. Because such languages are foundations of computer programming art.

      If we can go back to the original post, Java is an important language, albeit I do not like and/or use it. However it is not one of the basic languages. On the other hand, I believe students must take some courses teaching languages like Java, but only after learning languages of historical importance.

      As a final note; My school is very well known in our Country, even accepted best in certain circles, and I cannot find one acceptable candidate from there to fill my vacancies, just because they stopped teaching "difficult" languages.

    10. Re:You have to start somewhere... by Rakshasa+Taisab · · Score: 1

      Java might be a good starter language... But he's writing about languages taught at introductory Computer Science classes.

      The first is something you learn when you're a kid and want the computer to do cool stuff. When you want to become a real programmer, or a computer scientist, you don't do 'good starter languages' no more than you do 'good starter math'. Learning calculus sucks.

      --
      - These characters were randomly selected.
    11. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      If your a professor teaching ML please warn your students ahead of time not to put it on their resume or QFE or any other such nonsense they will most assuredly never use in the real world.

    12. Re:You have to start somewhere... by goose-incarnated · · Score: 2, Informative

      C is a lousy beginners language.

      That depends on what you are trying to teach.

      I started programming in Pascal, and then moved to C/C++. Structured programming, language syntax, variable typing, functions, parameters, recursion, etc I could ALL learn in Pascal.

      Once again, depends on what you are trying to teach/learn. Pascal (which I like, btw) teaches different things than one would learn in C. In pascal you are learning a programming language; very often in C you are using it for a specific platform/architecture, and hence get to use and understand things like signals, volatile variables, memory-mapped IO, etc ...

      When I came through Java was still pretty new, but I did take a java course, and found it reminded me a more of Pascal than C/C++; I'd say its a good starter language.

      For what, exactly? Java (and C#, etc) bring nothing new to the party; everything they offer has already been offered (sometimes decades ago) by different programming languages. The only reason to use them is peer-pressure, in which case the only place to teach them is in vocational colleges, not universities.

      Also you can easily write command line apps in java, so i don't know why they blamed gui dependancy on java. And as for 'systems programming' well DUH. Your first language is where you learn the basics of programming, before you start taking systems programming you should also have a lower level course ideally in something like assembly language (even if its just on emulated hardware) or C. Like I said above, it all depends on what you are trying to teach; for example, it is possible to teach OO using plain old C, but it is rather painful! In much the same way, the only time you would want to use Java is when your problem maps nicely to an OO architecture (and most problems do not!).

      --
      I'm a minority race. Save your vitriol for white people.
    13. Re:You have to start somewhere... by AuMatar · · Score: 4, Interesting

      C->C++->assembly (any ISA)->some functional language->some other language (Java, python, ruby, etc).

      Assembly is necessary, to understand how a computer really works. Functional languages are good, just to know a completely different style. Some other language for breadth. Then the student can realise that everythin after asm was a waste of time, and return to C.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    14. Re:You have to start somewhere... by goose-incarnated · · Score: 2, Interesting

      Students have to start somewhere. It's easier to start with simple stuff than to try to cram their heads full of everything all at once.

      Trouble is, Java is not "the simple stuff", Pascal is "the simple stuff". Java has inconsistent syntax, has only one model for all programs (OO), etc. It all depends on what you are trying to teach, and if you are trying to teach:
      1. Computer architecture, OS designs, Hardware, etc
      then use C (or a subset of C++).

      2. Computer Science, theory of automata, TM's, state-machines, etc
      then use Scheme.

      3. Programming, data-structures, algorithms, etc
      then use Pascal.

      4. Java, C++, $LANGUAGE_OF_CHOICE
      then use Java, C++, $LANGUAGE_OF_CHOICE

      There is no place for Java in tuition unless it is taught as a vocational skill. Universities never were about teaching vocational skills.
      --
      I'm a minority race. Save your vitriol for white people.
    15. Re:You have to start somewhere... by prefect42 · · Score: 1

      Helped by the fact that pascal was designed as a teaching language. The thing that annoys me with teaching Java as a first language is that you have to start with teaching classes first (yuk), or by simply saying "all this public class stuff at the top you can just ignore for now". But if you teach it properly then you can work with Java as a first language. I don't think it's the right choice, but it's not the end of the world.

      It's not like teaching kids C makes them understand low level issues better...

      --

      jh

    16. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      I cound not agree Pascal is a good beginner language. In fact I could not agree Pascal is a good language at all.

      I've started learning programing on 8bit Apple II clones, with Basic, than moved to 16 bit intels with Pascal, then object Pascal, than C, ASM, C++, and then a little Java. I also practice every day tcl and Perl.

      What I consider best after this is:
      Start with Basic (but not VB), move to Perl, then eiter move to C or lean some scripting. Forget about Pascal and Java completely. They are menace.

    17. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      > C is a lousy beginners language.

      Not true! I learnt C as my first language, as it gave me a great understanding of what really happens under the covers when my code actually runs. Pointers, raw-arrays, references and the like - it was great!

      The next language I learnt was Java, where they taught us object orientation. Mostly, I found it really frustrating not being able to directly access things as I had become accustomed to; it was only once I'd learnt the Java mind-set that I could be comfortable. (Then I moved on C++ and I was a happy kid again.)

      Currently my favourite language now is Python, but I have a far greater understanding of how things run because of my initial grounding. I'm convinced that your first language profoundly affects your future take on how you think when you write programs, which is why languages like Visual Basic and PHP can be rather damaging when people don't learn how they fit into things.

    18. Re:You have to start somewhere... by shtarker · · Score: 2, Interesting

      And as for 'systems programming' well DUH. Your first language is where you learn the basics of programming, before you start taking systems programming you should also have a lower level course ideally in something like assembly language (even if its just on emulated hardware) or C. You'd think that wouldn't you? But then I took a course in "Operating Systems Internals" which turned out to be entirely in Java. To this very day I'm still asking my self why...
    19. Re:You have to start somewhere... by xoclipse · · Score: 1

      You definitely need to start somewhere. I think Java abstracts a lot of the more complicated aspects of programming such as memory management and allows students to start by understanding the logical nature of programming.

      I do think though by isolating yourself to Java and not receiving exposure to other languages, you extremely limit your programming ability.

      Java students might use three arrays to do something when a C/C++ student does the same with one array, and uses less memory. Why does this happen? Because in C YOU interact with memory. By interacting directly with the memory you begin to understand how allocation and freeing works. In learning the latter, it expands your mind and causes you to program with memory management in mind, albeit many times subconsciously.

      In Java you just don't need to know about memory management, at least the nitty gritty(malloc()/free()). You can create as many objects as you want and can assume and hope that the garbage collector picks it up, eventually. In Java your concern is writing software that does what you want it to, not really having to worry about all the little things that add up to get it there. This is a good thing, for the most part. Focus on the goal of the software and not with the little BS details that you might encounter in C(who loves pointers?).

      Unfortunately, in writing production software, it sometimes needs to do more than just work. I can name hundreds of Java applications I've used that work fine and get the job done, but usually the application is slow and the responsiveness is crap. That's the sacrifice of having a virtual machine and managed languages. Giving up memory management means giving up the performance gains that good memory management can obtain.

      Personally, there is plenty of software that I use that is Java but I would definitely say that if it was written in a different language like C++ I would probably *enjoy* using the software more.

      Example: My Tivo is awesome, but its all in Java and FUCK its slow. You think it should take 5 minutes to boot the Tivo, because it shouldn't. Is my Tivo just really underpowered? I don't think so. Tivo just decided that they would rather focus on designing a good DVR than to focus on the little things: memory management, designing their own OS, etc,. Java just got them from Point A to Point B faster.

    20. Re:You have to start somewhere... by brezel · · Score: 1

      Also you can easily write command line apps in java, so i don't know why they blamed gui dependancy on java. i agree. i have been programming in java for the last 6 years in my company and have so far not written any gui code. i like java as a server-side language.
      to TFA; i think it's quite easy to blame the mass of bad programmers on a language but the more correct approach would be to look at companies' policies on employment and companies like microsoft (not only, no bashing intended) who keep telling the world that computers are easy to use.
    21. Re:You have to start somewhere... by KDR_11k · · Score: 2, Interesting

      I was at a university that teaches Haskell as the first language. Why? Because someone who has never programmed before doesn't know concepts like variables as they are used in imperative languages but they sure as hell have seen them the way they are used in math. We've used Haskell to learn the basics like recursion, data structures, verification, etc. Only after that did Java get introduced.

      --
      Justice is the sheep getting arrested while an impartial judge declares the vote void.
    22. Re:You have to start somewhere... by tieTYT · · Score: 1

      programming in Java is like programming in C, but without the need to learn about pointers or good programming discipline.
      It may not be necessary to learn about pointers, but avoiding good programming discipline? Give me a break. I've seen some nutty shit written in Java. It doesn't magically make your code pristine. I'm sure if you're a bad programmer, your code will look bad regardless of what language you use. And it works both ways: If you're a good programmer, your code will look good in any language. And BTW, since when is providing more ways for you to shoot yourself in the foot a good quality for a programming language?

      Back to pointers. Code Complete will tell you that in languages that deal directly with pointers, 70-80% of bugs are caused by them. Now, while I totally agree that CS grads should be able to grok pointers, they should be avoided in production code if it's feasible. Disagree with me all you want, I'll choose 70-80% less bugs every time. Feel free to call me a lazy programmer. All the good ones take that as a compliment.

    23. Re:You have to start somewhere... by msuarezalvarez · · Score: 1

      Basic?!

    24. Re:You have to start somewhere... by Simon+Brooke · · Score: 5, Insightful

      C->C++->assembly (any ISA)->some functional language->some other language (Java, python, ruby, etc).

      Assembly is necessary, to understand how a computer really works. Functional languages are good, just to know a completely different style. Some other language for breadth. Then the student can realise that everythin after asm was a waste of time, and return to C.

      This is kind-of bollocks.

      When I was a young programmer - which is about twenty-five years ago - the team I was on got a new ink-jet printer. It printed its own character set, we needed it to print bitmaps. The processor it used was one none of us had ever worked with before. One of the older members of the team - a guy called Chris Burton - took the spec sheet for the processor and the spec sheet for the printer home with him on the train, and came back the next day with the code for the new printer driver written in long hand, not in assembler mnemonics but in actual op-codes, in pencil on a pad of paper. It was burned on an EEPROM that day and drove the printers until that model became obsolete five years later - there were no bugs, it never needed fixing.

      It should be said in passing that Chris had worked in his youth on the Manchester Mark One, and after he retired was part of the team that rebuilt Baby and got it running again.

      I've always thought that was epic programming, a standard I'll never reach. But it's one particular layer on the stack. My job on that team was writing inference engines, and Chris was always really impressed by that. It's nearly thirty years since I touched any assembler and fifteen since I wrote anything serious in C. A modern computer system is way too complex for any single person to really understand, in depth, all the layers. I take what the silicon designers do as given, and likewise the microcode programmers. Right back in the early days of Linux I did fix issues in kernel code a couple of times but I wouldn't even try these days - the guys who do that are much more expert at it than I am. Likewise, I don't expect them to understand the compiler compilers that I write. It's a different layer on the stack.

      I agree that you need to have a rough idea about how the whole stack works. But we no longer expect all computer science students to be able to wire up NAND gates from discrete valves or transistors. And although a computer scientist needs to know that there are primitive logic operations carried out on the metal, and that on top of that there are a stack of different software layers with real machine code on the bottom and a whole slew of intermediate code representations above that, I don't believe that it is any longer necessary for all students to be able to write a serious program in assembler.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    25. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      My suggestion: start off with Python/Ruby, move on to C and, when you mastered it, add some C++ in.

      No. If you want both C and C++, you should start with C++. Why? Because C++ can be either a fully object oriented language, or C with classes. Starting out by learning C++ as an object oriented language will show C++ as a great language (better than Java, even, for most of the same things (excluding portable UIs, since it has no standard UI library)). Building on top of C, however, will give you C with classes. People are never going to learn all the nice things about std::string, when they can just strcpy(a,b+c/d);

      Also, C++ has references (that is C++ style references, not the Java-style "pointers are bad, so we'll just rename them"). References do not require a lot of thought, but enables you to do ignore pointers until you have a good understanding of most of the language. A good C++ book should not mention pointers until chapter 14 (with polymorphy in chapter 15 or 16), where as a C book will have pointers in chapter 2, as will a Java book (although they will still be called references).

      For the Java-folks around here, who didn't get the pointer vs reference thing above (it's ok, I know you've been taught that pointers=bad, references=good):

      The main differences between a pointer and a (C++) reference:

      1. References always point to a valid object. Pointers can point to NULL, which will give an error.

      2. Pointers will usually be allocated through the "new" keyword, references never are.

      3. Writing x=y will change x to point to the same object as y points to, if x and y are pointers. If they are references, it will copy the value.

      Note how Java "references" have the same characteristics as C++ pointers.

    26. Re:You have to start somewhere... by skrolle2 · · Score: 1

      Just because you found your comfort-zone at the level C is at, doesn't mean that everyone will be comfortable there, or will achieve maximum productivity.

      A higher-level programming language will always be higher in productivity, i.e. it's faster to write code in it, given that the language is capable of solving the task at hand. This means that for the absolute majority of programming jobs out there, Java or equivalent is the best tool for the job. I'm so tired of old farts like you who do not understand this and always whine about THEIR comfort-zone and absolutely cannot realize why other programmers are comfortable elsewhere.

      If you program in assembler, you are one step above the hardware, and you have to trust others to have done their job properly, you have to trust the hardware designers.

      If you program in C, you take one more step up. You gain in productivity by getting data types and a syntax that makes it easier to follow what a program does, but you have to trust that the compiler writers did their job properly. You obviously have no problem doing this, since you advocate C.

      If you program in C++, you take one more step up. You gain in productivity by getting encapsulation and object orientation, but you have to trust that the compiler writers did their job properly. You seem to have no problem doing this.

      If you program in Java or C#, you take one more step up. You gain in productivity by getting memory management and class libraries, but you have to trust that the compiler writers and VM writers did their job properly. This you seem unable to do.

      As programming advances, we will have higher and higher levels of programming languages, that rely on bigger and bigger foundations, but are faster to program in, that give people a higher productivity by removing boring/unnecessary/tedious tasks to the foundation.

      A good CS program will teach its students the entire height of languages, you should learn to do something at every level of programming. But advocating that the best language would somehow always be in the middle of that stack is pretty stupid.

      Then again, in 10 years time we will have old Java farts whining about whatever languages and paradigms have appeared above it, and they will argue that you should learn a bit of everything, but that all languages after Java is a waste of time...

    27. Re:You have to start somewhere... by splashbot · · Score: 1

      I Started with C, went to ASM, and now waiting to do java, but i like C alot

    28. Re:You have to start somewhere... by mwvdlee · · Score: 2, Insightful

      I agree with much of what you write but think assembler should still be covered atleast to the point of students being able to create tutorial programs.

      My day job is as a mainframe (z/OS) programmer in a number of languages and whenever a program has a non-obvious bug, it still comes in damn handy when you can read what is actually happening underneath.

      I'm not talking about training them upto the level of building systems in assembler, but they should be able to take hex values, processor specs and an assembler guide and translate what's going on.

      Assembler teaching you what a processor does, just like students should know how it's possible for a processor to be costructed out of NAND gates. They needn't be able to create their own processors, just understand why it actually works.

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    29. Re:You have to start somewhere... by Registered+Coward+v2 · · Score: 1

      Yeah, I just read a press release from the FAA blasting driver training courses. Apparently, flight students who just got their drivers licenses were not able to navigate in the air, execute banks, take-off, or land properly.

      Your analogy is valid, but not for the reason you intended. The issue is what is the best way to train a person to develop a desired skill set. To use your example, if flight schools required drivers licenses as a prereq to strating flight training then they are doing exaactly what the profs are complaining about - starting people at the wrong point. Despite having completed the prescribed course (getting a d/l) the student is no more ready to learn to fly than tehy were before they learned to drive.

      Students have to start somewhere. It's easier to start with simple stuff than to try to cram their heads full of everything all at once.

      Yers, and you do that by providing fundemental knowledge that can be applied to various situations by developing an understanding of what is happening and why things act in certain ways in given conditions. that's why engineers learn physics, statics, dynamics and simple math like calculus before they learn thermo, aero/hydro dynamics / structures / etc. - they have developed a set of rules thay can broadly apply and then learn more specific and detailed applications.

      Early training is about developing a structured apporach to think and problem solving; so you can tackle more complex problems in a systematic and rigourous manner.

      That's why student pilots first learn basic areo, flight physiology, and navigation techniques - to prepare them for when the step into a real airplane.

      It's also why I often ask questions such as "How many dogs are there in NYC?"; "If you were in ancient Greece and just invented teh telescope, how would you determine the price?"; or "What is the weight of this building?" - I want to see if the person can think and how they approach problem solving; and really don't care what answer they get.

      --
      I'm a consultant - I convert gibberish into cash-flow.
    30. Re:You have to start somewhere... by Anonymous Coward · · Score: 0
      IMHO, first programming language should be ditched early in education, right after simplest of examples and revisited only as tool for quick-and-dirty trials and proofs of concepts. That language should be easy and shield the student from reality, but students should not stick to it for good. In life, as well as in computer professional's carrier, or preferably, education, the time comes to grow up and face reality, with all of its perils and beauty.

      For real insight, both in how-it-works and in historical reasons for evolution path programming languages took, for real appreciation for new capabilities introduced at each step, the very next should be the very bottom, boot camp style: some assembly language (or even machine opcodes before it, to illustrate the power of such simple tools like symbolic constants and macros, present in assembly language and above), linkers, modules, libraries, then introduce C as an answer to assembly language programmers' prayers, then C++ as an answer to (some) C programmers' prayers, then Java, which could had been the first programming language as well. Each step should be illustrated by typical example problem(s) which gets simplified by using next programming language novel capabilities.

      Then the student can realise that everythin after asm was a waste of time, and return to C.

      Waste of time? None can tell without trying it out. Sometimes it pays to invest a little time to learn something that then often saves you more time afterwards. However, before you hit the wall, before you wish "if only I could do ...", you can't understand why there is so much excitement about certain programming languages (such as C++, Java, C# ...). Vice versa, none should be thought things one doesn't see a need for. Students should advance when ready, not earlier.

      To conclude, Java (or whichever programing language) is not harmful to students. Not letting students grow up and gain insight into computing is harmful to students.
    31. Re:You have to start somewhere... by ByOhTek · · Score: 1

      The first language shouldn't necessarily be the easiest.

      Different languages promote different mindsets. I don't think C is a bad start, I don't think Python is a bad start, hell, I don't think assembler is a bad start (though it probably isn't a good one either).

      Really though, people need to see a variety of languages.

      One Low level (assembler, Sparc was nice even though I'll never use it again)
      One "mid" level (C/C++ are good, but there are many options)
      One High level (Python, Ruby, Perl, Java etc. Yes I know Java is more virtual machine than scripting, but it has a lot of similar ease-of-use features as the others)
      One Functional (Lisp, Scheme)
      One Procedural (C/C++/Python/Ruby/Perl/Java)
      One Obect Oriented (C++/Python/Ruby/Perl/Java)

      Once you are familiar with those. (that can be done in four classes, while also teaching other things), your programming training is done. After that, everything should be in the theoretical department, because you should be fairly familiar with the languages to apply them to the theory, given a good reference manual for the language.

      Hell, most people I know who have learned more than two procedural languages have been able to pick up just about any new procedural language after the second in under a week with a decent reference manual or online guide - the concepts and theories are similar, the syntax just varies a bit.

      --
      Self proclaimed typo king, and inventor of the bear destroying coffee table (patent not pending).
    32. Re:You have to start somewhere... by Tridus · · Score: 1

      That's not to say that Java is all bad. With a good teacher and a good curriculum, it's absolutely possible to teach core concepts in Java (or any language, really). You have to be merciless about banning standard library usage such as collections, and teach your students the theory behind those data structures. People understand theory best when they can actually see it in practice, so you have to have your students implement their own linked lists, doubly linked lists, trees, etc. With Java it's an uphill battle getting people to ignore the standard libraries for "academic" purposes, but it's possible to do. They did this when I was learning. The early courses were in Java, but most of the standard classes were off limits. So if you wanted to use a Linked List, you had to build one. While I thought it was a major PITA at the time, it was probably for the best. At least now I have some idea about what the thing actually does when I use it.
      --
      -- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
    33. Re:You have to start somewhere... by david_thornley · · Score: 3, Insightful

      Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own.

      Which is exactly what we want people to do when they're off doing real work. One problem with teaching languages without such libraries is that people get used to writing their own rather than looking for pre-packaged.

      There's no problem with basic data structures and algorithms in Java. You declare that certain libraries are off-limits for an assignment, and give a zero score to anybody who violates that. The ones that actually belong in the field will catch on real quick.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    34. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      Do as we did: learn about hashtables/linked lists etc., implement them in Java and hand in, get your code approved and now you know how they work.
      Next time in class: Now that we know this, use HashMap/Set, since it's already implemented in Java and now you know the basics behind it. Want to know more? The source is available, go read it (IIRC, one or two of our assignments required that we read the Java source and explained a few things).

    35. Re:You have to start somewhere... by Jesus_666 · · Score: 1

      My university's CS department is rather Java-centric. Our first programming courses were all about Java - however, we mostly implemented stuff that already was in the class library. And no, we weren't allowed to write simple wrappers, at least not if we wanted a decent score. Oh, and we never did GUI programming.

      Later mandatory languages are C++, Haskell and Prolog. No scripting languages, though having one would've been nice.

      There is a problem with having Java as the main language, though: People tend to fall back to Java when doing projects as that's the one language most people can actually work in. I can see the downsides in my current (mandatory two-year) project: Because only half of the group is comfortable with C++ we wrote our text mining software in Java and now that we're ready to throw multi-gigabyte corpora at the thing performance starts to become a real issue.


      In the end I think that Java is usable as a learning language, but after the initial learning steps the focus should be shifted elsewhere (e.g. C++) entirely so people can comfortably work in more than just Java.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    36. Re:You have to start somewhere... by fireboy1919 · · Score: 1

      Assembly is necessary, to understand how a computer really works.

      Microcode is necessary to understand how a computer sends its bits around, and a gate design class is necessary to understand how a basic computer functions. Assembly really only lets you know how a computer is operated at the lowest level of abstraction, not how it works.

      How about hardware description languages? I'd through those ahead of functional ones if you're trying to get a breadth of knowledge. They're more different from everything else than functional languages are (if you're actually writing and running the code on hardware).

      Then the student can realise that everythin after asm was a waste of time, and return to C.

      Perhaps you should go play with microcode, read more about how transistors work and try a hardware description language. Then maybe you'd know how many layers of abstraction are really at work between you and the hardware (and that those layers are each consuming tons of resources of their own, but making it *much* faster to write code) and you wouldn't feel so bad about moving a few more rungs up the abstraction ladder for a lot of the time.

      --
      Mod me down and I will become more powerful than you can possibly imagine!
    37. Re:You have to start somewhere... by kuruptacus · · Score: 0

      That is the single most rational and reasonable thing I think I've ever read on /.
      Bravo.

      --
      Shop as usual. Avoid panic buying.
    38. Re:You have to start somewhere... by R2.0 · · Score: 1

      "So if C is like a manual car, Java is an automatic."

      The problem is, to extend the analogy, is that most never get PAST the automatic to learn stick.

      My wife made it to her mid 20's never having driven a stickshift car. When I made her learn to drive a manual, the protests were shrill, until I pointed out that, regardless of the car she drove, *I* was going to continue driving a stickshift. That meant if her car broke down she was a pedestrian, but if mine broke down, I could drive hers without batting an eyelash.

      I see the problem with CS not so much as not offering courses that students are likely to need, but telling students they are perfectly fine NOT having those skills. Here's your degree, you're set, thanks for the tuition, buh-bye.

      --
      "As God is my witness, I thought turkeys could fly." A. Carlson
    39. Re:You have to start somewhere... by Tim+C · · Score: 1

      programming in Java is like programming in C, but without the need to learn about pointers or good programming discipline
      Well that really depends on your definition of "good programming discipline". If you mean "the sort of stuff you need to know not to shoot yourself in the foot in C", then okay. If you mean things like "checking your inputs, not blindly trusting data from unknown/unknowable sources, writing clear maintainable code, writing clear readable documentation, writing and running tests regularly, having separate development and live environments (at least), using source control, and any one of the other tens of things that are required in any non-trivial project" then your choice of language has absolutely no bearing on it.
    40. Re:You have to start somewhere... by autocracy · · Score: 1

      People in America who get their driver's licenses can't shift gears, threshold brake, or control their car at all when they have anything less than four wheels with full traction. All in all, what's the difference?

      --
      SIG: HUP
    41. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own.

      Isn't that the point? Java is being used as an intro language because it has libraries to do 'hard stuff' so Computer Science students can actually build apps that do something more than hello world, and think they accomplished something.

      Really, I think it's part of dumbing down the overall computer science curriculum to increase the diversity of people who actually enroll in CS.

    42. Re:You have to start somewhere... by WeirdJohn · · Score: 1

      Simple stuff? In a language that is neither one thing nor another, I find this comment bizarre. We're talking about a language that pretends to be 'Object Oriented' but includes an Integer and an int, just so that when you look back at your code 6 months later you can try to remember exactly why you had to use ((Integer) anInt).asString instead of Integer(anInt).asString.

      Then we look at the incredible amount of semantic fluff you need to get classes to talk to each other. Come on Folks, this is supposed to be OOP here, why should class A have a clue about the interfaces surfaced by class B? I always thought that OOP meant that the caller didn't have to know Jack Shit about the called class. Perhaps I'm spoilt by Smalltalk, but I completely fail to see how Java makes anything easier. Why do we have to declare that a method and/or class throws exceptions? And even worse, why do we have to declare what exceptions are thrown? Why not just expect that any code could throw any exception, and if we don't handle it eventually something will?

      Don't get me wrong, I think that Gosling did a great ob of writing a language that provides all kinds of neat features (like dynamic hotspot compilers, and the pluggable SecurityManager thing) but I fail to see good reasons why it's students 1st language rather than Pascal (which was designed to teach programming as people's 1st formal language)

      I was talking to a Java programmer the other week and he said "I always find Smalltalk too cryptic". I asked him "Is it the 3 rules of syntax or the 5 reserved words you find difficult?".

    43. Re:You have to start somewhere... by Grundlefleck · · Score: 1

      However a beginner must learn the concepts behind those data structures in order to advance, and Java just makes it too easy to use the standard set of classes. In the CS degree I'm currently doing, in our second year we did have to write things like linked lists, stacks, binary search trees, but we did it in Java. This seems to me (bearing in mind I'm a 3rd year with no industry experience) a good balance; we learned the concepts, but we could write the implementation in a language we had been introduced to in first year. I'd say this was beneficial for us because it allowed us to focus on the data structures, not the mechanics and details of a different language. I've a smidgen of experience writing in C++ and I'd like to think I could make the same data structures in C++ because I've learned the more important stuff regarding them (their abstract model, complexity etc.) - rather than how to code them in [insert language]. I think saying Java is a lousy learning language is a misnomer - it's how some students are being taught to use Java that I think is the problem.

      IMO that's the point of teaching Java, because at times it can be the most suitable language for the purpose. Java is easier to use, so we use it when we're being taught abstract, inter-language concepts, where it's the concepts we should be learning about, not the implementation. When we we're being taught stuff much closer to the nuts-n-bolts of computing, of course we don't use Java, our lecturers opting for instead for something such as C.

      Essentially Java is a tool just like any other tool, if a university course uses it badly that's not the fault of Java.
      --
      I accept I know nothing. Insulting my ignorance is wasted on me.
    44. Re:You have to start somewhere... by Fozzyuw · · Score: 1

      Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own.

      While you make a good point, it's really a non-issue. Any (good) class will have an assignment (for example) to create you own linked list class. Obviously using the standard classes would be a major failure. Lets not talk theoretics of punishing the victim (student/language) instead of the criminal (the poorly designed class). After all, I can just as easily say C/C++ is a poor "beginners" language because it's been around so long, it's too easy to copy/paste a solution than creating your own.

      It's not Java's fault it has a good standard library, it's an instructors fault for not teaching the student the basics of programming and data structures.

      Cheers,
      Fozzy

      --
      "The past was erased, the erasure was forgotten, the lie became truth." ~1984 George Orwell
    45. Re:You have to start somewhere... by LWATCDR · · Score: 1

      "Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own. That was one of the main arguments against Java in the paper,"
      That isn't a problem with the language it is a problem with the teacher.
      How hard is it to say write a linked list, write a hash, or write a btree? Knowing that there are standard libraries is a good thing. If they student wants to use the standard library for the none core functions of the program that is great.
      How hard is it create an assignment?
      I pretty much would say yea your right java isn't the problem it is the teachers.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    46. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      And why did students have a hard time writing programs without graphical interfaces? That statement sounds like a blatant attempt to trash Java by confusing it with VB.

    47. Re:You have to start somewhere... by filterban · · Score: 1

      While you make a good point, it's really a non-issue. Any (good) class will have an assignment (for example) to create you own linked list class.
      If I had mod points, I'd have modded you insightful.

      My girlfriend taught a second-semester CS course last summer (in Java) where the only prerequisite was that the students had taken the first semester course (in Scheme). They constructed all the usual data structures. They were told specifically that they could not use the built-in data structures, or they would fail. It's that simple.

      earlyWhat the heck is the difference if you build a linked list in C++ or in Java, really? The concept (of a linked list) is the same whether it's running in byte code or machine code. Really, the niceties of Java help the student focus on the -concept- at hand.

      I'm not saying that learning about memory allocation and deallocation is bad, however. There is certainly a need for knowing how that works and how to write programs in an environment with no garbage collection.

      My CS courses were in Pascal and C/C++. I really don't think it gave me an edge over a college student who learned in Java. Java coders still have to think like any other coder. Their algorithms still have to logically make sense. The concepts of memory allocation, pointer dereferencing, and compiler optimization (among others) can be taught in separate courses and don't necessarily need to be done in C/C++.
      --
      rm -rf /
    48. Re:You have to start somewhere... by ultranova · · Score: 1

      Like I said above, it all depends on what you are trying to teach; for example, it is possible to teach OO using plain old C, but it is rather painful!

      Which is a good thing, IMHO. Objects (try to) solve the problem of exponentially increasing program complexity. If you never run into that problem yourself, how are you supposed to understand the answer either ?

      IMHO learning programming languages should start from BASIC - and I mean the old one with line numbers, GOTOs and all-global variables, not a newer procedural kind. Have the students make more and more complex programs with it, and the problems soon start manifesting; then introduce the idea of a stack and stack pointer (an array and a number to hold the current place). Then show how the computer can take care of stack management automatically, and advance into C. Then you can continue increasing the complexity until problems start appearing again, introduce the concept of objects as a solution, and teach C++/Java/whatever.

      The point here is that if you don't know what specific problems language features are designed to solve, you are unlikely to be able to use them appropriately. 42 may well the the Ultimate Answer, but it is useless without knowing the Ultimate Question.

      Oh, and I picked old BASIC instead of Assembler simply because I know it but not assembler. I suppose either would work.

      Anyway, this kind of curriculum would produce programmers who understand why their tools are like they are, know which is appropriate for each task, and know how to leverage their sterngths to full effect.

      --

      Forget magic. Any technology distinguishable from divine power is insufficiently advanced.

    49. Re:You have to start somewhere... by jandersen · · Score: 2, Insightful

      Give me a break Sure - where do you want it? But of course, when I boldly claim that you don't need to learn discipline in Java, I am oversimplifying in the hope that the reader is able to fill in the obvious gap. After all, discipline is required for anything you do, to some extent; but in C you need so much more of.

      I am not saying that Java is bad or that Java programmers are bad, but there is still some serious value in understanding how a computer works right down there at the metal, and C is a lot closer to the bare metal; and that is why it is important for CS students to learn to use C well, even if they will forever more use Java, C# or whatever. When you study computer science, you study to become a Computer Scientist, which requires a lot more than the ability to program - hence the word 'Scientist'. Computer Scientists are, as far as I know, required to be able to write things like operating systems from scratch and that kind of things, and you won't choose Java for that if you want it to go fast (not quite true, I know - Nixdorff made a series of servers once, whose OS was written almost entirely in interpreted BASIC).

      Now, as for the 80% errors caused by pointers - it is perfectly possible to learn a coding discipline that avoids them. This should happen automatically with experience; after a while you learn to always initialize buffers - whether they are pointers, strings, int or other - when you define them.
    50. Re:You have to start somewhere... by quanticle · · Score: 1

      If higher level programming languages are really "more productive" than low level programming languages, then why aren't you advocating teaching the highest-level programming languages like Python (which is almost pseudo-code), or Lisp?

      Presumably we should start our students out with those languages, since they're so much more productive.

      --
      We all know what to do, but we don't know how to get re-elected once we have done it
    51. Re:You have to start somewhere... by SoulRider · · Score: 1

      There is a downside to that. I am currently working on a project where EVERYONE REWRITES everything. Even though we have a good set of libraries they could use. We now have a dozen implementations of everything, try maintaining that. And this is definately a problem with "CS" majors/engineers these days I see, most of them have a hard time fitting into an already existing team. They all come into the team wanting to be the boss.

    52. Re:You have to start somewhere... by quakehead3 · · Score: 1

      So if C is like a manual car, Java is an automatic.
      I'd say C is like a formula one, and Java is a tricycle made of plastic.
    53. Re:You have to start somewhere... by shutdown+-p+now · · Score: 1

      Once again, depends on what you are trying to teach/learn. Pascal (which I like, btw) teaches different things than one would learn in C. In pascal you are learning a programming language; very often in C you are using it for a specific platform/architecture, and hence get to use and understand things like signals, volatile variables, memory-mapped IO, etc
      That's precisely the point; that's why GP said that C is a lousy beginners language. You don't start teaching programming with signals, volatile variables, or memory-mapped IO. You start it with "Hello, world!", bubble sort, and linked lists. That's precisely the niche nicely covered by Pascal (and Scheme - though I believe that the lack of strong typing in the latter is harmful for teaching purposes).
    54. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      I think this is a great story. I just finished reading Wozniak's biography iWoz and am always amazed by those who can put pen to paper and hash out complexities like that in such short time.

      Personally, I went through the C/C++ -> Assembly track myself while in school, about 10 years ago, and was one of the last to go through that track. (The next wave of kids that came in began the new Java route with a fancy GUI Java editor that just came out). At the time I was a little upset that I had to endure coding without GUI tools. Although I don't ever touch C or C++ anymore, I think I was better off for not having been started off immediately down the Java road. Let's face it, moving from C/C++ is easier than going from Java -> C/C++...IMO. However, I do agree with you. It is impossible to master every little aspect, down to the minutiae, of something such as complex as a modern computer system. What happens is that you become expert at a few subsets while gaining a holistic view of others. I think if you put these professors down and examined their fundamental knowledge we could find huge gaps in their abilities as well. I think it's more efficient to master the subset you are most interested in, instead of trying to consume the entire system. Computer systems are a group effort and you have to put your trust into others to do their jobs. There is only so much you can cram into a degree program to begin with. But I agree knowledge of directly related subsets to what you are interested in is of course a good thing.

      I think I will have to agree with some of the other posters that Java was pushed in the universities for the sake of the corporate world. Java wouldn't be as dominant if it weren't for all the universities, community colleges and what not constantly churning out programmers with the mindset that Java can do it all and there is no need to use or understand anything else.

    55. Re:You have to start somewhere... by roman_mir · · Score: 1

      programming in Java is like programming in C, but without the need to learn about pointers or good programming discipline. - I am sorry, this is a load of BS. You have to have good programming discipline in Java, if you believe otherwise you just have never worked with that platform. Pointers is a particular item that is not in Java (never mind the NullPointerException,) however references are there, arrays of elements are there, linked lists, hash maps are there, objects referencing other objects are there. C like memory deallocation is just not in the set of problems that Java programmers have to deal with, however proper dereferencing of memory still has to be done at the right time, otherwise memory will leak just as quickly.

      But I am not preaching Java over any other language, just pointing out that this tool has its own set of rules and apparently it is being bashed for it as if it is the main problem of programming: referencing memory correctly. It is just a technicality, the main problem of programming is solving the actual problem at hand as efficiently as possible yet within some reasonable time constraints.

    56. Re:You have to start somewhere... by spirit+of+reason · · Score: 1

      And indeed we do! At Berkeley, we use a top-down approach (to avoid throwing too much information at once). The lower division series starts off with Scheme to teach basic programming constructs (loops, recursion, etc.), moves on to Java for the first course in data structures and algorithms, then concludes with C and MIPS assembly for machine structures. After that, you move on to applications and/or theory in upper division courses. The higher-level languages help abstract away the details and prevent information overload.

    57. Re:You have to start somewhere... by ceoyoyo · · Score: 1

      I DO expect a computer science student to be able to wire up a NAND gate with a transistor, then take a NAND gate (I'll let him use an IC) and wire it up to make an adder, etc.

      I don't expect a software engineer to do that, but I expect a computer engineer to be able to do it really well.

      The difference? The software engineer is destined to write software and will never need to know about NAND gates. The computer engineer is going to be all about NAND gates.

      As for the computer science student, he or she is in a SCIENCE program, so nobody knows WHAT he's going to need to know. When I was doing digital design I thought it was pretty cool but I didn't expect that I'd ever use any of it again. Then when I landed in my masters program one of the first things I had to do was evaluate the possibility of building an ASIC to run a particular algorithm. Not build it, but look into whether it was a good idea or not. So I needed that familiarity with the basics of my field.

    58. Re:You have to start somewhere... by ceoyoyo · · Score: 1

      It's rare that you need to force someone to take the path of least resistance.

      My problem with Java (and C) for a first language is that it has a steep learning curve. Hello World in either one has all kinds of litter that you don't need to know when you're getting your first taste of programming. What's a void? Function? What are these curly braces everywhere? A block? What's a block?

      Pascal was a pretty good beginning language because it's fairly close to both English and math. Begin and End are straightforward, even if you don't yet understand the concept of a block. An interpreted language works too, where hello world is a single line. You don't have to stay with the beginning language for very long, but it removes a lot of distraction.

      The other problem with using a language that has lots of libraries is that the students whine a LOT when you tell them they can't use something. And whiney students are annoying.

    59. Re:You have to start somewhere... by bnenning · · Score: 1

      If higher level programming languages are really "more productive" than low level programming languages, then why aren't you advocating teaching the highest-level programming languages like Python (which is almost pseudo-code), or Lisp?

      That's exactly what I advocate. Preferably something like Python instead of Lisp; "pure" functional languages often make hard things easy but easy things hard.

      Are you actually disagreeing that Python is more productive than C?

      --
      How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
    60. Re:You have to start somewhere... by Grishnakh · · Score: 1

      When I was in EE school, we took a course or two that showed how a theoretical processor was constructed from gates, how registers worked, and how the whole thing was programmed in assembly language. We had to do several projects working with this theoretical processor, like programming it in assembly (using an emulator program). I believe the book was written by someone named Mano. Everything was highly simplified of course, but was perfect for teaching the concepts involved without getting bogged down in the details of, for instance, x86 assembly language.

    61. Re:You have to start somewhere... by poot_rootbeer · · Score: 1

      So if C is like a manual car, Java is an automatic.

      And you don't think it's a reasonable pedagogy to start new drivers on automatic transmissions, and only once they've got a good grasp on the fundamentals, introduce the clutch pedal and gearshift?

      If your goal is to smoke out all but the most dedicated or naturally gifted students (and ruin a bunch of transmissions in the process), by all means start them out on the most difficult concepts first. If you want everyone to have a chance to learn, start with easier concepts and work up to the hard ones.

    62. Re:You have to start somewhere... by tieTYT · · Score: 1

      Now, as for the 80% errors caused by pointers - it is perfectly possible to learn a coding discipline that avoids them. This should happen automatically with experience; after a while you learn to always initialize buffers - whether they are pointers, strings, int or other - when you define them.
      Unless you're using some sort of library/toolkit/framework/IDE to prevents you from doing it, bullshit. What you're talking about is theory. The statistics of 70-80% is reality. And even if you're so disciplined that you can accomplish this yourself, all of your coworkers won't be able to (hey, that 70-80% has gotta come from somewhere). They're going to drag you down in more ways than they would if you were using a "pointer-less" language.

      But guess what? If you use a "pointer-less" language, you don't have to worry about your coworkers as much. And you don't have to worry about it yourself! But guess what's the greatest benefit of all? Instead of spending most of your time thinking about pointers, you can use that time to solve the problems you were actually assigned.

      Let me just summarize where I stand on this issue. It's important for CS grads to have experience programming directly with pointers, but it's important for a company to choose a language that doesn't deal with pointers WHEN FEASIBLE.

    63. Re:You have to start somewhere... by tieTYT · · Score: 1

      And let me just tack on another comment here: If you really think that a language that requires you to be more disciplined is a good thing, shouldn't you be programming in Assembly? Surely they need to be way more disciplined than C++ programmers.

    64. Re:You have to start somewhere... by quanticle · · Score: 1

      No, I'm not disagreeing. I'm just clarifying...

      --
      We all know what to do, but we don't know how to get re-elected once we have done it
    65. Re:You have to start somewhere... by Prien715 · · Score: 1

      You declare that certain libraries are off-limits for an assignment, and give a zero score to anybody who violates that.

      I had profs who used this approach in C++ as well and it worked rather well, and it's rather gratifying in a way. After implementing whatever standard data struct it was, we were free to use the STL version from then on -- or our own if we liked our API better.

      This continued even when learning OpenGL in C. Assignment 1: "This is the OpenGL function that draws a point in 2D. It is the only openGL function you're permitted to use. Draw an arbitrary line". After that of course, we got to use openGLs drawline function for 2D, but then had to use it to implement 3D functionality;)

      Given that I now work in graphics, I definitely think the bottom-up approach is the way to go -- building libraries from scratch and then getting to use them -- and has prepared me for abstraction in much larger projects. (Caveat: I do think people should get to use a compiler before they have to write their own;))

      --
      -- Political fascism requires a Fuhrer.
    66. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      "smoke out all but the most dedicated or naturally gifted students"

      In many programs this is precisely the goal.

    67. Re:You have to start somewhere... by tieTYT · · Score: 1

      Java is also a lousy "beginners" language, because its reliance on standard libraries leads beginners to look for pre-packaged solutions rather than writing their own.
      As someone who solves problems for a living (I'm a software engineer), I see a simple solution to this: Tell the students they can't use pre-packaged solutions for the assignment. Problem solved.
    68. Re:You have to start somewhere... by Cederic · · Score: 1

      The ones that actually belong in the field will catch on real quick. You mean they find source.zip, find the code for the package they're not allowed to use and copy-paste it into a whole new package they've just created? With appropriate acknowledgements of course :)

      If you belong in the field you'll quickly realise that it's stupid to write something that already exists..

      (Writing something that'll pass your assignment is an entirely different exercise.. ;)
    69. Re:You have to start somewhere... by Beliskner · · Score: 1
      I started with BASIC on a BBC computer, moved onto simple assembly using registers, no memory management, then C++. I found C++ difficult because of pointers and memory management, because frankly I'm not that clever a person and I still don't understand why malloc() has to be used in Linux/GCC but not Visual Studio, then we did Java which was way easier to understand and I found it removed all that unnecessary memory cruft which encourages nasty hacks. I like it better in VB land although a lot of programming in VB is getting around M$ APIs that don't work as advertised.

      Although it feels good knowing that if absolutely necessary I can go to a lower level and decrease my productivity by 99%

      --
      A caveman dreams of being us, the incalculable power and riches. We dream of being Q, then what?
    70. Re:You have to start somewhere... by DigitalCrackPipe · · Score: 1

      and ruin a bunch of transmissions in the process

      In high school I learned drafting with pencil and paper (and various tools). After that, we moved to CAD, with a greater understanding of what the software was representing. No ruined transmissions or other collateral dammage - in face the inner workings of architecture were simpler to learn that way.

      I think part of the complaint being issued here is that while students may need to start with easier pre-chewed tasks, the problem being seen is that they are receiving no higher level of training before getting spit out into the work force. As we can see that many languages (C#, Java, VB) never require a deeper understanding of the technology, they are insufficient to force students to learn the advanced concepts.

    71. Re:You have to start somewhere... by linuxrocks123 · · Score: 1

      > But we no longer expect all computer science students to be able to wire up NAND gates from discrete valves or transistors.

      At U.T., all computer science students are required to take EE316. This class did, in fact, teach me how to wire NAND gates from discrete transistors, and I'm glad I learned how to do that.

      --
      vi ~/.emacs # I'm probably going to Hell for this.
    72. Re:You have to start somewhere... by Timothy+Brownawell · · Score: 1

      If you program in Java or C#, you take one more step up. You gain in productivity by getting memory management and class libraries, but you have to trust that the compiler writers and VM writers did their job properly. This you seem unable to do.

      I personally would like these languages a lot more if their way of managing (assumed plentiful) memory for me didn't also make it much harder to manage scarce resources (yes, occasionally including memory) properly. VMs are awesome, class libraries are rather nice, single inheritance is sometimes annoying, and the inability to mark a class as needing deterministic finalization is a horrible pain.

    73. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      And even then, to a chip designer the assembly language is still a programming interface. You lose pretty much all of the state machine design that goes into it, unless you really learn it, and if you do you aren't going to do much better than black box diagrams.

    74. Re:You have to start somewhere... by bogjobber · · Score: 1
      Yes, in the "real world" you don't want everybody reimplimenting their own linked list or hashtable. However a beginner must learn the concepts behind those data structures in order to advance, and Java just makes it too easy to use the standard set of classes.

      If you're teaching a data structures class and you allow students to use those libraries, the problem is not with the language. That's like complaining that calculators make math too easy. It's completely trivial for professors to ban specific libraries in a program, forcing the students to do it on their own. This issue is completely independent of the language used.

    75. Re:You have to start somewhere... by smellotron · · Score: 1

      If you belong in the field you'll quickly realise that it's stupid to write something that already exists..

      ...but sometimes there will be a compelling reason to write something very similar to something that already exists. Maybe you can relax the constraints required by the original in order to squeeze out a bit more performance. Maybe you need to handle some edge case differently than the original. Maybe the license of the original prevents you from using it. Heck, maybe you can write an all-around better implementation than the original. It's stupid to write off re-implementation simply to enforce the mantra of code reuse.

    76. Re:You have to start somewhere... by MikeFM · · Score: 1

      In that case try something like PHP followed by Python. Java is still beyond most of the nitwits I've seen it taught to. Maybe the real problem is that they encourage everyone that has ever looked at online porn or played a video game to go into computer science.

      Of course you really shouldn't write in C anyway unless you are doing something tight. We also get a lot of dorks that feel the need to write everything in C. Naw don't write a quicky shell script - crank out the C and write 3000 lines of garbage to replace those 3 lines of shell code.

      Really though, I'd suggest teaching PHP, shell scripting (Bash), Perl, Python, Lisp, Prolog, SQL, Javascript, Java, C, and C++ to all computer science students. Those are the languages I find most useful in real life and I really do use all of them (and more). I don't use Lisp and Prolog very often but when I do they are lifesavers - and I think it's good to force people to try thinking about problems in different ways. I rarely use assembly any more but if you're going to teach C it doesn't hurt to at least touch on coding in assembly.

      I agree that it's pretty silly to have an operating systems concepts class for students that have never coded in C and assembly. Might as well teach pigeons to swim.

      --
      At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
    77. Re:You have to start somewhere... by SoupIsGoodFood_42 · · Score: 1

      Err... I think you are missing the point entirely. I think their concert is that many of these students never progress beyond what is required of them (or something to that effect), and that has a huge consequence for the quality of programming in the industry.

      When you don't learn the basics of something, then you are also less likely to know the limitations of your current environment, or whatever you want to call it.

    78. Re:You have to start somewhere... by Anonymous Coward · · Score: 0

      It's actually a damn sight easier to write command line apps than 'conjur up' a GUI in Java. I'd take command line *any* day.

    79. Re:You have to start somewhere... by sjames · · Score: 1

      Perhaps the best bet is to switch a few times. Java isn't so bad for something like Intro to programming on the hello world and add a series of numbers from a file level.

      Then move to C for fundamental data structures and associated algorithms. Throw in assembly language to learn about CPUs other low level stuff. Back to C to learn about the system level. Then it's OK to revisit Java for advanced algorithms as long as only fundamental structures from the standard classes are allowed (essentially what was learned in C already).

      By the time the students return to Java, they should understand why JVM is not self hosting.

    80. Re:You have to start somewhere... by gr8scot · · Score: 1

      I see a simple solution to this: Tell the students they can't use pre-packaged solutions for the assignment. Problem solved. I agree. Do you care to comment on the quality of instructor who would blame Java for their own inability to come up with the same solution?
      --
      All 19 hijackers were known terrorists 09-10-2001. Lack of FBI intelligence does not justify warrantless wiretaps..
  5. CS Newbie here. by Anonymous Coward · · Score: 0

    After passing CS101 (which was just a Java course at my school) with a decent mark, I took an embedded systems course that required FPGA programs written in C++. Great, because Java syntax is just slightly different from C++, except.. WTF is a pointer? I got "pwned."

    1. Re:CS Newbie here. by DA_MAN_DA_MYTH · · Score: 1

      If they just taught the Java language in your introductory class and not the concepts behind it, then your school / professor sucks. You can buy a book to learn a language. (Well you can buy a book to learn the concepts too, but the good ones are hard to find.)

      I'm just remembering my old CS classes, and god damn I take java.lang and garbage collecting for granted these days. (char[] or char* for Strings my lord, it's like a lightsaber an elegant weapon, for a more civilized time!) .

      --
      "It takes many nails to build a crib, but one screw to fill it."
    2. Re:CS Newbie here. by HonIsCool · · Score: 1
      I loved C++ when I first saw it; now I'm convinced that it's completely evil... Unless someone's a specification masochist (AKA guru), the odds are pretty damn low that they can actually write a valid C++ program. For example, is it immediately obvious what is wrong with the code snippet below? This is from a genuine project, although the code has been trimmed for clarity; obviously there were more side-effects inside the loop originally.

      typedef std::map<int,int> MyMap_t;

      MyMap_t mymap;
      mymap[0] = 4;
      mymap[1] = 3;
      mymap[2] = 2;
      mymap[3] = 1;
      mymap[4] = 0;

      for (MyMap_t::iterator i = mymap.begin(); i != mymap.end(); ++i) {
      mymap.erase(i);
      }
      And let's not even get started on exception safety... ;_; Get the books "Exceptional C++", "More exceptional C++" by Herb Sutter and start quaking in your boots :/
      --
      "Give me six lines of C++ code written by the most competent programmer, and I will find enough in there to hang him."
    3. Re:CS Newbie here. by forgotten_my_nick · · Score: 4, Funny

      Sure don't you know that C++ was just a cruel joke by the creators. ;)

      http://www.phy.duke.edu/~rgb/Beowulf/c++_interview/c++_interview.html

    4. Re:CS Newbie here. by aivarsk · · Score: 1

      Of course, erase() invalidates iterator. That's one of the first things you read in documentation http://www.sgi.com/tech/stl/Map.html If you don't, it's your own fault. In C++ you can write exception-safe easier than in Java, because of RAII (http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) concept.

    5. Re:CS Newbie here. by HonIsCool · · Score: 1
      Ahh, yes, hehe, of course! It's the programmer's fault!

      The problem is that C++ has a million side-effects to the simplest of operations. When the validity of a program depends on whether the programmer can remember minute details of the specification of the language, well, I think there is a slight problem...

      Another example (from GOTW):

      // In some header file:
      void f( T1*, T2* );

      // In some implementation file:
      f( new T1, new T2 );
      I'm sure the potential memory leaks here are completely obvious to you, but try to imagine that not everyone is intimately familiar with the C++ standard regarding sequence points, don't you think it's awfully easy to make a mistake in C++?
      Sure, RAII, Pimpl, auto_ptr and whatnot, but even Mr.Sutter agrees that exception safety is not a trivial matter.
      --
      "Give me six lines of C++ code written by the most competent programmer, and I will find enough in there to hang him."
    6. Re:CS Newbie here. by Solra+Bizna · · Score: 1

      Am I crazy for being able to spot the problem before I finished reading despite having never used iterators in C++?

      -:sigma.SB

      --
      WARN
      THERE IS ANOTHER SYSTEM
    7. Re:CS Newbie here. by HonIsCool · · Score: 1

      Maybe :p

      Well, it's perhaps not unreasonable to infer that erase() will invalidate the iterator, and if this was an isolated incident, then perhaps everything would be fine. The problem is that it's so easy to make a mistake in C++. And of course we can blame the programmers for not obeying the specs, because of course any competent programmer always write correct code, right?

      I think it was DJB who said it should be easy to write correct code, and difficult to write incorrect. Still qmail for instance contains incorrect C code, including buffer-overflow conditions...

      --
      "Give me six lines of C++ code written by the most competent programmer, and I will find enough in there to hang him."
    8. Re:CS Newbie here. by EsbenMoseHansen · · Score: 1

      Why, yes it is obvious (map::erase() invalidates all iterators in the map, as it should say right in the documentation for erase()), but what is more, this is quite common --- e.g. Java also has this behaviour. Why do you think erase() returns an iterator... for fun?

      Now, C++ is complicated. C++ is powerful. Java is simple. Java is weak (and as of 1.5 throws type information out, for which I will not forgive it until it has been fixed!). There is a pattern there.

      Now, what I wouldn't give for a language that has a simple syntax (lalr, e.g.) support for useful, common stuff such as lambdas, closures, static+dynamic polymorphism, types-independent-of-inheritance, not dependent on a VM, statically typed, provides operator overloading, preferably for arbitrary operators, classes/objects, full multiple inheritance and a few more items I probably forgot. I mean, how hard can it be really? It must be harder than it looks. C++ has much of that, but there is little sport in finding places where it missing out... give it a new syntax, completely divorce types from inheritance, and give us a lambda... and we will be getting there. More operating overloading would be nice... operator.= is on the top of my list :)

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    9. Re:CS Newbie here. by HonIsCool · · Score: 1

      Actually, std::map erase() does NOT invalidate all iterators in the map; only the iterator used as argument to erase()
      It also does NOT return an iterator; it returns void.

      Fun stuff, isn't it? ^_^

      --
      "Give me six lines of C++ code written by the most competent programmer, and I will find enough in there to hang him."
    10. Re:CS Newbie here. by something_wicked_thi · · Score: 1

      Why, yes it is obvious (map::erase() invalidates all iterators in the map, as it should say right in the documentation for erase())

      Nope. Erase on a map invalidates only the iterators pointing at the erased item. Such is true for all associative containers in C++. You're thinking about vectors.

    11. Re:CS Newbie here. by Rakshasa+Taisab · · Score: 1

      Nope. Erase on a map invalidates only the iterators pointing at the erased item. Such is true for all associative containers in C++. You're thinking about vectors.

      Actually, std::vector::erase invalidates all iterators _after_ the iterator being erased. When you erase an iterator != end(), it will just move either the next or end to the position pointed by the current iterator. The vector container doesn't change the reserved size on erase.

      This is easy to see if you know stuff about data structures _and_ have a good grasp of the workings of STL. (And make sure you check that your supposition is correct in a reference work)

      --
      - These characters were randomly selected.
    12. Re:CS Newbie here. by Anonymous Coward · · Score: 0
      wow...

      Stroustrup: There you are then. Mind you, a few tried, in the
                      early days. There was this Oregon company - Mentor
                      Graphics, I think they were called - really caught a cold
                      trying to rewrite everything in C++ in about '90 or '91. I
                      felt sorry for them really, but I thought people would learn
                      from their mistakes.

      Interviewer: Obviously, they didn't?

      Stroustrup: Not in the slightest. Trouble is, most companies
                      hush-up all their major blunders, and explaining a $30
                      million loss to the shareholders would have been difficult.
                      Give them their due, though, they made it work in the end.

      Interviewer: They did? Well, there you are then, it proves O-O works.

      Stroustrup: Well, almost. The executable was so huge, it took
                      five minutes to load, on an HP workstation, with 128MB of
                      RAM. Then it ran like treacle. Actually, I thought this
                      would be a major stumbling-block, and I'd get found out
                      within a week, but nobody cared. Sun and HP were only too
                      glad to sell enormously powerful boxes, with huge resources
                      just to run trivial programs. You know, when we had our
                      first C++ compiler, at AT&T, I compiled 'Hello World', and
                      couldn't believe the size of the executable. 2.1MB


      What were they writing? OpenOffice.org?
    13. Re:CS Newbie here. by treak007 · · Score: 1

      but try to imagine that not everyone is intimately familiar with the C++ standard regarding sequence points The point of C++ is not that someone can sit down and wing it. That is why the documentation is there. To code in C++, you have to understand what you are doing.

      don't you think it's awfully easy to make a mistake in C++? It's awfully easy to make a mistake in any language
      --
      Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
    14. Re:CS Newbie here. by Chris+Burke · · Score: 1

      For example, is it immediately obvious what is wrong with the code snippet below?

      for (MyMap_t::iterator i = mymap.begin(); i != mymap.end(); ++i) {
      mymap.erase(i);
      }


      Yeah that's easy, the problem is they're incrementing an iterator that is invalidated by the erase() method. I'm not a specification masochist or guru, I just know that you have to be careful with your iterators when you're erasing things from the data structure, and that basically all of the pointer-based structures in STL have the property that erase() invalidates the iterator you just erased -- which makes a lot of sense knowing how a pointer-based structure is actually implemented.

      Which I'll concede still largely proves your point -- it's not like this knowledge was easily won, or that similar problems haven't occurred in my or coworker's code.

      --

      The enemies of Democracy are
  6. 1 language is damaging. by toolslive · · Score: 5, Interesting

    If they teach you only one programming language, yes, they damage you.

    In the course of my CS education (early 90s), they started with Pascal when they explained algorithmical basics.
    Later courses were in C for OS and networking, while other courses used about everything from PROLOG to ADA.

    You learn that some paradigms map to certain types of problems better (or worse) than others. So don't open sockets in
    Prolog (I have seen'em do it man) , and don't do AI in C.

    a quote: "if the only tool you have is a hammer, every problem looks like a nail".

    1. Re:1 language is damaging. by synx · · Score: 2, Insightful

      Yes, early 90s - but have you checked out universities lately? We're talking cradle to grave Java. Intro to dev in Java, mid level courses in Java, Sr courses in Java. We're graduating people who don't know what pointers are!

      COME ON!

      And don't tell me Java doesn't have pointers - what do you think references are? Glorified pointers with auto-null checks.

      One problem I've seen is Java Developer Syndrome (JDS) - think devs who don't know the difference between Java API names and datastructures that are used to implement them.

      Think of someone who when you ask them what a hashtable is, they say 'oh, that's the synchronized version of HashMap'. Tell me that is a quality developer you want to work with. Go ahead, TELL ME.

    2. Re:1 language is damaging. by Anonymous Coward · · Score: 0

      so how is that the problem of the java language? you have lousy and lazy people everywhere, and the more software there is, the more people will recycle, reuse and regurgitate, if it looks like it'll solve their problem faster than rolling their own.

      the problem is lazy professors and lazy students --and whether the market pays to such laziness. after all, since you're so cool and smug -- have you rolled your own compiler recently?

    3. Re:1 language is damaging. by risk+one · · Score: 1

      I disagree with your wording. 'They' should only teach you one language. Then you know how to code, and you can do the rest yourself. If you can't teach yourself python, you don't belong in college (at least not in the CS classes). Even C or C++ you can pick up as you need it. So long as they take into account that not all students are quite proficient with a language when it's obligatory for a class. I was taught java explicitly in a class designed to teach programming. I was taught Prolog in a class designed to teach Logic (Prolog is kind of an exception). I learned all other languages during classes as I needed them, or I thought they's be useful. The only problem here is C/C++ because it's tricky to go from java to C, but we learned about C in a class about the inner workings of the computer (which is a great way of explaining C, and why those weird things that java doesn't have are necessary or useful).

      There's only a limited amount of time to teach students about a lot of important topics, so it's a waste of time to start teaching them languages, when they're supposed to be able to do that by themselves. And if the newly hired developer isn't familiar with the the language, or the technology you use, you educate them. Invest in your people. Companies need to get off this idea that IT people come readily instructed for whatever they want done. We're smart people with an active interest in our field. You invest in us, respect us, and we will learn. Consider us little robots that can be turned on and off, and come pre-packaged with the right knowledge, we will zone out and play solitaire all day.

      Another problem is that when you've spent five years writing your own, increasingly beautiful code in a pleasant language like java, you don't want to take a job maintaining some hideous monstrosity of a C++ system with all kinds of deprecated syntax, ugly commercial libraries, and various design-philosophies spread across thousands of modules. You're not trained to be a developer, you're trained to be a scientist. It costs a lot of money for people to take that kind of job, when they've spent years of their life and thousands of dollars to educate themselves on something they're passionate about. They'll have actual ideas and insights. Stuff gets outsourced because programmers in another country don't worry about the overall design and the big picture, like people do when they all work in the same office and care about their company. We should be glad that these jobs are getting outsourced. It's not the kind of work you want to do.

    4. Re:1 language is damaging. by Alioth · · Score: 1

      It's not just about the languages, it's also understanding fundamentally what's happening on the raw iron. I'd also suggest that assembler (any architecture - the 8 bit ones like Z80 or 6502 or perhaps a microcontroller ISA such as Atmel's AVR aren't a bad place to start because they are straightforward) is worth a good look over. If you've written functions in assembler, you grok at the fundamental level why buffer overruns are so bad, rather than just being told that it's bad. When you've watched an unchecked buffer write over the machine stack, it's a lot more powerful to learning this than "Segmentation fault (core dumped)". When you've had to figure out how to test a complex condition with many instructions, you get the idea why perhaps you should try not to have this in your inner loop. Etc.

      And someone who has done even just a little assembly language has no problem with pointers, or the concept of passing by reference.

    5. Re:1 language is damaging. by Thwomp · · Score: 1

      I guess it just depends on the university. Where I went Java was the main introductory language but I also used C, C++, Haskell, Occam, Python, Prolog, Smalltalk and Fortran in various modules... and this was around 2002. :-/

    6. Re:1 language is damaging. by goose-incarnated · · Score: 2, Funny

      a quote: "if the only tool you have is a hammer, every problem looks like a nail".

      right back at ya: "if the only tool you have is a chainsaw, every problem looks like hours of fun

      --
      I'm a minority race. Save your vitriol for white people.
    7. Re:1 language is damaging. by something_wicked_thi · · Score: 2, Funny

      And don't tell me Java doesn't have pointers - what do you think references are? Glorified pointers with auto-null checks.

      And what's a SIGSEGV if it's not an auto-null check? ;-)

    8. Re:1 language is damaging. by Ruie · · Score: 1
      A true programmer is a person capable of controlling computers.

      By control here I mean a closed feedback loop - not only they are able to push buttons, but can also explain in minute detail what happens when they do it.

      There is only one computer science language - mathematics. C, Pascal, Lisp are just different written forms of it. Any sufficiently rich form is capable of expressing the entirety of mathematics (example: Turing machine). However, "capable" does not mean "easy". One can, for example, do functional programming in C, but you will find out that it is most convenient to write a mini-Lisp interpreter first and then hook into it.

      Thus I don't think the "damage" comes from knowing only one language, but rather from resigning to knowing only the easy parts of one language and unwillingness to push the boundary.

    9. Re:1 language is damaging. by dintech · · Score: 1

      It depends on the context. If you're asking a lot of java questions at interview and then you as 'what's a hashtable?', don't be surprised if you get a java answer.

    10. Re:1 language is damaging. by Anonymous Coward · · Score: 0

      how is that the problem of the java language?

      It isn't a problem with Java directly, it's a problem when Java is used as a teaching language because it allows lousy and lazy people to continue to be lazy. It doesn't force them to think about things like data structures or the underlying memory management.

    11. Re:1 language is damaging. by Burnhard · · Score: 1

      Quite right toolslive. When I was at University, we seemed to have a different language for each class. The languages I remember using were Modula-2 (data structures, Concurrent Programming classes), Eiffel (Object Oriented Programming class), Visual Basic (Human Computer Interaction class), ADA (Can't Remember What That Was All About Class), C (Systems Programming Class), Prolog ("Intelligent Systems" class). At no stage was I required to learn C++ or Java, although I did submit a C++ project in a Neural Networks class (a back propagation neural network), where language was not specified.

      HOWEVER, I was self taught C++ and as such (without internet access during my self teaching sessions) had no clue about things like Boost or std:: - I picked those up when I started work. It turns out when I look back at some old code, that even though my class structures were good, I was leaking memory and doing lots of otherwise unsavory things I just never had to think about when using any of those other languages. Perhaps a C++ class or two would have been very useful.

    12. Re:1 language is damaging. by TheThiefMaster · · Score: 1

      I was specifically looking for a "games programming" course for my uni degree (in the UK), and I had a hard time finding one that was in C/C++.

      Some places were all Java for 3 years, one was Java/Flash. You should have seen some of the "student work" that they were proud enough of to show to visitors interested in the course. At one of them even my dad (who is by no means a gamer, though he is IT literate) was unimpressed enough to ask me if it was worth staying or if we should walk out.

      In the end, I took the "Computer Games Programming" course at the University of Teesside, Middlesbrough, and found out fairly soon that I'd made the right choice. By the end of the course I'd had experience with C, C++ (the course's 2 main languages); Java (half of the online games programming module, the other half was C/C++); Perl, PHP, (X)HTML, CSS, SQL (in a website context, and I know some of those aren't really programming languages as such); and 68000 assembler. Vector, Matrix, Quaternion and Boolean Algebra maths were taught. There was even a module on low-level computer design, from basic logical layout, to designing simple structures (adder, etc) with logic gates, and even how to construct the various logic gates with transistors.
      Understanding of a topic was mostly proved by implementing it, so by the end of the course I had small libraries and programs doing everything from vector/matrix maths, stack/list/queue etc data structures, sorting and so on; up to a command-line program that rendered a 3D scene using a renderer we had to write completely by hand (supporting object instances, texturing, lighting, normal maps and semi-transparent object rendering), an A* pathfinding implementation, and an app rendering (D3D this time IIRC) a set of coloured balls interacting with full rigid-body physics (custom written by us), including friction against the "floor" that meant that they "rolled" instead of "slid".

      My portfolio and experience gained from this course helped me to land my current job before I'd even got my final year's results back. Incidentally I got a fail mark for my final year's project, so had to resit it to get my degree. I as much as said to the person when I handed it in (they commented that it hadn't changed much from the version that narrowly failed) that I'd already got a job thanks to the course, so not getting the degree didn't matter much to me. If I failed again I wouldn't be resitting the final year anyway, because I'd be too busy working, and having the degree wouldn't get me anything I didn't already have. I passed.

      I don't doubt that had I done one of the Java/Flash courses, I'd have graduated with honours among some people that thought that what having a 2D image moving on screen was really neat. There's little chance I would have got a job so soon, and even littler chance that I'd be working in a team of 10, let alone 100.

      The mark of a good programmer isn't proficiency with a programming language, it's knowledge of the theory behind the language, so that he can then pick up any other programming language or proprietary extensions quickly and use them well. Teaching just a single language doesn't get you that.

    13. Re:1 language is damaging. by EchoNiner · · Score: 1

      I think a lot of you are talking about technical schools. I went to the University of Rochester and had a CS degree. It started in Java to go over concepts like data structures and algorithms and then switched to C/C++ for systems classes like Networks, OS, etc. Java is great at abstracting away concepts so you can get into the meat of things like Datastructures, but I agree not very useful for systems type classes (try implementing a TCP header in Java). This is almost exactly a modern version of the grandparent of this post. Back to the technical schools (RIT for example) -- they teach languages, not software engingeering or systems classes. They are preparing you for a job, plain and simple. This is not computer science.

    14. Re:1 language is damaging. by Abcd1234 · · Score: 2, Insightful

      Gah, you're completely and utterly missing the point. This isn't about friggin' languages, and it never was. It's about programming paradigms. My training in computing science took us through the usual host of languages: C/C++/Java, Assembler, Prolog, and of course Lisp. Plus SQL and, if you were so interested, Smalltalk. Was the point, here, to teach languages? Of course not! The purpose was to teach traditional imperative, functional and declarative programming, in procedural, functional, and object-oriented styles, all the while exposing us to both high-level software concepts while giving us a grounding in the underlying details so we can grasp how things work down at the hardware level. And *that* experience is vital for producing well-rounded software developers who understand a variety of techniques and can apply the appropriate tools for the job.

      So, sure, if you could find a language that supports all those programming paradigms, and allows one to expose students to both low- and high-level programming concepts, then my all means, teach it from start to finish. Because you're absolutely right, it isn't really about the language. But, that said, the language is there to best express one's ideas. And I'd be *very* surprised if you could find a language that encapsulated the full breadth and depth of programming approaches while not being a pathetic, lowest-common-denominator expression of those concepts.

      Incidentally, the real irony in all this is that languages like Java and C# are taking on more and more functional and declarative features (though, again, only a poor man's version of them). Just look at C#: suddenly, they have lambdas, and soon it'll have a built in query language. Bang, suddenly we have declarative, functional, and procedural programming models all jammed into the same syntax. And the brutal, bitter truth is that most programmers using C# probably have *no idea* how to best use these tools to solve problems.

    15. Re:1 language is damaging. by shutdown+-p+now · · Score: 1

      And don't tell me Java doesn't have pointers - what do you think references are? Glorified pointers with auto-null checks.
      And no arithmetics. One of my favorites from C++:

      Base* bs = new Base[10];
      for (int i = 0; i < 10; ++i)
      {
      bs[i]->doSomething();
      }

      Derived* ds = dynamic_cast<Derived*>(bs); // looksie, I even use the runtime-checking "safe" C++-style cast here!
      for (int i = 0; i < 10; ++i)
      {
      ds[i]->doSomething();
      }
      Which will not-so-obviously (certainly not so to someone coming from a Java land) crash (or worse) in the second loop at i==1. The fact that a language lets such a thing pass without even a squeak of warning from the compiler is outright insane.

      It's not that pointers themselves are evil, it's that pointers as implemented in C/C++ are evil. And especially so because they have to (or traditionally are) used in many places where true pointer semantics (with arithmetic and everything) is simply not needed - a good example being most of the OO code.

    16. Re:1 language is damaging. by DragonWriter · · Score: 1

      Yes, early 90s - but have you checked out universities lately? We're talking cradle to grave Java.


      From checking the first few universities I thought to look at on the web:

      Caltech and MIT both use Scheme for their first course (and both use SICP as the main text).

      The initial three main programming classes for the CS major at UC Davis use primarily C, C++, and Assembly.

      Stanford's first course uses C++ and the second course uses C++, Java, and Lisp.

      Perhaps there may be "cradle to grave Java" curricula out there somewhere, but what universities are we talking about here?
  7. Where Are the Software Engineers of Tomorrow? by teaDrunk · · Score: 1

    EAST. Way to the East ! (or to the west, over the edge of the map)

    just kidding. Anyway, overhyped, But Yes they need to start with C.

    1. Re:Where Are the Software Engineers of Tomorrow? by famebait · · Score: 1

      I may sound like an old fart here, but I say teach them assembler. Just a little, mind you, and teach more high-level stuff alongside it, but have them hand in a small exercise or two that requires them to understand the basics, and gives then a mental image of what their code compiles to.

      As for TFA, it sounds like the course in question was simply bad, and would have been no matter what language was used. It's like blaming the car model used in drivers' training for the bad results.

      I do agree that if nothing pokes deeper than java, then the course is lacking. But the fix should be is a proper appreciation of deeper technical understanding as part of the curriculum, right along with many other goals, like information modelling and good engineering practices. That can be realized in many ways, but which language is used to teach the higher-level concepts is _not_ key.

      --
      sudo ergo sum
    2. Re:Where Are the Software Engineers of Tomorrow? by laejoh · · Score: 0

      over the edge of the map

      But, but, but, there be anthropomorphic dragons!

      FF, did you notice the special number of this cartoon?

    3. Re:Where Are the Software Engineers of Tomorrow? by teh+kurisu · · Score: 1

      Why not use Objective-C as a teaching language? It's a strict superset of C so you can teach bare C for the first part of the course and then move on to Objective-C when you need to start teaching OO programming. It's not as batshit crazy as C++, and avoids all the little C/C++ incompatibilities. You're free to teach pointers, and it also has manual memory management (which is actually quite easy to get to grips with).

      The core language can be compiled by GCC, so it's available on Linux, but as it's the primary language of Mac OS X it's also an excellent way to justify spending the university's money on a new lab full of Macs.

      Apple also provides a reasonable amount of documentation for its libraries. I keep hearing from a friend of mine who does Python programming for a living that what he misses most about Java is the excellent documentation. Although that may be a bad example given the "The code is the documentation" mantra some Python programmers follow.

    4. Re:Where Are the Software Engineers of Tomorrow? by putaro · · Score: 1

      Definitely assembler should be a requirement in any CS curriculum. If you can't work down at the bare metal level you're not a real programmer. If you don't understand what the processor underneath of you can really do and what's hard and what's easy for it to do you can't write good code

    5. Re:Where Are the Software Engineers of Tomorrow? by Anonymous Coward · · Score: 0

      Although I'm not in the best position to comment on this, having only completed one semester of my Comp Sci degree, I just wanted to mention that my school does use a C++ based curriculum for early classes, with other languages being used and examined in higher level classes. Additionally, while we've only done so to a very limited degree, even in our intro class we did a very brief intro to assembly, writing very simple programs to understand the concept of using the registers and interacting with things in that way. This was done using the Pep7 VM, and honestly I really enjoyed getting a chance to wrestle with things at such a basic level. While I'm not jumping up and down to try massive projects in assembly, it is something that I foresee messing around in some more as a learning experience.

  8. and the real reason their skills are insufficient by Anonymous Coward · · Score: 0

    ... is perhaps because they are spending too much time on software engineering concepts and programming in specific languages such as Java instead of doing actual computer science?

  9. About the Authors by etymxris · · Score: 5, Informative
    Gee, wonder why they're praising Ada so much.

    Robert B.K. Dewar, Ph.D., is president of AdaCore and a professor emeritus of computer science at New York University. He has been involved in the design and implementation of Ada since 1980 as a distinguished reviewer, a member of the Ada Rapporteur group, and the chief architect of Gnu Ada Translator.

    Edmond Schonberg, Ph.D., is vice-president of AdaCore and a professor emeritus of computer science at New York University. He has been involved in the implementation of Ada since 1981. With Robert Dewar and other collaborators, he created the first validated implementation of Ada83, the first prototype compiler for Ada9X, and the first full implementation of Ada2005. Maybe Ada is helpful for learning concurrent programming and safe typing, but I'll wait for the opinion of a slightly less partial party.
    1. Re:About the Authors by superash · · Score: 3, Insightful

      TFA says:

      A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada)

      Why C matters...
      Why C++ matters...
      Why lisp matters...
      Why Java matters...
      Why Ada matters...

      So, I don't think the article is biased.

    2. Re:About the Authors by Col+Bat+Guano · · Score: 5, Informative

      I'm a slightly less partial party. I've taught Ada to first year students, and our school replaced Ada with Java. Some observations are...

            Students found Ada a relatively simple language to start with (if you choose an appropriate subset)
            Java can have more overhead for a beginning student
            Lecturers are often tempted to push a lot of "stuff" in intro subjects
            Java GUI motivates some students to get more involved
            Many of my students regretted that Ada would no longer be taught in first year (having quite enjoyed it)

      No matter what you start with, teaching students to be better programmers takes more than just a language. Each language allows you to teach a specific set of skills, and Ada is not bad for teaching some important SE skills (IMHO).

      I think pointers are overrated as a first year concept, and can wait for later years.

    3. Re:About the Authors by lisaparratt · · Score: 1

      Regardless of their links, the reason they'll be promoting Ada is because Mistress[1] will chain you down and flay you to within an inch of your life if you even *dream* of unsafe code.

      [1] My pet name for the Ada toolchain.

    4. Re:About the Authors by LizardKing · · Score: 1

      Java GUI motivates some students to get more involved

      I'd suggest making a subset of the projects non-GUI though (in other words, disallow use of the java.awt.* and javax.swing.* classes), just so the students don't become totally distracted by interface issues. I'd also stress the importance of understanding MVC for all projects - separating the core logic of a program from the presentation. This will definitely benefit them if the students become professional Java coders, as I see way too much code that isn't modular and is tied to either Servlets or Swing, thereby hindering testability and reuse.

    5. Re:About the Authors by Col+Bat+Guano · · Score: 1

      It's a tricky problem trying to decide what order to teach concepts in.

      Some people go for algorithms first, others say analysis/program design. Introducing MVC too early is likely to confuse a number of students. Introducing it too late is likely to lead to frustration for others (when they get poor program design).

      I suspect some time spent evaluating good existing programs and why they are well structured would be useful.

    6. Re:About the Authors by Anonymous Coward · · Score: 0
      So you're saying that: is it me or is it that these professors are jealous that some drop out java programmer is making more money that them?

      At least they have tenure (?)

      C > Java > Ada > C++ > VB > Any MS product...

    7. Re:About the Authors by darkwing_bmf · · Score: 1

      Ada is a good language, from a language point of view. Ada compilers will find several potential problems at *compile* time due to the strongly typed nature of the language. Ada's main flaw is the lack of vast user libraries that C, C++ and Java have (although one can natively interface to libraries of certain specific languages, including C, with a wrapper like construct). If you care to learn more about *why* the language was designed the way it was I highly recommend reading the Ada 95 Rationale.

    8. Re:About the Authors by rubycodez · · Score: 1

      ada - pascal meets cobol

  10. Damaging to students maybe, but not workers by shawnmchorse · · Score: 1

    I've spent the past five years in the workplace programming primarily in Java, along with some PHP and the always ubiquitous SQL. In close to a decade now of workplace programming, I have yet to actually have a need for any systems level programming of any kind. I used to be extremely fluent in C and even dabbled with assembly language for fun, but those are skills I just don't need at work generally speaking. I'm much more likely to need to remember esoteric Linux system administration details.

    1. Re:Damaging to students maybe, but not workers by sharp-bang · · Score: 1, Insightful

      In close to a decade now of workplace programming, I have yet to actually have a need for any systems level programming of any kind.

      I wonder whether the engineers supporting your production hardware would agree with you. ;-)

      Not that being conversant in systems is important in every practical application, but, speaking as a systems engineer, I do prefer to work with developers that understand it.

      --
      #!
    2. Re:Damaging to students maybe, but not workers by synx · · Score: 1

      Agreed - you cannot develop expertly without top to bottom knowledge.

      Sure you can make something happen, but when we're talking about making systems _sing_.

      Then again, I guess you probably make good bank writing inspiring accounting systems. Grats.

    3. Re:Damaging to students maybe, but not workers by doktor-hladnjak · · Score: 2, Insightful

      ... and I've been writing almost entirely in C/C++ without any SQL since finishing undergrad over 5 years ago (grad school followed by a desktop application development job). The bottom line is that students should be learning a broad range of skills because it's hard to say where any of them are going to end up right out of school or especially within a few years of finishing school.

    4. Re:Damaging to students maybe, but not workers by someone1234 · · Score: 1

      That's why they mentioned plumbers in TFA :)
      Easily replaceable plumbers.

      --
      Patents Drive Free Software as Hurricanes Drive Construction Industry
    5. Re:Damaging to students maybe, but not workers by AuMatar · · Score: 1

      Funny- nearly 7 years here, and I've never done anything but C and C++, with a few days worth of perl a year. The industry is far wider than Java, the reason you haven't seen those jobs is because you haven't wanted to.

      As for me, if you mentioned Java in the interview I'd charge 50% more. Its hazard pay.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    6. Re:Damaging to students maybe, but not workers by anandsr · · Score: 1

      I have worked for 12 years and only for the last year used Java. For rest of the period it was plain C.
      But we are not talking of which language you need in the field. We are talking of understanding how computers work. Without C and assembly you will never get to know these. Also a Functional Language is required. I mostly skipped my Prologue, and didn't give Lisp enough importance. That has made it difficult for me to understand some types of code.

      You need to know different types of language in the very beginning to recognize different paradigms. To decide when to use which language. We are talking about Engineering course here. Teaching only java is like teaching only motors to electrical guys. You want to learn all basic techniques. It may be that you apply only one, but then you will not be out of your depth when you are put into a different place.

    7. Re:Damaging to students maybe, but not workers by LizardKing · · Score: 1

      As for me, if you mentioned Java in the interview I'd charge 50% more. Its hazard pay.

      And if I was interviewing you you wouldn't get the job, although as you state your experience is C, C++ and Perl you shouldn't even be in the running for a Java job anyway. If you were a Java coder, but felt the need for "hazard pay" then my instinct would be that your not a competent Java coder. Having done a bit of C++ before I moved from C to Java, I found I had to "unlearn" a lot of C++ in order to fit in with the more Smalltalk or Objectice-C way of doing things.

  11. Programming languages are tools, not religions. by delt0r · · Score: 4, Interesting

    There going to plenty of flames on this topic.

    As someone who programs mainly in java, I have to say they have a point. Surely a degree in CS should get someone familiar with all forms of higher order programing (both OO and functional). They should also have a reasonably solid understanding of basic hardware architecture and how that affects programs.

    Unfortunately this does not seem to be the case at least in NZ. Some don't even know about basic complexity ideas and often have little to zero mathematics under there belt.

    I did not do CS but physics. I was required to do Assembly,basic,C,matlab,R,Lisp,Java,C++,Haskell and a bunch of others I don't care to mention (Like PLC's and FPGA stuff).

    --
    If information wants to be free, why does my internet connection cost so much?
    1. Re:Programming languages are tools, not religions. by j.boulton · · Score: 1

      Having done my BSc in CS at Otago I was exposed to (roughly in order) pascal, ada, assembly, C, lisp, C++, Java, smalltalk, Haskel, prolog, SQL, python and programmed on OS7, DEC alphas, x86 Linux, HP Unix, Sun solaris. They took care to expose the students to as many different OS and languages as possible. Oddly enough can't remember doing any Win32 programming there. Anyways I agree about the lack of hardware knowledge taught during my CS course. I had finished an NZCE in electronics a couple of years earlier and was looking forward to some easy hardware credits. Didn't happen. I have ended up doing mostly embedded programming in C and wished that more embedded systems design was included in the course.

    2. Re:Programming languages are tools, not religions. by daliman · · Score: 1

      I studied CS in NZ as well; I covered Java and C largely, plus a small amount of assembly and lisp. The languages were taught only as tools to teach the ideas; after the first couple of courses we were free to write our projects in any language we saw fit, more or less.

      I was, unfortunately, required to take some calculus as well. Which seems completely redundant for almost all areas of computer science. I'd put it as a prerequisite for some limited courses, but I don't think most areas need anything above high school mathematics.

    3. Re:Programming languages are tools, not religions. by delt0r · · Score: 2, Interesting

      When employing people in the past, I have not considered them from lack of mathematics. Calculus is in fact used a lot, and is very necessary in many areas that involve programming. This is why I often favor Math and Physics Majors for programing work. The understand the problem, not just the programming. Hell even game programing often needs basic calculus (Thats above High School level).

      --
      If information wants to be free, why does my internet connection cost so much?
    4. Re:Programming languages are tools, not religions. by kudokatz · · Score: 1

      I did not do CS but physics
      That's interesting-- the other fellow computer science person around me aside from lazy graduate students is a physics major. I am currently in an engineering program . . . for computer science. I agree that a strong mathematical background should be given in Computer Science, and appreciate the requirements forcing me to understand the computational issues of linear algebra and its friends like theory, etc. To be honest, I wish I were better at physics as well as good at computer science because it seems there is a lack of liaisons between computation and physics (my physics professors couldn't program worth a dime in anything but fortran and didn't understand the fundamentals of programming).
    5. Re:Programming languages are tools, not religions. by delt0r · · Score: 1

      My programing experience was 100% self taught in physics. You have a experiment/problem to solve. You get marked on the answer not the code. Fortunately I learnt reasonably good coding style, but dam my supervisor would win a C obfuscation contest in matlab! The newer generation are defiantly better at producing readable code.

      --
      If information wants to be free, why does my internet connection cost so much?
    6. Re:Programming languages are tools, not religions. by Cederic · · Score: 1


      I've been programming since 1982, on the internet since 1992 and commercially since 1994. I've needed to use calculus as part of my software twice. Ever.

      I don't do game programming (although I used to - in the days before 3D graphics were anywhere outside an SGI workstation) and I don't do engineering solutions, and I don't do fancy UI. I accept that there are many such examples where calculus and more advanced mathematics is beneficial or even required.

      I suspect there's also a correlation between being good at maths and being good at programming.

      But calculus is not used a lot. Not when you consider all types of programming, and especially not when you consider the types of programming most programmers do.

    7. Re:Programming languages are tools, not religions. by Anonymous Coward · · Score: 0

      No offence, but how can you comment on CS degrees in NZ when you never did one?

      I did the Victoria University (Wellington) CS degree from 95-98 and it was challenging and covered all the bases that have been mentioned here.

      Stop talking out your arse about stuff you don't know and haven't experienced.

    8. Re:Programming languages are tools, not religions. by daliman · · Score: 1

      I'll admit that certain areas do need it, but I think they're in the minority. As I mentioned I have done some calculus at University, as it was compulsory; but it was useless to me in my studies and it has continued to be useless in my professional career. In the few cases I've had to hire people, mathematics has not been a consideration.

      What area are you involved with that you find maths so vital?

    9. Re:Programming languages are tools, not religions. by delt0r · · Score: 1

      Engineering(Electrical), navigation, communications, GIS and now just 100% pure scientific programming. I did do some Web stuff and databases with the banks, and hated it. The general level of code for that company was also very low.

      It really does depend on what you do. But do we really want universities just to push out programmer lackeys or fully trained Computer Scientist? I think that was TFA point. That universities are not just training trade folk. They need to be capable of more senior level science when they finish there degree. That means at least some basic math.

      Remember that I am talking quite basic math really. Only one level up from high school. I like so see that people at least know how to solve a system of linear equations using say linpack for example. Or at least knows enough math to know what to look up for more complicated problems. All just IMHO of course.

      --
      If information wants to be free, why does my internet connection cost so much?
  12. I've noticed that... by Facegarden · · Score: 2, Insightful

    I've noticed that... I'm not a CS or a CE, i'm an ME, and i build robots. I'm great at the mechanical side but i always talk to Computer Engineers or CS majors, trying to see what they can do for me, and all i've surmised is that they just aren't taught anything useful! Sure, there's probably all kinds of great theory and whatnot, and that's all very important, but at the end they should have a class that teaches them the useful stuff! I say that because the guys i've spoken to were never taught how to make ANY kind of GUI, and have no idea how to send data out a serial port (something often neglected but very useful in robotics). In fact, even the head of the Computer Engineering dept at my school (Santa Clara University, supposedly 14th in the country for engineering) didn't know how to talk to a serial port. And not teaching how to make a GUI? I mean, i know you can figure it out, but then, what is the point of school? I know not all software goes to consumers, but if it does it had better have a GUI, so why not teach at least the basics!? And hardware output - either from the serial port or programming USB peripherals - is incredibly useful, yet seems to be completely left out of today's undergrad programs, and that seems insane! What has been your experience with this stuff? -Taylor

    --
    Worldwide Military budgets: $2100 billion. Worldwide Space Exploration budgets: $38 billion. Really, world? Really?
    1. Re:I've noticed that... by Anonymous Coward · · Score: 0

      I say that because the guys i've spoken to were never taught how to make ANY kind of GUI, and have no idea how to send data out a serial port
      Well... How to do either of these depends on the operating system. A competent programmer can just look at his OS's documentation (or even google it) and know what he needs pretty quickly. Although GUI can be another issue, since it does require some level of look-and-feel aesthetics that isn't realy programming per se.

      If anything, Java helps the GUI aspect, because there is a standard way to do graphics right in the spec for the runtime libraries. My university had us coding little things in Swing freshman year.

      But... TFA is pretty right. I personally came into college knowing C already. But a lot of my classmates... Weren't so keen on pointers. This is very important if you want to do anything meaningful in systems work, or have any idea how the machine itself is working. Just as a practical example, even coding in Java one it's nice to be aware how much indirection you're using and how that will effect performance. Or allocating arrays rather than lists so that you get better caching. As for other languages... I personally always thought Lisp was pretty cool, so I did a lot of outside research on that one.
    2. Re:I've noticed that... by Anonymous Coward · · Score: 5, Insightful

      I'll answer as a computer scientist.

      I view school as bootstrapping a person to learn how to learn, and for teaching them the things that are timeless. The only reason that a popular programming language like Java is used in the first place is because something has to be used, so it may as well be that. However, many schools offer Scheme, ML, or Common Lisp as the programming language of choice when the job market is comparatively low. This is because it's seen to help the learning process. The goal isn't a marketable skill, but a vehicle to teach the timeless things like algorithms, data structures, and all those courses that have he word "theory" tacked on to the end of the titles.

      If you want someone to be a lackey and build you a GUI, you'd be better off looking for someone who has an ITT certificate. If you're looking for something more on the math side of computing (again, algorithms, analysis), then you talk to a computer scientist.

    3. Re:I've noticed that... by phugoid · · Score: 4, Insightful

      Are you suggesting that the CS curriculum should be designed around solving your little practical problems?

      I'm a Mechanical Engineer as well. Are you suggesting that _we_ should have spent our degrees studying look-up charts for HVAC ducts, or how to make nice Excel graphs? (calculus, mechanics, thermodynamics, heat transfer, ring any bells?)

    4. Re:I've noticed that... by 2Bits · · Score: 1

      Oh wow, I don't know where to start now ...

      Blasting all CE/CS graduates for not knowing shit because of one supposedly real anecdotal example? And as if making GUI and sending data down a serial port is what computer science all about?

      Give me a break. I can give you an example too. My ex-neighbor was an ME (with a master degree beside that), who knows less about his car mechanics than I do (and I'm a CS graduate), and in fact, can't even fix his house's water sink when water is leaking. I have helped fix minor problems in his car more times than he can remember. Computer science is a vast domain, not everyone knows everything. I'm pretty good in data structures and algorithms, I can come up with a good solution to most complex problems, but I'm a lousy GUI programmer too. All those listeners, decorators, etc, drive me nut. What does that speak about me? Nothing, just that GUI is not my cup of tea, I have more interest in other aspects, and most of my works are concentrated on those, that's all.

      And I bet you don't know everything about mechanics in other domains either. But I won't go to say that all MEs have learned nothing useful.

    5. Re:I've noticed that... by AuMatar · · Score: 2, Interesting

      Because how to talk to a serial port is OS dependent, and can be found out by less than 5 minutes with google for your OS of choice. Same with USB. GUIs- the vast majority of programs don't have one. Even those that do, the GUI is a small part of it. Almost every college has optional classes in it, but its a specialty field that isn't that interesting to people. If it interests you take it, but it isn't really important.

      As for the theory you callously disregaurd- that theory is what allows us to dream up ideas like GUIs, OSes, etc and implement them. Without the theory, all a CS major would be qualified for is to make a new webpage that does 90% the same thing as another webpage. Thats why theory is stressed, and they can learn individual tasks like IO reading on the job as needed.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    6. Re:I've noticed that... by shtarker · · Score: 1

      Perhaps you should be looking for Mechatronics Engineers.
      Its what I've almost finished doing at uni and all that sort of stuff is EXACTLY what we've been taught.

    7. Re:I've noticed that... by teh+kurisu · · Score: 1

      I've got a program that runs on a GSM/GPRS device that communicates over the serial port. To open the serial port, you have to pass a string that looks like "comm:com0;blocking=on;autocts=off;autorts=off;baudrate=4800". That's not the kind of thing you do a university degree to learn, that's the kind of stuff that goes in the device manual, under "Using the serial port".

      It depends on what kind of GUI you're asking them to build. A CS degree won't teach you how to build a complete GUI with only pixel manipulation to play with, for example. It'll teach the basics on pixel manipulation, it'll teach the concepts of good GUI design and will probably teach GUI building using a high-level library, but that may not be adequate for your task.

    8. Re:I've noticed that... by LizardKing · · Score: 1

      I view school as bootstrapping a person to learn how to learn, and for teaching them the things that are timeless.

      I heartily agree. I'm largely a self taught programmer (a few evening classes in C and Assembly, that's about it academically), having come from a background of history and languages. I now feel that my degree course was really a grounding in assessing the worth of source material and how to learn rather than having any direct vocational value. I still wish I had done a good CompSci degree instead though!

    9. Re:I've noticed that... by digitalgiblet · · Score: 1

      Here's the punchline...

      The vast majority of CS graduates will spend most of their time making new webpages that do 90% the same thing as other webpages...

  13. Abstraction is OK by vegardh · · Score: 1, Flamebait

    "had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all" Good, not bad, imho.

  14. They don't say "Java is bad" by koinu · · Score: 2, Informative

    The title is bad. Read the text and you will notice that they claim that "Teaching Java, as the only language, is damaging." and that might be true. I have the opinion for years now and I teach Java to students during this semester. There is far more than only Java and you can only get better the more languages you know.

    By the way, C (yes, the one without "++") is still my favorite language.

    1. Re:They don't say "Java is bad" by mws · · Score: 1
      Read the text and you will notice that they claim that "Teaching Java, as the only language, is damaging." and that might be true.

      Not exactly, the article says also:

      The slogan is a reminder of how thinking habits of programmers are influenced by the first language they learn and how hard it is to shake these habits if you do all your programming in a single language.

      And i have to admin that this is awfully true.

      I started with Basic as a child, took me some years. it was then very easy to switch to pascal (one week) and further to c (another week). After that i thought, well i can learn C++ also in one week. Yep, i read the book in one week. And what i did was a little "C with classes" but i noticed only a year later. year after year i noticed that there is more about C++ then what i thought of. After three years i managed to use STL efficiently, used exceptions properly, managed inhertitance (including multiple & virtual inheritance), did use descrutctores and smart pointer and so on. so i thought it's over, i took me three years to learn C++.

      But some years later, i read "Modern C++ Design" and noticed that there is still a lot more :)

      to cut a long story short: the first programming paradigm you learn will influence (limit?) your way of thinging quite a while.

  15. Biased? by silverhalide · · Score: 5, Informative

    This might be obvious, but take a close look at the authors of the article:

    Dr. Robert B.K. Dewar, AdaCore Inc. (President)
    Dr. Edmond Schonberg, AdaCore Inc. (Vice President).

    The article by some weird coincidence slams Java and praises Ada.

    Salt, please...

    PS, Ada is mainly alive in the Military/Aerospace industries where projects can last 20+ years.

    1. Re:Biased? by Darth_Ramirez · · Score: 1
      Indeed, they're not just some "neutral observers". However, they're making a number of points. And languages like Simula and ADA have had quite an influence in design of programming languages. One of the points they make refers to this quick-fix of your post :)

      PS, Ada is mainly alive in the Military/Aerospace industries where projects must last 20+ years.
    2. Re:Biased? by Anonymous Coward · · Score: 0

      How has Ada been influential in the design of programming languages? Seems mainly to have been a dead end.

    3. Re:Biased? by Anonymous Coward · · Score: 0

      Ada would be ideal for developing Vista then. Maybe developing it 20+ years would make Vista a better product.

      this also makes me wonder if Duke Nukem Forever is being made in Ada...

    4. Re:Biased? by KidSock · · Score: 1

      This might be obvious, but take a close look at the authors of the article:

      Dr. Robert B.K. Dewar, AdaCore Inc. (President)
      Dr. Edmond Schonberg, AdaCore Inc. (Vice President).

      The article by some weird coincidence slams Java and praises Ada.

      Salt, please...


      I tooks some CS at NYU just for kicks. Dewar wrote the i386 'debug.exe' program we used for learning assembler. He wrote it in Cobol!

      Personally I feel the only really important language to teach in CS courses is assember. That's what gives you the understanding of how the computer really works. After that, C is easy.

      Also, CS has very little to do with programming. In fact, I think CS professors are usually pretty bad programmers. And with NYU being a heavy theory school this topic is a little ironic.

      Finally, I think Java is a very good language. The libraries are getting horribly bloated and some things like thread primatives are messed up but the language itself is very nice.

    5. Re:Biased? by Anonymous Coward · · Score: 0

      I've been in the business about 30 years now. Dewar is one of the very best, most insightful and pragmatic programmers I've met or worked with in that time. Schonberg is no slouch either.

      The point of the article is not so much about particular languages as about learning the concepts needed to "engineer" software effectively. I've done a lot of training and consulting to the aerospace industry, and the management desire to cut costs by putting inexperienced and poorly educated "coders" into positions requiring analysis, while hoping to make up for it by reliance on "tools", is a nightmare. Brooks called this one in the 1960's in Mythical Man-Month: the "army of ants" approach.

      The article is a challenge to teach the concepts needed to effectively build large-scale software.

    6. Re:Biased? by Anonymous Coward · · Score: 0

      PS, Ada is mainly alive in the Military/Aerospace industries where projects can last 20+ years.

      Did you happen to notice which journal it is published in?

    7. Re:Biased? by ed.markovich · · Score: 1

      Dr. Edmond Schonberg, AdaCore Inc. (Vice President). I had him as a prof for Programming Languages in NYU and while he did spend some time on Ada, what I really walked with from that class was a much deeper understanding of the two languages I know best: Java and C++, as well as a deep new appreciation for Lisp (I was on vacation the week he talked about ML but I know he gave it a good treatment as well) He didn't slam these languages of praise Ada disproportionately. In general, it seems that his interest and passion for CS led him to Ada, rather than his association with Ada shapping his views on the other languages.

  16. Oh noes! Java is not C! by ElMiguel · · Score: 1, Interesting

    Well, of course learning Java will not help you with languages intended to be "high level assembler" like C, just like learning C will not help you with languages intended to be compiled to bytecode and executed under a VM like Java or C#. How that makes C the "solid language" and Java the usurper, I don't know. And here's a radical concept: what about learning both types of languages? You know, the purpose of education being to provide a wide-ranging vision and not just with what your teacher happens to like.

    I haven't read TFA (this being Slashdot and all), but if those professors actually mention Ada as a better language for teaching than Java, I wouldn't trust anything else they say, because they obviously stopped caring about the evolution of Computer Science at some point in the 80s.

    1. Re:Oh noes! Java is not C! by wbren · · Score: 3, Insightful

      And here's a radical concept: what about learning both types of languages? You know, the purpose of education being to provide a wide-ranging vision and not just with what your teacher happens to like.
      That's exactly what the article is saying, and clearly you are missing the point. They aren't really complaining about students that learning enough languages, but rather that students aren't being shown the bigger picture. A student can be taught how to use a linked list class in Java (or C++ for that matter), but that's not all you should know. You should also know the advantages of a linked list over, say, a dynamically-expanding array, as well as in which situation they should be used (or avoided). You should implement a linked list yourself at least once so you understand how it's done. That's just a really small example, but everything from speed optimizations (optimal buffer sizes with respect to processor caches, etc.) to enterprise-level application scalability relies on a deep knowledge of system architecture as well as language syntax.

      Many universities are simply training highly replaceable professionals, which is a big reason why outsourcing is such a problem. When two people--one in the USA, one in India, for example--have the same skills, the cheaper will be chosen (and rightly so, sorry). The point of the article is that many universities are simply training programming rather than teaching computer scientists. It's an important distinction, which some people just don't understand.
      --
      -William Brendel
    2. Re:Oh noes! Java is not C! by goose-incarnated · · Score: 1

      I haven't read TFA (this being Slashdot and all), but if those professors actually mention Ada as a better language for teaching than Java, I wouldn't trust anything else they say, because they obviously stopped caring about the evolution of Computer Science at some point in the 80s.

      I find this ironic; the reality is that anyone who feels java is superior in some unmeasurable way has obviously stopped caring about the evolution of Computer Science ...
      --
      I'm a minority race. Save your vitriol for white people.
    3. Re:Oh noes! Java is not C! by Anonymous Coward · · Score: 0

      Here we teach C first and then Java.. seems to be a good match!

    4. Re:Oh noes! Java is not C! by Anonymous Coward · · Score: 0

      They don't. They say that Java is a poor first language because it encourages people to treat programming as a plumbing problem, where students just connect together black boxes when they shoukld be learning how to decompose problems & develop algorithms.

      Then they say Java is worth teaching later because it has reasonably good concurrency and reflection models.

      C, C++, Lisp, Java and ADA are all mentioned as being worth learning. Java and ADA are at the end of the list, presumably for good reasons.

      Personally I would add a few more to the list, but we all have our pet languages.

    5. Re:Oh noes! Java is not C! by Anonymous Coward · · Score: 0

      languages intended to be "high level assembler" like C [...and...] languages intended to be compiled to bytecode and executed under a VM like Java [...] here's a radical concept: what about learning both types of languages?

      Yup, we got both kinds of music: country *and* western!
    6. Re:Oh noes! Java is not C! by holophrastic · · Score: 1

      They're not even training programming. I work in the web world these days -- it wasn't always so - and I got to fall into a fun that never appeared in my C/C++ days. Way back then, there was the compile time, the link time, the execution time, and the run time. Now, a given line of code has up to six languages in it. I get Perl, my own platform, javascript, css, html, and two caching engines. Even the mark-up levels that aren't really languages still have their own run-times. So on one line of typed "code", I get up to three compile-times and up to ten run-times -- and it can be more when one re-sparks the process in a nested fashion.

      Thankfully, my experience in way more than just Java makes it easy to keep track of ten run-times through one block of code -- each one with a different set of constraints, abilities, cautions and techniques -- oh, and bugs.

      If your university is teaching you one language, it's not a university, it's a trade school. Programming never used to be considered a trade, but at that level, it is -- hence the replacibilitynessitude.

      I started off in basic, then logo, then turing, then html/css/javascript, then C++, then C, then turbo pascal, then lisp, then lotus notes, then java, then perl. Somewhere along the way I picked up php, pov-ray, and ai-bugs -- oh and three database sql's. The best lessons I ever received were when learning turing and being forced to write by own language in it. Now I've written one platform in perl, and another in javascript, each with countless sub-languages and micro-languages within.

      But yes, I've had the pleasure of working with Java-only developers. I've seen the horror of the programmer being restricted to the boundaries of a single language. What's worse, is that they tend to be bound not only by the language, but by the abstractions that languages provides. The type of programmer that can use the replace() function, but can't write one; and so wind up chaining three dozen functions together instead of just writing a small adaptation of something as simple as a replace() function. It's the opposite of the expert perl regex programmer using one of the dozen php replace functions.

      It's just dreadful.

      But hey, it gives me a job, a career, a business, and a mission.

      Incidentally, perl is just way more fun; and that other gentleman is correct, C/C++ should never be used for A.I. algorithms. But I'd have given every penny I had to have my Lisp editor allow me to use braces, brackets, and parens equally -- I swear I lost some of my eyesight building that first neural network, even if it did take fewer than ten minutes to do.

    7. Re:Oh noes! Java is not C! by ElMiguel · · Score: 1

      That's exactly what the article is saying, and clearly you are missing the point. They aren't really complaining about students that learning enough languages, but rather that students aren't being shown the bigger picture.

      I disagree. The training/teaching thing is just a red herring they've used to make people uncritically accept their main point, which is this:

      As faculty members at New York University for decades, we have regretted the introduction of Java as a first language of instruction for most computer science majors.

      They're complaining about Java being used as the introductory programming language for people who didn't previously know programming. They would like to saddle new programmers with such concepts as pointers and hardware-based optimisation (as opposed to optimisation based on computational complexity), or worse, with the pointlessly verbose and annoying syntax of Ada. Of course, that would benefit those professors as they've commited themselves to technologies that demand those particular skills. I'm not so sure it would benefit the students, and those concepts certainly don't belong in an introductory programming course, which is for example why MIT has long introduced people to programming using Lisp, which doesn't have pointers or complex syntax.

      But then again, what can you expect from guys like these professors who say things like this with (I assume) a straight face:

      Ada is the language of software engineering par excellence.

      Excuse me while I puke.

    8. Re:Oh noes! Java is not C! by arodland · · Score: 1

      Actually I'm going to have to disagree here. Learning a nice high-level language probably won't go far to improve your C skills, but learning C (and I don't just mean knowing the language, but actually being able to solve problems with it) will help you use your favorite high-level language effectively. Learn C and optionally assembler to understand things from a bits-and-bytes perspective. Learn an "academic" language to understand things from a mathematical perspective. And learn a modern mainstream language to use every day. (Alternately, go ahead and write kernels and VMs and mars probes in C, or write academic papers about Haskell. I can only provide my own perspective).

    9. Re:Oh noes! Java is not C! by ElMiguel · · Score: 1

      learning C (and I don't just mean knowing the language, but actually being able to solve problems with it) will help you use your favorite high-level language effectively

      I don't think the distinction is so much low-level vs. high-level as statically compiled to machine code vs. translated into byte-code and then interpreted/dynamically compiled by a JIT compiler. You can mostly predict what a C/C++ compiler is going to transform your code into and how the CPU is going to execute the result, but doing that for languages such as Java or C# is much more difficult, not to mention interpreted languages where the execution costs mostly depend on the interpreter implementation and can change from version to version.

      I have quite a bit of experience in C, C++ and assembler, and I enjoy coding in those languages when their use is justified. But what many experienced (read old) programmers refuse to acknowledge is that the areas where their use is justified are continually shrinking. Sure, you wouldn't write kernel code in Java (although I sure somebody will try), but how many people write kernel code for a living?

  17. I Agree by Anonymous Coward · · Score: 0

    Java programmers know one thing: Type code in a box and press the play button.

    1. Re:I Agree by jim.hansson · · Score: 1

      it's not only java code that should be executed in a sandbox, java ONLY programmer's should also be executed in a sandbox :-)

      --
      preview button, my computer does't have any preview button
    2. Re:I Agree by geminidomino · · Score: 1

      Wow... that mental image was mildly disturbing...

      *Scene: A suburban playground with a large sandbox. Two toddlers make sandcastles, their father kneeling between them. A long, black sedan with tinted windows pulls up. Two men in black suits with ear pieces and dark aviator sunglasses step out of the car and approach the sandbox. The father looks up and his eyes widen a split second before a silenced .45 sends a slug between his eyes. He falls forward, wrecking the sandcastle. The children look up, tears in their eyes.

      Kid 1: Why did you hurt our daddy?

      MIB: He was a java-only programmer.

      Kid 2: Oh, ok...

      *Children begin rebuilding sandcastle.

    3. Re:I Agree by Anonymous Coward · · Score: 0

      The blood will help it stick together. I'm not sure how you can use that fact to extend an analogy... but I feel that it's there somewhere.

  18. Different goals by Secret+Rabbit · · Score: 3, Insightful

    In a College for a 2-yr Programming Diploma, this would be fine because the goal of such a program is just writing some business application or some such. Nothing that requires any real competence.

    On the other hand, Universities have a much different end goal. They want to teach such that completing there program means that the student can go onto a Masters program, etc. Obviously, Java won't get students there without a massive amount of pain if they go on to further study.

    Well, at least that how it was, and how it should be. Currently, Universities are edging toward the College level. What this has produced is a massive gap in knowledge/skill of where the student is expected to be and where they actually are upon entering a Graduate program.

    Unfortunately, this isn't just in CS. More and more I see Mathematics and Physics programs degrading as well. From what I've seen, this is due to Administration applying... pressure for high grades, etc. No grades, no funding. The cycle continues.

    Though, I must point out that there are some Departments that are making an attempt at fighting back. Small in number they may be, there is still hope for a return to actual academics. Though, we'll see how that plays out. You never know, I wouldn't put it beyond a spiteful Administration to turn a Department into offering just service courses.

  19. This liberal arts major agrees by Anonymous Coward · · Score: 0

    As an English major who now works in CS (laff it up, chuckles), I completely agree. My college experience, with just a CS *minor*, started me in C, moved to C++, branched into different assembly types, went to MATLAB, on to some theoretical garbage that's not an actual, usable language (can't remember the name), and then, finally, java.

    Java is useful, but.... God. If I were a Java-bred programmer when I was asked to learn Perl, Coldfusion, and ASP at my first coding job... I would have been screwed.

  20. Java brings out the best and Worst in you by freedom_india · · Score: 2, Interesting

    For the record, the same professors said the same thing when C++ was in vogue. They also said the same thing when C was popular.
    To take apart their argument by logic:
    1. Java is an abstraction a VM over the hardware. People who study comp sci, today are of three kinds:
    a) Those who want to be a programmer and then a Project Mgr.
    b) Those who want to maintain hardware and/or design new ones. iPod maybe.
    c) Those want to manage systems (20% hardware: 80% software).

    For the first kind, Java is a better choice because: It does not force you to dig down to machine-code which is unnecessary today. Much like car driving in 1920s and 1990s. It teaches you the best of programming by forcing you to think in terms of objects and how to act upon them in real-world. If you mess up, you don't overwrite the root disk thus causing innumerous references to the time-worn joke about shooting in one's foot.
    It also teaches you GUI writing is tougher by way of its MVC programming. At this time, programmers can be split into real men or MSFT weenies: real men would go to Java in Server-world. Weenies would love GUI and goto VB.

    It also teaches you the worst in programming: Forcing you to think only in OO way.

    The second kinds is better off learning C or even Assembly.

    The third kind is tricky: There are lots of management tools nowadays. Some of them written in Java. if they want to write their plugins easily, then Java is the way to go.

    2) Java is one more step in evolution which normally the professors hate because it moves them away from the machine. But mankind has more important things to do (watching LOST and Sopranos) than twiddling with RPG.

    3) Blaming Java alone for problems is like blaming the Sea for causing Katrinas.

    Lastly if anyone should be blamed for warping the minds of youngsters permanently, it should MSFT with its Visual Basic system.

    --
    "Doing what i can, with what i have." ~ Burt Gummer
    1. Re:Java brings out the best and Worst in you by tolomea · · Score: 1

      Java is one more step in evolution which normally the professors hate because it moves them away from the machine. In the quote in the summary they mention LISP which is so far abstracted from the hardware that it makes Java look like a form of assembly.
    2. Re:Java brings out the best and Worst in you by Darth_Ramirez · · Score: 1

      I think you're a bit narrowminded about the abilities required for the first "category" which is pretty broad - it can potentially include as much as anybody who enrolls in CS. Let me remind you that very few first year CS students have a clue about what their career will be - so the wisest approach, rather than taking tests of 18-year-old people in order to efficiently classify them as I, II or III, is to "teach them how to learn new stuff" (as has been pointed elsewhere in this discussion).

      You labeled category I as "programmer/potential project manager". This encroaches, let's say, 80 to 90% of all IT development today. Which is much more varied than just developing business applications with a front-end on the Internet. What Category I needs (as well as II) is to acquire the "know how to learn" skill. This allows future professionals willing to adapt to avoid getting obsolete. And this skill implies that people need to have an "open mind" about what tool is best for a certain task, which requires that they're somewhat competent in a not too wide, not too narrow set of programming languages. These guys http://tinyurl.com/3dvm3r/ make this point far better than myself.

      We really need to offer them the opportunity to switch careers later in their lifes instead of sending masses of "one trick horses" into the fauces of IT consulting companies, which will find them easily replaceable...

    3. Re:Java brings out the best and Worst in you by larien · · Score: 1
      The problem with Java is it does a lot of hand-holding. You don't have to worry about memory leaks because it does Garbage Collection (yes, I know that's a simplification, but...), you don't have to worry much about casting types, you don't need to worry about pointer, etc, etc. I used to do sysadmin stuff at a university and I wasn't happy when they decided to push all their programming into Java because I could see it would remove people's ability to write good code. I could foresee graduates hitting the workfloor and writing buggy, leaky code because they'd code C++ as if it was Java without knowing the issues around it.

      Now, if you want to use Java for whatever reason, that's fine, but graduates should have the knowledge to write software using pointers & memory management. It's safer to move from C++ to Java than Java to C++.

    4. Re:Java brings out the best and Worst in you by Anonymous Coward · · Score: 0

      d) those who want to become theoretical computer scientists and like functional languages

    5. Re:Java brings out the best and Worst in you by Anonymous Coward · · Score: 0

      Hey Hey now. VB is great if you just want to dish something up in 50 seconds and try it out!

      Let me say. I can cite a bunch of kids who started with VB6 in high school. Of course all of us have moved on to better things like learning the rest of the languages out there that are either worth learning or we are forced to learn through work.

      In fact, I'd say it's one of the best languages to mess with windows GUI and win32 api. I'm the kid who would make the windows START button, the close buttons and other buttons disappear by calling the corresponding win32api and the correct hwnd.

      c# has some nice features. We all know it's a rip on java, but if it's got some extra useful features you can use, it's not hard to temporarily convert, especially with all the .NETJava distiller type projects on sourceforge.

    6. Re:Java brings out the best and Worst in you by ardor · · Score: 3, Interesting

      Java is one more step in evolution which normally the professors hate because it moves them away from the machine. But mankind has more important things to do (watching LOST and Sopranos) than twiddling with RPG.

      Wrong. Java is a step *back*. Not because of the abstraction, mind you, but simply because Java is such a severely limited language. 30-40 years ago amazing new things were developed in CS, none of these are included in Java. Lambda? Map-Reduce? Purely functional code? Caml-style pattern matching? Conditions? People say Java made C++ obsolete, which is completely wrong, since C++ is far more powerful than Java (thanks to generic programming and metaprogramming). Just have a look at Boost, or C++0x, and try to replicate the features in Java - WITHOUT runtime overhead (this is one key feature of generic/meta programming - a lot of computation can be done at *compile*-time).

      Actually, the next step in evolution should be Lisp, since it is one of the the most powerful and flexible languages in existence. There is nothing in the language that intrinsically prohibits Lisp performing as well as C++, its mostly the tools that lack development (for comparison, g++ has had a hell of a lot of improvements; the 2.x series was awful). If you avoid certain things like eval, Lisp code can be optimized well enough. There is a Scheme compiler called Stalin which does just that, and it can even outperform comparable C code.

      So, if you want to abstract away from the machine, why use Java instead of Lisp?
      IMO there are other reasons for Java:
      1) its a braindead easy language.
      2) you only need mediocre programmers, since Java is easy enough for them, and there are much more mediocre programmers than good ones.
      3) as a consequence, programmers are expendable, jobs can be outsourced etc. One C++/Lisp/Haskell expert could replace an entire Java team. Not good for the company, since this guy becomes indispensable, and can demand more salary etc.
      4) Universities can claim to have more success in teaching, since the number of guys with a CS degree is higher.
      5) Companies need less teaching courses, because of (1).
      6) Java has been overhyped for a while now, and many CTOs are so clueless, they just buy into it.

      Well, you can disagree at my opinion about Java, but it is a fact that CS students *should* learn about the functional paradigm, what lambdas are, closures, and so on as well as what pointers are, how the memory works, what the garbage collector actually does etc. However, this is not the case - and THIS is a serious problem.

      --
      This sig does not contain any SCO code.
    7. Re:Java brings out the best and Worst in you by shutdown+-p+now · · Score: 1

      Wrong. Java is a step *back*. Not because of the abstraction, mind you, but simply because Java is such a severely limited language. 30-40 years ago amazing new things were developed in CS, none of these are included in Java. Lambda? Map-Reduce? Purely functional code? Caml-style pattern matching? Conditions?
      These are all great things, and they are now finding their way into the mainstream. Have you seen seen the lambdas in C# 3.0? a pity type inference there is still so basic, but I guess it's the beginning...

      However, you are correct on the second point as well: programs written using all these language features require someone equally proficient in them to debug and maintain. And not everyone can handle Haskell, unfortunately. But there are also such issues as IDE and debugger support: ever seen a decent autocompleting editor for C++, the one that could handle Boost.Lambda and such? How about debugging a four-level nested boost::bind functor stored in a boost::function and invoked by std::sort?

    8. Re:Java brings out the best and Worst in you by ardor · · Score: 1

      However, you are correct on the second point as well: programs written using all these language features require someone equally proficient in them to debug and maintain.

      Which brings up an important issue: advanced features means more intrinsic complexity. Four-level nested boost::bind is a sure way to a lunatic asylum :), but its getting a lot easier with C++0x concepts. Still, Java chose the simple way: dumb it down. Unfortunately, it means that A+ developers either never develop their potential to the max, or are quite frustrated with the language.

      Well, if C# adopts at least some of the features, things start to look better. A highly-optimized Lisp toolchain, a finished D 2.0 with a decent toolchain, and a C# with C++/D-style generic programming & metaprogramming (without the sick C++ syntax) are on my personal wish list.

      --
      This sig does not contain any SCO code.
    9. Re:Java brings out the best and Worst in you by Wolvey · · Score: 1

      "Lastly if anyone should be blamed for warping the minds of youngsters permanently, it should MSFT with its Visual Basic system."

      My first languages were, in order:
      1. Hypercard on the Mac (if you call that programming)
      2. TI-Basic, because writing and playing Space Invaders on my calculator was more fun than classwork
      3. Visual Basic (somewhat concurrent to #2)

      I've since written a 3D game engine from scratch in C++, as well as several business apps in Java, C#, etc. VB does not warp the young mind permanently.

    10. Re:Java brings out the best and Worst in you by akayani · · Score: 1

      "Java is such a severely limited language." I think that is over the top as a statement. Sure there are some people who will go on to work for some mega corp writing an OS or application. But there is plenty of the activity in web design, modifying applications and writing macros. Java >> ActionScript >> JavaScript >> VBA >> PHP >> Ruby >> .Net I'm not going to be involved in a rewrite of Word or an OS. Java is twisted enough to provide a really decent foundation in programming for many of us dumb pricks who just want to make stuff that works. Blanket generalisations don't really add much to the debate. Any uni experience should be based on teaching people how to learn. No matter what the language that is being taught what is most important is that you are NOT spoon feed. What important is that your taught how to learn a language. And whatever you might learn is unlikely to be what you will be using in 10 years time. Life long learning - that's the goal.

    11. Re:Java brings out the best and Worst in you by shutdown+-p+now · · Score: 1

      Well, if C# adopts at least some of the features, things start to look better. A highly-optimized Lisp toolchain, a finished D 2.0 with a decent toolchain, and a C# with C++/D-style generic programming & metaprogramming (without the sick C++ syntax) are on my personal wish list.
      It's all about the libraries and frameworks. There are plenty of academic and hobbyist toy languages by now that implement very advanced concepts. The problem is that, if you actually want to get anything done, you have to use the language that can use some existing library - or else rewrite it from scratch. And writing e.g. a decent UI toolkit or a database abstraction layer is no simple task. End result is, everyone uses mainstream languages, be it C++, Java, or C#. So I'm afraid we are stuck to these for now (and whatever comes after them - but don't expect anything like Lisp...), and our only hope is that they incorporate the more sensible features from the existing toy languages. C# seems to be getting there pretty fast, and it looks like Java guys have finally understood that they have to follow, or become irrelevant in a few years. C++ is also improving, albeit at a much slower pace (design by committee, eek...), but concepts alone are well worth the wait. D, I wouldn't hope much for - it's nowhere near being a mainstream programming language now, and doesn't seem to be making much progress either.
    12. Re:Java brings out the best and Worst in you by ardor · · Score: 1

      Its actually not over the top. Even C# is more advanced - and it started as a Java clone.
      In fact, C# is getting lambdas, and F# will be a Caml adoption. .Net is moving on, the Java crowd still think that keeping it primitive is the best way to go.

      You mention the need for writing "stuff that works". Well, my goal is not to write stuff in the most complicated way possible just because the code looks cool. On the contrary; knowledge about more paradigma and techniques means more tools for development, and you can easily find a better tool to a job. If you only know the theoretical patterns Java offers, you know very little. Both because of the Java limitations and because Java coders are drilled to use the standard library. In the minds of many graduates, if its not in the standard library, then it cannot be done. This cannot be good.

      And sorry, sooner or later you HAVE to know at least a bit about how a computer works, how memory works, how pointers work. This is not a C legacy, this is fundamental knowledge, and should be mandatory even if you are only going to use Java in your job.

      I agree with you about learning how to learn.
      However, it is sorely missing. Sadly, many universities have become Java code monkey factories. No, students should not learn everything to a "T", BUT they should get the basics. So many coders don't even know the features I mentioned EXIST. When they start their careers, they will most likely learn vertically, e.g. extend their current knowledge, BUT not horizontally (completely new stuff). The university should help you find the directions, right now they only point towards Java.

      --
      This sig does not contain any SCO code.
    13. Re:Java brings out the best and Worst in you by akayani · · Score: 1

      https://www.open.edu.au/wps/portal/What_to_study_qualifications/?WCM_GLOBAL_CONTEXT=/wps/wcm/connect/OUA2/What+to+study/Qualifications/Qualification_Data/RMI_CPT_DEG Must be an American trend as it is not reflected in reality in Australia. Java is used by universities as the forerunner to C. You could spend 10 years studying Java or C# or C++ and still have more to learn. The real question that should be asked is are universities tuning out graduates in computer languages in the correct ratio to match where jobs are in industry. Likely the answer is that computer skills should be trained using part uni and part workplace apprenticeships. That usually helps to get the mix right.

    14. Re:Java brings out the best and Worst in you by kafros · · Score: 1

      So Java being easy is a "deficiency" somehow?

      Next time my boss walks in and announces that he signed up with a new customer for a product we do NOT have (and also promised that we will deliver in 2 months), I will surely step up and propose we write it in a C++/lisp hybrid like real men do.

      Cynicism aside, it is the real business world demands on development that necessitate usage of languages like Java and C# (apart from OS, compilers, games, and some real time systems).

      If you work for a "when it is done" company you are a lucky minority and you may use whatever tools will make the product more complete/fast/secure. I don't. I have great use for junior programmers with a good understanding of OO, even if they don't understand memory allocation very well. If they are good in C, C++, all the better. But not knowing the later will not deny them a programming position.

    15. Re:Java brings out the best and Worst in you by ardor · · Score: 1

      You obviously didn't understand my reply.

      "Easy" does not necessarily mean "as feature-stripped as Java". Python, too, is easy, but far more powerful and flexible. (Unfortunately, it is also quite slow, even with Psyco.) Java just does not offer much - and PLEASE, do not confuse the standard library with the language. It doesn't have to compete with Lisp, but as said, even C# is adding features which are sorely missing in Java.

      Also, OF COURSE one has little choice when a job position requires Java. I did not deny this. And I KNOW "real business" usually demands C#/Java. I even mentioned the reasons why. It does not invalidate any of my points. It is very VERY bad if CS students never use anything else than Java. Java is a mediocre language, made for your "real business". It is a necessary evil we have to live with. Fine. But please, don't sell it as a new revelation or something. Maybe someday the Java folks finally let the language evolve into something better, but I wouldn't hold my breath.

      Java may be the next step in the evolution of the expendable "real business" code-monkey, but it is a step back for CS.

      --
      This sig does not contain any SCO code.
  21. Safety and Security by sharp-bang · · Score: 0

    "he resulting set of skills [from today's educational practices] is insufficient for today's software industry (in particular for safety and security purposes)

    Seconded. Speaking professionally, the number of programmers I trust to write a secure/stable application is vastly smaller than the number I would trust to whip up a typical business app, and a profound lack of appreciation for the relevant system details is usually the reason why. But it's a big leap to blame that on Java - the more general academic trend of dumbing down curricula (at least in the US) is more suspect.

    --
    #!
  22. Pascal was the first language in my day by putaro · · Score: 1

    I went to UCSD back in the mid 80's. Our intro CS class back then was Pascal (UCSD P-System on IBM PC's baby!). As I recall, Pascal pointers are about midway between Java object references and C pointers. You can't just slam values into them but you can do pointer arithmetic and wind up accessing weird places. I remember lots of students having problems with pointers. I had a lot of experience writing BASIC code and also assembler (6502 & PDP-11). Thanks to my assembler experience pointers were not a problem for me but recursion looked like voodoo and I was not comfortable with it. The next programming class, though, was PDP-11 assembler. If you survived that you were good to go.

    Those were the last classes the CS department offered that focused on learning a programming language. The Math department offered a C course that I took which helped a lot. As part of our Data Structures class we were supposed to pick up C++ and object-oriented programming. I still hate C++ thanks to Stroustrup's buggy cfront C++->C compiler.

    I don't think there's anything wrong with Java as a first language. You can come up with pros and cons for just about any language as a first language. It sounds like the real problem is a lack of breadth. Java plus some assembler and then maybe some LISP or Prolog and you should be ready for just about anything.

    These guys seem to think that ADA is the answer though you'll note that they also own an ADA related company. At UCSD back then we had a comparative languages class that covered a bunch of different languages including ADA. The prof was a big ADA fan and had in fact developed an ADA compiler. Unfortunately no one was allowed to use it since it had a habit of crashing the VAX (why I don't know - it was a rumor floating around). So, for us to do ADA we were supposed to write ADA and then follow a set of rules for transforming it, by hand, into Pascal. Most of us just wound up writing some Pascal that worked and then back translating it into ADA.

    1. Re:Pascal was the first language in my day by Anonymous Coward · · Score: 0

      Yeah, except the name of the language is "Ada," not ADA.

  23. Variety by andy753421 · · Score: 4, Interesting

    Where I go to school, just this year we switched from teaching the introductory classes in Java to a combination of Python, then C, then Java. I think that this is much better than using any particular one of those languages the whole time. It gives the student experience with more different concepts and from that I think they can begin to see how everything works together. Also, starting with something simpler than Java/Eclipse seems to make it a lot easier the first few weeks of the course.

    One thing I have noticed though, is a complete lack of security related training. Something about calling eval() on every input just to parse integers makes me cringe. I guess the idea is that worrying to much standard practices keeps people from thinking creatively or something. Unfortunately, it also seems like a good way to get into a lot of bad habits.

    1. Re:Variety by framauro13 · · Score: 1
      I do agree that while I consider myself a "Java guy", I don't really think it should be a students first introduction to programming. To really understand Java and what's going on, you need to have a basic level of understanding of object oriented programming.

      BSU (just around the corner from Rose ;)) used to teach C++ as the basic programming 120 course. Introductions to the basic concepts (variables, looping, arrays, IO, basic operations) were covered and data structures weren't introduced until AFTER that course had been completed. At that point, the data structures class was taught with Java, a perfect time to introduce the language.

      I've heard that now BSU is debating on switching to Java as the introduction language, and I have to say I really, really, disagree with that. It's hard enough learning what "compile" means, or how to iterate through an array when you have no programming experience, let alone understand why your code has to be declared with a package name, a class definition, and public static void main(String args[]), or why basic console output has to be qualified with System.out.println("").

      I guess the idea is that worrying to much standard practices keeps people from thinking creatively or something. Unfortunately, it also seems like a good way to get into a lot of bad habits. Having graduated and working in the actual IT world, best practices are actually GOOD habits, and something that most programmers don't seem to understand. They always think they can be creative and that they know better than already established practices and design patterns, and this can lead to truly horrendous code. This is why, as a consultant, I always will have a job. Good to think outside of the box, but unless you're working for a software development company trying to write the Google of tomorrow, I'd stick with the best practices.
      --
      In an effort to conform with internet communication standards, please note that the above comment is 100% biased opinion
    2. Re:Variety by Anonymous Coward · · Score: 0

      My school(http://www.uiuc.edu/) only teaches Java in it's entry level CS class (CS125). Data Structures are C++, the rest is primarily in C, though I did have programming languages and compilers course that was in Objective Camel, and a numerical methods course that used Matlab, and another course with some assembly. We also had a sequence of 3 theory courses that tend to be complained about, covering discrete math, algorithms, and automata. The large amount of languages used there enables students to pick up new languages easier after graduation.

    3. Re:Variety by Mock · · Score: 1

      Silly practices like commenting every line of code, no matter how pointless:

      // create counting variable and initialize it to 0
              int count = 0; // create a variable
              int a; // create b variable
              int b; // loop
              do
              { // get result of a_func
                      a = a_func(); // get result of b_func
                      b = b_func(); // print the product
                      printf("%d\n", (a*b));
              } // loop until counter is 10
              while count

      The problem is not just a lack in teaching; it's a lack in thought on the part of the taught as well. When you churn out drones, they tend to act like drones.

      Kinda like the tag parser in slashdot, which can't tell the difference between an end tag and a double-slash comment, swallowing a newline instead and screwing up the code section above. Ever hear of bison, guys?

    4. Re:Variety by Anonymous Coward · · Score: 0

      Hey there fellow Rose student. I'd agree with you that a variety of languages is advantageous, but the one we have is horribly broken (mostly because it includes Java)--a saner progression might be Python, then C and Common Lisp, maybe with Haskell in there as well. The use breakdown might go like this: C for low-level stuff (OS being the canonical example), Python for the earlier algorithms courses (where it's important to focus on the algorithms rather than the implementations--230 is only difficult because it's in Java, not because the ideas are difficult), Haskell if applicable for the higher-level algorithms courses where the cleanliness of expression really pays off, and Common Lisp for general-purpose use.

      I guess the first step is to convince Claude Anderson to write that book he's been talking about (or maybe it was just Clifton talking about it).

  24. Right on! by conares · · Score: 0, Flamebait

    OK....really, anyone with a real intrest will figure this stuff out in one month collage/university right? I mean teachers, professors and the like are no diffrent than the ppl working at McDonalds, its just a job - the less work the better. I knew C, python, php and that stuff before going to "collage"..I quit after 1 year of watching half of the class strugling with even the simplest hello-world shit out there. I just couldnt belive it was going to be so beginner friendly. Fuck I dont care if I'm working in burger king when I'm 60, but I'm not going to sit there and do extra hello-world shit just cause I'm 50 assignments ahead of the rest....fuck you collage idiots!

    --
    That, that really grinds my gears!
    1. Re:Right on! by putaro · · Score: 4, Insightful

      .fuck you collage idiots Well, the problem is that you want to a collage. That's a bunch of stuff pasted together by art majors. If you had gone to a college, or perhaps a university, you would have learned stuff beyond programming such as data structures, compiler theory, etc. Programming, especially in any particular language, is a skill, like plumbing or electrical wiring. Knowing the theory behind it is education. I was a decent programmer when I started college. All the theory and stuff that I learned in college didn't seem that useful at the time but as I've gone along in my career it's definitely the difference between being a code monkey and being someone who can design systems.
    2. Re:Right on! by conares · · Score: 1

      lol yea sorry meant college. anyways from the class I was in, not one person from the class is working in anything IT related and quite a few never graduated. And jesus christ if I was forced to use anything those idiots made......

      --
      That, that really grinds my gears!
    3. Re:Right on! by Anonymous Coward · · Score: 0

      Can I have fries with that?

    4. Re:Right on! by Rakshasa+Taisab · · Score: 1

      If you really were 50 assignments ahead, you'd be spending an hour a week doing the assignments and the rest of the time sleeping at the lectures and/or working on your own stuff. Besides, you should already be overworked from all those other classes to care about the introductory class only requiring token effort on your part?

      --
      - These characters were randomly selected.
    5. Re:Right on! by putaro · · Score: 1

      Sounds like "collage" wasn't a bad description for where you went. Seriously, though, if you're interested in really learning about computers you should consider a CS degree from a better university.

    6. Re:Right on! by DeeQ · · Score: 1

      Fuck you collage idiots I thought these people were going to college for computer related things not art?
    7. Re:Right on! by kudokatz · · Score: 1

      I'm just waiting for somebody who didn't learn the foundations and theory to claim they have a solution to the halting problem . . . now how many people would buy their product? Probably way too many.

    8. Re:Right on! by Chris+Burke · · Score: 1

      I just couldnt belive it was going to be so beginner friendly.

      It would be utterly ridiculous for them to expect everyone to walk into college already fluent in multiple programming languages.

      It's a shame you quit after 1 year, because after establishing the (for you extremely boring and redundant) foundation, they get into a lot of important concepts that would probably have been very useful for you.

      If it was that painful then you could have tried to do what I did and talked to the head of the department and tried to talk them into letting you bypass some of the intro-level stuff.

      --

      The enemies of Democracy are
    9. Re:Right on! by Anonymous Coward · · Score: 0

      Well if you'd spent that first year trying to screw the hot ones you would probably have had a better time.

    10. Re:Right on! by Anonymous Coward · · Score: 0

      "Well, the problem is that you want to a collage." ...and that is where I stopped reading the obviously educational post that was made.

  25. Pointers, References and Performance by Anonymous Coward · · Score: 0, Troll

    Java is all about pointers actually. Everything that is not an atomic type (int/long) is actually a pointer. They even call that a reference! Hah, people go use C++ for a while.

    And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance. Need a simple int[2] for the pipe(2) syscall? (let's just assume it, even if Java does not have)?

    try {
            int fds[2] = new int[2];
            pipe(fd); /* still check return value */
    } catch (memoryAllocationErrorOrSo) { ...
    }

    Why does this need to be so complicated, where all C needs is:

    int fds[2];
    pipe(fds); /* still check return value */

    And what about if you wanted to create an object on the stack? Too bad Java can't do that.

    And then there is this garbage collector that professors swarm about. Does it handle circles?

    public class Foo {
            Foo other;
            public void f(void) {
                    other = new Foo();
                    other.other = this;
            }
            public static void main(String args[]) {
                    {
                            Foo bar = new Foo();
                    } /* what about the memory now - was the GC smart enough? */
            }
    }

    1. Re:Pointers, References and Performance by Mr2001 · · Score: 4, Informative

      And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance. Need a simple int[2] for the pipe(2) syscall? (let's just assume it, even if Java does not have)?

      try {
                      int fds[2] = new int[2];
                      pipe(fd); /* still check return value */
      } catch (memoryAllocationErrorOrSo) { ...
      }

      Why does this need to be so complicated [...] It doesn't. You've made it more complicated than it needs to be, by putting in an exception handler. What are you going to do in the unlikely event that there is an exception, anyway - fix it somehow? Free up another 8 bytes of memory to make room? Just remove that try statement, and let the exception be caught by your top level handler.

      And then there is this garbage collector that professors swarm about. Does it handle circles? Yes, it does. It's not a reference counter, it's a garbage collector. It collects garbage, i.e. any heap object that can't be reached by following a chain of references from a root reference (like a local variable, a static field, or an instance field of any non-garbage object). A modern GC won't be fooled by two garbage objects holding references to each other.
      --
      Visual IRC: Fast. Powerful. Free.
    2. Re:Pointers, References and Performance by huge · · Score: 1

      It doesn't. You've made it more complicated than it needs to be, by putting in an exception handler. What are you going to do in the unlikely event that there is an exception, anyway - fix it somehow? Fail gracefully? I mean, at least attempt to close the open files, sockets and whatnot. Usually the general clean up can be done in top level handler but there might be some specific items that are easier to clean up within that function than try create a magical top level handler that can perform clean abort from every possible state.

      First do the function specific clean up and then abort the application, task, thread or whatever relevant to that exception using general clean up function or top level handler.
      --
      -- Reality checks don't bounce.
    3. Re:Pointers, References and Performance by MythMoth · · Score: 2, Insightful

      Fail gracefully? I mean, at least attempt to close the open files, sockets and whatnot They weren't opened in the shown try block, so closing them in its catch block wouldn't be appropriate; there should be a higher level try/catch to handle this. At the point of failure shown there's nothing much that can be done, and I agree that the AC was adding complexity to bolster a completely bogus argument.
      --
      --- These are not words: wierd, genious, rediculous
    4. Re:Pointers, References and Performance by Anonymous Coward · · Score: 0

      What are you going to do in the unlikely event that there is an exception, anyway - fix it somehow?

      Log the problem, wait then try again after a pre-determined time? It's a pipe. It'll be communicating with something else. It may not be fatal if you can't talk to that other process right now.

      Darn code monkey Java weanies.

    5. Re:Pointers, References and Performance by ardor · · Score: 1

      Just remove that try statement, and let the exception be caught by your top level handler.

      Well, the whole point is that this exception should not be necessary at all. Just have 2 ints on the stack...

      --
      This sig does not contain any SCO code.
    6. Re:Pointers, References and Performance by mrvan · · Score: 1

      Does the C code fail gracefully? If not, you are comparing apples to oranges.

      If it does, it does so because it checks the function result. catching an error is a clearer way to do exception handling than checking non-zero return value, and is not necessary slower (depending on implementation and exception frequency). If the java code has to both check the exception and check the result, than either the result is meaningful (so the semantics get completely messed up in the C case) or the java library call sucks. Neither case is java's fault.

    7. Re:Pointers, References and Performance by shutdown+-p+now · · Score: 1

      Why does this need to be so complicated, where all C needs is:

      int fds[2];
      pipe(fds);
      Yeah, except that in C, you can just as well write:

      int fds[<b>1</b>];
      pipe(fds);
      And compiler won't complain at all.

      This isn't to say that Java has all the deficiencies you mention. It's good to remember, though, that both C and C++ are also pretty bad as far as language design goes. Their only positive side is that they allow you to do a lot of low-level things. Their big trouble is that they allow quite a few things which are outright nonsensical, and occasionally make the seemingly-working-but-broken code easier to write than proper code. (Do you know what's the proper way to get a pointer to byte representation of a POD object in C++? reinterpret_cast<char*>(&obj)? Nah, that's UB. The proper way is static_cast<char*>(static_cast<void*>(&obj))).

    8. Re:Pointers, References and Performance by jeremyp · · Score: 1

      If I had a penny for every time I've found this bug in somebody else's C code (or mine, to be fair):

      int fds[2];

      pipe(fds) ;
      return fds ;

      I'd have £2.42

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    9. Re:Pointers, References and Performance by VGPowerlord · · Score: 1

      OutOfMemoryError is not an exception and thus is not required to be caught. In fact, Sun recommends that you don't try to catch errors.

      --
      GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    10. Re:Pointers, References and Performance by egomaniac · · Score: 3, Informative

      Well, the whole point is that this exception should not be necessary at all. Just have 2 ints on the stack...

      Of course, because while it's possible to run out of of heap space (implying a possible OutOfMemoryError), computers have had infinite stacks since the 1960s. Simply by moving the memory over to the stack, you can't possibly run out anymore! It's brilliant!

      Hint: it's all the same memory. Your desperate desire to have the bytes come out of the "stack" bucket instead of the "heap" bucket is simply irrational.

      --
      ZFS: because love is never having to say fsck
    11. Re:Pointers, References and Performance by Abcd1234 · · Score: 1

      You're gonna try again later after an OOM fault? Really? Because, something tells me, odds are, you won't get that opportunity. So why the hell bother? Other than to increase code bulk and decrease the chance that you'll get high levels of code coverage during testing.

    12. Re:Pointers, References and Performance by Mr2001 · · Score: 2, Informative

      Well, the whole point is that this exception should not be necessary at all. Just have 2 ints on the stack... As another response pointed out, you can run out of stack space just as easily as you'd run out of heap space, and running out of stack is even less graceful.

      With a modern GC, allocating on the heap is basically the same operation as allocating on the stack anyway: just advance the top-of-heap pointer. Not really a performance issue, unless you're running it inside a tight loop where you want to avoid triggering a collection.
      --
      Visual IRC: Fast. Powerful. Free.
    13. Re:Pointers, References and Performance by Tangent128 · · Score: 1

      And then there is this garbage collector that professors swarm about. Does it handle circles?

      public class Foo {
      Foo other;
      public void f(void) {
      other = new Foo();
      other.other = this;
      }
      public static void main(String args[]) {
      Foo bar = new Foo();
      /* what about the memory now - was the GC smart enough? */
      }
      }
      Firstly, the garbage collecter does handle that.

      Secondly, that's not even an issue in the given code. The class specifies no constructor, so the "new Foo();" in main just creates a Foo object with a null "other" field.

      If by "public void f(void)" you meant "public Foo()", then you've created a recursive constructor with no base case. I doubt the compiler would allow that, but even if so, that would leak memory like a funnel in any language.
    14. Re:Pointers, References and Performance by julesh · · Score: 3, Informative

      Java is all about pointers actually. Everything that is not an atomic type (int/long) is actually a pointer. They even call that a reference! Hah, people go use C++ for a while.

      And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance.


      Not really, no. The just-in-time compiler performs pointer escape analysis for the allocated objects and only uses the heap for the ones where heap allocation is actually necessary; the rest use the stack regardless of how the programmer wrote the declaration.

      Admittedly, it's taken a while for this optimisation to be included, but it is there in the latest versions of Java.

    15. Re:Pointers, References and Performance by Anonymous Coward · · Score: 0
      I know others have already replied to you, but I couldn't miss the fun to bash someone who thinks knows shit.

      Java is all about pointers actually. Everything that is not an atomic type (int/long) is actually a pointer. They even call that a reference! Hah, people go use C++ for a while.

      Wrong. References are not necessarily memory addresses.

      And because it's like that, you have heap allocations for every non-atomic data type, which is really the opposite of performance.

      Wrong. The whole point of the JIT is to perform run-time optimization. While its main goal is to act as a native compiler to avoid the bytecode interpretation cost, there are various cases where it can optimize code further than a static compiler could.

      try {
      int fds[2] = new int[2];
      pipe(fd); /* still check return value */
      } catch (memoryAllocationErrorOrSo) { ...
      }

      Troll. OutOfMemoryError extends Error, which means you don't need to handle it explicitly. So, the code would be quite similar to your C counterpart (provided this could be done in pure Java, as you said).

      And what about if you wanted to create an object on the stack? Too bad Java can't do that.

      Why would you want to create an object on the stack? Apart from performance issues (which, again, are left for the JIT), what would change to you?

      And then there is this garbage collector that professors swarm about. Does it handle circles?

      Really, you should learn more about garbage collection before making any comments. Mark-and-sweep garbage collectors have been available for quite a few decades. Also, even reference-counting garbage collectors (like Python's or Mozilla's XPCOM handler) can use some techniques to detect circular references.

  26. If you want to start from the top by CookieOfFortune · · Score: 1

    Start with a scripting language, show the students that hello world can be as easy as print "Hello world!". From there, teach them syntax, functions, and OOP. Once these concepts are understood, moving to another high level language is just adjusting the syntax a little and working around the environment. Or their curriculum could start from the bottom as my university does. We started with transistors and logic, then moved to a simple type of assembly, then C, and finally Java in the 3rd or 4th course in the series.

    1. Re:If you want to start from the top by narcc · · Score: 1

      What university, if you don't mind me asking? I was taught the same way many years ago.

    2. Re:If you want to start from the top by CookieOfFortune · · Score: 1

      UT Austin

  27. Why not D? by Twinbee · · Score: 3, Interesting

    I would suggest being taught a programming language such as D, at least in addition. Although the transition from C/C++ to D can be painful, D contains many similarities with C/C++ such as speed, except it's much tidier and has many of the advantages of Java syntax whilst maintaining the power of C/C++ if necessary (optional pointers, optional manual garbage collection etc.).

    Sooner or later, languages are going to evolve, and surely it's only a matter of time before something D-like is going to be used anyway. Might as well make the switch sooner rather than later.

    --
    Why OpalCalc is the best Windows calc
    1. Re:Why not D? by sydneyfong · · Score: 1

      I've taken a brief look at D a while ago. The compiler implementations don't seem to be solid.

      In particular, DMD is Linux 32bit x86 only, which is basically useless these days when 64-bit systems are everywhere. GDC is relatively recent, haven't really tried it out yet.

      --
      Don't quote me on this.
    2. Re:Why not D? by shutdown+-p+now · · Score: 1

      I would suggest being taught a programming language such as D, at least in addition. Although the transition from C/C++ to D can be painful, D contains many similarities with C/C++ such as speed, except it's much tidier and has many of the advantages of Java syntax whilst maintaining the power of C/C++ if necessary (optional pointers, optional manual garbage collection etc.).
      There is no indication that D will still be around in 5-10 years. Are there any serious (i.e. not $20 shareware) commercial products written in D? Is there a feature-complete standard library? Are there mature graphics, database, UI and Web frameworks available? What about a proper IDE with debugging, fully working code autocompletion, and visual designers?

      Yes, I understand that all these are not directly applicable in a teaching environment. However, the question is: why teach people a language which has not passed the test of time yet, and which may well be stillborn?

      Sooner or later, languages are going to evolve, and surely it's only a matter of time before something D-like is going to be used anyway.
      From what I've seen, C# 3.0 offers almost everything D does (and a few tricks of its own), and it is already more mainstream. So I think we're already there. The future of language evolution is not going to be D or other similar languages; the recent trends are clearly pointing at FP as the next paradigm of choice.
    3. Re:Why not D? by DragonWriter · · Score: 1

      I would suggest being taught a programming language such as D [digitalmars.com], at least in addition.


      IMO, a pedagogical language should be a well-understood language in a particular arena. Sure, Digital Mars' D combines different aspects of C/C++/Java, but so what?

      Sooner or later, languages are going to evolve, and surely it's only a matter of time before something D-like is going to be used anyway.


      Languages are constantly evolving, but it doesn't seem like Digital Mars' D is in the direction that any of the major strands are evolving in. New languages focussing on functional, concurrent, and distributed programming, and incorporation of more functional features and new mechanisms for concurrency and distribution into existing popular languages seem more the current direction than remixing C/C++/Java features. C and Java have fairly secure and distinct niches. Digital Mars' D is, though not a bad language, something of a solution in search of a problem.

  28. It's not the language, but how it's taught by Max+Threshold · · Score: 1

    I've known two people who took 100-level "Introduction to Programming" type classes using Java. Both of them ended up terribly confused and I had to tutor them. But the problem wasn't Java; it was the fact that their professors approached "an introduction to programming using Java" as "an introduction to Java programming." I believe Java can be a great first programming language, but only in the capable hands of somebody without a doctorate.

    1. Re:It's not the language, but how it's taught by Peter+(Professor)+Fo · · Score: 1

      Four out of five. It's not the language, but how it's learnt. Suppose you learn that debugging due to stupid mistakes is a chore best avoided by not making stupid mistakes I'd call that a good thing. I could tell you, make you write an essay, even interview you, but unless you've got it ingrained in your programmer's psyche you're not doing it right. FWIW in my book http://www.eminent.demon.co.uk/ob/Programming.htm I use Javascript as a pig-to-debug (but easy to get started with) language in the early stages where either the reader learns early on to think before typing and read after typing or they give up and do something more suited to their temperament.

  29. Why is "Computer Science" Staffing S/W companies? by wrook · · Score: 5, Interesting

    OK, this hit one of my hot buttons. Before I continue, though, let me preface my statement by saying that I don't disagree with the article (which is right on the button). But I disagree with the way the summary characterizes the situation.

    I totally agree that universities shouldn't be teaching Java exclusively. They need to teach the basics of modular, functional, declarative and oo languages. Why? Certainly *not* to fill "software engineering" positions!!! A university's role is to do research, not to act as some technical college. OK, I can see having a programming course aimed at creating programmers for industry if it's going to pay the bills at the uni. But *don't* make that your "Computer Science" course!!

    Computer Science should be science (well, math anyway). Universities should be getting the 5 or 10 graduates they need that will move on to academia (or industry research) later in their careers. Because right now, *nobody* is getting taught Computer Science! Lately I've been reading papers posted on http://lambda-the-ultimate.org/ Regularly I have to go back to the basics and learn extremely fundamental theory because nobody *ever* taught them to me in the first place. Half the time I think, "OMG, I never even knew this existed -- and it was done in 1969!!????"

    More and more lately, I've been wanting to phone my University up and ask for my tuition back.

    If you want to learn how to program in a professional setting, there's nothing better to do than just start writing code. Get your chops up. Then find some big free software projects and start fixing bugs. Learn how to use the tools (configuration management, etc). Learn how to interact with the other programmers. That's all you really need (well, that and a quick automata and grammar course so that I don't have to look at yet another context free grammar being "parsed" by regular expressions).

    But right now, where do you go if you want to actually learn theory? I guess the library... And getting back to the point, this is essentially what the paper is suggesting. Students need to learn all these things because they are relevant to the field. A university supports industry by doing basic research. If you don't understand the concepts that they point out, you just can't do that. Paraphrasing from the article, having a university course that's meant to pad out a student's resume is shoddy indeed.

  30. commercial app dev != internal business app dev by remitaylor · · Score: 2, Insightful

    software engineering != computer science

    [...] soft engineering/programming is a subset of computer science

    true! i would take that even a step further ... it depends on the target consumer of your applications, as well.

    mr. awesome computer science man, who can program in everything, might not be what a business wants for someone who's good at whipping up quick, user-friendly (potentially resource-hungry and not secure enough to face the public internet or for commercial distribution) applications to help streamline business processes.

    and, obviously, mr. business programmer, who's good at getting the employees what they need, probably isn't the guy you want to program some super computer ... math ... stuff. or even a decent performing application that could be sold and distributed, commercially.

    i'm sure Java's *perfect* for some people to learn. C or even Assembly are *perfect* for other people. C# / Python / Ruby might be perfect for someone else. [some other languages here].

    it depends on the person and their career / interests / environment.
  31. Java for Dummies by DCFC · · Score: 5, Interesting

    I am a headhunter for high end roles at investment banks, and we are close to classifying CompSci as a "non degree", along with media studies, languages, etc.

    Java is fine for teaching design patterns, and classical algorithms like Quicksort, or binary search.
    But you can't do operating systems, and the success of Java in isolating you from any notion of the hardware is actually the problem.
    We have already blacklisted courses like the one at Kings College, because they teach operating systems in Java.
    Yes, really.
    Their reason apparently is that it is "easier".
    I have zero interest in kids who have studied "easy" subjects.

    The world is a bigger, more competitive place, how many jobs do you think there are for people who have an easy time at college ?

    Java is part of the dumbing down of CS.
    A computer "expert" is not someone who knows template metaprogramming in C++, or compiler archaeology in BCPL, or the vagaries of the Windows scheduler.
    It is someone who understands computers at multiple levels, allowing them to choose which one illuminates the problem at hand.
    To be wise in computers you choose whether to think of something as a block of bytes, quadwords, a bitmap, a picture, or a buffer overflow pretending to be porn. If also have the option of understanding flash vs static RAM, virtual memory, or networked storage, all the better. I doubt if even 1% of CS grads could write code to turn this BMP into a JPG, or even explain the ideas behind this. In my experience, 50% could not work out how to develop a data structure for a bitmap that used palettes.
    I have interviewed CS grads with apparently good grades who could not explain any data structure beyond arrays.

    Any CS grad who sends us their CV with bullshit like "computers and society" or "web design" has their CV consigned to trash with no further reading.
    A CS should be able to write a web server, not be an arts graduate who didn't get laid.

    C++ makes you think at multiple levels, unlike Java, you simply cannot avoid thinking about your system from patterns to bytes. This may be good or bad for productivity, and I'm sure we risk a flame war here.
    But I am entirely convinced you need to hack your way through a "real" system.

    How can someone understand the Linux kernel without C & C++ ?
    Is someone really fit to be called a computer scientist if like >50% of the Computer "Scientists" we interview for very highly paid jobs, show actual fear of working at that level.
    They have the same "way above my head" attitude that a mediocre biologist might have to applying quantum theory to skin disease.

    Partly, as in the Kings College debacle it is lazy mediocre lecturers, but also CompSci grads frankly are not that smart, so they need their hands held.
    Although the seats get filled, they quality is in monotonic decline.

    --
    Dominic Connor,Quant Headhunter
    1. Re:Java for Dummies by Endymion · · Score: 4, Insightful

      Java is part of the dumbing down of CS.

      Java is the new COBOL. And we will regret it in 20 years for much the same reasons.

      It actually gives me hope that you have recognized this in hiring practices. That a CV with a list of Sun's Java buzzwords is not an indication of a useful programmer.

      I was disturbed in college (1997-2001) that things were changing towards Java and other idiocy. Too many people didn't get pointers and other basic concepts, and Java was hiding them even more. I believe it was the one class we had in assembly programming that really pointed it out - when confronted with having to deal with real hardware, most of the students didn't know what to do. Concepts like "two's complement" vs "one's complement" caused a strange brain-lock for them, as they were so sheltered from the actual binary math and hardware of the computer.

      It was only a handful of us that had been programming for years already (yay for the Atari 800XL) that had any idea of what was going on. The college (UC Davis) skipped entirely over very basic concepts like Von Newmann Architecture. I ended up having to spend most of my time trying to help my fellow students, there was so many fundamentals missing.

      I think the most frightening part was having to yell at one of the professors one day, because the basic data structures he was teaching were being done incorrectly. He was teaching people to leak memory. ("Let's allocate a huge linked list, and then just set the head pointer to NULL and consider it freed!")

      Sigh. It was frightening then, and apparently all my fears were justified, as now the entire discipline is getting a bad reputation. Unfortunately, I can't exactly disagree with that reputation from some of the CVs I've seen recently. My degree is destined fscked, apparently.

      You hiring? ^_^

      --
      Ce n'est pas une signature automatique.
    2. Re:Java for Dummies by DCFC · · Score: 1

      We are always hiring, but it varies what we look for.
      For the largest banks we have "standing mandates" for very smart people who can do maths and programming exceptionally well.
      We do not do "housekeeping" IT like email, or programming for data entry tasks, which I suppose Java is OK for.
      Hard to see knocking up forms for data as a real good job, regardless of the employer's industry.

      We are increasingly interested in computer game developers, since they can do C++, and GPUs actually have a niche in very high end banking, as do FPGAs.

      Even in jobs where most work is done in some mix of Perl, VBA and Java, banks and hedge funds explicitly tell us they want C++ people because it is an easy way to prove they are better.
      A problem with dumb Java programmers is that if something is not in Java, there is no possibility they can know it. Thus lambda functions, FPGAs and a host of coo shit is outside their understanding. They have real problems with Excel. To be sure it is a trivial system to start with, but to be shit hot, you need to actually think at least as deeply as with C++, not least because V12 is multi threaded. One bank used threats to make us find a competent Excel developer, since nearly all Excel speicalists are shit. It was horrible. A large % had to have And() explained to them, 50% could not do VBA at all, many regarded DDE as a "new feature".
      A CS grad should be able to apply everything from lambda functions, through database theory, Hearsay/blackboard pattern to predicate calculus, to aceing Excel but they don't because they can't.
      You need to think from a richer set of ideas than the one you code in.

      --
      Dominic Connor,Quant Headhunter
    3. Re:Java for Dummies by tieTYT · · Score: 2, Insightful

      I am a headhunter[...] I have zero interest in kids who have studied "easy" subjects.
      You have zero interest in hiring kids that are in the most demand? Does your boss know you're turning them away? I think he'd be upset.

      To be wise in computers...
      Not to be an elitist, but you're a fucking headhunter. If you actually knew anything about what makes someone wise in computers, you'd be the first I've met. Every headhunter I've met thought SQL was a database and didn't know there was a difference between "C-pound" and C++.

      You can't know unless you've been developing 8 hours every day after work. Wanna know why? Because every day I work I am 8 hours more knowledgeable in my field than the day before. I doubt you're keeping up with me.

    4. Re:Java for Dummies by tieTYT · · Score: 1

      A CS grad should be able to apply everything from lambda functions, through database theory, Hearsay/blackboard pattern to predicate calculus, to aceing Excel but they don't because they can't.
      That's so weird, cause when I took my interview at Google and Blizzard, they didn't give a shit if i knew about that. They must really be clueless.
    5. Re:Java for Dummies by philipgar · · Score: 2, Insightful

      I doubt if even 1% of CS grads could write code to turn this BMP into a JPG, or even explain the ideas behind this.

      Just to harp on one statement in your comment. This is either an absurdly basic demand to ask of programmers, or an absurdly complex one. On one side, this is as simple as making a function call bmp2jpg(...) or whatever it is with the libraries they are using. The process of doing this is simplistic, and taught to the java mentality of "find the right tool in the shed to do your entire program".

      On the other hand the question you are asking could be one so absurdly difficult that it is unlikely you'll find more than a handful of people who just got a BS in CS will know (having a BS in Computer Engineering it is possible they might understand it, and having advanced degrees makes it even more likely). Expecting a CS student to be an expert in signal processing is rather silly. Even if someone was a computer engineer and was actually changing the JPEG code (a process I have done recently), it isn't expected that they understand the entire algorithm. They need to know the basic steps, and how the data flows through the process. They may even need to know the basics of what a DCT does (knowing the math behind it could be useful, but experts have optimized it so using a naive algorithm is idiotic). They should also know how Huffman encoding works, and any student who's taken an algorithms course should be familiar with such ideas. However at a low enough level, they really don't need to understand it. People spend entire careers optimizing something like a DCT, so to most programmers it should be seen as another tool.

      The point is that different levels of abstractions exist in different problems, and a good programmer (not necessarily a good CS student) should know what level of abstraction is necessary for the task at hand. Having someone who reinvents the wheel for everything is about as useful as a programmer who only uses canned solutions. It's finding the right mix that is important.

      However, one key points of this article is about the fact that CS curriculums spend TOO much time on programming, and too little on theory. A university is not a trade school, and students should learn the important theories and not the tools. However teaching a student when using the wrong tool is highly detrimental. And one thing that was observed is that while Java may make the introductory course easier, it causes problems later on when a student must know some other tool (such as pointers). Not having a good enough foundation can mean that the professor must waste a significant portion of a class teaching student the new tool.

      Phil

    6. Re:Java for Dummies by DCFC · · Score: 1

      >You have zero interest in hiring kids that are in the most demand?
      Yes, you have exactly understood what I am saying.

      The mass market is for Java, a few years back it was VB.
      Do you think VB developers currently enjoy good job prospects ? Think Java is any different ?

      But we don't do the mass market, we do the high end.

      >Not to be an elitist, but you're a fucking headhunter.

      Yes, I am. I also worked on the first Intel Unix, debugged operating system code for IBM & MS, have hand carved trading systems in C++, and for two years was the most expensive person in the pay of the British government whilst director in charge of the Treasury's secure wide area network for sucking "interesting" data out of banks.

      You may have a more impressive techie CV than me, many people do, but I hope you will feel I have some credibility in this domain.

      >Does your boss know you're turning them away? I think he'd be upset.
      Actually I own a large % of the firm, so do not have that fear :)
      Our clients like this a lot.
      Our selling point is we send out an order of magnitude fewer CVs than our competitors, more than one of which have sent so many CVs without any filtering that they overflow the 100Mb limit that a lot of corporate email systems impose upon personal inboxes, and in at least one case sent so many that the bank's spam filter binned the lot, ironically including a couple of CVs that the bank actually wanted.
      That is why we are harsh on CS grads, most are not only outside the elite, a large % I would never have hired when I had a proper job running development teams.

      >If you actually knew anything about what makes someone wise in computers, you'd be the first I've met.
      Indeed, the fact that everyone at my firm has a CV that would enable them to get a respectable job in the area they headhunt for makes us successful.
      I accept that most HHs are crap, indeed I make the claim that I was the first person to use the term "pimp" for my adopted profession, back in 1986 in IBM's labs.

      >Every headhunter I've met thought SQL was a database
      That's not true.
      When hearing "see-quel" some have confused it with "see-quent" the hardware firm :)

      >and didn't know there was a difference between "C-pound" and C++.
      Actually the Microsoft search engine on their own site only worked that out relatively recently.

      >You can't know unless you've been developing 8 hours every day after work.
      I've done may share of 60 and 80 hour development weeks.

      >Because every day I work I am 8 hours more knowledgeable in my field than the day before.
      I flatly do not believe that.
      Unless you have no goal of actually producing something, you have spend some % of your time doing shit you have done before.

      >I doubt you're keeping up with me.
      Possibly, I do less C++ these days, though I am currently teaching a course in it which keeps me on my toes.
      I've kept up with the intro of Lambda fns to C++ as well as FPGA/GPU coding, but I guess some people, perhaps including you are catching up and will overtake me.

      My only claim is that I understand this stuff better than any other pimp you will ever meet.

      --
      Dominic Connor,Quant Headhunter
    7. Re:Java for Dummies by Anonymous Coward · · Score: 0
      While you make some good points, your post resonates with the buzzword hunting recruiters who want a checklist of topics rather than an in-depth view of a particular subject.

      Perhaps you are hunting for a security analyst for your banking systems, who would need those skills, but I was under the impression that investment banks were more interested in people with deep maths skills (who can analyse trends and mine data) with a smattering of high level languages to get it to work.

      We live in a specialised society now, and it is impossible to keep up to date in all fields of computing at the same time. I am a generalist myself, and I am amazed at the progress in e.g. 3d graphics compared to when I last dabbled with them. And flash memory is giving me grief right at the moment (they are still inventing new types - now if only the customer could *choose* one!).

    8. Re:Java for Dummies by DCFC · · Score: 1

      >This is either an absurdly basic demand to ask of programmers, or an absurdly complex one. Thank you. As such it is thus a perfect interview question. A good question has an easy entry level (like working out how to store a simple bitmap), bit allows more advanced candidates to demonstrate their ability. >so absurdly difficult that it is unlikely you'll find more than a handful of people who just got a BS in CS will know Those are the people I want, we don't do people who write forms. >Expecting a CS student to be an expert in signal processing is rather silly. We don't "expect" anything, but we actively seek out those who are wise in the ways of signal processing. As it happens whilst I was an undergrad several of colleagues independantly realised that what we now call JPG style algorithms had legs. One did it in his first year. If a CS grad hadn't done the relevant maths for JPG, then we'd move on, but if he failed the basic bitmap, the interview would end quickly, no second chance. Certainly I expect them to understand information theory, and have some of the algorithms involved. I used to ask how you would crack a one time pad. The answers were quite illuminating, and the best did not come from those who happened to know the answer. I agree about choosing the right level, and that is why I have contempt for those who only think on one. This means doing Lisp, ML or F#, and some smattering of the Algols, Perl, and assembler. We observe that all CS grads who own an Apple computer fail to impress us, if we continue to bother interviewing CS grads at all, this will be an early question, such is it's predictive power. More than one deluded fool has tried to explain to me how "innovative" a little firm like Apple was, citing how they invented GUIs and portable music players. They view choosing Apple over MS as some political statement of liberty. They flatly refuse to believe me when I tell them about Apple closed architectures (those who can understand what one is), or the way Apple has oppressed developers in ways that MS would never dream of. I don't expect them to agree with me, but I expect their opinions to be better than the BBC.

      --
      Dominic Connor,Quant Headhunter
    9. Re:Java for Dummies by tieTYT · · Score: 1

      Because every day I work I am 8 hours more knowledgeable in my field than the day before. I flatly do not believe that. Unless you have no goal of actually producing something, you have spend some % of your time doing shit you have done before.
      I apologize for only responding to one comment, but it's late and I don't have enough time. Just because I'm doing something I've done before doesn't mean I'm not learning. Not only am I making old concepts concrete, but I'm making new decisions based off of the results of the past. For example, I may discover that if I refactor a method one way instead of another, my code becomes easier to understand in the future.
    10. Re:Java for Dummies by DCFC · · Score: 1

      are you an illuminati of these firms ?, here to mock my incompetence ?

      If not, how can you possibly know what they were interested in ?
      You know what they asked, but a good interviewer does not use the exam style of
      "using induction, prove that the sum of integers to N is...."

      My equivalent question would be to ask them to add up the numbers from 1 to 661, how they do it tells me more.
      I would never tell them to use lambda fns or get them to draw an upside down A. To get past me, they must show they have both a good "vocabulary", but also the wisdom to choose between them when confronted with a problem.

      I might ask how to find the median of a data set in linear time.
      Failing to know what median or linear time are being of course a non maskable interrupt.
      I would not presume to tell them how to solve these problems, not least because a good % are smarter than me.

      The only time a candidate gets told "I was interested in X" was when they fail in such a way that I counsel them on what to go away and learn.

      --
      Dominic Connor,Quant Headhunter
    11. Re:Java for Dummies by Woy · · Score: 1

      You mention the "way above my head" attitude. You must realise that many of the great computer programmers started doing it as children, and that colors many of their views of failure and responsability. So you headhunt for high stakes jobs - high stakes is not done by magical "better" programmers or harder whipping. It is done with boring, systematic testing, and those that have a concerned view of the problem are the most likely to produce the desired results. Also the best programmers tend to be realists. If your code is processing real money, and it processes the equivalent of your yearly salary in a few minutes or hours, you are "way above your head" no matter how arrogant or really fucking good you manage to be.

      Otherwise i agree with you and think you have a very adequate view of things for your described job.

      --
      "If God created us in his own image we have more than reciprocated." - Voltaire
    12. Re:Java for Dummies by Anonymous Coward · · Score: 0

      You are so narrow minded! The problem here is not the language and C++ being used by many people does not make it the best language!
      C++ is a language too complex and barely readable for beginners, Java has many flaws but had the advantage to come with a standard library, Lisp is very easy to learn but unreadable, ...
      Who cares in what language the Linux kernel is written! If I write a word processing application on Linux I do not care about the fucking kernel and I should not!
      The problem as highlighted in many other post is poor lecturers that teach the use of tools instead of the theory about writing code!
      I had plenty of this kind of lecturers when I went to university (teaching even Ada, that's ironic!) who were unable to go beyond the boundary of their language to teach you the really important thing behind : HOW TO CODE AND BUILD AN APPLICATION!!!
      The problem with CS courses (and computer related courses in general) around the world (I went to university in France and the UK) is that most of them just teach you to use tools!
      I am living in Japan now, and you can take courses in private schools to learn Word not document edition, Excel not using a spreadsheet, ...

      Concerning headhunters, lots of them have no relevant curriculum, a big mouth, no knowledge of the domain where they want to hire people, they do not bother to read any document you send them like resume (I always feel it's rude to boldy explain : because I did not have the time),
      you seem different ...

    13. Re:Java for Dummies by Anonymous Coward · · Score: 0

      They must really be clueless.

      Make a note to read that witty and sarcastic comment back to yourself in, say, 7 years time.

    14. Re:Java for Dummies by DCFC · · Score: 1

      >You must realise that many of the great computer programmers started doing it as children
      I started at 12 on a computer stolen from the government :)

      >high stakes is not done by magical "better" programmers or harder whipping.
      Thank you for pointing out something I should have said, and with which I agree 100%.

      High stakes financial programming is rarely done by the best programmers, indeed I have seen stuff handling real money that would shame a Kings College CompSci graduate.
      We've done a 140 page guide to our line of work, and the effects of EDS on banking IT is better imagined than experienced.
      We want very good maths as well, and that closes the filter so tight that one has to trade off.

      >is done with boring, systematic testing
      Actually testing does not have to be boring, and is so only because it is usally very badly managed, and these days often staffed by people who didn't make it as a mainline programmer. Much can be automated, and if you have the right culture (rare) the finder of a complex bug is a hero, not (as usually) a troublemaker.

      >If your code is processing real money, and it processes the equivalent of your yearly salary in a few minutes or hours, you are "way above your head"
      You and I operate in different domains, and in mine the relevant unit measurement is Hertz.
      Our people write code that handles their annual salary ranging from 0.1 Hz to some who work at the kilohertz level, with higher peaks.

      In high frequency algorithmic trading one's code may easily process megabucks/second.

      Sadly I am under an obligation not share names, but there is (exactly) one system that handles G7 country sized money in real time high frequency trades written almost wholly in C#. Entertainingly, I kind of believe that Microsoft doesn't actually know about it, even though it is a very glamorous project.
      But everything else is done in C++, with a few C things lurking in dark alleys, preying upon the weak.

      --
      Dominic Connor,Quant Headhunter
    15. Re:Java for Dummies by mvdwege · · Score: 1

      Wait a second. Programmers that clam up at binary math? How the hell are they expected to write any code at all in that case? The very basis of control structures is being able to do binary math, isn't it? Or do modern programmers skip AND, OR, NOT (and cognates) by nesting?

      Sadly, since I have actually seen someone use a nested IF block instead of an AND operator in example code for a Perl module, I wouldn't be surprised at all.

      Mart
      --
      "I know I will be modded down for this": where's the option '-1, Asking for it'?
    16. Re:Java for Dummies by Anonymous Coward · · Score: 0

      The more your write, the more you demonstrate how screwed up your views of CS education is.

      There is absolutly no concept, whatsoever, commonly taught in OS courses that cannot be demonstrated in Java or any other imperative programming language. The core of OS course is about understanding scheduling, inter process communication, resource management, synchronization etc. , this course is not and shouldn't be about writing an operating system that people start to use. In a normal OS course, the typical course project takes about 30 hours from an average group of students (group of 3). I'd rather hire someone who spent these hours exploring the OS fundamentals rather than battling with the irrelevant aspects of C langauge. Eclipse is an operating system in many ways, what language is it written in ?
      It's not about easy or hard, it's about how you manage your time and what you spend it on. Judgin someone's knowledge of OS concepts based on the language they used for the course is not much better than referring the competence of a research paper based on the word processor it is typeset in.

      A computer expert is not who you described either. It is like saying that a mathematician is someone who knows number theory to its limit. That's a number theorist. How about someone who is an expert in algebra. So a theoretical computer scientist who is an expert in complexity theory, a security expert, a network expert etc. is not a computer expert ? Actually what you described doesn't make one expert in anything at all. It's a basic skill that most people develop at their second year in university.

      Your BMP to JPG example is the joke of the day. JPG is a fairly recent standard in image compression based on cosine transformation that actually has more to do with Signal Processing which is part of Electrical Engineering more or less. Coming up with such an algorithm independently, is hopefully not what you are expecting from a CS grad, as it took many years for the experts of the field to develop. Coding the algorithm according to the spec is something that I am confident most CS grads can do (at least those I have seen), and is not rocket sceince.

      A web server is not normally written by "a" CS, take a look at serious web servers, you won't find many that are written by one person. A CS who is going to work as a software developer should have the technical/communication skill to fit in a team, A CS who is going to academia requires different set of skills. A CS who is going to be working on HCI research or market development, needs that socail computing course, you like it or not.

      Thinking at multiple levels has nothing to do with the language, it's a school of thought that stems from understanding architecture and design principles of large scale multi-layered systems. Some people need to think at different levels (architects, system designer), some people should not think at multiple levels or they should even force themselves not to within a context of a large scale project as it is likely to break the encapsulation rules of the project they are working on.

      A real system that is hacked through is not a real system. It lacks proper architecture outline and a solid design, it is better be scrapped and re-engineered again.

      I have no idea why you think understanding Linux kernel is the hallmark of computing. You seem not to be aware that there are other applications and demands for computers out there as well.

    17. Re:Java for Dummies by Anonymous Coward · · Score: 0

      Java is "dumbing down" CS?

      I'm not a CS major, but I don't really understand this thought process. From my viewpoint (take it for whatever you will), Java (and C# and the like) are the next step in programming. Of course I wouldn't choose Java or C# to write at an operating system level. Obviously if I'm writing drivers, I'll write it in C. BUT, for their respective purposes, Java and C# do what they are supposed to do very well.

      More and more, I see the opinion that, "C IS GOOD! JAVA BAD!" That's a strong stance to take when it should be, "C IS GOOD FOR WHAT ITS DESIGNED FOR! JAVA IS GOOD FOR WHAT ITS DESIGNED FOR!"

      As for CS becoming a nondegree...well...every major eventually becomes more popular so that, "even a caveman can do it." It has always been like this. The first EE's were geniuses in their field. Then, EE became "popular" so now there are still geniuses, and there are also idiots.

      IMO, its your job as a headhunter to determine who is good and who is the idiot. It's not like anybody is forcing you to give your jobs to any random kid who walks in asking for one.

    18. Re:Java for Dummies by Anonymous Coward · · Score: 0

      What a heap of shit. People like you who are so full of themselves should just stfu and diaf.

    19. Re:Java for Dummies by forgotten_my_nick · · Score: 2, Insightful

      Nearly every head hunter I have met has no clue what they are talking about when it comes to technology. They have a few fancy buzzwords, believe what they read in the local computer mag. They also try to inflate your CV to the customer they are selling you to.

      A bit like your post. I mean comments like "How can someone understand the Linux kernel without C & C++ ?". Why would anyone need to understand the linux kernel or C++ unless they were linux kernel programmers. Even so we have things called an "API" which allows developers to write to a kernel without having to know how the Kernel works or if it is even in C++.

      Also your comments on Java are laughable. Java is in use in day to day objects in real life. Phones, Set top boxes, Cars. It is not just web servers. There are even operating systems and emulators in Java which run fine. Go read up on JIT and stop living in the 90's.

      "In my experience, 50% could not work out how to develop a data structure for a bitmap that used palettes."

      And why would they? Unless they were looking for a job that does that. Seriously, if I was in an interview and they came out with the stuff you posted I would laugh at them.

    20. Re:Java for Dummies by Anonymous Coward · · Score: 0

      You are correct.

      In the telecom industry, I've been leading technical teams for 8 years. Over that time, I've had java-only programmers forced upon me. My background is real-time flight control systems and hard core C/C++, but I couldn't hold an intelligent discussion on system architecture with these java-only people. For example, one outside vendor team actually suggested that they needed to rewrite their C/C++ code running on Windows into Java code running on SPARC for performance reasons.

      Idiots.

      It turned out they were popping up a dos-box window to 'tail -f' every log file for the running process. There were over 200 log files, so on windows, that meant 200+ windows. Of course it was slow. Stop opening all those windows and monitor the log files more efficiently. Stupid. Rewriting in Java is faster? No. They just wanted to charge us to allow that team to learn java on our dime.

      The sad thing is that java developers are cheaper and easier to find, so the bean counters hire them rather than java programmers with platform compiled languages. Java isn't a platform, it is an environment. Vastly different from an OS.

      Java has a place, but programmers who believe that you don't need to understand either the OS or the hardware will always be inferior to programmers who do.

    21. Re:Java for Dummies by forgotten_my_nick · · Score: 1

      "Java is the new COBOL"

      Having worked with COBOL and Java I can tell you with a straight face no it isn't.

      Also Java has pointers. It is just you don't have to worry about them anymore as it is handled by the JVM. Of course if you are doing any serious development in Java or if you were doing JNI development you would learn about pointers.

    22. Re:Java for Dummies by megaditto · · Score: 1

      [...]that a mediocre biologist might have to applying quantum theory to skin disease. After I read that I realized GP is just talking out of his ass. But then again, that's probably why they pay him.
      --
      Obama likes poor people so much, he wants to make more of them.
    23. Re:Java for Dummies by j-tull · · Score: 1

      A CS should be able to write a web server, not be an arts graduate who didn't get laid.

      I couldn't agree more! At my university we had a CS program (in the engineering college) and a MIS program (through the college of business). I was very fond of pointing out that in MIS they teach students to write web pages, while in CS they teach students to write web servers. (A true statement. In my CS program we also wrote packet sniffer/decoders, simple firewalls, ORB middleware, and a host of simulations for things like memory management and processor scheduling. Oh yea, and we only taught Java to non-majors.)

    24. Re:Java for Dummies by Anonymous Coward · · Score: 0

      Java is part of the dumbing down of CS.

      Java is the new COBOL. And we will regret it in 20 years for much the same reasons.

      I disagree. Java's simply being misused. Write-once, run-anywhere is a huge success (mobile phone applications come to mind as an example).

      It actually gives me hope that you have recognized this in hiring practices. That a CV with a list of Sun's Java buzzwords is not an indication of a useful programmer.

      Agreed. :-)

      I was disturbed in college (1997-2001) that things were changing towards Java and other idiocy. Too many people didn't get pointers and other basic concepts, and Java was hiding them even more. I believe it was the one class we had in assembly programming that really pointed it out - when confronted with having to deal with real hardware, most of the students didn't know what to do. Concepts like "two's complement" vs "one's complement" caused a strange brain-lock for them, as they were so sheltered from the actual binary math and hardware of the computer.

      I had a fundamentally different experience from 2000 to 2004, but my degree was computer engineering, not computer science. Our first-level course was still Java, but object-oriented data structures was still taught (and still is taught) in C++. In fact, data structures was known as "pre-MIS" for a lot of folks, when they realized that this wasn't the best fit for them. In digital design, we picked up 1's and 2's compliment, K-maps, basic logic gates, state machines, and the like. In intro to microprocessors, we programmed exclusively in assembly, for an 8-bit microcontroller (which was difficult for some of the "Java" thinkers) via a simulator, and later, implemented those programs via C and assembly on a real card in the follow-on class.

      Come to think of it, I think your post just made me feel much better about my degree choice.

      And I didn't go to a top-ranked school either; I just went to a public university in a relatively poor state.
    25. Re:Java for Dummies by Anonymous Coward · · Score: 0

      Dear "full of yourself" 'Headhunter':

      Unfortunately, I doubt I'll have the opportunity to be 'interviewed' by you, since I am quite likely not remotely interested in any positions you might have, regardless of how 'highly paid' they are. I'd probably start by laughing and insulting you in French and Japanese, and like you, (giving you some of your own medicine), I'd complain about how headhunters today are basically brain dead in terms of communication skills. Then I'd ask you to do, oh say, a little Ibm 360 assembler problem for me (ok, ANY assembly will do :-)). And then I'd let you use the processor, and assembler of your choice...to write a web server (oh, say in an hour). Then to lighten things up, I'd time you (in seconds) on making a basic web page with links and images, using oh, say, vi (all right, all right...emacs or text editor of your choice ;-)). In other words, I'm certain I could sum up YOUR skills in seconds and make lots of negative, non-constructive, competence comments about headhunters, etc.

      In a word, I'd throw your resume, based on your posting, in the trash in a moment, as well. Arrogance usually is used to hide incompetence, as we all know from PHBs. You sound like one of them.

    26. Re:Java for Dummies by Vengie · · Score: 1

      Wait, seriously? Doesn't everyone learn the myth about Riemann in kindergarten (1+611)/2 * (611/2) = 218791. But seriously -- how would one get in touch with you?

      --
      When in doubt, parenthesize. At the very least it will let some poor schmuck bounce on the % key in vi. (Larry Wall)
    27. Re:Java for Dummies by Velaki · · Score: 1

      Perhaps you should start with finding applicants who have a decent command of the English language, and the proven ability to interact with customers, management, and a team of programmers? Ensure they not only have the ability to communicate coherent thoughts in person, on the phone, in conference, or on a whiteboard. Additionally, test them for their ability to adapt to the dynamic environment that is Corporate America.

      I could walk outside right now, and find myself umpteen code monkeys to write EXACTLY what I wish them to write, as opposed to the creative dialogues I seek from my team members. I want people to be enthusiastic about coding, their product, and their team.

      -v.

      P.S. I'm not sure, but describing yourself as a "pimp" gives me pause as to your ability. Not necessarily true, but that is my [business] perception.

    28. Re:Java for Dummies by hughk · · Score: 1

      I am a headhunter for high end roles at investment banks,
      What a coincidence, I work as a freelance across many investment banks at the higher end. I have worked in very big banks as well as small broking houses (as well as some exchanges).

      and we are close to classifying CompSci as a "non degree", along with media studies, languages, etc.

      A degree at best shows that someone can study something. For any modern subject, the field changes quickly over the time of study so you can't necessarily take away much in the way of absolute practical skills, just a way of learning. If you are recruiting for high-end roles then you are not recruiting 21 year old graduates, you are generally recruiting someone who has ten ore more years experience. At that end there a few people who are architects, the rest of us have broadly moved away from day to day contact with the technology and more concerned with the overall of getting requirements and managing their conversion into IT tooling to help the business. Yes, I work as a BA and project manager. Some basic skills are taught at Uni, but nothing relevant from my day. Yes, in a way Comp Sci is a little bit like having done German at university, except that German is only obsoleted if you don't use it but otherwise it is helpful when working at a German bank. I learned stuff like COBOL, Fortran and ALGOL at university. Not much call for that now. Luckily, I studied at a university which mixed academic training with real work and I learned a little of what I use now there.

      Again back to languages, many people studying modern languages (my daughter is one) learn a lot about the job of interpreting and translating as opposed to the theory. For CS, it is different. I still see too many people with precious little knowledge of projects and precious little of any practical subject area unless they have gone on to do something like an MSc in computational finance (for investment banking).

      I don't program in Java as by the time it became popular, I was mostly writing specs or running projects, but I would agree that someone who doesn't understand 'the iron' in the way a C programmer needs to is going to have issues when writing in a constrained environment. Abstraction is great, but the further from 'the iron' it takes you then the danger increases of doing something fundamentally brain-dead and crippling the implementation. The appropriate use of Java, multiprocessing and threads is one place this comes to mind.

      But I am entirely convinced you need to hack your way through a "real" system.

      I totally agree with this. The problem is that real systems are *BIG*. One issue that we had was that so much of the business logic became embedded in systems (and subsequently forgotten by the business) that we had to regularly to dig around in the software to find out what really happened. This needed the ability to navvigate around the code as well as a knowledge of the underlying business model.

      --
      See my journal, I write things there
    29. Re:Java for Dummies by derrida · · Score: 1

      My equivalent question would be to ask them to add up the numbers from 1 to 661, how they do it tells me more.
      218791.
      661*(330+1)
      Double checked with Excel anyway .
      --
      nemesis. Home of an experimental fe code.
    30. Re:Java for Dummies by locofungus · · Score: 1

      Riemann.

      I think you mean Gauss.

      But seriously -- how would one get in touch with you?

      It's not me but Google is your friend. You can find some rather interesting threads. Including one where someone says that knowledge of differential geometry is necessary:

      http://www.wilmott.com/messageview.cfm?catid=34&threadid=36727

      about half way down.

      Quite frankly I'm at something of a loss to imagine what outside of research would actually have a use for differential geometry (maybe I wouldn't be suitable for a job :-) ). But maybe I should shorten my sig to 'God said "dF=0," and there was light' just in case ;-)

      Tim.

      --
      God said, "div D = rho, div B = 0, curl E = -@B/@t, curl H = J + @D/@t," and there was light.
    31. Re:Java for Dummies by Anonymous Coward · · Score: 0

      Have you even ever looked at the graduates from other disciplines? Question them on the fundamentals of their degree and you'll also find the same percentages you mention - luckily, I guess, you don't head hunt for positions outside of the tech-related ones or you'd just need to designate every degree as a 'non-degree'. There are many graduates who just 'get-by' and graduate in their chosen field. If that were not the case then we'd be graduating scores of noble prize winners and as we can all see those who truly are excellent are rare, and thus the need for your type, the head-hunter, to weed out the mediocre from the acceptable from the superior. Would that ever person were Pasteur, Hoyle, Hubble, Turing, or Lovelace, but alas that is not the case; so, do your job (which I hope you do in an exemplary fashion - I wonder how you would measure up against your associates; low, medium, high?) and quit your whining before CS graduates who 'get-it' and know they excel in the field relegate you the head-hunter to the 'non-essential' bin. Oh, wait, that may be why you don't see us coming by.

    32. Re:Java for Dummies by Tronster · · Score: 1

      A computer "expert" is not someone who knows template metaprogramming in C++...It is someone who understands computers at multiple levels, allowing them to choose which one illuminates the problem at hand. On reflection of my co-workers, past and present, everyone who knows template metaprogramming (which is countable on one hand) is someone who understands computers at multiple levels. I wonder if it's even possible for someone to learn something so complex without having somewhat of an understanding of how the underlying system works.

      Perhaps some high level programming skills are indicative of how much they understand about computers / computer science.
    33. Re:Java for Dummies by Anonymous Coward · · Score: 0

      You've confused boolean logic (and, or, xor, etc.) with binary arithmetic (bitwise operators, two's compliment, multiplication/division alogrithms, etc.). It is very difficult to do any programming without at least a basic grasp of boolean logic. It's pretty easy to do a lot of programming without any knowledge of binary arithmetic because you can just plug your ears and pretend that these are raw mathematical objects you're working with, as long as you don't overflow or otherwise hit corner cases.

    34. Re:Java for Dummies by gubachwa · · Score: 1
      This guy is obviously a troll, but I'll bite.

      ... we are close to classifying CompSci as a "non degree"
      So from what discipline do you plan on recruiting people who have all the training that you so desperately need? Chemistry majors perhaps?

      Java is fine for teaching design patterns and classical algorithms like Quicksort, or binary search.
      Perhaps I'm misreading you, but your tone seems dismissive, as if teaching design patterns and classical algorithms was somehow unimportant. Design patterns, OO, etc, are all big-buzzwords in any job ad I've seen lately. And classical algorithms like quicksort and binary search is stuff that will always be taught in computer science. Not teaching that stuff is like not teaching classical mechanics in a physics program. If Java reduces the learning curve and helps students grasp these concepts and algorithms faster, isn't that a good thing?

      We have already blacklisted courses like the one at Kings College, because they teach operating systems in Java. Yes, really. Their reason apparently is that it is "easier". I have zero interest in kids who have studied "easy" subjects.
      The reason they teach OS concepts with Java is likely because it is more pedagogically effective (in your parlance, "easier"). Let me spell that out for you in more detail, since you probably have difficulty grasping what I mean. Operating Systems encompasses a large array of topics, including stuff like virtual memory, process scheduling, file system structures, etc. Sure, there are certain parts of operating systems that require low-level programming that can only be done with Assembly and C, but that is hardly true about the OS as a whole. Introductory OS courses (regardless of the language they are taught in), typically won't go into excruciating detail about boot loaders and other such components that require low-level programming. They'll talk about the higher-level issues. Using Java to demonstrate these concepts doesn't compromise how hard (or easy) the course is. It simply allows the instructor to focus on the concepts being taught in the course instead of worrying about the language peculiarities that come along other languages.

      BTW, ever hear of JavaOS? It's an Operating System written mostly in Java.

      Yes, really.

      How can someone understand the Linux kernel without C & C++ ?
      Good question. One needs to know the language in which something is written to understand it. But just because someone knows English doesn't mean they'll understand Shakespeare. University is about teaching students how to think. Making them learn one language versus another is irrelevant. Understanding the concepts is what's important; picking up the language syntax is secondary.
    35. Re:Java for Dummies by ceoyoyo · · Score: 1

      A software engineer maybe shouldn't know what a DCT (or maybe an FT) is, but he will because engineers all have to take basic engineering requirements.

      The computer scientist should know what an FT is and how it works, and have the gumption to make a good guess at what a DCT is. If nothing else the FFT is the canonical example of an algorithm that has pretty limited use in it's non-optimized form and pops up all over the place with a bit of clever algorithm design.

      I've heard of CS students interviewing for grad school who were asked to write an FFT algorithm in the blackboard. I wrote my first when I was 13.

    36. Re:Java for Dummies by dangster · · Score: 1

      I don't get why you are basing your opinion of Computer Science students on just one school, Kings College, which isn't exactly the epitome of higher education. If you want Computer Science/Engineering graduates worth their salt, you should start looking at the top Computer Science schools: MIT, Stanford, CMU, Berkeley, Cornell, Illinois-UC, Wisconsin-Madison, UT-Austin, and lastly, University of Washington (which is where I got my BS in CompE).

      And as for learning introductory programming, I learned it in Java, shortly after my school made the switch from C++. While I kinda wish I had learned C++ from the start, I honestly don't think it matters which language you learn first, as long as the instructor emphasizes the basics of programming and not just the language. I haven't used Java in any of the software jobs I've taken since becoming a CompE major and graduating--just a lot of Perl and little bit of C++.

    37. Re:Java for Dummies by LuisAnaya · · Score: 1
      Hi:

      Perhaps HH's in the UK read CV's and trash them accordingly. Here in the US, HH take resumes and pass them through a pattern matching program for offers. Those candidates with the right keywords they get firebombed with offers. If you have Java on you resume, you'll get firebombed with offers. Colleges just want to fill the positions and that's what they do, sadly, matching their curriculum to what they see in DICE or Monster, which is mostly filled with HH looking for a commission.

      I guess that there is no way to win.

      Full disclosure: I'm just a computer engineer...

      --
      Vi havas e-poston.
    38. Re:Java for Dummies by Anonymous Coward · · Score: 0

      I am confused, how do you find the median in linear time? Average or worst case? The best I can do is nlogn worst case.

    39. Re:Java for Dummies by Anonymous Coward · · Score: 0


      That was amusing, but you really need to get over yourself. Why don't you ask candidates to bring their stumpers to ask you? I bet you've been asking the same interview questions for a decade.

    40. Re:Java for Dummies by ciggieposeur · · Score: 1

      We want very good maths as well, and that closes the filter so tight that one has to trade off.

      How good? My CS undergrad required up to Cal 2 (I think) + discrete + linear algebra + intro statistics. My MS engineering goes to PDE + perturbation theory. So: multivariable calculus, ODE, PDE, perturbation theory, linear algebra, intro statistics: is that high enough to meet the bar?

      I'm just curious, I'm actually scheduled to do full-time chemical engineering shortly.

    41. Re:Java for Dummies by ciggieposeur · · Score: 1

      So from what discipline do you plan on recruiting people who have all the training that you so desperately need? Chemistry majors perhaps?

      I think the skills the GP wants to hire frankly don't have an agreed-upon degree name anymore. Used to be any semi-decent CS program would have covered it, but I find that the CS/MIS programs at my school also are so non-technical as to be practically useless. The odd good student that comes through usually has already gained the skills on their own and can blow through the program with no sweat; the regular students who are here to learn it for the first time come out barely more computer literate than they came in (but they manage a lot of gaming in the meantime). The computer engineering majors do pretty well, but they are out of the EE department and spend more time on embedded systems than anything else -- no requirement for operating systems, compilers, etc.

      I've got most of the skills the GP is asking for, but then I'm also heading out of IT and into physical engineering. I don't want to have to move every few years after I turn 40 to stay technical, nor do I want to be forced into middle management, so I'm getting a PE.

    42. Re:Java for Dummies by mvdwege · · Score: 1

      Good point there. I blame my background: I learned binary math as part of learning 6502 assembly. And there it is very much used in control structures. OK, technically there are a lot of control instructions (the conditional/relative branches), that depend on the outcomes of binary math operators. But the end result was that the two are definitely linked in my mind and with boolean logic.

      Mart
      --
      "I know I will be modded down for this": where's the option '-1, Asking for it'?
    43. Re:Java for Dummies by Anonymous Coward · · Score: 1, Insightful

      "Hard to see knocking up forms for data as a real good job, regardless of the employer's industry."

      Unfortunately, it seems most other people agree. Based on my own experience, the user interface for data input is actually quite important - you need to think about how to make it as intuitive and foolproof as possible. Catching categories of errors and warning the user about them with some visual cue is a biggie, for example - or planning for how to scale a form for larger data input sets and still allow some sort of coherence in how it is displayed.

      Of course I'm sure the hope is input is a relatively rare activity or a one-time-per-problem step, but none the less many errors can be caught there in a variety of real world scenarios (corporate data process collection, for example, where controls are known.)

    44. Re:Java for Dummies by DCFC · · Score: 1

      >How good ?
      PDEs are a minimum, and I'd see you as a potential quant developer so that would mean finite difference as well as monte carlo.
      More stats would be nice.

      --
      Dominic Connor,Quant Headhunter
    45. Re:Java for Dummies by Anonymous Coward · · Score: 0

      How can someone understand the Linux kernel without C & C++ ?

      At the course levels where Java is used, they couldn't understand what a kernel even is.

    46. Re:Java for Dummies by Cederic · · Score: 1


      Oh man, you're so full of shit I can easily believe you're a headhunter - in my experience it's the profession of people that couldn't hold a real job.

      Apple's OS these days is based on BSD. If you want a stable *nix like OS with extremely good UI and good hardware then it's an excellent choice.

      Expecting people interviewing to join an investment bank to be kernel hackers is pointless. Expecting them to have good signal processing skills is stupid. I work for a investment bank and I've never transformed a JPG or submitted a patch to kernel.org. I do however know how to develop exceedingly high quality business software in extraordinarily short timescales based on unfeasibly fluffy requirements, delivering something that can make astonishly large amounts of cash for the organisation.

      Ask me for criteria for developer recruitment and I'll identify skills, attitudes and aptitudes that will lead to good software engineers capable of working at the business system level. Some of them may well be kernel hacking mathematicians, but that'd coincidence not design.

    47. Re:Java for Dummies by Anonymous Coward · · Score: 0

      To a good programmer, they look pretty much the same. All the fundamental binary arithmetic operators are implemented in terms of the bitwise logic operators, and they all belong to pretty much the same category if you know what's what. In fact C didn't even have plain logic operators at first, only bitwise operators, and the logic operators were added later. But to people who don't know what's what, it's very easy to ignore the fact that every number is just a pattern of bits and bytes. These people will have no trouble understanding if(a && b) but will stare at you as if you had just stepped out of a flying saucer if you present them with if(x & (x - 1)).

    48. Re:Java for Dummies by DCFC · · Score: 1

      Oh dear, an Apple fanboy.
      My issue with your rant is not whether you are right or wrong, but that the quality of the argument is so low.

      I did not give any mechanism for the correlation between low programming skills and Apple ownership, and to be honest I don't know why it is so high.
      For all I know, it may be that the stability of the system does not attract serious programmers. For most of my life a large % of the s/w I have used has been beta, homebrew, or just terribly buggy.

      >Expecting people interviewing to join an investment bank to be kernel hackers is pointless.
      You are confusing the housekeeping activities which are much the same at Goldman Sachs and Wal Mart and very high end work. That's not your fault, if everyone knew the shit I do, then they'd make my money.

      >Expecting them to have good signal processing skills is stupid.
      You are wrong. The highest paid people we see taken in by banks and hedge funds know SP. By "highest paid" I mean bidding wars between the top investment banks.
      You aren't in that category are you ?

      >I do however know how to develop exceedingly high quality business software in extraordinarily short timescales
      So you are a back office developer. Fine. The majority of bank developers are like you, they earn OK money.
      We don't handle people like you, unless they've accidentally ended up in a job far below their capabilities.

      We seek out a narrow speciality combination of skills, and there's no shame or despair to be felt that you don't fit our filter.
      You're not a vet either, fine.

      We do however recruit the people who will be giving you the "fluffy" specifications. You may or may not like that.

      --
      Dominic Connor,Quant Headhunter
    49. Re:Java for Dummies by StrawberryFrog · · Score: 1

      Java is the new COBOL. And we will regret it in 20 years for much the same reasons.

      I see what you're saying and I think that java will be a much better legacy to deal with than the creeping illogical horrors of COBOL.

      I think the most frightening part was having to yell at one of the professors one day, because the basic data structures he was teaching were being done incorrectly. He was teaching people to leak memory. ("Let's allocate a huge linked list, and then just set the head pointer to NULL and consider it freed!"

      Um, if he was teaching Java or C# best practice, then he was correct. That's what you should do, and then let the garbage collector pick it off at its leisure (or not bother if the program terminates just after). You don't make it clear if this was the case or not.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    50. Re:Java for Dummies by Cederic · · Score: 1


      I own no Apple hardware. I never have. Not much of a fanboy.

      And no, investment banks don't hold bidding wars for my skills. Consultancies have done, but I turned them down anyway. Not enough of a egotistical cunt, you see. Shrug, I've moved beyond the hands-on development roles anyway.

      Many people do a job that's below their capabilities. Many people enjoy it. Many people tackle challenges that aren't below their capabilities, but aren't as highly paid as City contractors are, yet are more intelligent and/or skilled than those contractors. All of which leaves you sounding like a smug twat. And leaves me sounding childish for pointing it out. Ah, the joys of the Internet.

    51. Re:Java for Dummies by owlstead · · Score: 1

      The Java in the OS book is there so the persons don't get extracted from the content, you mediocre piece of shit (well, you started, didn't you?). The reason is that many universities use many languages, so they'll use a language that's relatively easy to understand, without being too restrictive. Only if they use specific or advanced Java features to explain the general concepts, yes, then you have a problem. I've seen the book and I don't think that this was the case at all. It even explains that specifically in the intro, if I recall.

      The book is just being used as a intermediate between (mostly horrible) pseudo code and the unreadable mess that is C/C++ (for a beginner, of course). And yes, Java is used a lot as instructional language as well. It's been that way before the language started to get popular commercially. And simply said, I think it is better to learn OS fundamentals before things like C++ pointers.

      "Any CS grad who sends us their CV with bullshit like "computers and society" or "web design" has their CV consigned to trash with no further reading."

      I would put that on my CV, if I was pretty good at it. Just like many other things, it can help you succeed. I ain't and so I won't, but just trashing a CV because of it makes you a mindless jerk. If it was only stuff like that I would start to worry mightily, unless they applied for a (possibly lower payed) job that specifically requires those kind of thing. Even then, a great web artist probably makes way more than I do.

      "Although the seats get filled, they quality is in monotonic decline."

      Oh do shut up, granpa.

    52. Re:Java for Dummies by DCFC · · Score: 1

      >Perhaps you should start with finding applicants who have a decent command of the English language, Nope. The thought makes me feel mildly ill. I have explicit instructions from some employers that they don't care about verbal skills all that much because they are sick of getting preppies with people skills who take personal offence when the compiler criticises their code. There are mid and low end jobs knocking up GUIs or importing data that require good people skills. We don't hire for those. The trend is that by the end of 2008, we expect that people we work with who don't have English as a first language will be the majority. We like people skills, but it's not in the top 5, and we will pick good maths and C++ over a nice smile every time. >and the proven ability to interact with customers, management, and a team of programmers? Newbies don't have that, and frankly I score down people whose CVs talk too much of "customer contact", indeed in our 140 page guide to getting a fuck off job in a bank, we tell people to scale back holiday jobs and customer skills to zero, or a vestige. We do like leading men under fire, and yes that includes people who have shot at friends of mine. >Ensure they not only have the ability to communicate coherent thoughts in person, on the phone, in conference, or on a whiteboard. We like articulate people. A lot. Even if the English is broken we are implacable in our demand for clear thinking. I can't use whiteboards, stopped altogether when a minion pointed out that I always drew the same horrible shape of badly drawn concentric rings with random bent radial lines. (I think it is a message from the Iterators) >Additionally, test them for their ability to adapt to the dynamic environment that is Corporate America. If a candidate claimed such an ability, the time taken to end the interview would be determined by my rather English politeness, not any desire to hear them bullshit any more. Again this is something we explicitly warn against in our guide, the phrase being "do not sound like you work for Accenture". We recruit across for roles across the globe, we don't do "Corporate America", having done stints in such things I am glad I can choose never to do so again. We do American banks, and if I recommended a candidate on that basis, not only would they not be interviewed, I would lose some of my hard won credibility. (tough to do when you are pimp). >I could walk outside right now, and find myself umpteen code monkeys to write EXACTLY what I wish them to write, You are a lucky man to have found a job that pays you without setting the sort of demands people in my business fight. >as opposed to the creative dialogues I seek from my team members. I like creativity, tough to find, tougher to build. Candidates get big bonus points for this. Most don't get any. >I want people to be enthusiastic about coding, their product, and their team. Don't we all ? >P.S. I'm not sure, but describing yourself as a "pimp" gives me pause as to your ability. You are right, if I were dealing with "corporate America", it would be insane. I deal with investment banks, hedge funds, ratings agencies and the occasional government. The mindset in my niche is quite different. Not necessarily true, but that is my [business] perception.

      --
      Dominic Connor,Quant Headhunter
    53. Re:Java for Dummies by quantum+kev · · Score: 1

      Wow. I don't know about you, but I have yet to meet someone who came right out of college and wrote their own OS without any previos programming experience. I think the bigger point is being missed here :

      Yes, if you have graduated college, worked in the field for awhile, and all you know is Java, then your skillset is necessarily limited.

      However, as someone who recently graduated with a BS in CIS, I must say that I consider myself fortunate to have attended a University that teaches hands-on instead of theory. We were introduced to a number of languages. But if I was tasked with learning C or C++ right out of the gate, I probably would have dropped out. Classes like those I took that taught VB and Java served simply as tools to help me gain a better understanding of logic, data structures, and good programming practices.

      To those who say "if you only know Java, you can't hope to do anything in C++", I say that more than once, I helped my buddies in their electrical and computer engineering courses with their C++ because I knew the CONCEPTS, and for that, I think Java is as good a language as any.

      Will someone who doesn't know C or C++ be able to use pointers? No. Will someone who doesn't know C or C++ be able to code their own OS? No. But how many people, coming right out of college, are tasked with such things? If they do not have the motivation to learn new languages, it will show over time. But to categorically dismiss them because they don't know C or C++ is to me shallow and arrogant.

      But hey - I'm just a programmer who has worked in the financial services, software services, and health insurance industries with the skills I have, which don't include an intimate knowledge of C++ - so what do I know, right?

    54. Re:Java for Dummies by kiwipeso · · Score: 1

      As someone who has studied parts of a few degrees (yet to complete due to illness), I can say that the biggest waste of my time was software engineering, not maths or computer science or languages. (I didn't study media, as I have a family business in media.)
      I can create, in Java (far quicker and more reliably than hacking a version in C++ for each platform), operating systems, databases with built-in intelligent sorting, game servers, peer to peer MMO games, P2P encryption networks, secure webservers, etc.

      I claim nonsense to your idea that you can't do an operating system in Java. You are merely confusing mainstream operating systems with the language used to write it. In effect you are trying to say that if an essay hasn't been translated yet into another language, it can't be.
      This idea is patently false, it's as bad as calling linux a real system just because it uses C and C++. (No, this isn't a flame of linux.)

      Also, you claim that CompSci grads aren't smart. What happens when you ask their IQ and it turns out to be 20 points higher than yours?
      Which would only make them about 120 or so, which isn't that smart, but is far better than your average 100 IQ.
      Also evident is your lack of statistical knowledge, 50% of an interview sample not wanting to perform at that level is in accordance with the bell curve. Another point, which shows why you are the lowly headhunter and not the head being hunted. :-)
      I find that your short-sighted "insights" are not going to serve anyone at the banks you recruit for well. You need to get some balance.

      --
      - Kaos games and encryption systems developer
    55. Re:Java for Dummies by DCFC · · Score: 1

      >Why would anyone need to understand the linux kernel or C++ unless they were linux kernel programmers. Same reason wannabe doctors cut up dead bodies. >Also your comments on Java are laughable. Java is in use in day to day objects in real life. Phones, Set top boxes, Cars. It is not just web servers. There are even >operating systems and emulators in Java which run fine. Go read up on JIT and stop living in the 90's. OK, I'll come clean I have no problem with Java, it's Java *developers* I despise, when they can't be bothered to read my posts, and take anything which does not sing its praises as attacks on their manhood. I really really carefully said, I had no problem with Java for many sorts of work. I explicitly agreed later that there were many jobs in it, and will go further and say that it is the right choice for many things. Just in case my words were read by over-sensitive Java developers my post said that the success of Java in isolating you from low level detail was an issue. I think you need to be able to think at multiple levels, even if you only code at one. Interview questions require a finite tractable answer in a relatively short amount of time. As it happens I don't ask about bitmaps, but it strikes me as a suitable for part of evaluating an entry level developer. Nicely open ended for a superior candidate to shine. You seem to be under the impression that a good developer knows how to do certain things. We part company on that. A good developer can work out how to do things. The logic and coding issues behind bitmaps has applications in high end finance, but I don't expect a newbie to even be able guess what they might be. I do expect them to deal with a problem they have not seen before. I don't give a toss if they understand the genealoogy of OS/2, to Windows bitmap formats, or their relationship to VGA palettes or the transputer. I do care that they can think up a way to store data to a spec I give them.

      --
      Dominic Connor,Quant Headhunter
    56. Re:Java for Dummies by DCFC · · Score: 1

      >So from what discipline do you plan on recruiting people who have all the training that you so desperately need? Chemistry majors perhaps?
      Physics, maths, and yes the occasional chemist, or at least chemical engineer.

      >Perhaps I'm misreading you, but your tone seems dismissive, as if teaching design patterns and classical algorithms was somehow unimportant.
      My apologies, I see them as critical, but I am dismissive of the idea that the language you choose matters all that much.
      If Java, fine, but you can do it in VB (not that I advocate that)

      >But just because someone knows English doesn't mean they'll understand Shakespeare.
      Agreed.
      But what would you think of someone with a degree in English who had not read any Shakespeare ?
      My epxectation is that a graduate of a subject has a superior, deeper grasp of the subject.

      To stretch the analogy perhaps too far, what would you think of an English major who had only read Shakespeare in cartoons ?
      "because it is easier to teach"...
      As it happens I have read and understood Shakespeare, and my early introduction to it was highly dumbed down.
      (my dimwit politically correct English teachers dealt with the anti semitism in the Merchant of Venice by ignoring it).

      But I did read it in the original later, indeed one is expected to have read a large % of Shakespeare *before* starting an English degree.
      Chaucer is rather harder going.

      Yes, by all means use any language you like to do the algorithms and structures necessary for kernel work. I first did threads in a horrible mutant Pascal, and actually found them easier to understand in C. We did O/S stuff in pseudocode, ut uitlately we did real code in a real system.

      Perhaps a better analogy than English is medicine. Most doctors are not cardiac specialists, and would be as hesitant to do anything to the heart as most programmers to hack a kernel. But all doctors, even dentists know at least roughly how to spot when the cause might be the heart, or when the odds are it is something else.

      It goes back to my themes of a good techie being able to think at multiple levels to be effective.

      --
      Dominic Connor,Quant Headhunter
    57. Re:Java for Dummies by Anonymous Coward · · Score: 0

      You claim to do headhunting for the financial industry, but your requirements are sane and focus on the right points.

      Hence, we can conclude that you are an elaborate fake.

    58. Re:Java for Dummies by clicktician · · Score: 1
      >>Java is part of the dumbing down of CS

      Perhaps, more correctly, [the dumbing down of] corporate IT departments... Demand shapes everything.

      I'm a tech architect for a fortune 50 company, and I use headhunters to find IT cattle for my body shop.

      We insist on Java skills for three reasons:

      1) The speed of development in my shop is merciless. If you can meet your quota using FORTH -- knock yourself out.
      2) We position our needs to correspond with abundant supply. This is not a coincidence. It's simple predation.
      3) By the time you become a principal architect in my company, you haven't written a program for 10 years. We follow the edge, far from the bleeding cuts.

      Weirdly, the bar is set far higher than it's ever been. 10 years ago, HTML was a programming skill. Today, my department regards HTML is a secretarial skill.

      --
      Son, someday all this will belong to your ex-wife.
    59. Re:Java for Dummies by Velaki · · Score: 1

      I should charge you time and a half for having to wade through your poorly formatted reply. Sane? Yes. Coherent? Yes. Rude and impolite? Very. And yes, I've worked the Fi's, Pharm's, Cosmetics, you name it, and if a compiler criticizes someone's code and that person is offended, then I don't want them on my team.

      I value people who can get the job done, without babysitting, hand holding, or other such niceties; however, I need them to be able to communicate to me efficiently, concisely, and effectively, their status and projections so that I can view the variance, and re-level set my customers' expectations accordingly, while keeping a keen eye on the cost.

      I must apologize, though. I didn't realize you work for a UK firm; however, I used to work with UK Financial companies, and they did seem to value the same things I did. In no place in my original reply to you did I discount basic skill and abilities as a programmer.

      As for "customer contact," I would say that to eschew any, who might conjure a modicum of interpersonal skills, is antithetical to the fundamental goals you might be trying to achieve. Regardless, if they have "people person," or its ilk, on a resume/CV, then they better well be able to charm a client into thinking that their coding bugs are the latest and greatest feature.

      -v.

    60. Re:Java for Dummies by Anonymous Coward · · Score: 0

      I started at 12 on a computer stolen from the government :) You're 1337, and full of shit. Thanks for revealing how full of shit you are. Do you call yourself by your 1337 name at work, m0rp43us?
    61. Re:Java for Dummies by pimpimpim · · Score: 1
      Your case is likely colored by the kind of work that needs to be done in investment banking (and insurance). Some of the algorithms used (finite difference, monte carlo) are very closely to those algorithms needed in engineering or physics, physical chemistry, or even in developing a game engine as you say. I know of many theoretical chemists and physicists that moved on to banking after finishing their Ph.D.

      On the other hand, most day-to-day administrative/financial work outside of investment banking is database work (SAP, anyone?), which would require a totally different kind of profile. In numbers of jobs, these hugely outrank investment banking, inversely so for the salary. There is a nasty trend to 'grade' universities on their output in percentage of students finishing their degree, and looking at the amount of alumni getting fast employment. From that "market" point of view, a university would likely teach their comp. sci. students the latest SAP and whatever language that is popular that day, in some easy courses.

      Point is, that is not what a university is for. In Germany there is a clear distinction in trade-oriented colleges ("Fachhochschule") and science-oriented universities. The first are meant for students that have a clear job in mind, courses are less theoretical and they will get a good training for their field. Universities, on the other hand, are meant to give a theoretical foundation and broad choice in subjects to the student, and let the students find out their way through the course, at the end not much closer to a job, but with a lot of "academic" self-development skills. Both teaching institutes have their good cause, but there seems to be a trend in universities to throw away their academic value in favor of increasing their throughput of 'successful' students.

      I think university boards and politics can put a halt this, and should. Beginning with ending the use of the percentage of students finishing with a degree as a statistic of success. Point is that it is an easy number to present, and educational quality isn't as easily quantified. I'm still pretty proud that at the chemistry faculty at the Vrije Universiteit Amsterdam were I was studying it was decided to put the harder math course early in the program, to help students that were weak in math realize that chemistry at the university level might not be the best choice for them, at a point where switching wouldn't mean a lot of lost years of study. They now also offer 'life sciences' to catch the large group of less math-inclined students, the high number of students enable the employment of the staff needed to teach hardcore chemistry to the few hardcore chemistry students left. (To understand the problem: In my year we started with 20 students, about the same amount of staff was needed to teach the various courses in the curriculum. The university will earn much more from a law department, where about 1 staff member is needed per 100 students.)

      Something different regarding your "biologist" example at the end: when a biologist reaches a point where quantum theory might be needed, it will be very smart to realize that this is way above his/her head. The biologist will make a smart move to search for an expert on quantum theory, who will immediately see if it would be a waste of time or an exciting possibility for collaboration. A biologist with a "the sky is the limit" attitude might have started the quantum work anyway ("it sounds cool"), waste a year on halfway grasping the theory and getting GAUSSIAN installed, and end up with a crappy bunch of research that is likely to be rejected in any decent journal. A big part of understanding your field is knowing the limits of your understanding and possibilities (and as far as quantum theory is concerned, there are a lot of limits to be aware of :).

      --
      molmod.com - computing tips from a molecular modeling
    62. Re:Java for Dummies by philipgar · · Score: 1

      We observe that all CS grads who own an Apple computer fail to impress us, if we continue to bother interviewing CS grads at all, this will be an early question, such is it's predictive power. More than one deluded fool has tried to explain to me how "innovative" a little firm like Apple was, citing how they invented GUIs and portable music players. They view choosing Apple over MS as some political statement of liberty. They flatly refuse to believe me when I tell them about Apple closed architectures (those who can understand what one is), or the way Apple has oppressed developers in ways that MS would never dream of. I don't expect them to agree with me, but I expect their opinions to be better than the BBC.

      I'm not sure where you're finding these CS grads who are such idiots about apple. Most of the apple users I know (including myself) know that apple has a stranglehold on hardware and software for the mac, and accept the vertical monopoly because it works for us. In fact I would venture to say that the majority of apple user's I know (who are CS/compE students) bought a Mac because they were Linux users, and got sick of having to mess around with linux to get things working (especially on a laptop). Granted, I might be an exception as I never really hung out with the "average" CS/CE students, and only with the ones who knew what they were doing. I'm sure you see your share of glorified IT students using macs, but IT is not the same as CS, not even remotely close.

      And I still don't understand your push on signal processing. You are looking for people making business software for a bank... Most signal processing people are going to be working in embedded devices, as thats where the demand is. Additionally, I don't know many CS programs (if any) that require a signal processing course. I know it is common that all computer engineers take such a course (where they teach them the math, but not the practical usefulness of the algorithms), however CompE has very different requirements than a CS degreee.

      Phil

    63. Re:Java for Dummies by Rick+BigNail · · Score: 1

      Well, you need to read the MIT Algorithm books :)

      Or search linear median on google!

    64. Re:Java for Dummies by kiwipeso · · Score: 1

      So what you're saying is that you prefer idiots who might get viruses, which leads to interesting things if they do homework...
      Apple is part open, part closed. The kernel and underlying OS is pure BSD, the GUI is closed source.
      I view using Apple as compared to MS as an indication of reliability, I want a computer that just doesn't crash.
      I could not give a damn about the way apple treats developers, as long as I can develop Java code on my macs, I don't care.

      --
      - Kaos games and encryption systems developer
    65. Re:Java for Dummies by DCFC · · Score: 1

      That's a rational view on Apple, that's what I look for, am more impressed by a smart contrary view than a blind love of Linux, Windows or even Os/2.
      To me you don't understand something if you can't poke holes in it, even if you agree with the general position.

      >And I still don't understand your push on signal processing. You are looking for people making business software for a bank.
      The short version is that each good entry level SP whizz is worth $30-40K to me :)

      >And I still don't understand your push on signal processing. You are looking for people making business software for a bank...
      By "business s/w" I guess you mean the standard accounting, sales, customer management and inventory tracking type of thing ?
      We don't do that either.

      Short version of why this is useful:
      Prices of financial things move so randomly that they are often modelled as completely random. This allows you to use the well established maths of stuff like heat diffusion and stuff like Brownian motion to price derivatives. You can have long arguments about with random distribution to use, but most work uses the bog standard normal distribution.

      But we do observe that that some things are "caused" or at least correlated to other things. But we are in an environment not unlike SETI, where they may or may not a signal but with appalling signal to noise ratios. A priori we don't even know what signal we are looking for.

      The media likes to report that changes in interest rates "cause" stock prices to go up or down, which is sort of true. But if you look at the raw data, it is not always that easy. Indeed an interest rate cut can "cause" share prices to go down if the market assumed the cut was coming, or if it was expecting q bigger one.
      Sometimes another factor swamps this signal anyway.
      Also this is a very obvious signal so it's hard to beat others to exploit it, so the search is for other signals that imply changes either in the absolute level of price, or more recently in the volatility of the price.
      Exploiting this is a good earner for the investment banks and hedge funds, when they get it right.

      Depending on the market the signals come in from about 100 to 0.01 Hz in the form of prices and trades. For options on indexes the data flow can be 10KHz or more.
      Finding a pattern in that is tough, as is not mistaking coincidence for signal.

      This is a speciality, I'd guess around 0.1% of IT people in banks use any significant amount of SP, but that fraction do make good money.

      Most CS courses do not seem to have SP, it typically being in EE, though at some places students may pick from both departments, and there are many hybrids.

      --
      Dominic Connor,Quant Headhunter
    66. Re:Java for Dummies by kiwipeso · · Score: 1

      Maybe he wants people who can do fourier functions or laplace transforms. Or other maths that are useful for cryptographic functions.
      I would say exactly what, but I want to keep a lid on my cryptographic project details until I find a thesis topic.
      A major part of signal processing at banks is also in the attempt to determine trends in trading cycles, you still find banks trying to figure out exchange rates and predict what will happen in the short-term to maximise profit.

      --
      - Kaos games and encryption systems developer
    67. Re:Java for Dummies by DCFC · · Score: 1

      Are you a Windows fanboy trying to make Apple fanboys look bad ?

      Are you really saying Apples don't get virii ?

      >I could not give a damn about the way apple treats developers, as long as I can develop Java code on my macs, I don't care.
      And you aren't aware of any of the recent history on this ?

      Actually I don't care any more than you do about Apple developers, but my point was that if someone is going to call Apple the good guys they ought to know their track record.

      --
      Dominic Connor,Quant Headhunter
    68. Re:Java for Dummies by kiwipeso · · Score: 1

      Only at 12? I started at 4, learnt to read and do basic maths from the computer screen.
      You show yourself to be a mere ignoramus in most parts of your posts, I can only assume it stems from your late start in computers.

      --
      - Kaos games and encryption systems developer
    69. Re:Java for Dummies by Anonymous Coward · · Score: 0

      >You hiring? ^_^

      Yes, but not you.

    70. Re:Java for Dummies by DCFC · · Score: 1

      >Your case is likely colored by the kind of work that needs to be done in investment banking (and insurance).
      Yep, an assumption I have tried to make as clear as possible.

      >On the other hand, most day-to-day administrative/financial work outside of investment banking is database work (SAP, anyone?), which would require a totally different kind of profile
      Agreed, and before you ask, I don't find the database theory on many CS courses that impressive either.

      I agree about SAP et al, and I'm big on "portable" skills. These tend to be deeper and more theoretical, allowing you to move on when SAP (or VB or Java or PHP) are no long er in demand.

      I also agree about college boards, been on one myself. Hanging out with bankers has led me to offer one idea on how colleges should be funded. That is by instead of charging fees, they get a % of your lifetime earnings, say 1 or 2%, collected through the tax system.
      Although they would care about your first job, this would represent only 5-10% of their rakeoff, so they would have a profound incentive to not only give you long lasting skills, but also to provide alumni learning. The private sector course I teach on (Wilmott CQF) is a lifetime deal, you get to sit in on new lectures to keep up to date, and all are videoed so that you can learn at home or distance. It's cool, but not exactly rocket science, yet I know of no mainstream academic institution that does this.

      2% of pay is usually not something most people would go to great lengths to dodge, so they'd get most of it.

      I'm older than most people around here, and have had to upgrade my skills more than once, and have made occasional bad bets on what was the next big thing.
      And "bet" is the right word.
      When you learn SAP or Java, you are betting that in the next few years there will be a good market for that skill.

      Although my posts here have caused some to think of me as dumb, and my current role as a headhunter does not exactly counter that, I am a keen student of trends, and through various channels have better information than most, so my screwups are more my fault than those of others.

      I have seen Powerbuilder, OS/2, VB, network admin, Clipper, Nortel Routers, and any number of other skills go from red hot to either death, or mediocre pay with limited career options. I've managed to stay an employed techie longer than most of my peers because I had a first rate grounding, and because I've invested heavily in learning new shit.
      And yes, I am a techie, companies give me money to make things happen that they can't do themselves, and could get a real job by Monday, tomorrow if wanted to accept an average wage, indeed on my desk is a role working on the next Harry Potter film (as an incredibly minor techie) that I could do, if the pimping went pear shaped.

      --
      Dominic Connor,Quant Headhunter
    71. Re:Java for Dummies by DCFC · · Score: 1

      Sorry about the formatting, so much for me being a techie :(

      My values as a former manager of techies are similar to yours, but one can hire what is out there, and sometimes the right technical skills do not come in a friendly package.
      I quite literally busted two buttons off my shirt in the frustration in not being able to kill one techie where he stood, so I have complete sympathy with the need to upgrade people skills. (are you reading this David ?)

      My niche is lighter on this requirement, partly because most quants don't have to talk to customers much. As someone who sells such people to banks, I know that the one with better "technical" skills will get the job 9/10, so I serve my customers what they want to buy.
      But a few have got vetoed because of extreme personality issues, and a few dig themselves a whole by attacking their current employer too violently.

      If you will indluge me, I will share part of our Guide, where we echo some of the issues that arise when we ask people why they are leaving their job. For confidentiality I have changed a few nouns, but the sentiments are real.

      Why your boss is a jerk
      If you're leaving your job, it's of course likely to be because you've stopped enjoying the work, or that your job doesn't offer you the opportunities you want. Money may well be a factor and as HH's we don't have a problem hearing this. Money has many problems but at least it is relatively simple as a motivation.

      Sometimes however we hear from a candidate that it is because his current boss is a shambling moron whose personality is an unstable mix of dishonesty and ignorance barely held together by malicious greed. His management style draws upon both forms of Marxism, both Groucho and Karl. He can recite "The Art of War" from memory and he frequently quotes from it at meetings (in the original Chinese of course). You feel you have to leave now or you and he will settle your disputes with knives. The IT at your department looks like it's run by EDS, the management are in league with Al Qaeda, compliance has been infiltrated by Accenture and Jack Bauer has told you that the back office wants you dead. Today you found a live rat in your coffee.

      --
      Dominic Connor,Quant Headhunter
    72. Re:Java for Dummies by DCFC · · Score: 1

      I apologise for wasting the time of someone who is obviously a better man than I.

      --
      Dominic Connor,Quant Headhunter
    73. Re:Java for Dummies by DCFC · · Score: 1

      I don't expect someone to write a whole O/S as undergrad, indeed my perception is that the importance of O/S writing as an activity has been declining for at least a decade. I just like to see people who have worked at as many levels as possible.
      OS/s can be written in pretty much anything, but C/C++ is by far the dominant language, so if a student is going to take the lid off, that's the tool he should have some skill with.
      "taking the lid off" is an indicator of the intellectual curiosity that I greatly prize. Elsewhere in this thread people are talking about Apples as stable platforms.
      I like stability, like any other user, but something feels wrong about a CS who prizes this above all. Fair enough if you use a PC for writing essays, but to me a CS ought to be by instinct someone who cracks open his PC within days of it's delivery.

      I refer to myself here as a "user", and that has a passive ring to it, to me a CS should be someone who does things to computers, not someone that computers do things to.

      --
      Dominic Connor,Quant Headhunter
    74. Re:Java for Dummies by DCFC · · Score: 1

      I do think students need to spend some time learning how to understand big complex systems.
      An O/S is a good example of this, but of course not unique.

      Obviously there should be thorough teaching in how to avoid bugs, but I feel that the subject of debugging is neglected, some people graduate with no formal teaching in this important discipline at all. Again you need multiple languages to get there, and some bug types are mutually exclusive. You don't get a lot of pointer issues in Javsa, but C++ does not present you with the issue of not knowing when your freed resources will actually be released.

      --
      Dominic Connor,Quant Headhunter
    75. Re:Java for Dummies by Anonymous Coward · · Score: 0

      >We have already blacklisted courses like the one at Kings College, because they teach operating systems in Java.

      You do realise that they teach operating systems in Java because they use the textbook "Modern Operating Systems" by Tanenbaum, right? The guy who has wrote the industry standard textbook on operating systems for 20 years (from Operating Systems Design and Implementation to MOS)? The guy whose Minix inspired Linux? Who the fuck are you to say he's wrong?

      And surely if what matters in CS /is/ the theory, who cares which language you use?

    76. Re:Java for Dummies by Anonymous Coward · · Score: 0

      I doubt if even 1% of CS grads could write code to turn this BMP into a JPG, or even explain the ideas behind this. In my experience, 50% could not work out how to develop a data structure for a bitmap that used palettes.


      Who gives a fuck? I don't want any investment bank handling my money that has it's programmers writing image conversion routines.

      When there are so many readily available libraries that do image manipulation, why would you have your in house guys doing it? That's a bad investment.

      Computer Science should be sciene. It's not software development which is what 90% of the worlds programmers actually do. You know, not writing quicksort and binary search routines, but writing software to process insurance and what not. Yeah, it's good to know the basics, but the average programmer is never going to work on an operating system or for Google or Microsoft or Oracle or Redhat.

      Universities should over a CS degree and a Software Development degree with a minor in CS, IMHO.
    77. Re:Java for Dummies by philipgar · · Score: 1

      The short version is that each good entry level SP whizz is worth $30-40K to me :)

      I hope you mean $30k-$40k more than the regular salary. Because anyone who is good with this stuff deserves more than that. Also, I imagine at the specialty you're looking for people with a ugrad degree are going to be rare. I would think most people fitting this category have at least an MS, and others possibly a PhD. Although of course, I'm not an SP person (I've dabbled some in it because I had to, not because I've wanted to). If you want to change something, I'd imagine you should serious consider looking over schools EE curriculum, and in particular what is taught in the introductory Signals and Systems course. This course is very much designed for pure theory signal processing, and tends to ignore the practical implications of signal processing, and the reasons that it is so useful.

      Phil

    78. Re:Java for Dummies by DCFC · · Score: 1

      >I hope you mean $30k-$40k more than the regular salary.
      I'm a headhunter, the bank pays me 25% of first year salary, hence those numbers at entry level.
      It's hard to say all that precisely what it's worth, since in many cases it does you no good at all if your work does not intersect with that type of investment banking, whilst writing I see a curve, basically your chances of making seriously good money at least double, and sets the bounds of what you might reasonably expect to go up.
      I suppose you model it as a large box of lottery tickets.

      You're right few undergrads have got that far for the top jobs, but SP helps be a member of these teams. A QD with SP can get pretty decent money, and that can be got from some ugrad degrees. That's actually pretty rare though since most at that level do further study.

      We do look at EE, and it is a better hunting ground than CS, which is not a criticism of CS, though I do like to see some information theory in the skills set of a CS, partly for the SP niche, but mostly because I believe that it is a critical underpinning to really "getting" software. It won't help you do loops, or solve pointer bugs, but as an enabler of high level thinking about systems I cannot imagine how you can think properly without it. The fact that it is useful in data compression and SP, is to me a lucky coincidence, not the real motivation.

      --
      Dominic Connor,Quant Headhunter
    79. Re:Java for Dummies by Catalina588 · · Score: 1
      There is no doubt that investment banks need some honest-to-goodness computer scientists. However, that same bank (or manufacturer or even software developers like Google) also needs legions of middle-grade programmers. Many of those programmers would be better suited to the organization if they knew or cared more about the business processes that are being computerized.

      Seems to this grey-haired, ex-programmer/analyst/architect/CTO that an under-discussed problem is trying to fit all programmers through a single computer science curriculum. Payroll programmers do not need to know about floating point algorithms. Scientists do not need to know how to build a web server (but they will use one). And Microsoft's Vista engineers don't need to know much about calculating payroll taxes. So where does that leave us?

      Our economy needs several -- at least five would be a start for a debate -- flavors of programmers. But it sure looks like we have basically one-size-fits-all when it comes to training programmers at the university level. I fail to see how we can prepare for the society of tomorrow with such sub-optimal training, umm, education curriculum.

    80. Re:Java for Dummies by DCFC · · Score: 1

      I agree, and see it as comparable to the difference between economics and business studies, or indeed between physics and engineering.
      One issue I've faced both as a foot soldier and a CIO is that many firms say "the techies do not know/care enough about the business", yet in my experience >90% of the time the techies are very interested in the business and hungry to learn more. But when they ask for training, or spend time talking to domain experts they get stomped on to "focus" on the technical stuff.
      Techies can make very good salesmen, OK, not always, but I sold the British Treasury the most expensive thing they ever bought for themselves, and a big thing in this was that I could answer any question on any aspect of the system. Thus when I said it could do X, or that A was better than B, I was believed. Sales people suffer horribly when all their understanding is second hand and way outside their understanding.
      Sales skills could help a lot, even for purely internal work. Most companies have fallen into a "suck" model of IT requirements. They say "we want it to do X", and they typically get something between W and Z. But as techies we have all discussed cool things they system could be made to do. Most of which are of course useless, or actually illegal or damaging, but I will share with you having sat in meetings with marketing, finance and sales, that their ideas average rather worse. The IT orginiated ideas need to be sold to the rest of the business, not only because they may be useful, but also because they tend to be a lot more achievable since they come from the people who do things to the existing setup.
      Even when they are crap ideas, there should be feedback, so that they can learn to produce better ideas.

      Also bonus and pay do not reflect contribution to the bottom line. Not only is the number too small it is so disconnected with achievement that I will share with you as a headhunter that some techies tell me that they reckon they were overpaid. The bonus oprocess is polluted by heavy noise, and the fact that IT bonuses are set by IT directors who see themselves as part of the "management team", not IT. Thus they have only a vague idea what their people do or contribute. One would never put an accountant in charge of sales, but they frequently end up controlling IT. These are not even good accountants. A good accountant gets to be finance director, or whatever, do you think a top flight accountant *wants* to manage IT. No. So you have 3rd rate beancounters running things.

      --
      Dominic Connor,Quant Headhunter
    81. Re:Java for Dummies by hughk · · Score: 1

      I was working on a little project up at angel (you probably know the client) where they were having problems calculating their VaR in a timely manner. From a technical viewpoint, they could have junked Java and their Sybase database, but that would have cost a lot of effort. They had some good developers but no defect or release management and since people had little outside experience, nobody saw this as wrong.

      --
      See my journal, I write things there
    82. Re:Java for Dummies by kiwipeso · · Score: 1

      I haven't had a single virus since changing over to the mac platform in 1990.
      I find the mac developer environment to have improved since they started shipping developer tools with OS X.

      I've used every major operating system since 1980, with the exceptions of sun solaris, atari TOS, IBM AIX.

      It is, in theory possible to get a virus on a mac, if you are dealing with people dumb enough to install active X or
      download custom programs from porn/gambling sites or the like.

      Apple are the good guys, good in quality that is. However, I have yet to migrate up to 10.5 as I fear it is relatively unstable still.
      I would appreciate it if they could get onto Java 1.6 soon, I think that might be covered in my courses.

      PS, I'll send you an email soon from my actual email account soon.

      --
      - Kaos games and encryption systems developer
    83. Re:Java for Dummies by rjames13 · · Score: 1

      I doubt if even 1% of CS grads could write code to turn this BMP into a JPG, or even explain the ideas behind this. In my experience, 50% could not work out how to develop a data structure for a bitmap that used palettes.

      Amazing how many people sidestepped this question, I'm not actually replying to you I'm replying to all those who want to see someone answer this. And for the record I'm doing this off the top of my head no Internet search no books.

      First I make the assumption that the BMP is in a file on the disk. Before I load that file in I need to know a) it's size and b) it's path. It's size is not the length of the file but rather the data stored in the header that tells me the width and height and depth of the image. I also want to know if there is any palette and if the file is RLE encoded (I would have to look up how to unencode it if it was in RLE). I would probably use a structure to load that data off the header of the file. Then I can calculate how much memory to allocate to load the file into. I load it into another structure most likely a straight array. Then I can think about saving the file or converting it to JPEG. See the difference between a BMP and a JPEG picture when actually loaded into a program and being used is zilch, because normally only the saving and loading routines worry about compression, most of the time the picture is handled as a block of memory (especially with 8BPP). So to convert to a JPEG I create another structure to store the data in. I run an algorithm across the image (I don't know what exactly never studied it) that takes from the BMP structure and converts it into a compressed JPEG format. Then I can just write that back to the disk or send it to never never. Oh it needs a header too.

      As for palettes they are not used much anymore because we mostly have >16bit colour, on average most systems have 8bits for each colour channel. Of course if you load in a file that has colours mapped from a palette it would not look pretty. So you need to look at the palette for such an image to display it even on high colour systems. With palette colour as opposed to say 16 Named colours of the C64 each pixel in the image is given a value that value is mapped in a 1-M relationship to the palette. If you have a pixel that has a value of say $16 you look in the palette and that would tell you how much Red, Green and Blue to use to display for that pixel. Encoding a picture from a hires colour to say 256colour is much more complicated.

    84. Re:Java for Dummies by rjames13 · · Score: 1

      8BPP should be 24bpp

      8bits for each of the following colour channels red, green and blue

    85. Re:Java for Dummies by kiwipeso · · Score: 1

      A percentage of your lifetime earnings? That smacks of communism, simplistic and evil.
      I prefer the new zealand system, where citizen students pay 25% of the actual cost, taxpayers the rest and foreign students pay true 100% cost.
      Also the loans are interest free, so it gives you a lifetime to repay.
      Plus it usually works out to total a year's salary if you get living costs too. (under 25 or "rich" parents)
      Only med students, BA students and student politicians complain.

      --
      - Kaos games and encryption systems developer
    86. Re:Java for Dummies by DCFC · · Score: 1

      Must be said that my first reaction is to throw hardware at such problems.
      Although I seem to have ended up painted as a Java hater, I am more relaxed about it's performance problems than many people.
      Unless you are doing real time(ish) work more h/w is a sure kill for a fixed budget.

      Database issues more often resist hardware solutions, often this is down to locking issues where "merely" doubling CPU buys you very little.
      But VaR is by it's nature not write-heavy, so locking ought not to be screwing with you, unless the SPs are badly written.
      Oh, hell tell me that you weren't doing row by row JDBC with locks and cursors ?
      Please tell me that, I'm giving the final Dominic Connor memorial lecture tomorrow (1/2 a mile from the Angel office), and I need not to lose sleep tonight.

      In extremis, for VaR I might even go for detaching the files the DB is on, copying them to another server, and spitting the load that way.

      Obviously I don't know your setup well enough to know if my ideas are crap or not, but I think a useful bit of a CS course ought to be that sort of hack.
      Actually it would make a pretty good O'Reilly book, let's do it right here, rigght now.
      "Extreme performance hacks".
      Picture of a chainsaw on the cover, or to be more O'Reilly, a velociraptor.

      --
      Dominic Connor,Quant Headhunter
    87. Re:Java for Dummies by hughk · · Score: 1

      Yes, Java has some good points and the class libraries can be a real time saver but I still don't particularly like it for high computational or processing volumes. I would certainly agree that Java is more flexible and delivers sooner but when your problem domain is well defined then C/C++ is still a valid solution. Java can be quite fast now, but particularly across multiple processors a language that gives you more control can be better.

      Must be said that my first reaction is to throw hardware at such problems.

      I can't quite remember the size of their Grid but it was B I G. I/O was a problem though because once you calculated it at book level, the books could be formed into multiple hierarchies, i.e., business line, legal entity, etc. That was very much a hash and remash of the original data. Yes, they were overdoing the cursors and locking as that is the most obvious way to handle a database.

      As different business desks were responsible for fixing different data sets, each could take a snapshot of the data nodes and recalculate their data without having dependencies on anyone else. Unfortunately it was still one database and the relational model isn't that well suited to the problem. If the different risk desks reran their snapshots at the same time, there would still be contention both for processors and the database.

      Frankly, under very high load conditions, I would have kicked out the database management software (as is done at some exchanges such as Eurex). Matching takes place using a database of flat files (either memory or disk based depending on expected trading volume) with journalling where needed.

      The thing is that even with shaving 50% off their run times, it didn't save them from that fact that if North America delivered data late because of timezone issues and their FO/MO systems consistently screwed up the batches that produced the source positions then perhaps it is better to worry about how data is produced and then to look at beefing up performance. The problem was that FO IT and Risk IT were seperate departments so it was politically different for one to place requirements on the other.

      From an administrative perspective, a much smaller bank had taken over a large UK bank a few years back and the fault-lines were still quite visible, particularly when their UK office is telling an office originally part of the larger bank several thousand km away. The funny thing is they have now taken on another European bank, even if they manage the quick integration of their desks, the bank they acquired has many more books to run. It shouldn't be an IT problem, but one of the reasons for the acquisition is the rationalisation of trading infrastructure.

      Obviously I don't know your setup well enough to know if my ideas are crap or not, but I think a useful bit of a CS course ought to be that sort of hack.

      I had the 'pleasure' of starting on some very slow machines at University. It was all we had, but it did make you think about performance. We may not have studied much on performance but when you had a CPU clocked in KHz and batch jobs were CPU limited (Yes, I guess I'm a bit older than you) then you learned to think about performance. I guess the best training now are the students doing robotics such as the DARPA challenge people in the states where you have a problem to solve and the speed of your vehicle depends on how quickly you can do that.

      --
      See my journal, I write things there
    88. Re:Java for Dummies by Lithl · · Score: 1

      I think it depends much more on the school in question than the language being used. As a Freshman CS student, my first semester CS class was taught in PLT Scheme. My current (second semester) CS class is being taught in Java. We had a lecture on Wednesday that included one's compliment and two's compliment. I also took an Intro to Game Programming class last semester, which was taught with Mathematica and C#. If students learning Java are being ruined, it's not Java that's doing the ruining.

    89. Re:Java for Dummies by Boj · · Score: 1

      Just to clarify writing real operating systems in managed environments is difficult and a research area (see Singularity, Java OSs like JNODE). It strikes me that what your saying is that using a managed language to simulate part of an OS won't give the student the complete feeling of what it's like to program in an unmanaged environment. I imagine that this is largely done due to the constraints of what you can teach in a course. When I've taught classes involving C and C++ I've also ended up teaching utilities like electric fence and purify. These tools would be out of place in an OS but you have to teach them unless your number of students is small and you can hand debug every program that's being written - reducing the debugging burden and obvious pitfalls (e.g. returning the address of a local variable in C/C++) is the reason for using a managed language.

      I think the issue here is that courses that are superficial are not useful if you want someone with detailed knowledge. I think that's kind of a no-brainer and not something that relates to a particular programming language. Maybe knowledge of C/C++ is an indicator of someone who has more than just superficial knowledge though :-)

      There are real issue with OS design and the use of pointers though:

      (Real World) Scenario 1:
      Imagine a micro-kernel that allows messages to contain addresses, for example a shared buffer being used to draw fonts into between an application and the font server. Now imagine that your OS needs to support 32 and 64 bit, big (e.g. PowerPC) and little (e.g. Intel) endian architectures. As your application can generate 4 different types of address you need to either run a mega server that knows how to handle all 4 types of request, or 4 individual servers each configured for the respective address size and endianness. In both situations you are likely to end up with a large (100s of MBs) memory overhead.

      (Real World) Scenario 2:
      Imagine a monolithic kernel where device drivers are written in C, often by people only concerned with getting their flavour of architecture to work with their hardware. If you try to use this device driver on an a architecture with a different endianness or address size what guarantees do you have that the driver will work? From my experience, little (unless someone else tried it before you and fixed the problems).

      I believe that constraining programmers is often the right thing to do; you can design out potential bugs. The programmer should also be aware of why they are being constrained though - ie higher levels of abstraction are better (by design) but you need to keep sight of the bottom of the stack and not be superficial, unless the course is an introduction (which many are).

    90. Re:Java for Dummies by DCFC · · Score: 1

      >I imagine that this is largely done due to the constraints of what you can teach in a course.

      I teach only unmanaged (currently) though I suppose I'll have to teach that, actually what I will teach is the ugly shit like how do deal with s/w that is a mix of managed and unamanaged code. Already I teach how to write code when you control the "top" and the "bottom", but the middle is code controlled by someone else.

      >ese tools would be out of place in an OS but you have to teach them unless your number of students is small and you can hand debug every program that's being written -
      Actually that is *exactly* how it was handled when I was an undergrad. Alongside the lecturer was some collection of postgrads, and the smarter end of the older students.
      Cost a bit of money, but if a student put up his hand, he got help, hell we even did that with Pascal. Aside from the money, I liked it because I learned how to deal with other people's bugs. Even now I regard myself as class act in spotting the bugs one gets handed to spot in interviews.

      Could I be a bit pedantic, that I am less interested in detailed knowledge, than detailed understanding.
      You examples are good, and I would add higher level ideas like "how does optimality conflict with fairness", and the way I might identify a superior candidate is "how do you decide the right level". That I shall (rather pretentiously) call "wisdom". Making good choices, and thjat is what I want from CS graduates (or anything else), and is my ambition for those I teach myself.

      --
      Dominic Connor,Quant Headhunter
  32. "Sure I know C!" by Durandal64 · · Score: 5, Insightful

    I'm kind of a proponent of having a student's evolution mirror the industry's, to an extent. Start them with C and then gradually introduce problems that were more and more difficult to solve in C. That way, when you show them C++ or Java, they can appreciate why these languages were needed and what classes of problems they're appropriate for and more importantly, what they're not appropriate for. But to really appreciate these things, you have to have students implement their own little OO runtime in C or whatever other procedural language. You can bet that after that, by the time you show them a true OO language, they'll know plenty about OOP, and things will just come more naturally.

    These students are being trained as engineers. They shouldn't be afraid of a little grease.

    1. Re:"Sure I know C!" by Anonymous Coward · · Score: 0

      Well then why not start with assembly and move up to the higher level languages.

      I am in a CS degree right now and it is java, c++, c with Requirements in Calculus, Linear Algebra, Discrete Mathematics and this is just the AS program.

    2. Re:"Sure I know C!" by eMilkshake · · Score: 1

      So, uhm, everyone starts with COBOL?

    3. Re:"Sure I know C!" by Morrigu · · Score: 1

      *Ideally* they should be trained as engineers, but in too many cases, CS graduates end up with the equivalent of a trade school or technical degree. Which is fine for employers, but not so much for the profession as a whole and certainly not for the graduate.

      I've had multiple managers tell me they'd rather hire EE or mathematics grads than CS grads for positions that require actual thought and skill.

      --
      "We can categorically state that we have not released man-eating badgers into the area." - Major Mike Shearer, UK
    4. Re:"Sure I know C!" by avandesande · · Score: 1

      Order obsession...
      I am one of those people that benefit from creating questions before I can absorb the basics. If I tinker with something first it is much easier for me to scan the manual for the areas I need help.

      I don't see anything wrong with learning JAVA and then seeing how JAVA works by learning c/assembly.

      --
      love is just extroverted narcissism
  33. Java? SML/NJ! by Anonymous Coward · · Score: 0

    Java? I would've killed to have Java as the first language I was taught in university; we started with SML/NJ (Standard ML of New Jersey, a functional programming language - and not even a good one. Languages like Haskell and Curry are OK, but ML is the Pascal of the functional programming language world.)

    Fortunately for me, I already knew how to program; for others who didn't, it was a total waste.

  34. 2 professors, 1 cup. by forgotten_my_nick · · Score: 2, Interesting

    I disagree with them. The flaw isn't with Java but with how it is most likely being taught to the students. They also undersell Java as a language. dot.com? seriously. And about using Java only for threading and reflection? Are they serious?

    I've taught grinds to first year students in Ireland in Java (I'm SCJP 14/5) and their professors do not even allow the use of an IDE when coding. They also grade them over Java patterns and OO rather then knowledge of the language.

    C/C++ have their place, but any good CS student normally learns a number of languages.

    I can code in a number of languages, certified in quite a few as well and I've never used Ada. Considering both professors work for a company that sells ADA stuff it seems a little biased and uninformed on Java.

    1. Re:2 professors, 1 cup. by tieTYT · · Score: 1

      their professors do not even allow the use of an IDE when coding
      That's a good thing. One of the most complicated (and shitty) concepts in the Java Language is the classpath. IDEs hide the details of it from you until you eventually have to deal with it. Then the student is totally fucked when their code won't compile/run and they can't understand why.

      Yes, IDEs are great, but in Java, they shouldn't be used by beginners.

    2. Re:2 professors, 1 cup. by Racemaniac · · Score: 1

      are you serious???
      recently i helped a friend of mine who was doing an introductory java course. they had to work in bluej, an environment that makes it very easy to test your java classes, but with no coding support what so ever (except highlighting the primitive types i think).
      the avarage student needed an hour on even the simplest exercise, just because they weren't used to working in java yet, and made lots of small mistakes, and the for the beginners cryptic messages from the compiler weren't helpful either...
      why not give beginners a good IDE that helps them find their simple mistakes easily, and helps them discover methods of the built in classes they are using...

    3. Re:2 professors, 1 cup. by DCFC · · Score: 1

      I do not think the set of language matters so much as their breadth. I am indifferent to Ada, maybe good or bad, but alone no single language allows a good CS student to get to where he wants to be. C++ has more concepts in it than Java, which is of course one reason it is harder to learn, so gets points from me for that. Lisp is actually a very simple language, but being so different from Ada, C++ and Java, it helps the student learn to think about things in different ways. Of course some never get their heads around Lisp, which is fine since it has almost no commercial value, but it should be sending a signal that this person simply isn't good at programming. Not saying they shouldbe shit hot at functional languages, but failure is worrying. CS courses seem to be set up to make them as hard as possible to fail, yet programming is a talent. Some very smart people just can't do it. Thus allowing them to write essays, draw pretty graphics, and use Java toolkits to make applications is fraudulent.

      --
      Dominic Connor,Quant Headhunter
    4. Re:2 professors, 1 cup. by tieTYT · · Score: 1
      I hang out in #java every day and a huge chunk of the questions we answer are caused by newbies using IDEs. As for why they shouldn't use IDEs, I already answered that: The classpath is so confusing it's worth understanding early. People (myself included), struggle with it their whole Java career. Here's some reading material:

      http://weblogs.java.net/blog/gsporar/archive/2007/02/tools_that_do_t.html http://weblogs.java.net/blog/editors/archives/2007/02/you_better_get.html

  35. That's true by cgomezr · · Score: 4, Insightful

    I love Java, and I find it much more pleasant to use than C/C++, but I generally agree with TFA. I have seen many people doing things like this

    //build a string with 10K a's
    String as = "";
    for ( int i = 0 ; i < 10000 ; i++ ) as += "a";

    which creates 10K temporary objects to construct a single string*. This is because they started learning programming with a high abstraction level so they have no idea of what is going on behind the scenes. It's something similar to starting programming with one of these new "intelligent" IDE's such as Eclipse, which do lots of things for you so you don't have to figure them out for yourself. I think all these abstractions are great for people who already know how to program, not for beginners. You wouldn't give a calculator to 6 year old kids learning math, would you?

    I personally would being with C and then jump to Java. C is not so complicated as a first language if you don't introduce all its features from day one. It was my first language and I think it was a good choice, it shows you enough low-level concepts to be able to make efficient optimised code in higher-level languages. Besides, when you later jump to a more high-level OO language you appreciate the difference and learn it with interest.

    * I know modern compilers are able to optimise that automatically using a StringBuffer or StringBuilder. I just chose that (somewhat unrealistic) example for the sake of simplicity, but the same happens in other cases that aren't so easily handled by the compiler.

    1. Re:That's true by curmudgeon99 · · Score: 1

      Which is why, when I taught Java, I had them code in Notepad. All of these alleged weaknesses in Java are really just signs of laziness by the professors.

    2. Re:That's true by Anonymous Coward · · Score: 0

      "I personally would being with C and then jump to Java."

      You start with machine architecture. Gates, address/data bus, instruction set, assembler. You can probably draw the line at the physical implementation (ie, transistors). But without this core knowledge the rest of the field will seem like a completely magical realm, with a few helpful sprites and fairies here and there, but mainly populated with angry ogres.

      You can then move on to C, and so-called higher level things ... as long as you firmly connect each new level to the previous one.

      Starting with Java or Python or VB or JavaScript is like teaching math by beginning with the Fermat's Last Theorem.

    3. Re:That's true by Gen.Anti · · Score: 1

      I remember struggling, as a kid, with a strange, philosophical yet practical observation that my father's old calculator didn't help me in solving my maths homework in any way (it giving results as useless decimal approximations or indeed Err or similar, being the seemingly simplest of the problems... Of course that was when I was a bit older, but the calculator didn't impair my arithmetics' learning. Though I guess you would attribute it to my grandma victimizing me for using the device).

      I also remember my fascination with the machine, its red luminescent display and metallic front panel. It had a power cord and a place for a large 4.5 V battery.

      Most people wouldn't give any thought to an idea of giving a mental masturbator of an I-pod or a gaming console, while taking as granted that giving a math-pod is obvious damage.

    4. Re:That's true by Gen.Anti · · Score: 1

      No auto indent, one-level undo, no line number. WTF ??

    5. Re:That's true by curmudgeon99 · · Score: 1

      I no longer code with Notepad but I found, when teaching CS, that students were closer to the bare metal and the understanding that came with that if they used a plain vanilla text editor. Granted, after they are past that, a good IDE like Eclipse or IntelliJ is invaluable.

    6. Re:That's true by Gen.Anti · · Score: 1

      I know. I only say I can't imagine using Notepad for longer than three minutes, because it lacks three crucial features (two at least. I think people would agree but not about which two ;-) ).

    7. Re:That's true by curmudgeon99 · · Score: 1

      Well, but for beginners, the point is that they understand what's going on. You NEED them to hassle with the classpath when they try to run stuff--so they understand. Your point was that a LEARNER should not use Notepad. I disagree.

    8. Re:That's true by shutdown+-p+now · · Score: 1
      You'll get the same kind of code from a poorly-taught newbie no matter the language. We were taught C straight away in the uni, and people wrote the exact same thing, but with "char[]" for "String", and "strcat" for "+=".

      Curiously enough, this type of code is perfectly okay in C++ with std::string, and Microsoft's C# compiler can optimize some code patterns like the above, when operator+ is used extensively for runtime string generation. This leads me to think that perhaps part of the problem here is that it is even a problem. The "incorrect" code you give is, after all, perfectly clear in what it does, and there is no reason why a compiler should not be able to optimize it to use StringBuilder behind the scene, nor why a programmer should require to use (or even be aware of) StringBuilder explicitly for such a simple operation; C++ compilers routinely do much more complicated optimizations.

    9. Re:That's true by Anonymous Coward · · Score: 0

      char as[10001];
      memset(as, 10000, 'a');
      as[10000] = 0;
      Give me C or give me death.

      Please use this code snippet as a basis for your argument for or against C, depending on your perspective.
    10. Re:That's true by DragonWriter · · Score: 1

      I personally would being with C and then jump to Java.


      Personally, I think I'd start with Scheme, then C, then Smalltalk, then Java and then other things (I'd think it would be good to also include some languages that are more declarative or that bring concurrency to the fore, maybe something like Prolog for the former, Erlang for the latter, or Oz for either or both.) Scheme I think is a better vehicle for teaching design approach and programming process, and is rather amenable to a restricted-pedagogical-subset approach (as exemplified in How to Design Programs), then C gets you down to the nitty-gritty implementation details. It works as a kind of distint theses->synthesis approach (a generalization of thesis->antithesis->synthesis to more than two basic models.)

      There are some good things to be said for C -> Scheme -> Smalltalk -> Java, too, but I haven't seen a first-course book or course outline that I think is as good as SICP or HtDP that is C-centered (which may well just be my limited exposure, its not like I've seen a really wide-selection of first-course books/outlines), so I lean toward doing Scheme first. It might work well to C third (Scheme -> Smalltalk -> C) and immediately before Java, as well.
    11. Re:That's true by Anonymous Coward · · Score: 0

      Wouldn't that be at least 40K temporary objects?

      Each time around the loop it will do a new StringBuilder(as).append("a").toString(). The StringBuilder constructor creates its own char[] and calls append(String) which uses String.getChars to copy into the StringBuilder's char[]. Then the append(String) appends to the internal char[] (if the amount appended exceeds the char[] size, then it will grow it. However Sun's StringBuilder sets the initial size to the string length plus 16, so this won't happen in this example.) Then the toString() creates a String, which internally creates its own char[] and then copies the data yet again because the String's value is immutable.

      End result, at least 40K objects which will be immediately collected, but also 20K array copies.

      A less naive user would probably still create a StringBuilder with the right length and call append(char) 10K times which is still bad due to method call overhead.

      A user with half a clue would create a char[] and use Arrays.fill(char[], char) and create the String from that. Sadly this would still result in one redundant char[] creation and copy, but I doubt it's possible to do any better without avoiding use of String in the first place.

      And of course an advanced user will pull in something like Commons Lang and use their utility method to do this exact thing, because you have to assume that library developers have done all the thinking already, because this is why libraries exist.

  36. the "everything is a corporate website" approach by Anonymous Coward · · Score: 0

    Java became the next big thing when corporations pushed it as a solution to sell more functionalities in less time but its inherent value as a programming platform, from a purely technical point of view, approaches zero. Every skilled programmer knows that native code is smaller, faster and stabler and easier to debug, and there are workplaces out there where one can lose the job in ten minutes if he/she suggests Java as a solution instead of a native one. Just tell some PMP or GPS manufacturers they have to double the memory or processor speed of their gadget because you can't write code in C.
    Nowadays the web appears to be king because it's widespread and used in nearly every PC worldwide, and it speaks PHP, Python, Ruby, Java and ASP, but low footprint devices, device drivers, applications where speed matters, including financial applications that need lower latencies than a fps game, all of them still require more performing languages and implementations.
    So, yes. The Java-for-everything culture is really dangerous both for the programmer culture and the code he/she writes.

  37. IDE vs Editor by Anonymous Coward · · Score: 0

    Well, then again it makes a huge difference writing with an IDE and writing in an editor.
    With an IDE if you're a beginner you usually think.. "ok I press this button and I run the program".
    Plus you usually design your gui there.
    It's a whole different ball game when you write code using an editor and compile either through the command line or preferably through ant.

  38. A simple answer to this by DrXym · · Score: 1

    Don't use in Java in your curriculum if you don't like it. Duh. But please at least use a language that has practical application to students outside your classroom.

    1. Re:A simple answer to this by hoggy · · Score: 1

      Why? I don't consider it the job of University to fill in commercial skills. I fear it is that mistake that has led to the decline in good CS grads.

      When considering candidates for a programming job I don't lend any weight to the languages they learned at University. Learning Java at University does not demonstrate ability to program commercially in it. I expect graduates to have to start from scratch working with experienced programmers and learning their craft. Their ability to do that is what I look for.

      Generally, I find that if a candidate has been taught three different languages together with the CS theory behind them, they'll have a good grasp of how computers work. This should provide them with the necessary groundwork to pick up the language they need for their day job. And by different languages, I mean from different programming paradigms - Java and C# are not sufficiently different to be worth teaching both at University.

      For context: I learned Pascal (basic imperative concepts), Ada (multi-threading), C (pointers and low-level programming), C++ (OO), Prolog (logic programming) and Haskell (functional programming) at University - none of which I program in my day job.

      All programming languages have a practical application outside the classroom. It is failing to realise that that reduces your value to me as a programmer.

  39. Re:Why is "Computer Science" Staffing S/W companie by putaro · · Score: 1

    I agree and disagree with you. There's nothing wrong with CS being the path to becoming a "software engineer". Dumbing it down so that graduates didn't learn any CS is wrong though. If you take Mechanical Engineering or Electrical Engineering in college you don't expect to learn how to use AutoCAD or Verilog. You expect to learn the theory so that you can design and build safe, efficient, economical widgets.

    It might make sense to have a CS and a Software Engineering major that are akin to each other the same way the Physics and Mechanical Engineering relate. Taking the theory out of Software Engineering is just wrong, though (I think we agree there). I don't see anything wrong with having a Software Engineering major offered at the university level, as universities should be educating people as well as doing research.

  40. Start with by www.sorehands.com · · Score: 2, Interesting

    They should start with assembly language and circuits. One should have understanding of the low level.

    Though you may not use assembly language much, it helps to better understand what is going on under the hood.

    1. Re:Start with by RegularFry · · Score: 1

      Yup. It helps enormously that one of the most prevalent CPU architectures (ARM) also happens to have a gorgeous instruction set, so if you do learn that then it's both practical and (relatively) easy. I'd say that anyone doing computer-related engineering (be that electronic engineering, software engineering, whatever) should have been exposed to it as a precondition of being on the course, but then I'm biased like that.

      --
      Reality is the ultimate Rorschach.
    2. Re:Start with by Layth · · Score: 1

      Ah yes, the lesser known GIS (gorgeous instruction set).. falling somewhere between risc and cisc architectures

    3. Re:Start with by shutdown+-p+now · · Score: 1
      No, it does not, for 90% of the Java, C# and VB coders out there (which by themselves probably make ~70% of all programmers worldwide).

      One does need to learn assembly for some specific tasks. But in general, good understanding of memory management (stack/heap, pointers etc) is enough to do the job well in any "managed"/VM language. (With C/C++, you'd better know your assembly, because time will come when you'll have to debug an application built with -O3...).

    4. Re:Start with by Chris+Burke · · Score: 1

      Yeah, the way I was taught at the beginning, and which I will with full knowledge of my bias say is the best, was the following EECS 100 curriculum at Michigan:

      Lesson 1: Basic logic gates/circuits/boolean logic. Transistors are mentioned, but largely ignored. Logic gates explored up to the point of seeing how an ALU -could- be formed, and how basic control logic like a MUX works.

      Lesson 2: Computer datapaths. It was a made-up computer, but it had all the important parts. You could see how a value in a register was sent on a bus to memory, and how the data that came back from memory went to the ALU, and how the output of the ALU got stuck back in a register.

      Lesson 3: Machine code programming. 1s and 0s, make the computer do something.

      Lesson 4: Assembly code programming. Make the computer do something more complicated. Interact with I/O hardware. Understand what a memory-mapped I/O device meant, and how to handle an interrupt.

      Lesson 5 (the rest of the course): C programming, in particular emphasizing how the C code got turned into the underlying assembly and thus machine code and thus control logic guiding what the computer actually does. Including the concept of an optimizing compiler which replaces a naive translation with a more sophisticated but (hopefully) logically equivalent one.

      The big advantage of this method in my mind is that if you follow it, a memory address actually means something. Understanding the difference between a pointer, the memory the pointer is stored at, and the memory the pointer points at is simple because you've actually twiddled each of those things at a low level. Things like a "compiler" or a "JIT" are not essentially voodoo magic. If you ever need to pull back the layers of abstraction between you and the hardware, you can.

      Once you've done that, FINE, teach em C++, Java, C#, Ruby, whatever you want, it's all good. The point is you've built a foundation for understanding what the computer is actually doing. None of these things are mysterious. The problem isn't learning Java, the problem is learning Java when the concepts of how it is working are hidden, mysterious, and thus incomprehensible.

      People keep talking about going to college to get a job. Personally, I studied computers in college in order to have a career. Languages come and go, especially ones designed for high-level applications. Binary computers, however, aren't going away for a long, long time, and while the details change the basic operation does not. Understanding that, and the connection between the hardware and [insert FOTM language here] is a way to be a better programmer in any language, even ones that won't be invented for another 20 years.

      Oh, BTW, the big disadvantage of EECS 100 at least as it was implemented was that it was grueling, especially for your first semester out of high school. Relatively little of the class got above a C unless they were already computer nerds, just because there was so much content jammed into so little time, and that had to be discouraging for a lot of the students. Eventually they split it up into two courses which I think made it more manageable, while still giving the solid foundation in computer operation that honestly is what the first year of college should be all about.

      --

      The enemies of Democracy are
  41. great teachers by hedley · · Score: 1

    I had both those professors at NYU. PL/1 with Schonberg and Dewar for compilers. The curriculum back then for a CS major was an inrto language, at the time PL/1, an assembly class (BAL on a 370). Discrete math was a must. Data structures using PL/1, a graph class. OS design and comp arch (others that I forgot I am sure). This was a good challenging major and I am glad they are making the case that the current trend is bad. I agree, its difficult to find good programmers. Bad habits seem to get into folks very early with these hands off the hw languages. That is at least from where I need people (embedded fw). For a web gui perhaps C# and Java are all thats needed these days. To me, I need to understand the hw on up to, if used, the vtable and the objects on top, complete understanding of all the layers. If you dont know your system, how can you grasp the ramnifications of change of any of the pieces (new processor, different compiler, runtime, etc). If you understand all the pieces, your life is ultimately better and easier I feel. I dont think the new CS majors get that training any longer.

  42. Hardly damaging by Xest · · Score: 1

    The fact is C and C++ whilst to many of us self-taught programmers was our first language it's not necessarily the best first language and had I known differently I'd probably not have chosen C as my first language.

    I went to uni already knowing C but then being taught Java it seemed a nice starting language and I somewhat wish I'd learn it earlier. I'd question why his students are unable to transfer from the idea of reference variables to pointers as the concepts really aren't massively different, when you get your head round the whole references thing the pointer concept isn't that far a leap. I'd argue that if his students understood Java and are unable to make the jump to C that it may be the teacher that's at fault.

    As I see it the best route would be to teach the likes of Java and so forth in the 1st year and then make the jump to C/C++ in the 2nd and 3rd years, probably even assembly of some forth in the 3rd year also. I'm not convinced there is one big problem here, the lack of teaching of C/C++ isn't necessarily Java's fault and the two languages certainly aren't mutually exclusive in their ability to be learnt.

    What I do think would be a bad idea however is throwing students into C/C++ straight away when they may have no knowledge of other languages, I'll be a brave man and admit I think it did me some damage that took a fair while to repair jumping straight into C as it's easy to overlook important things such as avoidance of buffer overflows when you're not even totally sure about pointers and are still initially trying to get your head round the concept of multi-dimensional arrays as well as trying to remember even the syntax of the language.

    Regarding students not being able to understand how to write console programs, again I don't see this as a fault of Java and I doubt if students can write GUI apps that they're incapable of writing console apps, it's just down to a lack of teaching about different programming patterns such as FSMs and so on.

    My biggest problem with uni teaching in this area is not the use of specific existing languages but the fact some Unis and courses make up their own languages which don't always quite work right having never had testing in a wider environment and that really offer nothing over certain existing languages. At least students get another language under their belt that's actually usable outside that specific course should they be taught an existing language than some home grown one for the course.

    1. Re:Hardly damaging by julesh · · Score: 1

      I went to uni already knowing C but then being taught Java it seemed a nice starting language and I somewhat wish I'd learn it earlier. I'd question why his students are unable to transfer from the idea of reference variables to pointers as the concepts really aren't massively different, when you get your head round the whole references thing the pointer concept isn't that far a leap. I'd argue that if his students understood Java and are unable to make the jump to C that it may be the teacher that's at fault.

      I think part of the problem is that you're simply assuming they understand what's going on in Java. I've talked to a few CS graduates who learned to program with Java and many of them don't understand what a java reference variable does, exactly. It's easy to see what's going on if you start in C, but coming at it from Java it just looks like something vague and difficult to understand, and which you don't really *need* to understand to get the job done in most circumstances. So while C programmers learn how pointers work, in depth, because it's very hard to work with C without understanding them, Java programmers don't usually need to understand references and so don't bother learning about them.

  43. Misleading concept ... by garphik · · Score: 2, Informative

    Software engineering is not just about writing a class / implementing a functionality. Its about a process and is lesser to do with what programming language you have been taught. Mostly it is to do with the Object oriented paradigm (C++, Java for example). OO has a lot of proven advantages.

    C, Lisp, and ADA are all different types of languages.
    I think the best way to learn programming is not just by mastering one particular language, but going by the programming principles; Just like if you learn to play a guitar, you can learn other the strumming instruments easily.

    Languages like assembly and machine code don't require learning one just needs a manual while programming.

    1. Re:Misleading concept ... by wilhelm · · Score: 1

      Software engineering is not just about writing a class / implementing a functionality. Its about a process and is lesser to do with what programming language you have been taught. Mostly it is to do with the Object oriented paradigm (C++, Java for example). OO has a lot of proven advantages.

      So OO is the only paradigm that solves every problem? Quite the opposite. There are different programming paradigms (functional, OO, imperative, etc. - see Programming paradigms for a good list) which are used for different purposes. TFA's argument is that since there are multiple valid approaches to writing software, there should not be just one approach which is taught, but multiple approaches. And multiple approaches necessarily require multiple languages.

      The old quote about everything looking like a nail, to someone who only has a hammer, applies here.

      Languages like assembly and machine code don't require learning one just needs a manual while programming.

      It's fairly obvious, then, that you've never used one.

  44. Low level languages by hubert.lepicki · · Score: 2, Interesting

    I come from Poland and at my university we started learning programming from Pascal, then C, assembly and C++/Java after that. I think Java is not damaging, you just have to know what is really going on under the hood. I think there is no plan to change this route at my university, which in fact I consider great. Even Pascal - outdated, boring and not widely used is important as it's syntax is frequently used in pseudo-codes in books or on lectures. Learning Java, not knowing low level languages or the way hardware works can lead to poor programming skills and prevents people from solving many problems related to performance etc, e.g: "why does my array behaves so slow when I swap 'i' and 'j' variables?". You have to understand how hardware and OS works, not in details but still!

  45. Author says Java is important in learning to code! by ls671 · · Score: 1

    The title might be misleading, the authors says Java is important in learning to code!

    I am myself a Java developer and I started when the language was born.

    Nevertheless, I can understand where the professors are coming from when they state:

    Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.


    I started to write Java programs with vi (now using eclipse ;-) and I would say that it is indeed necessary to understand pointers to write complex (especially multi-threaded) Java programs. Somebody not understanding pointers will have no idea that every Java Object (even arrays) are accessed through references which is indeed a fancy name for a pointer. So all Java variables except primitive types behave just like a pointer would. I can't see how one could be an expert in Java without understanding this!

    I see the point for teaching C and at minimum a few other languages (I did lisp, prolog, ml, assembly for Intel and Motorola and a few others). I am just surprised they don't suggest also at least one assembly language as mandatory.

    A student would also need to learn at least a minimum on how the hardware works, (hardrive, processor, cache, bus, memory, etc.)

    Why ? Because knowing all the components (hardware and software), knowing the machine and all the layers is the only way to be able to write efficient programs !

    We are supposed to have nice abstractions to work more easily knowing only a few layers but in my experience this is a myth and this is how we end up with trashy programs, when the person who wrote it didn't have a clue on how the other layers worked and the nasty impact his code would have on those other layers.

    Here is a 2002 article that explains the phenomenon a little more, it is called the Leaky Abstractions

    If we are not aware of this, we end up forming "fast-food" programmers instead of the software engineers of tomorrow. I guess that's what the professors were saying.

    Then again, in a sense, nothing new here ;-) I have been knowing this for a long time and my guess is that I am not alone ! ;-)

    --
    Everything I write is lies, read between the lines.
  46. the fun I had by Anonymous Coward · · Score: 0

    I started with the c64 Basic ( beiginner algo.s for seemingly infinite confusion)
    Moved on to Hex, then ML
    Finally on a 286 I switched between pascal and C/C++ ( Borland you know )

    As a math Professor qualified to teach programming it is disappointing that java is the [economical] choice of the university.
    C is a for the sake of programming. Most others are made from C !

    --
    To turn your computer into a gameboy type "win."

  47. Java easy to lean is the problem by papaver1 · · Score: 2, Insightful

    I've seen this in couple of students I went to school with. During my CS degree at UT of Austin the CS department started migrating to Java as their primary language. Java is definitely a easier language to learn on, especially with its GUI environments and libraries. That is the main problem however. A couple of friends I kept up with after college had a really hard time picking up lower level languages.

    It's much easier to pick up higher level languages when you know the building blocks from the bottom. I wrote all my code in C/C++ in vim. Not using a GUI gave me a good understanding of how code works. Like managing files and linking object files and libraries; using certain flags to enable compiler options. I think once one is familiar with these concepts a GUI is great to become more efficient and not have to deal with such rudimentary task sometimes. But if you never learn these concepts you are losing out.

    C/C++ helped me hang myself in college. It was grueling but worth it. I've picked up most languages I've tried pretty easily. I've coded/scripted in C/C++, C#, Pascal, Haskell, Perl, PHP, ASP, HTML, SQL, VB, Bash, MEL, LUA, UnrealScript. It's better to stick the pain out in college than try to figure out pointers and such when you have a job and there are deadlines to meet and the possibility of getting fired if you keep slipping.

    1. Re:Java easy to lean is the problem by Weedlekin · · Score: 1

      "I wrote all my code in C/C++ in vim."

      You can write Java with nothing more than a text editor. It has a full set of command-line tools, and operates on standard text files, so as with most other languages, the use of an IDE is optional, not mandatory.

      "Like managing files and linking object files and libraries; using certain flags to enable compiler options."

      You mean things like (for example) "javac -O -g -d /progs/java/output/myproject -target 1.1 -bootclasspath jdk1.1.7/lib/classes.zip -extdirs "" MyClass.java

      Note that although linking isn't necessary with Java (it links at run-time), non-trivial projects are usually divided into a series of archives, which are conceptually similar to libraries using the "jar" tool, which is invoked from the command line, and has a number of flags and options. Other notable command-line tools are the javadoc documentation generator, the jdb debugger, javah, which is a tool for generating C headers and stubs from Java, and the javap class file dis-assembler (class files are compiled Java byte codes, and carry a .class suffix).

      I would have thought that the fact Java was designed by Sun, a company that's been intimately involved with Unix for decades, would have meant that it was obvious they'd ensure it could be edited, managed, and run via standard Unix text-based remote admin tools such as SSH. Sadly, I seem to have severely underestimated the amount of ant-Java FUD floating around on the Internet.

      --
      I'm not going to change your sheets again, Mr. Hastings.
  48. Right! by Anonymous Coward · · Score: 0

    Yes Java and its siblings are quite dangerous. It's a bit late to realize that... it's going to be hell expensive to clean damages done by java and its siblings.
    Moreover, plenty of you thinks it's really free software... my a**! Indeed, to compile the 80MB (Yes... you read well... only Sun is able to maintain such giga-bloat) of compressed C++ source code, you need closed proprietary modules AND the previous closed and proprietary SDK!

  49. Better CS programs don't teach languages anyway by Bryan+Ischo · · Score: 4, Insightful

    The better CS undergrad programs don't really teach languages per se. The main focus of the curriculum should be the theoretical underpinnings of computer science, combined with the practical aspects of software development. Since languages themselves are part of the practical aspect of software development, in addition to also being the focus of some computer science theory, it is unavoidable that languages should themselves be studied to some degree, and also used to a large degree to practice the theory that is being taught. Most theoretical CS only really needs 'pseudocode' to illustrate the concepts being discussed. But since students are often asked to write programs to demonstrate their understanding of the subject matter, a real language is unavoidable. But the language itself is secondary to the real meat of the subject, which should all be mathematical and theoretical in nature.

    At CMU the very first CS class (that losers like me who didn't AP out of the first CS course, mostly because my high school didn't even have computer classes let alone AP computer classes!) really did focus on teaching a language - Pascal - and a significant part of the class was the learning of the language. It was the least useful CS class I took in the long run (not surprising, as an introductory course in any subject is likely to be the same). Subsequent courses would spend 1 - 2 weeks going over the fundamentals of the language to be used in coursework for the remainder of the class (which in some classes was C, in some was C++, some used ML, others Scheme, etc), to get everyone started, and after that, you had to figure it out on your own in conjunction with actually learning the theory that was being taught. It really isn't that hard to pick up a new language once you know a couple, although I did have a hard time with ML, mostly because I was completely unmotivated to learn it, feeling that it was absolutely useless to know (I was right).

    No really good CS program has any classes with names like "Java 101" or "Advanced C++". To use a carpentry analogy, I would expect a really good carpentry school to teach the fundamental rules and "theory" of carpentry, so that the student upon graduation really understood what carpentry was all about and could apply their knowledge to aspects of the subject that they hadn't even encountered in school. I wouldn't expect a good carpentry school to have classes like "Advanced Hammering" and "Bandsaw 101". The courses would instead be "Introduction to House Frames" and "How to Construct Joints". You'd be expected to learn the use of the tools in the natural course of studying these subjects.

    It's the same for CS. Good programs don't teach the tools, they teach the *subject*; learning the tools is intrinsic in the study of the theory.

    1. Re:Better CS programs don't teach languages anyway by FellowConspirator · · Score: 1

      When I attended Georgia Tech (some time ago) they had computer programming classes for biologists, chemists, and physicists (at the time, Pascal and FORTRAN), but CS students where expected to pick up languages on their own as requisite self-study for their course work.

      As a bioinformatics student (prior to its formalization as an area of study), I had learned C, C++, PERL, Postscript, Pascal, SQL, FORTRAN, Matlab, Java (started with 1.0), Python (very early on), Tcl, LISP and a few application-specific programming languages. I even had some exposure to Objective-C (NeXT). While a class clearly included code examples and some exposition on the languages themselves, the classes focused on concepts with minimal focus on the language.

      Now I work in an environment where I am considered a research scientist and many of my colleagues are software developers of one sort or another. I do, however, write lots of code for various forms of data analysis, visualization, data integration and process automation, etc. A popular topic for the developers is the apparent mish-mash of languages and applications I use in my work. Where they tend to focus on a particular language or toolset (VB.Net, or Java mainly), I use whatever seems appropriate to the task. I look at it the same as the hand and power tools I have at home, I use whatever best fits the application (hammer > screwdriver for driving nails), and I have no qualms about seeking out a new tool if nothing I have seems appropriate.

      The polyglot approach has its plusses an minuses. On the plus side, I find it far more efficient and myself more productive, and it's easy to strike the appropriate balances for performance, stability, ease of application, etc. On the minus side, not all of my work is fully accessible to people that don't have a more diverse background in programming. On the other hand, the work I do is sufficiently specialized in bioinformatics that anyone who'd take it up would necessarily have to be similarly schooled to make heads or tails of it (most of the developers we have work on information management systems, which are more widely accessible problems).

      Teaching Java is not in itself a problem. However, it'd be foolish to believe that Java programming skills equate to computer science knowledge in and of themselves. It would seem to me the actual languages are not as relevent as the underlying knowledge that would bring clarity to why there are so many languages are and how their differences represent attempts to address specific problems. With that, it would seem that a survey of languages would be in order, with further study for the generalist, or language focus for the specialist in a sub-discipline.

    2. Re:Better CS programs don't teach languages anyway by iPaul · · Score: 1

      I agree with your characterization of CS whole heartedly. Programming is to computer science as assembling circuit boards is to electrical engineering. However, as the cost of a college education is now routinely in the six figures, people want to see a "return on investment." By people I mean mostly the kid and their parents. So people start talking in terms of "marketable skills" as being a byproduct (or the primary product) of their educational offerings. It's a mistaken view of education period, much less computer science. They would be better off with two years at the local college and getting certified by Sun. However, we put them through a CS program and they have to learn (gasp) ancient unused languages like C or even LISP, which are not "used in the real world." (Meaning they can't wander into the average Job fair with a resume). In the perfect world you wouldn't have to teach incoming freshmen any languages, they'd just pick up "OCaml for Dummies" and perform their assignments in whatever language they choose. However, people come into a program with varying levels of expertise (and profs don't want to grade assignments in OCaml, Perl, SPIM Assembler, and Objective-C). So you have to pick something to start with. Java is a valid choice, but it is becoming the only choice. For example, I just learned my Alma-Mater is teaching graphics using JOGL - a Java wrapper around Open GL. Soon your entire world is the safe, detached, abstract virtual machine world where all you do is connect pieces written by somebody else. Except for those two horrible semesters where you took Operating Systems (and you had to use C) and you took Architectures (where you had to use Assembler). After 4 or 5 years your entire view of the world is Java/virtual machine oriented. If someone offered you a job coding in C, you could probably muddle through it, leaking memory like a sieve and the odd core dump. Moreover, when Language X replaces Java, you now write Java code in Language X. (I have to wade through Java code written by COBOLers that write COBOL code in Java.) If you push them to learn two or three languages (ideally C and LISP) they will have an appreciation for thinking about problems with a different syntax. They will look at Language X and say - it's kind of like Java here, but it's very LISPy in this way. Having been pushed to learn LISP, they might write decent code in Language X because they can think about the world is something besides Java syntax.

      --
      Leave the gun, take the cannoli -- Clemenza, The Godfather
  50. Learning a bunch of languages is the best way by Anonymous Coward · · Score: 0

    Where I go to school, we learn a buttload of different languages. We start off with Java, just because (I think) it's a well structured language that's fairly easy to learn and get concepts of programming from. We also have a Database course and a web course that covers everything from XML to PHP and AJAX. These are all in the first term (we have 8 courses a term). The second term there's C, more Java, focusing on the object oriented part, as well as an architecture class and a Systems analysis and Design course. Third term we do C++, Algorithms which is based mostly in Java, and depending on what option you chose, you could go into different things such as deeper web development, win32 systems, signal processing, database systems, along with others.

    Personally I think what we learn here is really good, we learn a broad spectrum of languages (although we don't do many scripting languages, we do a bit in terms 3 and 4) and we get the concepts that go with them as well (discrete maths, architecture, analysis and design, etc). The only other bad thing other than the scripting languages is that we get worked to death, 8 classes, which is between 27 and 35 hours a week of classes, and then at least that again in homework, is probably not good for our heath.

  51. Lots of Irritating Single Parentheses by sneakyimp · · Score: 1

    I wasn't aware that anything useful had ever been written in LISP. I know many programmers who speak with a lisp, but none who write anything useful with it.

    1. Re:Lots of Irritating Single Parentheses by K.+S.+Kyosuke · · Score: 1

      Still drawing machines on paper, instead of using a CAD? Never used a text editor? Never used a computer algebra system and still computing integrals by hand? Never searched for cheap airplane tickets? Many people use these things, you know. I'm quite happy with the second and the third one, at least.

      --
      Ezekiel 23:20
  52. Hate to say it.. by Gideon+Fubar · · Score: 1

    As a programmer trained, at least initially, in java.. I kinda agree with this article.. while it's certainly not true that there are no good programmers who code solely in java, the education I got was sorely lacking in some critical fields.. most notably (and obviously) memory management and pointers, and moving from a memory managed language to one with absolutely no automated object destruction or garbage collection was a bit of a stretch..

    I've since picked this stuff up, but i'm still not as confident with C++ or C as i am with java. Ok.. maybe that's not their faults.. ;)

    --
    http://www.xkcd.com/354/
  53. Even Professors can be trolls sometimes... by Anonymous Coward · · Score: 0

    That said: Of course it is important to learn more than one language. At my University we startet the first semester with MMIX (Assembly) and Java, later c/c++ and so on.
    But you can't blaim Java for weak education. 90% of my Java Apps are without GUI.

  54. Kinda agree, Kinda don't by fozzmeister · · Score: 1

    I never did C/C++ properly, we did Pascal (yeh laugh), but we were specifically taught about passing by reference or value. Pointers per-se are not a good thing, but references (which is what Java has) are, as they still have type and heap protection. Yeh you can't do OS level coding in it, but my first name isn't Linus either.

    Actually nowadays I do PHP, and I actually often use Java to describe my approach to coding (which does tend to highlight me as a better-than-average PHP'er). In todays world I think it's propably more important to get set theory, SQL,some patterns and have a great approach.

    1. Re:Kinda agree, Kinda don't by ceoyoyo · · Score: 1

      No laughing. Pascal is a great language.

      As for pointers, they can be required for things other than OS level coding. Early in my grad school career I took a mathematician's Matlab code to calculate a particular transform and made it run fast enough to actually use. One of the big steps? Replacing her use of the convenient shift function, O(N), with pointer operations, O(1). Since said shift call was inside a double loop over N....

      Sure, that's not something you have to do every day. But knowing about pointers means you recognize those sorts of problems. So even software engineers should probably touch on them, and for an actual computer scientist it's critical.

  55. Start simple and use different types of languages by anandsr · · Score: 2, Insightful

    I would think the best language to start with is quite possibly C. Pascal used to be better, but its no longer used. I personally would prefer a scripting language like Python or Perl. I think scripting languages are better because there is no complexity of the compiler involved.

    I would think it better to have functional language next. Students are much more receptive in the earlier years, and Functional programming does take some getting used to. I don't know much to recommend these languages ;-).

    After that I would take an Object Oriented Language, Preferably Java. It is a nice Object Oriented Language.

    The important thing is that these languages must not be taught as languages, but as a tool to understand some Computer Science subject. For example we had something like this in my science courses

    1) Data-Structures : Pascal
    2) Linear Programming: FORTRAN
    3) Programming Languages : Lisp
    4) Graphics: C (Now it would be better to use something like C++)
    5) Systems Programming: Assembly
    6) Filing Systems / Database: Cobol (I would think java would be good here)
    7) Artificial Intelligence: Prologue

    I think now the layout now could be
    1) Data-Structures: C
    2) Mathematics (Set-theory, Combinatronics, Boolean Algebra, Linear Programming): Scheme, (C for Linear Programming)
    3) Graphics: C++
    4) Systems Programming and Operating Systems: C, Assembly, and shell
    5) Databases: Java
    6) Windowing Systems: Java
    7) Compilers: Perl and Yacc
    8) Artificial Intelligence: Scheme

    I am not sure Ada is required as such, because it is not used as much as other languages. I think having different types of languages will put enough base in people to learn Ada later on if required. I would have liked to fit Python somewhere, but I don't know where ;-). It does everything well but nothing specifically better.

    -anandsr

  56. I think they have some credibility by jesterzog · · Score: 2, Interesting

    Maybe Ada is helpful for learning concurrent programming and safe typing, but I'll wait for the opinion of a slightly less partial party.

    You might be right, but just because they're involved in Ada doesn't necessarily make them biased towards it -- it does mean that they probably know a lot about it. What actually matters are their teaching qualifications and their understanding of what's important.

    They might just as easily have come to be involved in Ada because it met all their requirements as a good language with flying colours. If they have experience teaching and working with other teachers and teaching in other languages, then I think it's perfectly reasonable for them to comment on this and be given some credibility. (As it is, I can't personally tell for sure just how much experience they've had.)

    If you ignore everything someone says simply because it looks like they have a reason for saying it, there would be almost nothing to listen to. After all, who else is going to stand up and say that a language like Ada is better for something besides the people who actually design and use it? They are the people who would understand it best, after all... and there would have to be a lot of them before anyone even tries to run a visibly independent review.

  57. Duh, it's about the concepts by Simon · · Score: 1

    In close to a decade now of workplace programming, I have yet to actually have a need for any systems level programming of any kind. I used to be extremely fluent in C and even dabbled with assembly language for fun, but those are skills I just don't need at work generally speaking.

    You're forgetting about all of the knowledge about how computers work and the concepts about how different programming languages and styles work that you picked up when you learnt C and asm. Although you haven't used C for a long time, you are still using the knowledge about how the whole software/hardware stack fits together when you run your Java or PHP programs. This stuff is valuable to know and makes you more capable of using the tools and hardware you have.

    Programming concepts tend to reappear. Consider the C qsort() function. It takes another comparator function as an argument. Programmers that only know Java won't learn this concept of passing function, and they won't be prepared for it when it resurfaces in Javascript code for example. It's about broadening people's understanding of computation and how it can be done.

    --
    Simon

  58. Java is like "The Incredibles", or a circus by IBitOBear · · Score: 4, Interesting

    I you make everyone special, nobody is really special.

    Every time someone tells me that there are no pointers in Java I laugh a little. EVERYTHING in java that isn't a scalar is actually referenced through pointers. That is, you declare the pointer variable and then "new" the object into place.

    They are just incredibly _boring_ pointers. You cannot math on them. There is no sense of location to those pointers. But the absence of interesting pointer operations, and the absence of the _semantic_ _copy_ operation is what all this alleged pointerlessness is all about.

    I have only two _Real_ problems with java... (okay three if you count the complete requirement that you constantly have to deal with exceptions even when you know they cannot really happen, and if they did, you would want the thing to abort all over the place... but I digress)

    (1) Java has no useful destructors because no object has predictable scope. If you think finalize methods are the same as destructors then don't bother responding, you don't know what destructors are...

    (2) Since everything is a pointer in Java, you have to bend over backwards to pass-by-value. The fact that the language doesn't even begin to provide copy-construction semantics. What a miserable PITA.

    Now the _dumbest_ thing about java is that they were so set against multiple inheritance that they never bothered to ask themselves why _every_ OO language starts out life without multiple inheritance only to have to add it later. By making everything a proper linear subclass of Object, they left themselves with having to graft on "interfaces" which is just multiple inheritance with the "bonus" of completely preventing default implementations. (Which lead to delegation etc.)

    The way the language keeps sprouting things it claims to never have and never need, well it's very like watching a clown car endlessly explode with ridiculous archetypes. After a while it just isn't funny any more.

    So yea, teaching people Java as an introductory language is something of a disservice if you ever want to make them truly think about programming and what makes some things machine smart, while others are machine stupid.

    --- BUT ---

    I worked in education for years. The fundamental problem with computer science education is that it is being taught by computer scientists instead of educators. We are stuck learning from the people who learned from the people who made it up. None of these people ever learned to EFFECTIVELY IMPART INFORMATION.

    Consequently, the students are largely unemployable on the day of graduation.

    The classic computer curricula seems to consist of throwing three or four languages at a kid in the hopes that they will "just kind of figure out this programming stuff."

    The field of computer science has not yet come up with a "basic theory"... a starting place... The list of things a student simply must know before you start filling their head with syntax.

    And so we are a bunch of prelates training our acolytes in our special, individualized deeper mysteries.

    And that's what everybody is doing worldwide, so our graduates are just as lame as everyone else's...

    Cue "Enter the Gladiators"...

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
    1. Re:Java is like "The Incredibles", or a circus by Anonymous Coward · · Score: 0

      I think you are slightly incorrect in #2. Java passes method arguments by value even though object variables are all references. Pass-by-value is the default in Java.

    2. Re:Java is like "The Incredibles", or a circus by shutdown+-p+now · · Score: 1

      Java has no useful destructors because no object has predictable scope.
      Well, they sort of do have them now with interface Closeable (similarly to .NET and IDisposable - do you know that C++/CLI actually maps destructors to IDisposable::Dispose, and that works out just fine?).

      Since everything is a pointer in Java, you have to bend over backwards to pass-by-value. The fact that the language doesn't even begin to provide copy-construction semantics. What a miserable PITA.
      Well, not really. They do have Cloneable and clone(), which is pretty much equivalent to operator= in C++. The only difference is that operator= is always there unless you suppress it in your classes by making its private, while clone() is never there unless you publish it in your classes by implementing Cloneable. I'd say that, given that copy semantics doesn't make sense for a lot of objects, and is outright dangerous for some cases, noncopyable-by-default is a more sensible approach.

      Though .NET has by far the best of both worlds with its clean separation into reference and value types. Particularly so if you use C++/CLI, since then you don't need to deal with the ugly thing that are C#/VB.Net implicit references and their "always-implicitly-dereference-except-when-we-don't" semantics.

    3. Re:Java is like "The Incredibles", or a circus by Surt · · Score: 1

      Bah, multiple inheritance is just an error prone language level implementation of delegation. What you should want is language/compiler level delegation support.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    4. Re:Java is like "The Incredibles", or a circus by Anonymous Coward · · Score: 0

      I have only two _Real_ problems with java... (okay three if you count the complete requirement that you constantly have to deal with exceptions even when you know they cannot really happen, and if they did, you would want the thing to abort all over the place... but I digress)

      Checked Exceptions are a great idea, especially with library code. Far better than the error-prone "always check the 'wasAnError()' and 'getErrorDetails()' function after you do anything" documentation warning.

      If you don't like them, but don't want to silently swallow them:
      1. Just catch them, pass them to the constructor of a RuntimeException, and throw that new exception. Viola! Not swallowed, but totally out of your way and stuff will "abort all over the place".
      2. Change your function signature to pass the checked exception through unmodified, making it the business of the next layer to do any applicable higher-level cleanup.


      Method #1 is practically a one-liner, if you have no cleanup code of your own:


      try{
            doStuff()
      }catch(AnnoyingCheckedException e){throw(new RuntimeException(e));}


    5. Re:Java is like "The Incredibles", or a circus by Anonymous Coward · · Score: 0
      (2) Since everything is a pointer in Java, you have to bend over backwards to pass-by-value.

      Hi. Java passes *everything* by value.

    6. Re:Java is like "The Incredibles", or a circus by imgod2u · · Score: 2, Interesting

      Every time someone tells me that there are no pointers in Java I laugh a little. They would be correct. Java contains references, not pointers. The distinction is obvious to anyone who understands C++ as it has both (& for references, * for pointers). Pointers are mutable, references are not. This makes references (somewhat) safer to use and also allows a garbage collector. It also means it has a lot less functionality (particularly as an iterator).

      Java has no useful destructors because no object has predictable scope. If you think finalize methods are the same as destructors then don't bother responding, you don't know what destructors are And here I thought Java had no destructors because you had a garbage collector. There's an easy way to "destruct" an object in Java:

      myThingy = null;

      Granted the actual memory won't be deallocated until the next garbage collection cycle but the object is lost as far as the programmer is concerned and the memory is usable if needed.

      Since everything is a pointer in Java, you have to bend over backwards to pass-by-value. The fact that the language doesn't even begin to provide copy-construction semantics. What a miserable PITA. new ObjectType(myOtherObject) works fine and almost all classes in the standard library has a copy constructor. There's philosophical arguments about how many features you want to be part of the language syntax as opposed to part of the library. Just because you favor the former does not make it superior.

      As to passing by value. Why would you be doing that for anything other than scalars (which Java does pass-by-value) anyway?

      So yea, teaching people Java as an introductory language is something of a disservice if you ever want to make them truly think about programming and what makes some things machine smart, while others are machine stupid. With compilers the way they are today, such knowledge is not necessarily useful and/or even related to the desired field of study/work. Someone concerned with algorithm scaling really isn't interested in saving a few scalar bytes of memory here and there.

      I am glad my introductory algorithm classes were taught in Java. The same algorithms were used in a C++ class later on. The Java class was to actually teach you the algorithms. The C++ class was to teach you memory management. The algorithms just so happen to be a very good exercise in memory management.
    7. Re:Java is like "The Incredibles", or a circus by Anonymous Coward · · Score: 0

      I have only two _Real_ problems with java... [...] (1) Java has no useful destructors [...] (2) Since everything is a pointer in Java, you have to bend over backwards to pass-by-value.

      It kind of boggles the mind that you picked these trivialities, while not even mentioning elephants like not being able to create a (pseudo)closure without 5 lines of code.

      Now the _dumbest_ thing about java is that they were so set against multiple inheritance that they never bothered to ask themselves why _every_ OO language starts out life without multiple inheritance only to have to add it later.

      Innocent, your honor. The Common Lisp Object System had multiple inheritance from day one.

      The strange part is that The Art of the Metaobject Protocol (1991) built an entire object system, using multiple inheritance, in surprisingly little code, by taking advantage of (and building on) Lisp's meta facilities. Then Java (1995) both screwed up the meta part, and the inheritance part. I'm sure anybody who's read AMOP is puzzled by the thinking that the special-cases required for Java interfaces would be somehow simpler than plain old multiple inheritance.

      (This is a real problem, not just a theoretical one. Croquet was originally started in Java, but they had to switch to Squeak because Java's meta facilities just weren't powerful enough -- not for silly reasons like destructors or pass-by-value.)

      Of course, not to worry: one of the authors of AMOP, Gregor Kiczales, went on to found a project to build a new compiler for Java which added what is basically a MOP, only this time they were smart enough to make it sound trendy: "aspect-oriented programming"! By stapling these legs onto the dog that is Java, they created the ultimate octopus. And all it took was a programming team at PARC to build a new compiler, instead of a couple dozen trivial generic functions like Lisp used.

      Thus solving the problem once and for all. ONCE AND FOR ALL.
    8. Re:Java is like "The Incredibles", or a circus by StrawberryFrog · · Score: 1

      Now the _dumbest_ thing about java is that they were so set against multiple inheritance that they never bothered to ask themselves why _every_ OO language starts out life without multiple inheritance only to have to add it later. By making everything a proper linear subclass of Object, they left themselves with having to graft on "interfaces" which is just multiple inheritance with the "bonus" of completely preventing default implementations. (Which lead to delegation etc.) ...And structured programming languages were so dumbly set against goto that that they start out life without goto only to have to add it later, grafting on continue, break statements to simulate proper goto. .... no, actually structured languages avoid goto in favour of break, continue, while, etc. because they want to keep the good of it while losing the bad of it. Likewise, the people who designed interfaces into java and C# (not grafting them on later) wanted to keep certain aspects of Multiple Inheritance, while losing other, undesirable aspects.

      The field of computer science has not yet come up with a "basic theory"... a starting place...

      There are decent basic theories: Universal Turing machines, state machines, boolean algebra, lambda calculus, resolution with horne clauses, etc. They don't teach them in first year CS for good reason. You don;t want to start there.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    9. Re:Java is like "The Incredibles", or a circus by IBitOBear · · Score: 1

      ME: Every time someone tells me that there are no pointers in Java I laugh a little.

      YOU: They would be correct. Java contains references, not pointers. The distinction is obvious to anyone who understands C++ as it has both (& for references, * for pointers). Pointers are mutable, references are not. This makes references (somewhat) safer to use and also allows a garbage collector. It also means it has a lot less functionality (particularly as an iterator).

      Sorry, they are not references, they are pointers. They _call_ them references in the documentation, but what happens when you use "=" on a reference, you replace the contents of the item referenced. In java, when you use "=" the pointer-miscalled-reference takes on the address of the right-hand-side as a second means of access to that now-shared object.

      to whit, in java:

      Thing thing1 = new Thing; // make some thing
      Thing thing2 = new Thing; // make some other thing
      thing2 = thing1; // lose "some other thing", now have two pointers to "some thing"

      so yes, "pointer are mutable and references are not" and here the pointer itself "thing2" is mutated by the assignment where a reference would not be. The fact that the object originally pointed to by thing2 is unchanged is a question of object mutability, not pointer mutability. But thank you for demonstrating to the audience that learning Java harms your ability to understand and deal with the concept of a pointer. You have served as an admirable example of what the article was trying to say. Bravo!

      But to continue, for those who still do not get it...

      This is the same (ignoring the memory leak) as the identical code in C++ using pointers:

      Thing * thing1 = new Thing; // make some thing
      Thing * thing2 = new Thing; // make some other thing
      thing2 = thing1; // lose "some other thing", now have two pointers to "some thing"

      But when _references_ are used things are different. (note that for the reference one to work correctly the anonymous objects would need to be const or some such, e.g. the language resists letting you code this mistake directly etc)

      Thing & thing1 = new Thing; // make some thing
      Thing & thing2 = new Thing; // make some other thing
      thing2 = thing1; // still have two separate things, but the original value of "some other thing" is obliterated by the value of "some thing"

      So anyway, java... just has pointers... no references... no mater what they choose to call them.... They are "reference counted pointers" but not properly references. The "just references" semantic is a lie, and one you have fallen for. And so, I laugh a little.

      As for your other questions and observations, I wasn't writing a technical treatise on Java, but even so:

      Why would I want to pass a the contents of a non scalar by value? Why to have a private copy of the structure to work with you silly boy. Kind of the definition of "why copy" anything.

      The pedant will point out that Java "only passes by value" where the "value" is the address stored in the pointer, or the bit pattern stored in the scalar. Semantically, however, since the language struggles so desperately to make you think of the pointer as the object, it is everything we expect as technical professionals, in every detail, when we say "Java does not pass [non scalars] by value". Meanwhile, the language makes us create an entire object to entomb a simple scalar if we want to pass _that_ by reference. I am sure you don't know why I might want to do that either. Right tool for the job my boy. In a "real language" (to use the pejorative 8-)pass by value cheaper for scalars, more expensive for aggregates; pass by reference cheaper for aggregates, marginally more expensive for scalars (especially when optimization is considered) but both techniques have their uses and misuses.

      And

      --
      Innocent people shouldn't be forced to pay for inferior software development.
      --"Code Complete" Microsoft Press
    10. Re:Java is like "The Incredibles", or a circus by IBitOBear · · Score: 1

      ME: The field of computer science has not yet come up with a "basic theory"... a starting place...

      YOU: There are decent basic theories: Universal Turing machines, state machines, boolean algebra, lambda calculus, resolution with horne clauses, etc.

      Q.E.D. You will notice that you present a bunch of basic theories (as in simple ideas" but not "a basic theory... a staring place... {redacted significant point, paraphrasing myself} the set of things a student must know before you begin filling their head with syntax". The _SINGULARITY_ of that absence-bemoaned starting place is the point.

      We have a glut of starting places, none common, and most intransitive to one another and most, as you point out, "not taught in first year CS for good reason."

      See then that these [more properly "core"] theories serve no purpose as a foundation to install at time T0 at the biginning of the first year of a CS education. We still have no "[single] basic theory..." we just play sink-or-swim with our students till they "figure enough out on their own" so that we can expose _then_ expose them to core theories.

      Consider instead, science...

      Science has a basic theory. It consists of all the parts of "the scientific method". First we teach observation. Then we teach measurement. Then we teach hypothesis. Then we teach invalidation of hypothesis. Then we teach recoverable analysis as a way to refine the remainders of refuted hypothesis into new stronger hypothesis. Thus do we make a student learn "science" before we expect a student to execute "science" on his own.

      In "computer science" we make the student execute a bunch of code, then we force them to mimic a bunch of code, then we try to get them to invent a bunch of code based on the code they have previously mimicked or executed. All in the hopes that they will suddenly or eventually intuit what we mean by "programming".

      It's like cramming a bunch of grammar rules and structures down a student's throat and expecting them to "figure out" what a verb is and how it is different from a noun or adjective.

      We have no "parts of speech" for computer science. We have no observation and measurement before hypothesis structure to the way we teach algorithmic thought.

      We are a bunch of monkeys hoping the younger monkeys will eventually figure out why we poke our particular blades of grass into the particular holes we choose.

      The way we teach programming is the worst combination of oral tradition and tribal knowledge, and then we act surprised when the results make no sense but do generate heated invective.

      Its a pity.

      --
      Innocent people shouldn't be forced to pay for inferior software development.
      --"Code Complete" Microsoft Press
    11. Re:Java is like "The Incredibles", or a circus by sjelkjd · · Score: 1

      >>(1) Java has no useful destructors because no object has predictable scope.
      try
      { ...
      }
      finally
      { ...
      }

      Java does not do RAII the way c++ does, it does it differently. That doesn't make it broken, just slightly more verbose.

      >>(2) Since everything is a pointer in Java, you have to bend over backwards to pass-by-value. The fact that the language doesn't even begin to provide copy-construction semantics. What a miserable PITA.
      Copy construction semantics typically don't make sense when applied to pointers(or references). Hence all of the nonsense about how to implement the copy constructor and assignment operator in c++. How many newbies have written c++ code that uses a default copy ctr, but news and deletes in the ctr and dtr, and then they wonder why their program crashes after making a copy of their object?

      Java makes a better intro language than c++. At my university people were thrown into complex c++ projects to sink or swim...and most of them sank. That's because an intro class should lay the foundations for future work: it should teach you how to program. When you have a bunch of extra bullshit to deal with, that task becomes much more difficult. See C string manipulation for another example. Of course you should eventually learn c or c++ as part of a well rounded education. But java makes a great learning tool.

    12. Re:Java is like "The Incredibles", or a circus by IBitOBear · · Score: 1

      What does "finally" as a scope in a method have to do with destructors?

      I am not talking about static scopes in code, I am talking about directly mapping object lifetime to resource durration.

      Sure, anybody can write code to explicitly end a resource state, but the idea of object lifetime is unclosed over the domains of both time and accessibility.

      There are things "like" predictable lifetime and accurate destruction that "can be made" in any language "more or less" but that is far different than actually having a proved language feature doing that exact thing.

      Once you understand reliable object lifetime, and particularly spesific context destruction, "sort of like it" is a PITA compared to actually having it.

      Now, C++ isn't a panacea either. But I can _add_ the missing reference counted pointers to C++, but I _cannot_ add destroy _immediately_ while dropping last reference to Java.

      Its the combination of the two that makes some truely sublime implementations possible.

      So C++ distructors combined with something like boost.org 's shared and weak pointers produces a perfect storm of functionality over both the domains of time and scope.

      The simple truth is that kit-like languages can build up to any primitive or feature rich state, but "feature safe" or "feature complete" languages cannot be "cut down" to primitives.

      === MEANWHILE ===

      Nobody in the learning stage should ever be tossed in to "sink or swim". The fact that it may be harder to drown in Java doesn't excuse any school for trying to teach by sink or swim. That's not a way to teach a thing to anybody.

      --
      Innocent people shouldn't be forced to pay for inferior software development.
      --"Code Complete" Microsoft Press
    13. Re:Java is like "The Incredibles", or a circus by sjelkjd · · Score: 1

      Smart pointers have their own issues and still don't provably guarantee object lifetime. For instance I can hold a raw pointer to some object which is later destroyed by the smart pointer, and then use this destroyed resource.

      c++ needs RAII for memory, which is the predominant resource. Java would only use it for e.g. file hooks, pipes, etc as garbage collection handles the memory issues. Furthermore, the disposable pattern can be used for these other resources. So destructors have value primarily to deallocate memory(and other resources), even in the face of exceptions...which is what try/finally is for.

      Anyway, just because language x doesn't do things like c++, it doesn't mean that it's lacking. In non-c++ languages you don't tend to need to do "destroy _immediately_ while dropping last reference to."

    14. Re:Java is like "The Incredibles", or a circus by imgod2u · · Score: 1

      Sorry, they are not references, they are pointers. They _call_ them references in the documentation, but what happens when you use "=" on a reference, you replace the contents of the item referenced. In java, when you use "=" the pointer-miscalled-reference takes on the address of the right-hand-side as a second means of access to that now-shared object. There are two issues here. Firstly, I believe this is only in C++ due to the = operator being defined to copy a class. Secondly, in your example:

      Thing & thing1 = new Thing; // make some thing
      Thing & thing2 = new Thing; // make some other thing
      thing2 = thing1; // still have two separate things, but the original value of "some other thing" is obliterated by the value of "some thing"

      In the third line, both thing2 and thing1 are dereferenced handles for the objects at hand so the analogy is not accurate. If pointers were dereferenced automatically in the syntax, the same could be done.

      Note that in Java, no & syntax is required and all object handles are by default references. So thing2 = thing1 in Java means something entirely different than thing2 = thing1 in C++ and it does not mean that you cannot assign references to different values in C++ (which indeed you can, hell you can even do $thing2 = 0xBADA5569 last I recall).

      Note that C# treats its "references" the same way as Java does and allows references to be copied.

      By immutable, I mean you cannot directly perform manipulation on the reference. That is:

      thing2++;

      in Java is not possible. References can be copied and that's about it. C++ treats its references slightly differently but the ones in Java resemble C++ references much more than C style pointers. *Much* more.

      Why would I want to pass a the contents of a non scalar by value? Why to have a private copy of the structure to work with you silly boy. Kind of the definition of "why copy" anything. I believe I asked why pass by value, not "why copy". Unless you're in one of those niche situations where you have a ton of stack space (and your particular architecture loves stack operations) and don't wanna use heap space (I don't believe this is "proper" practice by any means), why would you be passing large pieces of data (ok, maybe really small structs) by value?
    15. Re:Java is like "The Incredibles", or a circus by imgod2u · · Score: 1

      Replace $ with &.

    16. Re:Java is like "The Incredibles", or a circus by Anonymous Coward · · Score: 0

      Look doof, it's clear that you don't get pointers just as the OP has said... Go and do some learnin'. Still trying to argue after you've lost the argument.

    17. Re:Java is like "The Incredibles", or a circus by GWBasic · · Score: 1

      Now the _dumbest_ thing about java is that they were so set against multiple inheritance that they never bothered to ask themselves why _every_ OO language starts out life without multiple inheritance only to have to add it later. By making everything a proper linear subclass of Object, they left themselves with having to graft on "interfaces" which is just multiple inheritance with the "bonus" of completely preventing default implementations. (Which lead to delegation etc.)

      Interfaces are meant to accomplish something fundamentally different then multiple inheritance. Interfaces only describe behavior; which is desirable when an object of a known behavior is expected.

      There are a few analogies that one can use to understand why an interface is different then multiple inheritance:

      • The Composite jack on the back of your TV is an interface. Anyone can make a device that works with it, as long as it conforms to the composite interface.
      • The electrical outlet is an interface. Anyone can make a device that uses household electricity as long as it comforms to the electrical outlet interface.

      Interfaces allow me, (as a programmer) to allow you to pass me objects of any class heirarchy, as long as they implement known methods. Because interfaces bring no default implementation, you don't have to worry about my code screwing with your object, and I don't have to worry about your code screwing with mine. Yes, multiple inheritance and abstract base classes can accomplish something similar, but it brings along the uncertainy of a base class causing unpredictable behavior.

    18. Re:Java is like "The Incredibles", or a circus by IBitOBear · · Score: 1

      Yes. Crappy programmers can easily make crappy code where the smart pointers are reduntantly used raw.

      So what? Java has jini that can call a library that _could_ damage the reference counting built into the java language because it, by definition, passes raw references about. All the same caveats apply. The JINI user could invalidate a pointer and leave you pointing at anything etc...

      Meanwhile I _can_ craft a class where all of what you mention is so difficult as to approach impossibility to such a degree that mendacity is the only route to harm.

      No language can prevent the actions of a programmer with evil in his heart.

      Meanwhile its not that you "need to" destroy immediately on the drop of the last reference, its that the _ability_ to _know_ that you destroy immediately on the drop of the last reference _allows_ for "proper closure" over the core predicates of being "object oriented" _AND_ simultaneously be able to code precisely against your object invariants because you have the certainty of their lifetime.

      Duh? you ask...

      Lets say I read a file into memory on creation of an object, and I want to let write operations happen on that memory cache, and then I want to flush the cache to storage and close on destruction. That maps the state of the file to the lifetime of the object.

      In C++ the destructor is the place to do the close, and for as long as the object exists, operating on the object is valid within that invariant.

      In Java I _cannot_ use finalize to do this write-and-flush because I could make such an object, write to it, drop the reference, make another one, write to that and drop that reference and be left with _no_ _clue_ as to which cache set will end up written last.

      If I provide my own "force close" method, anybody could call that method and then any operations on the file object after that force close would be erroneous. And so, sure, I could then throw a specialized exception that said "someone invalidated this object" but now I have had to add _two_ levels of complexity to properly represent a closure over an object that is "either an opened file, or not, maybe". Yay, another win.

      The downside in C++ is that I have to take _responsibility_ for making sure that object lifetime is managed if the object is on the heap. (On the stack it is automagical). So that cost is a wee bit of diligence. A diligence I can encourage and all but enforce to the nth degree.

      Is C++ "idiot proof"? oh hell no.

      Lets face it. There are things that you just cannot do in Java. One of those things is trash your memory map. The other is to make sure that your objects are valid from construction to destruction... because there _is_ not destruction to be had. The first is a danger. The second is required for "semantic correctness" over the whole of the object oriented paradigm. Danger of the former is worth the simplicity and elegance you can create with the second.

      --
      Innocent people shouldn't be forced to pay for inferior software development.
      --"Code Complete" Microsoft Press
  59. Kids These Days Don't Know How To Write Fast Code by MichaelCrawford · · Score: 1
    I have no problem with Java being used for the purposes for which it is best suited. I do have a problem with using it for teaching students how computers work.

    For example, it's commonly thought that garbage collected languages like Java don't suffer from memory leaks. Nothing could be further from the truth, as was evidenced by the Java eCommerce app one company I knew had - it would run out of swap space every couple days, so they had to keep rebooting their server every day.

    Consider the Document Object Model (DOM). Each node in a DOM tree holds a reference to its parent and all its children. So if a client object holds a reference to any object anywhere in the tree, none of it is available for collection. That's a memory leak.

    While really appropriate applications of assembly code are uncommon in today's computer industry, one place it is completely appropriate is in the teaching of computer science and software engineering.

    One reason is that those who later use higher-level languages like Java will be able to visualize what effect the actual implementation of their code has on the machine.

    For all you kids who want to make fun of me for being an old-fashioned old coot, I learned my first programming language, FORTRAN, at the tender age of 12 in 1976. The IBM 360 I ran my first program on, I understand, had magnetic core memory.

    --
    Request your free CD of my piano music.
  60. Beginner language? by Jartan · · Score: 4, Interesting

    People learn a lot through failure and pain. C is clearly the perfect choice when you look at it this way.

    1. Re:Beginner language? by Shohat · · Score: 2, Insightful

      That's bullshit
      C is a perfect beginner's language. When something is wrong, you know that YOU did it, not the compiler, not some class or wrapper or interface you have never seen, not the VM, or some bug or leak or god knows what.
      I write for real-time control systems (thermal/air/chemical, etc...) in C , for PIC and NEC microcontrollers, and I've written Java servlets and PHP (5, OO) for myself.
      When I write something like
      shortPointer=&(BYTE *)&Short_Transmission+2
      I know exactly where I point, what kind of data is there, how I handle it and what can change it. If something is messed up, I KNOW I did it, and I shouldn't google around for workaround, a bug fix or some undocumented feature.
      Learning programming should start from the point where you have full control over your code and data, and build up to the level of Java, where very often you handle little more than instances of objects that you just happen to understand enough to use.

    2. Re:Beginner language? by Anonymous Coward · · Score: 0

      I took a MSc equivalent degree in CS in Italy.
      Was hard, and we started with Java, for going to C and then C++ in other courses.
      I have many friends that got the same degree too, but frankly is hard to find people interested in C (and even C++).
      They want to go work asap and study/learn less.
      So they pick up Java.

      C++ (with C) is the best imho to write software:
      1) the most portable language (Java isn't portable, the VM is)
      2) the most optimized language
      3) you can use STL containers and templates (auto_ptr, shared_ptr)
      4) you can write C code

      Still C is THE language used to develop OSes.

      If any presumed computer scientist doesn't want to see the basics of OSes/kernels then he/she isn't a true computer scientist. And to do this you need knowledge of C, not Java and/or C#...

      If you're scared about memory management then pick up another job, study arts or literature...

    3. Re:Beginner language? by Hillgiant · · Score: 1

      I call BS. If the goal is failure and pain, the clear choice is COBOL.

      --
      -
    4. Re:Beginner language? by phasm42 · · Score: 1

      When something is wrong, you know that YOU did it
      WRONG. Often, you don't even know something went wrong (see buffer overflows).

      not the compiler, not some class or wrapper or interface you have never seen, not the VM, or some bug or leak or god knows what.
      What? You're saying the Java libraries and runtime are full of bugs, as opposed to C's perfect libraries? Or the OS is perfect when running C programs?

      If something is messed up, I KNOW I did it, and I shouldn't google around for workaround, a bug fix or some undocumented feature.
      This makes no fucking sense. How does using Java prevent you from determining where the problem is? What are all these bugfixes and undocumented features you need? The rest of your post makes just as little sense. If anything, Java is far more predictable and documented than C is. No, it's not good for embedded apps like PIC or AVR, but who fucking said it was?

      Your post is full of straw men stuffed with bullshit.
      --
      "No one likes working in a hamster wheel, and your shop smells of cedar shavings from here." - TaleSpinner
    5. Re:Beginner language? by Shohat · · Score: 1

      a) Who said I use ANY libraries when I write C ?
      b) Who said there is an OS ?!
      When writing Java, you will always have both. This is not an eviroment that a starting programmer should first be introduced to. A person that is unable to write a driver or low-level library from scratch, should not be starting his education by using one.

    6. Re:Beginner language? by hohonuuli · · Score: 1

      Ha Ha! Well said!

    7. Re:Beginner language? by phasm42 · · Score: 1

      A person that is unable to write a driver or low-level library from scratch, should not be starting his education by using one.
      Tell it to the elementary school kids using Logo. You don't start a math education with number theory.
      --
      "No one likes working in a hamster wheel, and your shop smells of cedar shavings from here." - TaleSpinner
    8. Re:Beginner language? by shutdown+-p+now · · Score: 1

      When I write something like
      shortPointer=&(BYTE *)&Short_Transmission+2
      I know exactly where I point, what kind of data is there, how I handle it and what can change it. If something is messed up, I KNOW I did it, and I shouldn't google around for workaround, a bug fix or some undocumented feature.
      Oh yes. It is particularly obvious that "you did it" when your program crashes with "Heap corruption" when trying to deallocate some non-related block of data from a different DLL two hours after that line of code got executed.
    9. Re:Beginner language? by logicpaw · · Score: 1
      People learn a lot through failure and pain. C is clearly the perfect choice when you look at it this way.

      Nah... Some very "learned" hardware engineers first learned to program in Basic... with peek and poke instead of the cleaner typed pointers in C... Much more opportunities for failure and pain.

    10. Re:Beginner language? by imgod2u · · Score: 1
      a) Unless your program contains no IO (and really, even Hello World! contains IO), you're using a system call someone else wrote. You can make a distinction between system call and library but in the context of what you're saying, it's the same thing.
      b) Realistically, when a student is introduced to C, all the features of an underlying OS (process management, scheduler, virtual and protected memory, a file system, etc.) are all provided and taken for granted.

      A person that is unable to write a driver or low-level library from scratch, should not be starting his education by using one. I don't agree. Each layer of abstraction has its own concepts to consider and learn. One might as well claim that a lack of understanding of synchronous circuits disqualifies one from writing machine-level code. Generations of clever engineers created that cozy little environment with the machine language that you're compiling to. Not understanding how add a, 15; is then decompressed into microcode, pipelined in lockstep with the data it operates on, goes through an add function through logic gates, and retired back to memory, does not disqualify you from writing drivers.
  61. Military language, military journal by mccalli · · Score: 1

    Notice too that the article is in the Journal Of 'Defence' Software Engineering. Ada was designed by committee as a language for use within the military. I was taught Ada in the UK's Lancaster University in the late 80s/early 90s, and at the time that university had decent links with military recruiters.

    I really don't see why they're so much against Java as compared to Ada - to my mind there's a lot of similarity with a lot of dependency placed on the langauge's runtime checks. I liked Ada. I like Java now (started with it whilst the language was still in beta). I like C too. Years ago I also worked with Prolog and Lisp, though not so much now. I wasn't terribly keen on C++ after my first year of it and still am not, though I admit I'm not up to date with latest developments in it. I mention all that though because whilst being taught Ada, the professors of the time described C as "an abortion of a language" unsuitable for software engineering. Interesting to now see people describing it as essential to know for good computer science...

    Cheers,
    Ian

    1. Re:Military language, military journal by AHuxley · · Score: 1

      You kids with your window entering JDAM's and gui's.
      Ada would make the HUD glow when I was over the right country and we like it that way.

      --
      Domestic spying is now "Benign Information Gathering"
  62. I'm a CS student by Anonymous Coward · · Score: 0

    I'm a CS student in the UK. From my experience the degree is getting easier and easier each year. Though it's not just a Java problem, it's the quality of students attending. The CS degree is being dumbed down to allow for these students that, by the end of the degree, have trouble program simple tasks (and they get a good degree classification). Personally I think too many people are going to university in the UK nowadays which are having to dumb down subjects or introduce pointless degrees to cater for everyone.

    Java is the only language taught. And many students do not like it - but many have not programmed at all before! When it comes to optional courses a lot of students, when they find out that a course unit has Java in it, do not take it. Then there are teachers telling students for example, to ignore things like class definitions and the purpose of the main method and just that they have to put the code inside the main method.

    There is hardly and theory or mathematics taught.

  63. Re:Why is "Computer Science" Staffing S/W companie by 2Bits · · Score: 1

    Well, I agree with most of your points, and I think CS degree should not teach any programming language, but only in the context of theory and concepts on programming language design. I went to McGill University in Montreal, we had one class in assembly language, and it was the only class in which the prof explained the assembly syntax, and the only reason was so that we could work on the term project to build an assembler in C.

    There was no other class where we were taught specifically to program in a specific language, we just went to the computer lab, set up a user account, and started to learn by ourself (when we had to do our programming assignments). We had homeworks in C, C++, assembly, Lisp, Scheme, Prolog, Modula, Objective-C, Tcl/Tk, Pascal. We learned about other languages in the context of programming language design.

    I have been working in the field for over a decade, working on telecom switches, embedded systesm, financial and trading systems, large scale web systems, etc, and I still think this was the best way to teach CS.

  64. oh ... my ... god by Anonymous Coward · · Score: 0

    If the universities teaching C# .NET ... a lot of people would shout, but... although Java is the same shit ...

  65. Re:Why is "Computer Science" Staffing S/W companie by syousef · · Score: 1

    Some fool will think this is trolling, but it's not.

    You go right ahead and phone your university and ask for your tuition back. Clearly you learnt nothing about professional behaviour or life long learning.

    You don't just stop learning at University. You'll never cover everything you want to know at University. It's a starting point. If you're really aching for that knowledge, yes you can learn it on your own, or yes you can do a higher degree BUT for fark sake research what's in it first!!! If you want to work on something mathematical, talk to the people doing it and ask for their advice on what to do.

    It sounds to me like you wanted to do a pure research degree, took a comp sci course because the word science was tacked on the end, and are now feeling sorry you didn't do anything more advanced. What's worse you show a complete lack of regard for what you have learnt and I'll bet it's how you're making your living. You want to do higher learning? Well the first thing you should learn is that the onus is on YOU to find out what a course covers. Stop asking for your goddamn hand to be held. You can't have it both ways. Advanced means you do most of the learning yourself.

    --
    These posts express my own personal views, not those of my employer
  66. "Design Patterns" says it all by Anonymous Coward · · Score: 0

    The real problem with Java is not that Design Patterns are popular, but that they are so necessary. How often do you see a Factory or Observer in Java? How often do you see them in Python? Or even C# for that matter?

    Quite frankly, I think the problem stems from the lack of closures. Since you can't pass functions around, you have to keep making objects that have the functions you want. But you can't just call an arbitrary function, you have to call a method on an object that implements a defined interface. Instead of being able to sort a list of strings case-insentively by just calling list.sort(x,y -> string.compare(x.toLower(), y.toLower())), you have to create a class that implements Comparator, put your sort function in there, and then call list.sort() with an instance of that function. All those contortions result in bloat and complexity which makes the language suck.

    dom

    1. Re:"Design Patterns" says it all by julesh · · Score: 1

      How often do you see a Factory or Observer in Java? How often do you see them in Python? Or even C# for that matter?

      Quite frankly, I think the problem stems from the lack of closures.


      Closures are a tool that can be used to implement patterns like Factory or Observer. The patterns are not a replacement for closures. When, in C#, I do something like "SomeButton.OnClick += SomeButton_OnClick;", I'm making the current object an Observer of things that happen in SomeButton. Sure, it's a better syntax, but the basic idea's still the same.

      Instead of being able to sort a list of strings case-insentively by just calling list.sort(x,y -> string.compare(x.toLower(), y.toLower())), you have to create a class that implements Comparator, put your sort function in there, and then call list.sort() with an instance of that function. All those contortions result in bloat and complexity which makes the language suck.

      I don't think it's that bad. Sure, I'd prefer being able to do it the way you wrote it, and I know there are languages out there that allow that kind of syntax. But my experience is that they all run a lot slower than Java / C# do. In many applications, that performance is necessary. And I don't think this:

      Arrays.sort (list, new Comparator(){ public int compare(Object x, Object y) { return ((String)x).compareToIgnoreCase((String)y); });

      is enough worse to warrant the difference.

      (BTW, you can't correctly implement case insensitive sorting by uppercasing all strings like that, because there are some cases where this approach will not work, e.g. the German gothic-s character uppercases to 'SS', but should sort as a different letter. See here for a discussion.)

  67. Scheme, Java, and C by mako1138 · · Score: 1

    At Berkeley, the intro CS courses go Scheme, Java, C/assembly. I complained about these courses when I took them, but now I know: choose the language to go with the concepts taught in the course.

  68. Maybe these Professors are crappy at teaching? by Qbertino · · Score: 1

    Sorry, folks, but I have yet to find something about pointers that can not be explained to my mother in 5 minutes. (Ok, my mother is a technical translator with a military background, but you get the picture) More or less the same goes for the supposedly difficult matter of object orientation. It may, however, be a tad tedious because n00bs usually need a few nudges and some pratice inbetween before they can wrap their head around these concepts permanently.

    The ledgend that basic (or whatever) spoils programming n00bs beyond repair is total rubbish. Mind you Basic and Pascal are IMHO way to old to get people started effectively, but so is this bizar thing called Lisp (take that from an Emacs user). Professors need to get into teaching again. I just dropped out of CS (for reasons unrelated) and the programming Prof. we had explained pointers in such a way that even the guys and girls that appeared like burger flipping quake players 'I like computers' type CS people were up to speed in no time.

    Maybe the problem is with adademia?

    --
    We suffer more in our imagination than in reality. - Seneca
    1. Re:Maybe these Professors are crappy at teaching? by nagora · · Score: 1
      Firstly I think that you underestimate how hard teaching is. Sure, you or I can grasp the concept of pointers quickly but the reality is that if you tell a room of 100 students to put on their coats ten will do nothing and five will probably get up and leave! It's a total pain.

      Secondly, languages like Lisp which are not ultimately Algol-derived are useful for showing that there are other ways of looking at problems. Even if you never actually program in Lisp (or Forth, another totally different approach) you will be a better C/C++/Java programmer for having studied it.

      TWW

      --
      "Encyclopedia" is to "Wikipedia" what "Library" is to "Some people at a bus stop"
  69. This is what industry wants by EmagGeek · · Score: 1

    Big corporations are paying schools MILLIONS to gut their curricula. The fewer competent engineers the US graduates, the more justified huge companies can be in offshoring jobs and on-shoring foreign H1B and L1 visas and 1/4 the cost.

  70. What is the purpose being served? by jdickey · · Score: 2, Insightful

    If what is desired is the training of hordes of marginally useful, low level hacks who can be easily replaced by the Bots from Bangalore, we're on the right track. Someone obviously noticed that their "bachelor's" degrees are 2-3 years and "master's" is a year on top of that. It's not politically or economically acceptable (to the schools) to do the same thing, yet they're under pressure to produce drones who can be easily replaced. Hence the insectlike specialization inherent in a lot of "IT" "education" for the past decade or so.

    Back in the day, "computer science" apparently had a strong liberal-arts component, with topics such as logic that are traditionally taught by philosophy departments. By gaining a solid grounding in theory, compiler design, and different languages, a CS graduate could reasonably be expected to fit into a wide variety of roles. By the late '70s and early '80s, that had been folded into the engineering schools in many universities; CS was seen as a subset of EE, and CS underclassmen generally had the same requirements as any "other" engineering underclassmen, getting precious little specialization until their junior year. We all know how well that turned out; it's what led to the "industry-focused" "curricula" of the late '80s and '90s. Education became a byword for vocational training, with an ever-shrinking set of currently topical skills being taught; shrinking largely because the American (and, to a lesser degree, Canadian and British) lower public educational systems were being systematically raped and dismantled by the political trends of the day. Johnny can't program? Well, that's to be expected; he can't read or write past what for half a century was deemed a third-grade level by the time he hit university.

    Rather than solve that problem by re-broadening (all levels of) education, industry "solved" it post-1990 by offshoring everything that didn't involve a well-paid management position, and bringing indentured labor (via H1B visas in the US, for instance) for positions that were deemed "too difficult" to offshore. Everybody dranks the purple Kool-Aid for a decade and more, paying little attention to the fact that failed projects where becoming more and more common, and more and more costly. Instead, approaches like XP were introduced and sold, not on their very real merits, but on the idea that "this will help failing projects fail faster, earlier and cheaper".

    What ever happened to the idea that the project shouldn't fail at all? Or, more heretical still, that software shouldn't fail at all? We put our lives at the mercy of software whenever we get onto a modern elevator, a recent-model airliner, or an automobile with electronic fuel injection. We put our wealth and comfort in the hands of software much more regularly. I recall one day back in early 2002 when I walked into the local branch of my bank, to be greeted by the sight of every "terminal", including at the teller windows, displaying the Windows "blue screen of death". I walked out, came back the next day, closed my account and took my money to a different bank. I was, according to the local newspaper, far from the only one to do so.

    Our society is and will remain completely dependent on the correct functioning of computer software for its continued health and growth, if not survival. We, as a society, are being extremely shortsighted and apathetic by tolerating the status quo without examination or serious discussion. Which of these "sensible" "reforms" of the last 20 years will be the equivalent of the Romans' engineering decision to use lead as the lining of their water pipes?

    1. Re:What is the purpose being served? by Creepy+Crawler · · Score: 1

      Lead pipes on water supplies are not that bad at all.

      What happens is the water, which is invariably not distilled, has minerals that attach to the walls of the lead pipe. Relatively quickly, the pipe becomes shielded from the effects of lead. Even that, it's not like lead is coming of in grams.. Use some common sense here.

      --
  71. I wonder.. by Anonymous Coward · · Score: 0

    I'm a student at the University of Sheffield, in my second year on a three year CS degree, and so far we have covered: Java (used for "Introduction to OO Programming" and "Further OO Programming"), Haskell (used for "Introduction to Functional Programming"), matlab (used for discrete and continuous set theory, matrix algebra, all that maths stuff you need to do CS well), PROLOG (for the logic based modules), Java bytecode and RISC assembly (on an ARM9 iirc, for embedded systems), SQL (used to teach database calculus), and touched on C++, LISP and COLISP and Python. In the Systems Analysis and Design modules there is a huge focus on choosing the right language for the task and how to combine programs written in different languages. From this thread, am I to understand that other Universities dont cover as much as this? It seems to me that without teaching a spread of everything, you won't really learn that much.

  72. java ... heh by slimshadow · · Score: 0

    Some unis here in Holland teach programming, by using languages that don't exist. This way you're forced to aquire the programming skill, not a programming language.

  73. No, no, no! by ThirdPrize · · Score: 1

    Thing is, if you start em on Assembly or C then they are going to have a tougher time getting to grips with OO languages like Java, C++ or C#. I know a few old school programmers from an Assembly or Electronics background and they just didn't get it. Classes were just things they grouped their functons in.

    --
    I have excellent Karma and I am not afraid to Troll it.
    1. Re:No, no, no! by LizardKing · · Score: 1

      Having made the transition from C to Java, I don't understand why an experienced procedural programmer would have any more difficulty learning OO abstractions than a college student. The only thing I can think of is that the student is in an environment where they should have the time and resources (including, I hope, competent teachers) to learn whereas a professional programmer may not. This is reinforced by my experience at one company where a bunch of Fortran and C programmers were simply told that they would be programming in Java as of that moment. No training or time to learn, they were thrown immediately into a large Java project which was fairly complex stuff with a large amount of CORBA! Under those circumstances it isn't surprising that the code turned into a mess, but I fail to see how grounding college students in Assembly and C means they will struggle with OO languages later.

      As for Java being a bad choice for a computer science course, I agree if it is used as the only programming language. Even if you never plan on coding professionally in a language without access to generic data structures (such as Java's Collection classes) or garbage collection, it is still beneficial to have an idea of what's gonig on under the hood. Occasionally I still write my own data structure classes, even though I primarily work in Java, because I have an understanding of how to measure performance and choose alternative algorithms. Even if I was to only use the Collection classes, an understanding of algorithms is essential (the frequency with which I've seen LinkedList used where ArrayList or HashSet is more appropriate concerns me a lot). And teaching in Java doesn't mean that an algorithms course can't be taught with it - take a look at "Data Structures and Algorithms Analysis in Java" by Weiss for example.

    2. Re:No, no, no! by Anonymous Coward · · Score: 0

      I don't understand why an experienced procedural programmer would have any more difficulty learning OO abstractions than a college student.

      Obviously because they have been 'damaged' by their education, and now are unable to learn any new concepts.

  74. I learned Pascal from Carver Mead by MichaelCrawford · · Score: 1
    He is one of the pioneers of VLSI design, and a founder of Foveon, which makes a better kind of sensor for digital cameras. I knew him as the instructor for CS 10 at Caltech.

    He started by discussing how electrons move about in silicon crystals, for example how "holes", or places where electrons were missing, effectively acted as positive charge carriers.

    He went on to explain transistors, then how to make logic gates from transistor circuitry, and then the basic architecture of microprocessors and memory, machine code and assembly code.

    With this grounding, he want on to teach the basics of Pascal - including pointers - and basic data structures like linked lists and binary trees, as well as recursion.

    To cement our understanding, we used these concepts throughout the quarter to write simple vector graphic editors on 68000-based workstations made by HP.

    That one quarter was the only computer science course I ever had - my degree is in Physics, not CS - but it was enough grounding in the fundaments to allow me to succeed as a software engineer for more than twenty years now, with a resume that looks like this.

    --
    Request your free CD of my piano music.
  75. I think I agree with them on face value by Phlatline_ATL · · Score: 1

    I started with FORTRAN 77, learned C, Perl (purists just move along), C++, x86 Assembler, a smattering of high level languages in a survey course, THEN Java.

    Without my background in the earlier languages the understanding of what Java does for the software developer is completely meaningless. In C/C++ you MUST have a working knowledge of memory management. Its crucial in whatever environment your in regardless of how much is available resource wise.

  76. What I find interesting aboutthis debate ... by golodh · · Score: 1
    Previous posters (and the article itself) have pretty much exposed the pitfalls if having Java as a first (and sometimes only) language.

    Anyone who needs to understand programming close to the hardware or memory management must learn C. Agreed. One might then differ about the merits of C++, ADA, and the need for learning LISP.

    However that's not what struck me most about the discussion.

    First of all I remember that JAVA was seen as something that "Industry wants" when it was introduced at Universities. It was seen as being "in touch with the needs of Industry" to advocate it. Funnily enough Industry now discovers that there are skills that aren't conveyed when you teach the fad of the week. Could it be that "Industry" really is not competent to determine what should be taught? Sure ... they can usually be relied to know what skills they need "right now". But what else? Industry typically isn't able to forecast its demand for skilled workers more than say 2 years ahead, let alone determine what skill-set they need unless there is an acute shortage of it.

    Secondly, I find the following criticism levelled by the authors of the original article amusing: "Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want."

    Well ... isn't that what Engineering is about? What Engineer building a bridge starts out by redesigning I-beams and/or reformulating the concrete mix? We'd consider that idiotic ... even dangerous. But software engineers should be doing that? Sure ... sure ... any Engineer (unlike a plumber) should understand the properties of the components used, and be able to spot less suitable components. But that understanding doesn't mean he's got to redo the components every time he builds a bridge.

    In third place ... the criticism formulated as: "Students found it hard to write programs that did not have a graphic interface [...]". Well ... I know that all Java IDEs tend to push you towards writing graphical interfaces, but as a teacher you can set assignments that *require* command-line activated programs, just by specifying that such programs must be callable from a command prompt. Might it be that said professors haven't sufficiently thought of teaching command-line programming?

  77. This guy is about as unbiased as Stroustrup! by MCTFB · · Score: 5, Interesting

    99% of what you learn as a programmer you don't learn at college anyways (at least the people who don't totally suck at programming). Furthermore, unless you have one-on-one mentoring from a senior programmer or professor who has at least 10 years of solid professional coding experience under their belt, not much else is going to help you other than you and yourself in maturing as a programmer.

    Most CompSci college graduates are totally unproductive on their first job. They can be put to work on trivial things, but no matter what school they came from, they are just going to need a lot of hand-holding to make it through the first year. That is just how it is. Doing coursework at school is no substitute for coding on a meaningful project, whether it be work related, something open-source related, or just something for fun. That is the honest to god's truth as a software developer for over 12 years now and I don't even consider myself even that wisened in the field (maybe after 20 years I will feel differently).

    Now, with respect to Java as an introductory programming language, it is not bad but not great either, however the purpose of any introductory course to anything should be to capture the interest of the people who are curious enough to take the course in the first place. Back in college, we started with C (most of my peers had already been programming since they were teething but this was CMU) and if not for my persistent no quit attitude in life, I probably would of given up programming right then and there because spending your entire night trying to debug a trivial program not because you didn't understand the material but because of one stupid uninitialized pointer turns a lot of people off right then and there who may have had the potential to be great programmers, but because their first impression of programming was so bad, they gave it up before they got to learn more about how great programming really is.

    Oh yeah, and the not relevant at all math courses didn't really help much either. Whenever in your career you need to use some advanced calculus or discrete math, you will have likely forgotten about 99% of it and need to look it all up in a book anyways. Besides, 99% of programming projects in the real world basically involve high school level algebra and not much else. What separates the productive programmers from the unproductive ones is not who got a better grade on their math course back in college, but those who innately understand systems and are willing to make the extra effort to learn all about the gazillion design patterns available to programmers so that when they are faced with a difficult project, they will not waste inordinate amounts of time reinventing the wheel.

    As for understanding computing at a rather low-level, as is the case with a class in operating systems, then yah Java might not be such a great choice, but then again learning C is easy because C is made up of very simple constructs (C++ is another story). However, using C productively just requires a crapload of practice/experience to be good with, not necessarily a whole lot of computing expertise. In addition, the mastery of whatever API's you happen to be basing your career on is paramount as well. In the real world, employers don't want to hear "but I can learn anything quickly" because mastering some API's can take 6 months or more so if you come out of university with no specific skill sets, it is going to be really hard to get that first job because unless you can be productive soon (or even on day one), you are useless as far as employers are concerned. Also, though I don't program in Win32 professionally myself, from my understanding it takes at least 3 years of non-stop work with those API's just to be semi-proficient in them. Professionally, most of my work over the years has been in Java, and Java is probably scary to a lot of neophyte programmers these days because since 1.5, it has unfortunately turned into the bastard child of complexity like its twisted sister C++.

    Last but not

    1. Re:This guy is about as unbiased as Stroustrup! by iPaul · · Score: 1

      Spending several hours trying to find the problem only to learn you forgot to initialize a pointer is part of programming. I've watched people struggle for hours only to find they had a simple logic error. But that's part of learning the craft of programming. Strictly speaking programming as as much to do with computer science as soldering wires has to do with electrical engineering. However, at some point you need to implement these great ideas and it's done on a computer. That means its limited by the things a computer can and can't compute, the amount of time it takes to compute it, and the underlying software structures (operating systems and libraries). An in-depth understanding of these issues, reinforced by work in a programming language sensitive to these issues (C and Assembler) yields someone who really "groks" computers. As time passes, and with a good understanding of what a computer actually does, those mistakes become fewer and fewer. Some day you might actually be a good programmer, at which time you will be promoted into another job. :)

      It's interesting you don't see much use for math in programming, but you think games are a good start. I've worked for a while on a simulator for an armored vehicle, which was essentially a big 3-D tank game. We had two aerospace engineers working on the math of how the tank was supposed to react. Granted, we were going for hyper-realism, but even in games that don't stress realism there's a good bit of math behind the physics model. The graphics required fairly sophisticated models of how the other units were supposed to respond. Even simple 2-D shooters probably will require matrix algebra (at least you'll need it to work with the underlying drawing libraries such as Open GL or DirectX). In addition, a lot of interesting games have a soft-real time component, where you need to complete your drawing code, game a/i decisions, etc. every 33 or 16 ms (depending on 30 or 60 fps).

      If you want to connect the customer database to CRM system, no, you do not need a lot of math. However, you also do not need a CS degree. Go get an MIS degree (where they used to teach COBOL until recently). That's what it's there for. And, as an employer, I know the difference between a "fresh-out" and someone who has 10 years of industry experience. Some fresh-outs are stunning in their productivity and they're usually the ones who did something low-level and challenging. The guy that did a new scheduler for Linux as his senior project, and has had a good grounding in C, architectures, and Lisp, can pick up Java and whatever libraries. I'm not worried about that. If he's good, he's worth the investment. The fact that he's not as productive as someone who's been in the workforce 10 years is reflected in his salary and the degree to which he's able to operate without supervision. But that only makes that person "unhireable" if I don't hire fresh-outs as a rule of thumb.

      --
      Leave the gun, take the cannoli -- Clemenza, The Godfather
    2. Re:This guy is about as unbiased as Stroustrup! by PaulRivers · · Score: 1

      Amen!

    3. Re:This guy is about as unbiased as Stroustrup! by PaulRivers · · Score: 1

      ...oops, and by that I mean "Amen!" to the original post by "MCTFB (863774)". I agree with a whole bunch of that stuff, but most striking was "the purpose of any introductory course to anything should be to capture the interest of the people who are curious enough to take the course in the first place".

  78. OK by Kludge · · Score: 1

    We hire grad school interns occasionally for the research work we do, which is high performance computing. Many of our interviewees have experience in Java and/or .NET on Windows. Ug.
    Very few have experience in real systems (*NIX) or fast computing languages, such as C.

  79. Java == Jobs by pinkfloydhomer · · Score: 3, Interesting

    I am not especially fond of Java myself. In fact, my focus has been precisely with lower level languages like the ones mentioned in the summary. I would love to work with these languages, preferably with tasks that where algorithmically and mathematically challenging etc.

    But I have not been able to find any such jobs. Job databases show 90% .NET or Java jobs. The summary makes it sound like there is a great demand for my skills, but where are the jobs? /David

    1. Re:Java == Jobs by asc99c · · Score: 5, Insightful

      I think a lot of employers advertise Java / .NET as a lot of employees believe that is the new thing and the way forward. i.e. C programming is on the decline, and (young to middle aged) employees don't want to get too far behind the times. Older employees might instead make a selling point of their skills.

      I'm mainly a C programmer these days, but I took the job basically understanding that I would be working significantly with Java. That was the only language I had experience with on leaving Uni, and I was promptly put to work on a Pascal / OpenVMS system! Friends from Uni have had similar experiences.

      I have been a bit worried about an outdated skillset as lots of employers ask for lots of object oriented programming experience and I only occasionally use this. I think this would be my primary problem if I started looking for a new job. I also think it's a bit unfair as the skills are pretty transferrable - there's only a little new theory to learn and after that, good programming practices aren't hugely dependant on language used.

      In dealings with many (perhaps even most) other companies whose software I write interfaces with, it's pretty clear that they are also using C or C++, and often even older systems (in one interface we have to convert our messages from ASCII to EBCDIC). You can frequently tell what language the other system is from the sort of errors that crop up, and sometimes from the design of the interface. I'm forced to believe that my area of the industry is still primarily C based.

    2. Re:Java == Jobs by jellomizer · · Score: 1

      There is a difference between education and real life. For most jobs Higher Level Languages are better. Chances are you will be able to make code faster in both in execution and build time in a higher level language.
      Here is why.
      Lower Level Languages often require you to do a lot of extra work. For large projects (much bigger then a CS Final Assignment for undergrad) working on months on a project huge burnout will occur if you try to make each routine efficient, so in time you will replace you O(log(n)) algorithms for O(n) algorithms just because they are easier to code and debug. Vs. higher level languages that usually use the O(log(n)) function so in general you will be having a faster app with a higher level language the difference may be 2*O(log(n)) vs O(log(n) and the time it will take you write your code to run twice as fast (for large projects) it would normally be cheaper for company to buy a computer that is twice as fast. Java, .NET, PHP, Python, Ruby... Really allow for fast code and fast coding.

      That being said I would agree that schools should focus on Lower Level Languages (with perhaps a class covering some of the higher level ones so they are ready to start work) working with people who have never worked with such languages there is a lack of basic understanding on what is going on and it limits them greatly for example when a Boolean was converted to an integer he kept thinking the value -1 was false. I had to explain to him how the computer handles twos complement works in binary and how a binary 1 converted to integer would be -1 and 0 would be 0. as well explaining how the computer keeps track of time allowing for simpler checking of overlapping time vs. all the crazy string parsing. There is a huge value in learning the lower level languages but in real life you will not be using such languages a lot.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    3. Re:Java == Jobs by timster · · Score: 2, Informative

      I had to explain to him how the computer handles twos complement works in binary and how a binary 1 converted to integer would be -1 and 0 would be 0.

      Maybe I'm not reading this right, but a binary 1 (as in 00000001) interpreted as a two's-complement integer is positive 1, not negative 1. -1 would be 11111111. Maybe this doesn't have much to do with your point, though.

      --
      I have seen the future, and it is inconvenient.
    4. Re:Java == Jobs by aldousd666 · · Score: 4, Insightful

      There are many jobs in .net and java yes. I hated Ada in school, and particularly difficult was FP. But once we got to assembler it all made sense. It was the guts of the system, and I finally saw how it all fit together. Once I saw data structures, and then had a look at how stack based code was generated from all of the other languages, I felt like I could learn any of the languages and not feel like I was using a black box. In my opinion, it's ok to learn java and C# in school after one has had a look at the internals, perhaps a primer in virtual machines. That would cover the bases of actually knowing how computing works, in addition to allowing for the preparation for job markets. One thing that's absolutely crucial to a computer science grad in the real world is being able to adapt to any language when needed, so all of this argument over which language to learn is a little off the mark. You should learn programming in general in school, and optionally focus on any language of the day for the market after you've become versed in the art in general. I realize that 'becoming versed' while in school is a little bit unrealistic as well, but if you've at least been exposed to the concepts at a lower level, it doesn't leave you scratching your head as much in practice when you can't figure out, for example, why your C# code makes a distinction between stack and heap allocated structures, and what impacts it has on performance and all that. It also means that when security holes are pointed out, or patched, you at least know what the hell is going on, and why it was a big deal to begin with.

      --
      Speak for yourself.
    5. Re:Java == Jobs by Gr8Apes · · Score: 1

      I have been a bit worried about an outdated skillset as lots of employers ask for lots of object oriented programming experience and I only occasionally use this. I think this would be my primary problem if I started looking for a new job. I also think it's a bit unfair as the skills are pretty transferrable - there's only a little new theory to learn and after that, good programming practices aren't hugely dependant on language used. You are very very very wrong. OO is an entirely different design/architectural approach than procedural code, and people that think like you are the primary reason there is so little good OO code out there. It's kind of like the difference in understanding required between algebra and calculus. At first, it seems easy, you follow the rules. Only later does true understanding of the meaning of what you're doing become clear. I've personally never heard of anyone getting OO right away. It's always "this is stupid", "why would I want to do that", and "this is so obtuse/inefficient/verbose". Then, one day when they need to change something in their code similar to a file stream converted to, say, an input stream from a socket, the light might come on why you have the "extras".

      The theory's pretty simple, the practice is much more complicated.
      --
      The cesspool just got a check and balance.
    6. Re:Java == Jobs by Lodragandraoidh · · Score: 1, Insightful

      This is exactly what I've been railing about for years.

      The first PC generation (those kids who first wrote programs in the late 70's and 80's) were blessed with having to learn all of this low level stuff to make their systems sing on the limited resources at the time.

      Since then, students have been getting farther and farther from the key understandings that would make them excellent regardless of the language they would use in the future. The best programmers understand the underlying implimentation so they can leverage it.

      Now industry is calling for more developers who can do concurrent applications - but how can you expect them to understand and build a system that avoids race conditions, when they don't even understand pointers?

      The quality of software will continue to suffer until Universities get their act together and standardize system programming (including assembly, as well as C/C++, and scripting - shell, Perl, awk, sed, Python).

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    7. Re:Java == Jobs by Phleg · · Score: 5, Insightful

      I have been a bit worried about an outdated skillset as lots of employers ask for lots of object oriented programming experience and I only occasionally use this.
      What's stopping you from learning a language on your own, for fun? If you think employers won't care about non-professional experience, you're either simply wrong, or working for employers who hire crappy programmers. Where I work, we'll likely throw your resume in the trash if it doesn't have Haskell, Lisp, Ruby, Python, OCaml, Scheme, Scala, or some other obscure, clearly self-taught language on it.

      I think this would be my primary problem if I started looking for a new job. I also think it's a bit unfair as the skills are pretty transferrable - there's only a little new theory to learn and after that, good programming practices aren't hugely dependant on language used.
      You're far off here. This seems to be a prevailing thought, but it just doesn't bear out in practice.

      As code gets more complex, the best way to keep it understandable to others is to follow common language idioms, indentation / code formatting practices, and use built-ins in the standard libraries. These alone often take months to become familiar with, but that's only half of it. The other half I can only describe as trying to approach problems from the unique perspective of the language. Any asshole can jump from Java to Ruby, or from C++ to Lisp, or from VB.NET to Scala. But learning how to solve problems using those languages' strengths, rather than writing code as you would in the language you're coming from, is crucial.

      From my own experience, Java programmers coming fresh into Ruby don't use blocks. When you finally convince them to use blocks for enumerators, they miss the point entirely and simply use each_with_index for everything, rather than more powerful methods from functional programming like map. They also don't like to reopen classes. In Ruby, classes can be added to at will, so if you want a method to calculate the average value of an Array, you can simply define it as a new method on the class. But Java programmers will create a Util module, throw a method in there that takes an Array, and think nothing more. It's not wrong, per se, but it's ignoring Ruby's strengths, and simply writing Java code inside the Ruby interpreter. And the people who do this are bloody useless.

      My rant is getting long, but the main point is this: learning syntax for a new language is easy. Learning to use that language properly (much as a screw is used differently than a nail) is crucial to being able to work with other people, and getting anything meaningful done.

      --
      No comment.
    8. Re:Java == Jobs by Pengo · · Score: 3, Interesting

      I agree, Java does equal Jobs.

      But C and a C++ background will help you keep that job.

      It's very hard to be taken serious as a computer programmer, even a Java one, if you aren't able to understand memory allocation, points, etc. Often times it's critical to understand that so you can understand what the garbage collector is doing.

      I'm the director of technology for a small/medium company (about 5 programmers), and when I'm interviewing a new job candidate for a Java position, during the interview I ask them to explain to me how they would achieve writing a linked-list in Java without using the collection class.

      Interesting some of the responses I get. :)

    9. Re:Java == Jobs by Jarjarthejedi · · Score: 0

      Technically a 1 two's complemented would be a -255, or larger if you're using more bits.

      00000001 in two's complement is 00000001.

      That is one thing about java that irks me, however. The command Integer.toBinaryString() returns a 2's complement version of the number, if it's negative it'll be complemented. The Integer.parseInt() command, however, cannot handle 2's complement numbers to the best of my understanding. That's irritating.

      As for the subject of the article, I guess that makes me ruined eh? I learned BASIC first (there's some quote out there about how BASIC ruins programmers) then Java, so I guess I shouldn't be able to do any programming right? It's really quite silly, oh sure, my knowledge of pointers could be better, but I don't see any real use to learning them beyond what I understand now. IMHO it's more important that I know lots of different programming languages and what the important concepts are rather than learning how to use pointers, or how to save 3 KB of ram by using 17 layers of abstraction.

      I read an article not too long ago about how the determining factor in programming languages has, up until recently, been speed. With recent innovations, however, it's become development time, and Java wins over C in that anyday (and of course loses to other languages like python and ruby and, for 2D games, Actionscript).

      I also don't understand his interface comment, is my school just weird or something? They haven't taught me how to use Java's GUI, I had to learn that myself. All my java programs thusfar have been command-line apps, is that not normal for a public college?

      If you'll excuse me and my damaged self I've got to go finish one of my Python programs, then tidy up my Actionscript game by delegating repeated runs through an array to a function.

      --
      There are two kinds of fool One says 'This is old therefore good' Another says 'This is new therefore better'- Dean Ing
    10. Re:Java == Jobs by arevos · · Score: 1

      Now industry is calling for more developers who can do concurrent applications - but how can you expect them to understand and build a system that avoids race conditions, when they don't even understand pointers? Why are C-style pointers any more useful than Java-style references for building concurrent applications?
    11. Re:Java == Jobs by SatanicPuppy · · Score: 3, Insightful

      They taught mostly Java where I went to school, though "taught" isn't really right. They didn't "teach" by languages at all, it's just that the programming projects mostly tended to be in Java, unless the class concepts were better suited to something else.

      Mostly the classes were theory, concepts; stuff that applied equally to all languages. It was weird in some ways; I had a networking class that assigned the eternal "create a server/client chat program" project, where part of the project was a Java GUI. At this point, I'd never programmed a GUI, and neither had anyone else I talked to. The response of the TA (who was the only one who'd ever give programming advice, because the professor only dealt in theory), was that GUI design was beyond the scope of the class and we'd just have to figure it out.

      My method for figuring it out involved downloading a Java editor, and using the GUI design tools. It was the first time I'd used a graphical editor for Java; it was encouraged to do the work in VI or Emacs, and generally, that's all we did.

      Now I hated that crap at the time, but nothing has prepared me better for my day to day life than having projects dumped on me where I had to goddamn well use my initiative and figure it out. Over and over again, I was forced to go out and read and work out for myself how to translate the theory into code. These days, I program in Java about 20% of the time. I'd hardly say it stunted my abilities, and it certainly didn't make me into a cookie cutter corporate programmer.

      I'd have to say that specifically teaching any language is a problem. They all come in and out of fashion. I work with a guy whose mind is stuck in Visual Basic...And I don't mean .Net. The idea that you should focus on intellectually sexy teaching languages (like goddamn SCHEME) because it builds character or some crap...I just don't buy it. Language is a tool, and should be treated as such.

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    12. Re:Java == Jobs by fbjon · · Score: 1

      Technically, you can do something similar in Java by extending the class on the spot. It's not quite the same though.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    13. Re:Java == Jobs by AmaDaden · · Score: 1

      but how can you expect them to understand and build a system that avoids race conditions, when they don't even understand pointers?
      Um...by studying race conditions and not pointers? They are no where near the same thing. I came from a mostly Java college. While I'm not very good at fancy pointer stuff I can do a lot of other things really well, concurrency is one of those things. Java has a fantastic handling of concurrency. Making a thread in Java is quite easy and Java has some very good concurrency structures to make race conditions very easy to get rid of and entirely avoid in the first place.

      The best programmers understand the underlying implimentation so they can leverage it.
      Exactly. Knowing pointers is fantastic. Hell, I even think everyone should take a few courses in chip design like I did. However, These people don't seem to realize where the next computing problems are. Pointer management is becoming something that you don't have to worry about unless you are writing an OS or a driver. Understanding it is key. If you don't know what Java is doing you can't be a good Java programmer. But this does not mean you need to be able to write it your self. Most programmers know about gate logic and how it all works but how many of you know VHDL or have designed chips with magic?

      The point of progress is not to reinvent things that you already have. Java gives you memory management. It's right there. It is by no means perfect, but with every release the JVM gets faster and smarter. Where I work we recently changed from Java 1.3 to Java 1.5. We nearly doubled the speed of our JSP web servers. No code changes.

      Java is not perfect and I can totally understand people who are more comfortable in C/C++ but Java has a lot of value that people just do not give it credit for.
    14. Re:Java == Jobs by raz0 · · Score: 2, Insightful

      Reopening a class certainly has it's drawbacks too, which is why I mainly try to avoid it. There's a good reason why almost? all the core Java classes are final.

    15. Re:Java == Jobs by Myen · · Score: 1

      GP is talking, I think, about VB (and related things). IIRC, True in VB (err, 4~6; never touched VB.net, dunno what that does) is -1, so that True is Not False. Yeah, there's only a bitwise Not and there's no boolean version. Makes interacting with C-oriented APIs (e.g. Win32) fun.

      Of course, I may be remembering things wrong, it's been a few years.

      Yes, the part about 1 being -1 is totally bunk.

    16. Re:Java == Jobs by pthor1231 · · Score: 1

      Heh, I would have loved that question. I always felt dirty teaching those hand holding classes to kids in Intro to CS 1/2

    17. Re:Java == Jobs by smallfries · · Score: 2, Informative

      Ouch three replies and nobody got what he was saying.

      A single binary 1, would be -1 in 2s complement. You are talking about bytes, as in 8 bits. He is talking about a single bit, for which the two values are -1 and 0. The key word in the description is single.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    18. Re:Java == Jobs by encoderer · · Score: 1

      Very true.

      When a mere mortal first becomes a programmer (yes, tongue in cheek...) you can usually notice how your mind has changed. I've seen this in myself and in the guys I went to school with. Like any workout, programming exercises certain parts of your brain and those parts become stronger. In a macro sense, it's largely about breaking down problems into tiny, tiny pieces and having an innate sense of the order of these pieces along a greater timeline. And not just software-related problems. Everything. Driving. Fixing a car, a washing machine, whatever. Mowing grass. Whatever.

      After working as developer writing procedural code for a few years I picked up C# and OOP. And wow. It's like, for years, I'd been doing bench presses. And I got good. And I could lift 300 lbs. And then I tried to do curls and I figured, hey, I'm a pro. So I picked up the 300lbs and tried to curl it and it flattened me like a goddamn train.

      OOP works out different muscles. I was able to look at a problem and break it down into a procredural program reflexively. Very little effort required. But, approaching it from an OO pov, it was frustrating. I didn't just KNOW how to do it. It required a whole lot of thinking.

      Eventually, of course, these muscles become toned and after 6-12 months of OOD I'm now as proficient as I was writing strictly procedural code.

      But the difference between an OO mind and a Proc mind is the same as the diff between a Procedural mind and the mind of a non-programmer. It really surprised me that it was that much different.

      Anyway, not sure this post has much value to non-devs, but I bet that every OO developer out there was able to shake his head in agreement :)

    19. Re:Java == Jobs by darkwhite · · Score: 1

      rather than more powerful methods from functional programming like map First, you defeat your point to an extent by arguing for the use of a language-independent concept (map/functional programming) in an argument for knowing the strengths of a particular language.

      Second, some of the least readable and understandable code I've seen out there is map statements. They simply cannot be parsed in any linguistically easy way and can't be read quickly by any person who hasn't spent a long time using map.
      --

      [an error occurred while processing this directive]
    20. Re:Java == Jobs by Anonymous Coward · · Score: 0

      2s complement isn't terribly meaningful if you only have ONE bit...

    21. Re:Java == Jobs by shutdown+-p+now · · Score: 1

      Now industry is calling for more developers who can do concurrent applications - but how can you expect them to understand and build a system that avoids race conditions, when they don't even understand pointers?
      Why, oviously, by providing tools that allow one to write concurrent applications with no race conditions (and no explicit synchronization mechanisms to handle them). Ever heard of STM?
    22. Re:Java == Jobs by Lodragandraoidh · · Score: 1

      You are missing the point. I am not talking about implementation of a given production system - of course you want to use what is the best tool for the job.

      What I am talking about is when learning a subject, be it pointers or concurrency - theory is not enough and furthermore the tool chosen to illustrate the concept from an application standpoint should provide simple primitives that force the student to actually build that first 'wheel' themselves. That proves, if not to the teacher, certainly to the student, that not only do they understand the theory, but that they can also translate that theory into practice.

      When higher level concepts, such as garbage collection are introduced, a clear picture of memory management can be drawn between that and the primitive structures (linked lists, trees, hashes) that were built in the introductory class. This part is missing from the vast majority of CS courses today.

      My systems programming Prof would give us assignments and quizes - and expected our code to run. If it didn't run, we would lose points based on his analysis of how broken our code was. This forced us to think, not only about the theory, but about the application of that theory.

      --

      Lodragan Draoidh
      The more you explain it, the more I don't understand it. - Mark Twain
    23. Re:Java == Jobs by Lord+Ender · · Score: 1

      Do you have a real job? I loved programming for fun, and taught myself several languages. Once I had a programming job, I stopped using my leisure time to code because coding felt like work, not leisure.

      --
      A slashdotter who didn't build his own computer is like a Jedi who didn't build his own lightsaber.
    24. Re:Java == Jobs by CountBrass · · Score: 1
      Declaring a class "final" in Java stops you sub-classing it, Re-opening is not sub-classing.

      For every day use I'd agree re-opening is not a good idea but for libraries it's great.

      Oh and the reason most Java core classes are final? The developers were too lazy to do the extra work to make them sub-class-able. An OO language where you can't sub-class the core classes? I think that says a lot about Java.

      --
      Bad analogies are like waxing a monkey with a rainbow.
    25. Re:Java == Jobs by Gr8Apes · · Score: 1

      Oh and the reason most Java core classes are final? The developers were too lazy to do the extra work to make them sub-class-able. An OO language where you can't sub-class the core classes? I think that says a lot about Java.

      There's a reason for that. Take String for example. What would happen if someone subbed String and made toString() return the length, or changed hashcode() or equals() because they thought they they were smarter and could write more efficient code? (They very well might, but that's not the point here).

      Then consider the ramifications as you add in dynamic class loading, extensive libraries, etc, that may themselves depend upon these classes to behave in an expected manner.

      Lastly, nothing's preventing you from re-writing, say, String and using your own implementation in your own code.

      I should also note that String specifically has optimizations in it that are unique compared to almost any other class in the JVM, at least prior to JDK5, when the concurrent utility classes were added.
      --
      The cesspool just got a check and balance.
    26. Re:Java == Jobs by jandrese · · Score: 1

      Wow, I must not have achieved OO enlightenment yet, since to me OO languages have been basically procedural languages with forced abstraction. If you're not designing something procedurally with OO, how are you doing it? Do you design your programs functionally (everything is a method call, no iterating)? I have to admit that my only "OO Language" experiance is with C++ and Java (languages with OO like features like Perl don't count of course) so maybe I'm just out of the loop.

      I've always thought that people who unabashedly claim that OO is for everything need to stop drinking the Kool-Aid. While the extra layer of abstraction gives you a lot of flexibility and theoretically makes it easier to reuse the code (in practice you have to design something to be reusable in any language, random code from a program will almost always have to be modified if it was not designed with reusablility in mind in the first place, or it was trivial to begin with), there is also a cost in making the execution path more difficult to trace (especially with heavily threaded programs) and to introduce uncertainty in the program that doesn't exist with non-OO languages (virtual methods!). That said, I think the benefits outweigh the costs in large programs in general, but it's never good to ignore the weaknesses in your current approach, since only by knowing the weaknesses can you minimize them.

      Also, I have never seen someone use a functional language outside of an academic setting. I know the last time I used one was in college, and while it was absolutely wonderful for the little toy program I built I thought that it was a lot harder to design the program originally and that it made the most tedious (but important!) part of programming (input verification, sanity checks, resource management) even more tedious and difficult. Admittedly, the language I was using was a toy language (Scheme) so maybe full blown Lisp solves these problems, but it was ridiculously hard to verify an input against a regular expression or other such mechanism in Scheme, especially if you were doing it a dozen times in your program. My professor deducted big points if he could formulate an input that could crash your program or produce bogus output though (and he just loved circular references in tree data, 8 bit input, letters instead of numbers, and input strings long enough to blow away most input buffers if you weren't careful).

      --

      I read the internet for the articles.
    27. Re:Java == Jobs by ceoyoyo · · Score: 1

      Hey, you would have enjoyed my CS program. Digital design, where we built a simple computer, with chips, complete with giving it it's own machine language, then Compilers, where (for ease of use) we wrote a simulator of such a computer then wrote our own assembler and finally a compiler for it.

    28. Re:Java == Jobs by Anonymous Coward · · Score: 0

      I'm the director of technology for a small/medium company (about 5 programmers), and when I'm interviewing a new job candidate for a Java position, during the interview I ask them to explain to me how they would achieve writing a linked-list in Java without using the collection class.

      I've done next to no OO programming, or JAVA programming, and the little I did was 4+ years ago, but it seems to be that you could just do the following.

      Create an class that:
      1) Holds some piece of data
      2) Points to another object of the same class
      3) Has the revelant functions you'd need (a constructor for making the first item in a list, a constructor or function for adding an item into the list, and a function that allows you to move to the next item in the list)

      Then just create the head of the list like you would any other object and use your chosen method of growing the list to populate it.

      Am I missing something? Because that seems like an easy question.

    29. Re:Java == Jobs by smallfries · · Score: 1

      True, although the meaning of that one bit is still well defined...

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    30. Re:Java == Jobs by treak007 · · Score: 1

      Job databases show 90% .NET or Java jobs I would love to see some sources backing that statistic.

      Last time I checked, it was about 60/40 C++/Java jobs.
      --
      Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
    31. Re:Java == Jobs by fbjon · · Score: 1
      I had to do this as well, and those kinds of problem-solving/figure-it-out skills are the ones I've actually used outside of university as well.


      I think of it all as learning natural languages. You study one language if you want to focus on the intricacies of that particular language. That can be valid and interesting, but there's more to linguistics than that. Similarly, saying that learning ASM, Lisp, or C "builds character" is like saying that learning Latin builds character. It gives a deeper understanding of what you're doing, but ultimately it's pretty much useless. Take a look at it, try it out, then move on.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    32. Re:Java == Jobs by bnenning · · Score: 1

      First, you defeat your point to an extent by arguing for the use of a language-independent concept (map/functional programming) in an argument for knowing the strengths of a particular language.

      The lack of first-class functions/methods in Java makes functional-style programming unnecessarily difficult.

      Second, some of the least readable and understandable code I've seen out there is map statements. They simply cannot be parsed in any linguistically easy way and can't be read quickly by any person who hasn't spent a long time using map.

      newvalues = map(lambda x: x+2, values)
      vs
      newvalues = []
      for v in values:
          newvalues.append(v+2)


      The map is shorter, less cluttered, has less potential for bugs, and ultimately easier to understand once you understand what map and lambda do. Which shouldn't take a long time for a competent programmer.

      (Yes, Python's list comprehensions would be even better here).

      --
      How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
    33. Re:Java == Jobs by Frank+T.+Lofaro+Jr. · · Score: 1

      Then consider the ramifications as you add in dynamic class loading, extensive libraries, etc, that may themselves depend upon these classes to behave in an expected manner.

      Give the programmer the option. If one simply reimplemented something better, the items using them would benefits. If someone messed up, well, it would cause bugs, but it would be up to the programmer to not do that.

      --
      Just because it CAN be done, doesn't mean it should!
    34. Re:Java == Jobs by Directrix1 · · Score: 1

      I don't get it? Is it not obvious to create a Node class that has a data, and next attribute? What kind of responses do you get?

      --
      Occam's razor is the blind faith in the natural selection of least resistance and in universal oversimplification. -- EF
    35. Re:Java == Jobs by imgod2u · · Score: 1

      I graduated in 2006 and I don't remember our courses involving collections. I'm sure some students used them but we were taught data structures by creating our own classes with references in Java.

      I honestly think that question catches more self-taught Java guys than people who came out of a university.

    36. Re:Java == Jobs by aldousd666 · · Score: 1

      indeed I would have enjoyed that. I'm into the whole parser/compiler writing gig, I like the whole field. Wish I had taken that in college, but eventually it didn't matter, since I did have the fundamental background in CS, I was able to learn how to build compilers on my own from the dragon book. Just another case in point.

      --
      Speak for yourself.
    37. Re:Java == Jobs by raddan · · Score: 4, Insightful

      Sorry, that's just not the case. OO is just a formalization of what was already happening with good procedural programmers. OO is not fundamentally different that procedural programming-- it is a superset. OO languages force the programmer to do certain things: code modularity, polymorphism, typedefs/classes, etc, and does so in a way that encourage a programmer NOT to come up with their own system to do the same thing.

      If you look at developers who spend a lot of time doing things in C (e.g., the OpenBSD developers-- have a look at their repository), you'll see that they are keenly aware of "object-oriented" design principles. They also tend to know exactly when things like byte alignment is an issue, and when you really should just use a void pointer, because they are forced to think about their machines. Most OO programmers I know have no idea why they would need OO language features-- they just use them because that's what they've been taught-- and they know next to nothing about the machines themselves. I would argue that a good programmer is a good programmer; and if they have standard procedural programming experience, that will nicely complement their future OO work.

      GP is right-- OO is simply a design philosophy. The actual mechanics of building an application are no different.

    38. Re:Java == Jobs by Gr8Apes · · Score: 1

      Sorry, that's just not the case. OO is just a formalization of what was already happening with good procedural programmers. OO is not fundamentally different that procedural programming-- it is a superset. "good" is the key word there. Yes, good procedural programmers will gravitate towards a programming style that tends towards modules, components, and well-defined interfaces that make the transition to OO much simpler.

      Byte alignment and such are important for high performance programs. Most business programs really aren't as concerned with high performance as they are with maintainability and cost of maintainability over time. The first relates to how cheaply a business can hire code monkeys to support the codebase, and the second very often involves portability of your code from system to system, as systems become obsolete and no longer cost-effective to continue running on. The latter issue is why business programs generally don't care about byte alignment in their code, as that requires machine specific knowledge which generally has the unpleasant side effect of tying your code to that specific machine until you hire more expensive specialists to come back through and recode your app for the next set of hardware. That doesn't make business sense.

      Note that there are business applications where performance is key, but most business applications do not have this concern.
      --
      The cesspool just got a check and balance.
    39. Re:Java == Jobs by magical_mystery_meat · · Score: 1, Insightful

      The lack of first-class functions/methods in Java makes functional-style programming unnecessarily difficult.

      Then use a different language that supports your pet features. First-class functions are a procedural hack and don't really belong in a truly OO design in the first place.

      However, one could also argue that a design's "OO-ness" can never reach 100% no matter what language you use for implementation.

      The map is shorter, less cluttered, has less potential for bugs, and ultimately easier to understand once you understand what map and lambda do. Which shouldn't take a long time for a competent programmer.

      I find the second block to read much more clearly, and six months from now if the guy who wrote it got hit by a bus I wouldn't need to make sure the next guy knew what map and lambda did. It makes work really dull to write code like that, but you're not paying people to show off their knowledge of a language's esoteric syntactic sugar. You pay them to get the job done in the most effective way possible, which in the real world, means writing the clearest, most maintainable code possible given the constraints of the language.

    40. Re:Java == Jobs by ceoyoyo · · Score: 1

      Early in my masters I had to TA the digital design course. I walked into the lab expecting to see breadboards and wires like we had. Nope. It's all simulated on computers now. Something was definitely missing. The students took forever just to get really basic things like if the signal is high on one end of the wire then it will be high on the other end too. It's not that surprising... if you've got an actual wire it's fairly obvious. A little line on the screen? Who knows.

    41. Re:Java == Jobs by Rinikusu · · Score: 1

      /* What's stopping you from learning a language on your own, for fun? */

      Purely anecdotal but, computers aren't my life. I work with computers from 9-6. When I go home, I write music, read a book, watch TV, go for a ride on my bike, pick-up girls at a bar and have sex with them, etc. Computers are a means to an end for me (an income) and they're something that I find interesting enough to put up with for 8-10 hours/day, but if you're asking me to do something like learn a new language, then I expect to be compensated.

      I understand that this means I am not a top-tier programmer. I don't want to be a top-tier programmer. I want to be stuck somewhere down in the middle with little responsibility so I can concentrate on having a life outside of my job. What's wrong with that? It's not a matter of work ethic, because the whole idea of a good work ethic means you're putting work in front of life. Life ethics are more important to me and should be for you, as well. If your life revolves around learning new computer languages, programming paradigms, and what not, then certainly. Go do those things. I find those sorts of things boring, but that's what makes us all unique.

      --
      If you were me, you'd be good lookin'. - six string samurai
    42. Re:Java == Jobs by HiddenBek · · Score: 2, Funny

      There's an even greater danger. A while ago, I was trying to make toString return a length, just like you suggested. Great minds think alike hey? Anyway, I was reading the API docs and eating my donut, and, wouldn't you know it, I dripped some jelly from my donut into my computer. Now, I know what you're thinking, just lick it out right? Well, that's exactly what I tried, and let me tell you, that's a bad idea. I even had to go to the hospital. But Java didn't say ANYTHING ABOUT THIS! Not even a compiler warning. What the hell? The doctor said I could have been killed.

      Also, did you know that you can override the paint method on a JFrame? The paint method. The method that does the painting. Why, someone could override that method with some code to show a naked picture of themselves, then forget they did it, then accidentally install the application on every computer at a catholic school. I bet they'd have to register as a sex offender and the girl scouts would stop coming and then where would they get their thin mints? I really miss think mints. I filed a bug report, so here's hoping this dangerous behavior gets fixed in the next release.

    43. Re:Java == Jobs by tieTYT · · Score: 1

      I totally agree with you. While I may put those self taught languages on my resume, I've learned little more than the syntax to them and made 1-3 mini-projects with them. Would you consider that good enough? I primarily work with Java and the only reason I know how to do things the Java way is because I've worked with it 8 hours a day for 3 years. Do you expect the job candidates to do the same thing with OCaml in their *free time*?

    44. Re:Java == Jobs by Cederic · · Score: 1


      It's a good question as it tests understanding of a basic programming construct/pattern, as opposed to the ability to copy/paste a working piece of code.

      I'd use it as a fairly entry level test though, and the correct answer is "I wouldn't; the Collections API is perfectly adequate and capable". Of course, the follow-up question is "Tell me anyway." :)

    45. Re:Java == Jobs by Bob+Uhl · · Score: 1

      Second, some of the least readable and understandable code I've seen out there is map statements. They simply cannot be parsed in any linguistically easy way and can't be read quickly by any person who hasn't spent a long time using map.

      Huh? I always thought that map was pretty clear: return the result of running FUNCTION on all elements in LIST, e.g.:

      (mapcar (lambda (x) (+ x 2)) '(1 2 3))

      Wherein is the problem?

    46. Re:Java == Jobs by prockcore · · Score: 0

      I don't get it? Is it not obvious to create a Node class that has a data, and next attribute? What kind of responses do you get?


      Maybe he meant a doubly-linked list. Which is pretty difficult to do without pointers.. ;)
    47. Re:Java == Jobs by darkwhite · · Score: 1

      The map is ... ultimately easier to understand No.

      Your second snippet is far easier to understand. Functional programming can be very cool, but readable it certainly isn't.
      --

      [an error occurred while processing this directive]
    48. Re:Java == Jobs by Chaos+Incarnate · · Score: 1

      The command-line-only bit is completely normal.

      --
      Benford's Corollary to Clarke's Law: "Any technology distinguishable from magic is insufficiently advanced."
    49. Re:Java == Jobs by darkwhite · · Score: 1

      The problem is in the fact that


      x = [1, 2, 3]

      for y in x {
              push(z, y+2)
      }


      (hypothetical language) is infinitely more readable than

      (mapcar (lambda (x) (+ x 2)) '(1 2 3))

      to anyone who isn't enamored with functional programming and Lisp.

      (That includes not just FP but prefix notation and, well, lots of irritating stupid parentheses. The FP concept notwithstanding, I'm hard pressed to think of a language with a more irritating syntax than Lisp.)

      --

      [an error occurred while processing this directive]
    50. Re:Java == Jobs by SirSlud · · Score: 1

      Byte alignment is important to debug software .. I'd hate to think of a business software programmer who is unfamiliar with packing, endianess, etc.

      Incidentally, high performance software generally has to be maintained a lot less. I'd say a hefty chunk of software refactoring involves having to change a system because some component of the system does not scale. Like going from performing a certain transaction in real time to having to batch operations, cache data, blah blah. I don't know how many times I've come across software where its obvious that the programmer never believed that the code/feature would be used on the scale it is required at the present day.

      Thats why I don't have much respect for programmers who completely disregard the performance of their design/software. If their software is part of a particular success story, then its bound to get used much more than it is when they initially design it, so why not design for that success story instead of something that only works right now?

      --
      "Old man yells at systemd"
    51. Re:Java == Jobs by Phleg · · Score: 1

      There's a reason for that. Take String for example. What would happen if someone subbed String and made toString() return the length, or changed hashcode() or equals() because they thought they they were smarter and could write more efficient code? (They very well might, but that's not the point here).
      This is always the argument, but in my years of writing code in many languages, with developers of widely varying skill, I have only once seen it happen, and it took a few minutes to realize the error and fix it.
      --
      No comment.
    52. Re:Java == Jobs by smellotron · · Score: 1

      (mapcar (lambda (x) (+ x 2)) '(1 2 3))

      I prefer Python's list comprehensions (even if they may be less powerful than Lisp... they feel natural):

      xlist = [1, 2, -1, 3, -1]
      ylist = [ x + 2 for x in xlist if x != -1 ]

      Of course, it follows that you should be using better variable names than xlist or ylist...

    53. Re:Java == Jobs by Phleg · · Score: 1

      The problem is in the fact that [iterative example] is infinitely more readable than [lisp map] to anyone who isn't enamored with functional programming and Lisp.
      Well pardon me, but no shit! Who in their right mind cares if their code isn't readable to someone who doesn't even know the progamming language it's written in?

      C-style isn't inherently more readable or intuitive. It's simply the style you and most people are familiar with. But anyone who's used Lisp for a day will find the map example more readable, and easier to type. Likewise, anyone using Ruby for a day will also be able to immediately understand what [1, 2, 3].any? {|x| x.even? } does. Plus, by removing unnecessary boilerplate that's irrelevant to the actual problem being solved, you reduce the likelihood of fat-fingering or mistakenly doing something other than you'd planned. Even a little more magical [1, 2, 3].any? &:sqrt might confuse a Ruby newcomer, but after seeing the idiom two or three times, it's second nature.

      Optimizing readability for complete novices is a mistake. The pendulum can definitely be swung the other way (e.g., Perl golf), but nothing is inherent to a C-style for loop that makes it more intuitive than a map, fold, or anything else along those lines. Not to anyone who has a legitimate reason to edit/understand your code, anyway.

      --
      No comment.
    54. Re:Java == Jobs by Phleg · · Score: 1

      For where I work, we do expect that, basically. And it's not a drawback.

      We get to work with other kickass developers on a fun project with laid-back management. We have our own personal Wii in our office that we play once or twice a week. We toss beachballs around. And we joke all the time. Work gets done -- most of it high quality. When we are forced via some kind of constraint to rush something out the door, we will come back and fix it. Without question. Management affords us this type of work environment because we have customers, we're adding features customers want, and all in all, we get shit done.

      But in order to do this, we need excellent developers. The kind that read blogs and teach themselves Scala just for fun in their free time. And attend Python users' groups. And who've contributed patches to open-source projects they've never even used because they see a low-hanging fruit killer feature missing and it bugs the crap out of them. Without that kind of mindset of developer, there's no way that such a work environment is possible. Not in the long run, anyway.

      --
      No comment.
    55. Re:Java == Jobs by doktor-hladnjak · · Score: 1

      You'd really be surprised by how few candidates can write even the simplest code on a whiteboard when prompted in an interview. *A lot* of people just stand there confused when asked about something simple like writing atoi or reversing a list or searching a binary tree for a key. It's particularly true for candidates straight out of college who have no or limited experience coding outside of class projects.

    56. Re:Java == Jobs by jellomizer · · Score: 1

      It isn't but but depending of how the Language converts the Data it will just assume converting the value with 2s complement no matter what the data type is. A Bool is 1 bit, Char is 8 bit, int 16 bit... So converting from one data type to the next it could follow the same rules. This is true with VB (even .NET 2003) and Fortran 77 for VMS. I am sure for other languages as well. Languages like C, C++... Will normally assume a bool is an unsigned 1 bit data type so when converting to a signed int it will just pad the values with 0 to fit the structure. Nothing is wrong with either method, they have pluses and minuses, but it is something people with some computer science skills with lower level languages can catch and work with much quicker then someone with just language training.

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    57. Re:Java == Jobs by Gr8Apes · · Score: 1

      Thats why I don't have much respect for programmers who completely disregard the performance of their design/software. If their software is part of a particular success story, then its bound to get used much more than it is when they initially design it, so why not design for that success story instead of something that only works right now? That's the difference between programmers and software engineers. Most programmers think they're software engineers, or worse, architects. (I've seen a lot of bad programmers.... call me jaded.)
      --
      The cesspool just got a check and balance.
    58. Re:Java == Jobs by Anonymous Coward · · Score: 0

      Byte alignment and such are important for high performance programs.
      Uh. I'm not sure how much you've worked outside the x86 realm, but on a lot of architectures, byte alignment is the difference between a program working and crashing.
    59. Re:Java == Jobs by Anonymous Coward · · Score: 0

      What? In Java when you have a reference to an object in practical terms it's pretty much a pointer that they don't let you do arithmetic on or tell you the address of. I don't see how doing a doubly-linked list is any different from how you'd go about it in C.

      If anything I wonder about a doubly linked list in, say, Python, where they manage memory with reference counting in lieu of proper garbage collection, if A points to B and B points to A. (Or maybe they do have a proper garbage collector by now, but last I knew circular structures are to be avoided in python.) How well does Java's GC handle this situation?

    60. Re:Java == Jobs by Bob+Uhl · · Score: 1
      I think your 'infinitely more readable' statement really applies to those unused to Lisp. Your pseudo-code is infinitely less readable than plain English, and yet that's not really a strike against it, is it? If one wants to write computer programs, one does need to learn a bit.

      As for prefix notation, you're happy to use prefix notation in your for statement and with your push function; as a user of a mainstream programming language, you in fact use prefix notation almost constantly; function(a, b, c, d) and (function a b c d) are equivalent. A Lisp macro could use (for x in '(1 2 3) do (push (+ 2 x) z)); in fact, with the addition of 'loop' before the for, that is valid Lisp...

    61. Re:Java == Jobs by BBandCMKRNL · · Score: 1

      Thats why I don't have much respect for programmers who completely disregard the performance of their design/software. If their software is part of a particular success story, then its bound to get used much more than it is when they initially design it, so why not design for that success story instead of something that only works right now? With the exception of the cases where management had already decided a given technology, architecture, etc. was EOL, I have never been allowed to design beyond the current architecture and/or more than 5 years out for scalability. Part of the reason is that going beyond that is a lot like trying to predict the weather more than a week or so out.
      --
      Without the 2nd Amendment, the others are just suggestions.
    62. Re:Java == Jobs by bnenning · · Score: 1

      Then use a different language that supports your pet features.

      Exactly. Although having functions as first-class values isn't exactly a "pet" feature; even C does it via function pointers.

      First-class functions are a procedural hack and don't really belong in a truly OO design in the first place.

      Huh? Functions as objects work quite well in Python, Ruby, Javascript, and plenty of other OO languages. This sounds like a blub argument.

      I find the second block to read much more clearly

      Each individual fragment may be easier to read, but the actual *purpose* of the code is obscured because of the unnecessary details.

      if the guy who wrote it got hit by a bus I wouldn't need to make sure the next guy knew what map and lambda did.

      Don't hire bad programmers.

      --
      How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
    63. Re:Java == Jobs by SirSlud · · Score: 1

      When it comes to 200 lines of code, if you can't think like an engineer or an architect, you should not be a programmer.

      --
      "Old man yells at systemd"
    64. Re:Java == Jobs by Mandrake · · Score: 1

      I'm personally hiring people who can wrote code in ruby, php, erlang, c++, python, perl, and c. these jobs are out there, promise.

      --
      Geoff "Mandrake" Harrison
      Some Random UI Hacker
  80. Look harder. The problem lies elsewhere. by Frederico+Camara · · Score: 1

    First you hire Java programmers to produce C code. Next you found out (surprise!) that they are struggling to get the work done. Then you blame Java.

    I think it's still being used, there was something like high and low level programming languages. This was the level of abstraction between a programming language and machine code. Java is at a higher level than C. The AdaCore professionals are bitching that they can't hire good C programmers. What they should know is that programming is not a method. You can not expect a good programmer to be taught in 10 days, it's more like 10 years.

    Also, Free Software displaced things a bit. Good C programmers are born in good C environments. In a proprietary world, there is no environment to teach a good C programmer. You must let them watch your code, since when they were sloppy, lousy programmers. Worse, you have to let them mess with your code. Big companies like (from the article) "AT&T, IBM, Intel, Bloomberg, NI, Microsoft, Lockheed-Martin, and more" just want to *hire* these programmers, those companies don't have the patience to teach them, because there's no guarantee that they would turn into good C programmers. But how can you learn good programming when you can't look at good code?

    Free Software is not guarantee of good code, but is guarantee of a good learning environment. Lots of code to look at, lots of bugs to be fixed, sometimes people to help you make a good fix or guide you how to make yours better coded. All this thanks to a philosophy that allows you to to that.

    On the other hand, companies want to produce proprietary software, but don't want to help these people being good programmers, how can programmers be grateful to those companies?

    1. Re:Look harder. The problem lies elsewhere. by Anonymous Coward · · Score: 0

      No, you are hiring Software Engineers who should be able to program in any language you throw at them. I would never hire someone who called themselves a "Java Programmer."

  81. Re:Why is "Computer Science" Staffing S/W companie by wrook · · Score: 2, Insightful

    I think you're missing my point. If you want to learn theoretical computer science, where would *you* go to learn it? Because they don't teach it at universities in general (with some notable exceptions). They churn out professional programmers, who would actually be *much* better off (in terms of being good programmers) to just spend those 4 years writing code.

    The comment about my degree was flippant, I admit. And it's been 25 years since I took that degree. So it's only in retrospect that I realize it's worth (or lack thereof). It got me a job. Without that piece of paper, it would have been difficult for me to break into the field. But it did *not* teach me anything about CS. Nor did it get me to a point where I could realistically do meaningful graduate work in the way, say, a physics graduate would have. But I had lots of trivial information about systems that were in use at the time (if you know what IEFBR14 does, then you understand what kind of systems those were. If you don't, be *very* thankful!)

    I take your point about researching the degree, and if I had known what I know now, then I would have known to go to those few schools that actually teach CS. But here's the thing: when you don't know something, you don't know what you don't know. Now that I've spent the last 2 and a half decades writing and reading, I'm beginning to understand what you need to know in theoretical CS. I at least have an idea of what I don't know. It is not reasonable to expect someone who has not done that work to know what is out there. But most professors who do research in CS know this. So I don't excuse them.

    And the point of my rant remains. The purpose of the university is basic research. Most universities are not training graduates (even grad students) to a level where they can do basic research in computer science. They may very well be providing a function for industry by churning out people by the tens of thousands with an introduction into the hot programming languages of the day. But that's the function of a technical college.

    What we risk by not investing in basic research is a stagnation in computer theory. Marvin Minsky proved that perceptrons can't compute everything. Then in a off hand comment said that he didn't know if multi-level neural nets had the same problem. It took something like 10 years before anyone even checked. In other areas, programs are getting more and more complex all the time. If we can't find ways of representing that knowledge in more expressive forms, then we will just hit a glass ceiling. By choosing to train programmers and neglect theorists, our whole profession loses. *That's* what I'm complaining about.

  82. It is a coursework issue, not a language issue by what+about · · Score: 2, Interesting

    Why is the professor whining about Java (or C# for that matter) instead of teaching what he think is "useful" ?

    I suppose he will say that there is no time.... well then either make the course longer or more focused !

    Java/c# have solved a number of bugging issues in programming, do we want to program using tools that helps our job or tools that hinder us ? NOTE: I do not think that java is good for Device drivers or OS, but if you do GUI or any other higher level stuff.... why not, just to have fun with pointers ?

    If you really want you can reach the "guts" of the OS even from Java, but unless you really need to why bother ? for fun ?

    Another thing, only Java is mentioned, why not c# ?

    1. Re:It is a coursework issue, not a language issue by Anonymous Coward · · Score: 0

      Why is the professor whining about Java (or C# for that matter) instead of teaching what he think is "useful" ? Because he's a professor emeritus, which means he most likely does not teach, nor does research, for the university.
  83. Lisp by wikinerd · · Score: 3, Insightful

    Professors who care about students's education teach Lisp and Scheme. I had a professor who taught us Scheme in his free unpaid time after the main lecture. The university did not include it into the curriculum, but he explained to us why Scheme is important, and those of us who understood its importance choose to stay and listen to his unpaid unofficial lectures on Scheme. The reason these languages are important is in the mathematical thought that lies behind their structure. Every language has a way of thinking behind it. Some languages are procedural, others are functional. It is these paradigms that are important in a curriculum, because most mediocre programmers who get to program using one paradigm usually stay with it for a lifetime and never get to learn another. So a university should ideally offer courses on all available paradigms to make sure future programmers can choose the one which is the most productive for every specific project.

  84. pointers? by Anonymous Coward · · Score: 0

    what are they blithering about? The ONLY people who need to know pointers are the people who will be writing the next generation of programming languages - it's their job to protect the programmer from minefields like that. Faffing about with triple pointers to make a 3-d array work, like in C, should be completely unnecessary - the sooner that C and its pointer friends are dead & buried the better. It doesn't even have the excuse of being antiquated, Fortran is older and handles arrays without forcing the programmer to play about under-the-hood to make it all work.

    I'm a computation physicist, I'm sorry if my desire to get answers easily and quickly without being hardcore for the sake of it treads on your toes.

  85. Generic Education by Shinta · · Score: 1

    Interestingly enough at my University Computer Science and Software Engineering were seperate degrees - and your degree was awarded by a different faculty (even if you were taught in the same department.) I did the Software Engineering degree. I have to say that the first languages we were taught were Java, and some weird functional one that I can't remember the name of. I programmed my final year dissertation in a mixture of C++ and C, just to see whether I could or not, and I remember the learning curve of managing my own pointers, looking for memory leaks and having to actual compile stuff against libraries and get header files right, instead of just dumping a load of .jar files into a directory a painful painful experience. But when I started to working it was a painful experience again - I got a job programming large scale web applications. I discovered that suddenly when you need to start scaling Java up to large numbers of people you still get, not memory leaks, but object references held onto too long. I had to learn about weak references in Java, and how to make the automatic garbage collection run more efficiently. I had to learn how to integrate lots of libraries, some of questionable quality quickly into my application. In short, I needed another skill set, which my software engineering degree, with all of its formal methods and programming of small applications had in general not prepared me for. I found it useful to know about SQL, when I used frameworks like hibernate, but I never wrote an SQL statement. I found it useful to know how to formally construct tests for functions - but to be honest I didn't have time to formally prove stuff and so just wrote tests quickly and using common sense. At the end of the day, what do you want your degree to prepare you for? I had quite a learning gap when I want to work in the real world(TM), but equally friends have complained that when going on to research they also had one. For them, they needed more modules about theory, and beautiful programming, for me I needed more about how to manage the process of building and integrating software. But we were both given generic educations. It's all a moot point now. I quit my software engineering a few years ago, and went back to Uni. Now I program small things in Python from time to time, because life is too short for either Java or C.

  86. And ignorance is key to bad habits by Moraelin · · Score: 4, Insightful

    Yes, abstraction is key to tackling complexity. But equally, having no clue what happens behind that pretty Java code is the key to writing bad code and spending time debugging what you shouldn't even worry about.

    Guess what? Even in Java, pointers still come to bite you in the arse when you least expect them. I see people every day who have trouble understanding the difference between "==" and "equals()" in Java, because they never learned the pointers behind them. They're essentially one abstraction level too far from understanding what their own code is doing.

    Or even in Java learning why you can't modify an "int" parameter, but you can modify the contents of an "int[]" parameter, guess what? Requires pointers. People end up doing all sorts of unnatural metal contortions to remember when passing by value isn't really passing by value, when "it's a pointer" would sum it up perfectly.

    And it shows. I've had people come to me half a dozen times with basically the same idiotic "auugh! Java's Hashtable is broken! I added a new value, and when I look into its array with a debugger it replaced my old one!" When in fact, it was only added a node to the front of the linked list. But they don't know what a linked list is, nor what a hash table really is, nor how a Node can contain another Node, without a concept of pointers. Worse yet, not only I see them spending a week debugging Hashtable, I see piss-poor workarounds done to prevent it from doing its job.

    Or I see burger-flippers-turned-programmers occasionally get the real programmers fired for doing the right thing. Like using a "==" where it's correct to use it. But the burger flipper doesn't understand that. He learned some "for String use equals()" mantra, and he'll apply it and preach it, cargo-cult style, without even understanding what he's _doing_.

    Or I see people think that optimization means replacing two lines with a one line call, because they have no fucking clue what the machine does with that code. They think that speed is measured in lines of code, because noone explained to them otherwise. So they wonder why their replacing two ifs with a catch is actually slower. (And I'm not getting into the many ways such a catch can make the code less secure, for example, by assuming that a real exception is just their loop reaching the end of the array.) Exactly what throwing an exception does, is a mystery to them.

    Etc.

    No, noone said you must keep programming in "a language where even K&R wrote unsafe code, nor that difficulty equals worthiness. But it helps to be at least exposed to those concepts once, even if thereafter you go on to program in Java or VB for the rest of your days. The fact that you worked with pointers once in C and managed to get them right, _will_ show in your Java code too.

    Probably the best thing that helped my coding was doing assembly on my parents' old home computer, back in high school. In fact, in hex, because that ZX-81 with 1k RAM didn't even have enough RAM for an assembler. Wrap your mind around _that_, if you think C is too hard.

    Would I advise anyone to write a production program in assembly nowadays? Nope, God forbid. I wouldn't have advised writing a whole program in assembly even back then. But understanding the machine behind that high level stuff will show even in your Java code.

    And, yes, not every architect needs to be a Michelangelo. But it helps if they're not a clueless moron who can't even build a doghouse right. You can see plenty of architects nowadays who can't even get a basic house right. They know how to draw an artsy sketch of a house, but they have no clue how to calculate it to actually stand upright or what materials to use so it doesn't get damaged by rain within a year or two. And/or need a civil engineer to fix their elementary mistakes. Maybe it wouldn't hurt that much if they knew a bit more, ya know?

    --
    A polar bear is a cartesian bear after a coordinate transform.
    1. Re:And ignorance is key to bad habits by DerWulf · · Score: 2, Insightful

      Yes, a programmer should be able to grasp the concept of pointers, no argument there. But as you said yourself this concept is also necessary in Java. So, what was your point? That badly trained programmers are bad?

      --

      ___
      No power in the 'verse can stop me
    2. Re:And ignorance is key to bad habits by Moraelin · · Score: 1

      1. Java likes to pretend that it doesn't have pointers, although it's a necessary concept. So a lot of people end up doing those kinky mental convolutions to remember when pass by value isn't really by value, instead of just learning (or teaching) pointers.

      2. I think people need to be exposed to _explicitly_ using pointers, before relaxing the requirements to the hidden pointers of Java. You can't really understand something that you only heard about once, then never used. If it's just mentioned once in a lecture, and that's that, you'll promptly forget it. To really hammer in the concept of what a pointer is, and how it really works, you have to really write those asterisks and ampersands a few times and understand why you've put them, what they do, and what happens there.

      --
      A polar bear is a cartesian bear after a coordinate transform.
    3. Re:And ignorance is key to bad habits by DerWulf · · Score: 1

      Java "likes" nothing. Maybe bad CS professors like to not explain stuff sufficiently though? It's quite possible to have very throughout excerises that will drive home the difference between referencing a value and manipulating a value directly. Still the argument that you need to learn C to be a real programmer is not convincing ...

      --

      ___
      No power in the 'verse can stop me
    4. Re:And ignorance is key to bad habits by gryf · · Score: 1
      I've seen programming taught some five different ways, each in different languages. I felt that starting with C/C++ was the second worst way ( Pascal being the worst ). You're asking people with no assumed background in computers and telling them that data is stored somewhere different, and treated differently, but are sort of the same value, depending on which character you put in front your variable declaration.


      I didn't really get pointers /until/ I started programming in Java and made a practice of working with everything by reference. It's not /Java/ that makes bad programmers, it's how you learn. If you start programming by 'just picking up the language' since 'anyone can learn a language', then no, you won't learn how the language handles memory or pointers. But you can't say that suffering through C/C++ syntactical hell is a requirement for computer science. There's several incompatible implementations of C++, but only one implementation of Java. That alone makes it better for introductions to programming.

      I think C/C++ is great for low level work. Being able to have direct control over every operation is important when when writing compilers, kernels, etc. For 90% of the work out there today, it's a blinkered hinderence to have to track all the memory allocation/deallocation. For all the extra work required, the more likely there will be rework. The moree times you have cases where 'you must always do this', the more times it won't be done.

      In most business environments, the work is at a high level, and the need for rapid development is greater than the need for direct control over memory management. Say what you like about Java, but I understand pointers and linked lists, but I'm not going back to dereferencing, destructors, and header files.

      Java is not alone in eschewing memory mgt and passing off a lot of the low level work. Perl preceded it, and should arguably have done more harm over time because it's so forgiving and flexible. But no one complains about how Perl teaches bad habits.

      --

      #-#
      Ad Astra Per Aspera
      A rough road leads to the stars
    5. Re:And ignorance is key to bad habits by TooTechy · · Score: 1

      We spend a great deal of time here discussing the pros/cons of each language in the market place. We spend a little time discussing the merits of learning each language. There are several factors to be concerned with.

      Training a student to be a programmer is vastly different from teaching them how to become a programmer.

      Learning ALU architecture, followed by Hex code, followed by Assembler, followed by C is a natural progression. If you understand each then at the end, when writing in C, you can visualize the resulting Code and its' affect on the CPU. This turns you into an engineer. This is a hard skill to replace, an engineer who understands what is going on. This is a classical computing education. Learning programming is learning an easily replaceable skill. The argument in TFA.

      Computing, is reaching the end of its' witch doctor phase. In the beginning, the IEEE had the opportunity to control the education but largely stepped aside as it is not hardware. Gates took over and lead us to this path of obscurity. We shall return from it but it will take time. Controls will return and the engineering aspects will be a sought after skill.

      Log Tables, though absolutely required for all forms of mathematics, are only just touched on in classical schooling. Replaced by the calculator they are never the less there. It is important to understand what is going on. Computer languages are the same way but vastly more complex. It is important to understand the nuances of the language and what it means to the system. There will be many factors of programming that it will be necessary to brush over in a technical college education where we turn out programmers. In a university we should treat our students better. They deserve to be educated. We should teach them a more classical education. Learning a language is easy. Learning why we use it is the tougher line.

    6. Re:And ignorance is key to bad habits by rrobbins · · Score: 1

      I resent that "burger-flippers-turned-programmers" crack because I used to work at McDonalds before becoming a VBScript programmer (ASP web developer). I think colleges should design their courses to train workplace programmers who need to know the .NET Framework and C# or VB. All the higher math and academic languages like Eiffel and LISP should only be taught to overachievers who aspire to be programmer gurus (aka software engineers).

    7. Re:And ignorance is key to bad habits by Anonymous Coward · · Score: 0

      With all due respect, from your comment it sounds like you are exactly why people comment about "burger-flippers-turned-programmers" the way they do.

      Either that or a joke just went over my head.

    8. Re:And ignorance is key to bad habits by jafac · · Score: 1

      Fuck.
      ZX-80 assembler, in hex, was no problem for me, when I was 13.
      I'm still struggling to get comfortable with C, C++, and Java.

      Right now, I just finished a Data Structures class - taught in Java, and I understood all the stuff about queues, linked lists, hashtables, in fact, it's all old-hat to me. Inheritance? Interfaces? Blows my tiny freaking mind. *shrug* -

      Same time, I took an Architecture class, which was digital circuits, binary, hex, logic, Finite State Machines - basically a review of all the stuff I taught myself when I was 13.

      I *know* I'm not cut out to be a hard-core programmer. I also know that when I get a CS degree, and add that to the 14 years of experience working in the field in various capacities, I'm still going to be more valuable to my employer than I am today. Not everyone involved in Software Development is a coder. I'm comfortable with that. But in a lot of environments, you really *DO* need a degree for the credibility to move your career forward. Whether you actually write code or not. You need to be able to communicate with the coders.

      --

      These are my friends, See how they glisten. See this one shine, how he smiles in the light.
    9. Re:And ignorance is key to bad habits by Anonymous Coward · · Score: 0

      Ah those were the days!
      1 REM #$!@$&^%*
      2 RAND USR 16509

    10. Re:And ignorance is key to bad habits by demon · · Score: 1

      But no one complains about how Perl teaches bad habits.

      Actually, I say that all the time. And I like Perl. I still think it should never be used as a teaching language ever; it makes you lazy.

      --

      Sam: "That was needlessly cryptic."
      Max: "I'd be peeing my pants if I wore any!"
    11. Re:And ignorance is key to bad habits by GWBasic · · Score: 1

      Guess what? Even in Java, pointers still come to bite you in the arse when you least expect them. I see people every day who have trouble understanding the difference between "==" and "equals()" in Java, because they never learned the pointers behind them. They're essentially one abstraction level too far from understanding what their own code is doing.

      I got into an argument with a senior developer about that... It made me realize that the problem with programming is that there's no formal certification! My peers in Civil Engineering and Mechanical Engineering had to take very difficult certification exams to get a liscense to work.

      Frankly, I've seen many experienced professionals make assinine errors because they've never had to prove that they know what they're doing.

  87. Hell, yes! by itsdapead · · Score: 1

    You wouldn't give a calculator to 6 year old kids learning math, would you?

    Now, I wouldn't give a calculator to a 6 year old kid while they were practicing mental arithmetic but that's only one facet of mathematics. There's all sorts of calculator games and explorations they can do which will help their understanding of mathematics.

    Unfortunately, the human race is incapable of doing things in moderation, so what you get is a holy war between conservatives who think that the measure of a man is being able to work out 271 x 137 in your head while being beaten with a stick , versus the touchy-feely brigade who think that learning to add up before the onset of puberty will make you grow up an emotional cripple. Both have a point - neither is 100% right. I suspect similar reasoning has led to the Java monoculture in college (a few years ago, Java was the cat's whiskers and C made you go blind).

    --
    In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    1. Re:Hell, yes! by FrangoAssado · · Score: 1

      Now, I wouldn't give a calculator to a 6 year old kid while they were practicing mental arithmetic but that's only one facet of mathematics.

      I think that the point being made is that you would expect a 6 year old to understand how the calculator computes -- by doing the math on paper, not in their head -- before giving him a calculator. By the same token, you would expect someone to understand how the computer does things before turning them to Java.

      I agree with the rest of your comment, though.

    2. Re:Hell, yes! by itsdapead · · Score: 1

      I think that the point being made is that you would expect a 6 year old to understand how the calculator computes - by doing the math on paper, not in their head -- before giving him a calculator.

      That's not an either/or bit of knowledge - its an understanding that will develop over several years - and good use could be made of a calculator over that time to explore and reinforce that understanding. A lot of "traditional" educational values involve rote learning of (e.g.) multiplication tables, or the algorithm for long division which doesn't automatically impart any deep insights into the nature and use of the math. Calculators, used properly, can let kids spend more time *using* the mathematics without all the tedium. Of course, what gets lost is that its also quite useful to know your tables and a 15 "multiplication quiz" each week won't necessarily cause bedwetting.

      If, e.g., certain people who were taught "the good old way" had spent less time being drilled on "Hundreds Tens and Units" exactly as if they were "Yards, feet and Inches" instead of actually learning to understand place notation then they might "get" the metric system and we might not still be stuck using a medieval system of units.

      Even more so in computing - there's plenty to learn about algorithms, data structures and the mathematics of computing that can quite reasonably be done in Java or any half-decent high-level programming language. The other stuff needs to be taught alongside that - not before or after. Heh - Exercise 13 could be "write a simulation of a simple CPU in Java" :-)

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
  88. Monoculture is bad by Saint+Fnordius · · Score: 1

    I think that's a more fitting title, really.

  89. MOD PARFENT DOWN PLEASE by mha · · Score: 1

    Why does someone who almost PROUDLY admits not to even have read the article gets a FIVE modding??? There seem to be too many moderators on crack! I think moderator privileges should be tight to IQ.

    I'm mad at the moderators, not nearly as much at the guy they moderated. Although (no surprise!) he COMPLETELY misses the point of the article.

    Besides, he has no idea about computer science as the last sentence of his post shows. With the same argument one could argue no mechanics should be taught in physics lessons any more - Newton is sooooo hundreds of years ago after all, today we only deal with relativity (ooop,s even that is a hundred years old), quantum physics (not too new too) and string theory (a lot of completely unproven stuff).

  90. Just as an extra anecdote by Moraelin · · Score: 4, Funny

    Just as an extra anecdote and illustration of what happens when such people finally get told about pointers (but still don't quite "get it"): one team's architect actually told everyone to use "Integer" instead of "int" in method definitions everywhere, because it's faster! See, it copies only a pointer instead of the whole int!

    Yeah, that guy was quite a bit less than a Michelangelo.

    --
    A polar bear is a cartesian bear after a coordinate transform.
    1. Re:Just as an extra anecdote by joto · · Score: 1

      Just as an extra anecdote and illustration of what happens when such people finally get told about pointers (but still don't quite "get it"): one team's architect actually told everyone to use "Integer" instead of "int" in method definitions everywhere, because it's faster! See, it copies only a pointer instead of the whole int!

      Tell me the name of the company. I want to invest money there!

    2. Re:Just as an extra anecdote by Simon+Brooke · · Score: 1

      Just as an extra anecdote and illustration of what happens when such people finally get told about pointers (but still don't quite "get it"): one team's architect actually told everyone to use "Integer" instead of "int" in method definitions everywhere, because it's faster! See, it copies only a pointer instead of the whole int!

      Yeah, that guy was quite a bit less than a Michelangelo.

      Was he? You sure?

      If that was his real reason then fair enough. But there are lots of valid reasons for choosing to use an 'everything is an object' style. It makes things a lot more orthogonal (although since Java 5 autoboxing has sort of fudged this issue).

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    3. Re:Just as an extra anecdote by Moraelin · · Score: 1

      Yes, sadly I'm dead sure, because I've actually talked to him about it. Yes, there are valid reasons to use the wrapper objects, this wasn't it.

      --
      A polar bear is a cartesian bear after a coordinate transform.
    4. Re:Just as an extra anecdote by roman_mir · · Score: 1

      told everyone to use "Integer" instead of "int" in method definitions everywhere, because it's faster! See, it copies only a pointer instead of the whole int!

      Yeah, that guy was quite a bit less than a Michelangelo.
      - What pointers? Michelangelo used Lisp and Prolog, you insensitive clod!

    5. Re:Just as an extra anecdote by Anonymous Coward · · Score: 0

      Except that on a 32 bit system both a pointer and an integer have the same data size (namely 32 bits) so copying a pointer instead of an int are roughly the same.

    6. Re:Just as an extra anecdote by Anonymous Coward · · Score: 0

      It might be faster for another reason though, as depending on the application it might avoid a lot of boxing and unboxing. For instance, if you're always using these Integer objects to look up things in collections then using an int will be slower than having an Integer in the first place, although clearly the Integer will waste more memory. :-)

  91. What Programmers really need by qazwart · · Score: 1

    So, Java is bad because it is such a safe language to write in?

    If we want our young to experience pain, maybe we should teach them Perl.

  92. You can't write command line apps in Java... by Anonymous Coward · · Score: 0
    or to be more correctly, terminal emulation apps. There is simply NO WAY to read a single character (i.e. a key press) from standard input. IT CANT BE DONE IN JAVA. This is an absolutely idiotic restriction that people have been begging to be fixed for about 8 years now.

    Also, without a shell script you can't really have a single-word command like "ls" or "cp", but that can be overlooked.

    I'm pretty happy with Java overall, but this one drives me nuts.

  93. Why We Teach Java by fartrader · · Score: 5, Insightful

    As a CS Professor, here are some of my thoughts on this article:

    (1) Java is what the market wants. Yes, we can teach any other language under the sun. But the reality is, that the software industry values individuals who are Java-literate. By this I mean an individual who has a basic understanding of the OO principles that the language is founded upon, can write Java code using common tools, and has at least some insight into some of the more common Java APIs. Any learning institution that doesn't take this into account when designing their curriculum is doing a serious disservice to their student body. While some do go to University for the sheer joy of learning a subject - most are there to ultimately get a job.

    (2) In my opinion there is something seriously wrong with a Java course that emphasizes Swing or Web development, rather than the fundamentals. Yes, its important to get things in and out of a program, but, at least initially these should be incidental to the main event. Learning the language, and applying it effectively. Thinking in an object-oriented way, which many of you know is not necessarily an intuitive way to look at the world - especially if you already have a procedural background. GUI and web application development should be separate, advanced courses.

    (3) I sometimes lament the lack of insight into pointers, but any professor worth their salary will spend some time discussing the Java object reference architecture, and relate that to pointer-based languages. Regardless of how abstract your language is "opening up the hood" and demonstrating how things work, and why things have been designed the way they are, is often worth knowing.

    (4) I laughed when I read the article about Praxis, especially the part about formal methods. Are they serious? Yes I was taught formal methods in school, and could understand *why* I'd want to use them... If I had all the time in the world... a huge budget to burn and customers not screaming for something that the business needed yesterday. Praxis offers software development based on formal methods and as a consequence occupies an important (and probably expensive) specialized niche of the software ecosystem. To suggest that this approach should be the norm and lament its absence really betrays that the authors have spent too much time in academia and not enough in the real world.

    (5) Ada is a great language - in fact I learned Ada 83 as a first language along with C. It just isn't relevant to most software development companies or IT departments - if indeed it ever was. I worked on a research project that was part of the Ada 9X Real-Time initiative - the main users were aerospace and military vendors - particularly embedded systems. There you do need to know about concurrency and distribution - along with hard performance deadlines and often a slew of safety and mission-critical issues you need to consider to do a good job. However, I fail to see the general relevance of Ada to a commercial market that is primarily interested in "simple" information systems, getting information out of a database and/or putting it in - with some processing on route. Why should I use Ada when the market in general doesn't use it?

    (6) We teach concurrency - its useful stuff to know. I think that using formalisms to describe concurrent programs is going a wee bit too far (see (4)) above.

    1. Re:Why We Teach Java by curmudgeon99 · · Score: 1

      I also taught Java and did explain how a Java reference is quite akin to a C/C++ pointer. Industry likes Java for the exact reason the holier-than-thou CS professors complained. Java allows developers to get a lot of work accomplished. Coding in C/C++ is much more error prone. The professors are just revealing their pedagogical arrogance.

    2. Re:Why We Teach Java by PrescriptionWarning · · Score: 1

      I think their real beef with java isn't that it over simplifies things, but that simpler people are able to use it. They completely forget that there will still be bad programmers and there will still be good programmers (and of course all those in between), but that has nothing to do with java. It has to do with where the money is, and when there's plenty of jobs for programmers you're going to get people in there who probably should not be programming, but do anyway so they can get a solid paycheck.

      I say rejoice! Bad programmers make me look good!

    3. Re:Why We Teach Java by TemporalBeing · · Score: 1

      (1) Java is what the market wants.
      I think this is primarily because the schools started/are pushing Java so much that they can only get Java programmers to fill entry level positions. It's sad, but that's the reality. Push something else, and the industry will demand something else.

      Personally, I'd recommend teaching real programming, and let the industry figure out what it wants. But I'll cover that in another post.
      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    4. Re:Why We Teach Java by hughk · · Score: 1

      I worked on a research project that was part of the Ada 9X Real-Time initiative - the main users were aerospace and military vendors - particularly embedded systems. There you do need to know about concurrency and distribution - along with hard performance deadlines and often a slew of safety and mission-critical issues you need to consider to do a good job.
      Unless you are a professor in India or China, I can always get newly graduated Java programmer from an offshore vendor for less than your students can ask for. The thing is that because military-aerospace tends to stay onshore. Military people guard know-how and for aerospace they prefer to maximise their control of the development of real-time systems.

      However, I fail to see the general relevance of Ada to a commercial market that is primarily interested in "simple" information systems, getting information out of a database and/or putting it in - with some processing on route.
      If you know languages such as Ada, then you have a lot more awareness of the issues of concurrency. This makes you better equipped to write in other languages when implementing modern commercial systems, which increasingly are real-time or quasi-real-time in their architecture. A language with the right abstracting capabilities and a good DBMS can help but without an good understanding, it is too easy to produce code that doesn't work.
      --
      See my journal, I write things there
    5. Re:Why We Teach Java by iPaul · · Score: 1

      I'm the "market" side of that equation. I hire programmers for my company. I also manage projects and sell projects to customers. I can teach any idiot Java, but I cannot teach people to think or give them what they should have learned in undergrad. Let me give you a concrete example. I had one fellow who told me something was "wrong with the system." He was having a problem where a native library was not in the search path and the Java wrapper library was causing the VM to tank from the link error. He didn't see the need for C or C++ and wanted to focus on Java because that's what he learned in school and that's what the market wanted. He didn't understand anything about why his program was dying and how to fix the problem. Slack-jawed, he brought me in and was amazed when I updated his environment and his program worked fine. He was a competent Java programmer, good with clients, but didn't actually know how his computer worked. He didn't known the first thing about dynamic linking, or linking in general, because he didn't understand what a computer is and thought Java was all you need to know. If you're going to treat a CS degree like a trade school please teach the students architectures, C and assembler. That way they know something about the actual computer and not just how to string together Java code to get what they want. That way, when something breaks, they actually can diagnose and fix the problem. I've seen a shrinking pool of people who really "know their shit." It makes some of the more challenging business ideas harder to implement not because they don't know how to program in a language, but they have no idea what actually happens inside a computer.

      --
      Leave the gun, take the cannoli -- Clemenza, The Godfather
  94. wave of the future by NRISecretAgent · · Score: 1

    Maybe the problem isn't what the professors are teaching so much as the mass of students who aren't suited for the kind of concepts that are in programming. It's the wave of the future and a lot of people are drawn to that just for the sake of it. Besides, how many played video games and said "wow, wouldn't it be cool to make these?"

  95. This is all rather interesting considering ... by 3seas · · Score: 1

    ... see the lower part on mindset changes in education

    I studied C in school while working full time and made deans list twice while doing so. Pointer were a little tough to get but once gotten, no problem.
    However, it you read the whole wiki page linked above, what they seem to be complaining about in light of reality is that their way of doing things is becoming obsolete.

    Using pointers and other text based programming methods or concepts or procedures or whatever you want to call them is important to know as a software engineer understanding the full scope of software programming history and being able to deal with its old code, but that doesn't mean everyone wants to be a software engineer but just wants to write a program.

    Personally I know the whole software engineering shebang is working off the wrong assumptions and premises and that there has been this ongoing lack of needed talent because of it.
    Just as using the roman numeral system for mathematics today would be found impossible in its ability to even do what is today considered common accounting, so is becoming the ways of software development.

    I'm not defending Java or any other programming language because ultimately its not what language you write in, which includes what GUI use use in the process of programming but a matter of translation of what code you write or click.... its translation down to machine level. And that is where genuine "Software Engineering" should be focusing.

    There are just to damn many people needing to program everything from a full out large scale programs, to making a simple macro to automate some repetitive set of actions they perform.
    To many people for the illusion of elitism of programming to continue as it has. Programming can and has so been becoming more and more automated.

    Software engineering main focus today should be of "Abstraction Physics" and the development of "knowledge navigational mapping" as a standardize mapping for software programming support.
    The navigational mapping of programming concepts, data type, common functionality, etc..

    In simpler words, software engineering should be the field that focuses on building the support base for programmers. Just as structural engineers do the plans for building a bridge but its the skilled and often unskilled laborers that actually build the bridge, not the engineer.

    1. Re:This is all rather interesting considering ... by augustw · · Score: 1

      Uh, so you want "unskilled labour" writing your compilers and operating systems?

    2. Re:This is all rather interesting considering ... by 3seas · · Score: 1

      "Uh, so you want "unskilled labour" writing your compilers and operating systems?"

      Programming language Compilers and Interpreters are Software Engineering Tasks. And anyone can come up with another language.

      Operating systems is another Software engineering task but it is becoming less so as "OS kits" are created, where automation of the more difficult stuff taken care of.

      But for those who fail to understand some things, they, like yourself, are not software engineers, but mere programmers relying on the quality of software engineering done from which they work on top of.

      If the compiler or interpreter is buggy, then what is the best quality of software the mere programmer, or even automated code generation system, can create?

  96. Problems from their first language, or earlier? by Dersaidin · · Score: 1

    I don't think that the first language you learn is the source of the problem with understanding in programming. Unless you consider maths a language. The basis for understanding programming begins with primary school maths. Logic, ordering, functions, exactness... maths... Not to mention that half the applications of computers are to do more complex maths. As a student doing units of programming, I can tell you theres a lot of people who can't think of a way to solve the underlying mathematical problem - that has nothing to do with their first language. Comprehension and reasoning skills needed for coding should be built earlier than the first (real) language you learn.

  97. "Other professions have much harsher standards." by MichaelCrawford · · Score: 1
    I was able to get my first real programming job based on a single, well-taught CS class, as I posted previously in this discussion.

    I have grown weary of coding, though, so I'm studying piano with the aim of enrolling in music school to study musical composition. Someday I'm going to write symphonies!

    But twenty years of playing as a self-taught pianist wasn't going to enable me to pass the music school entrance audition. So I started formal lessons, having now had three and a half years of them.

    At my rate of progress, I expect to have to study, and diligently practice, for another five years or so before I can pass the audition for a school like Dalhousie in Halifax, or the U of British Columbia in Vancouver.

    I don't think there's any hope that I could ever get accepted to Julliard. And all that study is required just to get accepted to a University-level program. Far more study is required to graduate.

    Given all that, consider what a failure in my understanding of music theory might cost someone: my audience might not enjoy my show as much, or my CDs might not sell.

    Now consider what a failure in my current job writing hardware RAID device drivers might cost someone: wiping out a business' data, or the failure of my employer to compete in the marketplace.

    Yeah, I'd say other professions do indeed have much harsher standards.

    --
    Request your free CD of my piano music.
  98. At A Certain Small State Uni Down South in the USA by aquatone282 · · Score: 1

    . . . they teach Java in the introductory courses, and then tell students to buy Kerrigan-Ritchie and give network and systems programming assignments in C.

    Bastards.

    --
    What?
  99. One language is not enough. by McSnarf · · Score: 1

    Java might be important for some people to learn. But it will forever limit your abilities. The same applies to any other single language you could possibly learn. As they say: If your only tool is a hammer, everything looks like a nail. While you could go and write a simulator for a particle accelerator, an accounting package or a text editor in almost any language, you will find that certain languages are more suited to certain tasks. Remember that, in theory, the same applies to Excel. Would you consider yourself computer literate on a software developer level just because you understood every single Excel feature? With Excel being capable of (in theory) being used to create almost any imaginable application? You need to know what's under the hood at some time. You also need to know that good tools save time and lead to better quality. (Few customers in the 80s and 90s understood that 4GLs and report generators would beat COBOL hands down in these areas, with few exceptions - and there's still COBOL code out there.) Java is like short order cooking in a diner. You might be able to earn a living, you mignt even end up managing a chain of diners, but the fine art of e.g. french cuisine will forever escape you. (My first programming language was FORTRAN IV. Since then, I learned a new programming language every two years. About. Until I stopped working in development. Don't expect Java to last you more than a couple of years. Unless you want to do something similar to maintaining 30 years old COBOL code. Learn. Or stay in accounting, where you belong.)

  100. USA != world by Anonymous Coward · · Score: 0

    As always, to put it bluntly, the software industry in the US as depicted in parent-post does not reflect the state of the software industry of the entire universe.

    The main itch most people of my academic years scratched after graduating is that we virtually learned nothing directly useful there, except how to think, how to handle any sort of IT problem, regardless of paradigm or computer language: how to collect and iterate over data(bases), how to communicate over networks, protocols, interface design, etc.. In fact we learned bash, Perl, Python, AND Java on ourselves without any official course or textbook, but we wrote compilers, text editors, etc.. we had to because the assignments were either asking for it or we had to find "the best tool for the job".

    Java is not meant to teach you anything. It is a tool. A good allows you to think on a higher technical level, which is great for productivity. A hard-to-use tool will force you to be very accurate on lower technical levels. Academic institutions can teach a range topics that is FAR greater than would be possible using C/C++ using Java as an implementation platform, because of the speed with which points can be made.

    So it is a wrong thing to blame Java. Learn how to think. It is even more wrong to "blame the way universities teach", because no 2 universities teach the same thing in the same way.

  101. Reminds me of logarithm tables by rcasha2 · · Score: 1

    I remember being forced to learn how to use logarithm tables (printed booklets with rows and columns of logs, sine, cosine values etc) long after electronic scientific calculators were commonplace and cheap. It was a total waste of time. I'd never dream of introducing people to programming using C or C++. I'd leave those for much later, or even for an optional, specialised unit. The use of libraries is actually important - in today's world one of the best talents a programmer can demonstrate is the ability to find what he needs, whether it's a library, some documentation or a solution to a problem. It certainly beats the old practice of just copying and pasting code from one place to another.

    1. Re:Reminds me of logarithm tables by hughk · · Score: 1

      I remember being forced to learn how to use logarithm tables (printed booklets with rows and columns of logs, sine, cosine values etc) long after electronic scientific calculators were commonplace and cheap. It was a total waste of time. I'd never dream of introducing people to programming using C or C++.
      Interestingly enough, lookup tables made a comeback for fast transcendental functions for real-time work. I saw them in use for missile guidance systems in the day when microprocessors started knocking around and also for early 3D graphics. Later, I have used them myself in the 486 era for real-time option pricing models. I would agree that familiarity with the tools in hand is a good first step but at some point you need to be aware of their limitations.
      --
      See my journal, I write things there
  102. How it's done in Denmark by Anonymous Coward · · Score: 0

    I study Computer Science at the University of Aarhus, Denmark. The first year you have two programming courses, Introduction to programming and Programming 2, both of which teach java exclusively. These two courses are rather easy (for someone with programming experience, really easy), and they teach the basics of OO programming. We have, alongside Programming 2, a course called Computers and Networks, which teaches the basics of assembly (ijvm and IA32), and the basics of TCP/IP. I find this approach much better than just to teach programming in one course. You constantly have to think different, because you have these really different programming courses, and the courses do their job: they teach you computer science. To compensate for the bad choice of programming languages the first year, there is a mandatory course third year (5-6th semester), after which one should be able to write a compiler. Personally I find java really easy to program in, especially the non-gui part. I have had some experience with pascal (Delphi too) before, but they weren't quite as easy to understand as java. The truth is that java is a really good beginners language (and it has its uses in many business environments), and the only thing that can damage students is choice. They can choose only to learn java, or if they have a passion for computer science, learn some other language on the side. To quote Paul Graham: "if you can do things that make you stupid, you can also do things that make you smart".

  103. Computer Science is a draw where? by Quikyn · · Score: 1

    So how does a person find you? Or how does a person get found by you?

    I did a degree in NZ that gave you the flexibility to learn about serious CS, or learn how to write SQL and Java. I've coded VHDL, C Kernel code, I understand the bottom layers of the OSI networking model in depth, I've designed and simulated a CPU, I've written a (trivial assembly) multi-tasking kernel, tackled IEE754 floating point concerns at the CPU multiplier level. I have the grounding in CS theory, and I've applied it to little. Sure, I understand how encryption and associated security principles work, that doesn't stop projects I'm involved in designing and implementing their security incorrectly. I hit most of the things you require and many more, but right now I'm effectively writing business solutions in Java web layers.

    I'd be happier with heavy backend Java based servers, happier still with embedded C, happier the more technical the task. But the market is for Java. In the UK technical job offers seem concerned at the door with whether you attended a UK red brick university, or perhaps Stanford. When I put a technical CV in the market, the typical response is that the advanced subjects I understand demonstrate "too basic a knowledge" or "a sign that I don't understand enough Java". Which is kind of fair, as most recruiters don't know squat about CS, let alone software - and the market is for Java (which I also understand, right through to the virtual machine).

    So help us out, where does a person with the right training and skills find these jobs that demand them?

    1. Re:Computer Science is a draw where? by DCFC · · Score: 1

      The first page of googles on my name are all me :)
      A great improvement from a couple of years ago, when since my name is "catholic" I was buried underneath a list of various child rapists in the Catholic church.

      I'm Dominic /at\ PaulDominic dot com, bung us your CV, and I'll get our 140 page guide to you. It's tough.
      There is one large firm who may be interested who have offices in London and NY, they say they want C++ but are lying, since their interviews are heavily K&R C.

      Java backends are rare in our game, and we don't get involved at all, though we have a frankly demented project for back end servers running Excel VBA.
      (mad, bad and expensive to know).

      There is not a great demand for C, though it pops up after C++, VBA, C# but above Java.
      We are more flexible than most on branding of university, since we work with people from everywhere ("everywhere" including a few people from places not recognised as states at all).

      --
      Dominic Connor,Quant Headhunter
    2. Re:Computer Science is a draw where? by StandardDeviant · · Score: 1

      I feel your pain regards unfortunate name-google results. My name is Michael Jackson. It does have its upsides: nobody ever asks me to babysit and only one person has ever seriously asked me to spell my name.

      For what its worth I'm doing java backend stuff for a bank here in nyc (admittedly not algorithmic trading, more like automated trade settlement stuff in the fixed income/commodities sphere). I'm a chemist that fell into programming because it looked fun though, so I don't know whether I'd fit your filters (I'm seriously thinking about going back to school for another, possibly advanced, degree in CS just to solidify my grounding in theoretical CS). Anyway, of possible interest to you re: Java vs. C++ might be Azure if you haven't seen any of their equipment show up over there (it's making a few inroads here from what I've heard on the grapevine). Basically they make these really high-end custom java machines (as in literal rack-mounted boxes containing 100s of custom asic cores and 100s of gigabytes of ram) that promise things like hard real-time java performance, deterministic and pause-less GC, truly massive heap allocation, etc. for exactly the sort of Hugemongous(tm) problems the financial set encounter.

    3. Re:Computer Science is a draw where? by DCFC · · Score: 1

      I've had the Azure stuff demoed to me, and it looks interesting, and they coped well with the idea of a headhunter having an interest in their stuff.
      seemed a little pricey for what it was though, does you experience justify the cost ?

      --
      Dominic Connor,Quant Headhunter
    4. Re:Computer Science is a draw where? by StandardDeviant · · Score: 1

      My experience as such is watching a presentation they (I mistakenly called them Azure but I think it's actually Azul, the "blue compute box company" either way much like Cisco is "the blue-green packet box company" in my mind, heh) gave a few months ago to the ny java sig and hearing on the grapevine that it was in planned or actual deployment at a few places. The presentation was pretty neat, made me think about some things here at work that I'd like to demo on it, but of course as a line engineer/sub-contractor I could exactly requisition that much hardware for demo giggles. I did get the impression from the guy at the sig meeting that they were pretty interested and willing to be flexible about getting hardware in people's hands to demo, fwiw. The grapevine here said that it was being rolled out for test in another group, haven't heard more about it (and given the tendency for bad news to travel faster and farther, I assume that means it was either a success or not a total debacle). I got the impression that its big weak point would be anything that was very heavy on disk I/O given the way the system worked (basically, client machines have "proxy" or "shim" jvms that forward everything over to the compute node, so disk I/O has to go roundtrip through the network to be serviced). As to it being worthy of the cost, they never tossed around numbers so I can't say. I imagine if people are committed to Java and have problems that are in its strong point(s) and big enough that no other platform could scale that far, it would be worth it. A lot of ifs, to be sure. :)

    5. Re:Computer Science is a draw where? by DCFC · · Score: 1

      I don't mind slow disk I/O, for the sort of work I pimp for, it is typically not a major issue for the trading end.
      It is possible for an entity to be using these without me knowing, but I'd bet money it's a first cut/pathfinding deployment, else my deep radar might well have picked it up.
      I forget the numbers, but I recall liking the heat dissipation, on the bleeding edge of finance we are already fretting over heat, thus the using of performance is joule instructions per second. This is a marvellously deep recurrent pattern. It turns out that best way of modelling derivatives is based upon thermodynamics starting off with the diffusion you get in a simple heated metal bar to convection/advection. Of course these derivatives include options on the energy being consumed to price them, whose dissipation is causing deep stress to some IT managers.

      --
      Dominic Connor,Quant Headhunter
    6. Re:Computer Science is a draw where? by StandardDeviant · · Score: 1

      True, re: thermo! I'd put thermo/stat thermo in the top three most brain-hurting classes I took, along with qm and inorganic (group theory + symmetry + qm wave equantions + orbital theory = some reasonably evil homework sets, heh), but for all the pain in retrospect it was deliriously fun to see the mathematical patterns and systems that came together to describe the various processes of chemistry (the most fun I had was with organic and organic synthesis specifically; that same joy of creation of building molecules I ended up following into software). I only wish I'd been better at mathematics to see that beauty clearer; seeing the same sort of work being done with the processes of finance is pretty fascinating stuff even if my maths are more than a little rusty by this point. Recently for fun I picked up a copy of Capinski and Zastawniak's _Mathematics for Finance: An Introduction to Financial Engineering_ (isbn 978-1852333300 per amazon) which assumes only that the reader has calculus and basic stat/probability and works from first principles in a fairly accessible tone up through stuff like black-scholes and have been working through it in my spare time. Pretty neat and digestible (so far) little book, might be handy for a dev coming from another industry who has some maths but doesn't know what (say) euro vs. am options are or what the mathematical implications of either approach would be, how value could be quantified or created from that knowledge, etc. (Of course, not being an expert in the field I have only my gut feeling and the reviews of others to guess that it's a good text... there could certainly be other, better ones. It reads like a work where the authors cared deeply for their craft, which is a good sign at least.)

  104. Gay coders by Anonymous Coward · · Score: 0

    Once in my programming class a student was expelled from the room and suspended from school (for 14 days) precisely for criticising the programming language being taught (java), by making it clear he thought it, in is own words "gay". The guy made valid remarks apart from that, saying it gave aspiring programmers a "too simplistic view of software" and "made people almost have to learn from scratch how to code when they where faced with a real programming language". This guy was fluent in C and Delphi so I can kinda understand his view but it's pretty curious how people react when you challenge their teaching strategies.

  105. Sequence by xbytor · · Score: 1

    If I had to define a program for somebody to learn how to write code, it would probably be:

    1) Pascal and/or Java. NO UI! Learn the basics of how programming works.
    2) C and assembler. Learn how code maps to the hardware. Be able to manual translate simple C programs into assembly.
    3) Scripting languages. JavaScript, perl, and bash (or the equivalent).
    4) Prolog, forth, and/or Lisp. Think Differently.
    5) C++, Advanced Java (with UI).

    After all of this, specialty languages like VB, SQL, C#, AppleScript, and Ada should be fairly easy to pick up.

    -X

  106. You get what you pay for... by bcharr2 · · Score: 2, Insightful

    The colleges would teach computer science if businesses were willing to pay for it. Unfortunately the industry wants to pay for the minimum, so that is what is being produced. Add in inept businesses managers, who see no difference between CS and CIS majors (except the CIS majors are willing to work for less money), and you have the industry today.

    It's why so many "project managers" think taking a little extra time to properly engineer a system is a waste of time, but have no problem rewriting entire systems every few years since they are unmaintainable.

  107. java is not the problem by Anonymous Coward · · Score: 0

    I agree with those who have mantioned that languages are not what should be being taught but the principles. Java in it's current form is certainly great for learning general language features and when i saw Haskell in my first year it helped bring a different perspective from the Java side of things not that i hadn't seen a number of languages before.

    On the other hand the chosen language to start with is of real importance, Java is a student friendly language in that it forces you to define types - this may be counter-intuitive in some programming uses but its a well defined language and the typing system 'teaches' you to get into the right habbits.

    Certainly on my course in the first year a lot of varied topics were covered such as testing techniques, cohesive code, file system handling methods and exceptions and client server models with objects (client objects calling on server objects). I would also point out that memory handling and pointers from my point of view are mostly handled within Java with its garbage collection features. I can understand teaching C in the second year, after getting the roots of good programming practise and theory of computer science down in the first year but not in the first.

    I would also point out that on my course - University of Kent, Canterbury, England, UK (i cannot speak for others) input and output and non graphical programming were taught before going near writing GUIs. Admittedly command line usage was not introduced until the second year directly to students via specific modules but you can ask questions thats what university is about in one way, and also reading about these topics is a major part of learning about computer science. If you don't read the section of the "Objects First With BlueJ" book on running java from the command line and writing stand alone programs then its your loss.

    If students are coming out without the knowledge they need then its not because universities chose to teach Java. Maybe student mentalities are changing because of wikipedia and the way life is now, i know one student who steers clear of the library at all costs... where does that lead us?
    An interesting discussion of where Java is going is on Michael Kolling's blog linked from www.bluej.org.

  108. Re:Start simple and use different types of languag by McSnarf · · Score: 1

    For hardwired data structures and batch processing in commercial environments, COBOL used to be quite useful. (But PL/I would do a better job.)
    COBOL could (and can) be made to perform. Talking about millions of records and file operations, not the cute little amount of data a GUI displays.

  109. Java in itself is not the problem. by bestinshow · · Score: 1

    Java in itself is not the problem.

    The problem is that without the grounding in the lower levels the programmers (I use the word loosely here) don't understand about simple concepts, or at least don't understand the ramifications of poor design choices.

    As a result you get systems that (for example) use Strings everywhere, for numeric values, dates, etc. They understood what a String was! They probably didn't get StringBuffers sadly, and why they are a solution to the limitation of Strings (in Java) for certain issues. They didn't get that you should use Strings for, well I know it's a toughy to grasp this, textual material. Then you ask them to add a method to sort by the date, and they say it can't be done easily. You check, it's a String! In the format "dd/MM/yy". FFS. They didn't even use "yyyy-MM-dd". Then you find utility classes elsewhere that do things to get values out of these datestrings.

    It's odd, but most people that programmed in their teenage years seem to be good programmers all round. Of course I'm coming at this at an age where my contemporaries learnt BASIC and then assembly. I did BASIC and then Z80 assembly for example (and Pascal at school, and a tiny amount of C) before I went to university. Of course to flatten the students out for better assessment the first course was a functional language, ML, and that's why a functional language is good as the first programming language course! Also when you start programming on a 4MHz Z80 with 64KB of RAM, you get to understand the limits very quickly. A good university course should teach you all you need to know about functional and O.O. programming so that you can learn any language easily. A bad university course will train you to do a single language without understanding the actual concepts of computer science.

    In my company there's this huge rules engine in use. It appears that said rules engine gave up on the idea of having a decent data structure in favour of passing a HashMap of Strings through it. Never mind the random key names. There's a GUI front end for the rule definitions. You get things like "if foo_bar_amount > 1000" and you know that behind the scenes it's converting amount into an integer before the comparison, with all the try-catch that entails ... what should be a single machine language instruction for CMP becomes tens of dozens or more. I wouldn't be surprised if the 1000 was being stored as a string within the beast's guts too.

    Yes, the Java Collections API is great, and should be used instead of reimplementing the wheel. But you need to understand when to use them.

    1. Re:Java in itself is not the problem. by MrJack5304 · · Score: 1

      Alot of the things you reference here are great points, and I agree that Java in and of itself is not the problem. Good programming practices are built over time. The more you program and the more real systems you are involved in, the more refined your skills become. School can only take you so far with programming. They can teach you all of the concepts in the world, but at the end of the day until you are involved in a job or some sort of meaningful team project, you don't really understand good programming practices.

      I will say though, if you go through college and at the end of your degree you have only worked with Java, there are some serious problems with the university's program. You really need to work with many different languages to truly understand programming concepts.

  110. How much extra pay for knowing the theory? by Shirotae · · Score: 2, Insightful

    There is no shortage of highly skilled computer scientists who know the theory and can program in any language, including ones they invent for themselves because the existing ones are not good enough. If there were a shortage then there would be head hunters out looking for people like that and offering big salaries and golden handshakes. The same is true for various other science and engineering disciplines.

    When businessmen or politicians talk about that sort of shortage what they really mean is that these days there is a shortage of naive people who will spend many years racking up debts pursuing an advanced education and then work for a pittance afterwards.

  111. o p t i m i z e r s by Anonymous Coward · · Score: 0

    Of *course* there's no need to re-check a pre-condition if you're still somewhere within the code where its impossible for it to have changed ... and good compiler optimizers know that and will code the check for you when its needed and omit it when it is semantically guaranteed not to have potentially changed.

    Or do you code in one of those languages that leaves it up to you to code the pre-condition check so that you can choose to omit it when, in your infinite wisdom, your design for use of the code says it *shouldn't* have changed and you want to trade safety for a little performance advantage by trusting your memory (along with that of every other coder on the project) of whether it really was changed?

  112. Specialization of Computer Sciences.... by Anonymous Coward · · Score: 0

    All the summary suggests is that we are creating, borrowing from the medical institutions around the country, general practitioners instead of neurosurgeons in our basic courses. Personally, I like knowing that I can increment the value in a pointer from "a" to "A" or add to the value of a[0] 4 and end up with a[4].

    But, many in the industry have realized: unrestrained direct manipulation can be as damaging as an untrained man walking down the street doing brain surgery. You might get lucky, but you might kill your patient -- in this case, a program which may or may not be running critical operations like an embedded control routine in a medical laser. Flip the switch maverick!

    I graduated with a BS in computer science before there was a JVM and function oriented C was taught as a prerequisite to C++ with classes being treated like a passing fad. However, I know of at least one school district that within the past 5 years was teaching C++, CISCO, A+, Network+, and a dazzling array of the classes I had to pay thousands of dollars to take at college. If I wanted to play a 3D game, short of creating it myself, I was left with things that make amateur flash games look like an MMORPG. Regardless of the state of US colleges, the science and the industry have made light-years worth of improvement.

  113. Ada 2005 by krischik · · Score: 2, Insightful

    If someone has actually stopped caring about the evolution of Computer Science then it's you - otherwise you would have known that the newest Ada is Ada 2005 and not Ada 83. Have a look for yourself:

    http://www.adaic.com/standards/05rm/html/RM-TTL.html

    There is nothing Java (as a language) has what Ada 2005 hasn't got as well - but a lot what Java hasn't got but Ada does.

    Martin

  114. A bit extreme but I see his point by erroneus · · Score: 1

    When I grew up into programming, I started with a BASIC command line on various machines... Apple ][, Commodore PET, TRS-80 CoCo and the like. But that was just entertainment. By the time I was ready to make things really happen on microprocessors, I got a book on assembler and started learning how to make powerful code in small places. By the time C became a topic of interest, I was already doubting how efficient C could be when compared to straight assembler. My suspicions were confirmed in my analysis of C compiled code, but it wasn't all "that bad." But then C++ and other object oriented languages arrived on my horizon and my doubts were cast upon them for efficiency reasons. Unfortunately, the people learning those languages didn't have the background and focus on writing small and efficient code... the world of bloat was upon us.

    But having written assembler, I have retained my appreciation for small and efficient code. Knowing exactly what the code does further allows an inherently more secure program to be written. "Stack/Buffer overflows?!" The first time I had heard of those, I was shocked... "you mean to tell me they didn't write code to prevent a stack or buffer from overflowing?!" No...apparently they didn't... and they still don't. What was always an inherent and instinctive practice under assembler for me is now something taught to "security-minded programming professionals" which were classes taught well after bad programming habits were created.

    This isn't about "JAVA" specifically, but about onbject oriented coding in general. The rules for writing good, stable and secure code, even in those languages, are fairly well known. It can be done. It can be taught. It isn't.

    Teachers need to blame the other teachers, though... not the language.

    1. Re:A bit extreme but I see his point by freedom_india · · Score: 1
      My suspicions were confirmed in my analysis of C compiled code, but it wasn't all "that bad."

      Probably you have never worked on the Sun C compiler during its early days. It was the *worst* compiler ever written for ANY language (including RPG) and crashed even with double pointers.

      --
      "Doing what i can, with what i have." ~ Burt Gummer
  115. Re:Author says Java is important in learning to co by curmudgeon99 · · Score: 1

    Well, the primary Java textbook (I taught from it) is by the Deitels. The Deitels always start by having the students build a GUI. Well, duh, the reason you students have a hard time doing anything that does not have a gui is because their textbook taught them that way! And if these teachers were such asses that they could not stray from the textbook--whose fault is that?

  116. i know this won't get read by lambent · · Score: 0

    I know this won't get read, due to not getting this off in the first 5 seconds after an article posted, but I just have to say this. Rant followed by red-mist comments.

    Fuck off already, you goddamed idiot taggers. This article is not flamebait. It is not a troll. It does not have a poor summary. And why the hell are you even bothering to make semi-obscure A.S.R references in the tags, anyway? Too cowardly to comment? Not enough time? Can't actually construct a sentence to fit around a one-word tag-quip?

    I'm sick and tired of anything someone doesn't agree with getting marked as a flame, or something that might be slightly controversial marked as a troll. Really, it just shows how stupid we all have become, if these words can't be used correctly.

    Ranting aside, the article has a good point. CS students are idiots. The article doesn't mention, however, that CS teachers are idiots, too. It was CS teachers who decided that students weren't smart enough to begin programming learning C/C++ in the first place. This is not a chick&egg dilemma, here. Sometime in the 1990s, many institutions got together and decided to switch to teaching CS via Java en masse.

    Personally, i think this is a great idea. Let them all 'learn' enough to pass a fuzzy curriculum, then fail in the real world. Then maybe all of em, idiot students and teachers alike, will get the hell out of the software engineering field, and and stop competing with real programmers for jobs.

    Remember, kids. Computer Science != Computer Programming.

  117. Re:Why is "Computer Science" Staffing S/W companie by syousef · · Score: 2, Insightful

    I think you're missing my point. If you want to learn theoretical computer science, where would *you* go to learn it?

    I'd research my courses very carefully and go somewhere where theoretical subjects were taught. That may mean a masters or even a PhD.

    When I did my B.Sc. in Computing Science, we had a mix of theoretical subjects (automata and discrete math were actually core, compilers was an elective I took, I took a couple of artificial intelligence subjects as well)

    Because they don't teach it at universities in general (with some notable exceptions).

    Ahhh so there are "some notable exceptions". Could it be that you should seek one of these out if that's what you want to do?

    They churn out professional programmers, who would actually be *much* better off (in terms of being good programmers) to just spend those 4 years writing code.

    Complete garbage. Programmers who don't understand how the machine works under the hood, don't understand that you can express problems that can't be solved, or can't be solved practically etc. are rubbish. They don't understand the very tools they use. I've worked with people who understand the classics like the travelling salesman problem, or the halting problem. I've also worked with people who don't. Let me tell you I'd much prefer to work with those that aren't going to propose something impossible and set a deadline for my team to meet in creating it. (I once had a manager propose we write a full blown compiler in a month, and it was clear she had zero understanding. My current boss on the other hand - and I work elsewhere thankfully - use to write software and she's brilliant). It doesn't matter if you never become a computer scientist proper. These things are VERY important.

    And the point of my rant remains. The purpose of the university is basic research.

    The point of a university is higher learning. One avenue is basic research.

    What we risk by not investing in basic research is a stagnation in computer theory. Marvin Minsky proved that perceptrons can't compute everything. Then in a off hand comment said that he didn't know if multi-level neural nets had the same problem. It took something like 10 years before anyone even checked.

    If it were an easy problem Minksy would have set one of his grad students to work on it.

    Look the rest of this refutation is pointless. If you want to move into a career of research now, you clearly have the intelligence and articulation required. Your education has put you in better stead than you give it credit for. What I don't know is whether you have the drive and circumstances to persue another degree or a change of career. If you want it desperately enough, you're willing to make the sacrifices and you're lucky enough to do it, I wish you the best of luck.

    I'm not saying this flippantly either. I dropped out of a science degree because I found it didnt suit me. I worked then went back and didmy comp sci and found my career in IT. Science was a dream of mine right through highschool. When I found I couldn't persue it I didn't give up on it. I went and did a Masters of Astronomy part time and on the Internet. I certainly didn't have my hand held to learn what I did, and though I never intended it as a change of career (ie. I l did the degree "for fun") and though it cost me big time health wise and socially (not to mention financially) I don't regret doing it. It is part of who I am, and I loved the challenge and cherish the knowledge I gained. I finally know how we know what we know about the universe. I've computed the distances to stars and understood their life cycles. I understand what the universe looks like on the grand scale. In short I have a better understanding than the average person of the universe I live in. While I'd love to go and do research I know I won't sacrifice what I have to for that. It's still okay. My degrees have been anything but a waste of time.

    --
    These posts express my own personal views, not those of my employer
  118. wrong by TobascoKid · · Score: 1

    You just need to use Java 6

    java.io.Console

    --
    At some point, somewhere, the entire internet will be found to be illegal.
  119. Correction by Megane · · Score: 1

    The article should read "Java considered harmful to students"

    I can remember being in a couple of interviews for potential new-hires where the guy who was obviously taught with Java completely fell apart with the whiteboard coding test. (candidate writes two selected programs, one on files and the other on linked lists, on whiteboard while many of us talk among ourselves, thus simulating a "normal work environment")

    --
    #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
  120. I never understood uni CS programs by jollyreaper · · Score: 2, Interesting

    I never went through one but a good friend of mine did. I was astounded when he described what the curriculum was like. At no point did they ever take on a large programming project such as they would encounter in the real world, shepherding it from start to finish. They were given a lot of abstract theoretical knowledge, the kind that posters on Slashdot describe as the foundations to learn whatever specific language you need to know and use it intelligently. But based on what he described, that just wasn't the case.

    Now I could understand this approach if the world still operated the way it did when my dad learned the ropes, the way he kept insisting it operated even though things have changed in the decades since. In the old days, you went through college for whatever program you were on and when you got out, all the shiny diploma meant is "the boy can be trained." You got hired on at the firm you'd work at for the next 40 years and they would then teach you the business from the ground up.

    That's the way it used to be. These days, nobody wants to mentor. Everyone expects you to have experience coming directly out of school, nobody wants to hire entry-level. And the way the jobs go, you may be technically a full-time employee but your work history will end up looking like a contractor. Work here for a few years, laid off, work another place for a few more years, laid off, maybe another place only lasts six months and you're laid off or fired because your boss doesn't like your tie, wash rinse repeat.

    I'm a huge fan of education but I've been very disappointed with the educational institutions I've done time at. Public education was a joke, a waste of time. Because I lacked the big bucks and the desire to take on a crushing student loan, I went to JC after high school. It was a laughable experience. I did my undergrad at a local uni and again, it was just a bunch of hoop-jumping and wasted effort. True, there's the point that you get out of something what you put into it, I've seen people turn a bad situation into a positive experience and I've seen others make the same situation worse. But overall, I just think the education system is highly wasteful and inefficient. It'd be expensive to change. There's a reason why tailored suits cost more than the ones off the rack and a tailored education to best suit the student would cost a hell of a lot more than our current one-size-fits-all model.

    --
    Kwisatz Haderach
    Sell the spice to CHOAM
    This Mahdi took Shaddam's Throne
    1. Re:I never understood uni CS programs by elpapacito · · Score: 1

      Let's just say that nobody wants to PAY for good mentoring, nor doing it themselves because it is quite hard and expensive.

      Indeed you are correct when you say that university prepared people primarily to be trained again and that part of their curriculum wasn't targeted well enough to best fit present demand ; yet sometimes private universities can be worse then some public ones, because they charge greatly for something you could probably obtain for much less money from a public one, but with the payment comes the illusion you will be hired by some company because your private university is "prestigeous" or there is some "alpha phi something" group that constantly hires Alpha Phis. That's bullshit, but it helps selling expensive university.

      One point that you didn't notice is that a well prepared student is , indeed, quite trainable to do more and better. More importantly, none of the training cost was sustained by the hiring company, which if that wasn't enough has the bold face of complaining about not receiving perfectly rounded, cost and risk free workers, while paying little to no taxes. University provided a very good and unexpensive cotton, for private enterprises to tailor to their own needs.

      But that's what hit'n'run capitalism is about : getting the most out of a country and then move away, for instance to exploit China, while spending a dime to train thousands that will be, in the near future, exploited even more. It's parasitic capitalism and it has to go, as it discourages the consolidation of a nation because it doesn't invest into the nation, but runs where there's profit to be made, at any cost so as long as it's not paid by "us".

    2. Re:I never understood uni CS programs by ceoyoyo · · Score: 1

      You want a SOFTWARE ENGINEERING program. That's where they teach you to do things in the "real world."

      A COMPUTER SCIENCE program is supposed to teach you how to study and discover the things that the software engineers of the next generation are going to be doing in the real world twenty years from now. That's what all that "theoretical knowledge" is for.

  121. Vanilla Lattee and Pepsi just brainwash you by Anonymous Coward · · Score: 0

    I attended two Major North Carolina Universities: ECU and UNCW

    During my education I have always considered my time at ECU the most valuable in that
    I was forced to learn assembler and electronics. Upon attending UNCW I saw many students suffer
    from a failure to know anything about the underlying components that a computer operates on.

    Simply put, I know how the transisters and Nand gates fold together to create the illusion of magic.

    Generally speaking, if you want a solid education then you need to know some basics.

    Calculas, Discrete Math, etc.
    Physics, Electronics and especially the Computer Science equivalent Switching Theory.

    Learn how the car works then learn how to drive it.

    I've heard this bullshit for years that you don't need to know how the car works in order to drive it.
    But I say you must know how the car works in order to perfect it.

    See universities are putting out half assed developers so much that none of them can get a job and the ones that do
    just destroys the credability of the students that deserve a job.

    Java! Complete utter bullshit. It's the worst language to force somebody to learn on. C++ will teach you more and how to appreciate
    it's intricacies. The only people that like java are the ones that are over caffinated into submission! Keep on dranking your pepsi's and cokes
    all you are doing is drugging yourselves into accepting whatever these assholes come up with next in order to get another paycheck.

    I agree with the article in that, C, Lisp, C++ are great languages. Start with assembler and learn how the compilers are created.
    I don't however agree that ADA is a good language. Actually Asm, C, and Lisp are all you need.

    I have even taken a compiler class. I own the DRAGON BOOK. I've written my own parser etc.
    Some of these languages are just beyond concepts I can describe. C# has to be the worst lanugage ever. Delegates, Properites.

    How freaking lame, and they are just copying Java. Much in the same respect that DirectX started copying OpenGL after 8.0. My oh my how
    some of the 3D state techniques started looking the same.

    I grow weary of this tech savy world, I long for the time when the Kudzuu vines will hang from the Sears tower. How we'll dehydrate meat on the Interstates.
    And the elk will run rampant through the city streets.

    Tyler, free us from this self centered, nesting, materialistic world. :)

    Fight Club is our Bible, our church.

    1. Re:Vanilla Lattee and Pepsi just brainwash you by Anonymous Coward · · Score: 0

      Actually, C# is copying Visual Basic too - and it is not a language, just an API.

    2. Re:Vanilla Lattee and Pepsi just brainwash you by FishWithAHammer · · Score: 0, Offtopic

      Some of these languages are just beyond concepts I can describe. C# has to be the worst lanugage ever. Delegates, Properites.

      C# is an excellent language for what it's intended to do: relatively rapid application development and deployment. Anyone who claims that that's not a huge market is deluding themselves or is likely to rant about how "we don't need" that.

      How freaking lame, and they are just copying Java. Much in the same respect that DirectX started copying OpenGL after 8.0. My oh my how
      some of the 3D state techniques started looking the same.


      Actually, C# is Visual Basic with a more C-like syntax. It's also a little more picky about certain behaviors. C# is a vast improvement on Java (no stupid demarcation between stack and heap types, no idiotic arbitrary rules such as "one public class per file", which should make you-the-C++-weenie quite happy, etc.); it's Java with most of the problems fixed.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    3. Re:Vanilla Lattee and Pepsi just brainwash you by mhall119 · · Score: 1

      C# is a language, .Net is a collection of APIs.

      --
      http://www.mhall119.com
  122. Students should be introduced to VB or Java first by mojo0716 · · Score: 0

    It makes learning C++ easier. The students that cannot understand VB or Java will be weeded out and perhaps change majors. They will not understand C++ if they cannot understand VB or Java. The first programming language I learned was BASIC Basic and that made it easy to move on to Pascal. Then I was out of programming for awhile and when I went back to school, I started with C++ and could understand it because of previous programming experience. I saw a lot of fellow students asking me for help and/or dropping out or failing. I think they would have done better if they had started with VB or Java; preferably VB. The title of this thread is misleading as it makes you think that professors think the language of Java is bad. I think all colleges/universities/etc. should recommend starting with VB and then Java, then C++, then x86 Assembly. All those languages should be taught and that order would be recommended by me. They all have their uses and they are all necessary to develop a good computer scientist. Yes assembly too. Assembly is not as difficult as many think. It's just a little tedious and it teaches students more about how computers work at a low level and translates into better programming practices and more skills. Math is for another debate, but it important too for advanced programming applications and to think logically and analytically.

    --
    http://www.fuckedupcountry.com
  123. Followup about Ada by Antique+Geekmeister · · Score: 2, Funny

    Given the authors, perhaps they could share their insight on how studying Ada is damaging to your employment prospects and your career?

  124. Self respect is the problem. by C10H14N2 · · Score: 1

    Most real computer scientists don't want to perform the work in the domains the unwashed productive masses operate using languages like Java and VB. Why is it so hard to understand that those people do not consider themselves to be computer scientists, nor do their jobs require them to be?

    The problem is computer scientists having so much self respect that they're insulted by the jobs they do get, leading to a lack of respect for anyone else performing the same work without precisely the same background, but not enough self respect to go out and get the "real" jobs they think they deserve. It isn't that non-computer scientists are sullying the field, it's that there are legions of unambitious, barely qualified "real" computer scientists trying to make the low-hanging fruit jobs writing silly WYSIWYG GUIs and web applications equate to writing bare metal encryption algorithms for NSA...and then they wonder why there are so many jokes about the alienated, arrogant IT staff that are just this side of batshiat crazy.

  125. What is Computer Science today? by unteer · · Score: 1

    I am a 4th year CS major at a small liberal arts college in New England, and am a Teaching Assistant for the intro to computer science course, as well as the Data Structures course. This year, the faculty made a key decision to switch from teaching Java in the intro course, to teaching python. Those who believe C should be taught probably consider this even more blasphemous that teaching Java, because at least with java you have to compile, etc.

    I disagree however. Computer science is not simply being able to program in different languages, it's being able to understand logic and how computers operate. These concepts need to comprise a foundation long before a student ever needs to worry about pointers and whatnot. The fact of the matter is, a computer is whatever we make of it, and if we can build a system that does not need pointers, that system is no less a computer than a PDP-11 or Eclipse or DeepBlue.

    First year students in particular should not have to fight the language to achieve end results. Python provides this functionality, enabling the professors and TA's to introduce even recursion in the first semester course, which would have been unheard of with our previous Java course.

    But, like all good liberal arts students, learning is not about the specifics it's about the process and the patterns that we uncover and can be applied to other languages in the field. Once concepts of programming are understood, learning different languages becomes mostly a chore of learning different syntax notation. How quickly did you learn your second language compared to your first? Your first program in your second (or third) language was probably not "Hello World," (unless you are like me and you just wrote it for kicks), but instead was probably a program designed to accomplish a task for which that language was geared. "No, I am not going to write this log parser in C, that would be silly. Hmmmm, I hear Perl is good for that stuff..."

    However, the result of computers becoming more powerful, enabling higher levels of abstraction from the hardware, does present different issues in the industry. Computers are becoming utilities, and abstraction allows schools to produce utility programmers, in comfortable utility languages like Java or even python. The industry is creating more and more single points of failure in terms of capability and know-how. Students might become less and less interested in writing interpreters and virtual machines because they no longer appreciate what those programs accomplish (in allowing for abstraction in the first place). Thus the knowledge to do so, to talk intimately with the hardware with languages such as C, will disappear, much like how assembly programmers make up smaller and smaller portions of the market.

    But what is the true impact of such a progression. Is there an expanding role for people who can write in C, or are there a finite number of jobs, that as long as they get filled by at lease one competent programmer the industry is safe? Will there always be that university student who is striving to control more and more of his machine, or will all university student's curiosity stop once they can program a bouncing ball in Java? Is my college wrong in attempting to teach "how to think," before we teach "this is where you place the curly bracket,?" These are the questions of our times, and like most things CS, will probably boil down to yet-another-reiligious-war (YARW). But as long as both sides have supporters, I have hope for the industry. It takes all sorts of people to make the world go round.

  126. Autodidactism the way to go? by rdnetto · · Score: 1

    The first language I learnt was HTML, if you can consider it one. I progressed to JavaScript after that, then moved on to *managed* C++. A year later I moved to C#, and I've been using it since. Looking at this, you'd think it was a really crappy intro to programming. HTML is a mess (compared to XHTML), JavaScript isn't even strongly typed, and then I just jumped in the deep end. Yet I'm one of the best students in my class (yes I'm a student - studying software development). It could just be that I'm naturally gifted, but perhaps there is somthing to be said for the self-taught after all... Maybe its better to learn from experience and research, rather then let some professor who studied assembly in uni pass down his possibly outdated thinking.

    --
    Most human behaviour can be explained in terms of identity.
  127. I just wish schools required more languages by mdarksbane · · Score: 1

    Keep in mind - I'm coming from a school who doesn't even teach Java, they teach their own made-up C++ variant that no one aside from their research group uses or generally has even heard of (Resolve, bleh).

    It is my opinion that there are few things that will benefit a growing programmer more than being forced to use and think in different programming languages and to learn to program in the appropriate paradigm for that language.

    I love C as a language as part of understanding the core of the relationship between your code and the machine. A combination of C and assembly should be a requirement for all CS or EE degrees because it makes you think about every single minor thing you try to make the system do. I honestly think that this instruction should be combined with some sort of compiler course - so you can see what your C code is generating and why. It's also a good time to look at performance analysis. However, you should tell, even recommend to your students, that if they're doing something other than kernel or driver work they probably don't want to be touching this stuff again.

    I love something like Smalltalk or Java or Object-C or something, anything but C++ for teaching real object-oriented programming. The thing is, you need to force students to learn how to both implement even the lowest level classes, but get them to really comprehend the idea of programming by contract and encapsulation so that you really have no idea what *class* you're even working with, let alone how it is implemented. There is so much more to OO programming than the "grab a class that does what I want and hack it to work" mentality that often seems to be taught in introductory classes, and in my opinion C++ does as much as it can to muddle up that thinking. Most C++ instruction I've seen quickly resembles "C with some conveniences" than it really does OO programming.

    I think that everyone needs to be taught or know some scripting language. And please, can it actually be taught instead of self-learned (the VBscript code samples I have found online are often horrifyingly bad). There are a million problems that have nothing to do with the "art" or "science" of CS that still need to be solved every day, and often the best and easiest solution to those problems involve a scripting language.

    And of course, you have to throw in Lisp or Scheme, just because the mental model required is so very different from any other programming language. Make people think, and it should help them understand recursion in whatever else they're programming in.

    I guess I've always felt that it was a real shame how easily new programmers fall into traps of language wars, and preferring whatever they're familiar with. I hated Resolve, but the best thing it did was force me to learn at least two languages in college, because I knew that I would never be able to get a job with that one :)

    I see no need for the struggle that seems to go on in CS academia about Science versus programming versus software engineering. A good school should be aiming to produce people who understand the theory behind what they are doing, are masters of enough programming languages that they can think of how to solve any problem in at least one of them (and can pick the right one for it) as well as being able to pick up a new language in a week, understand the most important practices of software engineering, and are engineers enough to really understand what the hardware is doing.

    Looking back at my classes, I see places where they could have fit all and any of that into the curriculum without even leaving out what they did cover. I think the better students tend to figure most of this out themselves - but any self-teaching like that has gaps and holes that can come back to bite you in the ass, and in any case contribute to the lower level of professionalism in our field.

    College is supposed to prepare you to be an expert in your field. Focusing too much on any one aspect of programming (pure theory, a single

  128. man strncpy by Dr.+Evil · · Score: 1

    K&R were trying not to smoke 8-bit CPUs and exhausting kilobytes of RAM with your inefficient programming. Strings can come from a lot of places other than user input, and most programs out there were tools for the end-users to do their jobs, not websites or even telecom apps.

    Sure, you could do a buffer overflow on your handy-dandy EBCDIC converter, or crash your line editor by inserting null characters. But why would you want to? You could also stuff pencils into the power supply and fold floppies. What's your point?

    If you want protection for modern programming, try C++.

  129. Pointers in introductory programming class??? by bwcbwc · · Score: 1

    If I recall correctly, introductory programming classes are geared toward the mass of the student body and not really relevant to systems programming. And NONE of the languages traditionally taught in introductory programming (FORTRAN, BASIC, Pascal, Java) use pointers the way they are used in C, C++ and Assembler. So the argument at that level is really moot.

    The real question is: what is the first programming language that a computer science or engineering major should learn AFTER intro programming? While C could be considered "obsolete", I would still prefer it to C++ in this case, because C++ would give Java programmers a false sense of familiarity due to its object orientation. But even C introduces several permutations and uses of pointers that can be confusing. Pointers to arrays of function pointers, anyone?

    Frankly, I'd prefer to see the CS and CSwEng majors get into a course on boolean logic and logical microprocessor architecture, with a simple assembly language like 6502 8-bit assembler used as the programming tool. It's easier to learn about pointers as indirect memory references when you only have to worry about the memory management involved in adding two arbitrary integers, and not have to worry about refactoring your objects and other complexities introduced by the higher level languages. Learning some simple assembler and architectural concepts would also help the comprehension of what is going on in C and C++ behind the scenes. For example, the short-hand notations for incrementing and decrementing numbers in C/C++ make more sense after seeing the corresponding assembler operations.

    --
    We are the 198 proof..
    1. Re:Pointers in introductory programming class??? by jeremyp · · Score: 1

      Don't CS courses teach compiler design anymore? That was the most important course I did at University because by necessity it covered pointers and pointer arithmetic, array bounds checking, stack frames, scoping and so on because the higher the level of the language, the more of that stuff has to be done by the compiler.

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    2. Re:Pointers in introductory programming class??? by bwcbwc · · Score: 1

      That's another good point, although once you get to compiler design, you better know already how to manage pointers and references. But for the pure software folks, developing a simple compiler might be preferable to a microprocessor oriented course.

      --
      We are the 198 proof..
  130. Sadly, others have noted similar concerns by intnsred · · Score: 1

    Sadly, others have noted similar concerns in the way we teach programmers.

    One classic piece is this series of articles on Salon about "The dumbing-down of programming".

  131. References and pointers by Sits · · Score: 1

    This is pedantic but I don't consider references to be pointers because they can be garbage collected. Someone summed it up to me like this: The difference between pointers and references is that you can do arithmetic on pointers.

    It's a real shame what the burger flippers are doing that to you folks though...

  132. Re:Start simple and use different types of languag by DougWebb · · Score: 1

    Perl can be used as a functional language. It can also be used as an object-oriented language, especially if you use a modern OO library instead of the low-level core support for object-oriented development. Perl is also a great structured programing language too, of course.

    Other than Systems Programming and Operating Systems, you could use Perl and CPAN to address all of the computer science subjects you mention, and you could use the Inline module and the other modules in its namespace to teach other languages, within the context of a Perl development framework.

    I'm not suggesting that universities should switch from all-Java to all-Perl (though doing so would probably improve productivity for most programmers, so long as they're taught to use Best Practices and not create the write-only code that bad/non programmers often create with Perl.) Instead, I'm thinking that an introductory course could teach Perl syntax and best practices, and use that as a basis to provide introductory training in all of the different development styles and subjects you've touched upon. By using one language that is flexible enough to cover this wide variety of material, the topics could be covered without confusing beginning students with a variety of languages.

  133. From an old guy... by johnlcallaway · · Score: 1

    Making a 6 figure income without pointers is possible. I haven't used pointers since the days of NEAT/3 in the early 80s, and good riddance. For the majority of work out there, they aren't needed and for those that need them, the smart ones will pick them up quickly. I know I did.

    Learning how to code without a GUI is the fault of the teacher. I write most of my Java without a GUI, some of it running 24x7x52 and surviving through database resets. Others were very sophisticated monitoring scripts, web page scrapers, data manipulation programs (both database and flat file), and even reports. I write them because developers coming out of school have not been taught skills surrounding the operationalization of programs, such as adequate error checking and messages and code that is able to recognize external failures (such as database shutdowns) an react with anything but an abort.

    It's not the language, it's the course material that is at fault. And the teacher who hasn't had any experience in the business world and understands that learning syntax, classes, and algorithms is only step one through three of a many step program.

    --
    I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
  134. There is a fundamental problem with that idea! by gbutler69 · · Score: 1

    I like Java. I develop extensive systems in it. I also have developed extensive systems in C, C++, Perl, Python, Progres 4GL, Clipper, VB, Delphi, Basic (Tandy Co-Co no less), Assembler (Co-Co,C64,AppleIIe), Lisp/REP/Scheme/Guile (My personal favorites), Javascript (really just Lisp with syntactic sugar), etc, etc, etc.

    All of them are "nice" and productive languages. But, let's make one thing clear, a language like Java was not invented to solve a technical problem. It was invented to solve a commercial problem. That problem, "How does Sun sell their hardware and O/S when all the developers are developing for Microsoft/Win32?"

    So, trying to introduce new developers to Java under the false assumption that Java is needed to solve some class of problems that predecessor languages were inadequate to solve it complete and utter "BuuuuuuulShiiiiiit"!

    I'd rather try to keep things honest.

    --
    Over-the-top Response Guy! Giving "Over-the-Top Responses" since 1970.
  135. It could be worse by AXNJAXN · · Score: 1

    "Damaging"? How about "more damaging than learning to use GOTO"?

  136. Seems Like by Derosian · · Score: 1

    Seems more like they are not complaining about people learning Java as they are about people learning Java first. I suppose I can understand this as Java is what I learned first. It is what I took about 3 years learning in Advanced Placement Computer Science in my High School. I have to tell you, I have an excellent knowledge of loops, recursions, iterations, and many other basic computer science methods and terms. But seriously, what is a Pointer? If there is one thing I know this article is right about, it's that I can learn plenty of Java and never be properly taught everything there is to know, but isn't that the point of learning something, knowing that there will always be more you don't know. Sort of, just because you have a lot of knowledge with Basic, C, C++, Java, and Pascel, that doesn't mean you know Python and Python is on the rise. So a Programmer has to start somewhere and just keep learning till he knows it all..

  137. A good practitioner knows his tools by Anonymous+Brave+Guy · · Score: 1

    I've grumbled many times about this concentration on Java, and the resultant lack of detailed understanding about programing, but each time I did so at my university I was disregarded, and someone always trotted out that age old nonsense "not re-inventing the wheel". I mean, sure, I see the point, but surely you should have a basic idea of how wheels are made?

    Amen.

    When I was younger, my father wouldn't let me have an electronic calculator until I proved to him that I could do long division and I knew my times tables. He wouldn't let me have a scientific calculator until I could explain square roots, the basic trig functions, and the idea of logarithms.

    Would I do these things by hand today, in a non-trivial context? Of course not, I have tools for that. But there was never any danger of using a tool I didn't really understand, or picking the wrong tool for the job as a result, and I am forever grateful to my father for making me invent the wheel the first time.

    A bit older and hopefully a bit wiser myself, I see a lot of the same things in programming today. Junior developers come straight out of education and don't care about understanding pointers. They reckon they don't need to understand sorting algorithms, because they'll just use a sort function from a library. They don't need to understand data structures either, because again they have a whole toolbox full of them. In fact, they don't really want to understand what's going on under the hood of their program at all, because apparently (so they tell me) one day we'll have a sufficiently smart compiler and it will optimise away any unnecessary overheads they introduce. Presumably some uber-l337 hax0r is going to write that for them. ;-)

    <sigh> And we wonder how a modern PC literally thousands of times faster than those of a decade ago can possibly take the same length of real time to do simple, everyday things, and how in an Internet-connected world where spyware and malware cost society billions every year we still have basic security flaws that let the script kiddies in the door. Won't it be ironic if the educational gaps left in a whole generation by modern universities catering to a cookie-cutter programming industry wind up being addressed by the veteran programmers in industry who needed to get stuff done properly? :-)

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:A good practitioner knows his tools by Like2Byte · · Score: 1

      When I was younger, my father wouldn't let me have an electronic calculator until I proved to him that I could do long division and I knew my times tables. He wouldn't let me have a scientific calculator until I could explain square roots, the basic trig functions, and the idea of logarithms.


      Heh. I know what you mean. Circa 1985 I was writing a program to complete my trig homework. My father walked in and started chiding me on how I'd learn nothing by having my computer do my homework. I turned around and told him, "Well, the only way to program the computer to do the work is by already knowing the underlying mathematics of the problems I'm trying to solve. So really, I'm learning two things - 1) how to accurately complete my trig homework. 2) How to program computers."

      That is still the only time I ever counter-argued a point with him and he just walked away without saying a word.
    2. Re:A good practitioner knows his tools by smellotron · · Score: 1

      He wouldn't let me have a scientific calculator until I could explain square roots, the basic trig functions, and the idea of logarithms.

      I'm waiting to hear from someone whose dad enforced understanding Taylor Series of basic mathematical functions or the common sqrt(x) numerical method before furnishing a calculator. Definitely under the category of "parenting badassery".

  138. They're not blaming Java but OOP by Anonymous Coward · · Score: 0

    ...but don't seem to realize this.
    What we observed at New York University is that the Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do

    There are two ways in which I can perceive this.. Either they find it hard to write software which doesn't have a GUI (which strikes me as odd because setting up a GUI in Java can be relatively difficult, esp. for a beginner). OR he means that it was hard on the students to write interactive software which should work on the commandline. Then he would have a valid point there because although it is very possible to write such programs it can be tricky. A lot has improved in SE6 but still...

    HOWEVER... In another part of the article they describe their main gripes with the Java language, namely: Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want. How it does it is not interesting! The result is a student who knows how to put a simple program together, but does not know how to program.

    And there are some things which I find wrong with this comment. The first is that the main gripe here doesn't seem to lie with Java but OOP itself. The whole idea and filosophy behind OOP is to have several individual objects which, when brought together, can perform a bigger task. You don't need to know the inner workings, only the results (basicly input/output) matter. This sure looks to me as if this cluebie is now blaiming the language for being OO!

    While I do agree that I also wonder if OO based programming is the best way to start I also can't help wondering why the heck students only start working on a single language? That makes no sense to me what so ever. When I was still studying we were taught both Pascal and Assembler. One was the more "abstract" language which made things easier, and the other was a lot harder but also gained you a lot more control. The whole advantage you gain here is that when learning what the first language does you'll immediatly implement those ideas with the other language. Especially if you realize that in the end Pascal basicly generates assembly code.

    So why can't they manage to do the same for a combination of Java and C ? IMO this would teach students the easy and direct ways of OO while also making them aware that while OO is a very nice programming model it cannot solve all the problems out there.

    The other thing which I consider wrong, but this is a little nitpicking, is that while he claims Java is simply "collecting pieces and making it work" but still says students are having problems to write an interactive program for the commandline. What strikes me as funny is that doing so is really a classic example or reading the API docs and picking what you need (as well as some knowledge about stdin).

    This whole article tells me more about the quality of that particular school than Java.

  139. Most Curious by flajann · · Score: 1
    While I agree to a good extent with many of the points pointed out in the article, the source of the article -- The Journal of Defense Software Engineering -- leads me to wonder. What these guys are interested in is creating newer and smarter killing technology for war. I have almost never heard of ADA being used outside of the military/government context. The writer seems to have an extremly strong bias towards strongly-typed languages, which I consider bad. Having done lots of C and C++ in my career, as well as lots of Python, PHP, Ruby, Perl, etc., I can say both strongly and weakly-typed languages have their places. If you are writing air-traffic control systems or other mission-critical systems that may result in the loss of human life if a bug is present, I would lean towards more strongly-typed languages (and NOT towards C++ or C!) If you are in the ever-changing web market where time to market is critical, weakly-typed languages like PHP, Python, Perl, and Ruby sings the day in allowing you to do rapid prototyping and deployment.

    Java has its own special niche, kind of a middle-road for when you need reliable systems more or less quickly, but perhaps not by tomorrow, such as in financial institutions and what not.

    C and C++ are meant for systems development, and excel at that, leveraging the power of writing in assembly without the hassles of assembly. You can make great and wondrous use of pointers if you know what you are doing. You can write fast real-time code that runs in a small footprint. You can also hang yourself easily if you have no clue. :-)

    I have been around for a while, and still choose to do many things with the command-line and with emacs on Linux. I do work with those who would probably croak if I took away their Eclispe IDE. Though, for database architecture, I have chosen to use an IDE for that, simply because it makes it easy to make changes in the schema, and it creates all these pretty ER diagrams that I can share with others.

    As far as exporting software development, good luck. From what I understand it's a crapshoot. In many cases you get crummy code, but you may not care about that if it works and you got it on the cheap. Of course, if you had to maintain it....!!!!

    So, I think the author of that article is a bit overblown though he does make a number of salient points. And of course, I question his motives of brain-draining even more rare talent for the productions of weapons and other systems of mass destruction.

  140. I GOT IT! by Anonymous Coward · · Score: 0

    when a new buzzword comes along


    Java is bricking students' brains!!!
  141. It's-a-me! Mario! by halber_mensch · · Score: 1

    The irresistible beauty of programming consists in the reduction of complex formal processes to a very small set of primitive operations. Java, instead of exposing this beauty, encourages the programmer to approach problem-solving like a plumber in a hardware store: by rummaging through a multitude of drawers (i.e. packages) we will end up finding some gadget (i.e. class) that does roughly what we want. How it does it is not interesting! The result is a student who knows how to put a simple program together, but does not know how to program.

    This is a fantastically insightful comment, and IMHO it is very true. I came from the generation of developers that was caught somewhat in the middle - C++ was the platform for study in high school, and when I got to University Java had just become the de facto platform. As I approached graduation, I was exposed more and more to younger students that had not seen anything other than Java, and they were completely lost without a textbook to copy and paste from. It was depressing. Now I'm running into them in industry, and they don't have the skills to adapt to the real world of software development.

    --
    perl -e "eval pack(q{H*},join q{},qw{70 72696e74207061636b28717b482a7d2c717b343 637323635363534323533343430617d293b})"
  142. Oversimplification is sooooo easy ... by joel.neely · · Score: 2, Insightful
    ... and so self-defeating.

    There are many dynamics in (American) programming; some are real problems, and some are changes that the "old guard" finds uncomfortable. Nobody here (including me) wants to read a 30-minute rant, so let me just mention a few high spots.

    1. There are forces in almost every industry that seek to dumb down the role of the worker so that jobs can be commoditized or outsourced.
    2. Any institution that caters to the forces of #1 is acting like a trade school offering training, rather than a university offering education.
    3. There are many fine companies and schools that do not cave in to the forces of #1.
    4. No curriculum that teaches just one language will produce well-rounded programmers, regardless of what that language is. Any well-rounded programmer knows multiple languages, and is capable of learning more.
    5. The decline in mathematical competence of American college students has been widely discussed. Nobody with his head on straight believes that Java (or any other programming language) caused it. (The same can be said of grammatical competence.)
    6. Overemphasis on GUI toys is a fault of the curriculum and/or the teacher, not of the language. On the planet where I live, Java is more likely to be found on the server than in the browser.
    7. It is possible to have a long, productive career as a programmer without ever writing an operating system, or picking up a soldering iron.
    8. It is possible to learn a great deal about the foundations of programming by writing an operating system, or picking up a soldering iron.
    9. Conclusion from #7 and #8: there's more than one way to do IT.
    10. Anybody who thinks that application servers, messaging middleware, and compilers are not "systems programming" is still living in the 1960's. Nobody who knows the current industrial software world can be ignorant of the fact that Java is one of the languages in which these are being written. It is also not the only one (see #4 and #9).


    There are also the traditional inter-generational conflicts:
    • Every generation laments the fact that the following generations don't have to do/learn things "the hard way, like we did". Cars no longer require hand-cranking, manual choke, manual spark advance, or manual transmissions. Today's automotive technology makes it possible to be a good driver without knowing how to use any one of those bits of historical infrastructure. (It also means that we are more dependent on professional mechanics when our cars break down! ;-) Modern type-safe languages allow very sophisticated programs to be written without ever directly manipulating a memory address masquerading as a "pointer".
    • Every generation runs the risk of losing important lessons learned the hard way by preceding generations. Merely playing video games doesn't prepare one for a career in a high-tech world (as if anybody thought it would! ;-). How many Viet Nam wars or Great Depressions do we need before we learn to do better? ("How many roads must a man walk down before you can call him a man?") OO is about 45 years old (going back to Simula in the early 1960s). Functional programming is about 30 years old (going back to the mid 1970s). Our industry hasn't yet fully learned how to do either one correctly.


    Progress is made by human beings, not by tools.

    Or, as Shakespeare might have put it: "The fault, dear Brutus, is not in our programming languages, but in ourselves..." Julius Caesar (I, ii, 140-141), 2008 edition
  143. Relax, Bangalore has it all figured out. by GoneSouth · · Score: 1

    There are US students still enrolled in programming courses?

    1. Re:Relax, Bangalore has it all figured out. by __aaclcg7560 · · Score: 1

      Just barely... The last stats that I saw said enrollment has declined by 50% since the dot com bust in 2001. During my last semester last year, I took two required classes as independent study classes since there wasn't enough students to offer the classes.

  144. The return of Cheeseburger Syndrome by Anonymous+Meoward · · Score: 1

    As a lowly grad student, my CS department decided that it would move its undergrad intro courses from Pascal to C. I thought this was a huge mistake, as C is not a beginner's language, unlike Pascal.

    In the end, market forces dictated the final decision. A lot of the undergrads wanted to become C programmers, not because they were interested in programming, or the language; they wanted the resume bullet of knowing C. (This was long before Java existed, you see.)

    It was like that old joke where a rude patron shows up at a diner, and yells at the nearest waitress, "hey lady, make me a cheeseburger!".. only to have the waitress look at him and say "okay, poof, you're now a cheeseburger" before walking away. Instead, you had students yelling "hey, prof, make me a C programmer". (Were the students were as skilled at C at the end of the course? Yeah, sure, and the rude customer was suddenly tasty with ketchup too.)

    It seems not much has changed since then. A lot of people who really shouldn't be programming (let alone for a living) are learning Java. They have no regard to the care and craft required of solid software construction. (I see this a LOT in offshore development teams as well as in new grads.)

    Oh well. Thanks for keeping me employed, folks.

    --
    --- The American Way of Life is not a birthright. Hell, it's not even sustainable.
  145. What is a CS degree for? by Anonymous Coward · · Score: 0

    What is it that the lecturers here are expecting?

    If I wanted to teach people to be ready-to-roll programmers in insert-language-for-today, I'd do industrial / commercial training. Short, intensive courses that deal in the how and not much in the why.

    If I wanted to teach people to really think about the fundamentals of how computers work, and how languages work, using a range of examples, with a veiw to designing better computers/languages/systems, I'd teach in a degree program. Extended, theoretical courses dealing in the why, which may involve soem of the how, but accepts that whichever language you learn is quickly obsolete, so gives you the tools to look at ideas instead.

    (for the record, I've done some of both. Both are equally but differently challenging)

    Look up the extensive educational debate on academic learning vs vocational training if you're further interested in this. Since that is the underlying issue here : what's a degree good for?

    Like most ed professionals, more questions than answers, I'm afraid.

  146. Preconditions? Invariants by jefu · · Score: 1

    I'd be willing to bet that 90% of the students in my CS program have never heard of pre/post conditions and how to chain them together to think about how a program works. Or loop invariants. They're clearly using them (because they can get their programs to run) but don't understand them - and understanding how pre and post conditions chain together is probably the most essential tool in your brains for writing good code.

    One of the biggest disappointments to me about Java was that it did not support Eiffel (Sather...) style pre/post conditions and class invariants. Then Microsoft could have won me over big time to C# by including nice (and nicely syntactic) language support for them, but they didn't do that either. Asserts are ok, but not as easy/elegant.

    While I once liked Java as a first language, I now see that what is taught in Java books and classes is stuff like what a class is, how inheritance works, how exceptions work - often before they cover arrays. Too often, what is being taught is not how to program (whatever that is and however you teach it) but how to use java - a different beast entirely.

  147. Spot on by Anonymous Coward · · Score: 1, Interesting

    This article has described exactly what is happening in Australia. At the university I graduated from they taught formal methods, computer architecture, assembly, C, C++, Haskell, math, concurrent programming and all sorts of other good stuff. Java was still used as an introductory language but at the same time they taught us that all objects are just pointers to heap memory in Java. The course also covered the softer side of software engineering such as requirements and documentation which is also important. The article makes no mention of this kind of stuff being important. Maybe there has not been a decrease in the quality of teaching in this area.

    The university has now dropped all this "hard" stuff to try and attract more people to their degree. The teaching staff has also halved in size. I have spoken to many recent graduates from around Australia and it seems this is happening everywhere. It is a real shame.

  148. Re:outsourcing ? by curmudgeon99 · · Score: 1

    Why outsourcing? Because the offshore coders are the worst sinners of all. I have been in this industry for a long time and have worked with lots and lots of offshore teams. You find the very sloppiest coders are found in offshore projects--on the Indian side. I wish it were not true but it is.

  149. The problem lies between Java and C by MobyDisk · · Score: 1

    I see lots of posts decrying both Java and C, for different reasons. Perhaps the answer lies somewhere in the middle. Teaching only Java yields students who do not understand pointers, or assembly, or optimizations, or any low-level thinking. Teaching C is abhorently difficult because there are too many stumbling blocks and subtle things that can go wrong.

    It seems to me that the ideal solution would be to teach a C-like language that didn't have certain stupidities. For example: printf("%s", 5) results in a memory dump of whatever is at address 5, up until the next 0 byte. (Notice "d" is next to "s" on the keyboard). It's a great learning experinence, it's important that they see and understand that the computer is doing exactly what it was told to do. And there's nothing wrong with an efficient language that skips bounds-checking and allows pointer arithmetic. But that is too subtle of an error for a programmer to understand on day 1. So it would be nice to have a beginner version of C that instead displays "5 is not a string" or something like that. It would help students and teachers get over the hump and into the real business of what they are doing, then switch to the more powerful language after they get their feet wet.

  150. I Partially Agree. by MrCrassic · · Score: 1

    As a perosn that just recently completed a very educational internship on Java, programming and computer science, I can say that these professors are partially correct.

    While I think that it is necessary for students to learn about the more traditional aspects of software development (i.e. pointers, memory allocation and optimization, etc.), this doesn't necessary have to translate to booting Java as an educational framework. I believe that Java's prowess in object-oriented programming makes it extremely important to use as an academic platform, as well as a vocationally-preparing tool for the "real world" that is often preached about today in universities.

    For example: Mainframes were of vital importance in yesterday's computing world. Some larger companies still use them for archival purposes. However, are we still taught any of the rudimentary languages that they operate under? No; our shift has focused to more important issues of today's computing paradigms; application performance, program security and information presentation.

    However, I think that using Java as the sole example of programming in computer science and software engineering programs is a very damaging idea, since it's much easier to forget about the core aspects that make a program good with a language that does significantly more "hand-holding" than older languages did. It is possible to create a mean and fast app with Java, but it's much easier to create a hog with it as well (just like it's easier to create a memory leak with C++ when forgetting about pointers, etc., but easier to make a very fast application with it).

  151. Lisp interpreter written in Lisp by otakuj462 · · Score: 1

    Finally, Lisp (at least in its lean Scheme incarnation) is amenable to a very compact self-definition. Seeing a complete Lisp interpreter written in Lisp is an intellectual revelation that all computer scientists should experience. I just finished my undergrad, and I have not yet had this pleasure. I've studied formal languages, though, so I think I could learn this myself if I had a good resource. I was wondering if anyone could recommend a resource (a book or open courseware) that could teach me the basics of compilers and self-defining languages?
    1. Re:Lisp interpreter written in Lisp by basiles · · Score: 1

      Read the classical SICP http://mitpress.mit.edu/sicp/

    2. Re:Lisp interpreter written in Lisp by joeinpgh · · Score: 1

      I recently decided to learn Scheme (though I was exposed to LISP during an undergrad class a number of years back).

      In addition to the SICP book (and video lectures), I highly recommend "The Little Schemer," "The Seasoned Schemer," and Dybvig's "The Scheme Programming Language." I found the the "Little / Seasoned Schemer" books to be useful after reading Dybvig's book. You wind up looking at some basic concepts again; however, the material is presented in a much different manner, and is meant to lead to insights as to what Scheme is all about, plus things like names, recursion, etc.

      For the "Little / Seasoned Schemer" books, I recommend re-reading the part on the Y combinator from the first before reading the section in the latter about the imperative Y combinator. Similarly, re-read the last chapter in the first before reading the last chapter in the second.

    3. Re:Lisp interpreter written in Lisp by otakuj462 · · Score: 1

      What are you planning to use Scheme for? Do you have a project in mind?

    4. Re:Lisp interpreter written in Lisp by joeinpgh · · Score: 1

      I do have a distributed application in mind, and it would rely on Gambit-C / Termite. I was kicking around learning Erlang for this purpose as well, but I much prefer Scheme's syntax (though I admit I didn't look at Erlang in much depth - perhaps later). I also thought is was a good idea to learn Scheme because I don't think I really got FP the first time around, and wanted to try again having used a bunch of imperative or hybrid languages first (C, C++, Python, Ruby). Now, Lisp / Scheme make much more sense to me. I do try to learn a new language once in a while as well.

    5. Re:Lisp interpreter written in Lisp by dido · · Score: 1

      John McCarthy's original paper where Lisp is invented: Recursive Functions of Symbolic Expressions and their Computation by Machine. Paul Graham translated it into modern Common Lisp.

      --
      Qu'on me donne six lignes écrites de la main du plus honnête homme, j'y trouverai de quoi le faire pendre.
  152. Re:Start simple and use different types of languag by WeirdJohn · · Score: 1
    After that I would take an Object Oriented Language, Preferably Java. It is a nice Object Oriented Language.

    Java is not an Object Oriented Language. It is an OOP-like language with some support for objects. Smalltalk is a nice Object Oriented Language.

  153. Ignorance is not bliss by microbox · · Score: 1

    I agree that you need to have a rough idea about how the whole stack works. But we no longer expect all computer science students to be able to wire up NAND gates from discrete valves or transistors.

    I agree a little more with the parent of your post because, I find that it's really important to be able to reason about what your code is *doing*. To reason code, one must understand what high-level language X is doing with it. A lot of mistakes that I see are made because people don't understand how their code is executing.

    It doesn't take too much to learn. A bit of assembler, write some basic stuff, so that one can get the idea of it. Write a bit of C for a microcontroller, throw in a few pointers, so that one has a working understanding of stack/heap memory, function pointers and such. Only then will you be able to understand how the CLR works, how it tries to save you from resource leaks, and how you can still screw it all up.

    Ignorance is not bliss when it comes to working in higher level abstractions. One needs to have some basic idea of what the abstraction is doing.

    --

    Like all pain, suffering is a signal that something isn't right
    1. Re:Ignorance is not bliss by Simon+Brooke · · Score: 1

      I agree that you need to have a rough idea about how the whole stack works. But we no longer expect all computer science students to be able to wire up NAND gates from discrete valves or transistors.

      I agree a little more with the parent of your post because, I find that it's really important to be able to reason about what your code is *doing*. To reason code, one must understand what high-level language X is doing with it. A lot of mistakes that I see are made because people don't understand how their code is executing.

      It doesn't take too much to learn. A bit of assembler, write some basic stuff, so that one can get the idea of it. Write a bit of C for a microcontroller, throw in a few pointers, so that one has a working understanding of stack/heap memory, function pointers and such. Only then will you be able to understand how the CLR works, how it tries to save you from resource leaks, and how you can still screw it all up.

      Ignorance is not bliss when it comes to working in higher level abstractions. One needs to have some basic idea of what the abstraction is doing.

      OK, I think you're wrong. And to explain why I think you're wrong I'd like to quote from the essay you'll find a link to in my .sig:

      In the passing generations we've forgotten things. We've forgotten the compromises we've made; we've forgotten the reasons we've made them. We're no longer poor. The machine on which I'm typing this - my personal machine, on my desk, used by no-one but me - has the processor power of slightly over six thousand DEC VAXes; it has the one hundred and sixty two thousand times as much core store as the ICL 1900 mainframe on which I learned Pascal. Yet both the VAX and the 1900 were powerful machines, capable of supporting dozens of users at the same time. Compared to each individual user of the VAX, of the 1900, I am now incalculably rich. Vastly. Incomprehensibly.

      And it's not just me. With the exception of those poor souls writing embedded code for micro-controllers, every programmer now working has processor and store available to him which the designers of the languages and operating systems we still use could not even have dreamed of. UNIX was designed when 32 bit machines were new, when 16,384 bytes was a lot of memory and very expensive. VMS - what we now call 'Windows XP' - is only a few years younger.

      The compromises of poverty are built into these operating systems, into our programming languages, into our brains as programmers; so deeply ingrained that we've forgotten that they are compromises, we've forgotten why we chose them. Like misers counting grains on the granary floor while outside the new crop is falling from the stalks for want of harvesting, we sit in the middle of great riches and behave as though we were destitute.

      Yes, learning C, learning assembler, is learning how machines work at the metal. But to use that as an insight into how to build sophisticated software systems is to try to understand the structure of termite mounds by studying the musculature of a termite. The granularity is so wrong that you're not able to conceive the issues. It really doesn't matter except to those of us who write runtime systems how store is manipulated, what primitive operations are performed on the metal. The application layer programmer should describe his problem, not how to solve it. It's my job to give him a sufficiently rich notation to describe his problem easily and idiomatically, and to make sure that that notation is translated into the most efficient possible sequence of primitive operations. He shouldn't need to have any idea what I am doing underneath.

      Granularity, abstraction, information hiding has been how we have leveraged programmer productivity successively over the sixty years we've now been building software, and I don't believe that the returns on raising the level of abstraction are yet reducing: we've still some way to go in

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
  154. problem by treak007 · · Score: 1

    There is nothing wrong with learning java. There is something wrong with learning java to avoid learning the low-level details of a computer.

    --
    Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
  155. None of the colleges teach what is needed anymore by Anonymous Coward · · Score: 0

    Computer scientist spend 90% of their time surfing for porn. I have yet to see a class that teaches how to do this efficiently.

    Learn C -> C++ -> Java -> How to surf for porn. Here is your bachelor's, thank you for attending our University. May you live long and prosper.

  156. It's not about the language by john_is_war · · Score: 1

    I'm a senior CE student who's about to graduate this spring from a well known university. First, to bash C a bit- one reason java is superior to C/C++ is that there is a consistency in compilers. Not all work the same and that causes issues. That isn't to say that C is absolutely superior, it's just one of the strong points. But that's the real point I'm making. All languages have strengths/weaknesses. If you had to do some logic work, you could do it in C or Java or Pascal, but the logical choice would be a logical language like Prolog. Or if you needed a completely versatile language, you'd go with something that had a versatile typing system, like ML. I could go on and on, but I hope my point has been made. Anyone can learning how to program, it's not that difficult. But the ability to choose the most appropriate language for the job and do it most efficiently is what makes a software eng.

    With that said, what it boils down to is what makes the best educational languages, as they should be used in school for most of the time. Like starting with Pascal (say what you will, but it is one of the best learning languages out there) to teach iterative programming. I haven't used OO Pascal, but I know of it's existance so that might be a good call for teaching OO techniques. However, for shell programming, C is a great language for it. But OO is the next gen of programming type, so it is critical to start teaching OO early on, because the more iterative work done makes it more difficult to grasp TRULY OO programming techniques.

    Once the language type has been learned though, then you introduce other languages so they can choose best language for whatever situation.

    And that's what I have to say about that

    --
    Live life to the fullest. It's not that life is short, but that you are dead for so long.
  157. This is the real crux of the matter by Tran · · Score: 1

    Even in the late early years of Computer Science (early 1980s), when PCs where not ubiquitous and MS was just getting started, basically the same situation existed.

    Some people could not get passed the same issues you mention. Except back then the GUI was the text menu.

    Some people just do not have the necessary skills to solve problems; but this is not just limited to programming.

    Of course some professors had the same/similar concerns back then - I will never forget the senior level class that a visiting professor was teaching and was amazed that we had never been exposed to ( in her estimation) the greatest language ever - LISP. And originally she insisted that all problems where to be solved in LISP. Once she realized that the we really did not know LISP - this was never a requirement in the program or for the course, she relented and allowd us the language of choice. ( She also realized that we could not get proficient in LISP and do the normal course work in time; afte all this was not a course to teach a language, but to apply concepts to solve problems - it was some type of algorithm course).

    1. Re:This is the real crux of the matter by cheater512 · · Score: 1

      Ugh Lisp is one of the most useless languages I've ever programmed with.

      Maybe fine for teaching but you would be stupid to use it for anything.

    2. Re:This is the real crux of the matter by Anonymous Coward · · Score: 0

      Paul Graham would disagree I reckon. :)

    3. Re:This is the real crux of the matter by Anonymous Coward · · Score: 0

      The university I went to in Aus has recently gone to the dark side (MS sponsorship) but just prior to this, we were programming (as best we could) in LISP. I actually enjoyed it. Entirely different way of thinking. I believe that it is exposure to these different ways of thinking (ie a little computational mathematics and the data structures employed there) contributes to better programmers.

  158. Library instead of Language. by krischik · · Score: 1

    That's because OO languages like C++ and Jave relay on there standard libraries for high abstraction - even in C you would use a library function (memset).

    The Ada the solution the the above problem is:

    As : String (1 .. 10000) := (other => 'a');

    A programmer which has learned Ada as first language will look for an more elegant solution the a for loop when forced to use a lesser language and might in fact find "StringBuilder" on there quest.

    Martin

  159. Right Tools for the Job by WED+Fan · · Score: 4, Insightful

    I think there needs to be a distinction between learning concepts and the tools you use to learn them.

    University is not where you go to learn a specific set of skills. If you want that, you go to a technical trade school.

    University is where you go to get an in-depth set of concepts, critical thinking skills, research skills, and theory foundations. This is true for any major you wish to approach. In the CS department, there is a reason you take different languages, some are for system development, some are for app development, some are for theory exploration with little to no value outside of the educational environment. Java falls into one of those categories. Assembly, C, C++ fall into others. Ada falls into yet another.

    Think of it in the terms of the English major, you know, those dime-a-dozen students who will end up working at Burger King and Mr. Chows Empire Chinese Buffet, or they go to Hollywood to work as waitresses while they wait for their big break. The English major takes a load of literature, English, American, Russian, Manga, and poetry from Bacon/Shakespeare to Ginsberg to Hughes to Tupac, and writing from haiku to freestyle with a goofy footed pentameter (trademark and patent pending). None of this is particularly helpful to someone who wants to come out of school with business writing skills.

    Remember, in University, some of the most mistaken ideas come from the professors.

    --
    Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
    1. Re:Right Tools for the Job by pwizard2 · · Score: 1

      Think of it in the terms of the English major, you know, those dime-a-dozen students who will end up working at Burger King and Mr. Chows Empire Chinese Buffet, or they go to Hollywood to work as waitresses while they wait for their big break. The English major takes a load of literature, English, American, Russian, Manga, and poetry from Bacon/Shakespeare to Ginsberg to Hughes to Tupac, and writing from haiku to freestyle with a goofy footed pentameter (trademark and patent pending). None of this is particularly helpful to someone who wants to come out of school with business writing skills.
      You're thinking of an English major with a special emphasis on literature, which is indeed quite useless unless you are planning to go into education. Other subsets of the English major don't cover literature that deeply. For example, I am an English major with special emphasis on rhetoric and composition (which is mainly business writing) and I am also a fully certified technical writer. I only needed two classes on literature to get my diploma; the rest of my classes were of a more practical nature.

      As a bonus, I have several years of CS stuff under my belt, so I could probably do that as well.
      --
      "It is a denial of justice not to stretch out a helping hand to the fallen; that is the common right of humanity."
    2. Re:Right Tools for the Job by WED+Fan · · Score: 0, Troll

      I am an English major with special emphasis on rhetoric and composition...

      Congratulations, now, stop standing there and get me that fork I asked for, and yes, I want the fries and coleslaw. Your tip is riding on how fast you get me that fork.

      --
      Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
    3. Re:Right Tools for the Job by localman · · Score: 1

      University is where you go to get an in-depth set of concepts, critical thinking skills, research skills, and theory foundations.

      Whoa... what school did you go to? I thought it was where you go to get an in-depth understanding of alcohol, marijuana, and the joys and frustrations of the opposite sex?

      Cheers.

    4. Re:Right Tools for the Job by WED+Fan · · Score: 1

      ...alcohol, marijuana, and the joys and frustrations of the opposite sex?

      First two: That's High School.

      Last one: If you having that much trouble with the opposite sex, have you ever given thought that either sex, or the opposite sex is not your thing?

      Maybe you should have used your University days less in experimentation with booze and drugs, and more in sexual alternative? Come on, admit it, you were a little hotted up when Spock laid a big ol' man hug on Kirk when he realized he wasn't dead.

      --
      Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
    5. Re:Right Tools for the Job by Anonymous Coward · · Score: 0

      Now only if my high school had bothered to even mention trade school.

      Instead it was "college college college college college college college college omg you're going to college!"

    6. Re:Right Tools for the Job by localman · · Score: 1

      Actually, I never went to University. I didn't even complete high-school. I'm not a smoker, I'm not much of a drinker, and I'm married. The post was a lame attempt to be funny.

      But now that you mention it, all that Star Trek slash fiction I read may indicate a hitherto unexplored yearning...

      You doing anything Friday?

    7. Re:Right Tools for the Job by ClosedSource · · Score: 1

      That's a nice idealistic attitude, but I disagree. Today a university is a very costly and inefficient way to learn if your goal is purely the pursuit of knowledge.

      In addition, the university's "prime directive" is not to teach students. Surely, the courses that each student has to take to graduate don't all correspond to each student's educational goals. Being "well-rounded" is defined in terms of what the university needs, not what the student needs. If a particular school wants to specialize in a particular obscure subject area, it will require uninterested students to take courses in that area in order to justify the expense of teaching it.

      I suggest that anyone who thinks its just about learning, take your university qualifications off your resume and see what happens.

    8. Re:Right Tools for the Job by WED+Fan · · Score: 1

      You doing anything Friday?

      Yes, a group of Neo-nazi nuns with a thing for Picasso. One loves wearing a Lyndon B. Johnson mask. It's kind of weird, but hey, when you've got a few spare hours on a Friday full of reruns, what the hell. See what the writer's strike is forcing me into?

      --
      Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
    9. Re:Right Tools for the Job by ikarys · · Score: 1

      The "in-depth set of concepts, critical thinking skills, research skills" you mention are not present in 95% of the grads I interview or trial for Java positions.

      The core "experts" I deal with are college drop outs, self taught, or have degrees in other fields.

      Degrees probably make some people feel warm and fuzzy inside, and is crucial for some industries, but in IT, imho, a degree is close to useless.

      I think it stems from the saying - "those who can, do; those who can't, teach".

      Basically as a "do-er" I spend a lot of time reteaching software development/design to people who apparently have an education.

  160. Crappy School by FunkyELF · · Score: 1

    I graduated from UCF a couple of years ago a course in programming languages was required.
    We had assignments in LISP as well as Prolog.
    My Software Systems class had just switched from ADA to C++.
    Java is a great language to do assignments in because you can get stuff working pretty rapidly.
    My Systems Software class (not to be confused with sofware systems which I took the same semester) we had to write a two pass assembler in Java. Doing it in Java made it real easy because we could use vectors and hashtables and actually concentrate on the ideas of assemblers they were trying to teach. If it was in another language it would have taken longer to do but wouldn't have taught us anything more than we learned using Java.

    Any good CS program will teach you theory and not a particular language. It was kind of frustrating as a student for them to not teach us Visual Studio, or Sun Developer Studio, or Eclipse, or Access, or MySQL, or any particular version of something. They just taught us theory which I am glad about now.

  161. First principles first by RandCraw · · Score: 1
    In school, you need to learn the basics first. Complex/compound/swiss-army-knife languages like Java and C++ should NEVER be first languages. Nor should they be used to teach any other topics in which abstraction would interfere with principles (e.g. systems, algorithms, theory, perhaps even AI).

    Ideally, the programming language used to teach a course should support only the core concepts of the subject. It should avoid all else. That's why Pascal and Scheme are probably still the best means to introduce the basics of procedural and functional programming. Sure each language has weaknesses, but the goal in CS is to learn *principles*, not *languages*, and these two perform that role economically and effectively.

    Should CS students learn Java or C++? Yes to the former since its today's lingua franca among professional software engineers (and probably no to C++, because it's requires the programmer to overcome far too many interfering semantics when implementing even simple tasks). But Java should still be introduced only when teaching principles of software engineering, not computer science.

    Randy

  162. Ada is OO by krischik · · Score: 1

    Just to point it out to you: Ada is an OO language and has Pascal like Syntax. See:

    http://en.wikibooks.org/wiki/Ada_Programming/Object_Orientation

    Martin

  163. Blasphemer. Programming languages are religions. by Ranger · · Score: 1

    Don't you know that Ruby is manna from Heaven and everyone and I mean everyone should be using it. They could do an occasional foray in to C# if need be. If you must use Visual Basic never ever admit to it. Don't even get me started on FORTRAN users.

    Snarkery aside (is that a word?). Use the language that you are most productive in. Use the right tool for the job. If you are simulating nuclear explosions or climate modeling then FORTRAN may be your tool. Some programmers are stuck in the .NET world and must use VB or C#. I never got my head around Java but since I'm a web developer and part-time sysadmin I'm very comfortable with Perl, PHP, and Python (my preferred language). In my CS classes I had to learn Pascal, Assembly, FORTRAN, C then C++. And I even had to roll my own mini-language using Lex and Yacc. On the job I learned Visual Basic, Objective-C, Java, Perl, PHP, Python, and Powerbuilder.

    I think a programmer should be exposed to multiple programming paradigms. You don't know what you may actually end up programming in. The big sell about Java is that it is an 'Enterprise Level Language' and is a big sell to companies. Same goes for .NET. 'Everyone' uses Microsoft so they want MS based programming systems. You just have to find your niche. My preferred language is Python because it can run in Jython so it has an in into the Java world. It can be IronPython so it has an in into the MS world. It is object oriented and much easier for me to debug than Perl. It's also easy to learn and there is a lot of crap I just don't have to worry about.`

    --
    "You'll get nothing, and you'll like it!"
  164. java damaging? by Anonymous Coward · · Score: 0

    I think the thing that makes Java "damaging" is that most people that learn it don't learn any other language. Why? Because for most employment Java is all that exists outside of "niche" markets. If you don't learn Java as your first language, you end up learning it anyway so you can get a paying job (since most jobs are java and the ones that aren't java are probably COBOL). You just don't need anything else.

    Java is the new COBOL. It isn't going anywhere so like guys in the 80s, you can learn one language and retire using it for 20 some years...

    Of course, people with those mindsets are missing out on a lot of fun. I learned Java first and use it 92% of my time (the other time is wither SQL or bash) at work. But at home, I love playing with C and C++ but its only a passing fancy. I'm sure my following lament is shared by many Java first-timers: if I had a pratical reason to use C/C++ or , I'd have a reason to learn it better. Since I don't have a pratical reason to learn it or use it, I can't justify the time at home to spend on it.

  165. CS Grads Suck Anyway by Anonymous Coward · · Score: 0

    I started working in IT a few credits short of a BA. I learned databases, networking, and servers on the street. Every few years management would bring in a "Golden Child" with a B.Comp.Sci. Aside from the ones from Waterloo and Rensselaer, all the other computer science grads were incompetent. Most of them had soft hands and were incapable of rescuing a dead server or creating a practical app for a client in a practical period of time. Most of them washed out, some of them gravitated to management which is probably a good match for their skill set: none.

    I've seen some terrible IT projects started by companies on the advice of their Java-loving computer scientists. The only people who like Java are its priests. Most of these projects ended up with tens of thousands of dollars in server farm expenses to support Java bloatware and were replaced by PHP scripts that ran fast on old PIII servers.

  166. Programming before University by toddhisattva · · Score: 1

    People need to be programmers before they study computer science.

    That means they need to know programming before they get to university.

    The way it is now, university is just remedial and hopelessly behind-the-times.

    AFAIC, nobody ever learned to program in school.

  167. Bottoms up and Top down! by __aavljf5849 · · Score: 1

    When I studied computer science, which admittedly was a very short time, we had a very interesting course layout which really made sense in the end.

    What we did was that we started with high level languages (Pascal mainly, this was back in the stone age) and at the same time we had courses in digital electronics, that tought logic and basic circuitry.

    And then, while the digital electronics got more and more complex, the programming got more and more low-level. And in the end of the year, we made our own microcomputer and programmed it in assembler.

    Something like this should in my opinion be the layout of every single first year in computer sciences. Admittedly I didn't learn anything the first half-year, having dome some computing before, but in hindsight, when everything came together at the end of the year, I realized this was a fantastic overview over computing. I had after this insight in both procedureal programming as well as SQL-databases while still being able to program in assembler and actually soldering together my own little 8-bit computer.

    Big Kudos to whoever at Utvecklingscentrum Gotland and The Royal Institute of Technology in Stockholm that thought this course up in the end of the 80s. I don't think you can get a better one-year introduction to computing.

  168. Computer Science != Software Engineering by giminy · · Score: 1

    I think that universities should create separate degree programs. I'm sure that Computer Science would nearly empty out. Perhaps it would move to the Math department. I'd still be in it, though.

    Programming is a neat tool, but the fun stuff is discrete mathematics, set theory, process/security calculus, and most importantly computability. Design patterns and computer architecture are interesting to some, but often they're the types that groan at discrete math and 'classical computer science,' (of which there is a decent amount of development these days).

    Reid

    --
    The Right Reverend K. Reid Wightman,
  169. Pointers... by steelclash84 · · Score: 2, Interesting

    I graduated a couple of years ago with a CE degree. We were initially started on Java. One of the best courses that really taught me the concepts was a course in which we basically rewrote all of the data-structures that Java provides. Manually creating linked-lists (pointers), arrays, stacks, queues, etc. I think the real problem isn't the language, but the lack of conceptual teaching. However, I do agree that exposure to different languages is a good foundation.

  170. Good old C and C++ by apfistler · · Score: 1

    I think that students should be taught C and C++. To go back to the basics and learn how to do memory management, use pointers and all that good stuff that builds a good foundation. I found after you have a good foundation in C you can just go and pick up new languages with little problem. I think its fine to teach Java, C# .Net, etc after they have a solid foundation with C and C++.

  171. Sounds like a person problem, not a language probl by FatSean · · Score: 2, Insightful

    If you can't figure out concurrency from theory and pseudo code, you're a hack. You must first understand the theory, then worry about how to implement it. Besides, Java has so many tools and support systems for concurrency that you'd have to be a lunatic to try to develop that in C++. Hardware is cheap, talent is not.

    --
    Blar.
  172. At least it's not Visual J++ by hovercycle · · Score: 1

    If MS did not get a swirly they might be teaching Visual J++ to CS students! Wouldn't that be F*^$'d up? I was in school in the J++ era. Yes I was naive about schools (Brown Institute) and the school was naive about the Java language (as in it was suppose to be cross platform...It's reason for existence) and they actually taught it. What other schools taught J++?

    From Wikipedia-

    "On January 24, 2001, this suit was settled and Microsoft agreed to pay $1.95 billion and to cease MSJVM distribution"

    Still Java took it's place as the cross platform language just as ODF will take it's place.

  173. Yes and no by Moraelin · · Score: 1

    Well, for a start, I probably should apologize if anyone understood the "burger flipper" quip as singling out McDonalds' employees. As it happens the particular burger flipper I was referring to in that paragraph (and yes, he did get a real programmer fired for writing correct code he couldn't understand) is an ex-marketer.

    It's more generally the complaint about anyone turned programmer with no more than a minimal course in some language, just because programming pays better, not because they actually have any inclination or aptitude. It's more that they're (still) burger flippers in the language of their choice, than whether they literally flipped burgers before. They're trained at most as unskilled manual workers.

    As for the rest of your comment... well, I'll try to say it more diplomatically and constructively, but it's basically a more verbose version of what the AC already replied. Sorry.

    See, thing is, programming isn't unskilled manual labour at any level. Whether you're designing the grand architecture of a whole enterprise system, or just the innards of a helper function, it's design and engineering work. So saying that someone should just teach you the language, but not the engineering principles, is a recipe for disaster that's been repeated too many times.

    It's like saying that you should just teach someone how to use a wrench and a hammer, and then ask them to build you a custom car from scratch. Regardless of how hard management wishes that it were just a matter of mechanical work with those tools, it isn't. That guy may be able to hammer sheet metal like the best of them, but if he doesn't understand combustion engines, he'll still produce crap. Both performance-wise and safety-wise.

    And that's just the mistake repeated in programming again and again and again. There's a ton of _horrible_ code out there, and a lot of security holes repeated verbatim again and again. (E.g., not only I see the same cross-site-scripting and SQL injection vulnerabilities repeated ten thousand times verbatim, but occasionally I even run into idiots arguing that they're overrated and inevitable anyway.) Because yet another guy didn't even understand the principles behind it, and didn't even know such basic stuff as how to quote a string for use on a site or in the database.

    Please don't take that (necessarily) as an insult, but as an explanation of _why_ you need that engineering stuff. Because you _are_ doing engineering work. I'm not saying "go back to McDonalds", I'm saying, "do learn more and you'll be better at your job." Your choice whether you want to follow that advice, though.

    --
    A polar bear is a cartesian bear after a coordinate transform.
    1. Re:Yes and no by rrobbins · · Score: 1

      "Whether you're designing the grand architecture of a whole enterprise system, or just the innards of a helper function." Well I'm not doing anything like that. I work as a web developer. In the workplace you only have to do practical things like CRUD (Create, Read, Update, Delete) operations on the database through a browser interface. The most innovative thing I do is parse text with regular expressions to automate edits. Software engineers are brilliant but sometimes they go about things in a comical way. Once I found a document written by a software engineer of a grand scheme to design (more like engineer) my company's web site. It was amazingly technical but our actual web site looks like crap, was only meant to be a brochure web site, and has never been completed. Web application security is bad because it is not easy enough. I've encrypted social security numbers in two databases after inheriting applications that made no attempt to protect that data but I had to waste hours documenting the procedure for the IT department because it is just too complicated.

  174. C First, Last & Always For Science Of Computin by ifknot · · Score: 1

    Good Article. Used to chaperone CS labs during post grad to make ends meet. Java is not a good first language for computer SCIENCE. It makes the whole process seem confusing and somehow 'magic' simply learning programatic incantations and learning the CS prof's prefered idioms. No concept of the cross platform, virtual machine, bytecode, interpreted, hotspotting, garbage-collection, client-side, etc, etc. The so called 'CS' course just churned out RAD Cookie Cutter GUI programmers who could connect (just) to databases. Imho must pass C class first, preferably with a bit of assembler thrown in, then and only then Java but teach from the bottom up not GUI top down.

    --
    we are all cosmic nuclear waste
  175. AMEN BROTHERS! by Explodo · · Score: 1

    I work for a small company. Our software is all written in C++ except for the parts that have to be some other language(java) to interface with customer systems. Finding fresh BS grads in CS to hire can be a real challenge because we need C++ skills far more than we need java. I'm currently getting my MS in CS, and I'm amazed by the number of people in my classes who are very bright people and are very knowledgeable about all things client/server/web oriented, but who have no clue how to write even the most rudimentary applications for straight computation.

  176. MIT "CS 101" required LISP for 37(?) years by peter303 · · Score: 1

    The MIT CS and EE degrees required a programming course (6.001) based on a descendent of LISP called SCHEME. They started this around 1970 and just dropped it for 2008. SCHEME had a very wide set of computer language elements. It was only commercially practical in the early 1980s when A.I. Lisp machines were the first graphics workstations, quickly subplanted by UNIX/C. [6.001 "Structure and Interpretation of Computer Porgrams" is replaced by 6.005 "Principles of Software Development" and 6.006 "Computer Algorithms". Since these are new courses, I havent seen details yet.]

  177. Couldn't agree more... by TemporalBeing · · Score: 3, Informative

    First, some of the best comments in this thread: Comment 1 Comment 2 Comment 3 Comment 4 Comment 5 Comment 6

    I list them because they hold a lot of wisdom, and wanted to draw special attention to them for such as well.

    When I was in college I got really ticked at the level of theory - there was too much of it. It wasn't balanced well enough with implementation; and as I looked around, I noticed that was pretty common place among academic institutions (colleges AND universities - and I'm not talking about trade schools either). That was before they moved their curriculum to using Java for the first couple classes; and after they did, I had already heard some stories about the upper classes getting some of these "new" students and not being able to focus on the class materials because they had to teach these students C/C++ first and the students had a harder time getting it. (Not so the other way around.)

    That said, I've started thinking about how I would put together a curriculum for teaching computer programming/science/engineering. (I'm not talking about computer _hardware_ engineering, btw.) I even did some tutoring after college. So what would I do?

    I'd start students with a language that can be used to teach the real basic skills and concepts (variables, functions, etc.) - even vbscript could be used at this level; but I'd also quickly move them on to more advanced concepts (in the case of vbscript, it would only be used for a couple weeks at most), moving from language to language to bring not only a depth of concepts and understanding, but also a breadth of computer languages and kinds of tasks. I'd also ensure that somewhere in the curriculum students would be exposed to Assembly, and have found that even a small exposure makes a big difference in programming styles and philosophies for programmers.

    Furthermore, I'd break the curriculum into two parts. One part would start from the ground up; and the other would start from the top down. Both would be required of students. The idea being one part would be more focused on the theoretical, while the other would be more focused on the substantial - implementation. Both would work together to produce a well-rounded student. Additionally, it would be designed such that students that wanted to work on operating systems would simply follow the one from start to end; while other students would be able to leave for more focused courses at the layer of their choice. (Students wanting OS would still have other courses for focus work too, btw.) The primary idea being that even a web-app developer needs to know the underlying systems, and even the OS developer needs to understand the abstractions of the web-app developer.

    I'd also have the overall curriculum be far more software engineering focused. Yes, if people want to really be computer "scientists", then they could do that; but industry really needs software engineers, not computer scientists. Real programs require engineers, and sadly, this is strongly lacking from most all academic computer programs. (Some have changed it, but not many.)

    I'd also think that this approach would be very favorable to the authors of TFA and the comments I've linked. The ideas probably need a bit more refinement, but the general approach would be sound - and it's not what academia is doing today by any stretch of the imagination.

    FWIW - While I am relatively young (college grad of 2003), my main strength is C prog

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    1. Re:Couldn't agree more... by ceoyoyo · · Score: 1

      You've potentially designed a pretty good software engineering program. Unfortunately you've designed an absolute crap computer science program.

      Computer science isn't about going out and doing stuff that "the industry" wants today. It's about figuring out how to do what the industry is going to be wanting twenty years from now. Or forty. Or a hundred.

      Yes, there are probably WAY too many people in computer science. They need to all be booted over to software engineering where they belong. My university did that by requiring propositional calculus, second year regular calculus (not engineering calculus), formal logic and algorithms analysis, several of them right in the first year.

    2. Re:Couldn't agree more... by TemporalBeing · · Score: 1

      Computer science isn't about going out and doing stuff that "the industry" wants today. It's about figuring out how to do what the industry is going to be wanting twenty years from now. Or forty. Or a hundred.
      I think its a bit of a stretch at this point to say CS is about what the industry is going to want 20/40/100 years from now. We can barely see what's coming 5 years from now. CS has its place - namely to produce more CS, not S/w Engineers - but programming/development/etc. has outgrown CS. It's been likened to me before of the physicist vs. the engineer; and we really need to start setting up real engineering around software creation instead of this bastardization we call CS.

      Yes, there are probably WAY too many people in computer science. They need to all be booted over to software engineering where they belong.
      Sadly though, there are probably less than 20 college/universities even offering a real software engineering program, while there are hundreds or thousands offering computer science. Additionally, try convincing the profs of those CS dept.'s that they need a separate software engineering program/department. That's where part of the problem lies.

      Honestly - I agree. The first course CS/SE students should take should be something like Engineering 101 where you get a taste of the different kinds of engineering and a basic foundation that equally applies so as to guide you to the right one. But first we have to have Software Engineering Departments at more than a mere handful of academic institutions.
      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    3. Re:Couldn't agree more... by ceoyoyo · · Score: 1

      Maybe things are different in the US. I don't know of a major Canadian university that doesn't have a software engineering department, in the faculty of engineering where it belongs. Here, the CS department is actually IN the math building. Some of the courses are shared between eng and CS, but the programs are completely distinct.

      You're right, SE absolutely has to be a separate department. If the CS department keeps getting degraded into a software engineer mill there isn't going to be a next generation of computing.

      I don't think it's unrealistic to look 20 years out. In the last twenty we haven't really had any big SCIENCE changes. Lots of engineering ones, but not really any science ones. No, the CS people won't be able to predict what things are going to look like in twenty years, but they are working on things now that will determine what computing and IT looks like in the future, certainly beyond five years.

    4. Re:Couldn't agree more... by TemporalBeing · · Score: 1

      Maybe things are different in the US. I don't know of a major Canadian university that doesn't have a software engineering department, in the faculty of engineering where it belongs. Here, the CS department is actually IN the math building. Some of the courses are shared between eng and CS, but the programs are completely distinct.
      Things are quite different in the U.S. Even the "Ivy League" schools barely recognize Software Engineering as its own discipline, AFAIK Carnegie Mellon is the only one. Glad to hear its different in Canada.

      I don't think it's unrealistic to look 20 years out. In the last twenty we haven't really had any big SCIENCE changes. Lots of engineering ones, but not really any science ones. No, the CS people won't be able to predict what things are going to look like in twenty years, but they are working on things now that will determine what computing and IT looks like in the future, certainly beyond five years.
      Only reason I really say 5 years is that we really need to bring better discipline to the field first. Then things will become more predictable too - or at least easier to do so. Unfortunately, a lot of the people in the computer industry in the U.S. (and I've seen a lot of this on slashdot, with the exception of this article and its comments) refuse to really follow a discipline when it comes to programming unless their industry (e.g. robots, avionics) forces them to for other reasons - and then, they usually came out of Electrical Engineering instead of CS.

      So yes, they are doing things that will determine the future - but that future could come faster and be more predictable with better discipline. Some in industry are fighting for it, only to have the people in the project chains reject it. I'm on one project now where part of the team refuses to use the tools to manage requirements - which the people above them are using. It drives me nuts. (They end up writing every document from scratch! And doing all the trace-abilities by hand! And it only drives them off schedule that much more.)

      Any how...you get my point by now...
      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    5. Re:Couldn't agree more... by ceoyoyo · · Score: 1

      The software engineering department is all about programming methodologies, requirements, reports, etc. The undergrads practice it and the grad students research it. I hate that stuff, and I'll never do it. That's why I'm not cut out to be a software engineer.

      It's another good reason why CS and SE have to be separate. Nobody in CS should be the least bit concerned with such things, except for the absolute basics when you have to write some code to test an idea and a little bit of good practice will come in handy.

      The computer scientist should write cool stuff that crashes a lot (or doesn't work at all). The software engineer writes boring stuff that works all the time. In a company it should be the same way. You don't ask your R&D group with all the PhDs to produce working products for you. They push the limits. Then they hand the stuff that works out to the engineering group to turn into a product.

  178. Agreed - We are Trying to Hire C++ by kwandar · · Score: 1

    We are in Toronto and I can personally attest to the difficulty of finding good C++ applicants, particularly fresh from University. Unfortunately it seems that university or college graduates are now trained in java and .net, neglecting C++. Pity, as our website shows THREE open positions for C++ applicants.

    Even if I were to hire good programmers and hope they would pick up C++ (a training curve we are reluctant to pay for), these fresh graduates seem to be brainwashed into thinking C++ is dying in favour or Java and .Net - how wrong they are. Even current C++ programmers seem to be looking for Java and .Net.

  179. What's new? by roggg · · Score: 2, Interesting

    When I took my undergrad degree, the intro course, data structures course, algorithms and analysis course, and a few others were all taught in Modula 2 (circa 1989). These did very little to prepare me for systems courses. C was introduced as part of the systems course, and there were concepts in C that were new to me after my Modula education, but so what? Later on I did TA work on intro courses in Pascal. Not exactly the stuff of systems programming either. Were these students doomed? Java is a good language to start with. It's not the be all and end all of programming languages. Why should we expect the first language a student learns to prepare him or her for every possible programming task?

  180. Basics by xmvince · · Score: 2, Interesting

    Everyone should start with the basics, and learning about the lower level things going on is key. I'm glad I learned C/C++ in highschool, and I'm glad that I will continue learning it in college. Java is definitely a power language, but I do not think one should start out with it. I plan on learning it in my junior year of college.

  181. Wow! by readin · · Score: 1

    From TFA:

    SPARK is a subset of Ada augmented with assertions that allow the designer to prove important properties of a program: termination, absence of run-time exceptions, finite memory usage, etc.

    Really? They finally solved the Halting Problem?

    --
    I often don't like the choices people make, but I like the fact that people make choices. That's why I'm a conservative.
    1. Re:Wow! by Gord.ca · · Score: 1

      The Halting Problem is the general case: You can't write an algorithm which you can give any program and get an accurate answer as to whether it will terminate. However, the programs which absolutely can't be proven either way are kind of wonky: You can prove termination for most sane programs/functions. It's just a lot of work.

      --
      The opinons expressed are those of the voices in the author's head and are not necessarily those of the author.
  182. Computer Science or Software Engineering? by randomsearch · · Score: 1

    I think this article brings up a general issue that is facing CS departments at the moment.

    Computer Science courses have two main audiences:

    • students heading for academia, or other positions requiring extensive theoretical knowledge
    • students headed for industry with a focus on software development

    These categories overlap to a degree dependent on the University.

    The two audiences have been diverging more and more in the last decade or so, and it appears that many departments are now in a position where they have to choose to stop catering to one, or split their courses into programming/software development and more mathematical/theoretical alternatives.

    I also think that this separation of mindsets is the fundamental cause of many debates between students and their professors, kernel hackers and academics. There is a misunderstanding caused by the different focus each party has, where your approach really depends on what you are trying to achieve (do you want to write software that does the job? or is elegant? something immediately useful, or that demonstrates a different way of doing things?).

    It's quite sensible that students should learn several languages in a CS degree, although Ada is becoming very much a niche language (my University still teaches it, mainly for real-time programming). It's also useful to have an understanding of lower level subjects such as electronics and logic circuitry.

    Exactly where universities draw the line is a very difficult decision, but with CS applications falling rapidly in the UK at least, I think that a major change to course structure or separation of courses is required to modernise the system.

  183. O(C++) by phunctor · · Score: 1

    A Java-only miseducation provides no tools for grasping how and why the templated nature of the C++ Standard Library enables good compilers to produce efficient code from abstract source representations.

    Most of my O() thinking these days seems to come down to using the appropriate Standard Library containers and methods.

    The rest comes down to using lots of hashes in perl...

    --
    phunctor

  184. two profs working for adacore love ada by jilles · · Score: 4, Interesting

    1. Mathematics requirements in CS programs are shrinking.

    The reason is because Computer Science has developed into a discipline that is no longer pure mathematics. There's only so many courses you can squeeze into four years.

          2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.

    Guess what, that's what building real software is like today. We don't need people that can write quicksort in obscure unused languages but people that can grasp systems of millions of lines of code. Ada doesn't prepare you for that because it is a toy language that never really was adopted outside of the academic world. It has no good, widely used frameworks & libraries like you find in the real world. People don't use it for a whole range of software systems that you find in the real world and to prepare you for this real world there are simply much better languages around these days.

          3. The resulting set of skills is insufficient for today's software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals.

    I agree that skills are important. A good prof can teach those using pretty much any turing complete language if it needs to be done. Java isn't half bad for teaching a whole lot of important CS concepts and theory. And unlike Ada, people actually use it. As for C and C++ they are useful languages to learn of course. Many colleges still do.

    But of course two ex profs working for adacore are hardly objective. Ada is as dead as latin. It has some nice features but nothing you won't find somewhere else. Keeping professional skills up to date is as important for professors as it is for students. Having done a Ph. D. in software engineering & architecture and having practiced my skills in several companies, my view is that one of the largest problems in computer science education is teachers who have never worked on real, industrial sized software systems and continue to send students into industry with a lot of misguided & naive ideas about how to build software. Most SE teachers out there simply have no clue what they are talking about. Software engineering is a skill learned in practice because the teachers in university mostly lack the skills required to properly prepare students. That's the sad reality.

    --

    Jilles
    1. Re:two profs working for adacore love ada by flajann · · Score: 1
      The flip-side of that sad reality is that if a prof DID know how to teach the students to industry expectations, said prof himself could go out into that industry and double his salary.

      Certain jobs -- like teaching -- comes under my old adage of:
      If you are smart enough to do the job, you're not dumb enough to do the job!

      I'm sure you all can think of a number of other jobs that would fit that distinction!

    2. Re:two profs working for adacore love ada by Ada95 · · Score: 1

      The claim that Ada is dead or otherwise unused is total FUD. I make a good living with my day job using Ada exclusively and I could find another such job in a week if I wanted to change companies. Ada is a cool language - there is nothing, not even plain C, that is better suited for programming safe, secure & reliable embedded systems, web servers, etc. There is a shortage of compilers for small 8-bit microcontroller targets but that's a market problem, not a technical problem.

    3. Re:two profs working for adacore love ada by hung_himself · · Score: 1

      It isn't always about the salary. Believe it or not, many people remain in academia because they *like* doing research instead of pumping out lines of code, or being forced into following a corporate agenda not because they have no choices or because they are not the best minds. Mind you, with the cutbacks in funding and the increased politicization of science, this may no longer be the case...

    4. Re:two profs working for adacore love ada by ceoyoyo · · Score: 1

      Yes we do. I know a guy (doing his masters in CS) who writes programs for quantum computers. There are no quantum computers to run his programs, his work is entirely theoretical math. But if you ever want to have quantum computers, you need guys like him, as well as they physicists to build the computers. If you decide you don't want to have quantum computers, fine, but then the Chinese are going to have an awful lot of fun with your banking system when THEY develop them.

      Computer science and software engineering are not the same thing. Higher math is definitely required for computer science. It is not for software engineering.

    5. Re:two profs working for adacore love ada by jilles · · Score: 1

      And how many million programmers do you share your niche with? If you go look you'll probably find people hacking just about any language that was ever invented. That doesn't mean fortran, cobol and many of the other lovely stuff popular decades ago (including indeed Ada) isn't dead.

      In general supply and demand tend to meet each other. If you find that people aren't meeting the demand (e.g. compilers for 8 bit microcontrollers) for your niche that is maybe because demand is not so strong anymore.

      --

      Jilles
    6. Re:two profs working for adacore love ada by DragonWriter · · Score: 1

      1. Mathematics requirements in CS programs are shrinking.


      The reason is because Computer Science has developed into a discipline that is no longer pure mathematics.


      The problem with this explanation is that there is no evidence whatsoever that Computer Science, as a discipline, involves any less mathematics than it ever did, even if undergraduate "Computer Science" curricula at many institutions involve less math and more vocational programming based on industry fashion with less theory.

      2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.


      Guess what, that's what building real software is like today.


      Understanding both the scope of models and the theoretical underpinnings remains important to actual computer science. If universities want to offer programming curricula that aren't about computer science, that's perfectly legitimate, they just shouldn't call them "computer science".

      We don't need people that can write quicksort in obscure unused languages [...]


      Todays "obscure, unused language" are the model for tomorrow's industrially dominant language. Most of the newer popular languages (Java included) were designed (and continue to be improved) by people intimately familiar with what you would probably describe as "obscure unused" languages, and incorporate features directly from them.

      Innovation comes from these kinds of specialized, experimental, or tightly-focussed languages, and is only later incorporated into industrial languages. While grunt coders might not need to have experience with them, a Computer Science curriculum ought to expose people to something other than what is currently industrially popular.

      but people that can grasp systems of millions of lines of code.


      People that don't learn more than a couple of currently-industrially-popular languages and don't learn the theoretical and mathematical underpinnings of computation well aren't going to grasp systems of millions of lines of code well, and aren't going to apply even the current industrially-popular languages well to new challenges.

      Ada doesn't prepare you for that because it is a toy language that never really was adopted outside of the academic world.


      In the real world, Ada is an industrial language that was developed by the Department of Defense specifically to tame the diversity of languages they were dealing with in systems containing millions of lines of code, and specifically to deal with issues of safety, reliability, and maintainability, and was mandated for about a decade (1987-1997) for all DoD projects where new code was the focus. It's about as far from an academically-focussed or "toy" language as you can get; its true that, with the fading of the DoD mandate in favor of off-the-shelf software at DoD, Ada has faced a sharp decline in industrial popularity and is now, perhaps, used mainly academically, but its focus isn't academic, it isn't a toy language, and there is certainly no basis for claiming that Ada doesn't prepare you for large systems, or that it was never adopted outside of academia.

      Having done a Ph. D. in software engineering & architecture and having practiced my skills in several companies, my view is that one of the largest problems in computer science education is teachers who have never worked on real, industrial sized software systems and continue to send students into industry with a lot of misguided & naive ideas about how to build software. Most SE teachers out there simply have no clue what they are talking about.


      Computer Science and Software Engineering are two related, but distinct, disciplines. You treat them as if they were the same thing. (Of course, part of the problem may be that "software engineering" isn't as widely available as a separate degree program.)

    7. Re:two profs working for adacore love ada by jilles · · Score: 1

      I did a pretty traditional CS study. Most of the math there was nice but I never needed much of it. I guess most I got out of it in the end is generic analytical skills. These are useful to have of course. These days there is a broad range of topics in computer science and not all of it is related to math. Probably relevance of math for the type of jobs most CS students end up doing is fairly limited.

      It's funny you are claiming software engineering and computer science are two fields. I guess software engineering has been evolving into a discipline of its own. But to the best of my knowledge software engineering is still taught in the CS department of most universities as part of the normal CS curriculum.

      We can argue at length about Ada and its merits and how dead/alive it is or was. Pretty pointless in my opinion and I think the job market at this point is slightly biased in my point of view. In my view the DOD type projects are niche of its own and of course the use of Ada has always been limited to such very specific niches and domains to begin with. I've never encountered any Ada software in the real world. Maybe I'm just too young (33) :-).

      --

      Jilles
    8. Re:two profs working for adacore love ada by flajann · · Score: 1
      Yes, there are definitely a few who do it for the love of teaching and doing "pure" research. Alas, the few are not representative of the many.

      I personally would love to teach and do pure research, but it doesn't pay well, and I would be spending way too much of my time filling out grant proposals and doing test scores. Moreover, as -- as you say -- budgets become more restrained, the politics become more of a factor in being able to do real science.

      The politics, I think will wind up driving science out of this country to others. The US is quickly becoming a second-class nation in the world. The US lags behind many other nations technically, academically, economically, and even morally. Sad state of affairs, really.

  185. Student Don't Know the Underlying Architecture by smist08 · · Score: 1
    I find that modern computer science students don't know how data is stored in memory on real machines, how integers can be big or little endian. We find the big problem with teaching Java programmers C, isn't the language, its knowing what's really in data types. Even programming in Java, throw a bunch of Java data out a socket and the students couldn't document what is on the socket, only how to retrieve it with Java, ie no concept of inter-operability. I think C did a good job of teaching machine architecture along with programming and that part of things seems to have been lost.

    On the other hand modern Java students are really good at object oriented design and software engineering which is a real plus.

  186. Universities in a race to the bottom by Gen.Anti · · Score: 1

    I've recently read H.H.Bauer's "Students who don't study". A bad student myself, I recommend all Prof. Bauer's writing. Not a paradox, really. link

  187. I came out ok... by Anonymous Coward · · Score: 0

    Gee, I took 3 courses in Java and never touched the graphics in it until my final year in college when I went back to take a course they had mandated after I'd passed it up. I had no problem understanding the hardware/software boundary and how it interacted, and all my core programming concepts were learned on Java. I never felt at a disadvantage. Granted, I went on to also take classes in C and C++, but there really wasn't anything new there. Now what confuses the hell out of me is Visual "Anything", especially VB. Maybe it's the courses and the teaching, not the language...

  188. Matters entirely on the industry. by RingDev · · Score: 2, Interesting

    If you are going into Web development, office productivity desk top development, or information management applications, knowledge of pointers, memory management, stacks, linked lists, etc... is worth exceptionally little.

    The vast majority of development is being done using pre-compiled libraries. Because let's face it, there is no need for your employer to pay you to recreate the string class, or a hash table, or any other primitive functionality that already exists in any number of languages. Sure, this knowledge is good to have as it can come in handy. But in reality, other then a cursory understanding to ground your knowledge to, the in depth knowledge of them will not effect the vast majority of developers.

    Sure, if you are working in OS development, or in embedded software, or in other arena's where you may not be able to use a managed code solution, yeah, knowing C/C++ and all of the underlying mechanics is critical. But when was the last time you listened to a web developer talk about span width, compression algorithms, and rendering engines?

    I think Java is an excellent tool for teaching OO design. Especially for people who had VB6 experience (because going from VB6 to VB.Net with out learning OO design was both possible and painful). C/C++ are also great tool for teaching the stuff that has already been written (as you mentioned, stacks, pointers, memory management). So both should be taught for the purpose of educating students. As for ADA, having taken a crap ton of ADA courses while in the military, I can only say that I saw nothing in it that really impressed me over Pascal. I could see bringing Lisp back into the educational realm, but it's real world usage is again, very limited.

    I picked up my assoc CS degree from a tech college. We had 2 courses of C++, 3 courses of Java, 3 courses of VB.Net, 3 courses of Web related stuff (ASP.Net, HTML, Javascript, IIS/Apache, etc...), and the like. We never touched Assembler, no one coded an OS, we never touched a lot of stuff that my friends up at the University were working with.

    But after 2 years, 9 of the original 60 students graduated the program. And of them, 5 were spot on to become entry level consultants with the flexibility to pick up a variety of languages and technologies. The other 4 were dedicated students that had worked very hard, but just didn't have the mindset to really make it in the development arena, but would still make solid tech support, technical writers, and technical managers.

    -Rick

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
    1. Re:Matters entirely on the industry. by uncqual · · Score: 1

      I think this goes directly to the article's point. A BSc in CS from a 4 year university should mean more than just the ability to program in a particular environment. It's important that there be a good supply of people with broader skills and it would be nice to be able to reasonably assume that anyone with BSc in CS from a 4 year university is likely to have these skills and/or have been meaningfully exposed to a wide variety of concepts. Sadly, even 25 to 30 years ago, this wasn't true even for quite a few BSc CS fresh outs from universities that had a decent reputation (albeit these people often didn't have stellar "in-major" grades). Therefore, I view the article as reflecting on us having reached an unfortunate point in an unfortunate long term trend.

      A degree from a tech school doesn't mean that the person doesn't have the potential to work effectively on a wide variety of problems in a wide variety of environments in a wide variety of roles -- just that it would never be assumed. In my experience however, it's quite rare to find a junior tech school grad who has the breadth of knowledge of a very good junior 4 year BSc CS grad. Unfortunately, even using the BSc "screen", a hiring manager wastes a LOT of time when looking for quality junior (3-5 years experience) developers so when looking for diamonds, hiring managers tend to look in diamond mines, not in iron ore mines.

      I've seen (and suffered with) some horrible web and "office application" code that was written by people who obviously had no intuitive sense of algorithmic complexity and what the impact of an O(n^2) algorithm was as n got beyond their little test case. I've also seen (and suffered with) similar "multi threaded" code written by people who seemed to have only the barest of notions about concurrency control. In most cases the developers who wrote this code viewed their jobs as "just web and/or office applications" development and didn't understand why they should be interested in such "details".

      Typically, as their career progresses, most people end up narrowing their scope a bit and going deeper in those areas as there are only so many hours in the day and personal passions vary widely. The university is sometimes the only place that someone is "dragged" through areas that don't immediately strike them as interesting (even though they sometimes discover they are interesting once they are exposed) -- best not to squander this learning opportunity.

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    2. Re:Matters entirely on the industry. by ardle · · Score: 1
      I agree with the spirit of your post.
      As someone who works in web development with Java, I'd disagree with your rating of tech concepts, tho:
      • pointers: you should keep track of your references in Java ;-)
      • memory management: check Internet for bug reports of memory leaks in major vendors' J2EE servers
      • stacks, linked lists: Java (now) has the useful Collections API built-in. You still need to understand data structures (and threading - and, since the WeakHashMap, memory management concepts) to use it properly. For example, data for a drop-down menu on a web page would probably come from a List type in the popular J2EE frameworks: the developer may find it more useful to build the list in a TreeSet and then "export" this to a List for use by the framework...
      In fact, the non-existent latency due to virtualisation (JVM) means that you should code Java carefully in all the examples you mentioned!
      My "conversion" course had many students who initially knew next to nothing about computers. We went from Java (Basics) to C++ (Algorithms and Data Structures), used C and shell commands in our Operating Systems course (I can't imagine how someone would be allowed to use Java to teach Operating Systems!). There was a big drop-out rate in initial stages; at the course's end, some of the "green" students were doing better all-round than the technophiles.
    3. Re:Matters entirely on the industry. by RingDev · · Score: 2, Interesting

      I think this goes directly to the article's point. A BSc in CS from a 4 year university should mean more than just the ability to program in a particular environment. Stop right there. A 4-year BS at a university does not mean MORE than a 4-year BS from a tech school. It means something DIFFERENT.

      I have a buddy who works in the laser microscopy industry. He has a 4-year EE BS from a tech school, almost all of his coworkers have 4-year EE BSs from Universities. They are all extremely smart guys. The University guys have an edge on him in some of the theoretical areas, which is to be expected. But he has an edge over them in engineering a product that will optimize a lot of the theory and limitations of their production abilities. For instance, he stepped in on a project that another engineer was working on. The project was functional, but just barely, all of the theory was spot on, but it wasn't anything that they could sell. So my friend took over, refining the layout and functionality of the electronics, removing almost 500 feet of wiring, completely restructuring the layout, designing new enclosures, mounting systems, etc... Could he have figured out the theory behind the original engineering all by himself? Probably, given enough time. But the University grad has more knowledge on it, and so he could come up with that design faster. Could the University grad have turned the proof of concept into a sell-able box? Probably, given enough time. But the tech school grad has more knowledge on real world environments, functional design, fabrication, and economic and production constraints, so he could come up with that design faster.

      Me personally, I have a tech school AS in comp sci with a BS in Computer Information Systems (CS focus) and a BS in Computer Information Management. I've been doing software development since '97 in the military and as a civilian as a contractor and full time employee. I've worked with uneducated prodigies, grad school masters, and tech school graduates. And I have to say, if I need an entry level application developer for a business environment application, I head straight to the local tech schools and look for a student who is ace-ing the courses and getting along with his/her classmates.

      It's not because I think tech degrees are better than university degrees. It's because I think tech degree course catalogs have more pertinent classes to the industry I work in than university programs do. If I were working at MS or Google, trying to find more people to work on a new search algorithm, or the next version of Windows, I would move my recruitment efforts to the universities.

      I've seen (and suffered with) some horrible web and "office application" code that was written by people who obviously had no intuitive sense of algorithmic complexity and what the impact of an O(n^2) algorithm was as n got beyond their little test case. I've also seen (and suffered with) similar "multi threaded" code written by people who seemed to have only the barest of notions about concurrency control. I have also seen university grads look at a O(n^2) problem and find amazing ways of optimizing the compiler, creating custom memory management functionality, and working on making it the most efficient O(n^2) function they could. Just to have a tech school grad look at it and say 'you know if you reorganize your code's structure, you wouldn't need any of this'.

      Once again, I'm not saying either degree is better than the other, just that they are different, and the graduates of both programs will likely have different things they can bring to the table.

      -Rick
      --
      "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  189. Telling comment by Yogs · · Score: 1

    Coming from an Ada man:
    "From our experience and that of our customers, we can say that a real programmer writes Ada in any language. "

    Um, no. Different languages have different strengths and weaknesses, different emphasis, and find best application in different domains. It's natural that differences in programming style fall out of that.

    I'm a LISP man, so I initially bought into the idea he expresses (replace Ada with LISP), but a few years in the business world have been enough to change my mind. Formal analysis has potential, but is still more often an academic pursuit than an industrial one, so I suspect that insularity is clouding his judgment.

  190. Re:Variety Rose Hulman CS in the late 80s by dmeranda · · Score: 1

    I went to Rose from 1986 to 1990 for CS. Back then we learned these kinds of things:

    Languages: FORTRAN (as the first language), C, Pascal, Ada, Lisp/Scheme.

    Assembly: DEC VAX, also had to do machine language BY HAND in hexadecimal (lower than assembly).

    Hardware: computer architecture; had to design simple CPUs from the gate level up (yes, including instruction decoding, number multipication, etc.). And if you took EE courses too (which myself and many other CS students did), you even learned how the gates work from the individual transistor level up.

    Theory: lots of algorithms, complexity, Knuth "stuff", automata. Even dabbled a bit in denotational semantics, lambda calculus, etc. Not to mention lots of math including descrete math and numerical computation.

    Other: compilers (but at least once we could not use Lex/Yacc generators, we had to work through parser generation BY HAND. Then we actually had to produce real machine code output, do wimple optimizers, etc.)

    That's what I consider learning comp sci. Exposure to so many different aspects, including very low-level hardware, that you really knew what the computer was doing.

  191. Java Programmers == Typists by Anonymous Coward · · Score: 0

    Java programmers are nothing more than glorified typists, stringing together the latest 'cookbook' code, and modifying it to do something half-way useful.

    Java programmers are not taught 'the basics' since the attitude of java itself is 'Let java take care of the hard stuff for you'.

    -Don't worry about memory management, let java do it for you
    -Don't worry about pointers, let java do it for you
    -Don't worry about concurrency / OS level functions, let java do it for you.

    It's taking the 'programming' out of programming, and replacing it with a typist.

    "Use the latest java 'cookbook' code for everything."

    Don't worry, programmers and engineers will always be needed.

    Java proffessionals will always have jobs too, data entry is a need that will always exist

  192. Ada?!?!?! by Mr.+Slippery · · Score: 1

    Quoth TFA,

    As founders of a company that specializes in Ada programming tools for mission-critical systems...

    And here I thought we'd driven a stake through the heart of Ada back in the 90s. It lives!

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  193. List Addition: CGI in C++ by Dareth · · Score: 1

    Took a web dev class at the uni. Writing CGI in C++ is so much more painful than doing it in Perl!

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  194. Java == Jobs? by Keeper+Of+Keys · · Score: 1

    I thought OSX was written in Objective-C.

  195. Re:Kids These Days Don't Know How To Write Fast Co by BradleyUffner · · Score: 1

    Consider the Document Object Model (DOM). Each node in a DOM tree holds a reference to its parent and all its children. So if a client object holds a reference to any object anywhere in the tree, none of it is available for collection. That's a memory leak.


    That's not a memory leak. It's only a memory leak when the program loses its reference to the memory and it can not be recovered at all in the program. In your example since every node has a reference to it's parent and children the memory can still be recovered. All you do is walk to the root node from that node, then recursivly free the children. It would only truly be a memory leak if you tossed out the reference to your first node, there are no other references to anything in the tree, and yet the nodes in the DOM stay in memory with no way to free them.
  196. Not why I went by SuperKendall · · Score: 3, Interesting

    But, the whole reason to GO to a University, is to get the skills/education to make more money when finished, than you would have if you had not gone.

    That's not why I went to college. That's why you go to a trade school.

    I went to college as a CS major because I loved programming. I went to college because I enjoyed learning, and wanted to round out my education in a lot of ways.

    That I happened to be able to get a job after was because I was able to take all of the very abstract concepts I had learned and apply them to practical matters. But I had always been doing that on my own all through school anyway - why would I need school for that? Anyone can do that on their own, schools are there to teach you things that are hard to grasp or learn on your own.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  197. C skills? by Heembo · · Score: 1

    Sure, mastering C and ADA skills might help me become a good college professor who has no clue ow to be productive in the real world; but I'll take my 10 years of Java skills, home ownership and a high 6 figure salary over the drudgery of college professorship any day. Idiots with PHD's.

    --
    Horns are really just a broken halo.
  198. Luddites or Trolls or Both by Tablizer · · Score: 1

    Mathematics requirements in CS programs are shrinking.

    Most for-pay programming does NOT involve higher math. That's the reality. Yes, every bit of knowledge is nice, but there is only so much that can be spent on every topic.

    The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.

    Using existing tools to avoid reinventing the wheel is an economic necessity. Those who master the tools will leave from-scratch bit-twiddlers in the dust and unemployed. To be productive and competitive with cheap foreign labor, we have to plug Lego's together, not make Lego's.

    The resulting set of skills is insufficient for today's software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals.

    Anything, no matter how brainy, can be offshored. Those who personally know the customer seem better protected, not those who using magnifying glasses to twiddle individual bits. It is schmoozing that saves the remaining programmers, not extra doses of trivia.

    A further pitfall of the early use of Java libraries and frameworks is that it is impossible for the student to develop a sense of the run-time cost of what is written because it is extremely hard to know what any method call will eventually execute.

    Our tools are reaching ever higher levels of abstraction away from the hardware. Their statement is like complaining that cars are not Model-T's where one can replace and repair their own engine with a screwdriver, hammer, and duct-tape.

    The authors are from "AdaCorp" and are bashing Java to sell more Ada contracts. (I don't like Java either, but for different reasons.)

  199. Computer science vs. computer programming by Tony · · Score: 1

    Hey, this is fun.

    It's called computer *science.* It's supposed to be theoretical first, practical later. You don't see chemistry classes dumbed down for the sake of the industry, except when you're taking a class specific to working in the industry. Yet chemists have no problem finding employment.

    It seems what all y'all want is to provide another educational track. Rather like the distinction between mechanical engineering and sniv... civil engineering, it seems there's a demand for computer *science* (those who wish to understand the discipline as completely as an individual can), and computer *programming* (in which an individual learns C# + Visual Studio 2010).

    Those in the first category won't have problems finding employment, at least assuming they have any kind of skill, and can figure out for themselves how to apply it to a particular problem. The second group will find themselves losing out to overseas programmers who have exactly the same skillset, but will work for 1/5th the wage.

    I've worked in the industry for 18 years, and worked with computers for 27. In all that time, the *best* people have had a firm, fundamental, abstract understanding of computers. They were trained as computer scientists, rather than as Java programmers. In general, those who have been trained as programmers first and computer scientists second have a harder time adapting to unique situations, and have difficulty thinking of solutions that are both creative and sound.

    Programming is a tool in the service of an engineering goal. Focusing on programming as an end to itself is like training carpenters by teaching them only how to use the hammer and saw.

    --
    Microsoft is to software what Budweiser is to beer.
  200. Re:outsourcing ? by Tablizer · · Score: 1

    They are just using "offshoring/outsourcing" to scare developers to use their products/services. They don't even bother to discuss what skills are being offshored and why.

  201. Re:outsourcing ? by curmudgeon99 · · Score: 1

    Any companies that have not really done outsourcing will use it as a scare tactic. However, AFTER a company has actually bet the farm on outsourcing, then the fear comes from Managment. I worked for a large insurance company that outsourced a ton. Well, after those disasters came in terrible and all the code had to be thrown away because it was sloppy and hacked, it is my MANAGERs who fear outsourcing. They know they will still be required to meet their deadlines but they know that outsourcing is only useful for repetitive, idiot-proof assignments, with heavy oversight from a US developer. I no longer fear outsourcing as a competitor--just as an enemy of quality.

  202. Sounds like a problem with THAT school by smitth1276 · · Score: 1

    If their introductory courses aren't preparing students for later courses, it seems a bit silly to be blaming any particular language. Introductory courses are all about concepts, and Java is perfectly suitable for that.

  203. Java is too high-level for a complete education by Coop · · Score: 1

    CS students should learn low-level concepts: registers (assembly language, the parts of a CPU) as well has higher-level more abstract software engineering practices. Java is a great language for the abstract stuff (at least a stepping-stone to Ruby :) but give me C and assembler for the low-level stuff. CS students should be well exposed to both. Mere programmers can learn one or the other.

    --
    "If you're not passionate about your operating system, you're married to the wrong one."
  204. Excellent summary, minor quibble... by alispguru · · Score: 1

    Functional programming is about 30 years old (going back to the mid 1970s).

    Functional programming dates from about 1958.

    Which makes it 50 years old in 2008.

    --

    To a Lisp hacker, XML is S-expressions in drag.
    1. Re:Excellent summary, minor quibble... by joel.neely · · Score: 1

      Meaning no disrespect to Lisp (I actually own a copy of the Lisp 1.5 Programmer's Manual), I was dating functional programming from John Backus's Turing Award Lecture of 1977, rather than from its Lisp heritage. I did so for two reasons:

      1) Backus was specifically presenting FP as an alternative to imperative programming, highlighting the paradigm/style contrast that is currently relevant. His work certainly drew on predecessors, but his notation and algebraic style of reasoning bear (to my eye) a much stronger resemblance to modern FP languages than either of those do to Lisp.

      2) Lisp can certainly be used in a functional way, but from the beginning also contained imperative-style features in the name of efficiency. In his Turing award lecture, Backus seems to have deliberately opted for expressiveness and purity over compromise, again a modern FP issue.

      However, I think we'd agree that the roots of functional programing go back further than either McCarty or Backus (e.g. Frege, Curry, Howard, etc.), and the point remains that the Old Ones figured out things we still don't use in mainstream programming.

  205. You guys are crazy by wurp · · Score: 1

    I can't understand how you can possibly argue that it's better to use a language that makes it easy to make a certain class of common mistakes (buffer overflows, using uninitialized memory) than to use one that makes those mistakes impossible?

    I programmed in C++ for about 7 years before I moved to Java. I think I was fairly hot stuff in C++ - I was very adept with the STL (I started using it when the only freely available implementation was the HP one, and I wrote several sophisticated frameworks that have now been duplicated in boost). Even so, everyone occasionally fails to initialize memory, or fails to bounds check, and so ends up with a bug that just causes phantom behavior. Until you can duplicate it in an emulation type environment like Purify, finding the source of the error is nigh on impossible.

    Now I write code in Java. Occasionally I need to resort to a JNI call to some C or C++ code, but mostly it does everything I want done, and when I fail to initialize memory, or overwrite bounds, I get a stack trace that tells me what I did wrong & exactly what calls were going on when it happened.

    Java is far from perfect - I personally prefer Python for most things. But using C/C++ to write application code, unless you have very strict memory requirements on the target platform, is just crazy.

  206. Wrong subject, as usual by BaldBass · · Score: 1
    The subject should have been:

    Learning Java doesn't help you learn C memory management

    Now that's news!
  207. important by treak007 · · Score: 1

    It is very important for students to start learning a low-level language. This way, they teach themselves to pay attention to smaller details and thus write better code. It is much harder for a java coder to sit down and start coding in assembly then it is for an assembly coder to sit down and start java. Low-level languages prepare students for other languages and reinforce important base concepts which are vital to a balanced education. Just remember, web-based and scripting languages wouldn't have a platform to run on if it wasn't for c/asm.

    --
    Klingon Software is not released, it escapes, inflicting terrible damage onto the enemy as it does
  208. is replaceable bad? by in10d · · Score: 1

    We are training easily replaceable professionals...

    That's what the business needs, isn't it?

    For a project manager, it's better to have a team of replaceable Java professionals, than a bunch of non-replaceable "proper language" programmers.

  209. third incarnation. by krischik · · Score: 2, Informative

    Earlier this year Ada even went into it's third incarnation now called Ada 2005 (ok, it took a bit longer to ion out all the ruff edges from the new standart):

    http://www.adaic.com/standards/05rm/html/RM-TTL.html

    Martin

  210. Folding @ Home? by killmofasta · · Score: 1

    The 'Folding @ Home' link you provided in your sig is the *PERFECT* example of a peice of software with a well intentioned design, who's implememtation falls completely flat. COMPLETELY. Lack of check pointing (after about 1 weeks of worth, it crashed on its own, corrputing its datafiles, which it retrives from the internet anyway leaving a WEEK OF LOST PROCESSING)(FYI did you know that IBM mainframes in the 50s did checkpointing? That you could run for hours, and step forward to the EXACT instruction that caused the failure? ), poor graphics port rendering,( Dont get me started on the UI, which "blows Chunks" ) as well its handling of priortitization? I am not short of experence in the use of either distributed computation, like OGR and primenet, or rendering with network rendering packages.

    If Folding @ Home is the best example of acedemic developed software, contrast it to the history of Multics. It is a theoretical TOY, and in its current implementation a shining example of bad implementation. How much more productive it could be with just a few minor changes, but, you may rationalize, all that lost work is insignificant.

    Folding @ Home BLOWS. ( The idea of getting others to contribute to your efforts at rational drug design is a good one, especially if you can get others to do the work to come up with something like the gene amplification patent, but why not just fool the SETI @ home people into thinking they are actually doing something worthwhile? )

    This RANT will come up again, to those who INSIST on promoting something that is in such stark contrast to the discussion.

    "If universities don't produce well-rounded educated people where will they come frmo?"
    They will come frmo liberal arts colleges, lead artistic lives, and create corporate sclupture.

  211. Reply:tasty, Java is good, Java is good .... by OldHawk777 · · Score: 1

    Try netbeans 6 ... tasty, Java is good, Java is good ....

    Also, as relates to ... "The theory of relativity doesn't work right in Arkansas."

    As you approach a "black-hole" event horizon "relativity" breaks down, physics ceases to exist as an "EinsteinBohr-domain" universe, and beyond the Universe-brane (UBrane) or through a black-hole dissipating "EinsteinBohr-domain" gravity ... there is the endless levity field.

    The question now becomes ... Could Arkansas (like Washington, D.C.) be in the endless field of levity?

    --
    Unaccountable leaders are masters, and unrepresented people are slaves. How do US and EU fare?
  212. In defense of the article by iPaul · · Score: 1

    I see a lot of posts talking about how useless math and C are in "the real world." Well, it depends on the "real world" in which you live. Most of us will find ourselves writing code to help a company do stuff on the interwebs. That's where most of the jobs are and little of it really requires anything more advanced than the basics of programming and a little bit about databases. Thanks to frameworks like Rails, you really don't have to know much about databases, either. You also don't need a computer science degree to do this. In fact, after CS 101 just get a degree in business or get an MIS degree. Getting a CS degree because you want to work at Accenture doing in Java what many have done before you in COBOL is a perfectly fine thing to do. Getting a CS degree to do it is like getting a biology degree to sell fish at the local pet store.

    If your "real world" involves interfacing computers with physical devices, then you need more math and more low-level stuff. For example, even if you're working in Java, you may need to talk to devices over serial lines (which Java stinks at) or you may even need to write your own devices to read/write to device memory. Not many CS grads actually wind up doing this. A lot of people who got degrees "CS" and work in "IT" feel like this is useless knowledge, but someone had to write the software for their car's GPS, or braking system, or that reads the various sensors all throughout their car and posts warning information. Things like braking systems are sometimes written in "dead languages" like Ada because they need to be real time and safety critical. There is a real time Java, but programming in it is quite different that regular Java.

    The point is, don't think about your narrow slice of the "real world" and then think that's all there is. By training nothing but Java programmers, with only a vague understanding of what actually happens inside the physical computer, we loose our ability to generate the people that will write software for braking systems, avionics suites, robotics and plant control. Also, the people who do that kind of work can often step into a web application environment and pick up whatever language they need. I've seen that transition occur often, but I've never seen people who are just Java hacks make their way into "real" programming. Maybe we don't need as many of those guys as we need ColdFusion experts ;) but it is good training for just about anything else you want to do with computers. So, I think their hack at Java is a very valid criticism of relying on Java and not having students learn something about what a computer is/does at a low level that only languages like C can provide.

    --
    Leave the gun, take the cannoli -- Clemenza, The Godfather
  213. Questionable language choices by StarKruzr · · Score: 1

    C and C++ I certainly understand, but Lisp? ADA?? Why? Neither of these are remotely relevant anymore. Fortran is more relevant than those.

    --

    +++ATH0
    1. Re:Questionable language choices by Doctor+Faustus · · Score: 1

      Lisp has been an influence on other languages for almost 60 years now. Having some idea of how it works is a good thing, even if it's restricted to a month during Comparative Programming Languages.

    2. Re:Questionable language choices by Luthair · · Score: 1

      If you scroll to the bottom the authors are from AdaCore. Its rather amusing really, if you take a look at any job board you'll find thousands requiring Java, yet you could count the number Ada positions on one hand, and the number of Lisp positions with the other.

    3. Re:Questionable language choices by krog · · Score: 1

      Ada, though revolting, is a good (enough) language to teach many software design concepts. Its fascist strong typing, encapsulation, interface vs. implementation separation, and perverse verbosity are a great introduction to a life as a replaceable Java programmer.

      Lisp, on the other hand, teaches not the concept of software design, but of language design and computation itself. Limitations of syntax disappear. All software design patterns are equally possible, yet not forced upon the programmer. Lisp isn't the most practical language around, but its consistency and possibility can make a programmer consider other languages in much more detail. The whole "code == data" concept is worth the price of admission alone.

      Fortran is relevant today mainly because mathematicians and physicists have spent the last 20 years not wanting to rewrite the code they wrote for the 20 years before that. From a software design or computation theory standpoint, Fortran is useless in the 21st Century. (The only remotely palatable bits of modern Fortran come from other languages anyway.)

    4. Re:Questionable language choices by ceoyoyo · · Score: 1

      Sure they are. You're just mistaking what they're supposed to be relevant TO.

      Anything but C++, .Net and Java might well be irrelevant to a software engineering program, or a trade school diploma program, but they're not irrelevant to a computer science program, because they have particular features that are important for computer scientists to grasp, or they nicely illustrate concepts that are important for computer scientists to be familiar with. Algorithm analysis, formal logic and calculus are all irrelevant to most software engineers, but they're the tools of the discipline for a computer scientist.

  214. professorship by krischik · · Score: 1

    But you have been missing that those proffessors are also the managing directors of AdaCore [1]. 6 figure salary - sure if not 7.

    Before you call "cheating" remember the intended audience for the original article.

    Martin

    [1] http://www.adacore.com/

    1. Re:professorship by Heembo · · Score: 1

      Oh even better. A few over educated shills crying cause they cant find cheap ADA programmers. Give Me A Break.

      --
      Horns are really just a broken halo.
  215. Re:Start simple and use different types of languag by ceoyoyo · · Score: 1

    Data structures, and to introduce object oriented programming.

    Python works well for data structures because, as you say, it can do everything but it's a very readable language and makes it easy to focus on the concept rather than the programming.

    It's great for OOP because a lot of the mechanics are visible. You don't have this pointers popping up automatically for example. The self reference is the first parameter to the method, it's quite obvious where it comes from.

  216. Re:List Addition: CGI in C++ by Burnhard · · Score: 1

    Only the boiler plate stuff in C++ is pain for CGI. I maintain and write some Perl scripts at work; I sometimes think they'd do well in an obfuscation competition.

  217. professors emeritus by Fnord666 · · Score: 1

    The minute I saw "professors emeritus" I knew the article would only have an incidental connection with the real world.

    --
    'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
    1. Re:professors emeritus by Anonymous Coward · · Score: 0

      ... except that they run one of the more successful Free Software companies around, and are both active software developers. www.adacore.com

  218. Calculators and children by ebunga · · Score: 1

    You wouldn't give a calculator to 6 year old kids learning math, would you?
    That's why my sister decided to pull her kids out of public school and give homeschooling a shot. They were teaching first graders how to do basic arithmetic with calculators.
  219. Too bad I don't have any mod points to use anymore by Tran · · Score: 1

    We where discussing this article at work for a bit and came to the same conclusion.
    Here as the two of us as IT generalists we create programs at varying levels of abstraction depending on the need.

    Having gone the old fashioned route in the 80s of Fortran, Assembler, Pascal, Cobol and C, and later C++ and now adding in Python. In 99.99% of the cases I don't care about what happens at the assembler level. I need to rely on the guys who write the CLRs and IDEs - that is their problem domain. I solve computational business problems, automation control problems and data collection, access/storage problems not assembler problems.

  220. Disagree by Anonymous Coward · · Score: 0

    I actually agree with what you said, "A degree gets you in the door for a job", but disagree with the general thrust of your post.

    A degree gets you in the door for a job. A solid foundation in the basics of your industry ensures that you won't become obsolete.

    Imagine, in a few years, a whole new paradigm of parallel computing comes out that requires most programmers to learn to write parallel threads and greatly optimize for parallelism (this is just an example, as I can't think of another right now).

    Now, students who don't know dick about how their programs work, but just learned java or ASP or some other crap from memorization and high-level basics won't have a clue and will be screwed...

    meh

  221. But knowing those langs helps a lot ! by curri · · Score: 4, Insightful

    You may not find some languages (Scheme, Haskell) practical, or useful for getting a job; however, they help you understand certain concepts a lot better. If you really learn Scheme, you'll understand recursion, and will also get an appreciation for syntax (since scheme has none :); Haskell will teach you typing (templates etc) and lazy evaluation. Of course, you *could* learn those things in C++ or Java, but the concepts will be every unnatural, so chances are you won't really grok them. After you've learned the concepts, then it is relatively easy to apply them in a different language.

    1. Re:But knowing those langs helps a lot ! by Creepy · · Score: 1

      Incidentally, they really didn't teach recursion in my Scheme classes, those focused almost entirely on list processing, especially linked lists. Recursion was, in fact, taught in my Software Engineering I class in C++. I don't think the concept is easier or harder in any particular language, but Scheme and LISP have a bit nicer syntax for recursive functions (mainly, they are inline in a parenthesis chain and not spread into a function and main section). I did a lot of recursion in LISP for my AI classes.

      With the same respect, I've never had a C or C++ course that covered function pointers or threads, didn't have networking or databases in my specialty of usability and computer graphics, had minimal instruction on user and file/data manipulation (e.g. regular expressions like awk and a number of features from the standard template library), etc, so often there are lots of things you can learn on your own. Most computer languages are fairly easy to learn but hard to master.

    2. Re:But knowing those langs helps a lot ! by Anonymous Coward · · Score: 2, Interesting

      Incidentally, they really didn't teach recursion in my Scheme classes, those focused almost entirely on list processing, especially linked lists


      Maybe one of us missed something... how do you traverse a list in Scheme?

      (define (walk l)
        (if (null? l) '()
                      (walk (cdr l))))
      That's recursion.

      (let loop () ... (loop))
      That's recursion.

      In fact, in RnRS there is no *iteration* mechanism in the language other than recursion, unlike in CommonLisp for example. All apparent iteration is just syntactic sugar around recursion.

      As a result, RnRS Scheme implementations are required to be safe for space when doing tail recursion. It's a fundamental point of the language, and directly ties in to how it handles large data structures, including lists.

      If your course touched on Scheme without making this obvious, you got ripped off. Or you had an instructore who very ingeniously avoided using recursion to operate on lists! Who was it?

    3. Re:But knowing those langs helps a lot ! by johnnyb · · Score: 1

      "I don't think the concept is easier or harder in any particular language, but Scheme and LISP have a bit nicer syntax for recursive functions"

      More importantly, scheme is tail-recursive, which means you can write loops recursively and not suffer stack overflows.

      For more on recursive programming, see here

    4. Re:But knowing those langs helps a lot ! by Anonymous Coward · · Score: 0

      Hmm, having used Scheme for a couple of classes in college I have to say that I think recursion is at least as well taught by doing some basic exercises - e.g., having students write a recursive function and then convert them into tail recursion - in a more useful language. Plus, if people saw recursion being used in languages like C++ or Java then you might be able to assuage the paranoia I've seen in the workplace surrounding recursion. I remember less than a year out of school I had to write a function to do something that was textbook example of when to use recursion and my supervisor (a smart CalTech PhD) wasn't comfortable leaving the code, even after reviewing it and seeing there were no problems. He was worried about call stack overhead (which even back then had become a non-issue) and infinite loops (even though it was a very short method he had reviewed and knew was okay). I haven't written a recursive function or method since then because work beat that practice out of me.

      I think the same goes for most skills - they're as well taught in every day languages and you'll breed familiarity with the techniques by not shoveling them off to some arcane language students aren't ever going to see again. I do believe in learning multiple languages, but generally for larger concepts and reasons that those you mention.

    5. Re:But knowing those langs helps a lot ! by EnderGT · · Score: 1
      Post 21957546: will also get an appreciation for syntax (since scheme has none

      Parent: All apparent iteration is just syntactic sugar around recursion

      so, wait... does Scheme have syntax or not? I'm confused...

    6. Re:But knowing those langs helps a lot ! by jkauzlar · · Score: 1

      I can't imagine doing list processing in LISP without recursion.. maybe you have a narrower definition of recursion?

  222. You're barking mad. by rjh · · Score: 4, Insightful
    I hold a Master's degree in Computer Science with a focus in information security. I have also worked in the private sector in a variety of IT jobs, so don't think I'm some propellerheaded academic. I have also taught programming courses at the university level. I call shenanigans on your entire argument.

    I am a headhunter for high end roles at investment banks, and we are close to classifying CompSci as a "non degree", along with media studies, languages, etc

    So, what, you're going to hire math geeks only? People with degrees in mathematics or operations research, or perhaps some of the hard sciences? In my own experience, while there are some non-CS degrees that are excellent preparation for a CS career, only a CS degree is a CS degree. It is lamentable that some schools have embraced the trade-school mentality, but many more have not. When I was teaching courses as a graduate student (just a couple of years ago), the curriculum began with Java and quickly shifted to Haskell. A neighboring institution still uses Ada as an undergraduate language. There's also a legion of Knights of the Lambda Calculus who are trying to get Scheme reintroduced to the undergraduate curricula in several institutions in the area. Intellectual diversity about languages is alive and well in the academy, based on the institutions I've seen up close and personal.

    Also, who is this "we"? You and someone else who shares your prejudices? Or is this you and the senior engineering staff? If you're about to decree CS as a non degree, maybe you should get the input of the people who will be most brutally affected by your shortsightedness.

    Java is fine for teaching design patterns, and classical algorithms like Quicksort, or binary search.
    But you can't do operating systems

    So glad to know that you think design patterns and classic algorithms are worth studying.

    Look, pick up a copy of Cormen, Leiserson, Rivest and Stein's Algorithms textbook sometime. That's the definitive work on algorithms--if you need an algorithm, it's probably sitting in CLRS somewhere, along with some beautiful mathematical exposition about it. Every algorithm listed in the book can be trivially converted into Java. So why the hate for teaching CS with Java? It's a perfectly sensible language for many very important parts of CS.

    Further, I've taught operating system design in Python. Yes, Python. When talking about how a translation lookaside buffer works, I don't write C code on the board. I write pseudocode in Python and say "so, this is how it looks from twenty thousand feet." On those rare occasions when we have to get down and dirty with the bare metal, then it's time to break out C--and we leave C behind as soon as possible. I want students to be focused on the ideas of translation lookaside buffers, not the arcane minutiae of implementations.

    After all. Implementing it is their homework, and it involves hacking up the Minix code. In C.

    Their reason apparently is that it is "easier".
    I have zero interest in kids who have studied "easy" subjects.

    If it was an easy subject, would changes need to be made to make it easier?

    If it was a spectacularly hard subject with a 50% washout rate, would changes need to be made to make it easier?

    I've been in courses where 50% of the class washed. They were horrible, horrible classes. The pedagogy needed to change. The learning curve needed to be smoothed out and made gentler. This is in no way equivalent to saying it was made easy. The fact you think otherwise brands you as an intellectual elitist who can't be bothered to think logically about his own prejudices.

    A computer "expert" is not someone who knows template metaprogramming in C++, or compiler archaeology in BCPL, or the vagaries of the Windows scheduler.
    It is someone who understands computers at multiple leve

    1. Re:You're barking mad. by DCFC · · Score: 1

      >So, what, you're going to hire math geeks only? No, physicists, electronic engineers, occasional economists. I would love to recommend more CS grads, but the quality is too low. To be sure, I don't expect CS courses to prep for my speciality, but I despair of grads who don't know O(N), or only speak one programming subject. I despise essays. >If you're about to decree CS as a non degree, maybe you should get the input of the people who will be most brutally affected by your shortsightedness. I'm sure I said that *I* am a CS grad, and have shared my view about them with my peers. Their reaction is typically to try and outbid me on witless newbies. As for algorithms, I would ask you to read my post. I am entirely comfortable with Java as a language for patterns and algorithms. I said this explicitly. If you are going to call me on this, at least do me the courtesy of reading what I say. Same applies for explaining buffering in Python. I learned this stuff in pure pseudocode, not C/C++, bu then I got to play with a real O/S. If my earlier post is too hard for you to read, I will summarise it as that I do not have problem with Java, I have a problem with *only* Java. >If it was an easy subject, would changes need to be made to make it easier? CS is not inherently easy. But you can choose to teach the easy bits, many do. I see the results, and they are a perverse combination of horrifyingly dull. >The point of a CS degree is to allow you to learn with phenomenal velocity--to know where to look for answers, to know how to read the papers, to know how to integrate all that into your noggin very quickly. Agreed, where we differ is that this is an ideal that is not only in decline but is in serious danger of disappearing altogether. You are confusing what I say about the "usefulness" of C++ in *exactly* the way I said it was not to be confused. (read my post). I can be convinced that Java, Perl, VBA, SQL, or force of mental will staring at the screen is better than C++ for a given task. That is not my point, and if you had read my post, you will have seen that. As a HH, I care about C++ because my clients do, and agree it is often used when not the best tool. But in my experience I see a lot more of Java inappropriately chosen because of the poor breadth of the decision makers. My point is that if a CS course did (say)Haskell, Perl and Java, I would not have a problem. But choosing only to do Java because the others are are hard is not the way to my heart, or a top flight job. By "hard" you should understand I do not mean "awkward" or "tricky" but conceptually challenging. Some of C++ falls into the first two categories, some doesn't, but no single language is rich enough to educate a computer scientist well. C++ is the best in my opinion, but you'd learn more from doing Java and Haskell than by just C++

      --
      Dominic Connor,Quant Headhunter
  223. thoughts... by er3s · · Score: 1

    You know, I went to University and most of the people I work with didn't. Sometimes I'm referred to as the "educated ***hole", that's fine. I took C++, and .NET and JAVA and any other initials you want to throw in there. If you're learning fundamentals, it just depends on how far you want to be abstracted away from it. To me, learning Swing was a waste of time, it felt like it was something a guy threw together while nursing a head cold and bong. Java's RMI was great to learn, but C++ interested me. Some students in my class did whatever the teacher told them to do so they could graduate and some others memorized the textbook. There were very few that understood what was actually going on. Things like pointers, vectors, and linked lists eluded them. If you want to teach someone the underpinnings, sure, use a language that can blow you whole leg off, but when it comes time to the real world, most of us sit on enormous frameworks and spend much of our time gluing pieces of those frameworks together rather than worrying about how to touch the metal without being burned. University is a business and like any other, is in it to make money, so you teach "the hot language" to get students to enroll. Most programmers are afraid of C++ because of the punctuation and complexity, so fine, use that framework, sit in the comfortable corner, and let us earn top dollar, and you can use a language that abstracts that away from you, but when there's a deep bug and you can't figure it out, because you didn't want to spend the three hours to read about pointers and memory tables, oh well, you can pay me to fix it.

  224. cheap American Dentist Assosiation programmers? by krischik · · Score: 1

    If you did the shortest research [1] before posting you would know that Ada - like Pascal from which it decents - is named after a historic person [2] and as such is written Ada. This in turn means that you oppinion is rather uninformed.

    But hey, this is /. - what do I expect.

    Martin

    [1] http://en.wikipedia.org/wiki/Ada_(programming_language)
    [2] http://en.wikipedia.org/wiki/Ada_Lovelace

    1. Re:cheap American Dentist Assosiation programmers? by Heembo · · Score: 1

      My 2 letters of of incorrect capitalization does not change the fact that these "professors" and shills. Get over yourself.

      --
      Horns are really just a broken halo.
    2. Re:cheap American Dentist Assosiation programmers? by Heembo · · Score: 1

      Ah, knowing how anal retentive you are - that was "ARE shills". Anal retentiveness that only an Ada programmer could love. I'm going to back to my high 6 figure Java job now. Have fun with your ancient Ada. log.info("Ada is for monkeys");

      --
      Horns are really just a broken halo.
  225. Re:Sounds like a person problem, not a language pr by Sta7ic · · Score: 1

    I'll agree that you need to understand concurrency before you leave uni and try to claim you're competent, rather in the program contexts or the OS contexts.

    I disagree that pthreads require lunacy, however. They're pretty simple to use.

  226. AMEN brother. by www.sorehands.com · · Score: 1

    So what about not getting above a C (grade, not language) in a course. When I took my Operating Systems I course, the professor said that 35% would be considered A material and 40% would be considered Nobel prize material.

    What would I know? I sat in on a friend who was teaching OS concepts at Harvard for fun.

    1. Re:AMEN brother. by Chris+Burke · · Score: 1

      So what about not getting above a C (grade, not language) in a course. When I took my Operating Systems I course, the professor said that 35% would be considered A material and 40% would be considered Nobel prize material.

      Well, the fact that a C- or below wouldn't count toward your major and thus was essentially failing the course is so what. This was the after-the-curve grading. I think it was partly a fault in how the curve was done in addition to the difficulty of the course, since there was a cluster of A's (people with previous exposure and really sharp/hard working students), basically no B's, and then a bunch of C's and D's. When faced with that kind of unusual distribution, I would ideally hope that the professor would push up the second groups' grades.

      --

      The enemies of Democracy are
  227. NYU Alum by Anonymous Coward · · Score: 0

    As an individual who majored in CS in NYU during the transition from Pascal to Java, I agree a lot with what they wrote.

    I went from C++ in my high school AP class to Pascal in my 102 course in NYU to Assembly as 201. The year after I did 100-level they switched the beginning classes to Java, I have no idea how those poor suckers handled Assembly or any of the other concepts in CS.

    The best way is to teach the lower-level languages first because (1) weeds out the non-serious students; and (2) teaches you close to the source, you get a better understanding of how the computer works and how the programs are run. Once students have a solid grasp of that, then Java is a great tool to learn.

    I don't work in CS, but I still find myself using the algorithms and the math in the curriculae for other tasks, but not Java. Dropping the math and the way the algorithms are generated is the height of folly.

  228. Science or Engineering? by Khelder · · Score: 1

    I think the crux of the problem is that computer science as a field has grown a lot since most CS departments were founded, and is less like its roots (usually math or engineering) than it used to be. This isn't because math and engineering aren't important to CS, but because there's a lot more substance in computer science as distinct from other subjects than there was decades ago.

    As a result, a lot of "Computer Science" departments have an identity crisis, mainly between mathematics and (software) engineering. Some of them even realize it.

    The problem is that there are lots of facets to this whole computers and software thing, and IMNSHO, you can't teach it all in one degree program---there's just too much.

    The problem is that few departments/schools/universities (pick the level of the hierarchy you think is most blameworthy) have wanted to admit that they really need to give students a choice between specializing in computer science OR software engineering and not pretending that you can be an expert in both (at least with one 4-year BS). There's a lot of overlap, clearly, but there are also differences in what each specialty needs to know.

    Then there's related areas farther afield from traditional CS roots, like MIS and HCI (human-computer interaction). Most traditional CS departments (or, to be fair, most any other single traditional university department) couldn't grant degrees in these even if they wanted to, because they require knowledge from areas that have historically been in different departments.

  229. Non-Student by Bellum+Aeternus · · Score: 1

    As someone who taught themselves to develop software (first with scripting languages, then Java, C, and C#) I'm routinely surprised at how little "trained" developers understand. Basic concepts like word alignment, unrolling loops, and efficiency are lost on most people. Hell, I've seen more than my fair share of apps coded in C that never release memory until the very last second; wholly expecting the OS to clean up after them.

    In all honesty first and second year courses should be taught in languages like Java and C#. They a lot easier to grasp and allow entry level developers the ability to build some confidence. C and it's children can be taught later in the collage career.

    What'd I'd like to see is more algorithm logic being taught. Puzzles that require thinking outside the box. Like finding the best worst case scenario for a given problem instead of alway just thinking about the best best case.

    Also, why can't any undergraduate seem to understand event driven models? I think this worries me the most.

    --
    - I voted for Nintendo and against Bush
  230. How much theory should programmers have? by Animats · · Score: 1

    Ignoring the language issue, the authors raise the question of how much math and theory should programmers have. That's worth exploring.

    I'm a programmer with a strong theoretical background. I have an MSCS from Stanford, I've built a automated proof of correctness system, and I've done a physically based animation system which required building solvers for stiff systems of non-linear differential equations. I've done hard real time programming for mobile robots, network protocol design, assembly language programming, and logic board design. So I've actually used most of that theory.

    Most programmers don't. If you're just doing web site back ends, you don't need all that stuff. I'm not even using much theory any more.

    There's also the question of what theory to teach. I got too much discrite math and not enough number-crunching. Automata theory isn't very useful, but Bayesian statistics is. Academics can guess wrong on this. In the mid-80s, Stanford had a program to train "knowledge engineers", who were trained to write rules for expert systems. Where are they now?

    There are only about 20,000 real computer science jobs in the US outside of academia. That's not the mainstream part of the field. The other 500,000 programmers don't need that much theory. Teach them Java and Python and how to work on a big project, not number theory.

    I had to learn big-project work by spending years as a maintenance programmer for mainframe operating systems. Didn't get any training in school on that at all. That was a lack. Once I got that, I was able to use the theory on hard problems. I needed both kinds of training.

    1. Re:How much theory should programmers have? by iPaul · · Score: 1

      Maybe we need to train the 500,000 web back end developers the same way we train other trades. Hammering out ColdFusion page after ColdFusion page is a trade, as far as I'm concerned. Even Java can be boiled down to a trade school type discipline, where you spend a few months learning the language and a typical IDE. On a construction site you need a number of guys that can swing hammers, but you don't need them to be Civil Engineers. The point of the theory is to teach people how to think about the problems they encounter. Coming from a school like Stanford, as an employer, I would assume the following. You're probably smart. You're certainly competitive. And you've been challenged by being around smart people. Okay, whatever I throw at you, you will probably figure out. This is especially good if I have a complex system that requires a lot of high order brain power. Say, for example, I was building a UAV and a simulator to teach people how to pilot the vehicle. However, if I needed someone to crank out JSP pages for an on-line sock store and I have to do it for $50 an hour or less, and I need them done before the penalty phase of my contract kicks in, you're not my man. Just like if you were a Civil Engineer I wouldn't hire you as a framer.

      --
      Leave the gun, take the cannoli -- Clemenza, The Godfather
  231. Topics like this are why I love Slashdot by PNO · · Score: 1

    "There are just two kinds of [programming] languages: the ones everybody complains about and the ones nobody uses." - Bjarne Stroustrup

  232. Calculus != Mathematics by Nicolay77 · · Score: 1

    Nah, what we need when programming is more like the content from 'Concrete Mathematics' book by Knuth. With some linear algebra.

    Calculus is way overrated in relation to programming.

    However, mathematical knowledge is fundamental to make a good programmer. More if it's related to writing proofs instead of just solving exercises. Writing a proof really feels like programming to me.

    Calculus != Mathematics.

    --
    We are Turing O-Machines. The Oracle is out there.
    1. Re:Calculus != Mathematics by delt0r · · Score: 1

      I guess i depends on what you do. I have used it a lot in programing. ie PID controllers and kinematics etc. Calculus really means to calculate (kind of). I used it as a example because its more practical than some other branches of math. Note that linear algebra is related to basic calculus. Even a GPS program i worked on needed proper spherical geometry corrections that the other programmers just didn't get.

      --
      If information wants to be free, why does my internet connection cost so much?
    2. Re:Calculus != Mathematics by Nicolay77 · · Score: 1

      Calculus is the branch of mathematics more related to normal engineering.

      I can see that if you do something related with it, you end up using more calculus than other branches of mathematics.

      It's just that software is not normally related that much with the other branches of engineering, however your job sounds very fun. Kudos to you.

      --
      We are Turing O-Machines. The Oracle is out there.
  233. The real issue in programming languages by Animats · · Score: 1

    The real issue in programming languages is "what do you have to worry about?" They all have, in theory, equivalent power. But some languages fully handle some parts of the problem for you, and some don't. The trouble spots in different languages vary considerably.

    When programming C, one has to obsess on pointer management. Storage allocation is completely manual and arrays are not only unchecked, but ambiguous in size. Most C errors are related to pointers. The language also offers almost no help in dealing with concurrency.

    Java does a good job of dealing with pointers. Arrays are checked and memory is garbage-collected. So Java generally doesn't have pointer problems. The language knows a little about concurrency, but not quite enough. Java programmers can stop worrying about pointer management, but still have to worry about race conditions. Most of the problems in Jave programming relate to interfaces with large, troublesome libraries.

    Ada deals well with array size issues, but storage allocation is still manual. Concurrency is addressed in a rigorous way. Ada programmers have to worry about how to structure their problem within Ada's constraints. More of the problems in Ada are at the front end in design; once the basic structure of the program is right, the pieces tend to go together well. This does not map well to "extreme programming" or "agile programming".

    C++ is in the unique position of providing hiding (or "abstraction") without memory safety. No language before C++ had that combination, and no language since has had it. C++ has the same problems as C, but there's a layer of wallpaper over them. Memory errors in C++ tend to be fewer than in C, but more obscure when they occur. C++ tends to be a ritual/taboo programming language; there are many things which one must not do, and those things are not obvious.

    That's a more useful way to think about the problem. Ask the question "in what ways do programs in this language break?"

  234. Re:List Addition: CGI in C++ by Dareth · · Score: 1

    They have contests for obscure C/C++ code. Nobody bothers for Perl.

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  235. Don't forget about English by borat4president · · Score: 3, Funny

    And do you people know how damaging English can be to those studying linguistics? No cases, no genders, just two articles, only 26 letters, decimal numerals, vowels not ommitted from spelling, etc. etc.

  236. I studied CS at NYU, where the authors teach by Ang31us · · Score: 1

    Computer Science is one of my two majors (got two minors as well, NYU is a great school to go to if you want to study many related disciplines). I graduated in May 2001 and have a picture of me during my graduation ceremony in front of the fountain at Washington Square Park with the Twin Towers of the World Trade Center in the background, less than 4 months before we were attacked. I have heard of Professor Dewar, but had not heard of the other guy and never learned from either of them. At the time that I went to NYU, they were teaching the two terms of froshman introduction to programming in Pascal. Luckily, I had formally studied introduction to programming in C/C++ somewhere else and obtained an A in both classes, so I placed out of the courses during my advisement as I entered the university.

    My biggest mistake as I entered NYU was signing up for Computer Systems Organization I (in x86 assembly language), Discrete Math, Calculus I/II (that's an accelerated Calculus course with a ridiculous amount of advanced material), and if I recall correctly Introduction to Psychology (which I had already taken in High School and got an easy A). To this day, x86 assembly language is my least favorite way to code, even though I think I got a B+ or A- in Computer Systems Organization I. I considered dropping CS as a major after that term and started to pursue Psychology as a second major. Computer Systems Organization II was a cinch as it dealt with operating systems and programming in C (I love C, because it's so straight-forward and I can't picture any young nerd that would not enjoy an OS course) -- I got an A in the class. I also took C++ and UNIX, which played to my existing strength in C++ and got another A; that professor also threw in a little bit of Perl, CGI, and multi-threading in Java at the end of the course. I also took Computer Architecture the following term and really enjoyed designing a MIPS processor from low-level logic gates (AND, OR, and NOT). We implemented a MIPS processor simulator in C, including the ALU, a number of required operations, and I even implemented an assembler for MIPS instructions for my simulated processor as part of my final project for that course; I got another A in that class as well and that was the point where I decided to finish my major in CS at NYU -- MIPS assembly language was the antithesis to x86 assembly language and showed me that assembly languages can be intuitive and don't necessarily have to suck ass. I also studied Distributed Operating Systems, Programming Languages (where we implemented a database system in LISP, writing only 4 or 5 functions, each less than 5 lines of code; two of them were only 1-liners and all used recursion) along with all the other required stuff like Basic Algorithms and Calculus; even tried my hand at Computer Graphics, but I got a tendinitis injury in my writing arm because I was working full-time at startups while taking notes in class and had to drop the course. One of my minors is Mathematics, so I also studied Linear Algebra, Statistics, and Logic (great course; we formally proved all of arithmetic and algebra).

    I was studying CS at NYU right around the time that CS department first switched the introduction to programming courses from Pascal to Java. At that point in my life, I had a real distaste for Java, but it is my primary language at work these days. At that time, Java was taught as a senior-level elective and you could graduate from NYU without ever having written a single line of Java code.

    What I saw from the students in my CS classes at NYU was that there were a handful of us who almost knew the material without having been taught it...it came so naturally to us and we knew the answers to the questions before the professor even asked the question. I also saw tons of students get weeded out in the first few introduction classes. I expect that this weeding out process happens at all universities, regardless of the language that the introduction courses are taught in.

    When learning C/

  237. Yes... by ed.markovich · · Score: 1

    Java was essentially my first language. I did BASIC as a kid and Pascal in High School, but Java was the first language that I used to actually earn money when I worked during undergrad. Most of my undergrad was Java based as well.

    A testament to Java is the fact that there's a small company out in Cleveland whose entire operation runs on software I wrote for them during one summer in my undergrad days. It does all their books/invoices/shipping/recieving/inventory/reports, and there hasn't been a bug in it since it was delivered in 2000 or 2001. The APIs and garbage collection as well as platform independence (for straight-forward things, anyway) of Java allowed me to focus on business logic and actually deliver what the client wanted. I am actually very proud of that project, and there are other projects I wrote during those years that are still being used by real businesses. I am not sure that C/C++ would give me the leverage to pull that off so quickly in a one-man show.

    So the upside is that Java allowed me to be a fairly experienced writer of real-world software by the time I got my bachelor's degree. The downside is that I graduated w/o having a good sense of compilers, memory management, algorithms - but that's sort of language-independant. I am sure that if my undergrad was C/C++ based, I'd have at least a better sense of memory management but at the time I was really just interested in writing software and Java let me do that.

    During my senior year I was recruited by a C shop, so I had to learn C. They bought me K&R (and a few other great books like Code Complete). I read K&R in one shot over a weekend, and I was a good C programmer from that day. I actually was much better at C than a lot of more experienced programmers exactly because C is a simple language and it kinda needs to be learned from K&R rather than by trial and error. So being a good programmer + reading K&R as gospel was a good combo.

    After working in this C shop, I started to get a sense of all this stuff I've never had to deal with before - intricacies of compilers and linkers, insight into programming languages and memory management, etc. So certainly WORKING with C (and C++) having come from a different background was thought-provoking. It made me realize that all the stuff I didn't care about in undergrad (and didn't HAVE to care about because I had Java) had relevance. So when I went for my Masters' degree, I focused a lot more on basics like Programming Languages, Compiler Construction, OS, and Algorithms. In fact, I was very lucky to have Ed Schonberg (one of the authors of the article we're talking about here) as instructor for the first two and other great instructors for the other two (I made an effort to take courses w. instructors who were well recomended as people I am going to learn a lot from)

    Perhaps I am biased towards myself and my learning patterns, but in general I think most people go into Computer Science because they want to be programmers (and hopefully because they love programming) - and I think that the job of an undergrad education is to make sure you know enough to be a working programmer. Frankly, I didn't learn anything about compilers in undergrad because I couldn't care less about something I didn't have to use in a non-trivial way. So it would be in one ear and out the other, and I suspect many people are like that. In undergrad, you're supposed to learn and think as a programmer and maybe get some exposure to the big paradigms that are out there.

    When people go for Mater's, I expect that to mean they have a real interest in the actual science and that's where the hardcore basics should be taught. There's no point to teach someone all about compilers if they aren't good enough at programming to actually have to compile anything in their daily work! This is part of the reason I strongly advocate for people to go into the industry between undergrad and masters' - real-world experience should be a good motivator for why a lot of this stuff matters.

    At

  238. Re:Copypasta by TheSpoom · · Score: 1
    --
    It's better to vote for what you want and not get it than to vote for what you don't want and get it.
    - E. Debs
  239. DON'T DO THAT by Anonymous Coward · · Score: 0

    They also don't like to reopen classes. In Ruby, classes can be added to at will, so if you want a method to calculate the average value of an Array, you can simply define it as a new method on the class. But Java programmers will create a Util module, throw a method in there that takes an Array, and think nothing more.

    Aaaargh, stop the madness. What the Java programmers are doing is perfectly sensible. (Mind you, the ideal Ruby solution would probably be to use a mix-in for your average method, then dynamically including that mix-in into Enumerable from the code that requires it.)

    The idea that we ought to put every operation under the sun inside a class is a bad idea. When you write a bunch of code that looks like it's using plain old Array methods, but is in fact using your own add-on methods to the Array class, this leads to spaghetti pretty quick.

    1. Re:DON'T DO THAT by Phleg · · Score: 1

      Putting everything as a method inside a class is just as bad an idea as having language designers be the last say in whether or not methods end up in a class. At least dynamic languages allow the developer to choose the right solution.

      My original example of an avg method on Enumerable is one reason. Calculating the average of values in an array is simple, but needn't be expressed more than once, anywhere. Just because the language designers didn't have the foresight, or simply chose not to include such a method in the mixin doesn't mean it's not the right approach.

      These kind of things only serve to reduce the spaghettification of code, in my experience. And without things like that, or even without operator overloading, you simply can't have awesome, intuitive libraries like Hpricot.

      --
      No comment.
  240. Where did the basics go? by Anonymous Coward · · Score: 0

    While I don't think Java a bad language I am amazed that so many CS departments switched to using it almost exclusively. I have also noticed that some CS departments no longer teach computer organization...what's up with that? Why not teach the basics of how a computers work? Is it that difficult to teach them about logic, memory, CPUs, ALUs, buffers, I/O, and how it all fits together? Is assembly and C that tough?

    One excuse I have read in the past was that departments were trying to make their programs more "female friendly" by trying to bring more art, multi-media, and philosophy into CS. OK, well it is great if they want to make it more welcoming to everyone, but how does taking computers out of computer science do that? It just means when a girl graduates she is less prepared than she should be.

  241. Nothing new by tm2b · · Score: 1

    20 years ago, Carnegie Mellon's introduction to programming course was taught in Pascal, so upper level courses (all taught in languages like C and Lisp) had to start out by teaching real languages first.

    What this really comes down to is people griping that they have to teach things that they wish somebody else had already taught students. Nothing to see here, move along.

    --
    "It is our blasphemy which has made us great, and will sustain us, and which the gods secretly admire in us." - Zelazny
  242. Re:Sounds like a person problem, not a language pr by Cederic · · Score: 1


    Having done multithreaded programming in too many languages I must say that Java does make it much much easier. Although I'd hope/expect that other modern languages provide similar support (not tried concurrent programming in Ruby, .net yet).

    Still need to know the theory and what you're doing of course. But it's not difficult, just needs you to think things through properly. I'm continually confused by the media reports that programmers struggle with concurrent code; I think most of them just never really tried it.

  243. Right tool for the job by kbahey · · Score: 1

    While it is not right for a university to teach only one language, I see a lot of mixing up in the discussion.

    There are two big domain areas for people who program computers (call them CompSci, Engineers, or whatever, the terminology is irrelevant).

    a) Systems Programming

    These are people who write stuff that is gluish in nature, be it kernel algorithms, device drivers or similar things. Even things like Web browsers, text editors, word processors, compilers, ...etc. fall in that category. Java is not the right tool for this, but something closer to the operating system and/or the hardware (e.g. C, and even C++). People working on these type of problems require the features and capabilities of these languages.

    b) Business Application Programming

    These are the people who build higher level applications for end users. These are things such as an accounting application, air line reservation systems, banking systems, ...etc. In this case, lower level languages are not the right tool. Having pointers and having to deal with memory leaks stands in the way of delivering business logic. COBOL used to be the language for this, and now Java fills that niche. The businesses hiring these people do not pay them to invent a new process scheduling algorithm, nor make sound come out of a new sound chipset.

    If one tries to use a language that is more suited to (a) for (b), or vice versa, then it is the wrong tool for the job, and will stand in the way.

    A university graduate of engineering or computer science should be exposed to both types of languages and both types of problems, not just one. When the graduate they can make the decision which one to pursue as a career.

  244. A humble suggestion by doom · · Score: 2, Interesting
    Rather than indulge in this academic excercise of arguing which languages will stretch your brain in just the right way for you to claim you're the top dog, why not pick a project in the world that needs to be done, and go to work on it, and learn whatever you need to learn to work on the project.

    With some luck, your work on the project might even bring some money in, and you won't need to impress employeers with a long list of languages. Even if the project doesn't bring any money in, you're resume will show that you're someone who can work on an actual project.

    ...oh forget it. Waste of breath, right? Let's just go back to "My syntax can beat your syntax, so there!".

  245. the title says it all by Anonymous Coward · · Score: 0

    'Computer Science Education: Where Are the Software Engineers of Tomorrow?'

    Not in a Computer Science course!

    Computer Science != Software Engineering

    Real computer science doesn't care whether you use Java or C or Haskell or a single tape Turing Machine, as they all recognise the same class of language anyway!

    People who go to uni to do Software Engineering with the goal of working for some large corporation automating 'business processes' hunched over in a cube with all the other troglodytes deserve what they get.

  246. The same thing was said about BASIC by Clouseau2 · · Score: 1

    I remember Computer Science professors said the exact same thing about BASIC. But I learned BASIC first, along with LOGO, Scheme, C, C++ -- and now I use java. I think java is a great language, it's easy to learn and you don't get bogged down with memory management/pointer crap. I think learning the basics without diving down into the nitty gritty nasty stuff is a good way of learning things, I'm surprised a professor would disagree!

  247. Learn ASM and C, think in algos,ditch the flochart by Anonymous Coward · · Score: 1

    When I started out programming, I learned assembly language for the Radio Shack Color Computer (Motorola 6809 cpu if I remember right). That took quite some time, but once that was done, I was able to *think* in algorithms at a moment's notice so that I didn't need to flowchart anything at all. This skill is very valuable to me as I am able to write 'bespoke code' at a moment's notice with a minimum of BS. In my case I have to 'code or crash' as writing software is my livelyhood.

  248. Programming is NOT computer science. by iPaul · · Score: 1

    People think Computer Science = Learning How to Program. Actually Programming is akin to learning how to frame a house. It's a trade that you learn, a craft that developed with practice. You learn what works and what doesn't (sometimes it's what works and what doesn't work for you, individually). You can even follow strict standards on how you should program from various methodologies or certification programs. However, this is not Computer Science any more than building a house to code is Civil Engineering.

    So, what is Computer Science? For the most part Computer Science is applied math. Even Computer Science majors don't think of it this way, especially the ones that dread math. However, let's break it down. At the lowest level you have a CPU, memory and devices, which you are controlling with a stored program as opposed to physical wiring. The nature of the CPU and the instructions, their flow, and how the execute can be described by abstract machines (turing style) and boolean equations. At this level you could talk about computers on pen and paper without actually having to worry about silicon and wires. In fact, those who really love computer science love taking the architectures class where they basically build a CPU.

    As we move up from the lowest levels into the operating system, we see issues like dead-locking handled through mathematical proofs of why a deadlock can or can't happen. We prove why certain communications patterns can or can't result in certain states (i.e. why 2-phased commit works). Implementation is performed to actually test the theory in real life. However, you could spend all your time working on the theory. This is also true of graphics, communications, artificial intelligence and databases. You can pick up journals in all these areas and find articles that are nothing more than a proof of why a given algorithm will work. Implementation is a way to check to see if the theory works in the real world, and in a sense tests the assumptions more than theory. The area of software engineering is an odd bird in that it straddles code and people issues. Really, it can fall between a management problem and an engineering problem. However, even some software engineering approaches are grounded in math.

    Now, with that said, why do we require programmers to have a Computer Science degree? My thinking is that we shouldn't. In the late 70's and early 80's a number of schools opened up that taught people COBOL programming as a trade. I think we should do that for Java, and it may be high time. Microsoft could open Microsoft education centers teaching Windows and .NET the same way companies teach plumbing. We don't require the electrician wiring your house to have a degree in Engineering, but they still manage to get it wired. Same thing with whipping together some JSP pages for an online store. We have lots of tools to take the programming burden off the programmer, just like the electrician has tools and training without having to resort to 4 years of classwork in physics, chemistry and math. We can teach them the basic language, the IDE, and how to take requirements and translate them to code according to (pick your methodology). They then take a certification exam and they're good to go.

    What would happen to the computer scientists? First off, if we had a ready source of skilled programming labor, we would come to the conclusion we graduate too many computer scientists. If you had a company of 100 programmers you might have 5 or 10 computer scientists on staff the same way you might have an engineers on staff at a construction firm. Of course that depends what you're doing. If you build bridges you might have more engineers than if you just frame single family homes. Some companies would have no computer scientists and would just body shop out programmers. Others might have 1 computer scientist for every 5 programmers.

    Second we would see fewer people going to get a degree just to work in IT. In fact, it might become more of a training after a BS in Ma

    --
    Leave the gun, take the cannoli -- Clemenza, The Godfather
  249. extra tags by Narcocide · · Score: 1

    I would like to propose the addition of the following tags to this article:

    javasucks, noduh, oldnews ...thank you.

  250. obligitory Russian joke by peter303 · · Score: 1

    In Russia computers program you.

  251. Differences in vocabulary ? by curri · · Score: 1

    You may be using the terms college and university in a different way that I (and maybe others?) do. Are you getting a 4-year degree or a 2-year one ?

    1. Re:Differences in vocabulary ? by cayenne8 · · Score: 1
      "You may be using the terms college and university in a different way that I (and maybe others?) do. Are you getting a 4-year degree or a 2-year one ?"

      Apparently so. In the US, college == university. You go to college at a specific university. This is a 4 year degree.

      Trade schools or community 'colleges' that do 2 year 'degrees'....aren't really considered as a college when that term is used in conversation in the US. If you mean one of those, you'd specifically say 'community college or community school'.

      I the US, college == university == 4 year degree (or even grad programs too).

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
  252. Re:Why is "Computer Science" Staffing S/W companie by sciurus0 · · Score: 1

    If you want to learn theoretical computer science, where would *you* go to learn it? A school that has many classes on theoretical computer science. If necessary, enroll in graduate-level courses. In this respect, CS isn't different from any other discipline at most universities. The bulk of the theory-focused classes will be past the BA/BS level. It's only once you have your undergrad degree and come back for more that they begin to teach you how to be a computer scientist, political scientist, or whatever the term for your field is.

  253. Are these professors that ignorant? by chriscorbell · · Score: 1

    Blame the coursework, not the language. You can write Java from the command-line, you don't have to be taught to "rely" on GUI just because you're using Java. I write Java every day and never use a GUI framework (it's the network, stupid). You can (and we do) write Java components as services, libraries, CLI tools - if you're not teaching that but only teaching how to write Swing apps, it's your fault not the language. That said, C/C++ and assembly should certainly still be taught, and I believe they are in most normal compsci departments. But a -far- greater problem I've encountered are colleagues who *still* really don't understand OOD, reuse, and software architecture: thank you to those universities who are using Java to stress that, it's what the industry needs more of. Fie to the fuddy-duds.

  254. Not a problem here by RzUpAnmsCwrds · · Score: 2

    I'm in CS at the University of Colorado, and while our program as a whole is more like software engineering than CS (which is why it's in the engineering department), that happens to be exactly what I want.

    For "higher-level" courses (data structures, algorithms), I've programmed in C, C++, Java, Python, and C#. But I've also taken a digital-logic course where I "programmed" in Verilog. I've taken a (required) course where I programmed in M68000 assembly. I wrote a compiler in another required course that had to emit x86 assembly. I've coded for various RISC architectures, too.

    Is learning about the entire hardware-software stack CS? No, probably not. But it's valuable in and of itself, and it's something that I'm interested in.

    Now, if you're teaching pure "CS", the language is really irrelevant. CS is about the theory, which is something that you can implement in practically any language. But that's not the kind of program I'm looking for. It's not the kind of program that most students are looking for.

    1. Re:Not a problem here by Anonymous Coward · · Score: 0

      Hi,

      >I've taken a (required) course where I programmed in M68000 assembly. I wrote a compiler in another required course that had to emit x86 assembly. I've coded for various RISC architectures, too.

      Why not work and get money to learn that?

      >Is learning about the entire hardware-software stack CS? No, probably not. But it's valuable in and of itself, and it's something that I'm interested in.

      Yes, so go work for a company. They even pay you to learn it. (I did that.)

      >Now, if you're teaching pure "CS", the language is really irrelevant. CS is about the theory, which is something that you can implement in practically any language.

      And that's what no company is going to have you learn (or if they do, they have you learn it by sending you to an University, given it still exists and teaches pure CS).

      > But that's not the kind of program I'm looking for. It's not the kind of program that most students are looking for.

      I see. Well, here (in Austria) I wouldn't learn M68000 assembly without getting paid for it. Don't I have anything better to do?

      And I wouldn't go to University for 5 years so that I can learn what I would have learned if I entered the workforce immediately anyway, just without compensation.

      As a self-proclaimed hacker, I maintain that the best way to learn programming is by writing programs. You don't need any school for that. If you insist, go to a tech college.

      But what's the best way to learn the theory and maths behind it? Either spend 500+ years reinventing the theory from scratch, become a permanent resident of the library :-) or go to University Computer Science courses.

      If they still teach the theory, that is.

    2. Re:Not a problem here by cavac · · Score: 1

      > As a self-proclaimed hacker, I maintain that the best way to learn programming is by writing programs.

      Exactly. The more you practise, the better you get. While theory is important, in real-life it's often just that: a theory how stuff is supposed to work.

      And thats - at least for me when dealing with freshly finished students - the biggest problem. They usually do things by the book; which is ok if you're dealing with a long-haul development process. But when you're dealing with production-level systems, not so.

      When the customer calls you because a critical system is malfunctioning or needs a really urgent design change, no expirienced developer should need to initiate a a month-long development lifecycle iteration. You just go in, fix the problem and inform your superior. While this may not get you some shiny ISO certificates, you can count on a happy (and therefore: paying) customer to back you.

      Also, at least here in Austria, i have the impression that CS students aren't teached even the basics of computer hardware maintenance, which should be a requirement for any software developer. If the software you designed starts to behave abnormal, you should be able to at least check that it's not a hardware fault.

      --
      Look, this thing is totally safe! Built it myself, you know. You just press that button like this and then turn that lev
  255. Re: Embedded systems design. by kiwipeso · · Score: 1

    Having studied Software Engineering years ago at CIT, I was not impressed by the concentration on embedded software, it was mainly of use to the few people who saw a future in writing software for traffic lights, etc.
    It would have been nice if they had some allowance for Java, but they didn't.
    I've only used the hardware design stuff I learnt twice, for a wireless network coder project and a neural net process.
    Needless to say, I would prefer that Java be used on low level hardware, as it can easily be controlled and has excellent networking tools.

    --
    - Kaos games and encryption systems developer
  256. WRONG! by Anonymous Coward · · Score: 1

    Sorry, but those professors are idiots. No, Java is not a language to use with systems programming. Likewise, C similar language are equally shitty for the types of things that Java is good at. Where these professors are idiots is that software engineering is *not* about the language being used anymore than engineering is about the screwdriver being used. All courses should be taught with a focus on the engineering concepts, not the language. Using only C/C++ is just a bad a using only Java.

    At my University we were taught primarily in Java to get our feet wet. All the introductory classes were in Java (programming 101, data structures, etc.). All the other more specific sources, like systems, AI, etc. were in whatever language made the most sense for that area (C/C++, Lisp, Prolog, whatever). The catch? None of these courses taught how to use those languages (i.e. the AI class didn't start by spending a month teaching Lisp and Prolog). Students were expected to learn on their own -- those that didn't failed. It was a nice way to weed out the posers looking for a paycheck not a discipline (and there were a lot b/c this was the height of the .com bubble).

    1. Re:WRONG! by Synic · · Score: 2

      LISP takes about two days to learn, so BFD.

      My coursework started with Java in 1998, moved to Assembly in sophmore year, then C/C++ in junior year, then did some Perl, J2EE, Lisp, and much more ANSI C on POSIX systems, and a bit of C++ at the end.

      Every language has it's place, but discounting Java completely is stupid. It's a great way to introduce students to programming concepts. Although, you could equally switch it for Python for the 101 type course and then switch to Java or C# (a pretty good language in its own right), then go deeper with C, assembly, then back up to OO land with C++, side-track for some functional languages with Scheme and Haskell, then to SoA languages like J2EE and C#.

  257. Blame the courses, not the language by wonkavader · · Score: 0

    "Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging."

    Does that describe bad language choice or bad teaching?

    My money's on number 2.

    Java doesn't need a GUI. Why are you having students use one?
    Java VMs are teachable. Why aren't you exploring the VM?

    This is looking for a scapegoat. Examine your curriculum, and in particular what you want to get out of the intro to programming class.

  258. Re:Why is "Computer Science" Staffing S/W companie by Wolvey · · Score: 2, Insightful

    I spent those 4 years programming and not in a university. I've worked alongside people who did spend those 4 years in a university, and some came out with hardly a drop of practical knowledge. While they were reading from a book I was solving real-world problems. The halting problem is a fun exercise in logic, but to say that one must have knowledge of it to realize that writing a compiler in 1 month is unrealistic is... unrealistic.

    Considering the years and (tens of) thousands of dollars you've invested in formal education, I can see why you would want to justify that decision. Personally, the years I spent earning money and gaining experience in the field lead me to believe that a degree would have been a less-than-optimal use of my time and money.

  259. Imperial College by Beliskner · · Score: 1

    Ooooh! I got this from one of my friends -

    Imperial College year 1996-2000: Turing maze solve algorithm with text-based graphical output move by move, recursive -> C conurrent with 68000 assembler -> C++ concurrent with SQL and Operating Systems -> Miranda various programs -> Build a compiler with Miranda -> Parallel programming -> Microsoft Developer Studio C++ -> Java.

    With certain course modules you also get AI and NAND gates + FPGA, MOSFETs, ASIC, machine code instruction-by-instruction, BGP, spanning tree algorithm, routing tables

    I wish I could go on his course! Lots lots more that I don't remember, I've remembered about 30%

    --
    A caveman dreams of being us, the incalculable power and riches. We dream of being Q, then what?
  260. Re:Biased? Still a player by hguorbray · · Score: 1

    The ADA 'ring' security model which microsoft implemented poorly in NT (by bringing GUI and other userland functions into ring 0)

    still makes ADA one of the best platforms for secure realtime systems (think military coms and EW and CCC)

    http://www.cotsjournalonline.com/home/article.php?id=100687

    -I'm just sayin'

  261. P.S. Wonderful job on getting destructors wong... by IBitOBear · · Score: 1

    I even _warned_ you not respond on the subject of destructors...

    YOU: And here I thought Java had no destructors because you had a garbage collector. There's an easy way to "destruct" an object in Java:

    YOU: myThingy = null;

    The above is so wrong on so many levels it threatens to induce apoplexy... 8-)

    At the end of the instruction above, nothing has been destructed at all. The object has lost visibility in this scope. Once the compiler notices that the object has no visibility anywhere it will schedule finalization, which may or may not ever take place. Finalization does not necessarily occur if the program exits before the garbage collector sees and finalizes the object.

    So yes, you don't understand destructors. Having never really _needed_ one, you have never really understood what it is to _know_ and be able to _rely_ on the timely entry into a method/callback at the end-of-lifetime of an object. Oddly enough, if you have ever done any Java programming of a GUI etc, and so been exposed to "window destruction notifications" you _OUGHT_ to know why destructors are important. But clearly you have not learned to generalize your knowledge.

    And amusingly enough, you _AGAIN_ demonstrate that Java only has pointers by having the "alleged reference" mutate from pointing to an object to pointing to "no object" which is something that a proper reference, being immutable over the course of its lifetime, would not be able to do...

    That word. "Mutability". I don't think it means what you think it means. -- (with apologies to The Princess Bride 8-)

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
  262. But... PostScript is practical! by PaulBu · · Score: 2, Interesting

    Learning some of PostScript could be extremely helpful, and you would never know when it can save you 1000 keystroke or 10,000 mouse clicks!

    Some examples:

    * Make lines on someone's chart (available as eps) thicker/different color/etc. Translate it to another language.

    * Add basic visualization capabilities to any program (good luck linking some old dusty Fortran code with graph plotting library of the day, but it is entirely possible to FORMAT some E16 E16 lineto there)

    * Generate some recursive graph(ics).
    Like this...

    * Yeah, good luck writing anything that produces print-outs without PostScript knowledge! :)

    etc.

    Paul B.

  263. Huh? by scott_karana · · Score: 1

    While I've never been a good fan of Java, I audited a course in it to pick up the basis, and it seems to me that all the students in the class were given decent ground to build upon, particularly for C. Java isn't inately a bad language for understanding hardware; it's got the potential, and I suppose some teachers abuse it.

  264. please forgive my illegal code... by IBitOBear · · Score: 1

    Obviously this construct would not compile:

    Thing & thing1 = new Thing; // make some thing
    Thing & thing2 = new Thing; // make some other thing
    thing2 = thing1; // still have two separate things, but the original value of "some other thing" is obliterated by the value of "some thing"

    It was provided for congruency of example not correctness of text. A more useful construct would have been something like

    void assign(Thing & thing1, Thing & thing2) {
        thing1 = thing2;
    }

    and then some convoluted combinations of either automatic values or overtly contrived pointerisms...

    Thing auto_thing;
    Thing * pointer_thing = new Thing();
    Thing & reference_thing = *pointer_thing;
    assign(auto_thing,*pointer_thing);

    Or possibly...

    Thing & thing1 = &some_object;
    Thing & thing2 = &some_other_object;
    thing1 = thing2;

    Or some such, but for teaching purposes the original (illegal) code is more illustrative.

    I went for the cheap but obvious example, and I just know the sophomore in question will go all hoppy all over it.

    It was a deliberate act, so I won't be indulging in defending it elsewhere in the thread. 8-)

    But I apologize to those seeking compilable code examples... 8-)

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
  265. Don't base your business on niche languages by ClosedSource · · Score: 1

    Essentially these guys have a problem because they chose to use Ada - a language that was created for and mandated (briefly) by the government and rejected by the market. If you use a niche language, you're going to have trouble finding people who are experienced in it.

    The idea of "proving" programs are correct is a naive one and the impracticality of doing so is one of the reasons why Ada failed.

    These guys should also realize that support for OO programming was grafted on to Ada after C++ proved popular. So it would be more accurate to say that if you're writing OO code in Ada, you're really writing Simula, Smaltalk, or C++.

  266. Quick summary by frank_adrian314159 · · Score: 1

    Kidz what only knows one computer language are teh suxxors. If tey don't know pointers tey suxxors more.

    P.S. If you don't teach Ada, teh terrosirsts is win.

    --
    That is all.
  267. Mod up by PCM2 · · Score: 1

    Sorry, that's just not the case. OO is just a formalization of what was already happening with good procedural programmers. OO is not fundamentally different that procedural programming-- it is a superset. OO languages force the programmer to do certain things: code modularity, polymorphism, typedefs/classes, etc, and does so in a way that encourage a programmer NOT to come up with their own system to do the same thing.

    Great zot, it's so rarely that I actually hear this spoken aloud that I'd almost forgotten how true it is.

    --
    Breakfast served all day!
  268. Things change by ClosedSource · · Score: 1

    The subject matter that should be taught for a partiular major changes over time. I went to university before Unix and C were dominant and spent a considerable time doing assembly language coding. The value of that experience diminishes every day.

    It's natual for those who spent a lot of time and effort learning (or teaching) now semi-obsolete material to overstate its importance today.

    1. Re:Things change by uncqual · · Score: 1

      I also went to university before C and Unix became dominate and have done a little assembly programming (generally in the form of tiny service routines to implement something hardware platform specific for which the libraries on that particular OS didn't have appropriate routines for) but never as my primary focus. However, I still find the knowledge of this level quite useful for debugging - such as when there's a compiler bug or when there's a bad library for which I don't have the source. I think it's still relevant and BSc CS students should be exposed to it.

      On the other hand, it's been a long time since I found a use for my microcoding skills initially acquired while in school. On second thought, at least I can always realize "it could be harder to debug, I could be debugging microcode and not even have a debugger or accurate simulator" so maybe it is still useful. Seriously, there are probably a lot of better things for most BSc CS students to spend their time on than microcode!

      --
      Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading /.
    2. Re:Things change by BBandCMKRNL · · Score: 1

      My first programming language in college was IBM 360 Assembler. The last time I wrote any assembly code was on a DEC VAX, 10+ years ago. I still find the concepts somewhat useful today when I'm trying to debug weird errors.

      --
      Without the 2nd Amendment, the others are just suggestions.
  269. "Right tool for the job" is damaging by WilliamSChips · · Score: 1

    It always comes from people who care more about choosing tools than about the job.

    --
    Please, for the good of Humanity, vote Obama.
  270. Oh I dont know by Tran · · Score: 1

    back then it was used for AI and her expertise was pattern recognition in some kind of geological graphical data of some sort. The idea was to identify patterns that would lead to oil fields.
    Apparently she was doing it all in LISP at the time...

  271. Vista in Ada? by Mark+of+THE+CITY · · Score: 1

    I suggested as much to someone in 2007, when issue of Vista security vs. XP.

    --
    The clearance system sounds logical. It is not. It is completely arbitrary. -- John Bolton
  272. That .sig by Mark+of+THE+CITY · · Score: 1

    Even if the concentration of 'greenhouse gases' double, man would not perceive the temperature impact.
    Probably not; however, we would notice the impacts of temperature change, such as regionally increased albedo on air and water circulation.

    Ph.D. in Chemistry, and some atmospheric chemistry exposure.

    --
    The clearance system sounds logical. It is not. It is completely arbitrary. -- John Bolton
    1. Re:That .sig by Anonymous Coward · · Score: 0

      > Even if the concentration of 'greenhouse gases' double, man would not perceive the temperature impact.
      Probably not; however, we would notice the impacts of temperature change, such as regionally increased albedo on air and water circulation.

      You're assuming that there would be a temperature change, which unfortunately is not forecastable. The modelling uncertainties are so great that we don't even know the sign of the temperature change that would result, if any, because cloud dynamics could just as easily result in a temperature drop rather than a rise.

      The only place where temperature rises proportionally with CO2 concentration through the greenhouse effect is in a test tube. And the Earth isn't one.

      That was proved conclusively towards the end of the Ordovician Period, when CO2 levels were over 10 times our current ones, yet the Earth was in the depths of one of its deepest ice ages.

      PhD in climatology.
    2. Re:That .sig by typicallyterrific · · Score: 1

      Sigs almost always change my perception of the commenter's opinion for the worse.

      I usually give most posts the benefit of the doubt, until their sigs point out their raging libertarianism, or support for { intelligent design, global climate change denialism, etc } upon which I examine the post more critically.

      I'm still not sure whether that's a bad thing.

  273. Do whut, now? by Enahs · · Score: 1

    "[Java-schooled students] had no feeling for the relationship between the source program and what the hardware would actually do,"

    And compared to that, Lisp is a solid language???!?

    --
    Stating on Slashdot that I like cheese since 1997.
    1. Re:Do whut, now? by whitroth · · Score: 1

      That's (list (is (a solid) (language)))

                  mark

  274. Java is not that bad. But don't forget C, Lisp... by Anonymous Coward · · Score: 0

    I teach at a University and am responsible for the CS curriculum there.

    The article mentions Java as the source of all evil and recommends Ada. I see an Ada slant in the article. Also it mentions C and C++ as beginner's languages, but there are tons of PhDs out there that have called C/C++ a poor beginner's language.

    Though I do not dispute the need for heavy math, and many programming languages in the curriculum. The purpose of CS1 is programming in the small and learning if/for/while and other such constructs. Also, in an objects first curriculum you teach people the art of reuse and the value of encapsulation. CS2 courses build on this to teach full fledged OO and an intro in data structures.

    The level of CS1 and CS2 students can be fairly low. And so the language used needs to create the least amount of unnecessary barriers. C is terrible for this. Ada may be a bit complex. Pascal was favored for years and did its job fairly well until people started looking for an OO language. Java is now used as the Pascal of CS programs. Good to teach basic concepts because it has relatively few barriers of entry (not as few as Python or Ruby though!).

    So we chose Java because:
    1. It is statically typed
    2. It is OO
    3. It has many features modern languages have
    4. It is popular in the industry (no need to convince students to make the effort)

    However, beyond CS1 and CS2, we have a computer languages course (Prolog, Lisp, Smalltalk, Assembler, Pascal, ..) that is a crash course in different programming languages. There we teach principles of functional, declarative, and other languages so students can see the contrast. We also teach recursion w/a vengance. Amazingly students also do some Assembler here and seem to pick it up w/o trouble!

    For data structures we use ansi C! We do NOT use Java for the following reasons:
    1. Java already has data structures.. why reprogram them?
    2. This is our opportunity to deal w/pointers, memory addresses, memory leaks and other such issues
    3. C is still an important language and the lessons learned here are very important for programmers in general

    Later in our program students are exposed to VB.Net and PHP and other such languages but w/o dwelling too much on them (they just use them for their database projects, etc). We also use C++ in our graphics class. We also have a Microprocessor and Assembly language class.

    So our students end up fairly well rounded. I guess the principle to apply here is:
    1. Use a reasonable language for the beginner's course
    2. Don't ONLY use that language, expose them to several languages throughout the curriculum

    I don't believe in Java only.. but Java is just fine as a beginner's class. Though for some students it certainly would be easier if we started out w/Ruby or Python.

  275. Re:Why is "Computer Science" Staffing S/W companie by syousef · · Score: 1

    I spent those 4 years programming and not in a university. I've worked alongside people who did spend those 4 years in a university, and some came out with hardly a drop of practical knowledge. ...and your point is? I know the type but I also know people who've been programmers doing practical work for years and are STILL useless.

    University isn't a place where your hand is held or you magically learn things. You may wish to argue that they shouldn't have been able to earn a degree and still come out clueless, but it's amazing what people will do to pass a test without actually doing the learning. In other words in University, you can learn as much as you want or as little as is needed to pass a test.

    The halting problem is a fun exercise in logic, but to say that one must have knowledge of it to realize that writing a compiler in 1 month is unrealistic is... unrealistic.

    Well you're definitely right. You don't need to understand the halting problem to understand a good estimate for writing a compiler isn't 1 month. However someone who understands computability and who understands how compilers work is much less likely to make such rediculous demands.

    Your dismissal of the halting problem as "a fun exercise in logic" shows that you don't understand its significance at all. There are entire classes of problems that you can run across and that aren't obviously impractical to implement in code. If you don't understand these things and you come across a slightly more complex problem than your typical business problem (fetch and edit data with some calculation) you can bring a whole project unstuck.

    Considering the years and (tens of) thousands of dollars you've invested in formal education, I can see why you would want to justify that decision.

    See, now that's both illogical and just plain nasty. You know nothing about me and why I may or may not want to "justify that decision". I could just as easily argue that since you've decided not to spend that time and money I can see how you'd want to justify working instead.

    Personally, the years I spent earning money and gaining experience in the field lead me to believe that a degree would have been a less-than-optimal use of my time and money.

    Well I'm 32 and I have about 10 years in the industry. If I hadn't done my degree I might have 13 or 14. Not a huge difference even this early in my working life. I've easily made back any money I've spent on my undergrad degree. My current job, and my previous one both required that I have a University degree and paid much better than my first programming job which did not (I would have done better working at MacDonalds than working at that first job.). I understand what I'm doing much better than I would have and at a deeper level than if I'd just coded. ...but go ahead, continue to display bad manners with childish personal attacks and keep telling yourself that a degree is a waste of your time next time you're turned down for a nice job that pays well (or are paid less than you're worth).

    --
    These posts express my own personal views, not those of my employer
  276. If I was the Preident of New York University... by jddunlap · · Score: 1

    Those "professors" would be looking for jobs.

  277. Mental Masturbation by Tablizer · · Score: 1

    Sorry, but universities are meant for education not job training. The fact that jobs are the reason main people go is sadly just another sign of the times. If you look at the long history of universities you'd realise that they have focused on research and the arts. Even the sciences were so abstract that they've didn't have a use for it at the time and for many years to come. Please, lets stop perverting universities for the industry. If universities don't produce well-rounded educated people where will they come frmo?

    Universities used to be mental masturbation for rich kids. Thus, they explored lots of theory. However, now that the middle class is involved and because universities charge an arm and a leg, people hope (expect?) that their education pays off in the work place so that they can pay off their education debt. The problem is that the rich-kid mental-masturbation model hasn't changed to fit the different demographics.

  278. Re:Why is "Computer Science" Staffing S/W companie by Anonymous Coward · · Score: 0

    I completely agree with you, and can in fact relate as well.

    You see, I am finishing up my undergraduate studies and am preparing to go to graduate school. One of the things I need to do is take the CS GRE subject exam. While studying for this I have, many times, had to completely stop what I am doing and go back and "retake" a class. In particular my algorithm and programming languages classes. It has become clear to me that I did not learn what I should have, instead of a CS degree what I got was a "CS Experience". A brief exposure to actual CS.

    At present, I feel completely ripped off and disgruntled. At times it makes me wonder how I will compare with other students. The question of "can I teach myself as well as professors have taught other students?" is constant (hats off to the *1* prof of 9 who actually takes the time to teach me what his colleagues failed to).

    Looking back at the past 4 years (almost) I can clearly see that the CS curriculum was fashioned after exactly what run of the mill employers were looking for (code monkeys). What CS is and entails has been almost completely displaced by what employers want. To be a code monkey, one does not need a deep knowledge of CS.

    IMO, over the years Software Engineering has become its own field, separate in many ways from CS. As such, CS and Software Engineering should be separate degrees. Trying to combine one with the other only harms the quality of a program.

  279. Java really isn't the problem, in my experience by SJamf · · Score: 1

    I fairly recently graduated from a Computer Science program -- it was, frankly, a total disaster, and rather then getting lots of interesting and detailed technical tidbits, I wound up re-hashing things I'd taught myself years before.

    But to speak more to the point of this story: my college had just switched to Java (from C++) as it's primary teaching language, but the language was definitely not the issue, it was the approach. The first semester programming course progresses more or less as follows:

    - A brief lecture on a topic is presented and a demo program is shown
    - Students move into the lab
    - Step by step, students *COPY AND PASTE* code to re-create the demo program
    - (On the "good" days:) students are asked to make small modifications to the code to effect minimal changes
    - Occasionally, these minor changes are slightly more complex, in which case they constitute a "project"
    - Later: everyone passes with a B or better

    Most of the students have no idea whatsoever how to actually write a program from scratch by the end of this semester (small wonder, since they never had to do much more than hit ^C ^V). To compound this mess (and officially to avoid boring the students) the college provides a (rather poorly constructed) library of graphical components which the students get to use so they can "jump right in" to "doing graphics". Unfortunately the library obscures virtually all of the details of how any of the graphical components work, and once the students become used to it, it's very difficult (or impossible) to get them to shift to using something more direct (drawing via Graphics objects or using AWT, for example).

    A further consequence of this approach is that, since time is spent learning the graphical library upfront, key concepts of "real" programming are deferred, sometimes until very late in the semester. This means they're being taught under serious time pressure to fatigued students who have already learned an "easy way" to "program".

    For some reason, Java seems to somehow be connected with this idea of "instant gratification" programming, but it's certainly not Java's fault that this is how material is presented to students. You certainly could teach this way in C or C++ for example (although it might take a bit more work upfront to build the "instant gratification graphics library"). It's unclear to me if the problem is lazy or confused instructors, a haphazard and indifferent educational system, or if it's some need to ensure that no student is ever the least bit bored or challenged by any material, ever.

  280. Re:Start simple and use different types of languag by Spaceman40 · · Score: 1

    Python instead of Java for databases -- with SQLAlchemy you can churn out something interesting pretty quick, with minimal boilerplate.

    --
    I [may] disapprove of what you say, but I will defend to the death your right to say it.
  281. Take the initiative. by jcr · · Score: 2, Insightful

    If you want to fully understand your profession, you'll have to go beyond what you get in the coursework. Look at the assembly code that GCC generates. Optimize some code manually. Write Bresenham's line and circle. Write a knight's tour. Write a threaded interpreter.

    Your degree is the starting line.

    -jcr

    --
    The only title of honor that a tyrant can grant is "Enemy of the State."
    1. Re:Take the initiative. by kabz · · Score: 1

      If it generates x86 code, I refuse to look!!

      Seriously, I started with 6502 code, then 68000 on the Amiga, then did a bit of (paid) ARM3 programming, but I just have never, since I owned a Speccy, been able to look at Z80, 8080 or 8086 up. I suspect the oddly named registers and vast panoply of addressing modes are the scariest things...

      But tell me, is x86 code as scary as I'm treating it? Because I feel bad that I've ignored it for so long, but maybe I'm at the point where I'm just being dumb.

      What do you think? What do people do with assembly language on these chips anyway?

      --
      -- "It's not stalking if you're married!" My Wife.
    2. Re:Take the initiative. by johnnyb · · Score: 1

      32-bit x86 is not scary at all (16-bit x86 is fairly scary). You can get started with my book.

  282. Why, They already got a 2nd job ... by krischik · · Score: 1

    ... at AdaCore [1] a very successful compiler vendor. Sure that makes them biased - but it also means they know what they are talking about. Note that the intended audience of the article (which is not /. btw) knows about there double role. Also some of there former students praised them here on /.

    Of course, you would have know that if you read the article or some of other postings.

    Martin

    [1] http://www.adacore.com/home/

  283. OO in Ada by krischik · · Score: 1

    Actually the only essential OO paradigm which got grafted on later was dispatch - the rest (templates, inheritance) was available on Ada 83. And Ada is still the only language where you have inheritance for primitive types:

    type Day_Of_Month is new Integer range (1 .. 31);

    Sure you can get the same effect using a (template-ised) record type - but it will take you more then a line as the needed template is not part of the STL.

    And speaking of templates - C++ copied the idea from Ada. Ada and C++ influenced each other at various stages of there evolution - just a much as programmers have moved from one to the other (Grady Booch was an Ada programmer at one stage of his live) - I myself have 10+ years of C++ experience (which made me a strong C++ critic).

    Martin

  284. I think your perspective is somewhat dated by ibsteve2u · · Score: 1

    Your comment "Employers realized that well-rounded, educated (dare I say, excellent) human beings are better for the health of a company." certainly applies - to the people that the MBAs and Human Resource types don't call "techies".

    A "techie" is anybody with a computer science or engineering degree of any sort. Rephrased, a "techie" is anybody someone from "Service & Finances" is unable to quickly pass a "quality and value" judgement on because the bean counter can't understand what the "techie" is doing or how well the "techie" is doing it when they stand behind them peering over their shoulder.

    Business in fact loves the idea of Java and anything else that makes people - and their skill sets - "plug'n'play".

    Hence the name change from "Personnel" to "Human Resources"; the more often the corporation can treat people as interchangeable commodities or resources to be sourced at least cost, the better.

    And it is Business with a capital "B" that funds all of those new University buildings and lovely grants, which is the sum total of Business' commitment to "long term thinking" - let somebody else do the latter for them because that is not one of their "core proficiencies" or "profit centers".

    --
    Orwell: "In a Time of Universal Deceit, telling the Truth is a Revolutionary Act"
  285. I agree about Java by Veretax · · Score: 0

    I haven't completed reading the article, just yet, but based on the blurb I'd agree Java should not be taught as a first language, it could be taught as a second or third language. My biggest gripe with my college experience in Software development was we started in an engineering class where we built basic C programs in a Borland C++ compiler, but after that class suddenly we had to take another C/Unix Class and compile on a 'nix framework. Then Immediately after that we had at least two classes on Ada (The second being on OOP Concepts). Now ADA is not a bad language, but I feel that what is needed is more discussion and following a main language through in the early years and then adding other language familiarity on top of the experience gained in another language. How can students truly appreciate LISP, ALOGOL, Fortran, or any other language unless they have some broad experience with at least one language. I also think that Java itself (And I'd add C# to this) can make programmers lazy, and that's my main reason why those should not be taught as first languages. (On a side note, does anyone still program in industry based on ADA?)

  286. Comp Sci education by garwain · · Score: 1

    I took a comp sci course years ago, and have been doing fairly well... steady employment, but low salary because I refuse to move to a major urban center. My thoughts through the courses and still to date is that comp sci should be focused on teaching students one language, it should be teach the students how to perform the proper analysis quickly or on the fly (forget that system lifecycle shit, the only time it might be used in industry is if you are in the management team of a company specialized in software development). Teach the students the logic of how to program both sequential and event-based systems, and expose the students to several languages so they don't so much learn the language as learn how to learn the language. if 2 students attend 2 different schools, one that focuses only on one language (who cares if it's java, C++, VB, etc) and one that teaches a the programming concepts as abstracts, and has courses in several different languages. the 2 students finish their courses at the same time, with the same marks, and apply for the same job which turns out deals with a language neither have been exposed to. WHo is more likely to meet the challange? My courses had covered C, C++, VB, VC++ and sql programming on the PC, and REXX, COBOL, JCL and KIX on a mainframe running VM/CMS. Lets just say those of us who survived the workload are all doing fairly well compared to the quick and dirty progams offered at other colleges where a extensive course in one language creates a comp-sci grad.

  287. Re:P.S. Wonderful job on getting destructors wong. by imgod2u · · Score: 1

    At the end of the instruction above, nothing has been destructed at all. The object has lost visibility in this scope. Did you skip the part where I said:

    "Granted the actual memory won't be deallocated until the next garbage collection cycle but the object is lost as far as the programmer is concerned and the memory is usable if needed."

    Finalization does not necessarily occur if the program exits before the garbage collector sees and finalizes the object. Custom end-life routines (particularly if you want to close IO resources) don't automatically occur in C++ or any language that I know of either. In C++, you use the deconstructor. In Java, you can either call your own finalize function at your will or trust the garbage collector if there isn't a timing critical resource you have to give up. I fail to see a lack of functionality here that you're griping about.
  288. "Slam java"? . please use more accurate wording by Intelopment · · Score: 1

    The authors didn't 'slam java', but simply pointed out that CS students are not prepared as they should be for the real world. I tend to agree with the authors, in that schools are pumping out the least common denominator that fills the classrooms, not putting out solid engineers with good foundations. Foundations in CS are not about languages or vendors or the latest tools in the marketplace but more about concepts such as encapsulation, abstraction, concurrency, efficiency, security, performance, etc, etc. These concepts should be taught in the context of many languages and different perspectives (embedded, web, compilers/OSs, desktop apps, medical/military, etc) with the strengths and weaknesses of many languages and environments. Languages and tools and vendors change over time, but these concepts have not changed since I first wrote Fortran in 1977.

  289. It's not just about practicality by StarKruzr · · Score: 1

    I took an AI course in college that included Lisp and found it to be mostly worthless. All of the concepts you'd want to illustrate can be done with fairly well-studied constructs in C.

    --

    +++ATH0
    1. Re:It's not just about practicality by ceoyoyo · · Score: 1

      Sure. If nothing else you can write a Lisp interpreter in C. That's not the point. The point is to think differently, and unfortunately the language you're using has a big effect on that thinking process.

      Undergrads should be made to learn Objective-C as well. The paradigm is just different enough to stretch that brain. And do some performance coding in an interpreted language like Python or MatLab, with an automatic fail if they use a FOR loop.

    2. Re:It's not just about practicality by mfnickster · · Score: 1

      > do some performance coding in an interpreted language like Python or MatLab, with an automatic fail if they use a FOR loop.

      Maybe I've been out of the game too long, but what exactly is wrong with FOR loops..?

      --
      "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
    3. Re:It's not just about practicality by ceoyoyo · · Score: 1

      In an interpreted language a FOR loop takes forever because the interpreter is running through each step of it, over and over and over again. Optimizing interpreters, depending on how good they are, can usually compile the loop and run it at full speed (like Java) but a pure interpreted language can't.

      For many of the operations where a C programmer would jump to a FOR loop, interpreted languages have functions, which are compiled, that will do the job. It's good mental exercise.

      For a simple example, suppose I have an array and I want to know how many values in it are 10. In C you'd just write a for loop to do a compare on each element and have an accumulator variable to keep count. In an interpreted language it would probably be faster to do something like this:

      count = sum(myarray 10))

      So you're using the built in array comparison operator and a built in sum function.

    4. Re:It's not just about practicality by mfnickster · · Score: 1

      Gotcha. Thanks for enlightening me!

      --
      "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
  290. Re:Why is "Computer Science" Staffing S/W companie by Wolvey · · Score: 1

    ..and your point is? My point is that a degree (or lack of) is not a good indicator of a person's skills.

    However someone who understands computability and who understands how compilers work is much less likely to make such rediculous demands. If you're going to write a compiler then hopefully you'll be doing some on-the-job research beforehand. At this point you will likely discover the HP and its relevance to the task at hand. Otherwise it is more or less useless academic trivia.

    If you don't understand these things and you come across a slightly more complex problem than your typical business problem (fetch and edit data with some calculation) you can bring a whole project unstuck. I don't quite understand what you're saying. I interpreted it as: "If you don't understand these things and you come across a complex problem then you can bring a project unstuck." Maybe you meant to say "If you understand these things..." Anyway, the halting problem in and of itself is not significant unless you are writing a compiler (correct me if I'm mistaken). Like you said, it is part of a whole class of unsolvable problems, but you don't need college to realize that such problems exist.

    See, now that's both illogical and just plain nasty. I apologize, my comment may have been inappropriate. However it was not illogical. Too often we justify our life decisions to ourselves and others because it is painful to consider what could have been if we had made different choices. I'm as guilty as you, thanks for pointing that out.

    I doubt that anybody read my comment anyway, but if it helps deter somebody from going thousands of dollars into debt while missing out on investment opportunities (aside from the time-value of money), then it was worth it. Had I gone to college I would have been paying 10k per year plus instead of earning 50k per year in my junior position. I would have graduated right after the dot com bubble burst, instead of getting my foot in the door with a stable job that had opportunity for advancement and which supported me well through the years of downturn. There is plenty that I missed out on, no doubt, but there was a lot to be gained as well.

    Maybe I misinterpreted, but the gist of your original post irked me. You said the notion of experience over formal education was "complete garbage" when it has served me very well and when my results compare very favorably against others who took the opposite path.

  291. not far enough. by Anonymous Coward · · Score: 0

    The article doesn't go far enough. Language theory is important. Formal methods are important. A basic understanding of low level concepts is important. What the article doesn't mention is the importance of an in-depth understanding of architecture and design, specifically subsystem design. All the theory in the world will not help you write a program that conforms to your required "ilities"... maintainability, reliability, reusability, scalability.... etc. The fact is that this is what you deal with in industry. When you leave school all of a sudden you're not the only one that needs to understand and make use of what you write. Making multiple classes in your system singletons and calling that "design" simply won't cut it.

    What's even more interesting is that I've found that old-school programmers are victims of their tools. The languages available ie C and Fortran, create way too much complexity for the simplest of tasks. This leads to very complex systems that have code-segments no-one, including author, has a prayer of understanding a year later. The developers coming out of school now have the opposite issues and discussed in the article. They don't know enough theory to program themselves out of a paper-bag, let alone build a large-scale system reliable enough to actually be used.

    -RIT grad of 8 months :)

  292. I think it's more about attitude by GWBasic · · Score: 1

    I wouldn't blame Java, but I'd blame the following attitudes:

    • Object-Oriented programming is better / everything must be object-oriented: There are some kinds of programming that don't lend themselves well to object-oriented programming. Access to relational databases is a shining example. Making data access appear to be object-oriented can cause more problems then it's worth.
    • Computers are getting faster / Ram is getting cheaper / Programmer time is worth more then clock cycles: While the statements are true, I fear that such an attitude is used as an excuse for laziness and sloppy design.

    We don't need to optimize our registers; but ignoring the realities of performance when trying to make everything look like pretty objects is just holding us back.

  293. False dichotomy by IBitOBear · · Score: 1

    Actually, since class definitions are bound in C++, the two base classes inherited into the new class, can not, by any definition or possibility, interfere with one another. Java uses "signatures" and so, the classes could possibly be so harmfully interjoined.

    So your concern about the "dangers" of multiple inheritance and semantic cross contamination are based on a false dichotomy. They are predicated on the implementation of a particular language, but not on language theory. So when I say "language X has missing feature Y" it is false dichotomy to argue that "feature Y is essentially flawed" based solely on the reasoning that "since it would be dangerous in language X" it must be a mis-feature wherever it is found.

    See in a language like Java, where "signatures" are searched for in a purely derived-to-base class order, a call in an ancestor could, in the presence of multiple inheritance, cause an implementation in one class to cross-invoke a method from another ancestor.

    In a bound language, where symbols are bound at compile time to the symbols available in fixed scope visibility (like C++), the symbols are bound to either explicit entry points or vtable offsets, that is to known symbolic quantities, there is _NO_ possibility of _accidental_ cross-tree calling. That means that the danger you claim wouldn't be possible.

    The difference is inherent in the difference between the languages, where in java everything is overridable unless it is "final" where as in C++ nothing is overridable unless it is "volatile".

    This actually points out _another_ weakness of Java. At any point in a C++ class one cannot "forget" to finalize and have a descendant bone a stable class. In Java you have to remember to lock every door, or it is opened. In C++ you have to explicitly unlock a door to let your descendants participate in your paradigm.

    Or, to fold it the other way:

    In C++ you _can_ create an interface class with no default implementation at all, or you _can_ provide a default implementation. In Java you cant provide a default implementation. If Java let you provide an implementation for an interface, that interface could _bone_ your class hrearchy because of signature search order. Since every implementer of an interface in Java must recreate predominantly identical code, the empty interface is more likely to induce mistakes born of repetition. Lucky you.

    In short, your entire argument is bunk _outside_ of Java. Indeed Java "invented" the problem you claim they solved by making interfaces only workable as empty lists of functions, because they cannot multiply inherit code because they can only find functions by signature and to classes could implement distinct functions with the same signature....

    Your position is logically circular... With a through understanding of both C++ and Java (and compiler theory and symbol resolution etc) your position reads to me as: "nuh uh, they did it right, because they did what they had to do, because they did it wrong."

    This, of course, is another support of the fact that Java breaks young programmers understanding of important and subtle concepts. You have been mentally infected with some sort of late-binding meme that you think is universal to languages instead of being restricted to, well, Java...

    More clown music here maestro!

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
    1. Re:False dichotomy by GWBasic · · Score: 1

      When I read your posts, I get the impression that you think that interfaces were invented as a means of replacing multiple inheritance. This is completely false!

      I don't think you understand the purpose of interfaces. From Wikipedia: http://en.wikipedia.org/wiki/Interface_(computer_science)/

      An interface defines the communication boundary between two entities, such as a piece of software, a hardware device, or a user. It generally refers to an abstraction that an entity provides of itself to the outside

      Inheritance provides a default implementation. When publishing an interface, it's considered good style to provide a default class to inherit from. This is not required.

      In short, your entire argument is bunk _outside_ of Java. Indeed Java "invented" the problem you claim they solved by making interfaces only workable as empty lists of functions, because they cannot multiply inherit code because they can only find functions by signature and to classes could implement distinct functions with the same signature....

      I really don't think you understand what interfaces are for. Actually, this is how COM, a fundamental part of Windows, works: From Wikipedia: http://en.wikipedia.org/wiki/Component_object_model#Interfaces/

      One of COM's major contributions to the world of Windows development is the awareness of the concept of separation of interface from implementation. This awareness has no doubt influenced the way programmers build systems today. An extension of this fundamental concept is the notion of one interface, multiple implementations. This means that at runtime, an application can choose to instantiate an interface from one of many different concrete implementations.

      In the COM world, Interfaces are a language-neutral way of one language being able to use objects from another language. I can instantiate a C++ COM object in C#, and (in theory) Java.

      In a bound language, where symbols are bound at compile time to the symbols available in fixed scope visibility (like C++), the symbols are bound to either explicit entry points or vtable offsets, that is to known symbolic quantities, there is _NO_ possibility of _accidental_ cross-tree calling. That means that the danger you claim wouldn't be possible.

      This really isn't as technical of an issue as it appears. It's all semantics. When I call an API that expects an object of a known behavior, I want interfaces because they don't establish any behavior in my classes. Likewise, when I publish an API that expects an object of known behavior, I don't want to force my users to have to use my implementation. It's semantics, but the meaning of "inheriting from a class" is very different from "implementing an interface."

      I personally would argue that it's a weakness of C++ that I have to use multiple inheritance when I need interfaces without COM's overhead.

      Since every implementer of an interface in Java must recreate predominantly identical code, the empty interface is more likely to induce mistakes born of repetition. Lucky you.

      In such a scenario, Composition is a much better technique then interfaces. It's a common mistake to use multiple inheritance instead of composition.

  294. Loosing memory is not "destructing" it. by IBitOBear · · Score: 1

    Just as losing my car in a parking lot, or a bet, doesn't cause my car to explode into its constituent pieces and resume their life as raw materials...

    losing the last reference to memory isn't destruction.

    So your first point which talks about "the memory being available" is immaterial, and a tad vague.

    Meanwhile...

    Custom end of life routines _do_ automatically occur in C++ as long as the object reaches an end of life condition. Leaking an object doesn't imply end of life in C++ (though it is the only way to reach end-of-life in Java), it indicates a serious semantic error in the code.

    So where end of life is managed (or not boned up by a bad programmer), which in C++ is automatic for automatic variables, automatic for reference-counted pointers to heap objects, and manual for manually managed objects (manual management being the default heap lifetime model in C++), end of life calls happen _precisely_ at end of life. So there you go. I did explicitly mention that for full heap-based automation you have to add pointer reference management.

    Also, I made the point that "waiting for the garbage collector" to notice the object needed to be finalized was not the same thing as having a _predictable_ point of destruction at a _predictable_ end of life. (though I must have used less-clear wording.)

    Consider a specific example. I have an object that represents a cache of the image of an open file. It has one reference on the stack and that reference is passed into various methods as well. An exception is thrown and all of the referencing pointers on the stack are unwound. Now I fix the problem and reenter the code, where I make a second cache object and call the hierarchy of functions which runs to completion.

    In C++ (with proper lifetime management via automatics and reference counted pointers as necessary) the first cached region on the file was taken _COMPLETELY_ out of play by the exception. The destructor, with absolute certainty, has flushed the cache and closed the file during the exception, and so the open read and cache update and close cycle of the second, successful pass can take place in absolute safety and with proper closure and no uncertainty what so ever.

    In Java I potentially have two separate caches that _think_ they have authoritative knowledge of what the file _ought_ to contain, and when "finalize" comes around to flush and close the file I could end up with _either_ set of data in the file or, worse, some combination of both.

    So in Java I (the programmer) _MUST_ add a manual end-of-lifetime call that YOU-or-I (the user) _must_ call in every possible logical branch out of the code. {hence "finally" clauses etc added into the language.} The problem is, _requiring_ this _extra_ call to the object violates the whole concept of objective encapsulation as you _must_ end up with an "object is no longer a file" _OR_ an uncertain object validity that, by definition, extends to some uncertain time in the future (possibly "never" if the program ends).

    Now yes, in C++, a "bad" programmer may leave trash on the heap at exit and violate his the fundamental lifetime of an object, but in both languages a bad programmer _could_ do damage in any number of places.

    Okay? Java doesn't have destructors. It has "finalize" which has no _predictable_ semantic over the domain of time. And you can _add_ a method to do anything, including and especially, to invalidate an object that will still exist, leaving you with an invalid object {look up "invariants" to understand what I mean by "invalid" here} in scope. This is _not_ better.

    So... you don't understand destruction...

    The music is still playing here...

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
    1. Re:Loosing memory is not "destructing" it. by imgod2u · · Score: 1

      So your first point which talks about "the memory being available" is immaterial, and a tad vague. From a memory management point of view (and really, that's what the garbage collector does), "memory being available" means that if I'm creating a new object, there will be memory there. For the garbage collector, this means that when I point a reference to null, the memory for the object being pointed to is fair game. It can reside there in memory but as soon as the runtime determines "hey, I need more memory", that object will be destroyed. From the programmer's perspective, this is no different than deallocation.

      Consider a specific example. I have an object that represents a cache of the image of an open file. It has one reference on the stack and that reference is passed into various methods as well. An exception is thrown and all of the referencing pointers on the stack are unwound. Now I fix the problem and reenter the code, where I make a second cache object and call the hierarchy of functions which runs to completion. The problem with the example is, again, the fact that Java treats everything as a referenced object (it resides in the heap). As I'm aware, this is no conceivable way to have an object in the stack (ok, virtual stack). Saying that "Java can't automatically manage complex objects in the stack", which is essentially what you're griping about, really isn't saying much. It doesn't *allow* you to do that.

      In C++, objects in the heap (not automatically managed) have to be destructed by calling delete. If your gripe is that Java doesn't have automatic objects, then I'd only argue that realistically, a JVM would not need such a feature.
  295. Distinctions without Differences by IBitOBear · · Score: 1

    In C++ a reference is a pointer with two additional traits:

    1) The value of the pointer cannot be changed after initialization; that is, it is "immutable".

    and

    2) Since the value is properly immutable by virtue of item 1, the language provides the "syntactic sugar" of relieving the programmer of the chore of explicit dereferencing (using the "*" operator) on use or using the address-of ("&") operator on construction.

    ASIDE: As a consequence of 2, the uninitiated may be confused by the use of the address-of (&) operator on references to regain the raw address of the referenced object. This operation is, however, inevitable in this form since [reference_name] is the same as [*pointer_name] &[reference_name] is the same as &[*pointer_name] so the auto dereference is preserved in exact semantics. This leads, for the purposes of semetry, to the auto-address-of operation takes place when a formal function call argument is initialized "by reference" since G(T&x){} F(T&x){ G(x) } {T thing; F(thing);} would be asymmetric for the calls of F and G if I had to take the address of thing, but nof of F::x etc.

    Since Java _does_ let you change the value of the pointer using the assignment (e.g. "=") operator, it is not immutable and it fails to qualify in item one.

    Similarly equality (e.g. operator "==") in Java compares the addresses of the two operands, which tests whether the two pointers point to the same object, as opposed to the equals() method which, when present, compares semantic equality of the contents of the object so pointed to. In c++ "[reference_name] == [reference_name]" is actually "[*pointer_name] == [*pointer_name]" whereas in Java it is "[pointer_name] == [pointer_name]".

    So given that there are three possible metrics to determine if Java "object references" are "more like" "pointers" or proper "references" analysis reveals that at two-to-one out of a field of exactly three discriminants (counting the gross appearance provided by the "sugar" just to be nice to you here and spare you utter humiliation), they most closely resemble pointers. Losing the test of distinctiveness two-to-one cannot, by any measure mean the defeated proposition is "*Much* more" victorious, no matter how much punctuation you add.

    Sorry about that guy, but you are completely utterly and inarguably wrong. You really _should_ just take the hit and move on with your life.

    But were I to cede you the "they are like C++ references" out of the pure kindness of my heart, you would then have just proved my initial contention, that Java only has pointers, because remember, C++ references are pointers with syntatic sugar on them.

    So, more simply said, you have agreed that Java uses pointers with sugar coating.

    I already and initially said that those pointers are lame because you cannot do interesting pointer maths on them (a la pointer_name++ etc). This is, again, not "immutability" because that word doesn't mean what you think it means.

    Immutable: Not mutable; not capable or susceptible of change; unchangeable; unalterable.

    So it doesn't matter what _you_ mean by immutable. I can do "thing=null;" or "thing=other_thing;" which changes thing, so thing was and is mutable no matter what you care to think. And _again_ that makes it a pointer. You are arguing that they are reference because since they are such lame pointers they must not be pointers at all (or something equally dense and pointless, if you will excuse the pun).

    In super-super-simple terms that even a Java bean can understand: You are _insisting_ that "it isn't a vehicle its a car!" when you insist "it isn't a pointer its a reference" since references are _specializations_ of pointers with most of the methods hidden. (Was that clearer son or do I have to get out crayons and crate paper?)

    And now you should understand why I "laugh a little" when people _insist_ that there are no pointers in Java. It's like arguing that there is no water in the ocean because p

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
    1. Re:Distinctions without Differences by imgod2u · · Score: 1

      C++ references are pointers with syntatic sugar on them So your entire argument sums to "references are pointers anyway". That's fine if you want to argue semantics. Consider that those who say "Java has no pointers" don't agree with that assessment. As to what makes a reference a reference, I'd list:

      * They are not to be treated as memory addresses (though yes, it is an address under the hood)
      * Memory for references need not be managed (though in C++ this has to due with the fact that you can't use dynamic memory allocation with references)

      The implications of the first I listed is fairly vast. It means that one is never afraid of writing or reading from the wrong place. Yes a reference can be null but a null exception is far more preferable to corrupting program memory. The implications of the second is that one need not ever be afraid of leaking memory.

      Claiming that not having to type an extra character to dereference as a fundamental characteristic of references is really grasping at straw, btw.

      Java references meet both these criteria. A reference is (and depending on the JVM implementation, is probably not even a memory address) not to be treated like an address in memory. It's an abstract "link". There is no such thing as the "value" of a reference (one cannot System.out.print(myObject) and get the address value). Conceptually, this is more than "syntactical sugar" it's a complete disjointing of the programmer from the idea of a memory map space (along with the removal of the concepts such as locality).

      Java achieves the second by having a garbage collector. Yes, IO resources need to be managed and objects using IO resources need to be managed but *memory* need not be. A programmer's only concern would then be "does my algorithm use too large of a dataset" and not "always deallocate what I allocated". Granted C++ references do not serve the same purpose of easy management of heap memory and I'll agree that there, the two differ conceptually.

      You are arguing that they are reference because since they are such lame pointers they must not be pointers at all I'm arguing that they don't have all the features of a pointer. In fact, conceptually, they take away a *lot* of the implications of pointers. Therefore, they are not pointers. Your insistence on "hey, they aren't direct objects, they are therefore pointers" is very narrow and really speaks of someone who views the world solely in terms of C++.
    2. Re:Distinctions without Differences by Anonymous Coward · · Score: 0

      (though in C++ this has to due with the fact that you can't use dynamic memory allocation with references)

      That is not true:

      TWidget& w = *new TWidget();
      //...code that uses w
      delete& w;

      - T

  296. Insults instead of facts by krischik · · Score: 1

    Do you relay think that the ability to voice insults are an adequate replacement for being knowledgeable?

    BTW: I was not commenting on you spelling - I would not do that as my spelling isn't any good either and I too sometimes slip the keyboard. I was commenting on the fact that you are uninformed and do nothing to to rectify that. Note that I would not comment on a programming language without doing some research first.

    Have you had courses with those professors? Probably not - all comments from former students here on /. or elsewhere are positive.

    Do you know anything about Ada? Did you program anything in Ada? Can you give me an example on a weakness of Ada? Can you tell me where Java is superior to Ada.

    I can answer all of those questions and not only for Ada but for Java, C, C++ as well. And of course the answer to the first two would be "Yes" on all accounts.

    And last not least: You are not the only one with 6 figure salary. There is noting special about it - here in the offices are dozens of Ada and Java programmers with a 6 figure salary - so what.

    Martin

  297. Moore's law damaged computer science education by freedom_india · · Score: 1

    Very True. Batch programming, sequential access (like you said for DBs), Actions, Schedules, etc., are not exactly OO stuff.

    Moore's law damaged computer science education to a great extent.

    By enabling Intel et al to increase clock speed by increasing transistors on-board, the same visual or performance effect could be achieved even after doubling bloat onto it.
    Much like: If my Ford Focus gets a power Atomic engine powered by Plutonium and capable of going 0-60 in 4 seconds, would i not want to add 1 more tonne of extras/trims onto it?

    --
    "Doing what i can, with what i have." ~ Burt Gummer
  298. Nope. by jotaeleemeese · · Score: 1

    Even in poor countries like Mexico, University students are meant to have an all around education that teaches them how their technical skills and decisions will affect society as a whole and allows them to place technology in a wider context.

    We have mandatory lectures in economics, accounting and electives in literature, sociology and political science for example.

    --
    IANAL but write like a drunk one.
  299. Just what we need: computing snobs. by jotaeleemeese · · Score: 1

    Where I work, we'll likely throw your resume in the trash if it doesn't have Haskell, Lisp, Ruby, Python, OCaml, Scheme, Scala, or some other obscure, clearly self-taught language on it.

    NO wonder people have got so little free time left, are less rounded and in general more frustrated.

    Somebody having the verb to say the above just shows one aspect of how wrong corporate life can be nowadays.

    Pathetic.

    --
    IANAL but write like a drunk one.
  300. Re:Why is "Computer Science" Staffing S/W companie by syousef · · Score: 1

    My point is that a degree (or lack of) is not a good indicator of a person's skills.

    I'd say a degree is necessary but not sufficient for a well rounded professional. Yes you can pick up a lot of it in your own time, but there are things you learn at uni that are difficult to learn on your own. Disagree all you like. Many employers don't disagree and many won't look at you without a degree. If you want to maximize you job prospects you'll get a degree. That's the way the world works. Deal with it.

    If you're going to write a compiler then hopefully you'll be doing some on-the-job research beforehand. At this point you will likely discover the HP and its relevance to the task at hand. Otherwise it is more or less useless academic trivia.

    You simply don't understand, so let me put it differently. The broader a spectrum of problems you've considered, the better a coder you'll be. University is an excellent way to gain exposure to a very wide variety of problems. You'll be able to draw parallels with those problems, work out ways to adapt some of the solutions and work out which problems to avoid entirely (which is the point of learning about computability, and problems like the travelling salesman and the halting problem).

    I don't quite understand what you're saying. I interpreted it as: "If you don't understand these things and you come across a complex problem then you can bring a project unstuck." Maybe you meant to say "If you understand these things..." Anyway, the halting problem in and of itself is not significant unless you are writing a compiler (correct me if I'm mistaken). Like you said, it is part of a whole class of unsolvable problems, but you don't need college to realize that such problems exist.

    You're completely mistaken. The halting problem has nothing to do with compilers. My example about writing the compiler was completely separate. You've just exposed your ignorance and made it clear you're discussing something you don't even have a basic understanding of. Go look it up on Wikipedia at least. You certainly DON'T need a degree to understand this stuff but if you learn it in a structured way through a degree you won't be making silly statements like this.

    (Since you probably won't look it up, the halting problem is about writing a program that will take as its input a program, and tell you if that program will eventually halt. Though it sounds like a straightforward problem, it can't be done).

    doubt that anybody read my comment anyway, but if it helps deter somebody from going thousands of dollars into debt while missing out on investment opportunities (aside from the time-value of money), then it was worth it.

    If you have to get into debt to do a degree you have to weight whether it's worth it. I'm not in debt. My wife is. Frankly I think higher education should be free. In Australia it was free until 1987. If you have to go without food, housing or health care to do your degree I'd agree that's not a wise move.

    However it was not illogical. Too often we justify our life decisions to ourselves and others because it is painful to consider what could have been if we had made different choices. I'm as guilty as you, thanks for pointing that out.

    My point was not to put you down or ridicule your life choices. As far as I'm concerned anyone who gets off their backside and tries to excel is 1000 times better than any jerk with a degree who simply paid for it and put in no effort. HOWEVER I do disagree with you about degrees being worthless. If you have the chance to do a degree, even if there's some sacrifice involved, if it's the right degree - a good one - it will make you a better professional. You will have experiences and opportunities in the short years doing it that you won't get in the rest of your professional career. It will open doors for you. That's not to say you should be considered lowly if you don't have one, and it's true that degrees aren't for everyone, but if you can do it, I'd say you

    --
    These posts express my own personal views, not those of my employer
  301. Bedtime Story for Chief Financial Officers by Catalina588 · · Score: 1
    A very large computer company switched from home-grown and packaged applications to SAP in the late 1990s. Soon after, the bean-counters and MBAs decided that the COBOL programmers who used to maintain the old applications were"redundant", and most were let go. The very next year, the company embarked on a large acquisition and needed to merge the systems of two Fortune 500-sized companies together fast.

    Turns out those redundant COBOL programmers actually had the business processes of the company in their heads and notebooks. There were not enough business analysts to get the business transformation done fast enough to satisfy the ogres on Wall Street. Queen Carly lost her head.

    Moral of the story: in the business world, many programmers know a lot more than they are given credit for buy their (pointy-headed) leaders. Getting business process changes rapidly and accurately is not reliably done in C or C++.

    That's why IBM is working so hard to get its customer's applications into Java under SOA, even while the IBM company needs thousands of computer scientists to develop those tools.

  302. Point-in-case by primaldk · · Score: 1

    Have a look at Clean (http://clean.cs.ru.nl/) for a use of pointers (internally) that makes for efficient execution. An interesting read concerning the subject is found here:

    http://clean.cs.ru.nl/contents/Addison__Wesley_book/addison__wesley_book.html

    Actual benchmarks to show the efficiency can be examined here (note the comparison is with C-versions of the same algorithms compiled on gcc):

    http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=clean&lang2=gcc

    Here's Java 6 (server version) for comparison:

    http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=java&lang2=gcc

    You'll notice that differences are mainly in the memory footprint, already known to be attributable to the large number of libraries (classes) loaded into the vm at start-up, something the Clean runtime isn't quite as encumbered with:

    (Java) http://java.sun.com/docs/books/performance/1st_edition/html/JPRAMFootprint.fm.html

    So, the difference in speed is often-times negligible, and it's been shown that the memory footprint can be reduced to a size where you can run an embedded jvm in a mobile phone (really!), and rumour has it that someone even wrote an operating system in Java, but the memory footprint still seems the biggest culprit:

    http://www.jnode.org/node/573

    In other words, it's not Java - the language, but Java - the massive OO-framework, and JVM - the specific implementation, that's the problem. Even C++ or C with an OO-framework can be made into a large memory footprint, if you can believe it:

    http://www.microsoft.com/windows/products/windowsvista/editions/systemrequirements.mspx

    Then, of course, memory is cheap:

    http://www.simmtester.com/page/memory/memprice.asp

    But, the over-use of which, sometimes stays with us as itching bugs for too long:

    http://blog.wired.com/monkeybites/2007/11/firefox-3-add-o.html

    If memory serves me right (http://www.google.com), there's something to be said of the virtues of garbage-collection applied to systems programming:

    http://www.digitalmars.com/d/

    and the actual (memory and) time efficiency of such an attempt:

    http://shootout.alioth.debian.org/gp4/d.php

    But I could be wrong. After all, no-one in their right mind would ever attempt to write an operating system in something like, say, Lisp:

    http://cbbrowne.com/info/lisposes.html

    - let alone design an actual computer around it:

    http://en.wikipedia.org/wiki/Lisp_machine

    It simply wouldn't run. No, the skills of an engineer depend solely on the language he/she speaks, not on the abstract concepts he/she masters, applied to whatever tool he/she chooses to use/create.

    That is why I propose we all forget about abstraction all-together, and revert to coding like this:

    010101100001111010110101101101111101111...

    But wait, that is itself an abstraction - Turing must have suffered from premature abstraculation. No, let's hear it for using copperwires instead of silicon, so we can attach some large, hand-

  303. University is elitist. Get over it. by jotaeleemeese · · Score: 1

    What I used to do in those situation is to point students to the necessary documentation, and then carried on with concepts.

    Learning to use a tool is not CS, no matter which way you want to spin it.

    --
    IANAL but write like a drunk one.
  304. Java vs Pohl's HeeChee-Prospector Paradigm by pg--az · · Score: 1

    You can find a 1-star review of Frederik Pohl's "Gateway" by Googling the quoted phrase "Bonobos in space", must concede there's truth to that assessment. Anyway as the Wikipedia entry under HeeChee explains, the HeeChee built this network which goes all sorts of places, but their technology being incomprehensibly advanced( like pointers ? ) all we can do is push the buttons and go where their magic ships take us.

  305. Finally, you have summed up the Java problem by IBitOBear · · Score: 1

    Yes!

    you are instructed to pretend that the pointer isn't a pointer, it's an "abstract link". If I tell you to pretend that an integer is a grapefruit it doesn't make it one.

    Ta Da!

    Broken computer science students everywhere applaud you for concisely showing why Java is a bad language for learning computer concepts.

    Everything else you say is crap. The Java vm has a garbage collector. If I want a garbage collector in C or C++ I can link it in (see libgc etc). The fact that I then don't have to worry about freeing my memory doesn't then magically convert my pointers to something else. they are still pointers.

    You overstate your understanding of my point. _PLENTY_ of languages have had pointers with feature-impoverished sets of operations. (See COBOL for examples) but you know what? The lack of interesting operators on a type doesn't change the nature of the type.

    They are pointers no matter how deeply you cram your fingers into your ears and no matter how loudly you shout and stamp your feet.

    P.S. Learn to READ. I didn't call "not having to type an extra character" a "fundamental characteristic of references"... I called it "syntactic sugar". The only feature of a reference that makes it a reference is immutability, and we have already demonstrated that you can re-point your pointers in Java via the assignment operator. (Getting out the crayola) See I took where you were trying to invent all these differences between pointers in C++ and references in C++ and boiled it down to two facts. First (labeled with a little "1") was immutability, and then second (labeled with a little "2") was the syntactic sugar. I made no statements about "fundamental characteristics of references" because "references" are "pointers" because, in truth, and as stated, references are, first and foremost, pointers.

    Answer me this: What is the difference between a duck and a Mallard?

    One is a general kind of thing and the second is a more specialized version of that thing. So references are pointers because, well, references are pointers. They are the same damn thing. period.

    Now take a lollipop out of petty cash and STFU you clueless noob.

    --
    Innocent people shouldn't be forced to pay for inferior software development.
    --"Code Complete" Microsoft Press
  306. Forget this silly "Java" - I NEED HELP! by aqk · · Score: 1

    Not sure what this Java is, is it the stuff I drink at Storbucks? However, I would dearly love some help- any help! for my project:

    I am writing a program to translate ADA into COBOL (and optionally PL/1).
    I hope to make big bucks upon its completion! You can too! (with the right input)

    It is currently being written in APL. Sorry, but I gave up up on that freaky Pascal stuff.
    Anyone who can supply me with a genuine APL keyboard stands to gain mucho pesos, if you know what I mean.

    Bill Gates has apparently taken a recent interest in COBOL, (seems to be something to do with Africa) and I suspect this may just be a killer app!

    I will let you know about the forthcoming IPO. No triflers please!


  307. its not the language by thc4k · · Score: 1

    ... it's the university. I study informatics at TUM, europe's top university for informatics (#1 or 2 in every study for the last 5 years ... ). We started with Java too, but we also learned asm and how a CPU really works on a hardware level in the 1st semester. 2nd semester was VHDL and OCaml, while keeping Java as the language for most homework in the Algorithms and Data scructures and Software Engineering course. 3rd semester we got C in Operation Systems and SQL for databases ... I'm not a particular fan of Java, i use mostly Python, Lua, OCaml and C# (if i have to), but bashing Java is completely ridiculus and doing so on basis on a study from a university where idiots seem to lecture is even stupider.

  308. Haskell good because not used in real world by Anonymous Coward · · Score: 0

    The main reason given to the first year computing class I was in for that class being taught Haskell was that there was buggerall chance that anyone would already know the language and have an advantage over students who hadn't programmed before. The fact that it is a completely different style of language to c/c++/vb et al was seen as an added bonus.

    Another reason given was that a lot of students they'd had previously had learnt bad habits when picking up what smatterings of c/c++ etc that they knew, and it was easier to teach them good habits in a completely different language then getting them to apply the same principles to a useful language than trying to do both at once.

  309. Coursework by Mark_MF-WN · · Score: 1
    Except for analyzing the assembly output of GCC, all of those things were included in the first two years of my CS degree. Actually, I don't think it was the knight's tour, I think it was the 3-lines-of-prolog N-Queens problem. If I hadn't switched to chemistry, I'd probably have gotten around to taking Compiler Design, which may very well have included analyzing the output of GCC.

    A degree (at least one that isn't ridiculously shitty) is a good deal more than just the starting line. Some people even do research as part of their undergrad program; not necessarily ground-breaking, revolutionary stuff, but research nonetheless. Some undergrad science programs even require active participation in a research project.

  310. And in related news: by iwein · · Score: 1

    Students also found it extremely challenging to understand the implications of a simple goto statement....

    and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging

    I thought pointer arithmetic was frowned upon these days...

    --
    Show a man some news, distract him for an hour. Show a man some mod points, distract him for the rest of his life.
  311. Re:Why is "Computer Science" Staffing S/W companie by Wolvey · · Score: 1

    The broader a spectrum of problems you've considered, the better a coder you'll be. University is an excellent way to gain exposure to a very wide variety of problems." I got that the first time around. Working in the field is a better way to gain exposure to practical problems. You get the added benefit of coming up with solutions on your own. Better than trying to shoehorn the lessons you learned in college into real life.

    Go look it up on Wikipedia at least.I did, when you first commented on it. The only practical application I found was adding a feature to a compiler that will tell you if your program will infinitely loop. I suppose you could also assess other programs (plugins to your own perhaps), but the halting problem by definition simply tells you whether a program runs forever or not. Care to enlighten me as to its significance beyond that?

    If you have to get into debt to do a degree you have to weight whether it's worth it. I'm not in debt. My wife is. Frankly I think higher education should be free. It should be, but it isn't. You aren't in debt, good for you. I hope you're doing a lot better than "not in debt".

    HOWEVER I do disagree with you about degrees being worthless.I never said they were.

    (with one possible exception. If original thought is required and you're a genius, a degree may make your thinking more rigid than you need it to be. I'm thinking of Einstein here, not just anyone writing some business code for a living) While not an Einstein, I'm quite a bit smarter than the average bear. I was going to bring up the "original thought" argument myself but decided against it. I can't even tell you how many times I was able to come up with creative solutions to problems that my educated coworkers didn't even know how to approach. That goes back to my earlier point about trying to shoehorn problems into the solutions you've been taught instead of approaching with experience and intuition. Oh, and I'm not planning on writing business code forever. With what I have saved I'm going to take a break very soon and invest in some other opportunities.

    I've spoken in depth with many of my educated coworkers, most of whom I've already passed on the career track. I considered getting a degree and spoke with several of them about it (including the few that held higher positions at the time). They all told me that aside from having some fun and learning about different things, it would do absolutely nothing for my career. They all say that with the experience and skill that I have, a degree would only slow me down. I remember interviewing a graduate of Cornell and turning him down because he had poor communication skills.

    I agree that a degree can significantly increase the earning potential of your average Joe. However if you're making six figures before you hit 25, you might not need it after all. It reminds me of a certain Bill something or other who started a $oftware company. Maybe he should have asked for your thoughts first and gotten that degree.

    ps - I would have responded sooner but I had to take the day off to go snowboarding.

  312. Re:Why is "Computer Science" Staffing S/W companie by syousef · · Score: 1

    I got that the first time around. Working in the field is a better way to gain exposure to practical problems. You get the added benefit of coming up with solutions on your own. Better than trying to shoehorn the lessons you learned in college into real life.

    There are problems that look simple but actually turn out to be complex. There are problems that are deceptive in that you think you've solved them but in reality you've left something out that will bite you in the ass. Learning in the real world about these problems may mean creating a system that appears to work but really doesn't.

    Care to enlighten me as to its significance beyond that?

    The significance of the halting problem is teaching you a way to deduce whether or not a problem is computable. ie. whether trying to build a computer program to solve the problem in the first place is a sensible thing to do. If you're telling me you'd have come up with that particular proof by counter example on your own in what is considered a reasonable time frame commercially, you're telling me you're a genius. However once you've seen this proof you can try to apply something similar to a problem to work out whether a problem is computable.

    It should be, but it isn't. You aren't in debt, good for you. I hope you're doing a lot better than "not in debt".

    I do okay thanks.

    While not an Einstein, I'm quite a bit smarter than the average bear. I was going to bring up the "original thought" argument myself but decided against it. I can't even tell you how many times I was able to come up with creative solutions to problems that my educated coworkers didn't even know how to approach.

    Having a degree doesn't make you good at the job. You're telling me you're good at your job and I believe you. Some of your co-workers clearly aren't. No degree is going to make them creative thinkers. However if you had been exposed to the knowledge they have been I don't doubt for one moment that you'd be even better.

    They all told me that aside from having some fun and learning about different things, it would do absolutely nothing for my career. They all say that with the experience and skill that I have, a degree would only slow me down. ...and they'll keep telling you that while presenting their degrees as justification for every promotion they apply for until they're earning more than you and/or they're in a position of authority over you. Then they'll take credit for your hard work.

    I remember interviewing a graduate of Cornell and turning him down because he had poor communication skills.

    My current job is in support and writing software in both Java/J2EE and C. My last had some Java and lots of Smalltalk (which isn't much sought after where I am anymore). I was told 2 years after I got the job that there was a technically stronger candidate but that he was going to be a problem fitting in with the team (they alluded to ego issues). As I said a degree is necessary but not sufficient. Plenty of people that understand the technical side of computing well have almost no social skills. The degree doesn't filter for those which is why you need to when you hire.

    However if you're making six figures before you hit 25, you might not need it after all. It reminds me of a certain Bill something or other who started a $oftware company

    There's a different reason for his success. If you're willing to play dirty and step all over people you can go far especially if you have luck such as Mr Gates did. Don't get me wrong - the man worked hard. But he also left his scruples and manners behind.

    Degrees aren't JUST about earning potential (though that's important). If it were I'd never have done my Astronomy masters knowing full well I'd never use it in my work.

    ps - I would have responded sooner but I had to take the day off to go snowboarding.

    Hope you had fun. It's clear we may never agree on this, but you've definitely been fun to debate with (and unlike many heated debates here it hasn't gotten too nasty)

    --
    These posts express my own personal views, not those of my employer
  313. Yeah, lets abolish code re-use. by jotaeleemeese · · Score: 1

    Lets all reinvent the wheel 1000 times.

    It is scary to think that the above is said with a straight face.

    --
    IANAL but write like a drunk one.
    1. Re:Yeah, lets abolish code re-use. by Osty · · Score: 1

      Lets all reinvent the wheel 1000 times.

      Wow, you've completely missed the point. In an academic setting, especially for undergrad courses where the students are still learning, yes, you should absolutely reinvent the wheel 1000 times (at least once per student), because by reinventing the wheel they learn how and why the wheel works. Once you know how and why a data structure works, feel free to use a library implementation instead of writing your own. However if you're taking a class about data structures, using a library implementation of a list or dictionary only teaches you how to use that library's implementation. It doesn't teach you why list access time is linear, or why appending/prepending is constant, or anything about the data structure itself. Sure, you can talk about theory all you like, but most students won't "get it" until you make them put that theory into actual code.

      In the professional world, you're correct. I absolutely want someone who is willing to reuse code from others rather than reinventing the wheel. At the same time, I want someone who understands data structures, when to use different structures, and why. I obviously wouldn't want my programmers spending all of their time writing lists and trees, but I want them to understand when to use them, and you're just not going to get that level of knowledge by using collection libraries without ever writing the data structures yourself at least once.

  314. Nonsense. Oldtimer nostalgia. by jotaeleemeese · · Score: 1

    In all the years I have programmed that knowledge has been not needed.

    It is nice to know that stuff, in the same way it is nice to know the three laws of movement or Fermat's last theorem.

    --
    IANAL but write like a drunk one.
  315. No, no, no. by jotaeleemeese · · Score: 1

    Perl is an abomination that we have to use because, well, I don't know why.

    Most code I have seen in professional environments in the real world is unmaintainable, given the idioms of the language this is unsurprising (sometimes I think it was designed with the purpose of enhancing nerd's egos to see who can obfuscate any given program the most).

    --
    IANAL but write like a drunk one.
    1. Re:No, no, no. by DougWebb · · Score: 1

      Perl is a victim of its own success. It's very easy to use for quick-and-dirty tools, and as a result it is very commonly used by non-programmers (eg: sysadmins) who do not follow good software development methodologies. The IT world is full of unmaintainable Perl code, just like it is full of unmaintainable shell code. This isn't the language's fault; if Perl didn't exist, there would be more shell code, and probably a shell language that is as capable as Perl.

      There's plenty of unmaintainable code written in other languages, too. The only difference is a lower volume because other highly-capable languages are difficult enough to use that only programmers use them. Make those languages easier to use, and you'll get non-programmers using them and creating unmaintainable code. They need to use something, so they're not just going to go away, no matter how difficult you make things for them, or how much you try to get professional programmers to do all of the programming work.

      A professional programmer, who is trained in the way I suggest, can produce very maintainable code in Perl or any other language. The difference that I've found (being a professional programmer) is that Perl lets me be much more productive than other languages do, because I don't need to specify as much of the behavior that I want. I can do my coding at a higher and more abstract level, and the compiler figures out the appropriate behavior. It's similar to the difference in abstraction between assembly and C, except at a higher level.

      A language like Java helps the programmer in some ways, but it's not enough. For example, Java sort of frees you from worrying about memory allocation, compared to C or C++, but you still have to worry about creating and destroying objects. Sure, it's a higher level of abstraction, but it's the same problem and it's still dumped in the programmer's lap. Similarly, when you define a type in Java you're creating a class with Integers and Strings as data members rather than worrying about 16-bit vs 32-bit vs 64-bit ints and whether the memory allocated for strings is static or dynamic, null-terminated or not, etc. However, you're still all hung up in specifying and tracking datatypes, and manually converting between them when necessary.

  316. I concur with the NYU profs but... by DJGravitron · · Score: 1

    Yes, Java is a very crappy language when it comes to how it handles memory (ugh! has anyone looked at its heap code? appalling.), and it is geared towards GUI programming, but then again most next-gen languages are. The executables it creates suffer from hyperbloat due to the fact that it has to include so many extraneous libraries that don't really need to be there, and all of that needs to be loaded into memory. Thus, if you're writing a very large application in Java, then you're gonna have problems with memory real quick. Forget about using Java for embedded apps unless you like the frustration of porting its JVM to an embedded system. However, on the gripping hand Java is basically a C++ work-alike, which means that Java-indoctrinated CS students will be able to pick up C++ fairly quickly. Also, students can safely ignore the details of how certain languages work and just get to the fun stuff like data structures and algorithms w/o learning a new programming language (which they can do in their spare time anyway). I don't recommend that option, however, but some might. IMHO, C++ should replace Java as the de facto CS instruction language, since it is more flexible than C and more efficient and extensible than Java. BTW, IMO, I think most software tech employers, in the corp sector or otherwise, look for folks with solid C++ skills AT LEAST. They'd prefer someone to know a vast body of information regarding current software trends and new languages/tools, but C++ is so widely used that it should be a requirement at all universities and colleges with a CS degree program.

  317. Re:Why is "Computer Science" Staffing S/W companie by Wolvey · · Score: 1

    Hey, was slacking on my reply... release crunch and all that. I'll understand if you don't reply.

    There are problems that look simple but actually turn out to be complex. There are problems that are deceptive in that you think you've solved them but in reality you've left something out that will bite you in the ass. Learning in the real world about these problems may mean creating a system that appears to work but really doesn't.

    The point I was making is that college won't teach you how to solve these problems. I've arrived at this conclusion from my experience working with mostly college-educated people. Instead of seeing the problem for what it is, you are stuck trying to make the problem fit into the solutions you learned.

    The significance of the halting problem is teaching you a way to deduce whether or not a problem is computable.

    Are you telling me that you've personally applied this proof to determine the feasibility of a project? I'm going to go out on a limb and say that real-world experience designing, maintaining and repairing computer systems will give you far better insight into the feasibility of solving a given problem than the HP proof.

    However if you had been exposed to the knowledge they have been I don't doubt for one moment that you'd be even better.

    I disagree. Early in my career I had the chance to sit in on a discussion at a local trade school (this was ITT tech, so not really a university) where the teacher of an RDBMS class actually said "primary keys are nice, but they aren't necessary." Learning from a bad teacher is worse than teaching yourself. If you're teaching software engineering there is a decent chance that you couldn't cut it as a software engineer. There's an even better chance that you're unfamiliar with the problems and technologies relevant to the industry today. On the other hand, I worked under very experienced developers early in my career. They were my teachers and role models. My classroom was a software development shop, and my homework was designing, writing and supporting real software.

    As I said a degree is necessary but not sufficient.

    I still don't see it as necessary. I've performed my job far better than coworkers who had degrees, and I'm paid as well or better. I have great technical, communication, and for the industry, above average social skills. Saying a degree is necessary doesn't make it so.

    Instead I'll invest the money I would have spent on college and visit the library, bookstore or google whenever I yearn to learn.

    It really is a personal choice, and it depends on your individual circumstances and aptitudes. One size does not fit all. College is not the answer. Further reading (sorry, had to throw this in): http://en.wikipedia.org/wiki/Choice-supportive_bias

  318. Slamming Java in the name of CS? by geezenslaw · · Score: 1
    If the University Computer Science depts want to slam something for the demise and de-professionalization of the Software Engineer then they need not look any further than:
    • Corporate America, all military branches and the U.S. Gov. in general for supporting the worst programming OS and platform in the world: MS .NET and the related hodgepodge of glued together tools ever devised under the name of: Software Engineering.
    • The U.S. Congress and Senate for allowing the abuse of the 1950 H1B Visa Act. And, for allowing large finanical institutions to outsource and offshore their huge Java based (web-based) business applications to China, Pakistan and India et. al.
    • http://www.comptia.org/ what's-up-with-that? A few weeks in some center or school and you have an A+ certification or MCSE! Let's see one of these vocation school Software Engineers design and install a wire-wrap card into an AT bus (EISA if you are up to it)! Let's see just one of these Geek Squad types write a single line of Assembly language and explain in detail what is happening on the registers and memory while the program is executing?
    • I was an ANSI C programmer for 7 years in a heavy duty Research Facility. And, Java saved my programming career. I would have quit by now with all the frustrations that are allowed in C++ and ANSI C. C is a great tool for Systems programming and smaller projects but the ever bigger Enterprise level applications are still written in Java and its FrameWorks spawned from Sun Microsystems Java JDK. Java VM and the new JDK concurrent classes and folks like: http://www.azulsystems.com/ are putting a serious implementation into what is possible using Java. I don't see similar inroads in any other language
    • Quoting Peter Lin of Jakarta Apache JMeter project:

      I find .NET fine for simple applications that are easily outsourced, but for large enterprise applications it's lacking in most areas.
  319. Small vs. Large by David+Deharbe · · Score: 1

    I have been teaching at the College level for about 10 years now (not in the US, though). I first taught "advanced" topics (operating systems, compilers), but I was so shocked by the programming skills of the students, or the lack thereof, that I candidated to teach basic programming.

    I think that programming education (which is important for software engineers and computer scientists) should address first programming in the small and then programming in the large. Programming in the small includes basic programming constructs, memory management, basic input/output, algorithms and data structures. Programming in the large would include object orientation and patterns. It may be possible to start introducing the latter while teaching data structures, as some concepts such as polymorphism and encapsulation are needed to implement them in a reusable fashion.

    However I find that teaching programming is extremely challenging, and the question of the programming language is only part of the problem.

    Best,

    David.
    --

  320. Getting a job by deodiaus2 · · Score: 1

    Not until you have interviewed for a job will this sort of BS go away. Most managers want a project done yesterday. They don't want to hear you say that you are trying out some ideas before you actually present a solution. Most often times, your beta version is the released version. I wish it weren't that way. Tell me where to send my resume, and I'll join you. The other issue is that there are lots of people who are accountants or what not, who have been recruited to solve a problem via programming. They just don't have the time to piss around with pointers and want a language that handles that for them. They aren't interested in hand scratching their mnemonics on bare metal either.