Discussions

News: Oh, Slashdot: "Professors slam Java as 'damaging' to students"

  1. Slashdot, bless their pointy little heads, has posted 'Professors Slam Java As "Damaging" To Students,' based on a post from the Journal of Defense Software Engineering, titled "Where are the software engineers of tomorrow?" The problem is: the professors pointed out a lack of concepts they saw as critical, not that Java was "damaging." There are a lot of issues here. For one thing, here's their own summary:
    1. Mathematics requirements in CS programs are shrinking.
    2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.
    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.
    Further - in the introduction - they say this:
    ...As founders of a company that specializes in Ada programming tools for mission-critical systems, we find it harder to recruit qualified applicants who have the right foundational skills. We want to advocate a more rigorous formation, in which formal methods are introduced early on, and programming languages play a central role in CS education.
    It's hard to argue with that! They have a preference; they want more people skilled in Ada, with more rigorous foundational skills. The "damaging" quote in Slashdot's title comes from this paragraph, in the second section, "The Pitfalls of Java as a First Programming Language:
    Because of its popularity in the context of Web applications and the ease with which beginners can produce graphical programs, Java has become the most widely used language in introductory programming courses. We consider this to be a misguided attempt to make programming more fun, perhaps in reaction to the drop in CS enrollments that followed the dot-com bust. 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, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.
    Are they being taught systems programming, or applications programming? One chooses the tool based on the task at hand, not because the tool is there - otherwise, you might be typing with a hammer. Does one then blame the hammer for ruining a keyboard?
    Let us propose the following principle: 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. 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.
    The bolded statement is true - but in that case, why do the professors use Ada in their own company, as opposed to assembly? If they're that committed to the "irresistable beauty," why don't they follow it themselves? Of course, it may have something to do with their publication in a journal of military software engineering, where Ada is mandated by the US Department of Defense. Further, it's not impossible for a student to develop a sense of the run-time cost of anything - it just takes someone (a professor, perhaps) instructing them on how. To their credit, the professors' actual point is that students need a wider exposure: they discuss the benefits of C, C++, Lisp, Ada, and Java, and their actual point is this:
    A well-rounded CS curriculum will include an advanced course in programming languages that covers a wide variety of languages, chosen to broaden the understanding of the programming process, rather than to build a résumé in perceived hot languages.
    When they say a language is directly "damaging," they actually blame Javascript, PHP, and Atlas - saying Java is only allowing professors to miss some basic concepts, as opposed to being actively damaging in and of itself.

    Threaded Messages (65)

  2. CS professors damage students[ Go to top ]

    A BSCS is overrated. I wish I had done physics or economics degree with a minor in CS. -- Bill Burke http://bill.burkecentral.com
  3. Re: CS professors damage students[ Go to top ]

    A BSCS is overrated. I wish I had done physics or economics degree with a minor in CS.

    --
    Bill Burke
    http://bill.burkecentral.com
    I agree - at least for the type of work I like to do... But I'm biased. I majored in History, emersed myself in liberal arts and got an Associates Degree in CS. Then again, I would definetly consider myself an applications developer and not a systems developer. I won't be writing operating systems anytime soon. I've worked with lower-level languages like C, etc. But I prefer building custom business apps with Java, .NET,etc. I have a lot of fun doing it. As far as producing CS graduates that can be easily replaced offshore, it seems more likely that offshore systems programmers would replace US systems programmers than offshore resources replacing US workers that can communicate well, be creative, and produce software that is correctly aligned to the needs of a business users. IT students in the US should accentuate business skills along with programming skills. That's what will keep them gamefully employed. Just my 2c. Mike
  4. Communication?[ Go to top ]

    US workers "that can communicate well" probably ought to know the difference between "emersed" and "immersed" and "gamefully" and "gainfully" - although the term "gamefully employed" may be more correct in some cases. I'll get my coat ;-)
  5. Re: Communication?[ Go to top ]

    All makes sense... "E-mersed" is a web 2.0 company name for "Immersed" (like "E-surance" for "insurance"). And, of course, one always prefers to be "gamefully" employed. Hope this helps, my "limey" friend ;-) -------- "Great Britain and the United States are nations separated by a common language" -- George Bernard Shaw
  6. Re: Communication?[ Go to top ]

    All makes sense...

    "E-mersed" is a web 2.0 company name for "Immersed" (like "E-surance" for "insurance"). And, of course, one always prefers to be "gamefully" employed.

    Hope this helps, my "limey" friend ;-)

    --------
    "Great Britain and the United States are nations separated by a common language" -- George Bernard Shaw
    No pain, no game, right? Not good in C++, not good in Lava? "United States is a nation separated by state"
  7. Re: Communication?[ Go to top ]

    All makes sense... "E-mersed" is a web 2.0 company name for "Immersed" (like "E-surance" for "insurance"). And, of course, one always prefers to be "gamefully" employed. Hope this helps, my "limey" friend ;-) -------- "Great Britain and the United States are nations separated by a common language" -- George Bernard Shaw
  8. Aha - suddenly it's clear[ Go to top ]

    Aha - suddenly it's clear. Aha - suddenly it's clear. And "E-bar-gum" is an electronic form of chewing gum, consumed in the north of England, while waiting to be served in a pub. - sorry
  9. Agreed[ Go to top ]

    Agreed. Especially from a Liberal Arts school >=]
  10. Seens that what is wrong is course curriculum and the missusing the Java language.
  11. "Professors are damaging students"[ Go to top ]

    The earlier would probably be the more precise title. By and large, it is the professors who determine the curriculum and it is them that has to guide their (possibly paying!) students through the use of languages and concepts. Seriously blaming about people "not understanding pointer concepts" is quite weird. I spent a lot of effort NOT to have to remember how pointers work! Much the same goes for the "use of libraries". Any good scientist as any good engineer a try to limit re-doing things. This is the exact purpose of a library. It must - like a digital multimeter - behave according to spec. The greater problem is that noone cares about the spec of libraries in a lot of organizations. That said, I have met dozends of CS graduates who did not own a book (or knowledge for that matter) on the most basic algorithms. If the CS graduate sorts a list using bubble sort. I Worse still, a lot will use bubble sort instead of the formerly mentioned "evil" libraries. would not blame it on any programming language - it is purely the instructors fault!
  12. Seriously blaming about people "not understanding pointer concepts" is quite weird. I spent a lot of effort NOT to have to remember how pointers work!
    I think it's still easier, at least if you've gone through C++. I've seen people coming from Java and Visual Basic program with C and I have to say that while some did ok, many did not. Some of them did not use pointers at all much, because in C, the following actually works: struct mystruct myfunction(struct mystruct param1) { struct mystruct result; result.foo = param.foo; return result; } It was really "fun" to see how they gave some 9kB structs to function as parameters and also returned them. I didn't even know that it was possible to pass entire structs in stack before they did it... Coming from C/C++, Java references first looked strangely hidden. With "int a=0; int b=a; a=1;" b!=a, but with "String a=""; String b=a; a="foo";" -> b==a. (Well, equals()). Having the * or & there explicitly reminds that they really are pointers. And why the structs were 9kB? I have no idea. Probably because saying "char foo[1024];" might be easier than "char *foo = malloc(1024);", as they probably didn't know about malloc() at first. And of course, after they figured out how to use malloc(), there wasn't a single free() in their server application. Why would one need such a thing when there's garbage collection? There's not? Whaaaat? In most other cases, they didn't "need" pointers, because they simply stored almost everything as global variables. And couldn't understand why global variables were a bad thing. So, it's really possible to program with C without pointers, but...
  13. Pointers[ Go to top ]

    <blockquoteSo, it's really possible to program with C without pointers, but...</blockquote> Right you are. But then in Java most things are "references" which is not to different from pointers really. The problem is more if you would want to remember how pointer arithmetic works all the time. When I was programming C there were pointers of course, but we did all kinds of stuff to hide the pointer arithmetic in functions/classes and the like. Wenn I was picking up C after a couple of mainly java years for some smaller projects I was actually surprised that there was still no standard library to create a hash map or an array or a tree or.... :-).
  14. Re: Pointers[ Go to top ]

    I still fondly remember turning in my first nontrivial university midterm project back in the nineties. We had to write several implementations of predefined data structures in a language of your choice and do some benchmarking. I wrote it in that newfangled thing called Java. The first question I got at examination was "How could you implement a linked list in Java? Java has no pointers." It was a dead serious question ...
  15. Seriously blaming about people "not understanding pointer concepts" is quite weird.
    Pointers are becoming the Latin of programming.
  16. And IT/CS/SE is where medicine used to be at the time of [url=http://en.wikipedia.org/wiki/Paracelsus]Paracelsus[/url]. (Evidence nr. 1: this site not having an "Edit post" feature)
  17. And IT/CS/SE is where medicine used to be at the time of Paracelsus.

    (Evidence nr. 1: this site not having an "Edit post" feature)
    'Nothing like a good blood-letting to motivate the team. Bring out the leeches....
  18. I don't know, sounds like the professors are right to me.
  19. In a lot of software an IT jobs, understanding how the language works is often seen almost as a negative. A lot of employers wish to believe that programming is a simple blue collar task for assembly line programmers. They want people 'trained' in a specific tool, not in high-level concepts. Perhaps instead of focusing on Java (which makes little sense to me) or what the schools are doing, we should spend more time attacking the fallacy of programming as unskilled labor that is so prevalent. I'd love to find a job where actually knowing things was seen as important. Maybe if there were more of those jobs around, schools would try harder to produce students for them. A lot of schools try to adjust their curriculum to what the job market desires.
  20. These kinds of jobs can usually be spotted fairly easily during the interview process. I've successfully avoided these kinds of developers like the plague so far, mostly by working at smaller startups or places where the mentality is obviously more focused on real engineering (like google) and not mass cluster-fuc$# production lines. No one likes building shitty products with shitty developers. There will always be people programming that don't enjoy their profession though, so just try and avoid them I guess.
    ..I'd love to find a job where actually knowing things was seen as important. Maybe if there were more of those jobs around, schools would try harder to produce students for them. A lot of schools try to adjust their curriculum to what the job market desires.
  21. Teach a variety of languages[ Go to top ]

    Java is great for teaching OO concepts, but not so great for teaching system programming or similar skills. Likewise, C (and arguably C++) are not as great for teaching OO concepts but are much better for teaching system programming, tight performance analysis, and similar kinds of programming where you need to be closer to the hardware. I'd posit that writing software in Ada for military defense systems leans more toward the latter set of skills than the former, which could explain the authors' complaints against Java. But Java's just being made the scapegoat; if a CS program is just teaching Java and not enough of the other facets/languages that you need to be a well-rounded software engineer, it's not a good CS program, that simple. Randy
  22. I'd posit that writing software in Ada for military defense systems leans more toward the latter set of skills than the former, which could explain the authors' complaints against Java. But Java's just being made the scapegoat; if a CS program is just teaching Java and not enough of the other facets/languages that you need to be a well-rounded software engineer, it's not a good CS program, that simple.
    I knew one of the software developers that wrote software for the Apache helicopter. I'm surprised those things can fly at all. He averaged over one bug per line of code (in C++), and that was before Java even showed up on the scene. "You can write assembly code in any language .." (Larry Wall) Peace, Cameron Purdy Oracle Coherence: Data Grid for Java and .NET
  23. I knew one of the software developers that wrote software for the Apache helicopter. I'm surprised those things can fly at all.
    Sometimes they don't really. http://www.cnn.com/WORLD/europe/9905/05/kosovo.02/index.html No hard evidence of the cause, but the information on the developer makes one wonder.... I guess it all depends on the problem domain one has at hand. The "hammer" talk of the original post says it all.
  24. Re: Teach a variety of languages[ Go to top ]

    Java is great for teaching OO concepts, but not so great for teaching system programming or similar skills. Likewise, C (and arguably C++) are not as great for teaching OO concepts but are much better for teaching system programming, tight performance analysis, and similar kinds of programming where you need to be closer to the hardware.

    I'd posit that writing software in Ada for military defense systems leans more toward the latter set of skills than the former, which could explain the authors' complaints against Java.
    Actually, Ada '95 was the VERY FIRST object-oriented language to be standarized. I received my CS degree in 1996 and my school taught introductory CS classes in Ada '83, the version before standardization. So, I learned the meaning and benefits of encapsulation, inheritance and polymorphism from the start. But, Ada also made extensive use of libraries, and pointers. It made my transition to C, C++, and then Java smooth as silk. In hindsight, I think Ada is a great foundational language and should be used by many more CS departments. It's great for both systems and application programming, but has a verbose syntax. The verbosity of the language made it extremely readable as a newbie, but it's probably the same reason the language never caught on in the commercial space. My $0.02, Orlando
  25. Hm, it's definitely not damaging to one's career though...I think our professor seems to forget the purpose of a degree is to provide the student with a way to make a decent living. In this aspect, knowing Java is anything but damaging.
  26. Hm, it's definitely not damaging to one's career though...I think our professor seems to forget the purpose of a degree is to provide the student with a way to make a decent living.

    In this aspect, knowing Java is anything but damaging.
    The article goes on to explain the damaging part is that CS students are coming out of college with the level of programming experience that can be easily outsourced to other countries. You expect want to graduate software engineers NOT programmers. They're not blaming Java the language, they are blaming the fact that almost all colleges have switched to Java as an intro language. Students were found to avoid writing code and instead look for a class or function in the numerous packages Java offers to do what they needed to do. With C all you got was simple functions like strcpy, strcmp. Since the Java packages are doing all the work the students have no concept of underlying performance. I see Java developers who have no background in C/C++ write some of the most crazy, memory hungry and unoptimized code because all they don't realize writing code is more than having a program work correctly.
  27. Java is not the language to be a professor, scientist or nasa-employee. Java is the language to GET WORK DONE and make you boss (and your bank account) happier.
  28. I agree with the professors for the most part. Java is not a well designed language from a computer science perspective. We have all discussed its many inconsistencies and other flaws. It isn’t the best language to use for teaching a number of important concepts. It is especially a poor language to use if you are trying to teach someone how computers really work. None of that means that Java is not useful or important or that students should not learn it. These guys deal in a world that is foreign to most programmers. How many people realize how many bugs there are in the CPUs and other hardware processors in the computers they use? Few of them ever get fixed through changes in the chip circuitry. Many of them never get fixed in microcode - ever. Compilers and operating systems include a number of workarounds, but even then, in the consumer and commercial world there are bugs everywhere and we just tolerate them. Certain systems - medical, defense, aircraft systems, as examples, cannot tolerate such errors. People die when errors are made in these systems. No one dies if a calculation done in one of my systems is off by .00001, but with some of the systems guys like this work on, they do. Have you ever wondered why the defense and aerospace industries are so slow to use the latest and greatest CPU’s? Did you laugh when you found out that some of our most high tech defense systems ran on 370 CPUs decades after they were considered “obsolete” in the commercial world? It’s because we in the commercial and academic worlds can afford mistakes and they cannot. In fact, we can so easily afford them that we seem to be no longer aware of how many things are constantly going wrong in the systems we use everyday. We grumble if we notice them, but we don’t get upset except in the worst cases. We are truly “fault tolerant”. Another example of how out-of-touch many programmers are with what really happens inside computers is how often hear folks in the commercial world referring to on-line processing as “real-time”. They don’t have a clue as to what real-time really means. They wouldn’t know how to program a real-time system if they had to. They don’t even get how being real-time involves the hardware and operating system as well as your run-time. It is just another example of how poorly educated most developers are in computer science. Real “real-time” is something guys like these do all the time. ADA was designed to support real-time and embedded systems programming especially in aerospace and weapons systems. Its value is that it is a very reliable way to produce such programs in a high level language. Java is not and was not intended to be. Java was intended to be good enough for commercial use and for the most part, it is. So consider their audience and their customers. They weren’t submitting their article to Serverside or to Slashdot. We shouldn’t judge it as if they did. Few of us are even qualified to work on the systems they build. It’s fair and reasonable for them to be concerned about where they will find qualified software engineers to continue their work. Our (the west) continued leadership in the world – especially in military terms – depends on the kinds of skills these professors are seeking in their employees. To Serverside’s credit, this post was a dig at the Slashdot children and their tendency to rant first and read later – if ever.
  29. Have you ever wondered why the defense and aerospace industries are so slow to use the latest and greatest CPU’s? Did you laugh when you found out that some of our most high tech defense systems ran on 370 CPUs decades after they were considered “obsolete” in the commercial world?
    I have wondered indeed. If they had used Ada and a certified compiler on the new hardware, all would be well (well, mostly well) and what is not well they could find out with the proper tests enabled. One of the reason for Ada is that we don't want to miss a planet anymore because of off-by-one errors!
  30. Not sure how Java is the issue[ Go to top ]

    A well-rounded CS curriculum will include an advanced course in programming languages that covers a wide variety of languages, chosen to broaden the understanding of the programming process, rather than to build a résumé in perceived hot languages.
    Umpteen years ago when I graduated with my BA in CS I was exposed to unix, lisp, assembly, fortran, C and pascal in my courses. If "Java" is ruining college courses because it is too easy to program in I have to blame that on the curriculum. Of course that is not to say I knew jack-diddly about programming when I graduated. Learning to program is entirely different than learning about programming and computer science. Same goes with almost any other degree. I'm guessing it took another 4-5 years before I started to be a pretty skilled programmer. Maybe we should blame the expectations that some kid with a fresh sheepskin is going to sit down and be able to crank out quality code. In reality I'd expect college to lead into an internship/mentoring phase where the skill of programming is focused on.
  31. Re: Not sure how Java is the issue[ Go to top ]

    Of course that is not to say I knew jack-diddly about programming when I graduated.... I'm guessing it took another 4-5 years before I started to be a pretty skilled programmer. In reality I'd expect college to lead into an internship/mentoring phase where the skill of programming is focused on.
    I agree. Mentoring and internships can be a huge factor. Our local CS program requires internships to graduate, and the interns we take on just sit down and work. For us, at any rate, it's about learning the skills and then putting them into practice. Ultimately, it's about doing the work and gaining experience. That may happen through self-directed projects, group projects/open source, internships, or entrepreneurship. Of course, you need the right foundation to even get to that point, which is what we're talking about here in this thread. Cheers, David Flux - Java Job Scheduler. File Transfer. Workflow. BPM.
  32. Re: Not sure how Java is the issue[ Go to top ]

    Learning to program is entirely different than learning about programming and computer science. Same goes with almost any other degree. I'm guessing it took another 4-5 years before I started to be a pretty skilled programmer.

    Maybe we should blame the expectations that some kid with a fresh sheepskin is going to sit down and be able to crank out quality code. In reality I'd expect college to lead into an internship/mentoring phase where the skill of programming is focused on.
    Agree wholeheartedly. Doctors graduating medical school cannot practice medicine until going through a residency program of at least 3 years. Residency is essentially a mentoring program. Unfortunately, businesses gave up on training at all a decade ago, probably as a result of cost cutting measures.
  33. I got into a little discussion about this with a coworker after reading Eckel's The Mythical 5%. Here's what I said then:
    1) This criticism seems akin to bashing Physics or Chemistry as not being science because some adherents are Nobel prize winners that discover DNA or subatomic particles while others study the flow rate of ketchup. Would you say "If this were a science, like it claims, we could figure out how to get everyone to the same level" ?
    What I think he is saying is that getting a degree in Computer Science doesn't make you fit for designing and building applications, any more than getting a degree in Physics makes you fit for designing and building cars. Sure, there is enough science going into making a car, just as there is plenty of science going into making an application, but both are still engineering endeavours. Science (the scientific method) is measurable and repeatable; engineering is often an art form (not to be confused with production, that's when an engineering process gets stable enough to be measurable and repeatable; at which point a canny manager can easily strip it of any vestiges of art and... outsource). In other words, if building applications were a science we could easily measure and repeat it. I know from previous discussions with you (the whole Steve process improvement saga) that you don't believe we can easily do that.
    Computer Science claims to be science because its underlying fundamentals are theoretical and/or pure mathematical models which by definition are scientific not because it claims to be able to make all people equally talented programmers.
    I agree with the first part of that sentence, the second, in my view, is based on an invalid premise. There is a tendency to mix Computer Science and Software Engineering (as well as to think that if a person works for an IT department and does QA, she can troubleshoot computer problems). Computer Science programs do not produce Programmers, they produce Computer Scientists. Most people who happen to like programming tend to go into Computer Science, but their ability to be good programmers has little to do with the major they chose and a lot with relentless practicing of their skills (I've also met good programmers with degrees in Biology, Psychology, History, Politics, etc.). If Math programs do not produce Mechanical Engineers and Physics programs don't produce Electrical Engineers -- nor do we expect them to, as there are dedicated majors for these occupations -- why do we routinely expect Computer Science graduates to do Software Engineering? Come to think of it XXXXXX is a perfect example for my argument. She is very sharp and has as good of a theoretical underpinning as an undergraduate UCSD student can be expected to have. Should she chose to further her degree, she'll be a good graduate student and probably a very capable researcher. Right now, however, she is useless as an engineer because her C.S. coursework did not teach her how to be one. She may very well end up a good developer, but there is no defined prescription for getting there. She'll have to be willing to struggle through it all, make mistakes and learn from them like the rest of us. On the other hand, there is a formula for getting better in science: the scientific method (over 10 years in academia I've seen awful meritocracy follow the formula, get their PhD, publish articles and eventually get a nice tenure position at a prestigious university). This is my understanding of what Eckel is saying.
  34. Hi Dmitry, Have we had discussions before? (I'm not trying to be vapid, I truly have no memory of it.) In any case, are you disagreeing that people coming into the field - regardless of with a CS degree or without - should be mentored or go through a training program?
  35. I don't think he addressed your point at all, but do think his comment was the most valuable made in the thread so far. I wish TSS supported up/down modding comments so that the little gems were made more prominent.
    Hi Dmitry,

    Have we had discussions before? (I'm not trying to be vapid, I truly have no memory of it.)

    In any case, are you disagreeing that people coming into the field - regardless of with a CS degree or without - should be mentored or go through a training program?
  36. Hi Dmitry,

    Have we had discussions before? (I'm not trying to be vapid, I truly have no memory of it.)

    In any case, are you disagreeing that people coming into the field - regardless of with a CS degree or without - should be mentored or go through a training program?
    There are designated Software Engineering programs that do just that: http://www.mse.cs.cmu.edu/Courses-Studio.html
  37. There are designated Software Engineering programs that do just that:

    http://www.mse.cs.cmu.edu/Courses-Studio.html
    It looks like a fine program and would certainly give a person desirous of becoming a software engineer a good background. I'm still highly in favor of people new in the field being placed under experienced developers on the job.
  38. Hi Dmitry,

    Have we had discussions before? (I'm not trying to be vapid, I truly have no memory of it.)

    In any case, are you disagreeing that people coming into the field - regardless of with a CS degree or without - should be mentored or go through a training program?


    There are designated Software Engineering programs that do just that:

    http://www.mse.cs.cmu.edu/Courses-Studio.html
    That looks like a good start, although every SE should have a course in software testing. Know how to break things is the first step towards designing systems that have fewer defects. Mark
  39. Hi Dmitry,

    Have we had discussions before? (I'm not trying to be vapid, I truly have no memory of it.)

    In any case, are you disagreeing that people coming into the field - regardless of with a CS degree or without - should be mentored or go through a training program?


    There are designated Software Engineering programs that do just that:

    http://www.mse.cs.cmu.edu/Courses-Studio.html


    That looks like a good start, although every SE should have a course in software testing. Know how to break things is the first step towards designing systems that have fewer defects.

    Mark
    http://www.mse.cs.cmu.edu/pdf/17-654%20Analysis%20of%20Software%20Artifacts%20syllabus,%20SP%2005.pdf While the "studio" is the core, there are other classes ...
  40. apology[ Go to top ]

    Hi Bill, I'm sorry about the confusion. I wasn't quoting you in the post, but my coworker's email. My bad for not making that more explicit.
  41. Re: apology[ Go to top ]

    Hi Bill,

    I'm sorry about the confusion. I wasn't quoting you in the post, but my coworker's email. My bad for not making that more explicit.
    Not a problem Dmitry. I liked your "take" by the way.
  42. I agree that the distinction between the 2 things is a very relevant to the current topic. I have seen a department of CS at almost every university, but very rarely a dept of SE. And I know for a fact that lots of the so called CS depts are trying to train engineers rather than scientists, admitted that there is overlapping between the two.
  43. I agree that the distinction between the 2 things is a very relevant to the current topic. I have seen a department of CS at almost every university, but very rarely a dept of SE. And I know for a fact that lots of the so called CS depts are trying to train engineers rather than scientists, admitted that there is overlapping between the two.
    Which is a riot, given that the vast majority of CS faculty have never written a line of production code in their life. The typically career path for a faculty member involves getting a PhD from a university, and heading straight into a tenure-track position. Have you ever heard of a CS program that requires new faculty to have N years experience as a practicing software engineer? Of course not. My one and only SE course as an undergraduate CS major was taught by a newly minted PhD that had never worked in industry. He taught from the textbook, not from real-world experience. Are surgeons trained by doctors that have never been in an operating room? Are defense attorneys taught by lawyers who've never practiced law in a courtroom? Physics != Mechanical Engineering Chemistry != Chemical Engineering CS != Software Engineering Until SE is treated as a distinct discipline, by faculty with actual SE skills and experience, we'll continue to pump out graduates ill-prepared for the software development field. Mark
  44. - The year was 1985 and I was trying to persuade my company to evaluate Ada in favor of FORTRAN since for sure the sponsorship of the DoD would make it the dominant language in the world. After finding out that double precision arithmetic was not supported (one of our key requirements) the thought was dropped instantly. You see, sometimes packages are useful. If 20+ years and the largest computer user community in the world weren't enough, slashdot articles won't help Ada to become a universal language. - If you're interested in real-time behavior go to http://java.sun.com/javase/technologies/realtime/ - I'm a big fan of formal methods, but if you employ them only while you're writing the code you're too late. They are design time methodologies. - Ada currently runs on the JVM as well. Garbage collection (a major obstacle to real-time processing) is not a feature of the language, but of the run-time system. - Anybody can write code from scratch. What's hard is achieving reuse. It seems that these professors aren't making any contributions in that area.
  45. Your post brings to mind a story I sometimes repeat to young programmers. A long time ago (late 70’s) in a land far away (still in the U.S. though), the local university, a major state institution had a large and powerful CDC computer (2 actually) that was excellent for making fast and precise calculations. It had 60-bit words so double precision gave you 120 bits. That was huge. The university helped pay the bills for these things they rented out time to some of the state agencies including the DOT. The DOT used IBM mainframes which were byte-oriented and not nearly as fast, efficient or precise as the CDC. It was also kept very busy doing accounting, project management and reporting. The DOT gave the university a contract so they could do their modeling and calculations for bridge and road design on the university’s CDC. All was well. One day some clever C.S. students who maintained the FORTRAN libraries decided they could do CDC one better in optimizing the math libraries and so they did and it was faster. Meanwhile back at the DOT some of the older engineers never trusted computers so they checked everything by hand or at least spot checked. One day they found that the computer’s calculations gave different results from their own. Apparently the C.S. students at the university knew more about programming than they did about math so they introduced errors such as failing to insure that while maintaining the correct order of operations they also sequenced calculations so as to preserve the maximum significant digits. They didn’t notice the bits dropping off the end of the register into the ether or they didn’t realize their significance – so to speak. One of the errors caught could have, according to the engineers, lead to a bridge collapse. So, the DOT cancelled their contract with the University, upgraded their mainframe and severely restricted the use of library and compiler operations. As one of the engineers commented to me, it was a good thing it was only bridges and not aircraft. If you don’t understand how the code you write is executed in the computer hardware, then either rigorously test or find something else to do.
  46. I wonder whether some people would have shed tears like this when C emerged as a prominent programming language and assembly programming started fading away :-). My humble opinion is we should try our best to adapt these changes that help improve productivity solve business problems rather than complaining about it Santhosh
  47. I wonder whether some people would have shed tears like this when C emerged as a prominent programming language and assembly programming started fading away :-).
    My humble opinion is we should try our best to adapt these changes that help improve productivity solve business problems rather than complaining about it

    Santhosh
    Not all the problems we are trying to solve are business problems and productivity is not an end in itself. Reliability and efficiency trump productivity in a number of areas. ADA was developed in an attempt to boost reliability (easier to read) and productivity (easier to program and more portable) without sacrificing too much (runtime) efficiency relative to assembler, JOVIAL and other approaches. It has been a big success from that perspective. ADA wasn't a success in terms of replacing COBOL, etc. as a business language. A lot of the blame for that can be traced to it's size. ADA was designed to do everything so, like PL/1, it was too big. People preferred smaller languages. That is a lesson we in the Java community should pay attention to.
  48. Re-treading old ground?[ Go to top ]

    Isn't this turning into a re-run of Should Java be banned from schools?. I suspect that it will proably come to the same conclusions. It's so nice to see re-use in action, isn't it ;-)
  49. Every few months an article seems to come up like this one. They boil down to a shifting balance between universities educating students and industry employing the products of the universities. Industry controls most of the demand side and much of the research money being being given to universities. Effectively, it has control. And here we - the people employed mostly by industry - debating curriculums aligned with industrial need vs. preparing students for the most technical challenges. What keeps going through my mind is that we don't know what we are as a field. Are we engineers, technicians, technical writers, etc.? Are we all of the above? Making the assumption that the professors whose article provoked this post are accurately describing a large enough sampling of the CS graduates coming out of universities, universities cannot improve curriculums until the field becomes better defined. If we are technicians, then trade schools or simple AS degrees should be sufficient. If we are engineers, then a more rigorous (and standardized) curriculum needs to be followed. Perhaps the type of applications being developed should decide for us which path to take: for business applications, have a few courses - in programming languages and architectures appropriate to businesses - leading to an AS; for systems work, follow a rigorous engineering curriculum as the professors prescribe. The "fly in the ointment" is that businesses need a compelling reason to hire highly-trained software engineers rather than someone with a liberal arts degree (for example) and some experience creating web apps. Until that reason exists, I don't see students opting to go the more difficult route. Use of Java in programming classes instead of C is really symptomatic and not causal.
  50. Somebody forwarded me this interesting paper: http://www.cs.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf
  51. Makes only partial sense[ Go to top ]

    I recently interviewed for a job where the interviewer asked a lot of low level questions as well as many questions that delved deep into the workings of the Java collections classes. While the authors of this article would have given this person whose title was 'chief architect' a gold star as being a super duper pro programmer I was less impressed. When I asked him what the job was about he replied that it involved working on a Hibernate like framework. When I asked why not use Hibernate or Top Link he replied that they weren't up to snuff. Hmmmm, it's hard to believe that his team at a business whose core competency was completely unrelated to I.T were doing the business any favors by spending time and money building and maintaining an O/R mapping framework! It's probably less of a loss for a company to hire someone who writes unoptimized code than to hire someone whose so wrapped up in his techie hubris that he ends up spending millions of dollars on software that does not make business sense. While pointers etc are great and CS students should study c and assembly it's really important to understand the value and use of libraries and reuse if you want to add value in most I.T jobs. I have written c code and while a little harder to write and understand than Java code is actually a LOT harder to maintain and reuse than Java code. There is certainly a lot that students can learn from Java if it is taught correctly. I do agree that it is also very important to teach the other languages.
  52. Re: Makes only partial sense[ Go to top ]

    When I asked him what the job was about he replied that it involved working on a Hibernate like framework. When I asked why not use Hibernate or Top Link he replied that they weren't up to snuff. Hmmmm, it's hard to believe that his team at a business whose core competency was completely unrelated to I.T were doing the business any favors by spending time and money building and maintaining an O/R mapping framework!
    Something like this is often a tough call. Of course, probably 80% of scenarios like this are "not-invented-here" scenarios. I have seen people building the exact same functionality as in some (small and free and open source!) libraries, and, when I pointed that out to them, they always found a "good excuse", why they did not want to bother to use the library. These libraries where often so small, that it seemed bizarre not to use them, or simply copy their source code. However for larger and more complicated tasks there might be the situation, where a rather complicated product (like, say hibernate, for the sake of it) is missing a critical feature. For example, you might not be able to change your datasources and you just can't get the object model mapped. Chances are, understanding what the product to create the required enhancement does might cost you more than building it from scratch. This can also happen if your core business is unrelated to IT. It is another question if you need a permanent employee for tasks like this. You might be better off making a long running contract with an external contractor (ideally a person, not a large company) and have open sourcing the result a part of the contract. Processes like this have catered for some of the finest open source software pieces out there...
  53. Re: Makes only partial sense[ Go to top ]

    Yes I agree that there might be situations where it might make sense to do your own OR mapping framework. I worked at a company with very smart programmers and we did our own in house Java OR Mapping framework but that was in 1996! I don't believe this to be the case with the interviewer I mentioned though since his explanation didn't include things like missing features or database incompatibility (they were using Oracle BTW). My point is that I have seen very very often in my career that people who have sound skills in programming make bad big picture decisions either because they love a technology too much or they are tech snobs like 'Microsoft sucks' etc or have the attitude that they know better than others. Understanding other products out there and that technology is a tool and not an end to itself is fairly important if you want to add value. Too often in interviews the focus is only on if you can use fancy recursion or understand the inner workings of a linked list without paying attention to any other skills. It sounds to me that the professors mentioned in the article have this same viewpoint. They don't see the value of knowing how to use what from a library. With all the software out there it's really important to learn how to use and work with others work. Doing this doesn't mean that you don't know how to program.
  54. Doesn't C# provide the utilities as well which Java does ?? Why Java alone is to blame ??
  55. I think this article misses a point. There is a tension when teaching computer science to students. Do you teach it as a craft (similar to how you would teach auto repair or plumbing) or as engineering (similar to how you would teach civil engineering), or as a science (similar to how you'd teach physics). All require different methodologies. All will produce vastly different students at the end of their courses. Teaching computer science as a craft is appropriate for many kinds of jobs out there (hacking web-pages and writing small desktop applications). But, these students are technology focused and can easily lose their job when the market changes. The problem is that (in my experience) students prefer to learn this kind of computer science (actually, I should be calling it "programming"---it is not a science) because it is easier than the other kinds to learn and and it is easier to get a job immediately after graduation (albeit lower paying). Teaching CS as a science or engineering discipline is harder (both for the instructor and for the student), but I would argue more rewarding and it is possible to get better jobs in the long term with this kind of teaching. Teaching CS as engineering will likely produce students who are capable of creating large and complicated middle-ware systems. Teaching CS as science will emphasize the mathematics and produce students who are capable of writing complex algorithms. Of course, this isn't mutually exclusive. I think each teaching institution must determine what kind of student they want to produce and then design a curriculum around that. In many cases, teaching only Java is reasonable because it is the dominant language and it will give some people much needed jon training.
  56. lmao[ Go to top ]

    Wow it's funny how things come full cirlce. I never finished my CS degree because it was worthless. Students graduated without being able to program and it was all Ada, assembler, PASCAL and C++. Not only is this a pile of bullshit, anyone stating this either doesn't remember what it was like in my time when people can't program then either, or they are trying to save the jobs for their assembler friends. Do I want to use pointers? No. Do I get paid to know how to use pointers? No. Can I learn to use them if I have to? Yes, if someone is paying me. Good programmers are good programmers, others aren't. It really is that simple.
  57. Do schools even teach programming?[ Go to top ]

    Schools teach students programming language syntax and language features but do schools teach students what constitutes good code, how to debug, how to refactor? There is a difference between teaching how to program and teaching how to be a programmer.
  58. Re: Do schools even teach programming?[ Go to top ]

    Schools teach students programming language syntax and language features but do schools teach students what constitutes good code, how to debug, how to refactor?

    There is a difference between teaching how to program and teaching how to be a programmer.
    I certainly do. My students are introduced to unit testing, TDD, design patterns, refactoring, naming and packaging conventions, proper selection and use of data structures, reusability, etc. Why do I teach this? Because too many places don't. Why? It's been my belief for a long time that the professors/instructors in the vast majority of universities have never written production code for a living, and are basically teaching CS, and not SE. Mark
  59. Fundamentally, the professor needs to (re)examine a fact of life: there is currently greater need for software mechanics than software engineers. Certainly the requirements for scientists in the field are narrow and highly demanding. A general purpose career preparatory eduction (which what higher education is in US) must take that into account. That said, all they have to do is mandate a course on the design and internals of the Java Virtual Machine. Every single aspect of the "beautiful" lower level constructs can be exposed and explained in that context, alongside of 'veiling' of 'beauty' solutions such as libraries, garbage collection, and reference types, etc. Teach them JVM, along side with Java Application Programming (aka "Java"), and your students would be authoritative on code to metal and all layers in between.
  60. Fundamentally, the professor needs to (re)examine a fact of life: there is currently greater need for software mechanics than software engineers.
    Why is this is a fact of life? I think you may be confusing cause and effect here. Most "programmers" or "software developers" are not software engineers or computer scientists. They are people who picked up some software development skills either our of interest or more commonly career advancement. So perhaps there is greater consumption of software mechanics because there is a so much larger supply of software mechanics. So much larger, in fact, that many employers can't tell (at least before hiring) whether an individual is a mechanic or an engineer, and possibly will never know the difference.
  61. I think you may be confusing cause and effect here. Most "programmers" or "software developers" are not software engineers or computer scientists. They are people who picked up some software development skills either our of interest or more commonly career advancement.

    So perhaps there is greater consumption of software mechanics because there is a so much larger supply of software mechanics. So much larger, in fact, that many employers can't tell (at least before hiring) whether an individual is a mechanic or an engineer, and possibly will never know the difference.
    To extend your argument a little further, it could also be true that consumers of software products have been conditioned to the products of software mechanics for so long that they don't realize the benefits of products written by engineers. On the other hand, by way of comparison, in my area of the US (New England) electricians are in much greater demand than electrical engineers. There is some truth to the original post that a lot of work out there just doesn't require the much greater design skills that an engineer brings to the job.
  62. On the other hand, by way of comparison, in my area of the US (New England) electricians are in much greater demand than electrical engineers. There is some truth to the original post that a lot of work out there just doesn't require the much greater design skills that an engineer brings to the job.
    I see your point, but electricians have to deal physical buildings. Software can be created once and cloned infinitely. I think the "factory workers" and "mechanics" of enterprise software are system administrators, database administrators, etc. They deal with getting the software deployed and keeping it running, while the engineer focuses on the next model.
  63. I see your point, but electricians have to deal physical buildings. Software can be created once and cloned infinitely.

    I think the "factory workers" and "mechanics" of enterprise software are system administrators, database administrators, etc. They deal with getting the software deployed and keeping it running, while the engineer focuses on the next model.
    My reference to electricians was just to make a point about the type of tasks they take on vs. their university educated brethren. Electricians take on the maintenance work. For instance, we have a knob-and-tube circuit in my house. I'm not going to call an electrical engineer to replace it and I'm not sure I'd trust an EE to have the skill to do it. With software, I doubt it would be valuable having a software engineer adding a tab page to an existing application or sub-classing an existing Command class for a new command. Electricians would also deal with electrical design for new homes since there's not much design there: put an outlet and possibly coax on every wall. On the other hand, with commercial buildings, you'd better have an electrical engineer designing the electrical system. Likewise, a software engineer should be involved with the design and construction (here's where my analogy breaks down since EE's don't run cabling) of a real-time medical system.
  64. I do see your point of view. Its a difficult problem to determine if it is correct. Alternatively, one could argue that engineers have failed to provide a viable solution. Part of the equation, like it or not, is the facts highlighted by the thread and the topic: quality of education and ultimately plain experience. (I personally don't see a lack of academic training a serious obstacle to a intelligent developer. Software is -- and this is why I love it -- a very a open field. With the exception of the hardware platform, the entire field of activity is virtual. So a curious mind and various orthogonal capabilities are really all that is 'required'.) Another element in the equation, the problem that must be addressed beyond mere satisfaction of functional requirements, is the whole process of building and operating the software. For various reasons, we are generally kept out of the finance loop of the software 'field', and relegated to the 'engine room' in a way. I have no doubt that given the brain power that is required to hack good code should we be allowed in the loop, we will intelligently address the issues. But fact is, most of us are in speculation land regarding a fairly important part of the problem(s) that our 'mind product' is supposed to address. Point being that it is not clear at all if a viable 'solution' to the 'problem', in toto, has in fact been devised as a product of engineering and scientific research to date (which clearly is wide ranging, in parts brilliant, and fairly extensive). The problem(s) remain. And, it may in fact be the case that the problem(s) remain due to the mismatch between workers in the field expected to assemble (or make use of) the mind product of engineers and guys who speak in lambda calculus. (Be realistic. Look how much grief J2EE specifications caused the Java community, and that merely addresses distributed components with fairly primitive and finite set of concerns. Imagine what would happen if the system addresses domain concerns, semantic adaptation, etc. Mind melt will be quite prevalent .) My point of view (at this point in my experience to date) is that short of abandoning code as a first class artifact and resorting to a strategic investment in Data and (reducibly) Relational data stores which perhaps in their latter day manifestation will embody domain models directly and using Code as a disposable (transient) artifact, a set of system types will emerge that hide all the complexity away. And it can be dumbed down all the way to choo choo metaphors , etc. The other alternative that I see is to make the component dream actually factual. Then we can take the model out of the data and take software out of the arts and crafts paradigm (thus "mechanics". Artisans, really.:) and into an industrial paradigm. (Plenty of examples to consider. Take your pick: Civil, Machanical, Aerospace, Hardware, ...) List goes on and on. The sole exception is software. (Thus: "[academic] efforts have not been viable to date.") The non-technical, but rather organization alternatives, are also emerging precisely to address these 'distinguishing' facts about software development. Open source, for example, and the collective ("bazaar" model) approach, can be looked at as proto-guilds. This also clearly explains why the studio/atelier approach is also emerging -- cf. JBoss, RedHat, Apache Commons, etc. These latter non-technical solutions are the only viable avenues to avoid having narrow specialization (mechanic) as a widely required characteristic. Software usage is exploding and it will (if it is not already) be ubiquitous. Required for the functioning of 'civilization'. Its like the Oil of mind products. (And we're the middle east of mind-product workers.;) I personally do not believe we will be permitted to form viable Guilds (as with Bankers, or Lawyers, for example ) precisely because the sort of egalitarian mindset that the current generation is inclined towards (perhaps intrinsic to Good software engineers one likes to think) coupled with the phenomenal power that a software guild would wield would inevitably cause conflicts of interest between established (virtual/informational: Money, Law, News, etc.) powers and any (inevitably international as you must see) Software guild. Money is just a bunch of numbers and an instrument is software, really. (Think.) So given all that, you must see why it doesn't pay for the established 'industry' to want to properly educate software engineers. Its academic, really ...
  65. I believe it's the curriculum and the professor's that are at fault. The same arguments could be made against C#, visual basic, etc..... Java is a great language for teaching many concepts such as OOP, multi-threaded programming, AOP, unit testing, and so forth. Is it the answer to all programming needs? Absolutely not. But it's a good start with a relatively small learning curve compared to straight C or (gasp) assembly. I personally consider myself a well rounded programmer. I attribute this in part to the curriculum I had in school. My classes exposed me to pascal, C, C++, assembly, LISP (and to some degree, SCHEM), java, ada, and fortran among others. In addition, we used various domain specific languages for things like generating language parsers and compilers. Today's curriculums seem more focussed on teaching something that students can use right out of school, rather than teaching concepts, and building the theoretical (and practical) foundation to make good software engineers.
  66. I disagree with being Java is damaging for students things, but I agree with that Java is not the system programming language - yet -. In the title I listed a set of roles related to the SW field. To create good computer scientists you don't need a language neither Java nor Ada, you need to learn them the algorithmic thinking which is not related my any mean to a language. But I agree with one thing specially when the major study is CS - which happened with me already in college - Before joining my college they used to teach Pascal, but at the year I joined the college they started to teach C which was great for me as I like this language and its features very much, which also really helped me in understanding systems programming and stuff, but when I graduated from college I found that Java and .Net are the dominant cause most of SW systems at least in Egypt are not based on systems programming but they are solutions for business fields at most of times, and being from a C/C++ background didn't help me much in Java or .Net but in understanding the syntax quickly and the OOP concepts too in a motr delicate way as you have to do them a tricky way in C world. After all language is not the think that damages or not damaging, it is the way of thinking and how you can understand the system you develop and use the suitable tool for that.