Slashdot Mirror


What Makes a Programming Language Successful?

danielstoner writes "The article '13 reasons why Ruby, Python and the gang will push Java to die... of old age' makes an interesting analysis of the programming languages battling for a place in programmers' minds. What really makes a language popular? What really makes a language 'good'? What is success for a programming language? Can we say COBOL is a successful language? What about Ruby, Python, etc?"

1,119 comments

  1. The "un-success" of a language by Slashdot+Suxxors · · Score: 3, Funny

    Is directly proportionate to the amount of /. posts talking down on it.

    Fact.

    1. Re:The "un-success" of a language by haifastudent · · Score: 1

      Is directly proportionate to the amount of /. posts talking down on it. Fact. I've often thought that simple talking about a language would make it popular. It doesn't matter what you've heard about PHP, if digg is always full of "PHP suxorz" articles then the user will tend to learn PHP when he needs something. This goes for casual users, not for programmers who have learned their trade at a university.
      --
      Thank for reading to the sig. You may stop reading now. It is safe. There is no more content. Why are you still reading?
    2. Re:The "un-success" of a language by TravisO · · Score: 2, Insightful

      Define success? If we're talking about pure headcount then... I'd have to say ease of use and accessibility are the two only factors, because elegance, quality of implementation nor raw speed are factors in PHP nor classic ASP, both of which are/were very popular. All the glory seems to be in web development, people seem to forget that 95% of the developers at Microsoft are still writing C++ and rewrite 15yr old code bases to .NET isn't something MS is considering.

    3. Re:The "un-success" of a language by hdparm · · Score: 2, Insightful

      One does not learn their trade at a university. University prepares one for learning the trade.

    4. Re:The "un-success" of a language by Moderatbastard · · Score: 0

      And karma is inversely proportional to how many times you ask: does it run on linux?

      --
      1/3 of jokes get modded OT. If you get the joke, mod 1 in 3 insightful/interesting/underrated to restore karma balance.
  2. Beards by AioKits · · Score: 5, Funny

    I thought it was the beards on the creator(s) of the language that determines the success?

    --
    "Quote me as saying I was mis-quoted." -Groucho Marx
    1. Re:Beards by AchilleTalon · · Score: 1

      Hum, you forgot the sandals colors which may contribute to the beard's effect.

      --
      Achille Talon
      Hop!
    2. Re:Beards by Anonymous Coward · · Score: 0

      No No its the mustache.

    3. Re:Beards by Anonymous Coward · · Score: 0

      Berks all the way baby

    4. Re:Beards by Anonymous Coward · · Score: 3, Funny

      GOTO BEARDS

    5. Re:Beards by VGPowerlord · · Score: 4, Informative

      That article is basically a rip of this one by Tamir Khason. Heck, it's essentially a blatant copy of the 2004 version of Tamir's article with some of the 2008 pictures thrown in!

      --
      GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    6. Re:Beards by jo42 · · Score: 1

      No, it is the fanboiz and The Latest Fad c)(tm).

    7. Re:Beards by DarkAvZ · · Score: 1

      Moderators: parent is being insightful, not funny... might even be informative should he/she had cared to provide the link that AC later posted!

      --
      09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
    8. Re:Beards by Anonymous Coward · · Score: 1, Funny

      I was recently talking with Bjarne Stroustrup, and I mentioned the beard thing to him. (Apparently he'd gotten several hundred Slashdot etc. related emails to the same effect, but I told him to his beardless *face*.) He appreciated the general sentiment, but it seemed to me he didn't -believe-. A bunch of us grad students in the lab have started a petition, so cross your flindas.

    9. Re:Beards by Bloke+down+the+pub · · Score: 1

      I don't know them personally, but I think you're being a bit harsh on them. Well, apart from Stroustrup.

      --
      It's true I tell you, feller at work's next door neighbour read it in the paper.
  3. Off the top of my head? by steeljaw · · Score: 4, Insightful

    Portability and scalability are what win it for me, I like to write my code once and it's got to be powerful enough to deliver a complex solution.

    --
    Procrastinators, Unite Tomorrow!!
    1. Re:Off the top of my head? by OrangeTide · · Score: 4, Interesting

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Dynamic typing where you can create new identifiers implicitly is pretty scary to me. I'm not even sure what Python offers over the dozens of other languages that preceded it.

      --
      “Common sense is not so common.” — Voltaire
    2. Re:Off the top of my head? by agrounds · · Score: 5, Insightful

      Portability and development speed are what drive it for me. Most of what I code is for log parsing, network device configuration, and reporting. To that end, I have never seen a need to look too far beyond Perl. It does everything I need with very minimal effort and development time, even for reasonably complex projects. Still, when Perl code becomes too large to work with effectively even after breaking down individual tasks, I change languages.

      I think the point is "which tool fits the current need best." Far too many people seem to want to use a hammer when a screwdriver would work better out of potentially misguided allegiances. Languages are no different than any other tool.

      I suspect TFA is more 'overrated' than 'insightful' since it makes some gross generalizations, cites search results as indicators of popularity, and completely neglects some of the nicer features of the popular scripting languages.

    3. Re:Off the top of my head? by SatanicPuppy · · Score: 5, Insightful

      Well, it's got a better object model than Java, and it's a lot faster to code with. Java just isn't appropriate in every situation.

      Python also plays well with C, so it's often used in concert with C for interfaces, etc.

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    4. Re:Off the top of my head? by amccaf1 · · Score: 5, Insightful

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java.
      I'm having similar questions, only wondering why people would prefer Ruby over Java. I've had to start learning Ruby for a variety of reasons so I've been reading Ruby tutorials off and on for a week or so.

      I don't think that Ruby is bad, not by a long shot. It's seems fairly decent and it doesn't seem to be lacking anything necessary. I'm just curious as to why someone would pick Ruby over some other language. I'm not quite understanding what the "killer app" of Ruby is. I'm not sure why this language had to be created.

      My understanding is that the main reason for choosing Ruby is to use it with Rails (which I have not looked at yet). And yet it's rare for me to read a good word about Ruby on Rails.

      Does anyone else get the impression that a lot of these newer languages are simply solutions that are looking for problems?
      --
      "Flag on the moon. How did it get there?"
    5. Re:Off the top of my head? by Dan667 · · Score: 3, Insightful

      I have always thought of computer languages as tools in the toolbox. After understanding the problem and coming up with a plan, the computer language I pick tends to be the best tool to do the job and require the least amount of effort to develop it. Need CAD speed? Use ANSI C. Need text processing? Use perl.

    6. Re:Off the top of my head? by Schadrach · · Score: 5, Informative

      Need code that you KNOW has no errors aside from logic errors on the part of the programmer? Use Ada. That's really where Ada fits. You can do very little wrong without the compiler screaming at you and then failing to compile. Like as in, things that cause C "warnings" cause Ada to fail compilation until you fix it. Need to rapidly produce major components, and easily wrap C for the lower level, more performance intensive stuff? Use Python. No, really. That seems to be Python's main niche. It's a great language for writing large blocks of program logic very quickly, is poor at low-level stuff, but can trivially wrap C to do the things it is very poor at.

    7. Re:Off the top of my head? by Maljin+Jolt · · Score: 2, Funny
      I'm not even sure what Python offers over the dozens of other languages that preceded it.

      I will show you. It is that lispilly haskellish funkshunional coding style available in python. Can you do it in C?

      #!/usr/bin/env python
       
      import sys
       
      def main ():
        return reduce(lambda b,c:(lambda x:(lambda r=sys.stdout.write(chr(x)):x)())(c+b), [32,40,29,7,0,3,-67,-12,87,-8,3,-6,-8,-67,-23])
       
      main()
      --
      There you are, staring at me again.
    8. Re:Off the top of my head? by ShieldW0lf · · Score: 5, Insightful

      The thing that makes a programming language successful is the existence of a large group of programmers who are familiar enough with the language to use it. That's pretty much it.

      If I can start a project in a particular language, get hit by a bus half way through, and finding someone else to sit in my seat and finish the project isn't a problem, then the language is a success. If I don't have that confidence, then the language is nothing but an interesting curiosity for academics.

      Pretty cut and dried.

      --
      -1 Uncomfortable Truth
    9. Re:Off the top of my head? by jcgf · · Score: 3, Insightful

      I hate any language that places significance on whitespace (if they would have just put a complex type into C we could have killed fortran before the 77 version and this Python shit wouldn't be here but alas).

      I also only find Monty Python mildly amusing at best (the jokes are funny but go on for too long and I'm growing tired of all the idiots that quote it all the time).

      Fact - C is the best language of all time. If your program is more than a few lines of bash it should be in C. Ritchie is God (yeah that's right, capital 'G') and Stroustrup should be shot for sacrilege!

      To mod troll or funny; that is the question. The thing is I'm not kidding.

    10. Re:Off the top of my head? by p3d0 · · Score: 3, Informative

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Assuming that's an honest question...

      I wouldn't write a large system with Python, but I use it a lot for quick (say up to 1 kLOC) programs because it has a clean, pseudocode-like syntax for expressing algorithms that is terse without being cryptic. It has enough error checking to help me avoid a lot of mistakes, but not so much that it slows down my hacking. It doesn't necessarily have the best regular expression syntax, or the best performance, etc. etc., but it suits me for the scripts I write.
      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    11. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Dynamic typing and implicit identifier creation are only scary until you get used to it. Think of it like flying:

      Guy: "OMG, you actually leave the ground?"
      Pilot: "Yup."
      Guy: "Isn't that dangerous?"
      Pilot: "Sure beats driving..."

      Anyway, that's my take, as a Perl developer with Java schooling and occasional Python/Ruby tendencies.

    12. Re:Off the top of my head? by Jerry+Coffin · · Score: 1

      Portability and scalability are what win it for me, I like to write my code once and it's got to be powerful enough to deliver a complex solution.

      I like to write my code once, and it has to be so much more powerful that it can deliver a simple solution, even if the problem may be quite complex.

      But then I still use C++ more than anything else, so I'm clearly not "with it."

      --
      The universe is a figment of its own imagination.
    13. Re:Off the top of my head? by jsnipy · · Score: 1

      I guess that makes if the scope is to write one program, forget about, never try to integrate it, or scale it.

      --
      -- if you mod me down, I will become more powerful than you can possibly imagine
    14. Re:Off the top of my head? by maxume · · Score: 1

      From what I can tell, the python community is not particularly obsessed with quoting monty python. More than 0, but much less than all the time. So maybe only hold that against the language a little bit.

      No doubt these would be faster in C, but I don't think they would be particularly clearer:

      http://norvig.com/sudoku.html
      http://norvig.com/spell-correct.html

      --
      Nerd rage is the funniest rage.
    15. Re:Off the top of my head? by Firehed · · Score: 5, Funny

      return reduce(lambda b,c:(lambda x:(lambda r=sys.stdout.write(chr(x)):x)())(c+b), [32,40,29,7,0,3,-67,-12,87,-8,3,-6,-8,-67,-23])

      And this is why God invented comments.
      --
      How are sites slashdotted when nobody reads TFAs?
    16. Re:Off the top of my head? by geekoid · · Score: 3, Insightful

      And the advantage of it being a sloppy maintenance nightmare developed by noobs.

      Where the hell do you get C and bloat together? If anything written in C has bloat, the developer should be promoted away from coding immediatly.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    17. Re:Off the top of my head? by geekoid · · Score: 1

      And coding like that is an advantage, eh?
      Jeez what crap.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    18. Re:Off the top of my head? by SnapShot · · Score: 1

      For me, the "killer app" of Ruby was reading lines like 3.times { puts "Hello World!" } or ('a'..'e').each {|c| print c } in a basic tutorial and thinking to myself "this is a very pretty language". It's the first language I've taught myself because of the beauty of the code (as opposed to a work requirement).

      Of course, beauty is in the eye of the beholder. YMMV

      --
      Waltz, nymph, for quick jigs vex Bud.
    19. Re:Off the top of my head? by Kupek · · Score: 5, Informative

      You've probably never done any coding in Python. Check out the book Dive Into Python (it's free and online): http://www.diveintopython.org/ Even browsing through it will give you a better idea of what Python is good for.

      Personally, I think of Python as a prettier and more coherent version of Perl.

    20. Re:Off the top of my head? by SQLGuru · · Score: 1

      Just like those contests to write Conway's game of life in as few lines of C code as possible.....

      Just because you can, doesn't mean you should.

      I'm sure not even many Python programmers would make sense of that gibberish, but the code should be readable to anyone with a programming background even without knowing the language. I know what loops are and arrays and object references and, etc. But this load of crap is complex just to be complex.

      My best interpretation of this code is that is transforms the string of numbers as some sort of message and prints it to the screen, but I'm not going to bother trying to figure out what the message is. Even without knowing the language, I assume LAMBDA is some dynamic definition of the named parameter. But why wouldn't I just write printf( "Some message?" )?

      Layne

    21. Re:Off the top of my head? by SnapShot · · Score: 1

      This is, of course, the real answer to the question. I wish I had mod points.

      All the advantages of a language are lost if no one else writes in it.

      The next question is how to get a large enough population of people to use your new language.

      --
      Waltz, nymph, for quick jigs vex Bud.
    22. Re:Off the top of my head? by OrangeTide · · Score: 4, Interesting

      Well I think Java's object model is superior. Perhaps it's only a matter of taste rather than cold hard logic.

      --
      “Common sense is not so common.” — Voltaire
    23. Re:Off the top of my head? by CarpetShark · · Score: 1

      Java DKs/REs/apps can be a real pain in the ass to get running -- especially in various distros (assuming you're not willing to simply install Sun's version, hosing any package manager you might use) -- so much so, that It's not unheard of for people to search for mainstream apps written in any language BUT java.

      On the dynamic typing vs. declarations side... yeah, I tend to agree. However, I for one would use C++ over python, EXCEPT that python is just so much faster to develop in. It's amazing how much time you can waste, specifying all the types for an app, defining interfaces, deciding what container classes to use, etc. In python, you mostly just code, and the speed gain is phenomenal.

    24. Re:Off the top of my head? by ggvaidya · · Score: 1

      No, no, you're supposed to make it say "Just another Python hacker".

      Noob.

      (I keed, I keed: I'm just glad I've got something to show all those "you use Perl why man it's crap on big projects you need something simple something obvious something straightforward may I recommend Python" people ...)

    25. Re:Off the top of my head? by clubby · · Score: 1

      Where the hell do you get C and bloat together?
      He didn't, he (correctly and appropriately) associated Java and bloat.
    26. Re:Off the top of my head? by jcgf · · Score: 2, Insightful

      They would be just as clear if you used a regex library and didn't manually parse the characters or something silly.

    27. Re:Off the top of my head? by libkarl2 · · Score: 1

      I'd have to agree. Well written Ruby is *very* easy on the eyes.

      --
      You are where you are at the time you are there.
    28. Re:Off the top of my head? by Mr.+DOS · · Score: 1

      So where does that put the creator of C++? ;)

            --- Mr. DOS

    29. Re:Off the top of my head? by rawler · · Score: 2, Interesting

      When someone ask me, I'd say Java has more or less managed to hit exactly the sour-spot between a quick, agile and productive language such as Python, and a performant and lightwheight language such as C/C++.

      If any language manages to find a good compromise in between, though, I would say it's D. I find the Design-By-Contract features to be brilliant, it's flexibility and power is close to Ruby/Python (and combines some of the best aspects of both), while performance and memory-use is fairly close to C++ (and waay better than Java).

    30. Re:Off the top of my head? by OrangeTide · · Score: 4, Insightful

      People are quite capable doing quick things in Java without pulling in giant bloaty enterprise frameworks. Plus Python is bloat, I think it's like 40M+ installed.
      As for banging out quick projects, I tend to do them in C or shell scripts because I know they will either become real projects or they need to be understood by all.

      Also doing things in a scripting language and having C do the heavy lifting... sounds like Tcl, Lua, JavaScript. Python offers nothing new there.

      --
      “Common sense is not so common.” — Voltaire
    31. Re:Off the top of my head? by gbjbaanb · · Score: 1

      EXCEPT that python is just so much faster to develop in. It's amazing how much time you can waste, specifying all the types for an app, defining interfaces, deciding what container classes to use, etc. In python, you mostly just code, and the speed gain is phenomenal./quote?

      Or to put it in other words, when people say that they program in Java because it makes them more productive, you're saying that python takes that, trumps it and makes you as productive as ten java programmers.

      And when they say, yes but Python doesn't scale as well if you code like that, you can say that if you want performance and detailed design, you code it in C++ which gives you even more structure and speed over your code.

      So, to summarise: you should never code in Java, only in either C++ or Python, depending on the task at hand. Good job you can easily mix the two for the ultimate in programming power.
    32. Re:Off the top of my head? by OrangeTide · · Score: 0

      Python is for people who think code is art.
      C is for people who want to instruct a computer to perform an operation.

      And I can't do that in C because I don't know what it does... your code is useless because it cannot be easily understood. Thanks for convincing me never to use Python. ;)

      (I'm guessing it adds each int to it's neighbor and prints it)

      --
      “Common sense is not so common.” — Voltaire
    33. Re:Off the top of my head? by goombah99 · · Score: 3, Insightful

      I hate any language that places significance on whitespace I used to feel exactly the same way. Then I got used to it and man is it such a good idea. It not only is easy to scan, but it has the effect of making everyone's code look the same. That is, I can scan your code almost as easily as I can scan mine.

      Yaml does the same thing with whites space and the power of it is really evident when you compare it to JSON or XML. indeed you can put XML and JSON or HTML right into YAML without doing anything other than indenting it. No quoting, escapes, etc. so the other code looks "native" to the reader not encoded.

      So I totally understand your fear of it. But it's just not justified and you are missing out on a big deal in language enforced, clean coding style that pays big dividends.

      --
      Some drink at the fountain of knowledge. Others just gargle.
    34. Re:Off the top of my head? by libkarl2 · · Score: 1

      Wouldn't want to, even if it was possible. The gift of C does not smile on the dissolute.

      --
      You are where you are at the time you are there.
    35. Re:Off the top of my head? by CarpetShark · · Score: 2, Informative

      Yes. For a mixture, D seems like the ideal option, but it's so lacking in libraries that it's next to useless for the moment.

    36. Re:Off the top of my head? by Vornzog · · Score: 1

      I prefer Python to Java for one very simple reason - it is the most pragmatic development language I've ever used (Perl included).

      The dynamic typing, memory management, etc. mean that on average, developing a program in Python is ~10x faster than doing the same program in C. Note that what most C hackers are actually scared of is weak typing, and Python is a strongly typed language (Perl is what you are really scared of).

      The object model is cleaner than any other language I've ever worked with, but you don't need the overhead of OO to write one-off scripts, like you do in Java.

      The core language is clean, and there is a great emphasis on making programs easy to read, which means that maintenance for Python programs is *much* easier than any other language I've ever worked with.

      The whitespace thing is a non-issue. You were going to indent your code anyway, weren't you? My indentation habits really didn't change much at all when I started using Python.

      The standard library, while not covering the breadth that Java's does, vastly simplifies all of my common daily tasks. There are also bindings to a huge number of toolkits that were written for other languages (wxWindows, etc.).

      Python plays well with other languages. Hardcore algorithms can be written in C and called from Python. Jython sits on top of Java, and offers all the ease of development of the Python language with the underlying breadth of Java's library. IronPython is the .Net version. Python makes a nearly perfect 'glue' language to manage any number of other programs written in any number of other languages with any number of I/O formats.

      I could go on, but it comes down to this. Python doesn't do everything. If you must have pure speed, try C. If you are developing a huge code base, take advantage of the breadth of Java's library. If you need really good threading, check out Erlang. For pure text parsing, nothing has managed to touch Perl yet. Ada even has a place for those who demand the strictest typing. But, if you are doing prototyping, RAD, one-off scripts, mid-sized application development, or anything that could be done in Perl but needs to be maintained for more than 5 minutes, Python deserves a look.

      Python does most things very well, and almost nothing badly. And unless you know you *need* something like C's speed or Java's massive library, you'll find that you can develop the application so much faster in Python that there is rarely a reason to go anywhere else. For most projects I've been involved with, development time matters much, much more than an extra couple seconds of execution time.

      Python lets me do everything I want to do, faster, easier, and more readably. Is it perfect for every task? No, but it's pretty damn good for mine.

      --

      -V-

      Who can decide a priori? Nobody.
      -Sartre

    37. Re:Off the top of my head? by AnomaliesAndrew · · Score: 5, Insightful

      I tend to agree with you that personal preference is one of the biggest factors in the choice of a language... but it's the strengths and weaknesses inherent in any language (or more so the language's purpose) that also shapes this. I rarely use only one language/model anymore.

      For instance, in my day to day life, I see a clear distinction as to when procedural/object oriented languages such as C, PHP, and Java should be used, and when a relational language like SQL should be used, and I rarely confuse those two classes of programming. Markup languages (though hardly programming languages) like HTML and CSS also have their essential and distinct roles. Were I forced to select only one, I'd probably quit programming!

      Programming languages are just tools to get the job done. When was the last time you saw a carpenter with only a chisel?

      Everybody's so quick to get into pissing matches.

      (Forgive any flawed terminology, I was just speaking casually.)

      --
      Move all sig!
    38. Re:Off the top of my head? by arevos · · Score: 1

      I don't think that Ruby is bad, not by a long shot. It's seems fairly decent and it doesn't seem to be lacking anything necessary. I'm just curious as to why someone would pick Ruby over some other language. I'm not quite understanding what the "killer app" of Ruby is. If you're used to languages like Java, it's very difficult to see the advantage in languages like Ruby, because they solve problems that you may not have even considered were problems.

      For instance, let's say you want to log when a specific piece of data is changed on a class. In Java, you'd inherit from the base class, override the setters, and add your logging code in:

      class FooLog extends Foo
      {
          void setBar(String bar)
          {
              super(bar);
              Logger.debug("Called bar with " + bar);
          }
       
          void setBaz(String baz)
          {
              super(baz);
              Logger.debug("Called baz with " + baz);
          }
       
          void setBang(String bang)
          {
              super(bang);
              Logger.debug("Called bang with " + bang);
          }
      }
      In Ruby, you don't need such redundancy. You could create a function that automatically overrides the setters for a list of variables.

      class Foo
        log_changes :bar, :baz, :bang
      end
      Frameworks like Rails make extensive use of features like this, cramming a huge amount of functionality in a very succinct form. For instance:

      class Post < ActiveRecord::Base
        acts_as_tree
        belongs_to :forum
        belongs_to :user
        validates_presence_of :subject
        validates_length_of :body, :maximum => 5.kilobytes
      end
    39. Re:Off the top of my head? by jcgf · · Score: 4, Funny

      I can't tell if you're being serious or if you are trying to mock the way Christians try and convert me all of the time.

    40. Re:Off the top of my head? by gbjbaanb · · Score: 5, Funny

      "this load of crap", sir, is the latest cool new thing. Why else would microsoft spend lots of ther precious development and research resources on adding lambda functions to C#, creating F# and why Haskell is now the de-jour of forums and blogs around the world.

      Why, I believe you are one of those old style programmers who believe in making things simple, easy to read and maintain, straightforward to develop and simple to understand. How will you appear superior to your colleagues and peers if you write code that they can understand? You have no clue, sir, of the need nowadays to preen your feathers by appearing to "grok" something as obtuse and needlessly obscure as this kind of coding style.

      If your code is so simple, and anyone can understand it, then there is no reason why it can't be shipped offshore to Elbonia. So, get with the program and spend at least an hour a day "refactoring" your code to the required level of spaghettiness. Thank you.

    41. Re:Off the top of my head? by FishWithAHammer · · Score: 0, Flamebait

      I don't think that Ruby is bad, not by a long shot. It's seems fairly decent and it doesn't seem to be lacking anything necessary. It makes PHP and Python look fast.

      It does nothing notably better than what already exists.

      The community is fucking retarded.

      It has no legitimate place; it's mostly adopted by people who want to be "different." (Not saying that's you, but seriously--look at all the Ruby code out there and find just one example of it being significantly better than code written in Python or, hell, even PHP.)
      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    42. Re:Off the top of my head? by tzot · · Score: 2, Informative

      People are quite capable doing quick things in Java without pulling in giant bloaty enterprise frameworks. Plus Python is bloat, I think it's like 40M+ installed.

      As for banging out quick projects, I tend to do them in C or shell scripts because I know they will either become real projects or they need to be understood by all.

      Um. Great information. Python is like 40M+ installed. On Windows? Linux? Bloat compared to, say, Java? Do you include the quite extensive library under your 'bloat' characterization?

      As far as quickies go, a change of email software on a client site required the old mailboxes to be converted into maildirs. While their admin searched in the web for an appropriate program, I coded a script in 15 minutes (that's three versions of the script; one to convert to maildir, one to include saved mail folders from the user home directories, and one to make sure that already read messages remained marked as read for the new POP/IMAP software.

      It's obvious that everyone chooses their own tools. Python works for me on many levels. Sorry it doesn't for you.

      --
      I speak England very best
    43. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Personally, I think of Python as a prettier and more coherent version of Perl.


      Why would you want pretty and coherent? You're coding in perl, aren't you? XD

      But seriously, I have seen (and coded) pretty and coherent perl, building enterprise systems that deal with GBs of data. It's doable. It requires discipline, but you can do it - and use strict;. It's amazing how much more readable Perl becomes when, for example, variables don't just appear out of the blue.
    44. Re:Off the top of my head? by molarmass192 · · Score: 1

      I'm with you, dynamic typing is bad mojo. Some people love it, but it makes for some really nasty hard to find bugs and hard to follow coding practices. For my money, C/C++/Java/ObjC are where it's at. None are interpreted languages, none have dynamic types (unless pointers can be thought of as such), and they all can be packaged as binaries. I understand the arguments for scripting languages (quick prototypes / on the fly edits), but I think they're given way too much weight. JavaScript is a bit of an oddity in the scripting camp because it's virtually omnipresent and is firmly hunkered down on it's pedestal, although Flash and VBScript gave it a good run. I don't mind JavaScript, it's fairly object friendly, but the fact that everything is a "var" has always rubbed me the wrong way.

      --

      Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws-Plato
    45. Re:Off the top of my head? by OeLeWaPpErKe · · Score: 1

      Plus python was nice in the hands of programmers who knew lambda calculus and enjoyed using it.

      Right now, it's becoming more and more obvious that it's turning into the next visual basic (sorry, but honestly, have you watched the mailinglists ? It is)

    46. Re:Off the top of my head? by OrangeTide · · Score: 2, Interesting

      Bloat compared to Lua or C. and 40M on Linux. Although JVM+classes(about 75M) aren't all that large either until you install J2EE.

      qmail comes with the utility, written in C, do convert mbox to maildir. You wasted your effort for not using google hard enough.

      I've heard stories identical to yours from Perl users. I just don't see the hype when people have been doing the same thing in other languages for years.

      --
      “Common sense is not so common.” — Voltaire
    47. Re:Off the top of my head? by maxume · · Score: 1

      That's a relatively superficial issue to take up. The part that I find powerful about that code is the composition of the built in data objects to solve the problems in a straightforward way.

      --
      Nerd rage is the funniest rage.
    48. Re:Off the top of my head? by DiogoBiazus · · Score: 1

      Actually, if your talking about the JDK API, this is not a language carcteristic, you could write similar API for python or use Jython instead. But if your talking about how it handles inheritance and encapsulation, then Python has some extra features that I miss in Java (like multiple inheritance and real getters and setters).

    49. Re:Off the top of my head? by naasking · · Score: 5, Interesting

      Killer apps are overrated. Ruby is an expressive language, period. Studies have shown that software developers can only write a few lines of correct code per day. Making those lines count for as much as possible is important from a correctness, and a maintainability perspective.

      Furthermore, application complexity increases non-linearly with lines of code. The fewer the lines of code, the more maintainable and understandable the program.

      This is one reason why C is a poor choice of application language, because it requires verbose solutions, and why OCaml is a better choice.

      So the winning factor of Ruby over Java is its expressiveness. The big downside is the loss of static typing, and the subsequent loss of certain pre-runtime guarantees. If we could have both, we'd have a real killer language.

    50. Re:Off the top of my head? by Kupek · · Score: 1

      One can produce clean systems using Perl - but that's not what I said. I said Python itself is prettier and more coherent than Perl. Perl's object model is an afterthought. And I see sigils as noise in my code.

    51. Re:Off the top of my head? by jgrahn · · Score: 1

      Also doing things in a scripting language and having C do the heavy lifting... sounds like Tcl, Lua, JavaScript. Python offers nothing new there.

      Of those languages, only Tcl has a longer history (as a well-known general-purpose language, at least) than Python. And lots of people find Tcl antiquated, primitive and ugly.

      What Python offers is a free, high-level scripting language with a simple and elegant syntax, a good standard library, and strong, dynamic typing. It happens to be easy to write Python wrappers for C code too -- about as easy as Tcl, I'd say -- but it's hardly its main strength.

    52. Re:Off the top of my head? by naasking · · Score: 1

      Chris Oakasaki on Indentation Syntax. Sorry, but his word carries a lot more weight than yours.

    53. Re:Off the top of my head? by EsbenMoseHansen · · Score: 1

      I can't speak for everyone, but ruby's main features over Java is: closures, less-broken type model, less-broken syntax, lists and hashes as firstclass objects, mix-ins and closures. I know I mentioned closures twice, and that was on purpose.

      I very likely forgot some important points.

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    54. Re:Off the top of my head? by DiogoBiazus · · Score: 1

      Good point, functional programming style is available in Python, Ruby and other scripting languages. This techiniques can spare you a lot of coding time, and you can't use this kind of thing in Java. In C it's possible but will bring more problems than benefits (ugly black magic code).

    55. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Hello, world!

    56. Re:Off the top of my head? by Yath · · Score: 3, Insightful
      Java is a fraction the complexity of C++. I understand that was one of its main missions - to be as powerful as, but easier to use, than C++.

      Ruby is an order of magnitude lower in complexity compared to C++. Whereas Java continues to mix objects and immediate values (e.g., int and Integer types), Ruby has only objects. Java's mixed model has a cost when programming. You may reply that the immediate int gives you a speed and optimization advantage, and that is true, but it misses the point. Java gave up speed compared to C++ to make things easier on programmers, and Ruby simply continues in that vein. You can't criticize Ruby for continuing what Java accomplished to a much lesser degree.

      There are numerous other examples - Ruby's iterators, for example, are a generation past what Java has to offer. You can find plenty to appreciate in Ruby vs. Java before you even start to talk about advanced language concepts like closures.

      Does anyone else get the impression that a lot of these newer languages are simply solutions that are looking for problems?


      I hear only complacency in the above comment. You've learned a language well, and find it hard to imagine a better way. Well, your lack of imagination does not equal evidence.
      --
      I always mod up spelling trolls.
    57. Re:Off the top of my head? by neumayr · · Score: 1
      --
      Truth arises more readily from error than from confusion. -Francis Bacon
    58. Re:Off the top of my head? by VGPowerlord · · Score: 1
      I'm not sure why that's pretty... because it uses OO stuff?

      'cause..

      3.times { puts "Hello World!" } // Ruby
      for (1..3) { print "Hello World!\n"; } # Perl
      echo str_repeat ("Hello World!\n", 3); // PHP
      and

      ('a'..'e').each {|c| print c } // Ruby
      for ('a'..'e') { print; } # Perl
      foreach (range('a', 'e') as $c) { echo $c; } // PHP
      are the same constructs in different scripting languages. Python undoubtably has similar constructs, but my only experience with Python is through frameworks.

      arevos has a much better argument as to why Ruby is pretty elsewhere in this thread, particularly when compared to Java.
      --
      GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
    59. Re:Off the top of my head? by feijai · · Score: 1

      Well, it's got a better object model than Java
      Wow, there's no accounting for taste.

      Python has a class model in syntax, but the underlying semantic implementation is a prototype model. Thus it manages to achieve the worst features of both: the speed of a proto model and the flexibility of a class model.

      If Python had bothered to go with a pure proto model, then you'd have something to say.

    60. Re:Off the top of my head? by Just+Some+Guy · · Score: 2, Funny

      import crypt;_=r'KZ[i.KqX8jDtA6Uwv!V01d?&iQ#bs,aL\yP<hkAFJ:TE{';print ''.join([crypt.crypt(''.join(x),'ks')[2:5] for x in zip(_[::3],_[1::3],_[2::3])]).replace('/',' ')
      --
      Dewey, what part of this looks like authorities should be involved?
    61. Re:Off the top of my head? by epukinsk · · Score: 2, Informative

      I'm having similar questions, only wondering why people would prefer Ruby over Java... My understanding is that the main reason for choosing Ruby is to use it with Rails...

      I always thought Ruby was just popular because of Rails, but I've been starting to write more Ruby code lately, and I'm starting to see some benefits of the Language itself. Namely:

      Ruby is REALLY good for unit testing.

      You may or may not be into unit testing, but if you are, Ruby really shines here. It shines because everything is mutable in Ruby. If a class has a method defined, you can change it on the fly. This makes many developers cringe because it seems so messy: "What do you mean the behavior of the method changed in the middle of execution?!!!"

      And that's a well-founded fear. Changing object functionality on the fly when what you really need to do is design your objects better is BAD. VERY BAD. But there are a few places where it's just The Right Way To Write The Code. Like any language construct, *cough* GLOBALS *cough*, it can be used for good or evil.

      Where Ruby's mutability can be used for Good is unit testing. Specifically, for creating mock objects. Say you have a method A which relies on method B that you're already testing elsewhere. You want your test to tell you whether A is broken, not whether (A OR B) is broken.

      In most languages this is hard or impossible, because it means reaching inside the execution of A and temporarily changing the functionality of B. But in Ruby (with Rspec) it's easy:

      it "A should work without testing B" do
          SomeBigNastyObject.should_receive(:B).with('somedata').and_return('someresult')
          MyObject.A.should == 'whatever_a_returns'
      end

      Note that my specification of SomeBigNastyObject just has the normal definition of B. The should_receive method is added by Rspec, and that method CHANGES the functionality of B so that it just returns the right value.

      And if you write your test this way, the SomeBigNastyObject.B method is never called! It just works as if B returned 'someresult'. In addition, this test makes sure that that method WAS, in fact called, and called only once.

      This really is the way unit tests should be written, and Ruby does this really well. You can do it in Java with the Reflection API, but it's messier.

      Erik

    62. Re:Off the top of my head? by Anonymous Coward · · Score: 1, Interesting
      The community is fucking retarded.

      Thank you.

      I know all the little ruby people will take offense, much like all the little perl people did 10 years ago whenever you said something negative about a regular expression (the ones that knew "regex" was shorthand for "regular expression".) Java was sort of the first language to launch with marketing, it was a language that was marketed, had some thought leaders, they quickly put together some conferences and stuff, did everything to "make it popular." Ruby is trying to do the same thing but the community is a bunch of misfits and insecure little twats.

      Not just do they want to be different, there is peer pressure that they attempt to apply to get others in their tribe to feel insecure about not being different.

      The language is nice, but every damn time the big differentiating factor is a closure and iterating through a set. How about something like reversing the bytes in a file or calculating prime numbers or something.

      The other thing to me, is there are companies trying to do all ruby solutions, like Twitter or Penny arcade, and without exception they need to invoke other solutions. What's the allure when you have to write C code anyways? At least in Java there is a chance that there is a pure java solution that will perform, it seems exceedingly rare for people to write much C to speed up Java applications anymore. With Ruby, Python, PHP, it's the norm. I guess that's technically a language implementation problem rather than a language problem but the lack of good implementations is of concern.

    63. Re:Off the top of my head? by Tiro · · Score: 1

      Ruby was created because the Object model in Perl was understructured and therefore impossible to engineer with. Compare Damian Conway's 1999 Object Oriented Perl and Damian Conway's Perl Best Practices published eight years later. Half the OOP tips in the new book tell you to do the opposite of the techniques taught in the old book.

    64. Re:Off the top of my head? by chromatic · · Score: 1

      Ruby was created because the Object model in Perl was understructured and therefore impossible to engineer with.

      Ruby predates Perl 5, so that can't be true.

      (Also the Perl 5 object model is a port of the Python object model.)

    65. Re:Off the top of my head? by Phantom+of+the+Opera · · Score: 1

      I'm sure not even many Python programmers would make sense of that gibberish, but the code should be readable to anyone with a programming background even without knowing the language. The above opinion is the reason why people do goofy godawful slow and icky things rather than use a simple regular expression. Its why, rather than write a complex 10 line SQL statement, people will write a 300 line (or worse) memory hog.

      I don't understand the above line of code; I'm not a python programmer, but I'm sure I could spend 5 mins to learn the syntax and understand it perfectly.

      I'm sure it would replace boatloads of code that I'd otherwise have to slog through.
    66. Re:Off the top of my head? by bob.appleyard · · Score: 3, Funny

      You can't do lambda calculus in Python. I tried, it gave me idiotic syntax errors. Something about the lambda keyword being a crippled piece of shit.

      --
      How dare you be so modest!! You conceited bastard!!
    67. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      I said Python itself is prettier and more coherent than Perl.
      If by "pretty and coherent" you mean "lacking in syntactic sugar", then I'm with you. But I think most folks these days consider the more elegant version of Perl to be Ruby. I don't remember ever hearing someone say that Python was pretty Perl.

      Perl's object model is an afterthought.
      Certainly. Perl was not conceived as an OO language. In any case, Perl's object model is Python's object model.
    68. Re:Off the top of my head? by ggvaidya · · Score: 1

      "Help, help, it's reformatting my hard disk!"

      Hehe. Nicely done!

    69. Re:Off the top of my head? by kellyb9 · · Score: 4, Insightful

      Java just isn't appropriate in every situation. No programming language is.
    70. Re:Off the top of my head? by kellyb9 · · Score: 1

      ...Without needing to incorporate a gazillion bytes of bloat? That's right! If anyone is going to put bloat into my code, it'll damn sure be me!
    71. Re:Off the top of my head? by Just+Some+Guy · · Score: 1

      Thanks! Getting the right values to feed into crypt() was the hardest part.

      --
      Dewey, what part of this looks like authorities should be involved?
    72. Re:Off the top of my head? by monkeythug · · Score: 1

      Well, I'd rather just not get hit by a bus, but that's just a personal preference ;-)

      --
      Don't you wish you hadn't wasted 3 seconds of your life reading this sig?
    73. Re:Off the top of my head? by bytesex · · Score: 1

      I don't mean to troll, but if you're mainly a C hacker, what good is your opinion on any object model ? You didn't accidentally mean C++, did you ?

      --
      Religion is what happens when nature strikes and groupthink goes wrong.
    74. Re:Off the top of my head? by bnenning · · Score: 1

      Dynamic typing where you can create new identifiers implicitly is pretty scary to me.

      A lot of it is just what you're used to. Are you "scared" of the pointer manipulation tricks you can do in C?

      I'm not even sure what Python offers over the dozens of other languages that preceded it.

      Succinctness, which is not to be confused with terseness and unreadability (for that, see Perl). If I need to create a list with two objects it's just [a,b] rather than a mess of ArrayList and Object[] line noise. If I want to specify a callback I just pass the function, rather than constructing elaborate Executor interfaces and inner classes. More than any other language I've used, Python gets out of my way and lets me focus on the actual problem I'm trying to solve rather than constantly interrupting my train of thought to keep the compiler happy.

      Also, generators are fantastic.

      --
      How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
    75. Re:Off the top of my head? by emilper · · Score: 3, Insightful

      lambda (functions) - kinda old, like 50, 60 years, if I remember well

      Haskel suddenly very popular ? - the hordes of VB programmers got woken up to the world of threads

      Elbonia - you're late, now Elbonians ship spaghetti code back to the less muddy countries

      What makes programming languages popular ? - libraries ... now I'll shut up and go back improving my code spaghettizer ...

    76. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      I would find it hard to believe that 300 lines could be reduced to 10 in any language. Unless you are talking about collapsing whitespace and curly-brackets, which most compilers do anyway. Some compilers will optimize code such as:

      int a=1;
      int b=2;
      int c = a+b;

      I doubt the extra memory use will ever be noticed.
      -JZ

    77. Re:Off the top of my head? by ahabswhale · · Score: 1

      Well, it's got a better object model than Java... How do you figure that?
      --
      Are agnostics skeptical of unicorns too?
    78. Re:Off the top of my head? by Tiro · · Score: 1
      I should have said that:
      Ruby is becoming popular because it resembles Perl with easy OO conventions bolted on.

      I shouldn't have used the term 'object model' rather I should have said 'conventions'

      The conventions provided by Ruby are helpful for people who have less experience

    79. Re:Off the top of my head? by goombah99 · · Score: 1

      There are lots of reasons to say pythons sucks. The white space issue is not one of them. it merely seems radical. once you buy in, you wish every language was that way.

      --
      Some drink at the fountain of knowledge. Others just gargle.
    80. Re:Off the top of my head? by WaKall · · Score: 5, Funny

      To be fair, chisels aren't Turing-complete.

      When's the last time you saw a contractor with 7 power-drills all made by different manufacturers?

      The answer is somewhere in between - one language isn't enough, but many languages are indeed superfluous.

    81. Re:Off the top of my head? by ultranova · · Score: 1

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Dynamic typing where you can create new identifiers implicitly is pretty scary to me. I'm not even sure what Python offers over the dozens of other languages that preceded it.

      Python is an excellent scripting language. It can be used to make quick and dirty programs with the minimum of hassle. The problem is that some people insist on making actual applications with it; dynamic typing and lack of data hiding make it unsuitable for that, and the resulting programs tend to be very fragile.

      --

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

    82. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      return reduce(lambda b,c:(lambda x:(lambda r=sys.stdout.write(chr(x)):x)())(c+b), [32,40,29,7,0,3,-67,-12,87,-8,3,-6,-8,-67,-23])

      And this is why God invented comments. That is actually fairly clear to someone that is familiar with functional programming. It would not need a comment unless you are on a team that does not frequently use lamba's.
    83. Re:Off the top of my head? by fyngyrz · · Score: 3, Insightful

      C is perfectly capable of many of the most useful object oriented techniques. Objects with methods and locals, classes (instantiating objects from models), inheritance -- all of these are easily and efficiently implemented in C without library or compiler-generated overhead. All the while, the programmer can remain in complete control, and the application can remain fast and lightweight. You can't do everything; there are some object-oriented paradigms that don't fit, but frankly, they're not critical. The important parts are easily managed.

      --
      I've fallen off your lawn, and I can't get up.
    84. Re:Off the top of my head? by raftpeople · · Score: 1

      terse without being cryptic
      Wine taster becomes techie

      "This code is robust without being pretentious"
    85. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      SOAP support is non-existent. The #1 way to do it was via what Rails offered, but they too abandoned SOAP support. All you find is hype about REST and (semi-)abandoned 3rd party libraries.

      It's pretty hard to use Ruby in any corporate setting, it's either SOAP or gtfo the environment... It's shame because Ruby might become large.

    86. Re:Off the top of my head? by Millenniumman · · Score: 1

      Personally, I find that static typing gives rise to excessive complicated code just to get around it, C++ templates being a good example, and it also causes obscure type error.

      Also, Objective C is dynamically typed (C types aren't, but objects are).

      --
      Stupidity is like nuclear power, it can be used for good or evil. And you don't want to get any on you.
    87. Re:Off the top of my head? by StarfishOne · · Score: 1

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java.


      I think it's the whole "Python fits in your brain" thing. Or as ESR has once put it: Python is the language that comes the least between you and the problem you're trying to solve and I completely agree with that.

      Speaking for my self, just as an example and not trying to start a X vs Y war:

      I have to lookup how to open a file for input in Java every single time.. in Python my first guess is usually correct and opening files is just a matter of filehandle = open("file.txt", "r")

      I do not like the hoops through which Java is trying to make me jump at all..

      http://www.javacoffeebreak.com/java103/java103.html

      That was my first surprise. My second came a couple of hours into the project, when I noticed (allowing for pauses needed to look up new features in Programming Python) I was generating working code nearly as fast as I could type. When I realized this, I was quite startled. An important measure of effort in coding is the frequency with which you write something that doesn't actually match your mental representation of the problem, and have to backtrack on realizing that what you just typed won't actually tell the language to do what you're thinking. An important measure of good language design is how rapidly the percentage of missteps of this kind falls as you gain experience with the language.


      Source and a nice read with the subject "Why Python?":
      http://www.python.org/about/success/esr/

      My personal experience are summed up with the lines:

      - Easy to write and maintain.

      - A very fast development time compared to many other languages.. and for most applications I work on, my time is more precious than that of a CPU.

      And it's not just for me... my customers love it and are amazed how frequently I can come with a functional prototype or a completely working application. If the app. runs in 2 or in 5 seconds is far less important for what I'm doing. (Yes, low level, high performance computing is a different story)

      - Powerful and flexible enough to do most things I want, scales from small to big apps, from functional programming to OO programming; excellent modules.

      - Because the language is almost pseudo code like, I notice that I have noticeably less bugs in my code. Not just just the moment after writing it, but in the entire lifespan of the application I have less maintenance than I think any other language.
    88. Re:Off the top of my head? by the_povinator · · Score: 1

      #!/usr/bin/env python

      import sys

      def main ():
      return reduce(lambda b,c:(lambda x:(lambda r=sys.stdout.write(chr(x)):x)())(c+b), [32,40,29,7,0,3,-67,-12,87,-8,3,-6,-8,-67,-23])

      main()

      This program just prints out hello, world. I just ran it, but I was hesitant to do so after a shell script that I previously ran from a Slashdot .sig crashed my machine.
      --
      The .sig is dead, and I believe I had a hand in killing it.
    89. Re:Off the top of my head? by DeVilla · · Score: 1

      I'm not even sure what that lispilly haskellish funkshunional coding style is supposed to be, but based on your example, yes I believe I can write unreadable, unmaintainable code in C. I call it job security.

    90. Re:Off the top of my head? by fyngyrz · · Score: 1

      Python:

      for i in range(3): print "Hello World!"

      and...

      for i in range(ord('a'),ord('f')): print chr(i),

      or, for explicit specifications...

      for i in "abcde": print i,

      ...though these aren't really the kind of constructs that showcase python, I must say.

      --
      I've fallen off your lawn, and I can't get up.
    91. Re:Off the top of my head? by owlstead · · Score: 1

      Try the checkstyle plugin in Eclipse (for Java of course). And thank god there is auto-complete, clean and fix :)

    92. Re:Off the top of my head? by BECoole · · Score: 1

      And the way to make sure there is a large group of programmers who can use the language? Make the language & IDE simple and powerful.

      When I started to learn Java using NetBeans, I was shocked to find that there isn't a data aware 2 column combobox widget readily available. What has to be one of the most commonly used widgets for desktop programmers, a dropdown that displays a string and returns an ID number, isn't available.

      VB has that widget as a standard. There is a reason why there are more lines of VB code than any other language and it isn't because of verbosity.

    93. Re:Off the top of my head? by StarfishOne · · Score: 1
      I'm not sure if you're referring to Python, but just in case:

      Andy reasonably experienced programmer can pick up basic Python in two days or so.

      A friend of mine switched from Perl to Python and was writing IRC bots a day later.

      ESR describes how he was doing metaclass programming in less than a week:

      To say I was astonished would have been positively wallowing in understatement. It's remarkable enough when implementations of simple techniques work exactly as expected the first time; but my first metaclass hack in a new language, six days from a cold standing start? Even if we stipulate that I am a fairly talented hacker, this is an amazing testament to Python's clarity and elegance of design.


      http://www.python.org/about/success/esr/

      And since syntax/readability is to a large extend guaranteed by the whitespace in Python, it'll only become easier to dive into existing code for someone else.

    94. Re:Off the top of my head? by jcgf · · Score: 1

      Sorry, but an appeal to authority doesn't prove a point.

      http://en.wikipedia.org/wiki/Appeal_to_authority

    95. Re:Off the top of my head? by naasking · · Score: 1

      And yet, his arguments are clearly thought out, and have empirical data to back them. Unlike yours. One then wonders why you're not an authority like him. It's truly a mystery.

    96. Re:Off the top of my head? by fyngyrz · · Score: 1

      Like as in, things that cause C "warnings" cause Ada to fail compilation until you fix it.

      The source code for an image manipulation / FX application I work with every day consists of over a hundred megabytes of C source code. You can recompile the whole thing and, unless you just screwed up whatever you did, there will be no warnings. Not one.

      If you came to my company and started writing code that generated warnings, you'd first be notified that wasn't acceptable (and handed back your code for rework), and if you persisted, you'd find yourself looking for another job.

      As long as the compiler will warn us about things, there's no need for warnings to turn into errors. There's simply a need for discipline on the part of the programmer(s).

      --
      I've fallen off your lawn, and I can't get up.
    97. Re:Off the top of my head? by fyngyrz · · Score: 1

      I'd rather just not get hit by a bus

      If it happens, just remember to #include "shyster.h", that's all.

      --
      I've fallen off your lawn, and I can't get up.
    98. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      What's wrong with Haskell? seems more appropriate for lambda lovers.

    99. Re:Off the top of my head? by OrangeTide · · Score: 1

      You can do something very close to closures (and by some definitions they ARE closures) in both Java and gcc's C. I just wish coroutines, closures and continuations (the 3 C of a good language) were all part of "normal" Java.

      --
      “Common sense is not so common.” — Voltaire
    100. Re:Off the top of my head? by DragonWriter · · Score: 1
      You say:

      I hate any language that places significance on whitespace


      You later say:

      Fact - C is the best language of all time.


      So I guess you hate all languages, since in C, the following two programs, varying only in whitespace, are very different:

      int main(int argc, char **argv) {
        int foo;
        foo = 0; // or... foo = argc-1;
        exit(argv[foo][0]);
      }
      vs,

      int main(int argc, char **argv) {
        int foo;
        foo = 0; // or...
        foo = argc-1;
        exit(argv[foo][0]);
      }
      Or, heck, if you don't consider C99 "real" C, ask yourself why C has a line splicing character ("\") to convert multiple physical lines into a single logical line: if whitespace (newline vs. space/tab) wasn't significant in C, you would never need such a tool.
    101. Re:Off the top of my head? by FishWithAHammer · · Score: 1

      I've never seen that necessary in PHP--got a source for it? (Aside from the core libraries--which are written in C for performance reasons more than anything--the commonly available PHP libraries I know of are written in PHP.) Agreed for Python and Ruby though.

      Thanks for the downmod on the GP, mods. I hope you went back to wanking over Ruby and all your little buddies congratulated you for STICKIN' IT TO THE HATORZ.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    102. Re:Off the top of my head? by Anonymous Coward · · Score: 0
      Studies also show that it's not the actual line count that contributes to the errors, it's just a convenient mechanism for measuring it and trying to compare it to something else.

      Was this supposed to be market humorous? I know it's a subtle humor that maybe lost on Rubinistas much like it was on Perlmongers back in the day.

    103. Re:Off the top of my head? by WGR · · Score: 4, Insightful

      Killer apps are overrated. Ruby is an expressive language, period. Studies have shown that software developers can only write a few lines of correct code per day. Making those lines count for as much as possible is important from a correctness, and a maintainability perspective. That implies that you should be programming in APL.

      There is much more to good programming languages than short code.

      This is one reason why C is a poor choice of application language You are under the mistaken impression that C is an application language. It is not. It is a system programing (high level assembler) language. That is why so much buggy code is written in C. It has none of the proper error checking built in to it that an application language should have. This provides the ability to get closer to the machine than other languages, but that is the role os system langages, not application languages.
    104. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      I believe that style of coding is known as "refuctoring":
      http://www.waterfall2006.com/gorman.html

    105. Re:Off the top of my head? by stonemetal · · Score: 1

      int a =5; inta=5; one is valid C, one is not. All because of significant white space so looks like we need to chuck C while were at it.

    106. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Dare I say it... the Object Oriented Programming fad is over.

    107. Re:Off the top of my head? by Kazoo+the+Clown · · Score: 2, Funny

      That implies that you should be programming in APL.

      I AM programming in APL, you insensitive clod!

    108. Re:Off the top of my head? by DragonWriter · · Score: 1

      I'm not sure why that's pretty... because it uses OO stuff?


      Its pretty because how it reads reflects what it does (though maybe the Ruby interpretation of the PHP version, below, is even better.) You could also do close analogs to the Perl and PHP versions if you wanted to in Ruby, e.g.:

      Perl:

      for (1..3) { print "Hello World!\n"; }
      to Ruby:

      (1..3).each { puts "Hello World!" }
      PHP:

      echo str_repeat ("Hello World!\n", 3);
      to Ruby:

      print "Hello World!\n"*3
    109. Re:Off the top of my head? by jcgf · · Score: 1

      Now you resort to personal attacks. What are YOU an authority on? Quoting other people's blogs on Slashdot?

    110. Re:Off the top of my head? by uid8472 · · Score: 1

      You can't do lambda calculus in Python. I tried, it gave me idiotic syntax errors. Something about the lambda keyword being a crippled piece of shit.

      No, you can still use the lambda calculus. You just have to Church-encode all your data types, use beta-redexes for variable binding and the Y combinator for recursion (and thus loops), and so on for any language feature you want to use which is "supposed to be" a statement.

      Only problem is that you'll run out of stack eventually, as Python lacks proper tail calls.

    111. Re:Off the top of my head? by mrchaotica · · Score: 1

      For my money, C/C++/Java/ObjC are where it's at. None are interpreted languages, none have dynamic types (unless pointers can be thought of as such), and they all can be packaged as binaries.

      Java's generics are sort of dynamic... and that's quite good enough!

      --

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

    112. Re:Off the top of my head? by thetoadwarrior · · Score: 1

      I hate any language that places significance on whitespace (if they would have just put a complex type into C we could have killed fortran before the 77 version and this Python shit wouldn't be here but alas).

      Whitespace helps make code more readable and, as mentioned, help keep everyone's code looking similar and thus easier to get into someone else's code. How can that be a bad thing?
    113. Re:Off the top of my head? by Phantom+of+the+Opera · · Score: 1

      I would find it hard to believe that 300 lines could be reduced to 10 in any language.

      I doubt the extra memory use will ever be noticed. Sounds like you have never heard of assembly.
      Also sounds like you've never worked with data amounts in the gigabytes.
    114. Re:Off the top of my head? by The+boojum · · Score: 2, Insightful

      Exactly. That's really it for me. I used to do a lot in Java, but these days C++ and Python are my languages of choice. I feel like they complement each other well, and I've had good success at using Python to generate C++ in some interesting cases (e.g., cross-"assembling" a program written for another architecture into C++ to emulate it). Java seems to fall in the middle of the development speed vs. execution speed continuum and seems to combine the worst features of each.

      If I'm going to bother with a language that requires an explicit compilation step and is more verbose, I might as well just use C++ and at least get the raw execution speed, lower memory requirements of C++, and easy distribution of the executables. If I'm willing to accept a language that runs more slowly and is harder to distribute to end users, why not just use something that's more concise, gives me a REPL and lets me iterate the development more quickly.

      About the only feature from Java that I occasionally miss in C++ is reflection. But I find avoiding that usually keeps my architectures cleaner anyway.

    115. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Amen to that. I don't understand why it hasn't been done already.

    116. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      You are a dick, sir.

    117. Re:Off the top of my head? by kg_o.O · · Score: 1

      Use xrange() for loops.

    118. Re:Off the top of my head? by Allador · · Score: 1

      For instance, let's say you want to log when a specific piece of data is changed on a class. In Java, you'd inherit from the base class, override the setters, and add your logging code Actually, the smart folks on Java wouldnt do it that way, they'd either:

      1. Use encapsulation, rather than Inheritence.

      2. Use Spring to put logging pointcuts either before or after.

      However, thats not really my point ....

      The language features (mixins) that you're showing here with Ruby are a double-edged sword.

      They make certain things like you demonstrate very easy, but they come at a HUGE cost.

      It basically makes it impossible to find whole (huge) classes of errors at design/compile time. To make things worse, you could have a conditional mixin. The result is that its IMPOSSIBLE for the IDE or compiler or static analysis tool to know whether a method exists, or I've passed the right number/type of parameters in.

      Not having a fixed and knowable/provable syntax tree makes so many useful things impossible.

      That sort of thing should be caught instantly, and you shouldnt have to wait for runtime errors or unit-testing failures to show up. And you shouldnt have to write unit tests to confirm syntactical correctness.

      This sort of thing takes me back to the bad old days of VB w/ Variants and untyped/undeclared variables.

      Frankly, I'd LOVE to have the Ruby syntactical sugar, closures, and expressiveness in a statically typed flavor of it with interfaces. I miss my interfaces when playing with Ruby. Design by contract is such a useful thing, its terrible when you miss it.
    119. Re:Off the top of my head? by Anonymous Coward · · Score: 1, Funny

      We could write more correct code per day, but we just end up posting on Slashdot arguing about which programming language is best.

    120. Re:Off the top of my head? by LaurensVH · · Score: 1

      No, this is why God invented hell, so people would be motivated not to write stuff like that.

    121. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      "Does anyone else get the impression that a lot of these newer languages are simply solutions that are looking for problems?"

      Nope, not at all. Especially since Python (1991) is older than Java (1995) and Ruby (1995) is about as old. Erlang too is far older than Java (1987, OTP in 1995).

      Especially Erlang is a solution to a very specific problem. Python and Ruby is a bit scetchier but so is Java.

      I started programming Ruby to try out Ruby on Rails and found that while Rails sucked and was worse than the previous frameworks I have worked with Ruby is a very good alternative to Python and Perl.

    122. Re:Off the top of my head? by agbinfo · · Score: 2, Insightful

      PHP:

      echo str_repeat ("Hello World!\n", 3);
      to Ruby:

      print "Hello World!\n"*3
      to Perl:
      print "Hello World!\n" x 3;
    123. Re:Off the top of my head? by mkcmkc · · Score: 1

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Dynamic typing where you can create new identifiers implicitly is pretty scary to me. I'm not even sure what Python offers over the dozens of other languages that preceded it. I can relate. I felt nervous back in 1982 when someone showed me the first program I'd ever see that didn't line numbers (i.e., at the beginning of every line of source code). How could that even work? Needless to say, I got over it, and I only use line numbers now when there seems to be a real benefit, which is rarely.

      Take my word for it: Python is worth learning. It may not always be the right tool for the job, but in my experience, more and more it is.

      --
      "Not an actor, but he plays one on TV."
    124. Re:Off the top of my head? by Peaker · · Score: 1

      coroutines, closures and continuations Given that coroutines are trivial to implement once you have continuations - wouldn't that be the 2 C's of a "good language"?

      (Note I think that's a pretty weird way to define these features as a must for a good language and is obviously biased by a narrow world view).
    125. Re:Off the top of my head? by chromatic · · Score: 1

      The result is that its IMPOSSIBLE for the IDE or compiler or static analysis tool to know whether a method exists, or I've passed the right number/type of parameters in.

      Smalltalk can do that.

    126. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      From wikipedia:

      "The second form, citing a person who is actually an authority in the relevant field, carries more subjective, cognitive weight. A person who is recognized as an expert authority often has greater experience and knowledge of their field than the average person, so their opinion is more likely than average to be correct."

    127. Re:Off the top of my head? by TrentonAdams · · Score: 1

      Let's see, on my Vista control panel... Java(TM) 6 Update 5 - Sun Microsystems, Inc. - 3/27/2008 - 136MB 136? OUCH.

      --
      Trenton Adams
      Senior Consultant
    128. Re:Off the top of my head? by RAMMS+EIN · · Score: 3, Informative
      ``I don't think that Ruby is bad, not by a long shot. It's seems fairly
      decent and it doesn't seem to be lacking anything necessary. I'm just
      curious as to why someone would pick Ruby over some other language. I'm
      not quite understanding what the "killer app" of Ruby is. I'm not sure
      why this language had to be created.''

      Ruby was inspired by a number of good and useful programming languages, such as Lisp, Smalltalk, Perl, and Python. It combines the good features of those into a single language. The result is a language that is very powerful, has clean syntax, is easy to get started with, and allows a little code to do a lot of work.

      As for a killer app, I don't think there really is one. Ruby is and has always been a general-purpose language. It got its 15 minutes of fame with Rails, but that has since been cloned in other languages. Nowadays, Ruby is just good at many of the same things Perl is good at, and good at many of the same things Python is good at. I personally prefer Ruby, because it is a very well thought out language and, coming from Lisp, it feels natural to me. Still, I don't think Ruby is that much better that people should or will be switching in droves. It's an incremental improvement over already good and useful languages, not a revolution.

      Now, for some specifics.

      From Perl, Ruby takes first-class regular expressions. Many Ruby modules are also ports of Perl modules.

      From Python, Ruby takes clean syntax. There's quite a lot of competition between Ruby and Python, so I imagine there is a lot of "me too" on both sides.

      From Smalltalk, Ruby takes the object system (everything is an object, every object belongs to a class), and blocks (kind of like anonymous functions, but with special syntax). Blocks, especially, are very powerful, as you can use them to (almost, I have to say as a Lisp programmer) implement your own control structures; loops, iterators, etc.

      From Lisp, or maybe from other languages that have these features, Ruby takes garbage collection, anonymous functions, dynamic typing, call/cc, symbols as first-class values, printing of objects in Ruby-readable form, a read-eval-print loop (enter code, have it evaluated and the results printed) and probably a bunch of other features I am too tired to think of right now (but not macros, alas).

      Ruby also has exceptions, the printf family of functions, and a number of other features commonly found in modern programming languages.

      The kicker is that it has all this in a single, coherent language, with a syntax that is easy to understand and learn, and few great pitfalls. Mostly, whether you already know a programming language or not, you can just start coding in Ruby, and it will be easy. There aren't lots of irritating silly parentheses in Ruby, neither is there a difference between scalar and list context. No buffer overflows, no integer overflows, no memory leaks. You don't need to change the way you think, you don't need an IDE. It's easy to get started with, and yet doesn't suffer from problems that languages that are easy to get started with usually have: bad design, limited expressive power, only really being suitable to one domain, etc.

      Finally, some code, just for kicks:

      # Define an array with first names and one with last names
      first_names = [ 'Alice', 'Bob', 'Charlie', 'Deborah', 'Eve' ]
      last_names = [ 'Cooper', 'Jones', 'Smith' ]

      # Define a class Person
      # Each person has a first name and a last name
      # which have to be passed to the constructor
      # and can be accessed using an accessor
      class Person
      def initialize first_name, last_name
      @first_name = first_name
      @last_name = last_name
      end

      attr_accessor :first_name, :last_name
      end

      # Add a pick method to the class Array
      # The pick method returns an element from the array at random
      class Array
      def pick

      --
      Please correct me if I got my facts wrong.
    129. Re:Off the top of my head? by Allador · · Score: 1

      I've heard that said before, but I'm not informed enough about Smalltalk to agree or not.

      Explain to me though how thats possible, given:

      You can modify classes/methods at runtime.

      You can conditionally do so, so in some execution paths the modifications exist, and in some they dont.

      Given that, how does the Smalltalk IDE/compiler determine whether the new/modified method is there during design-time, given that its a conditional runtime modification?

      A perfect example of this is in Rails & ActiveRecord. Lets say I have a class backed by a table that has 50 fields in it.

      Why the hell cant the language/environment just let me pick from a list, instead of forcing me to memorize all 50 elements, or keep all table definitions open in front of me. Further, if I typo one, why the hell cant I tell until runtime.

      Thats just an absurd step backwards in developer productivity (talking about Ruby here, I'm just not up to speed enough on Smalltalk to say whether it works similarly or not).

    130. Re:Off the top of my head? by Allador · · Score: 1

      Where Ruby's mutability can be used for Good is unit testing. Specifically, for creating mock objects. Thats a really good point.

      Mock object code in Java unit testing can be HUGE number of lines.

      It's very doable as long as you're using interfaces (everybody was using interfaces, werent they?) so you just write a skeletal mock that implements the interface and so a special wireup in Spring to inject that mock.

      But that is complicated and hideously verbose.

      So I appreciate your post ... this is one area where ruby's looseness is a plus.

      Mind you though, in Java there are some great mock & unit testing frameworks that make this problem much less of a problem.

      In most languages this is hard or impossible, because it means reaching inside the execution of A and temporarily changing the functionality of B. This part of it is easy (if verbose) in Java. You just write a mock class, and have Spring inject it instead of the regular implementation when running that test. Since both the real and the mock implement the same interface, and you've coded to an interface, this works quite well, though its anything but trivial. Thats a very very common approach.

      Hard to imagine Java without Spring though .... Spring has literally given Java another 10-20 years, IMO.

    131. Re:Off the top of my head? by Allador · · Score: 1

      Not sure I understand this, how are Lists and Hashes not first class objects in Java?

      They're both objects, they both implement one or more interfaces, etc. By every definition I'm aware of, they are true, first-class objects.

      I'd also love something more explanatory than: 'less-broken this' and 'less-broken that'. Can you be more specific?

      For example, many people decry the int vs Integer issue, is that what you're talking about?

      Given that using the natives is completely optional, and you could write huge java projects without ever touching them, except where you need to optimize by using the stack, how is this that big of a problem?

      How is it worse than Ruby having this ? you can put at the end of a method, but it doesnt really mean anything and not enforced in the runtime. So its an equally optional thing, but its use is pure sugar, and its not actually seen or heard by the runtime at all.

      I'm not saying that there arent aspects of ruby that are superior .... but your statements are very vague and over-arching.

    132. Re:Off the top of my head? by Allador · · Score: 1

      Why would you ever do this in the real world?

      Being able to write code like that isnt an advantage, its something that would get you fired in most good shops.

      How about you come up with an example that shows off functional programming, rather than overly-concise-perl-like syntax compaction.

      Just because you can put 4 things on one line doesnt mean you should.

    133. Re:Off the top of my head? by chromatic · · Score: 1

      Given that, how does the Smalltalk IDE/compiler determine whether the new/modified method is there during design-time, given that its a conditional runtime modification?

      The same way that the runtime determines whether the new/modified method is there.

    134. Re:Off the top of my head? by abdulla · · Score: 4, Interesting

      People often go on about the "compiler generated overhead" in C++, which always made me believe that function pointers would be just as fast or faster than virtual functions. So I went along with this belief and passed function pointers around instead of just having a virtual function in a base class - I'm talking about one particular situation here where I had the choice of the 2 and I wanted maximum performance, this isn't something I blindly do all the time, virtual functions are infinitely useful and function pointers are a pain in the ass. However one day I thought I'd benchmark the 2 for the hell of it and challenge my assumptions. Turns out, at least with GCC 4 under Linux, virtual methods are significantly faster, especially when optimisations are turned on. So sometimes it's not compiler generated overhead, but rather compiler enabled optimisation due to better object model integration. If you want objects, use C++ - C with GLib is a horrible, horrible hack.

    135. Re:Off the top of my head? by abdulla · · Score: 1

      I'll second that. I think it's a good idea to mix multiple languages that bare particular strengths, rather than trying to find a single silver bullet. Personally I use Lua and C++, for which I wrote my own binding libraries to tailor to my particular needs. However atop this I also use GLSL for graphics and Python for my build system. I wouldn't have it any other way, and it works in wonderous harmony.

    136. Re:Off the top of my head? by m50d · · Score: 2, Insightful
      Also doing things in a scripting language and having C do the heavy lifting... sounds like Tcl, Lua, JavaScript. Python offers nothing new there.

      Sure, it's an incremental improvement on what's come before. Many of the best things are. Python is mostly Tcl done better, without the odd parse semantics and with working OO in everywhere. It also incorporates some nice functional programming aspects, giving you the best of all worlds. The only thing that's actually *new* is probably the incredibly pure syntax; initially offputting perhaps, but really nice when you start using it. You make a lot fewer syntax-based errors because there just isn't enough syntax to trip over.

      Bottom line, Python is the nicest way I've found of turning an algorithm into working code. I can and have read a specification and written out the python code and have it work first time, which is not an experience I've had with any other programming language.

      --
      I am trolling
    137. Re:Off the top of my head? by m50d · · Score: 1

      It's the expressiveness, silly. Seriously, that's all it comes down to; I can write the same program with a lot less code (and fewer bugs) in Python than anything else. So I'll prefer Python.

      --
      I am trolling
    138. Re:Off the top of my head? by DragonWriter · · Score: 1

      The result is that its IMPOSSIBLE for the IDE or compiler or static analysis tool to know whether a method exists, or I've passed the right number/type of parameters in.


      Well, in Ruby, the method not existing in the class of the object called (even at runtime) doesn't mean it doesn't exist in the object (through its metaclass) and the method not existing for the object doesn't mean the object can't respond properly to the message represented by a method call (that's what method_missing is for), so a tool that could detect the kind of "error" you describe would also prevent you from using much of the power of Ruby.

      Frankly, I'd LOVE to have the Ruby syntactical sugar, closures, and expressiveness in a statically typed flavor of it with interfaces.


      This is, I think, impossible. Much of the expressiveness of Ruby is a direct result of the fact that it uses manifest typing. Ruby is, strangely, oddly like C with respect to Java though for completely opposite reasons: Ruby and C both let you shoot yourself in the foot in ways that Java protects you against, and derive much power (of completely different kinds) from the freedom they permit.
    139. Re:Off the top of my head? by Allador · · Score: 1

      Well, thank you for not reading what I wrote at all.

      Let me try again.

      Class A is conditionally modified by adding a new method, in some execution paths.

      Therefore, at runtime, there is one and only one state, so the outcome is easily determined. In some situations, it will have the new method, in some it wont. But in any one execution, it either will or it wont.

      However, at design time, the state is completely non-deterministic (or at least trivially can be), since you cant predict which of the execution paths will be taken, and therefore whether the modifications are made or not.

      Given that, which of the two possible future class states would the IDE/compiler show?

      If you dont know the answer, its okay to say so. If its just something you've read, and you dont really know the internal mechanics of how it handles cases like this, then please just say so rather than wasting both of our times by saying 'it just does'.

    140. Re:Off the top of my head? by Allador · · Score: 1

      I understand what you're saying, it just feels like such a massive step backwards in many ways, though much of Ruby is very interesting.

      With that situation, even the stupidest most minor typos can be non-detectable until runtime. And even then if you are doing fancy things with method_missing, it STILL may not fail, just may do completely unexpected things.

      That takes me back to the horror of 15 years or so ago when I was working with pre-'option explicit' VB. Where typos could cause completely unpredictable (and rare/intermittent) strange side effects.

      That kind of thing is so hard to troubleshoot, just makes me want to tear my hair out.

      I'm a little bit playing the devil's advocate here, but: It seems to me that classes should exposes contracts (ie, interfaces) that you can count on, because that creates better code in the long run. But if you have no contracts or in the case of ruby, there are contracts but you cant tell whether you've met them until runtime, that just seems like going backwards.

    141. Re:Off the top of my head? by chromatic · · Score: 1

      Well, thank you for not reading what I wrote at all.... If you dont know the answer, its okay to say so.

      Put your snark back in the can. Your assumptions are showing.

      However, at design time, the state is completely non-deterministic (or at least trivially can be)...

      The Smalltalk IDE is part of a running Smalltalk image. Your program modifies the image in place. There is no distinction between design time, compile time, and run time.

      Therefore, at runtime, there is one and only one state, so the outcome is easily determined.

      Yes. That's exactly how it works.

    142. Re:Off the top of my head? by Draek · · Score: 1

      Wow, so basically your argument is "but people can do everything with other languages that they currently do with Python"? here's some news: you could apply that argument to *any* language over the face of the planet. Java? why not C#? Tcl, Lua, Javascript? why not Python, Ruby or Perl? C++? why not Obj-C? C? don't you fucking know Assembly?

      Personally, I prefer Python and Ruby over Tcl, Lua or shell script due to the ease in which I can understand code written on them (mine included). I understand that for some people, LISP is the ultimate in language design, while others have trouble visualizing the design of anything that's not written in pure C. Well, I'm not one of them, and if that bothers you, too bad.

      Though being a user of both languages, it does surprise me how you're able to call Python "bloated" right after praising Java, but oh well... if I'm worried about bloat, I'll write the thing in Pascal anyways. Much nicer than C for that ;)

      --
      No problem is insoluble in all conceivable circumstances.
    143. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Try writing some medium sized projects in 'these newer languages', and the differences will become more meaningful to you.

    144. Re:Off the top of my head? by colinrichardday · · Score: 1

      My python install is 100M, but I still like python. Hey, TeX/LaTeX is 380M on my system, and emacs is 60M. Big perhaps, but as another respondent pointed out, it's not bloat if it's powerful.

    145. Re:Off the top of my head? by JAlexoi · · Score: 1

      I would argue on expressiveness.
      Main thing that Ruby does is bring in possibility to do DSL(and those ARE ALWAYS EXPRESSIVE) - log_changes is a method that changes that class, you can write your own if you want.
      So that "expressiveness" comes from a lot of features, that you might not even understand.
      And that expressiveness is not a feature of the language, it's the outcome of having those features.

      On a side note, Ruby may be as expressive as Java. I would support that Ruby is an expressive language if Ruby enforced those expressiveness features(like log_changes in GP).

    146. Re:Off the top of my head? by Lars512 · · Score: 1

      Need code that you KNOW has no errors aside from logic errors on the part of the programmer? Use Ada. That's really where Ada fits. You can do very little wrong without the compiler screaming at you and then failing to compile. Like as in, things that cause C "warnings" cause Ada to fail compilation until you fix it.

      The same can be said about Mercury, a functional/logical programming language. The style of programming is different to C/C++/Java, but it makes it much hard to make mistakes.

    147. Re:Off the top of my head? by DragonWriter · · Score: 1

      With that situation, even the stupidest most minor typos can be non-detectable until runtime.


      Stupid, minor typos will usually fail pretty hard with even the most basic unit testing.

      That takes me back to the horror of 15 years or so ago when I was working with pre-'option explicit' VB. Where typos could cause completely unpredictable (and rare/intermittent) strange side effects.

      That kind of thing is so hard to troubleshoot, just makes me want to tear my hair out.


      It's usually not that hard to troubleshoot if you are building decent unit tests, then coding small chunks, then running the unit tests, etc. If you code up a large system without doing that, yeah, you'll probably have all kinds of hard-to-find errors (some of the type a compiler would stop you from making, most not of that kind), but why would you do that?
    148. Re:Off the top of my head? by Allador · · Score: 1

      Okay, I'm not going to give up here, because I've had so many people come back with 'but smalltalk can', yet never really explain how.

      Let's try two scenarios.

      1. We have a class Foo, and we have a mixed in method bar() that we only want to load conditionally.

      When I'm in the smalltalk IDE, and I type Foo. does it show bar() as one of the methods? Does it show an error (or not) if I use bar() as a method of Foo.

      And how is that determination made? Sometimes bar() is a valid method of Foo, sometimes its not. Which situation does the IDE assume, and how does it go about that choice?

      At any given runtime execution, it either unambiguously either is or isnt a method. But until you are in a real execution of the app, with application state and configuration applied, the choice is unknown (and arguably unknowable).

      But the IDE has to either show it to your or not, either mark it as an error or not. Which does it do?

      2. Calling methods with parameters. Say you call a method (pass a message) on Foo, called Happy(dog), where dog needs to be able to respond to message/method 'reproduce'.

      In your statically typed language, the IDE and/or compiler can tell you instantly if you've passed a value thats not compatible with the parameter.

      But not in this sort of environment, because we dont know for sure until runtime, whether the value passed into Happy(dog) will respond to 'reproduce'. Given the power of runtime mixins, its arguably not possible to know whether your syntax is correct, because things change.

      You say its always runtime, but thats clearly an exaggeration at minimum, and just being snarky (in your words) at worst.

      Some programs are non-deterministic, in the sense that you have nearly an infinite amount of unpredictable inputs. If the IDE is going to 'run' your program all the time, in what sense is it running it? Is it making database modifications (since thats what the vast majority of software does) and reads? And more importantly, WHAT initial and ongoing state is it choosing?

      Whether Ruby or Smalltalk, if you dont know for sure exactly what a variable/object is, and exactly what it cant do, then the IDE cant tell you that information, because it doesnt exist. Or rather it does exist, but it exists as a arbitrarily large set of functions, which in and of itself could be described as software.

      My point in all of this (at least way back up the thread where this talk started) is that you lose so much power in a language when you take the compiler or IDE's ability to find errors away.

      Not to mention the developer productivity of having to memorize or lookup every single class or method call they might ever use.

      Not to mention fancy stuff like walk up the call hierarchy, do refactorings, do renames, etc. Without a proper AST, you lose your ability to do alot of very very useful things, particularly as software projects grow large.

    149. Re:Off the top of my head? by chromatic · · Score: 1

      You say its always runtime, but thats clearly an exaggeration at minimum, and just being snarky (in your words) at worst.

      For someone who admittedly doesn't know much, if anything, about Smalltalk, you're certainly quick to tell people what Smalltalk can and can't and does and doesn't do. Please feel free to do your own research.

      Not to mention fancy stuff like walk up the call hierarchy, do refactorings, do renames, etc.

      I don't know enough about pre-1980 Lisp to know for sure, but I do know that Smalltalk could do all of these things before Oak was even a glint in Gosling's eye and when Eclipse was still VisualAge.

    150. Re:Off the top of my head? by Allador · · Score: 1

      You shouldnt have to unit test for syntactical errors though, thats just crazy.

      You do unit tests to prove behavior, not correct syntax. Theoretically, given equivalent functionality, you should have the same behavior based unit tests in Ruby and Java. But in Ruby, you've got to do more unit tests, because you've got to test stuff that in Java the compiler would find for you.

      And if I've got to unit test every single call of every method, to make sure that the values passed in as method parameters will respond to the expected messages? Thats just insane.

      And yes, I know thats somewhat of a joke example, because no one really does that. But that means that you've just lost all of that 'provable correctness' that you would otherwise have, and have to replace alot of what you got for free with a compiler, with hand-written unit tests.

      So the question becomes whether other productivity benefits outweight productivity losess, and losses of provable correctness. And of course, the answer is that 'it depends'.

      I've done little apps in Java, and hated it. I've done big apps in Java (couple million lines of code, 30+ developers spread across the US) and loved it. To have to work on a project like the latter without the tools you get from the IDE would be nearly impossible.

      I've done little apps in Ruby, and I liked it. Havent had the opportunity (and probably never will) to do big apps in Ruby, but my gut says that it wouldnt work out very well as the project got large.

      A good example is in refactorings. When you're refactoring code in a large app that is consumed by many other modules in that app, its dangerous. It's easy to cause more problems than you solve.

      But the IDEs help a great deal, by showing you instantly and unambiguously where code is broken as a result of your refactoring. It does this because it can form a concrete AST.

      With a dynamic language like Ruby and others, you're forced to use text-pattern-matching, which is much less reliable. And even then, what if part of your refactoring was to move a method from public to private/protected (assuming you do have private methods in Ruby, cant remember). That would be a very easy thing to miss, when you're forced to rely on text pattern matching.

      With a language like Java, the IDE/compiler knows instantly. That is a big advantage.

    151. Re:Off the top of my head? by petermgreen · · Score: 1

      C++ used sensiblly is IMO a far better language than C, it is one of the few languages i'm aware of that gives you the ability to create custom types that really fit in.

      Whether that type is a fixed point type for good performance without a FPU or a complex type for some mathematical stuff or even a variable size type with automatic reference counting and copy on write it can be copied and operated on as easilly as a built in type.

      the trouble with C is as soon as you want a custom type life gets painfull. There are structures but you can't make operators behave how you want to one them, afaict they can't be copied using the assignment operator and I don't think you can return them either (this may have changed in later versions of the C standard, sadly it seems most stuff I end up doing in C is aimed at shitty compilers).

      I'm not so hot on templates, they have thier uses but when misused they can easilly lead to huge code bloat.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    152. Re:Off the top of my head? by Allador · · Score: 1

      For someone who admittedly doesn't know much, if anything, about Smalltalk, you're certainly quick to tell people what Smalltalk can and can't and does and doesn't do. Please feel free to do your own research. Thats certainly not my intention.

      I'm just a little tired of people coming in here and saying 'but Smalltalk could do it', even though at least some of the things these people claim Smalltalk can do are logically impossible to know ahead of time.

      If something is unknowable, then the Smalltalk IDE cannot know it.

      I also notice that 100% of the people that claim 'smalltalk can do it' are completely unable to answer how it supposedly solves some of the fundamental tricky problems with dynamic languages.

      I also notice that though you're the one that brought up Smalltalk in the first place, all of your responses have been very light on detail or specifics.

      I also notice that in every case where I present very specific scenarios where I dont think its even physically possible for something to be knowable, you've never once responded to them, other than 'but I know it can'. No details, no specifics, no useful debate, just 'I know it can'.

      You're right in that I havent had the opportunity to gain a deep understanding of Smalltalk yet. I own (with some partners) a software and technology startup, and dont have a huge amount of free time at the moment. But I will catch up to my 'new languages to learn' list within the next year or two, and Smalltalk will certainly be on it.

    153. Re:Off the top of my head? by OrangeTide · · Score: 1

      Implementing coroutines without continuations is possible (and easy).

      --
      “Common sense is not so common.” — Voltaire
    154. Re:Off the top of my head? by chromatic · · Score: 1

      If something is unknowable, then the Smalltalk IDE cannot know it.

      What you're missing is that there is no real static analysis phase in Smalltalk because writing a program is manipulating a running image. As soon as you write the method, it's available in your image, with all of the AST-reflective goodness that that implies.

      What Eclipse does -- what I believe you're saying is what's only possible with static analysis of source code -- is to compile chunks of source code into an AST which the editor knows how to query and manipulate. Because there are some static type guarantees, you can perform flow analysis and various type algebras to prove or disprove certain theorems about the code.

      What Smalltalk does is to compile chunks of source code into an AST (or bytecode or an intermediate representation or however the particular implementation does it) and graft that directly into the running image itself. The IDE is part of your program is part of the environment (the image). Now there are certain things which are completely undecidable, but the same dispatch mechanism which resolves a call to a method at runtime lets you resolve a call to a method at analysis time, because you have the same information available.

      As for technical details of how that works, I'd have to finish reading the Smalltalk implementation book or the Strongtalk papers, as I'm not 100% sure how to integrate a JIT with such a system. I'm not going to guess at how they work as if I were an expert on the implementation.

    155. Re:Off the top of my head? by dbcad7 · · Score: 1
      Well if you need to remove a screw from light socket.. you could use a drill press, you could use a power drill, a cordless drill.. or even a screwdriver.
      Well if you need drill a hole in a door.. you could use a drill press, you could use a power drill, a cordless drill.. or even a screwdriver.
      Well if you need attach a fixture to a ceiling stud.. you could use a drill press, you could use a power drill, a cordless drill.. or even a screwdriver.
      Well if you need drill a hole in a pipe.. you could use a drill press, you could use a power drill, a cordless drill.. or even a screwdriver.

      Your results may vary.

      --
      waiting for ad.doubleclick.net
    156. Re:Off the top of my head? by wendyo · · Score: 1

      You do see contractors with seven or seventy different tools. Do you see programmers with seven different languages from a single company? No.

    157. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Couldn't that just be due to your implementation of the "object-orientedness" in C? Especially since C++ was originally just a preprocessor into regular C code?

      i.e. are you positive that the code was identical besides C++ objects vs. your home-grown object-orientedness.

      (BTW, there's lots of other 'object oriented' code that's in languages without the direct support, such as CDEFs & WDEFs, etc., in the original Mac OS.)

    158. Re:Off the top of my head? by fyngyrz · · Score: 2, Interesting

      Most of the overhead I've observed has been in much larger executables. Not speed; compilers tend to be awesome at unrolling loops and all manner of other trickery that you wouldn't generally do by hand (because it'd be insanely ugly and hard to understand.)

      On your other point, though, I find using functions inside structures (essentially objects) as methods to be so simple as to be absolutely painless. I wonder what you're running into with your virtual functions.

      Definition:
      struct foo
      {
      long l_foo;
      float f_foo;
      int (*function_foo)(struct *foo,int a,float b);
      };

      Use:
      struct foo myfoo;

      init_foo(&myfoo); // initialize foo, set function pointer, variables, etc ...
      (*myfoo.function_foo)(&myfoo,1,2.0f); // use method

      --
      I've fallen off your lawn, and I can't get up.
    159. Re:Off the top of my head? by fyngyrz · · Score: 1

      For code efficiency, yes; syntactically, it's identical though. These folks are arguing over syntax / writability.

      --
      I've fallen off your lawn, and I can't get up.
    160. Re:Off the top of my head? by colinrichardday · · Score: 1

      lambda (functions) - kinda old, like 50, 60 years, if I remember well

      According to this, more like 70 years

      http://en.wikipedia.org/wiki/Lambda_Calculus

    161. Re:Off the top of my head? by DragonWriter · · Score: 1

      You shouldnt have to unit test for syntactical errors though, thats just crazy.


      The errors involved are not syntactic errors in Ruby, even if somewhat analogous errors in a different language might be.

      You do unit tests to prove behavior, not correct syntax.


      How an object responds to a message in an object-oriented language (following the model set by Smalltalk, not the C++/Java kind of "OO") is a matter of behavior, not syntax.

      But that means that you've just lost all of that 'provable correctness' that you would otherwise have, and have to replace alot of what you got for free with a compiler, with hand-written unit tests.


      Its probably no harder (and not easier, easier) to write a proof of correctness for code written in Ruby than any other language (presuming the correctness of the language implementation). But correctness proofs are rarely done, and provable correctness isn't what you lose: what you lose is having the compiler catch type errors and the like, which is nothing like provable correctness. It doesn't even, in most statically typed languages, actually validate that the methods passed will necessarily be always valid for the methods called, though some languages provide support for stronger invariants than C and Java (Ada comes to mind; ISTR that Eiffel is particularly strong in this regard as well) which enable this (or come closer to it), instead of forcing the developer to write code to catch invalid values or combinations of values and deal with them at runtime.

      and have to replace alot of what you got for free with a compiler, with hand-written unit tests.


      Not really. While you have to have some unit tests to catch the things a compiler would catch, these aren't usually extra as they aren't usually different unit tests than you'd need to test other aspects of behavior. A compiler telling you that a function returns the correct type or that a function call is made with the right type of parameters won't tell you that it returns the right values for any set of parameters; unit tests that verify that the correct values are returned will also (as class is part of a value) also tell you that the right classes are returned.

      Now, that being said, statically typed languages and the ability for compilers and tools to automatically identify facts about code written in them are useful, and sometimes Java or C is the right choice. And sometimes Java or C is the wrong choice because they provide too little of that.
    162. Re:Off the top of my head? by Billly+Gates · · Score: 1

      Java can be a pain with lots of verbose code compared to a simple language.

      Python is easier and not everything is an object. Object oriented programming is hard and this is especially true for newbies.

      Whats easier?

      #include studio.h
      int main()
      {
      prinf( "Hello World")
      } // its been years since I did C++ forgive me if I // am wrong

      or
      package helloworld;

      public class HelloWorldApp {

              public HelloWorldApp() {
              }
              public static void main(String[] args) {
                      System.out.println("Hello World!"); // Display the string.
              }

      }

      Count the lines of code it takes for a simple Message Dialog? Wow!

      I do not know python but I have a feeling is pretty simple to say hello world for a noob and create a simple dialogue box.

      Java will never die though because the api is very feature rich and its extremely portable.

    163. Re:Off the top of my head? by Billly+Gates · · Score: 1

      You would in affect be recreating C++ or java as you need templates and classes that can create new instances of themselves.

      At that point it would make sense to use an object oriented language from the start with proper API's.

      I am not saying its impossible and yes simplicity is elegant but I do not even want to think of trying to do what I described above in C that I could do with less work in Java.

    164. Re:Off the top of my head? by DMUTPeregrine · · Score: 1

      (â¼RâRâ.Ã--R)/Râ1â"âR

      --
      Not a sentence!
    165. Re:Off the top of my head? by grumbel · · Score: 1

      His argument focuses on novices and teaching and there I fully agree, forcing people to do indention teaches good practice and produces code with a minimum amount of readability from everybody. However languages like Python where whitespace is the only way to indicate a block still drive me nuts. They make it way to easy to break code when you copy&paste stuff around and sometimes even impossible when you want to copy code from a webpage or forum. Whitespace is just way to easily lost or damaged.
      I guess I would mind mandatory whitespace much less if it was used in combination with standard block start/end tokens instead of being the token itself.

    166. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Rails sucks. Ruby doesn't. Try writing an app in ruby, and then come back and say that you wouldn't pick programming in it over programming in java. Tutorials just don't give you the feel for a language that you need.

      As a sidenote: You actually learn languages through tutorials? Thats crazy man! The only language I learned from a book (or tutorial) was my first, perl. All the rest I have just picked a project to do with it, and learned it on the go(you learn much much faster that way).

    167. Re:Off the top of my head? by fyngyrz · · Score: 2

      It has been my consistent experience that the more you depend on other people's APIs, the more...

      • ...your project grows in distribution requirements and annoyances
      • ...bytes your EXE consumes
      • ...bugs you can't fix accumulate
      • ...code accumulates which you don't actually understand
      • ...subtle bugs creep in because you don't understand what you've included
      • ...you have trouble making things portable
      • ...legal coercion you are subject to
      • ...obligations you have to 3rd parties increase
      • ...you have trouble maintaining the code
      • ...compatibility and functionality between different port targets diverges

      Consequently, despite the dangling (and mostly illusory, IMHO) temptation of saving time, I'd just as soon write as much of an application as I can. After decades of writing my own stuff, I have a lot of things I can use, that I *designed* to be usable, in other projects that don't suffer from any of the above problems. I don't mind writing things, either, programming is sort of a zen thing for me. What I mind is not getting it to work correctly and being unable to fix it because some of it is out of my control. Now *that* tweaks my nose. Yes, I'm definitely a control freak.

      YMMV, of course. This is just me.

      --
      I've fallen off your lawn, and I can't get up.
    168. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      As a sidenote: You actually learn languages through tutorials? Thats crazy man! The only language I learned from a book (or tutorial) was my first, perl. All the rest I have just picked a project to do with it, and learned it on the go(you learn much much faster that way).


      Learned it on the go? Okay, fine... Where and how do you pick up the syntax? You have to pick that up from somewhere... Where do you get it from if not from tutorials or guides?
    169. Re:Off the top of my head? by QuasiEvil · · Score: 1

      I maintain a very core business component library for a Fortune 500 company - let's just say that the library in question is about 50,000 lines and encapsulates our business enough to send it out to customers who use our service. It runs in a little over 300,000 devices every day, ranging from handheld units based on m86ks up to PCs, x86 servers, Sun boxes, and a few IBM mainframes. It literally runs everywhere, because it's the core logic of what we do.

      What fixes a warning on one system creates one on another compiler/target platform. Eventually I just said "fuck it" and, while trying to eliminate most of the legitimate ones, just started ignoring the rest. We've had one production bug in the last eight years, and it was caught in the alpha stage of the rollout.

      Warnings are just irritating sometimes, particularly the ones where the compiler is warning you about legitimate ANSI C.

    170. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      It takes very little time to get used to not having to declare the type of each variable. And it reduces the code size which reduces clutter making python more readable. Dynamic typing in Python means you don't need to continually cast to the object type when storing/retrieving objects in/from a container as you used to have to do in Java before "Generics".

      Python has a uniform, transparent architecture (dictionaries upon dictionaries) rather than a architecture hidden behind a callable interface so it is easier to figure out what is possible.

      The garbage collector in Java used to lock up the system periodically while Python's reference counting garbage collection should remain uniformly fast.

      Naming in python seems more intuitive.
      .
      .
      .

    171. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      The last time I looked at D I was really tempted to give it a try.

      Personally when I want to write utilities, parsers, code generators...I use PERL to get the job done in the shortest amount of time possible.

      When I want to write real commercial applications I use C/C++. No matter how good any of the interpreted languages are the simple fact they can be trivially decompiled negates them from even being on the table for serious concideration. Yes we've looked into code obfuscators and no we're not impressed by the results. Reverse engineering optimized C code is still orders of magnitude more difficult than the best obfuscators from the interpreted crowd.

      I personally hate modern exception handling and absence of islands of sanity (You can't breath in java without allocating something). For us its NEVER about ease of implementation its ALWAYS about total coverage of all possible error paths. Checking return codes is easy and coverage can be easily systematically verified. Throwing up the stack on the other hand is guaranteed to give higher layers even less of a chance of doing something intelligent about the problem. The only other solution is littering your code with try catch statements which is obviously not a real option.

      Use what works and what gets *your* job done the best keeping a vivid picture of the entire product lifecycle in mind. At the end of the day language selection is really a pedantic argument. From the very beginning the real question is good design. Fancy language features only delay the inveitable results of not having one.

    172. Re:Off the top of my head? by smellotron · · Score: 1

      ...your project grows in distribution requirements and annoyances

      Depends on your method of third-party inclusion. For C or C++, third-party dependencies compiled in statically (or header-only dependencies) don't affect the distribution requirements at all.

      ...bytes your EXE consumes

      I bet if everyone reimplemented libc, libstdc++, libpthread, libm, libX, etc. in their own executable, their executables would be pretty big. Ironically, the distribution size is an argument for well-organized code sharing, because of dynamic libraries.

      ...bugs you can't fix accumulate

      Suck, I agree. But if an open-source library has a bug that's too complex for me to fix myself, I would probably have the same problem in a homebrew solution as well, so I think that's more of a strawman.

      ...code accumulates which you don't actually understand

      Stop using libraries you don't understand.

      ...subtle bugs creep in because you don't understand what you've included

      Stop using libraries you don't understand.

      ...you have trouble making things portable

      The boost people are much better at portable development than I am.

      ...legal coercion you are subject to

      Suck, I agree.

      ...obligations you have to 3rd parties increase

      I don't understand this one... unless you're referring to licenses, which you already mentioned.

      ...you have trouble maintaining the code

      The boost people are much better at maintaining their code than I am at recreating it from scratch.

      ...compatibility and functionality between different port targets diverges

      the boost people... you get it.

      I guess... our experiences have been different. I prefer to not reinvent the wheel, unless it's a particularly entertaining wheel.

    173. Re:Off the top of my head? by Jesus_666 · · Score: 1

      Haskell is now the de-jour of forums and blogs around the world.
      Ugh. Haskell has to be one of the ugliest languages I've ever seen. Not only are the indentation rules fairly unpredictable, it also pretends it's a functional language and then happily tramples all over its paradigm to include actions with side-effects as data types.

      It's powerful, no doubt, but incredibly ugly. Then again, the same could be said (potentially) of Perl and Perl used to be very big.
      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    174. Re:Off the top of my head? by smellotron · · Score: 1

      Bloat compared to Lua or C...

      Seriously? You don't leave a lot of wiggle-room.

    175. Re:Off the top of my head? by smellotron · · Score: 1

      xrange() vs range() depends on more than that... I'm assuming you point it out as a general efficiency rule. However, for small ranges, it may not matter. range() produces a small list, which can be iterated over natively. xrange() produces a generator, which uses __next__().

      In any case, I'd probably just say [1, 2, 3] for such a small example (:

    176. Re:Off the top of my head? by smellotron · · Score: 1

      Studies have shown that software developers can only write a few lines of correct code per day.

      I'd like to see the sources for that... both out of curiosity and incredulity of validity.

    177. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      what are you smoking ? what is better there for you ? where are the singletons ? where are class loaders that allow more than 1 instance of a class to be around in different threads ?

      python's object model is just simple, doesn't make it better.

    178. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      I prefer Ruby over Python for several reasons. Among them, Ruby provides private members, as opposed to Python. Also, Ruby has lexical scoping (no 'selfs' all over the place).

      I am sure there are more reasons I will discover as I learn Ruby. Personally, I am still annoyed by the significant white space as opposed to braces for scoping in Python.

      For what its worth, I think LISP is still the best language ever created.

    179. Re:Off the top of my head? by FredMenace · · Score: 1

      Personally, I think of Python as a prettier and more coherent version of Perl.
      Strong praise indeed! Next we will hear David Letterman claiming a new product "tastes better than dirt"!
    180. Re:Off the top of my head? by vanaeken · · Score: 0

      Language INtegrated Query lets you write SQL-like constructs within C#. They run against a database, an XML store or just an object model. There's no reason why different models cannot be mixed within the same language.

    181. Re:Off the top of my head? by iamacat · · Score: 1

      I find this OUCH funny from someone running Vista.

    182. Re:Off the top of my head? by fyngyrz · · Score: 1

      ...and in my experience of continuous programming since the early seventies, I have yet to encounter a wheel I *didn't* feel was entertaining the first time around (for me.) That, and I have a lot of hand-crafted wheels in my toolbox at this point.

      --
      I've fallen off your lawn, and I can't get up.
    183. Re:Off the top of my head? by bytesex · · Score: 1

      Oh, you can do most of it, except for having a genuine object model. You know, one that is recognizable by your fellow programmers. And I don't mind that much at all - I'm an avid C hacker myself. I just find that a lot of people around me, say 'C' when they mean 'C++', and they would be lost without an object model. One more question: inheritance ? What do you consider inheritance in C ? Because I think it to mean gratuitous casting to one of many superclasses, for example, and I can't really see how one would go about that in C.

      --
      Religion is what happens when nature strikes and groupthink goes wrong.
    184. Re:Off the top of my head? by EsbenMoseHansen · · Score: 1

      Not sure I understand this, how are Lists and Hashes not first class objects in Java?

      If you have ever used perl or ruby you would know what I mean, I think. You cannot do things like this in Java myfunc({"key1"=>"value1", "key2"=>"value2"}); where you construct and pass an anonymous hash. You can simulate it, but it quickly gets either cumbersome or brittle.

      I'd also love something more explanatory than: 'less-broken this' and 'less-broken that'. Can you be more specific?

      Of course, I was trying to be brief. The type system is Java is tied to inheritance. That is neither sensible nor desirable, and leads to problems like the .clone(), .equals() and similar methods that either does something non-sensible or fails at runtime, while the compiler was in a perfectly position to determine that at compile time. C++ does a better job in this regard. In ruby, the type system is not tied to inheritance, which is good, but it is on the other hand runtime which is not-so-good. Thus, less-broken.

      less-broken syntax is of course somewhat more debatable, but most of those who likes ruby seems to prefer the syntax of ruby. Personally, I like that you avoid the ending } } } } which is so easy to get in Java, and often leads to wasted time. Also, the lack of operator overloading leads to syntax sillyness such as a.times(b.add(c).toThePowerOf(d))) --- which isn't exactly beautiful :)

      For example, many people decry the int vs Integer issue, is that what you're talking about? Given that using the natives is completely optional, and you could write huge java projects without ever touching them, except where you need to optimize by using the stack, how is this that big of a problem?

      I mainly thinking of null not being an object. The other bit is stupid too, and no you cannot avoid it since it is used all over the standard library, but the null is much worse. It means that for two objects a,b of class A, a.equals(b) might well be different from b.equals(a) --- no matter the implementation of A.equals(A a). (since b or a might be null).

      How is it worse than Ruby having this ? you can put at the end of a method, but it doesnt really mean anything and not enforced in the runtime. So its an equally optional thing, but its use is pure sugar, and its not actually seen or heard by the runtime at all. I am completely with you there, brother :)

      I'm not saying that there arent aspects of ruby that are superior .... but your statements are very vague and over-arching.

      Sorry, I was trying to be terse. No idea what over-arching means, but then, English is not my native tongue. In any case, I apologise, but if you look at my posting history, you will be able to find a lot of post going into this in some detail :) Computer languages is something of a hobby for me, and I dislike them all. I have a simple list of things I want a computer language to do, butno language fulfils that list yet, though C++ and ruby together does, as I recall.

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    185. Re:Off the top of my head? by fyngyrz · · Score: 1

      Well, an object class implementation (in C, specifically) might have a object=GimmeObject() that returns the allocated object (pointer to struct) which has all the methods, including destructor of course, and local variables set up. Easy enough to imagine, right? So that's the initial class. Presuming allocation and setup succeeds, of course. :-)

      Now we might write a class that inherits the original object by making the original struct definition and init() the first part of the new structure, adding methods and variables as needed in the new extended area, overriding methods in the original as needed, even developing a super capability to run the original init as part of the new init by moving the original init to a private call, replacing the original with a new one. It also probably has a new destructor if it is anything more than overridden methods.

      So now you call object=GimmeInheritedObject() and you get the original, with preexisting methods or overridden methods, preexisting init or super+ new init or new init, plus any new capabilities you care to glue on. When you're done, you call (*object->poof)(object) and it is properly disposed of.

      There's nothing virtual about this, and no unusual casting involved. You simply get the functionality of the original object, including methods and etc, plus new stuff as you decide, overriding as you go. Syntax to use the new object is exactly like the old object except for the parts you override and extend,so -- if you're on the ball -- you might even be able to use the new class like the old class. You get it from somewhere else (after all, it's not the original object) but you dispose of it the same way, via its internal poof().

      That's how I do it; I'm sure there are other ways, but this has worked very well for me.

      Does that address your question? Or have I not understood what you were asking me? I could easily be answering the wrong things here, as I developed this stuff long ago in order to address specific needs I had at the time, and I've no great experience with C++ itself. Python, I've got some hours with, though, and to the extent that I use OO in python, it's pretty familiar to me in the terms I've laid out here.

      --
      I've fallen off your lawn, and I can't get up.
    186. Re:Off the top of my head? by tenyearsgone · · Score: 1

      I like python because almost ALL failure is at runtime. You are never kidded into thinking your code is correct just because it compiled. Sheesh. Gotta go write some tests now...

    187. Re:Off the top of my head? by stevey · · Score: 1

      well written code is easy on the eye. I think that is pretty much true of any language.

      I like Perl, C, Ruby, and Lisp, and each of those can be written badly or well.

      Still Ruby does seem neater than most languages and has a decent community. There are just a few problems that are unfortunate.

      (things like Unicode support; forgivable in languages like perl which have been around forever, but almost inexcusable in new a language.)

    188. Re:Off the top of my head? by fyngyrz · · Score: 1

      You know, one [object model] that is recognizable by your fellow programmers.

      With regard to that, I'm the boss -- I own the company outright -- so it's my way or the highway.

      Though I've learned a lot from some of our hires, I must say. But that's fine; just adds more to "my way" and gets them raises and bonuses and so on. Firm commitment with data to back you up is one thing; arbitrarily inflexible is just plain stupid.

      Funny story; after an impassioned plea from a new guy with sterling credentials, I set him up with the task of porting from a stable phase of our primary app's C code to C++. Took him a little over a year. When he was done, the .EXE was 15 MB instead of 3.something, and enough slower on redraws that the engine layering was compromised on a then-current machine. Which I don't know to attribute to C++, probably just an implementation issue. The size, though, that seemed pretty clearly to be an issue with how MSVC5 was making code. Anyway, we had a few meetings whereby he got to point to what he thought were advantages of the new models for operators, area selections, movable timeline events and layers and field questions from us... no one was convinced (honestly, I think that might have even included him), and we shelved it. I still have the source archived, though it's now many revs behind the current C code; I thought it might come in useful some day. Guy still consults for me (it's been quite a few years now), but it's all pure C these days. I'll have to ask him what he thinks of all that, now that it's all water long under the bridge.

      --
      I've fallen off your lawn, and I can't get up.
    189. Re:Off the top of my head? by squiggleslash · · Score: 1

      I think what he's saying is actually "If you're developing the program at the same time as it's running, then Smalltalk will present you with the current state of the class." Which, from where I'm sitting, is one of those "technically correct but practically useless" answers that certain geeks are infamous for.

      It's all essentially because he's nitpicking over your choice of terminology. If you were talking about a "development and pre-execution" phase then, obviously, there's no way Smalltalk can predict what the program is going to do before it runs it so the answer is "It can't, just like Java, Ruby, and ObjectiveFORTRAN++ Express for Workgroups 98XE can't." Of course it can't, determinism is one of the Holy Grails of computer science and if it were possible, Kay and his colleagues at Xerox would have won a Nobel Prize by now, and compilers would generally create applications that compile into a single NOP instruction.

      But you're referring instead to an "IDE", which in Smalltalk's case is a dynamic environment integrated with the current state of the program. If you've ever used FORTH or Prolog it's kind of similar to those (only Smalltalk is obviously more high level than FORTH and most Smalltalk environments are graphical.) You declare things to the environment, and that's how you program it. For certain levels of complexity, Smalltalk may be able to determine what an object's class looks like when you refer to it, but at some point the state of that class needs to be locked down and not dynamically alterable to ensure a 1:1 mapping between what the IDE expects it to be when you're referring to it, and what it is when the code you're writing is going to be run.

      In essence, you're completely right. Determinism is determinism, there's no way around it, all you can do is make environments smarter and smarter such that they can ultimately can do what they can to prevent errors. Sane environments make dynamic class generation difficult but not impossible, ensuring mechanisms encouraging predictability are in place.

      FWIW, Squeak is a free-software (since last year) implementation of Smalltalk that you might want to have a play with. It's available for most platforms, and under active development by Apple. It's worth looking so you can have a real idea of what Smalltalk advocates are talking about and how "practical" the language is for ordinary software development. A flippant description would be "Excel for Programmers". If you've seen what a PHB will do with Excel, you have some idea of what can be done in Smalltalk, only more elegantly and with far more power at your fingertips.

      --
      You are not alone. This is not normal. None of this is normal.
    190. Re:Off the top of my head? by arevos · · Score: 1

      It basically makes it impossible to find whole (huge) classes of errors at design/compile time. To make things worse, you could have a conditional mixin. The result is that its IMPOSSIBLE for the IDE or compiler or static analysis tool to know whether a method exists, or I've passed the right number/type of parameters in. That's a disadvantage, but not a huge one. I've worked with Java and C# more than Ruby, but I can't say that I've been particularly bothered by the lack of compile-time errors.

      Also, compared to a language like Haskell, Java's type system is little better at catching errors at compile time than Ruby's. There's a huge class of errors that can be caught at compile time, and Java only deals with a very small proportion of those.

      Frankly, I'd LOVE to have the Ruby syntactical sugar, closures, and expressiveness in a statically typed flavor of it with interfaces. I miss my interfaces when playing with Ruby. Design by contract is such a useful thing, its terrible when you miss it. Maybe Scala is the language for you, then?
    191. Re:Off the top of my head? by vikstar · · Score: 1

      If anything written in C has bloat, the developer should be promoted away from coding immediatly. Perhaps he was going for a higher-paid management position all along.
      --
      The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
    192. Re:Off the top of my head? by Just+Some+Guy · · Score: 1

      And all this time I thought Python was easy. I'd have to write all this to do the exact same thing:

      class foo:
      . def __init__(self): pass # initialize foo
      . def function_foo(a, b): pass # do something
      foo().function_foo(1, 2.0) # use method

      Oh, and inheritance is pretty tricky:

      class bar(foo):
      . def function_foo(c, d, e): pass

      "C: for people who love memorizing syntax."

      Of course, some of my wind is stolen by the fact that Slashdot is the only forum I ever post to which is pathologically incapable of maintaining indention in Python code snippets.

      --
      Dewey, what part of this looks like authorities should be involved?
    193. Re:Off the top of my head? by naasking · · Score: 1

      That implies that you should be programming in APL.

      You can program in point-free style in OCaml and Haskell, which buys you much of the same succinctness as APL if you really wanted. However, the ultimate point is to have a language that is as expressive as possible while remaining understandable. Java is too verbose on this metric. Ruby is much less verbose, yet still understandable.

      You are under the mistaken impression that C is an application language. It is not.

      What type of language C is is irrelevant. Fact is, people use C and C++ to develop applications all the time. The majority of free software is written in C.

      As for systems languages, Ada is also a system language, and yet is much safer than C in every way. I would not have a problem with writing an application in Ada, despite it being more verbose than C, because it has other redeeming safety qualities, and programs written in Ada are very understandable.

    194. Re:Off the top of my head? by naasking · · Score: 1

      What an odd conclusion. To my reading, my comment merely critiqued the poor argumentation in your comment, and made a statement of fact that you are not an authority in these circles given I've never heard of you, with the implication that your lack of fame, given you are trying to achieve such, is related to the quality of your arguments. After all, there is a reason that authorities become so respected. Did I miss the part where I insulted your personal hygiene?

    195. Re:Off the top of my head? by OeLeWaPpErKe · · Score: 1

      You know I think improving programming languages is the wrong way to go. What we really need is a robot at the side of every programmer.

      progbabysit

      To kill off dumb programmers. Divide by zero ? *poof*. One error dialog "No error" followed by a resetting machine and it aims for the gonads.

      And obviously for the microsoft offices we need this one :

      we've killed all gays, I mean we don't have any and we have no microsofties in iran either

      I say let natural selection improve programmers !

      Oh and I require the exclusive use of this robot :

      babysit

      For uhm ... motivation.

    196. Re:Off the top of my head? by DuckDodgers · · Score: 1

      Two nice pieces of some object-oriented languages are encapsulation and polymorphism.

      C doesn't let you mark certain methods private, or do anything equivalent to that. You have to hope the person using your class (which could be you a few months later) remembers to read the comments on which methods and variables are available for the world and which are used in a potentially intricate internal state machine.

      C also, as far as I know, does not let you do polymorphism. I have parent class Animal and child class Dog and Cat, and each child class has additional public functions and variables. I want a function that accepts an Animal input and manipulates it. Can you do that with C?

    197. Re:Off the top of my head? by bob.appleyard · · Score: 1

      Yeah, sounds great. Almost as great as the Office Assistant. You've got to be careful not to let the marketing droids have a say in it, though, otherwise you'll get Clippy...

      --
      How dare you be so modest!! You conceited bastard!!
    198. Re:Off the top of my head? by sjames · · Score: 1

      Seconded!

      Early in my use of python where I was decent at Python and well experienced with C, I found that the documentation and API itself was good enough that I was able to integrate a few C functions into python in under an hour from the time I first looked up the relevant page on the web.

    199. Re:Off the top of my head? by jcgf · · Score: 1

      I did not say hygiene anywhere. Personal attacks don't have to involve hygiene (although they certainly can). The phrases "Sorry, but his opinion carries more weight than yours" and "I wonder why you are not an authority like him..." are not the same as "your arguements are not well articulated". The final criticizes my arguements, the first 2 are directed at me myself. You may try to argue with this, but I think you know that they are sarcastic bitchy comments as opposed to anything that adds to the discussion.

      Also, how do you know that I am trying to achieve fame or that you haven't heard of me and that I desire fame? I'm just an anonymous slashdotter out looking for +1 funny mods. I could be the same person that you were quoting originally.

    200. Re:Off the top of my head? by TrentonAdams · · Score: 1

      Yup. I'm still in recovery from that one ;)

      --
      Trenton Adams
      Senior Consultant
    201. Re:Off the top of my head? by sjames · · Score: 1

      There are many reasons. Most of them relate to it's support of some of the nicest high level features of many languages (common and obscure). It does this without the features 'feeling' tacked on. They all flow naturally from the fundamental principles of Python.

      A few off the top of my head include that it's fully introspective including introspection of arguments passed to a function. It's polymorphism actually works because it doesn't care about the TYPE of an object, only if it does or does not offer a particular set of required methods. Since the precedence of methods is actually well defined in the case of multiple inheritance, that also works well.

      It supports a wide variety of methodologies from other languages simply and naturally. For example, it's support of generators. I hadn't seen that well done except in Icon until Python 2.3. Once you actually use a generator, you tend to realize how much time and clarity you've been sacrificing for years contorting inner loops into parametric form and storing context explicitly (either as a struct * in C or as an object in Java), or worse, jumping through hoops effectively turning the natural program flow inside out to accommodate the lack of proper generators.

      The object model is far more complete than Java. You can actually assign a method to a Python object! It' complete enough that an object can (if necessary) re-define itself. The program is an object, the modules are objects, the functions are objects.

      The biggie for me with the python object model is that you don't have to screw around with virtual classes or methods just to make the inheritance actually work as advertised. Supposedly, object orientation allows for code re-use, but it's worse than useless if the base class has to anticipate any methods or data that may (or may not) be added by a superclass later. That is, the methods of the base class can be aware of the additional methods in a derived class even if that derived class was never even imagined when the base class was defined.

      Because Python only cares if a method exists in an object, rather than about it's type, old code can handle a new object seamlessly WITHOUT effectively turning the new object into the old base class. The closest C++ or Java come to that is RTTI which DOES feel bolted on after the fact (because it was!)

    202. Re:Off the top of my head? by DavidHumus · · Score: 1

      You _should_ be programming in APL - or maybe J - but only if you like to get things done quickly. Not to slight any of the other high-level languages like Perl or Python. The main reason to prefer something like C is when CPU time is more precious than programmer time - something that's not true for 99.9999% of the work I find myself doing every day - YMMV.

    203. Re:Off the top of my head? by OrangeTide · · Score: 1

      The garbage collector in Java used to lock up the system periodically while Python's reference counting garbage collection should remain uniformly fast. Refcounting is not actually garbage collection. And it's uniformly slow. It's so slow that Python hardly ever has to use it and avoids the terrible overhead of refcounting. Also refcounting is bad for circular data structures, meaning memory leaks unless code is in there to actively detect certain kinds of loops.

      Even C and C++ have real garbage collection available to them. After looking into Python I'm a bit shocked they used refcounting when every paper on the subjects shows that it's not optimal.
      --
      “Common sense is not so common.” — Voltaire
    204. Re:Off the top of my head? by chromatic · · Score: 1

      (things like Unicode support; forgivable in languages like perl which have been around forever, but almost inexcusable in new a language.)

      Perl 5.8.0 (released July 2002) added pervasive Unicode support.

    205. Re:Off the top of my head? by DavidHumus · · Score: 1

      That does the same as this J code only it's much wordier:

         fnames=. 'Alice';'Bob';'Charlie';'Deborah';'Eve'
         lnames=. 'Cooper';'Jones';'Smith'
         nPick=: (]{~[:?[$[:#])
         shownms=: 13 : '}:&>,&.>/'' '',~&.>y'
         shownms nms=. 3 nPick&>(<fnames),<lnames
      Charlie Jones
      Eve Smith
      Alice Cooper
         shownms nms#"1~-.(1{nms)e.<'Jones'
      Eve Smith
      Alice Cooper

    206. Re:Off the top of my head? by chromatic · · Score: 1

      Refcounting is not actually garbage collection.

      You should read A unified theory of garbage collection by Bacon, Cheng, and Rajan.

    207. Re:Off the top of my head? by jnana · · Score: 1

      With regard to encapsulation, you can define an incomplete struct and public functions for manipulating that type in the .h file, and put the complete definition of the struct and the public functions (as well as an other private functions you want) in the .c file (with the private functions being static). Clients will only be able to use the struct via the public functions you've defined, and will not have access to the internals (without major wizardry).

      The following page illustrates the technique: http://tinobox.org/wordpress/?p=3

    208. Re:Off the top of my head? by fyngyrz · · Score: 1

      Yeah, inheritance in C is a cast-iron bitch as well:

      struct bar
      {
      struct foo;
      }

      :-) But don't feel bad, Slashdot doesn't let me indent C code, either. Wish they'd support <pre></pre>

      By the way, I'm a huge fan of Python. It's my preferred interpreted language.

      --
      I've fallen off your lawn, and I can't get up.
    209. Re:Off the top of my head? by OrangeTide · · Score: 1

      We could have a battle of citing various authorities on the subject, but what would be the point. The ones that I have read in the past do not consider refcounting a type of garbage collection because it does not fit the definition of garbage collection that they use.

      It is a decent article (I've seen it before), at least from what I remember of it. although I would not recommend paying for the ACM access just to read it, I've already canceled my ACM membership a while back as it seemed of little value anymore.

      Regardless, refcounting is not a technique that scales well and has many serious complications to such a "simple" design. I guess it's just my Lisp exposure that has colored my opinion of refcounting.

      --
      “Common sense is not so common.” — Voltaire
    210. Re:Off the top of my head? by rorymulv · · Score: 1

      Don't underestimate standardization or the difficulty imposed by everyone speaking a different language. The "Tower of Babel" failed because everyone started speaking different languages.

    211. Re:Off the top of my head? by jcgf · · Score: 1

      I always found that overloaded operators tended to make people forget that they are calling a function and not just performing a simple operation as they would be with integers or floats. I know that your variable size type with automatic reference counting etc lets you write code so that it looks like all that has to be done is to use the '=' operator, but that is not what the computer must do for it. A person can go overboard here just like with templates (which I also don't like; you still need to recompile for different types, the syntax is ugly, and really your source editor can probably do a find and replace automatically).

      Returning structures is done through the use of pointers and is not difficult once you get used to it. Whenever I want objects, I just write the struct definition in its own source file with the functions that operate it all in there too. I also write the functions to have a pointer to the structure as the 1st parameter. Inheritance is obviously not that easy (you can have structs within structs etc but it isn't the same) but I don't find that I need it as much as the OO Design books say that I will.

    212. Re:Off the top of my head? by AnomaliesAndrew · · Score: 1

      I was not suggesting everybody speak a different language... it's just as silly to attempt to pick just one also, even for a single programmer doing a project with any serious scope.

      I actually use JavaScript, PHP, MySQL, MicrosoftSQL, CSS, and HTML on a regular basis and that pretty much covers all of my needs. C++ or C# follow up for a different set of responsibilities...

      I woudln't dream of using Python, Ruby, or Java because they don't offer me anything I don't already have that I could possibly need.

      My point is, why would I write my own sort routine when I can just tell a database engine to ORDER BY a given condition. Gotta use the right tools for the job.

      I only posted because people seemed to be arguing over which language is best and I don't think it's possible to pick just one. Apples and oranges...

      Cheers.

      --
      Move all sig!
    213. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Nice syntax, sure -- shame the semantics are fundamentally broken. Thanks, but I'll take a language like Ruby or Perl that was written by someone who understood lexical scoping.

    214. Re:Off the top of my head? by petermgreen · · Score: 1

      not just performing a simple operation as they would be with integers or floats.
      I'm not sure I would call floating point math simple, sure PC cpus with thier high spec dedicated CPUs are fast at it but on embedded systems floating point is often the kiss of death to performance.

      Returning structures is done through the use of pointers and is not difficult once you get used to it.
      I know I can use pointers to fill in a structure, I can also make macros that work on them (avoiding the ugly requirement to take the address all the tim) but they still feel like second class citizens compared to the built in types.

      A good example is fixed point math, I could just use a big integer type directly but that would be extremely error prone, especially when converting existing code. So I make a structure containing a sufficantly big integer and write some macros to work on it, but using them is much more painfull than using the built in types.

      Doing more complex stuff with c++'s operator overloading/constructure/destructor system is a mixed blessing. On the one hand it can make code far easier to follow and less prone to certain types of error. On the other hand it can certainly lead to code that looks simple but hides a lot of complex processing.

      which I also don't like; you still need to recompile for different types, the syntax is ugly, and really your source editor can probably do a find and replace automatically
      Yuck, copy/paste coding is a terrible idea because when you find a bug there is a good chance you will miss some copies of the code.

      but templates are certainly a mixed blessing because they can lead to the same code being compiled a huge number of times for no good reason.

      My general feeling of C++ is that it is a good language but one that requires a well disciplined coder (C does too to some extent but C++ does so to a far greater extent). Templates and operator overloading in the right place reduce code duplication and make code easier to read. Misused they can lead to madness.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    215. Re:Off the top of my head? by Anonymous Coward · · Score: 0

      Personally, I think of Python as a prettier and more coherent version of Perl.
      It's prettier, I'll grant you. But looks ain't everything.

      For example, Perl has genuine first-class anonymous functions. They're useful. Python, in its desperate quest to be "pretty", replaces these with your choice of lambdas (crippled) or first-class functions (cannot be anonymous).

      Perl has your choice of global, lexical, or dynamic scoping, all of which work exactly how you'd expect. Python has... um... its own kind of weird scoping, which is kind of a choice between global or local, except you can make it sort of lexical, unless you accidentally reuse a variable name, in which case things suddenly break in unexpected ways. But at least it's prettier than all that "my $foo" crap!

      Perl has integrated regular expressions. This is the one place where it's actually prettier than Python. Python doesn't like special syntax, though, so it relegates them to strings in a library. Except that means you have escaping nightmares. So Python introduces an additional kind of string syntax that's specially designed to reduce escaping in regular expressions. Um, hang on a second...

      None of this is to deny that Python is often (usually, even?) a better choice than Perl, if you are concerned about maintainability in the presence of mediocre programmers, or if you just happen to prefer it.

      But I really look forward to the day when people stop pretending it's better-designed than Perl. It's not. They're both a mess; it's just that Python makes different mistakes, and possibly less dangerous ones. (Sadly, Ruby's no better, and PHP remarkably manages to be even uglier and less maintainable than Perl... when will someone get this right?)
    216. Re:Off the top of my head? by bob.appleyard · · Score: 1

      As well as the ability to have multi-line lambdas. Hence my comment.

      --
      How dare you be so modest!! You conceited bastard!!
    217. Re:Off the top of my head? by jcast · · Score: 1

      I understand where you're coming from --- when I think about the proprietary library (thankfully only one!) we use. You might want to look into open source libraries (or languages, such as Python), instead. Saves time without /any/ of the disadvantages you name.

      --
      There are reasons why democracy does not work nearly as well as capitalism.
      -- David D. Friedman
    218. Re:Off the top of my head? by bckrispi · · Score: 1

      In a single project, I can expect to use Java, SQL, JSTL, HTML, XML, CSS, and Perl. That's seven.

      --
      Xenon, where's my money? -Borno
    219. Re:Off the top of my head? by DuckDodgers · · Score: 1

      That makes complete sense, and I don't know how I failed to think of it before.

      Thanks.

    220. Re:Off the top of my head? by Eli+Gottlieb · · Score: 1

      Poor man. You've never seen the Common Lisp Object System, have you?

    221. Re:Off the top of my head? by Eli+Gottlieb · · Score: 1

      It's like my robot pal here always says: "Write error-free code or you will be exTERRRminated. Do not code bugs, do not code bugs! Exterminate! EXTERMINATE!"

    222. Re:Off the top of my head? by elwinc · · Score: 1

      I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Dynamic typing where you can create new identifiers implicitly is pretty scary to me. I'm not even sure what Python offers over the dozens of other languages that preceded it. I've hacked lots of C in my time too. Python does strong type-checking at runtime and provides good runtime error messages, while Java and C/C++ do the same at compile time. Python is embeddable in C/C++, and Jython is embeddable in Java. Python can also call all your C/C++ libraries. Think of it as a clean readable glue & scripting language with great string and list tools. Oh, it also has eval & apply for those who want to build functions on the fly.
      --
      --- Often in error; never in doubt!
    223. Re:Off the top of my head? by libkarl2 · · Score: 1

      I don't have to maintain the winner's code. =D

      --
      You are where you are at the time you are there.
    224. Re:Off the top of my head? by libkarl2 · · Score: 1

      Ruby has to be told that it is dealing in unicode.
      $KCODE = 'UTF8'
      but yeah.. UTF8 is all you get AFAIK.

      --
      You are where you are at the time you are there.
    225. Re:Off the top of my head? by WGR · · Score: 1

      What type of language C is is irrelevant. Fact is, people use C and C++ to develop applications all the time. The majority of free software is written in C.

      Which is why there is so much buggy free software. C is a very powerful programming language and I have been using it for 30 years (yeah, on a PDP 11/45 with early Unix). But it derives its power from its lack of restraint on programming. You can easily shoot yourself in the foot and nearly every C programmer does it.

      As you say, Ada is also a system language and has as much power. It really should be the language of choice for softare development. Its only problem with respect to C is that it had fewer compilers when it was first introduced (size constraints), so was less widely used. It is an answer to the original question. Programming languages are successful bcause they are widely used. And they are widely used because they are successful. Nicely recursive.

      C++ is successful because it is close enough to C that it convinced people who know C that it would be easy to learn. Which is why a lot of C++ is really C with badly designed objects.

    226. Re:Off the top of my head? by Kent+Recal · · Score: 1

      You're waging the old "static versus dynamic typing" war here.
      I'm more of a python guy myself (not much ruby expirience) but I'd like to reiterate the old argument from our side of the fence:

      The added productivity that dynamic typing gives us often (not always!) dwarves the risk of obscure bugs sneaking in.

      I think that's how most of us "average programmers" see it. A dynamic language can pay off, especially if you're a smaller shop where most people tend to know what they're doing.

    227. Re:Off the top of my head? by Eivind+Eklund · · Score: 1

      C is perfectly capable of many of the most useful object oriented techniques. ... All the while, the programmer can remain in complete control,

      I've programmed C for a decade and a half, including writing object systems in it, and writing memory management systems for it. If you want complete control, you should be programming in assembly language on a microcontroller. C gives up a noticable bit of control in order to make things more convenient; C with memory management gives up a LOT of control to make things more convenient. Also, in practice, the C programmer gives up control of his program to the program itself - the increased size of the program makes it less convenient to change, and thus remove some real control. This isn't just playing at semantics - this is a really important point, as you are talking about:

      and the application can remain fast and lightweight. To get a fast and light application, you should be profiling your app, both in where it spends time and where it spends memory. 99% of the time 90% of your app is going to be insignificant in both time and space, and you can optimize the rest to get speed and low memory consumption. With a language where you have less hassle than C, you have more time to optimize this, assuming the static runtime for the language you write in isn't too large in itself, and the startup cost isn't too large. Now, there *are* cases where the average time spent will kill you. I've had one such case for trying to write a music synthesizer in Ruby. I ended up with time spent all over the place, and no hotspots that were possible to optimize. However, 99% of the time, you can get away with writing in a high level language instead of C, and patching in C where it may be necessary for high performance (under an assumption that you're not writing core libraries/kernels for things that do massive data processing.)

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    228. Re:Off the top of my head? by Eivind+Eklund · · Score: 1

      That takes me back to the horror of 15 years or so ago when I was working with pre-'option explicit' VB. Where typos could cause completely unpredictable (and rare/intermittent) strange side effects. That kind of thing is so hard to troubleshoot, just makes me want to tear my hair out. That doesn't happen in practice, at least not for me. In practice, I spend very little of my development time fixing things that could have been prevented by type checking. This is true even in Perl (where I, for historical and employment reasons, do most of my coding), which in my experience is worse in this area than Ruby.

      "Very little" means in the order of 1%. It's not at all significant compared to the time I save from being able to deal with better abstractions.

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    229. Re:Off the top of my head? by Allador · · Score: 1

      I'm really not trying to wage a war here ... just trying to have more good discussions.

      The problem I run into is that it seems to me that what you lose in dynamic languages will really come into play in larger projects (hundreds of thousands to millions of lines of code). Unfortunately, I've never done a project that size in a dynamic language, and I dont see that I ever will.

      So this kind of discussion helps me get information which it would be hard for me to synthetically create experience on.

      There's no question in my mind that Python/Ruby/whatever can be hugely faster to develop in small utility scripts, things where you dont even have a business domain to model, much less a strong separation between the business services engine and various different presentation fronts.

      But having to read the inner code of a method on an object, to determine what kind of thing I need to pass in, because its just not possible to specify that in the method declaration itself just kills me. Breaks one of the fundamental concepts of OO, Encapsulation. Anytime you're forced to look into the source code to figure out what kind of thing to pass ... thats just a bad smell. That also forces you to base your code on the other code's implementation, rather than its public contract, which is also a bad smell. It's not as bad as fully depending on certain internal data structures of the other object, but its close.

      Anyway, really not trying to wage or start a war here ... just trying to gather some feedback from those who've worked on larger projects, who can speak to some of these issues.

    230. Re:Off the top of my head? by Kent+Recal · · Score: 1

      Well, I haven't worked on millions-of-lines projects but I tend to agree that many dynamic languages probably scale poorly to the working style and staffing policy that are often found in such large projects. Nonetheless I think dynamic languages can *grow* well (even better than e.g. java in some regards) with your requirements when you start small or midsize and get bigger over time.

      At least for python there are ways to emulate interfaces (PyProtocols, zope.interfaces) but don't forget that, depending on the requirements of your project, there are other approaches to encapsulation that may be a better fit. That's one of the strong points of a dynamic language: It enables you to shape your own rules and working environment in a much more fine grained manner than a static typed language ever could.

    231. Re:Off the top of my head? by Allador · · Score: 1

      PyProtocols and the Zope Interfaces look interesting, didnt even know there was such a thing out there.

      I appreciate the information, and I'll look a bit more into it.

  4. I don't really get the Java hate around here by JohnnyBGod · · Score: 5, Insightful

    Java's well organized, has a great standard library and is (mostly) consistent with itself. Its only problems, as far as I can see, was that it was initially slow and that it marketed itself as a web language, when there were better choices for that.

    Disclaimer: I've only coded in Java since 1.5.

    1. Re:I don't really get the Java hate around here by Z00L00K · · Score: 2, Insightful
      Which is when Java started to be really good.

      Before 1.5 it was harder to avoid those dreaded ClassCastException:s that you could get from Lists and Maps.

      But it's still the NullPointerExceptions left to take care of.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    2. Re:I don't really get the Java hate around here by hesiod · · Score: 0

      > is (mostly) consistent with itself

      Are you serious? Where I work, we regularly use at least three Java applications, and each one requires a particular version of Java, none of which are the same. One of them requires Java 1.5, while another one will break completely if Java 1.5 is installed. It's a nightmare! And while yes, the version requirements may be the fault of the developers, the fact that it can happen at all is unacceptable.

    3. Re:I don't really get the Java hate around here by CastrTroy · · Score: 4, Insightful

      PHP is badly organized, has a long history of importing third party components for what should be included in the base, and is completely inconsistent with itself in many ways. Hasn't caused any problems in popularity for them. I would say by virtue of PHP and all the other popular languagues, that it should be easy to get started (free compilers and runtimes), that it should run on multiple platforms, and that it should be easy to install. Nothing gets you more popularity than millions of newbies trying your tool and being able to get it working that they continue to use it even when they get good, simply because it is what they are used to.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    4. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 1, Interesting

      Heh, your story reminds me of how we had to abandon a specific Java application. It would only run on Java 1.4.2_04 (or something) and that version had some buffer overflow bug with image files. (You know that thing that Java is supposed to prevent? Ha!)

      So the network security guys require all computers to be scanned for insecure software. This specific JRE gets tagged as insecure, and the machine gets dropped off the net until we "upgrade" Java.

      Except that upgrading Java causes the application to crash. It will ONLY work with that one specific patch level of Java. (Yes, I tried.)

      Since we were still in the trial phases, we just dropped the application and replaced it with another one that DIDN'T require Java. Problem solved.

      Of course, I doubt the specific security flaw was actually an issue because this was a web service or something that shouldn't do anything with graphics. But arguing that is a losing battle, especially because it did have a Swing-based GUI somewhere.

      So now I'm always wary about using Java applications, since they can easily get tied to a specific JRE and if that JRE has security flaws, you're SOL.

    5. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 2, Insightful

      Are you saying that dealing with different versions of C libraries is somehow easier?

    6. Re:I don't really get the Java hate around here by Jack9 · · Score: 4, Insightful

      the fact that it can happen at all is unacceptable.

      Same with any interpreted language. PHP, Python, same problem if you are using deprecated accessors. Heck, even the MySQL connector worked differently in PHP3

      Are you really suggesting that every time there's a new version they change the name of the language? What about changing the name of every program you write just because you altered the API? Why would you say it's unacceptable?
      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    7. Re:I don't really get the Java hate around here by Chabil+Ha' · · Score: 4, Insightful

      ClassCastException and NPE are the easiest to avoid. With adequate unit testing, those are the easiest problems to find.

      While Generics add a lot of protection by making your List strongly typed, using instanceof checks will protect your code when using a List.

      --
      We're all hypocrites. We all have hidden parts, it's the contrast between them that make us more a hypocrite than others
    8. Re:I don't really get the Java hate around here by bjourne · · Score: 2, Insightful

      Disclaimer: I've only coded in Java since 1.5. ... Which suggests that you haven't coded for very long. It is not that Java is bad per se, it just that the competition beats it. Try Python, PHP, Ruby, Erlang, Bash, Lisp or any other really-high level language. You'll be pleasantly surprised and maybe you will also see why people dislike Java.
    9. Re:I don't really get the Java hate around here by Z00L00K · · Score: 1
      What I really was after was the ability to catch the potential NPE:s already at compile-time.

      Eclipse has some support for that, but it only works within a method, and not when returning a value or using a returned value, which means that there are probably a lot of code around with unnecessary null checks, which just adds overhead to applications.

      But of course - testing will help, unfortunately that's not always applied.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    10. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 1, Informative

      is (mostly) consistent with itself With itself. As in, the language is (mostly) consistent with itself. If you're coding with it, (mostly) everything Just Works(tm) the way you expect it to once you've learned how a few areas work. Want to declare an internal class? Works the same as a normal class. Want to reference it elsewhere? OuterClass.InnerClass (so long as it's public). Want to extend that class? class Bingo extends OuterClass.InnerClass. Want to output it as a string? toString() is part of the base Object class, and once you see that, you realize everything has it. (mostly) Consistent with itself. That's not even getting into event handling (which is more the standard library and not the language, but still the same concept).

      Yes, of course applications (which are not Java itself) may act strangely or crash entirely when jumping a major version of Java*, but what are you expecting? Win 3.1 apps can act a bit strangely under XP, XP apps may show some issues with Vista, gcc 3.2-made binaries can get all urpy over gcc 4.0-made libraries, and OS 9 apps need an entire emulation layer to run under OS X. Upgrades can break things. That is not news.

      *: Well, okay, that's a bit of confusion from Sun's end. To most people, "Java 1.5" to "Java 1.6" implies a minor upgrade, when in fact it was a considerable amount of change involved.
    11. Re:I don't really get the Java hate around here by hesiod · · Score: 3, Insightful

      Dealing with specific libraries that usually only matter while creating the program itself (on the developer side) is completely different than requiring the end user of professional software to install one specific version of the client-side environment.

      And the point of software is the usage, not the creation. So dealing with issues during creation is the developer's problem. It needs to be usable by the client.

    12. Re:I don't really get the Java hate around here by hackstraw · · Score: 2, Informative

      I have some java hate, but java today is not the java of 1997. Its core class libraries are complete and I would assume consistant.

      My first experiences with java were the stuff that ran like crap as the so called end-all-be all write once run anywhere GUI language. That is not true today. Java is now a middleware language. Its become glue, and more behind the scenes than it was back in the day.

      So, what makes a programming language successful? Well, of course, its success!

      No, seriously, today, a programming language becomes and _stays_ succesful if it meets these criteria. 1) Does it have a good user community and is is still used for new projects and not just "legacy" ones? 2) Does it have extensibility and interoperability? That is a BIG one. CPAN, libraries, JARs, APIs, all of those additional features determine a successful programming language.

      Today, the most successful programming languages are FORTRAN (its a science and engineering thing, and its not going away tomorrow), C/C++, JavaScript, Java, python, .NET, perl, (does SQL fit in here?), and I guess some ruby, I have little exposure to ruby, and its the newest kid on the block I listed, so the jury is still out on that one.

      Programming languages come and go. The way I see it, the real question, is how are we going to get any/all of the above languages take advantage of the trend towards distributed and SMP systems?

      _NONE_ of the languages listed there do this particularly well, and there have been TONS of new languages to fix these problems, but to date, we are left with threads, OpenMP, and MPI, and some lesser known languages like Erlang, Titanium, High Performance FORTRAN (or did they give up on that one?), and the like.

      I see programming going through a needed paridigm shift "Real Soon" (TM) to address these issues. Along with the development tools as well. Computers are bigger and more complex than they were yesterday, and the languages have not yet caught up to this complexity.

      Maybe Ada will come back to life and fix all of this? I don't think so.

    13. Re:I don't really get the Java hate around here by tepples · · Score: 1

      ClassCastException and NPE are the easiest to avoid. With adequate unit testing, those are the easiest problems to find. So how do I make my compiler write (some of) the unit tests for me, in the same way that it writes the bytecode for me?
    14. Re:I don't really get the Java hate around here by hesiod · · Score: 3, Interesting

      > Why would you say it's unacceptable?

      I am talking about the client here. Having a minimum JRE version is fine, but did the Java developers remove features from the language and not leave and backwards-compatibility hooks in it? That's the only reason I can see why a Java software package would require a version LOWER than "current."

      If you write a new version of a programming language you created, and old programs do not work AT ALL, then you have done something wrong. Adding features, improving efficiency, etc is fine (great). Removing functionality does not make sense.

    15. Re:I don't really get the Java hate around here by Jack9 · · Score: 0

      Disclaimer: I 3 Erlang, it's the only functional language I "get" and as a side effect of learning it, I can read most LISP.

      Erlang is pretty bad choice right now, which is partly why it's been relatively unsuccessful. Have you tried writing an application that uses a Database connection other than flatfile or mnesia (also terrible)? I am unable to access hardware (like an audio device) without using assembly, essentially writing my own driver, IN ERLANG. The term, "pulling teeth" comes to mind. Perhaps I'm a little rusty on my Erlang but I'm pretty sure nothing has changed in the last 2 years.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    16. Re:I don't really get the Java hate around here by visible.frylock · · Score: 2, Interesting

      Dont get the hate? It's the unnecessary complexity

      Maybe this has gotten better since the time I was trying to get into Java (~3-4 years ago). But, for better or worse, first impressions are really important. And this kind of code is exactly what I think of when I think Java. I have some really bad memories related to Java (Swing, AWT, type conversion exceptions, Gui layouts (looking at you gridbox)). Some will leave and never come back. Some will try to come back and see if things have improved. Of those, some will return and some won't find anything to persuade them to change. Related to the topic at hand, the life cycle of a language and how it's managed can have a huge impact on the size, scope, and makeup of its userbase.

      Oh, and I tried to blockquote that code here but the lameness filter stopped it ;)

      --
      Billy Brown rides on. Yolanda Green bypasses Gary White.
    17. Re:I don't really get the Java hate around here by hardburn · · Score: 2, Interesting

      Does java.io still make you jump through 15 different object declarations just to read a file line-by-line? It's bad huffman coding built into the class design like the above that made me get away from Java.

      --
      Not a typewriter
    18. Re:I don't really get the Java hate around here by hesiod · · Score: 2, Insightful

      > > is (mostly) consistent with itself
      > With itself.

      When I see "itself" I consider "Java 1.4.02_09" and "Java 1.4.02_12" to be within the realm of "itself". Yet these two versions (just as an example pair, my argument is not exclusive to just those exact versions) have compatibility problems. Or rather, the developer of the software we use has those problems. But the fact that upgrading by an extremely minor amount (I'd say a 0.0.0.03 version increase is extremely minor) can break an application tells me that there is something wrong with the underlying program.

    19. Re:I don't really get the Java hate around here by tepples · · Score: 1, Insightful

      Try Python, PHP, Ruby, Erlang, Bash, Lisp or any other really-high level language. You'll be pleasantly surprised and maybe you will also see why people dislike Java. There are three languages that can run on the client: Java, JavaScript, and ActionScript. Everything else either must be downloaded and installed before running or requires the delay of a round-trip to the server after each action that the user takes.
    20. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 4, Interesting

      So now I'm always wary about using Java applications, since they can easily get tied to a specific JRE and if that JRE has security flaws, you're SOL. Same can be said of ANY language that evolves. I am currently battling an app parts of which require Python 2.3, parts 2.4 and parts 2.5.

      The bottom line is that no language will ever make the programmer smart. If the programmer is dumb enough to use some esoteric/ undocumented/ unsupported part of the JVM (Sun has a number of those, but no, it is NOT easy to get stuck on a specific JVM rev unknowingly) - thats the programmer's fault. If the app is supported (or at least open sourced) fixing this sort of a dependency on a particular version should be quick and easy. If you do not have code and the app is not supported, then you really shouldn't be running it in the first place! Sounds like the app was abandoned long before you realized it.

      -Em

      --
      RelevantElephants: A Somatic WebComic...
    21. Re:I don't really get the Java hate around here by Kentaree · · Score: 2, Informative

      Java is designed to be backwards compatible (painfully so in fact). I can't say I've ever seen a problem with Java running an app compiled for an older version, and it's definitely not supposed to happen.

    22. Re:I don't really get the Java hate around here by the_lesser_gatsby · · Score: 2, Insightful

      How does an instanceof protect your code any better than a ClassCastException? Both ways you're throwing an exception at runtime which has to be handled at some level.

      A ClassCastException recast to whatever Exception you want (or inspected as is at your exception handler level) is exactly the same as an instanceof test.

    23. Re:I don't really get the Java hate around here by Rary · · Score: 5, Insightful

      ... Which suggests that you haven't coded for very long.

      Actually, it suggests that he hasn't coded Java for very long.

      Regardless, if you're building a web application, you're probably not going to build it in Bash. The right tool for the job, and all that.

      It's silly to say "Language A is better than Language B". What makes more sense is "Language A is better than Language B at task X."

      Java is the right tool for many jobs. It'll die shortly after C dies (in other words, not anytime soon).

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    24. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      write tests first

    25. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > If the programmer is dumb enough to use some esoteric/ undocumented/ unsupported part of the JVM

      If the developer is not supposed to use it, it should not be present at all. Of course I have never implemented my own programming language, but it seems like a good idea... If you start tossing all kinds of crap into your language that should not be used, doesn't that cause bloat? Especially in the case of a language like Java that is (basically*) interpreted.

      * I know Java is not technically an interpreted language, with the bytecode stuff and all, but it might as well be, since the bytecode is "interpreted" by a program running on the end user's PC, which the developer has little or no control over.

    26. Re:I don't really get the Java hate around here by Jack9 · · Score: 1
      Then perhaps you would add "complete backward compatibility" to the list of "What Makes a Programming Language Successful?"
      I do not know any language beyond 3.0 that maintains complete backward compatibility.
      If I have a function(foo,bar) and later change the compiler so it only needs function(foo), it's very likely I optimized it to extend it and now I'll have to maintain 2 branches? What about the crazy namespaces you have to maintain now?
      function.FooBarsubFunction & function.FooSubFunction

      If you write a new version of a programming language you created, and old programs do not work AT ALL, then you have done something wrong.
      I completely agree. Sometimes the fix is to prevent people from accessing your mistakes anymore. YMMV
      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    27. Re:I don't really get the Java hate around here by JustinOpinion · · Score: 5, Insightful

      Agreed,a language being easy to install and start using can give it a huge boost in usage.

      I would also note that community can have a huge effect. Obviously the size of a community will have a strong effect on whether usage of the language remains, grows, or shrinks. After all, you are more likely to learn a language if you hear about it, if it's used in many other projects, etc.

      Additionally, community is important in terms of the amount of support you get. Languages with strong communities will have thousands of online tutorials, excellent forums that provide responsive help, freely available code snippets, plenty of libraries and add-ons, and so on. This kind of 'free support' is often more useful than even careful and exact core documentation.

      As a personal example, I (have to) use a programing environment called "Igor Pro" at work. The language syntax bothers me a bit--but on the other hand it is specialized to do some of the things we need it to. But what I really hate about it is the lack of community. When I Google for an answer to a problem I'm having, I get nothing. When I try to find a pre-made package for a non-core feature, it doesn't exist.

      Compare that to solving the same programming problem in, for example, Python. Even if it's not the optimal language, the fact that I get find tons of help online, and that there are so many community-developed packages and libraries, means that I can often solve the problem much faster.

      When evaluating new languages (and new software products), I always take the time to find out what the community is like. It can make all the difference.

    28. Re:I don't really get the Java hate around here by lkcl · · Score: 5, Interesting

      see http://norvig.com/python-lisp.html section 10

      the author looks like he is inexperienced, and unaware of the function "reduce", which was added initially as a patch to python 1.5 by an experienced lisp programmer (along with map, lambda and filter) and so his example in section 10 could be replaced with:

      from operator import add
      reduce(add, [1,2,3])

      but the point of mentioning this is that java is extremely verbose - and consequently cumbersome.

      there is a class of programming language which python 2.x, lisp, smalltalk and other extreme-OO languages fall in to, which have an incredible elegance of expression and a level of empowerment that is wayyyy beyond anything else.

      it is not possible to count python 3000 in amongst those languages with extraordinary power, because the developers - primarily guido - believe that the functional-language-based primitives (map, lambda, reduce, filter) are "unnecessary".

      i initially thought that this was a joke - it was announced on april 1st.

      unfortunately it turns out to be true. the removal of these key features is profound: the language (python 3000) is dead before it is completed. it's difficult to explain but these functional-language primitives are extraordinarily powerful, providing a kind of "zeroth dimension" of data manipulation.

      on a single line, you can do incredible data manipulation. i regularly do things like this:

      from string import strip
      for l in open("file.csv").readlines():
            l = l.strip() # take off newline especially
            l = l.split(',') # split by comma
            l = map(strip, l) # strip white space
            l = map(int, l) # convert everything to ints

      of course you could fit that all on one line but i deliberately kept it to 4 lines in order to include the comments. you could also equally do this:

          l = l.strip().split(',')
          l = map(lambda x: int(x.strip(), l)

      the flexibility is just... amazing, in python.

      the other thing about python is that it tends to be self-documenting, and also, there appears to be a tendency of coders to actually write _some_ documentation.

      that, and the fact that it is possible to walk the source code (or, more usually, the object-code) and 'read' it from inside a program, such that you can access the documentation strings and in fact the entire program...

      so things like happydoc can auto-generate you HTML documentation, by walking the code itself and collecting all the module, class and function documentation strings - just .... just... incredible!

      i regularly do things like this:

      import os
      print os.path.__doc__

      i don't bother to look up online how the function os.path works, i print its documentation string!

      you just don't get these kinds of things with java.

    29. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 4, Informative

      > is (mostly) consistent with itself

      Are you serious? Where I work, we regularly use at least three Java applications, and each one requires a particular version of Java, none of which are the same. One of them requires Java 1.5, while another one will break completely if Java 1.5 is installed. It's a nightmare! And while yes, the version requirements may be the fault of the developers, the fact that it can happen at all is unacceptable. Erm, you must be running windows and don't have a sysadmin with a clue. You can run as many versions of JDK in parallel as you want and they will not interfere with each other. Its not rocket science, just set a few env variables. Thats actually one of my favorite things about Java - you are never tied to a "system" install of JVM - in fact you don't even need root privileges to install JVM.

      -Em
      --
      RelevantElephants: A Somatic WebComic...
    30. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > If I have a function(foo,bar) and later change the compiler so it only needs function(foo)

      I am probably showing my ignorance with this statement, but why does it have to become two different functions? If someone can manage to create their own programming language, they can most certainly understand the concept of optional parameters. Of course I realize that may not always work, and that the way the function... well, functions may be significantly different now... but there has to be a way to make it work. At the very least, if it's an efficiency problem, stop supporting/upgrading the old function, but at least leave the old function in and tell developers that the new method is preferred.

    31. Re:I don't really get the Java hate around here by Not+The+Real+Me · · Score: 1

      "PHP is badly organized, has a long history of importing third party components for what should be included in the base..."

      You clearly do not get it or you are a noob. PHP acts as a very thin wrapper to alot of C libraries for Linux/posix systems. Why reinvent the wheel when many of the parts already exist?

      Whereas .NET obfuscates its Win32 API DLL hell heritage by creating a Java-like neat and tidy class heirarchy, PHP gives you access to the other libraries as if you were writing the app in C. Hence, no learning curve for those coming from a C/Linux/Unix/Posix background. While .NET does a nice job of organizing things into a clean class heirarchy, the truth is .NET is simply a cleaned up interface to many of the dozens of different APIs that Microsoft has introduced over the years.

    32. Re:I don't really get the Java hate around here by merreborn · · Score: 1

      Having a huge library of useful stuff built in, and decently documented is a big part of PHP's success.

      Most PHP installs include XML parsers, CURL, database client libs, image manipulation, session management, and a whole slew of web-related functions (built in URL parsing, file uploads, etc.) right out of the box. That makes it easy to do damn near anything you'd want to do in a web app without getting into external libraries. And they're (almost) all cross-platform.

      Java and Perl both do a pretty good job at making extensibility simple as well. Honestly, that's probably a big reason for VB's success among neophyte programmers as well.

      Both PHP and VB also offer a fairly lax syntax, which also makes them a little easier to pick up.

      Make it easy to do a lot, and the newbies will follow, it seems.

    33. Re:I don't really get the Java hate around here by quanticle · · Score: 3, Insightful

      Dealing with specific libraries that usually only matter while creating the program itself (on the developer side)...

      Now that's nonsense if I've ever heard it. If that were true, Linux distros wouldn't need package managers.

      --
      We all know what to do, but we don't know how to get re-elected once we have done it
    34. Re:I don't really get the Java hate around here by Daniel+Dvorkin · · Score: 3, Insightful

      no.the.main.problem.with.java.is.the.length.of.the.class.path.you.have.to.type.to.do.anything();

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    35. Re:I don't really get the Java hate around here by leighklotz · · Score: 5, Funny

      see http://norvig.com/python-lisp.html section 10

      the author looks like he is inexperienced, and unaware of the function "reduce", ... (along with map ...) Maybe you should send the author a note about map and reduce. As director of Research at Google, he's probably in a position to influence some of their programmers to make use of map and reduce.

    36. Re:I don't really get the Java hate around here by morgan_greywolf · · Score: 1

      Indeed, this can happen in any language. Python 3.0 will break a whole slew of applications written in Python because of changes in syntax (the change in the syntax of the print statement comes to mind, in particular). PHP also made a number of changes from 3 to 4 to 5 that broke existing applications. I seem to remember the same thing happening with Visual Basic and Borland/Turbo Pascal as well.

    37. Re:I don't really get the Java hate around here by TheLastUser · · Score: 1

      Hating Java is a /. tradition. There is nothing to understand, you just need to get with the program and start spewing anti-Java rhetoric.

    38. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 2, Insightful

      If the developer is not supposed to use it, it should not be present at all. Of course I have never implemented my own programming language, but it seems like a good idea... Its not that they should *never* be used, just probably not in commercial/production code. There are plenty of cases where those parts of JVM are very useful, especially in internal and one-of processes. You can gain a lot of performance among other things. A friend of mine is doing the NetFlix challenge and has to use all sorts dark corners of JDK to squeeze it for performance. Its just that if you use it, it becomes non-portable support nightmar. But if you don't care about support (as is valid in some cases) - it is fine.

      -Em
      --
      RelevantElephants: A Somatic WebComic...
    39. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 4, Insightful

      I'm always surprised by people so vehemently blasting Java with an attached list of alternatives that includes Ruby. I like Ruby a lot, and use it and Java both on a daily basis, and I would say that yes, I prefer Ruby, but every language has its frustrations and Ruby's standard libraries pale in comparison with Java's. They are in places incomplete, inconsistent, and very often poorly documented, whereas Java has arguable *too much* completeness (to the point of bloat), few cases of inconsistency, and stellar documentation. A great language with an average standard library versus an average language with a great standard library? This is a close race, and very much up to individual choice.
       
      I don't have enough experience with the others on your list to vouch for them, but I often see Ruby on these lists and my experience with both doesn't bear it out.

    40. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > Erm, you must be running windows and don't have a sysadmin with a clue. You can run as many versions of JDK in parallel as you want and they will not interfere with each other.

      Thanks: I am the sysadmin, and while I'm not the best ever, I am pretty good at what I do. And yes, we run Windows: it is rather unhelpful of you to claim that as part of the problem, since the majority of people use Windows. In our case it's mostly because we have no choice. I have installed multiple versions needed to run the programs and they HAVE broken each other. I have witnessed and experienced it first-hand. No amount of claiming that "it really does work" will change the reality that it does not. Now, I cannot say that this is Sun's fault -- and based on previous experience with some of our software developers, I would not be surprised -- but the fact that it has happened MULTIPLE TIMES with different pieces of software (some are web apps, some desktop) tells me there is undoubtedly an underlying problem.

      Also, we are talking about JREs, not JDKs. Perhaps you misunderstood that. Or perhaps it doesn't matter to the point you were trying to make. I don't know.

    41. Re:I don't really get the Java hate around here by Kingrames · · Score: 1

      You mean like renaming the file "*.java.backupccyymmddhhmmss" ?

      --
      If you can read this, I forgot to post anonymously.
    42. Re:I don't really get the Java hate around here by bjourne · · Score: 1

      I think you misunderstand Erlang if you try to write audio drivers in it. :) You don't write drivers using Erlang, you write ports (probably in C) which takes care of all low-level hardware details. Ports are then connected to Erlang similar to how extension modules work in other scripting languages, with the difference that Erlang's ports are real processes that use IPC to communicate.

      Erlangs strength is modelling interactions between components and taking advantage of asynchronous processing. For example, you wouldn't write a 3d engine using Erlang. But you could definitely use Erlang to control all player connections, NPC characters and other objects in your grand MMORPG.

    43. Re:I don't really get the Java hate around here by CastrTroy · · Score: 1

      PHP currently offers XML parsers, CURL, database client libs, but it wasn't always that way. You used to have to install 3rd party components to get that stuff done. Eventually they brought that stuff direclty into PHP because so many people were demanding it, but it's still possible to find web hosts that don't support PDO, or some other functionality.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    44. Re:I don't really get the Java hate around here by Jack9 · · Score: 1

      I eventually tried writing ports, yes. Unsuccessfully as I basically had to write a full blown multithreaded C app to simply communicate with hardware. Show me a good audio port.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    45. Re:I don't really get the Java hate around here by Schadrach · · Score: 1

      In Python, your module could always import the future namespace (which contains "in development" features of the language) into the current global context, then as long as none of your other identifiers become keywords in future versions of Python, it should work fine from the version of Python that first introduced the features you are using forward.

    46. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 1, Insightful

      "Well organized" probably refers to the standard library. "Initially slow" refers to one implementation, and marketing has really nothing to do with the language.

      These things are all important factors when choosing an environment, but they are not the language.

      A programming language is a tool for building abstractions -- that's its primary purpose. And Java fails pretty hard at this. No lambda, no root superclass, no multiple dispatch, no good meta system, no bignums (except through its standard library), no syntactic abstraction, and so on.

      The Croquet Project started out using Java, but had to switch to Smalltalk because Java's meta system was simply too weak. In fact, Smalltalk is more internally consistent, and faster than Java initially (where do you think Hotspot came from?).

      If you have a language which, in the early 1990's and for years after that, can best be described as "worse than Smalltalk [and old hacker favorite] in every way [including performance], except we wrote some neat classes for it", is it any wonder the hacker community holds it in such contempt?

      Exercise for the reader: Write a language today which is just like Python, but semantically weaker, syntactically more verbose, less consistent, and slower, and push it to succeed purely by the marketing force of a big company. See how much love you get from hackers.

    47. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I'm running eclipse in jre 1.6 and tomcat in jdk 1.5. Env variables are your friend.

    48. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      I am talking about Windows here. Linux libraries are a completely different nightmare that I prefer not to deal with (although I have).

    49. Re:I don't really get the Java hate around here by maxume · · Score: 5, Informative

      Are you talking about the section 10 labeled "Python Pre-2.1 did not have lexical scopes."?

      If so, your criticism is bizarre, the example is written to illustrate that "Python Pre-2.1 did not have lexical scopes.", not to illustrate the shortest way to rewrite the built-in sum function (you realize that right, that the idiomatic implementation of sum in python is the built in function?).

      The reason map and reduce aren't cared about is that most people have an easier time with list comprehensions. Your code:

              l = l.strip().split(',')
              l = map(lambda x: int(x.strip(), l)

      can be written as:

              l = [int(x.strip()) for x in l.strip().split(',')]

      in python 2.4 onwards. Obviously, you could put that on as many lines as you wanted. If you are worried about performance, generator expressions are very similar to list expressions but lazily evaluated:

              g = (int(x.strip()) for x in l)

      g would then create items as they are called for by some consumer (for instance, a for loop or a container object).

      --
      Nerd rage is the funniest rage.
    50. Re:I don't really get the Java hate around here by Otter · · Score: 3, Informative
      it is not possible to count python 3000 in amongst those languages with extraordinary power, because the developers - primarily guido - believe that the functional-language-based primitives (map, lambda, reduce, filter) are "unnecessary".

      1) Those capabilities will still exist in the base language, just with different syntax.

      2) If you want the old syntax, it will be available in a standard library.

      Save your hysteria for something genuinely catastrophic, like the loss of the print statement.

    51. Re:I don't really get the Java hate around here by Jack9 · · Score: 1

      I am probably showing my ignorance with this statement, but why does it have to become two different functions?

      Not all languages support default arguments (optional parameters). Also, when you get deep enough into the implementation, you have to prototype both.

      This is my example, which uses a java interface:

      Class BidrectionalIOStream
          String figureoutwhatkindofstream(ioStream);
          void writeIOStream(ioStream,type);

      You have a bytestream coming in from who-knows-where and have to read it and figure out through some ad-hoc method if it's from a file or network device or whatever.

      Now later I develop specific stream types. Yay.

      interface newStream
            int getNumBytes()

      class BidirectionalFstream implements newStream
            fStream fread(filename);
            void fwrite(fStream);
            int getNumBytes(fStream);
      class BidirectionalNetStream implements newStream
            netStream netRead(Socket);
            void netWrite(netStream);
            int getNumBytes(netStream);

      Now all my stream handling functions have to support 2 different datatypes (and a different number of args) and write a wrapper function for the new case.

      streamToSerializedObject(iostream,figureoutnumBytes(iostream));
      streamToSerializedObject(newStream);

      in this case all you had to do was write a new function (figureoutnumbBytes) and the default arg to streamToSerializedObject would be newStream.getNumBytes() but as an exercise, I hope you can see that it's a lot of work to maintain backward compatibility in all abstraction changes.

      P.S.
      Yes I know the interface is not exactly right nor the example completely illustrative. I did what I could. Breaking backward compatibility does not give some twisted pleasure to developers. The pleasure is in fixing somethig that is implemented so badly, they are removing it. Developers _know_ it's going to cause people to say "you broke my program".
      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    52. Re:I don't really get the Java hate around here by geekoid · · Score: 1

      But some languages promote stupidity.
      Python is a great example of that, and so does Perl.

      People slapping crap together without needing to really understand what is going on.

      I can't tell you the number of people who think some languages are 'smaller' because they can write something in a few lines, completly oblivious that the include or import uses memory as well.
      A sure sign that the only computer they should be in front of is one they enter whether or not the customer order fries with their meal.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    53. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      Can you (or anyone else) please expand upon this? Because I am fully prepared to proclaim that I'm a clueless moron if it means I can implement a simple fix to get everyone at work using the software they need without switching computers. However, many attempts with Google and the developers have always ended in frustration.

    54. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I do not hate Java, but I can explain to you why I don't use it.

      In my experience, the java VM really devours memory.
      The GC is unpredictable, and the application can experience terrible slowdowns at the whim of the GC.

      The language is also not really lean and mean as I would like.

      It is very difficult to abide to the 80-chars line width rule, because it is far from concise, especially in the standard library.
      To me, screen estate is a precious resource.

      For computation-intensive work I very much prefer well written C.

      For rapid prototyping and GUIs I go with python and GTK.

      But if you like Java, and does the job for you, then just use it. But you should not be surprised that other programmers do not find Java a jewel.

    55. Re:I don't really get the Java hate around here by geekoid · · Score: 1

      "If the developer is not supposed to use it, it should not be present at all. "
      True, but unrealistic attitude sine many major compilers accept undocumented and unsupported 'features'.

      For example, there are 1000's of programmers who ahve used undocumented features or API calls when connecting to MS SQL server.

      --
      The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    56. Re:I don't really get the Java hate around here by plague3106 · · Score: 1

      PHP, Bash, Lisp? I've written things in all of those, it's just not suitable to build any kind of large software. Simple scripting (it's intended use) is fine, but for an actual application.. no way. Java beats all those languages hands down for build complex software.

    57. Re:I don't really get the Java hate around here by hansamurai · · Score: 1

      //Two objects (File and Scanner) and an exception to watch out for (FileNotFoundException)

      import java.io.File;
      import java.io.FileNotFoundException;
      import java.util.Scanner;

      public class Example {
          public static void main(String... args) throws FileNotFoundException {
              Scanner scanner = new Scanner(new File("C:\\blah.txt"));
              while(scanner.hasNext())
                  System.out.println(scanner.next());
          }
      }

    58. Re:I don't really get the Java hate around here by OshEcho · · Score: 0

      I personally hate Java. I had to do a final project in it for college(3 years ago). It took 20-30 lines of code to clear a combo box.
      I hated how to do anything more than basic I had to do a bunch of subclassing. Not sure if it is the same or not now.

      I still think I could have made a python version of the project by my self than with java with 2 others working on it with me in about the same time or less...

      --
      -Echo
    59. Re:I don't really get the Java hate around here by ggvaidya · · Score: 1

      I don't follow: import x.y.z.a.b.c.e.f.g.h.i.*? IDEs? Or do you mean classpath on the Java command line?

      personallyIHateCamelCaseInProgramming(PerlHasAlsoSpoilt, MeOnNamedArguments, SoTheCWaySeemsPrettySillyNow, Sorry);

    60. Re:I don't really get the Java hate around here by tknd · · Score: 1

      I don't hate Java the language. I'm even ok with the VM as it has gotten considerably better over the years.

      But what really kills me as a developer is the fact that they change and deprecate things too easily. It is almost like they follow any new flashy trend going on and immediately proclaim it as "good". This mostly has to do with J2EE which is quite a bit different than J2SE. There's still some of it going on in J2SE but I'll stay away from any job that wants to use J2EE.

      Today in J2EE you're probably going to end up using 10 different buzzword technologies (frameworks or libraries) to accomplish your simple action. Each layer adds a new "better" way of doing the same thing. So not only to you have to understand the new paradigm, but you also have to understand how many layers of crap you're sitting on top of. It would be great if the layers stayed the same, but they don't. Things get deprecated underneath you, next year the entire top layer changes in favor of a new flashy design scheme, etc.

      They also have this strange liking to using vaguely abstract or even unrelated buzzwords to name their technologies. Java, java 2 enterprise edition, java beans, swing, struts, java server faces. They flip back and forth between being plain and to the point with descriptive or acronym names to names that loosely relate to the technology. I'm a developer, not a consumer, stop trying to market your stupid technology to me.

      For naming conventions on technologies behind a language or in a language, I much prefer boring and to the point names. Fine, go ahead and name your language after girls, pets, animals, beverages, or jewels. I don't care about that part. But don't start naming the components that build your language after girls, pets, etc. I don't care about your strange obsession with coffee, snakes, or trains. It's just another unnecessary roadblock to the learning process.

    61. Re:I don't really get the Java hate around here by thsths · · Score: 1

      > Its only problems, as far as I can see, was that it was initially slow

      No, the problem is that it is always slow. The current JVM takes 10 seconds to start, and my PC is only a year old. Heck, JVM 1.1 was faster on the hardware common back then. Plus the JVM is my number on cause of crashes, although I hardly use it. And for my Ubuntu/amd64, I cannot even get a native JVM, because 64bit is "in the making" for a decade now.

      Or to put it simple: Java is hated because Sun just does not get it.

    62. Re:I don't really get the Java hate around here by BcNexus · · Score: 1

      I think one one way is to go to the Java Control Panel applet in Control Panel, go to the Java tab, click View for Java Application Runtime Settings, and uncheck the JREs you wish to not use. I am unable to verify if this works though. Hesiod, have you tried this? Does it work?

    63. Re:I don't really get the Java hate around here by willyhill · · Score: 4, Insightful
      In more ways than one, PHP and MySQL are the Visual Basic and Access of the open source world.

      They're not very good (or weren't for a long time), they feel cobbled together at best. But they work. They're fast, have a low learning curve, they're accessible and essentially cheap and/or free. They're easy to deploy and shove into production fresh off the prototype phase.

      They have large numbers of people who use them as their primary tools. A large percentage of these people are not exactly what you'd call professional developers (I am not a developer, but I've worked closely with them throughout my career), yet they get "the thing" done somehow, and those systems tend to stay up there driving business for a long time.

      It's just funny that the very phenomenon that for years and years the platform and language purists argued was one of the Really Bad things about Windows is actually now coming to Linux in a big way. What those elitists never realized is that most developers just want to get the business of business done, cash a paycheck and go home to their families. They don't care that there are 19 different ways of escaping a string in the runtime library. No one cares about that, as long as the platform continues to deliver, even if it just sort of limps around.

      All those thousands and thousands of clueless VB/Access/VBA developers don't suddenly become little Donald Knuths because they're looking at a KDE desktop and using Emacs to code curly braces in PHP.

      --
      The twitter monologues. Click on my homepage and be amazed.
    64. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 1

      Thanks: I am the sysadmin, and while I'm not the best ever, I am pretty good at what I do. And yes, we run Windows: it is rather unhelpful of you to claim that as part of the problem, since

      My guess on you running windows was not meant as an insult, but as a guess based on two things - one is that most windows users do not understand concept of installing things on non-system level. Everything is usually installed by someone double-clicking an installer and not having any idea what that installer is actually doing - making life considerably more difficult. That being said, SUN is actually very good at installing multiple JVMs and JREs in parallel as far as I know. But the real issue is that the environment variables in Windows are significantly "broken" (or at least do not behave how one would expect them to), so you need a sysadmin that understands how they work on windows before messing with them.

      Here is a quick rundown of things you may want to know - but I suggest you learn more than just this:

      - Java app will run on whatever JRE you run with - it cannot and will not request a particular version - so it is your responsibility to tell it which jdk to run on or it will pick one from default env variables.

      - Most of the time apps run on first java.exe they find in PATH, so if you want to run on non-default java, either change PATH or better yet provide the full path to executable when running.

      - Some apps require JAVA_HOME env variable to be set to Java install dir so you are best of setting that. You can then use that to call java.exe via something like %JAVA_HOME%\bin\javaw.exe

      - If you are using JDK, you probably want to point CLASSPATH to and appropriate tools.jar and other jars that match your %JAVA_HOME% - again, using JAVA_HOME variable is good.

      - Rather than using system CLASSPATH variable - you are better off creating your own variable and passing it via "-cp " option on java.exe

      - Unlike normal operating systems, setting env variables on Windows sometimes sets the system env variables (but not always) and usually only for new processes. This can lead to unexpected behavior when running apps that rely on default JDK - meaning you should either always reset default env variables in windows, or never rely on them at all and specify your own. This is a huge headache, and a good reason to hate windows.

      - Most java apps will launch from a shell (UNIX) or batch(Windows) script - this is the perfect place to set the env variables. If not, you can make your own script.

      - Some java apps are executable JAR files - these on windows rely on registry to run, your best bet for running these from scripts is to execute them via "javaw.exe -jar jarfile.jar" command.

      the majority of people use Windows. In our case it's mostly because we have no choice.

      You always have a choice. ;-) Its not that its impossible to do in windows, its actually rather simple, but you do need to understand what you are doing before doing it.

      I have installed multiple versions needed to run the programs and they HAVE broken each other. I have witnessed and experienced it first-hand. No amount of claiming that "it really does work" will change the reality that it does not.

      Have you configured each program to run on its required version of JDK? If you don't turn on the engine, does not mean the car does not work.

      Now, I cannot say that this is Sun's fault -- and based on previous experience with some of our software developers, I would not be surprised -- but the fact that it has happened MULTIPLE TIMES with different pieces of software (some are web apps, some desktop) tells me there is undoubtedly an underlying problem.

      Yes I agree. My guess the underlying problem is lack of understanding on how Java works. (which is not a good sign for java developers, alas quite common in my experience)

      Also, we are talking about JREs, not JD

      --
      RelevantElephants: A Somatic WebComic...
    65. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      No, I still need to use the different JRE versions, so I can't just disable them. If that were the case, I'd uninstall them. :) Plus at least one of the required versions (1.3.1) does not have that tab in its control panel.

      What I need is for different applications to use different JRE versions. This also applies to different web pages, which I suspect complicates the issue even more. The full-blown apps have not had any issues between them, as far as i can recall. The issues only crop up when we need Java for a web-based program. One program (GE Healthcare online, used for training and CE) absolutely requires v1.5 or 1.6. But our Time & Attendance (CTR/Kronos WFC, another web-based app) system will fail to function properly if 1.5 or 1.6 is present on a system.

      There are other examples, such as a program used to install (Lexi-Comp) software onto a Palm. For some reason, they refuse to make the program work properly using HotSync, and their crappy installer requires Java 1.5+. This same computer needs to use the T&A (heehee) page.

    66. Re:I don't really get the Java hate around here by Z34107 · · Score: 2, Insightful

      I was going to rant about how that was not true about C, but I stopped myself. C went through a bunch of iterations (AT&T, K&R, others still way before my time) before it became an ANSI standard.

      So, I guess the lesson is to use a language that has stopped evolving. I can write POSIX code on a Windows box (Vista + Visual Studio 2005) and compile it and execute it on both Windows and Solaris. (The labs I had to do involved forking, signals, semaphores, and sockets.) With very few exceptions (our Solaris box evidently supported a pause() command) I could compile the same client/server code on both OSes with correct behavior.

      Is Python still evolving? Is Java still evolving? I guess the lesson here is to stay away from them. C (and C++ especially) have a lot of nice libraries; if you have to hack a single line of Python out in a 1000 lines of C, save those thousand lines of C in a proper library and #include next time.

      Then again, I'm also a "tools for jobs" kind of guy - I'd much rather write the one-line Python program than the 1000 line C program. But then again, is saving 999 lines of code worth the chance of it breaking in Python 2.6?

      --
      DATABASE WOW WOW
    67. Re:I don't really get the Java hate around here by JohnnyBGod · · Score: 1

      As Rary mentioned, it only implies that I haven't coded Java for long. Incidentally, however, you are right. I'm still young.

      As for the other languages you've mentioned, I've dabbed in most of them enough to find some problems. Here's what I've used and what I think about it:

      • C/C++: Outside of Java, the languages I've used the most extensively. The arguments for/against them have been discussed ad infinitum and are generally right, so there's nothing more to say.
      • Python: I like it. A lot. I've been wanting to do something serious with it for a while and I'll probably start at the end of this semester. The only things I didn't like were the colon at the beginning of each block (wasn't it supposed to just use the indentation, damnit?), and the fact that the same function can return values of wildly different types, though I think most developers will be sane enough not to actually do this, since it would be a pain to be checking for every single possibility at the end of every single function call.
      • PHP: great for Web development due to having the ability of being embedded in HTML, but migrating from ISP to ISP is a real pain, since all it takes to break code is the ISP not having compiled in something which you rely on. In an environment which you either control, or have meaningful influence in, it works great. I also don't like the "Let's throw everything into the core without a single namespace" philosophy.
      • Bash: Good, but it has problems outside its little bubble i.e. if you need it to do something you can't easily chain common commands for. Unless you code said commands, which you probably won't do in Bash. Of course, if you're writing the script just for yourself, you won't care if the commands aren't common.

      I've barely looked at Ruby and Lisp, as I find the syntax to be rather offputting, much more so in the case of the latter, though I readily admit that this a rather lame argument.

      I'm finally starting to adopt the following policy:

      1. Use a really-high-level language for initial implementation.
      2. Find better algorithms.
      3. Implement in C/C++.

      When one isn't satisfactory, I move down.

      Of course, none of the above is dogma, just my personal experience.

    68. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Agreed,a language being easy to install and start using can give it a huge boost in usage.

      I would also note that community can have a huge effect.

      As a personal example, I (have to) use a programing environment called "Igor Pro" at work. The language syntax bothers me a bit--but on the other hand it is specialized to do some of the things we need it to. But what I really hate about it is the lack of community. When I Google for an answer to a problem I'm having, I get nothing. When I try to find a pre-made package for a non-core feature, it doesn't exist. http://www.igorexchange.com is our nascent community forum. Check it out!
      jim@wavemetrics.com (who is aware of requests to call Python from within Igor's idiosyncratic language).
    69. Re:I don't really get the Java hate around here by dk.r*nger · · Score: 4, Informative

      Set the JAVA_HOME environment variable to the path of the JRE you want to use. It's commonly done in a .bat file launching the application.

    70. Re:I don't really get the Java hate around here by skribble · · Score: 1

      Try Python, PHP, Ruby, Erlang, Bash, Lisp or any other really-high level language. You'll be pleasantly surprised and maybe you will also see why people dislike Java. There are three languages that can run on the client: Java, JavaScript, and ActionScript. Everything else either must be downloaded and installed before running or requires the delay of a round-trip to the server after each action that the user takes. That comment is just silly. Everything must be downloaded and installed (Java, a Capable Web Browser.... etc.) and when executing a application and either you need to download everything from the server to begin with or you will need to make "round-trips." Round trips using things such as AJAX are usually more efficient when dealing with large chunks of data because you only need to download the specific data you are after. Furthermore server side applications allow a developer to concentrate and scale the necessary processing power where on has some control over it. There is a place for client side development, but if we are talking web based applications they should be as light as possible. Also when dealing with clients you have to make lots of assumptions, deal with unending security issues and compromises and still fail on a number of platforms. Either way Java fails... this was the promise of Java at it inception (oh the bouncing heads!)... today if you want to step outside JavaScript for web enabled rich clients you are better served with Flash/Flex over Java.
      --
      --- Nothing To See Here ---
    71. Re:I don't really get the Java hate around here by FishWithAHammer · · Score: 1

      At the very least, if it's an efficiency problem, stop supporting/upgrading the old function, but at least leave the old function in and tell developers that the new method is preferred. Then you get shit like Win32, where you have three versions of "deprecated" functions in some cases and you can never remove them because idiot programmers keep using them. No. Not acceptable.
      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    72. Re:I don't really get the Java hate around here by soliptic · · Score: 1

      OK, I couldn't meaningfully say I "hate" Java, because I've never coded in it.


      However, this article / blog post does a great job of explaining why I sincerely hope it stays that way.


      To (VERY POORLY) summarise the article (long, but well worth a full read) - both the actual necessary syntax, and more broadly, the "cultural conventions" of how you write real-world systems with it, strike me as verbose, ugly, inexpressive, unhuman even, and unnecessarily dogmatic in terms of sticking to OOP / patterns...


      Now, I can already here the counter-arguments brewing. "But... all that OOP dogma stuff makes it more consistent, so better to maintain, debug, split a project across a large team of multiple coders, scale or extend, etc, etc".


      Yup. Well, I dare say that's fair enough. But I'm not writing large Enterprisey systems. I'm not coding in even a small team of people, let alone a large one. Really, none of that applies to me. If you're a big business and Java makes sense for you then fair enough - I'm not arguing - I'm not a guy who pops up on Slashdot and disses it for the sake it. I'm just saying I'm personally glad I don't have to code in it, nor would I chose to for fun, mostly for the reasons well described in the above article.


    73. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > > In our case it's mostly because we have no choice.
      > You always have a choice.

      What I mean is that the software we need for our business only runs on Windows. It is cost prohibitive to change to another software package -- about 2-3 million dollars that we don't have, being a nonprofit organization.

      Using a launch script is a good idea except that our primary software vendor made their own launch program... and of course that program is NOT written in Java, so I'm SOL on that one. Of course I could write my own launcher I suppose...

      Also, something I failed to mention in that exact post you are replying to is that some of the applications are on web pages, so the ideas presented probably would not work for those. However, you did give me an idea: I could probably make a batch file that changes the Java home ENV variable to whichever version the person is about to need. It would be a pain in the @$$ for the end user, and isn't really a "fix", but it would at least allow them to run the programs they need. Now I just need to make sure a regular user has the permission to set env variables... seems unlikely, but it's worth a shot.

      Thanks.

    74. Re:I don't really get the Java hate around here by Delkster · · Score: 1

      And the point of software is the usage, not the creation. So dealing with issues during creation is the developer's problem. It needs to be usable by the client.

      And it's the job of the creators of the software to design and write it so that it is usable by the user. Creation is quite critical for the usability of the software.

      GPP suggests that there are also incompatibilities between various versions of C libraries (perhaps whether a standard library or any other random library that you're linking your C code to), and he's right. Sometimes applications haven't worked with a certain version of glibc until hacked to do so, for instance.

      In fact, obscure incompatibilities aren't all that uncommon when dealing with complex systems, especially if you also use unsupported API or other weird tricks. It's uncomfortable but being able to deal with that is a part of software engineering.

      The root of the problem may of course be in the imlementation of the library itself and not in the application code (which may just need a workaround or a different approach to the problem in order to not hit the library bug), but that's in no way specific to Java.

    75. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I know there's lots of Java haters here, but a comparison of Lisp and Bash to Java got modded as insightful?

    76. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Instead of:

                  l = map(strip, l) # strip white space
                  l = map(int, l) # convert everything to ints

      why not use a list comprehension:

                  l = [x.strip() for x in l] # strip white space
                  l = [int(x) for x in l] # convert everything to ints

    77. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      You don't always need three complete functions. Two of those functions can take the passed parameters and make them work with the third, optimized function. That isn't always possible, but it is ideal.

    78. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      Is that a variable that can be modified by regular users (we use active directory and our users are not "Power Users")?

    79. Re:I don't really get the Java hate around here by hardburn · · Score: 1

      That's not too bad. The explicit File declaration is still unnecessary (other languages have a File object, but they handle it for you unless you really need object functionality), but that's a vast improvement.

      --
      Not a typewriter
    80. Re:I don't really get the Java hate around here by naasking · · Score: 1

      ClassCastException and NPE are the easiest to avoid. With adequate unit testing, those are the easiest problems to find.

      What a cop out this is. With "adequate" unit testing, almost any problem are easy to find!

      I'd like to see unit testing fanatics demonstrate the absence of race conditions. Here's a hint: it's impossible.

    81. Re:I don't really get the Java hate around here by Dan+Ost · · Score: 1

      The world is not a web broswer.

      --

      *sigh* back to work...
    82. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I believe the argument for removing the functional primitives is that they are unnecessary given Python's excellent list comprehension and generator comprehension syntax. The only functionality that can't be replicated is reduce.

      e.g. Map & Filter

      numbers = [1,2,3,4,5]
      squares_under_10 = filter(lambda x: x < 10, map(lambda x: x*x, numbers))

      Can be written as:

      numbers = [1,2,3,4,5]
      squares_under_10 = [x*x for x in numbers if x*x < 10]

      This is arguably more readable and equally efficient, from what I've heard about the efficiency of list comprehensions.

    83. Re:I don't really get the Java hate around here by rawler · · Score: 1

      My largest dislike for Java is that there are solutions to almost all of the problems with it, and people defend them because of that, while they really should not have been there from the beginning.

      For instance, to even HAVE a typed language without Generics/Templates/something equivalent is just silly. Yes, I know they have it since 1.5, but it should have been there from the beginning.

      Also, the way Java tends to encourage complete and misplaced trust in the GC to save the world, to the point where plain old destructors to clean up after yourself is hardly available. Finalizers, allegedly are not guaranteed to run even at a normal exit, (Wtf is that all about?) making them quite useless as a cleanup-mechanism. One fine example is deleteOnExit(). Try Googling it and you'll find a part of the core library API that has little other effects than being one big memory leak. (I just spent hours debugging memory leak in a mission-critical app that turned out to be just that.)

      All this turns out in suboptimal solutions, giving me Cobol fingers instead of letting me do something more useful with my time.

    84. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      In the course of trying this I have found that that env variable does not exist on at least two of my systems... Is it supposed to be there? One has three different versions of Java 1.3 and the other has Java 1.4.

    85. Re:I don't really get the Java hate around here by SuperKendall · · Score: 1

      A user can modify it in the system properties, but that only allows one value - that's why there was the suggestion to wrap the execution of whatever application you are trying to run in a .bat file that specifically sets the JAVA_HOME variable, so that it doesn't matter what that is set to. Each Java installation will set that variable to where it is installed, so currently it's probably pointed at the last one installed.

      The application launch scripts for Java programs are usually batch files, so you could also edit them directly but that may cause issues if you do updates of the software. That's why it's best to interpose a batch file ahead that modifies the JAVA_HOME specifically for that app.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    86. Re:I don't really get the Java hate around here by SuperKendall · · Score: 1

      I thought at least with 1.4 the variable was put there during installation, it may not be... but have you tried going into a CMD shell and running echo %JAVA_HOME%? I'll bet it's set, you're probably just not seeing where.

      Pretty much any Java application will rely on this being set and try to make educated guesses if it is not.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    87. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      For the many jobs where you want to deal with the versioning hell that is expecting a given runtime to exist on a particular machine.

      I'd rather dip my _____ in acid than tie anything I cared about to that boat.

      People who think that java is the "right tool for the job" usually mean "the right tool for the job on my computer in this environment" and don't care about layers of cruft on top of things.

      Which, technically, means they're right about - as it is the right tool for the job as they understand it.

    88. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > tried going into a CMD shell and running echo %JAVA_HOME%

      That's how I found out it didn't exist :)

    89. Re:I don't really get the Java hate around here by Yath · · Score: 1

      I hope this doesn't come across as too much of a snipe... well, it is, but I want to point out one of the reasons I prefer Ruby over Python.

      Your above code is concise, but you used:

      * Global functions (int)
      * Language keywords (for, in)
      * Object methods (split)

      In Ruby, you'd use only methods:

      nums = l.split(',').map {|word| word.to_i}

      I believe this makes me a lazier programmer.

      --
      I always mod up spelling trolls.
    90. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 1

      > > In our case it's mostly because we have no choice.
      > You always have a choice.

      What I mean is that the software we need for our business only runs on Windows. It is cost prohibitive to change to another software package -- about 2-3 million dollars that we don't have, being a nonprofit organization. That was mostly a joke.... mostly ;-)

      Using a launch script is a good idea except that our primary software vendor made their own launch program... and of course that program is NOT
      written in Java, so I'm SOL on that one. Of Beat them up to explain what it does. Chances are it will respect the env variables you pass into it.

      course I could write my own launcher I suppose... Thats the spirit ;-)

      Also, something I failed to mention in that exact post you are replying to is that some of the applications are on web pages, so the ideas presented probably would not work for those. However, you did give me an idea: I could probably make a batch file that changes the Java home ENV variable to whichever version the person is about to need. It would be a pain in the @$$ for the end user, and isn't really a "fix", but it would at least allow them to run the programs they need. Now I just need to make sure a regular user has the permission to set env variables... seems unlikely, but it's worth a shot. I am nor sure I follow you, is the app a WAR/EAR file for a web app or is it an applet? It its a WAR file, your best bet is to run multiple containers (which is often a good idea anyway).

      If its an applet, heck, I have no idea. Applets were a bad design by java, and were then blown out of the water by Flash and pretty much abandoned. Applets never work right, I would stay away from that technology. Your best bet is to either fix the applet code to be the lowest common denominator or switch to using proper applications instead. If you do want to use web as frontend, I would either concentrate on making it into an HTML/AJAX app or switch to something like FLEX - which works nicely with java on the backend and Flash on the frontend. Good luck with that.

      -Em
      --
      RelevantElephants: A Somatic WebComic...
    91. Re:I don't really get the Java hate around here by hansamurai · · Score: 1

      The Scanner class was introduced in Java 1.5, so yeah, things were more verbose before.

    92. Re:I don't really get the Java hate around here by ardle · · Score: 1

      the ability to catch the potential NPE:s already at compile-time
      • Do more null checks in your code ;-) Well, I really mean, check for them explicitly and handle them meaningfully. This is probably the opposite of what you wanted to hear but read on...
      • When checking for nulls, always have the null on the left-hand-side of the equation, i.e. check for "null==x", not "x==null". This helps to uncover null assignment ("x=null") bugs at compile-time. If you can trust yourself to do this all the time, you get much more comfortable using null objects (by which I mean: you can derive meaning from an object being null in your code and not view it as a potential bug)
      • When comparing Strings, put the "known" one first, if there is one (i.e. use '"fred".equals(x)', not 'x.equals("fred")'). It doesn't look nice (but looks better if "fred" is an application constant, i.e. FRED.equals(x)). Anyway, looks aren't everything ;-) This works cos a String can be null but a null String doesn't have an "equals" method. This isn't a tip for catching nulls at compile-time - it's a programming trick that implicitly handles nulls, so makes code more efficient an no extra cost, tho...
    93. Re:I don't really get the Java hate around here by maxume · · Score: 1

      I'm pretty okay chalking it up to differences in taste.

      I know python and I don't know ruby, so it doesn't mean very much that I can't read what you wrote without going cross eyed, but I'm pretty sure that I prefer int(x) to word.to_i, global function or not. I mean, what a penalty, I can't use 'int' as an identifier.

      --
      Nerd rage is the funniest rage.
    94. Re:I don't really get the Java hate around here by tepples · · Score: 1

      There are three languages that can run on the client: Java, JavaScript, and ActionScript. Everything else either must be downloaded and installed before running or requires the delay of a round-trip to the server after each action that the user takes. Everything must be downloaded and installed (Java, a Capable Web Browser.... etc.) Except a capable web browser, the Java runtime, and the ActionScript runtime (Adobe Flash Player) are already installed on a large percent of end users' machines before you try to acquire a new user.

      and either you need to download everything from the server to begin with or you will need to make "round-trips." For some applications, such as single-player video games, it is entirely practical to download everything all at once, hence the prevalence of games written in Java or ActionScript.

      Round trips using things such as AJAX ...use JavaScript, one of the three client-side languages that I mentioned.
    95. Re:I don't really get the Java hate around here by tepples · · Score: 1

      The world is not a web broswer. Applications that are not a web browser typically need the permission of the owner of a computer before they are allowed to install. Often, the user is not the owner, as in the case of a PC owned by a company or a head of household. In some cases, they even need the permission of VeriSign (for Authenticode) or the computer's manufacturer. For example, if you want to make an application that runs on Wii, you have to either make it a web application to run in Internet Channel (which contains Opera 9 and Flash 7) or get a license from Nintendo (which is out of reach for smaller developers).
    96. Re:I don't really get the Java hate around here by hesiod · · Score: 2, Interesting

      > That was mostly a joke.... mostly ;-)

      Sorry, I fractured my funny bone after my first post today required me to repeatedly rush to clarify every letter I wrote. :)

      > Beat them up to explain what it does.

      I'm pretty sure it is just a pretty face EXE that runs different EXEs that run javaw with the jar files as arguments... Yes, I know this sounds wrong. No, they are not that great at what they do. We are probably their worst customer from their POV, because I have a tendency to ask a lot of questions like "what in the world possessed you to do that?" and pointing out when something they did was a Very Bad Idea(tm)... which is uncomfortably common.

      > Chances are it will respect the env variables you pass into it.

      Given their history I doubt it, but it doesn't cost me anything but frustration to ask (our support contract is up to date). :)

      > is the app a WAR/EAR file for a web app or is it an applet?

      Sorry, I have no idea how to determine WAR/EAR. I had to look them up just to know what the acronyms meant. There are multiple programs involved here. The one I am referring to in this post, mostly, is a collection of JAR files that are installed locally, and are standalone applications. There is one launch EXE, and for each program it launches, there is another EXE in the same folder as a JAR.

      For other apps, I just know that we open up a web page and it wants java to be there. How it reacts depends on the program. The most important one of these web apps attempts to install JRE 1.4 if it doesn't already exist (even if 1.3 does exist).

    97. Re:I don't really get the Java hate around here by Chabil+Ha' · · Score: 1

      There are myriad test automation tools out there. One that I personally like (but is now out of business) was Agitar. Google them and you can also find the vultures looking to pick at its carcass...

      --
      We're all hypocrites. We all have hidden parts, it's the contrast between them that make us more a hypocrite than others
    98. Re:I don't really get the Java hate around here by leomekenkamp · · Score: 1

      NPEs will become less widespread when JSR 308 becomes a reality, mostly because of @NonNull. You can read about the proposition here.

      --
      Wenn ist das Nunstueck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput.
    99. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Please do not forget I like (your pick); It
      is difficult to say why. It seems to fit my brain.

    100. Re:I don't really get the Java hate around here by Sique · · Score: 1

      If its an applet, heck, I have no idea. Applets were a bad design by java, and were then blown out of the water by Flash and pretty much abandoned. Applets never work right, I would stay away from that technology. I am managing some type of equipment whose web frontend makes heavy use of Java Applets. Unfortunately, the oldest equipment variantes run happily with Java 1.3, but have issues with higher versions. Newer variants require the newer JREs, and fail on the old ones. For that we have the "Java Switcher", which changes the JRE before launching the webbrowser (which has to be Internet Explorer though, otherwise we run into other issues. Luckily IE 5.5, IE 6.0 and IE 7.0 work on all types).
      --
      .sig: Sique *sigh*
    101. Re:I don't really get the Java hate around here by Lennie · · Score: 1

      He's talking about a web-application, running within the browser.

      --
      New things are always on the horizon
    102. Re:I don't really get the Java hate around here by Lennie · · Score: 1

      1. he's talking about an application that start from within the browser.

      2. I've seen different versions of java installed (on windows) brake too.

      There are system libraries or something in windows and different versions of the jre or jdk install different versions of that. And it does brake.

      --
      New things are always on the horizon
    103. Re:I don't really get the Java hate around here by leomekenkamp · · Score: 3, Informative

      Today, the most successful programming languages are (...), .NET, (...) (does SQL fit in here?) (...) .NET is not a programming language but a platform. SQL is a query language and not a programming lanugage (Turing machine stuff etc). Java does thread-handling quite decently, it is just too difficult to grasp for most programmers.
      --
      Wenn ist das Nunstueck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput.
    104. Re:I don't really get the Java hate around here by p0tat03 · · Score: 1

      And you've nailed one of the major reasons why Linux has not taken off outside of power user, tech-geek circles. When I download Firefox, I damn well expect it to just RUN (like it does on OS X), or at the very least install without requiring any intervention on my part (like it does on Windows). On Linux I'm in package hell, I have to read documents on what dependencies the software has, make sure I match the minimum versions on all of them... And God forbid if my package repo is out of date, then I have to go hunt the pkg down, download it, tar, ./configure, make, sudo make install... Oh, and once you're in THAT hell you've recursively created MORE hells, since each package you're missing ALSO has dependencies :)

      Oh, I realize that this whole problem is moot if *every single app in the world* is properly managed by my package repo, then it's just a matter of typing install. But of course, this is simply not the case. There's a lot to be said for being able to deliver software to your users without any fuss, and Linux isn't QUITE there yet.

    105. Re:I don't really get the Java hate around here by Yath · · Score: 1

      I'm pretty okay chalking it up to differences in taste.


      If you're comfortable with your language, there's no need to address my comment. My post was competitive - coming from the viewpoint that it is possible for some languages to better or worse than others - and furthermore, that it's worth the effort to compare them and select the best.

      I mean, what a penalty, I can't use 'int' as an identifier.


      The penalty for using global functions, like other less-than-ideal features, has mostly disappeared once you've memorized the language's idiosyncrasies and resolved to work around them. For newcomers it costs more.

      In this case, it means that if you want to provide your own way of transforming an object from a new class to an integer, you have to use some rather special syntax:

      class Myclass:

            def ___int___(self):
                  return self.data.length() # Or something

      The difference between the calling syntax - int(foo) and the method declaration - "__int__" - seems trivial. But it's a relic of an awkward beginning on Python's part. And you had to learn extra to do this seemingly simple operation.

      Sure, you could declare a method called "to_int" which would work like any other Python function. But other Pythonistas would wonder why you didn't just do it the regular way.
      --
      I always mod up spelling trolls.
    106. Re:I don't really get the Java hate around here by brooklynholiday · · Score: 1

      I think one thing that PHP really had going for it was the "wiki" nature of its docs. There is a huge body of experience easily accessible to a new programmer, or a seasoned one who just wants to "get things done." Compare this to the javadocs for your typical project... it's night and day!

    107. Re:I don't really get the Java hate around here by Areyoukiddingme · · Score: 1

      This is why I adore py2exe. It bundles up my Python code, the python interpreter that code needs, and any DLLs I need, all in a nice self-contained package. Apply Innosetup liberally, and I never ever get installation or compatibility gripes from customers.

      I like Linux. I use Linux, at home and at work. 6 out of 10 machines I use every day run Linux (not counting Slashdot). One of those 10 runs FreeBSD. But this "libc changed so the entire flippin' world is now incompatible with itself" crap has got to STOP. Until that day, "Linux on the desktop" is a non-starter. The basic system libraries must be binary compatible forever. I don't care if it's hard, I don't care if it retards progress, I don't care if it institutionalizes "bad" APIs, I don't care if "you have the source, so just recompile your app", I don't care if Microsoft does it so it's bad, shut up and do it.

      &ltslash rant&gt

    108. Re:I don't really get the Java hate around here by LeafOnTheWind · · Score: 1

      Uh.... you got me... I love python, but whats so great about PHP, Ruby, Bash or Lisp. Java is well organized and, with JIT, is faster than an interpreted language. Sure, its libraries are kinda large, but 512 MB of RAM is like $38 now. That doesn't mean its right for everything, but I honestly don't see what "any other really-high level language" does to beat it. I can't imagine writing a large application in Scheme...

    109. Re:I don't really get the Java hate around here by maxume · · Score: 1

      If you're comfortable with your language, there's no need to address my comment. My post was competitive - coming from the viewpoint that it is possible for some languages to better or worse than others - and furthermore, that it's worth the effort to compare them and select the best.

      Things like "better", "worse" and "best" are subjective. We don't want them to be, but they are. You are demonstrating a strong preference for consistency, something which is good, but not something that it is good to be a slave to. There is at least a case to be made for the special syntax, as it marks that the intent is to return an integer representation of the class, rather than just the length of the class (which may be better provided by an attribute or property, or even a length method).

      It would enhance your complaint if you whined about the arbitrary best practice of inheriting from object when declaring a class.

      --
      Nerd rage is the funniest rage.
    110. Re:I don't really get the Java hate around here by Lennie · · Score: 1

      I prefer not to use a language or code where I need an special editor to get any work done.

      --
      New things are always on the horizon
    111. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      I've never used Python, but that seems like a good solution. I imagine it bloats and slows the program a bit, but I believe it's worth it so that the user doesn't have to put up with the crap you mentioned. The incompatibility problem is why I don't use Linux on my home machine, even though I really like it. I like to be able to upgrade my software without wanting to stab myself in the eye. Of course, as this thread shows, I haven't moved away from dependency problems simply by using Windows. :(

    112. Re:I don't really get the Java hate around here by owlstead · · Score: 1

      It's almost open source, so the problem with the Sun classes may disappear, as you can create a duplicate of the functionality somewhere else.

      Obviously you still have the problem that the code may be 1) not well tested 2) unreadable 3) tied in with other code.

      Avoiding code in the sun.* packages should definitely be the default. Make sure you have an IDE that can filter them out of your auto-complete lists.

    113. Re:I don't really get the Java hate around here by Augusto · · Score: 1

      You have to specify the file so it nows you want to "scan" a file.

      There's a string constructor that works on a string, so it makes perfect sense that you have to specify the file with a File object (instead of overloading and making you guess that the string maps to a file or URL).

      --

      - sigs are for wimps.
    114. Re:I don't really get the Java hate around here by mpeg4codec · · Score: 1

      I agree, community is vital to the success of a programming language. Some languages, C for instance, have uninviting but huge communities. You won't be hard pressed to find someone who knows the answer to a run of the mill question in C. You may have some trouble getting an answer other than RTFM, though.

      However, a friendly, helpful, and well-established community is not a sufficient condition for the success of a language. Take Perl as an example. Perl Monks is one of the most welcoming and helpful communities I've ever seen on the internet, period. Literally nothing compares regardless of field. And furthermore, they'll answer the full gamut of questions, ranging from utter newbie to relatively advanced functional programming and beyond.

      Let's not forget CPAN, which is probably the largest and best organised collection of packages and libraries for any programming language on the internet. Yes, there is a little noise you have to wade through, but the signal to noise ratio is unbelievably high. If you want to do something in Perl, it's likely that you can find a module on CPAN that will at least give you a base of code to work with, if not a completely working and tested solution.

      You'll note that despite those two great features, Perl continues to lose popularity, mostly to Python. It's probably due to the fact that, even though Perl is pretty easy to get started with, as you note Python is down right trivial. People call it pseudocode that you run because it's so damn simple and easy to get going, which is probably one of its greatest strengths. Perl has been around longer, probably has a larger and friendlier community, yet the outright ease with which one can program in Python trumps those other, greater (in my opinion) strengths of Perl.

      It's sad to see such a great language get knocked all the time due to a bad reputation (which it certainly deserved--five to ten years ago). Unfortunately, a combination of a bad rep and an easier to use, more popular language is starting to make it look like Perl will soon be relegated to a relative niche, at least in the eyes of the public.

    115. Re:I don't really get the Java hate around here by Jerry+Coffin · · Score: 1

      So now I'm always wary about using Java applications, since they can easily get tied to a specific JRE and if that JRE has security flaws, you're SOL.
      Same can be said of ANY language that evolves.

      Not so. It's true of a language that makes the end user provide/install a large part of the environment in which the program runs. Technically, this isn't a characteristic of the language per se, but of the implementation. Nonetheless, it's not the sort of problem that arises for those who use languages like Fortran, C, C++, Ada, etc.

      During development a similar problem can arise -- I can write code that requires a specific version of a specific compiler (or library). Somebody else can write code that requires a different specific compiler or library -- but unlike the situation with Java and such, this does not affect the end user.

      Of course, even with a language like this, a programmer can use things like .so's or DLLs (as the case may be) that can lead to problems -- as I said, this is a characteristic of the implementation, not the language. Nonetheless, it's much easier to avoid with something C, C++ or Ada than with something like Java or Python.

      --
      The universe is a figment of its own imagination.
    116. Re:I don't really get the Java hate around here by owlstead · · Score: 2, Insightful

      I've had the same issues with C/C++ and a lot of other languages though. Most Java programs run fine on the latest JDK, and some run up to 20/30% faster on JDK 1.6. There are a few frameworks that try to cope with this problem, such as the OSGi framework for Java and assemblies for .NET. But it is a complex problem and I don't think *any* language has solved this problem completely. It might not even be completely solvable, come to think of it.

      My code compiled against 1.2 still runs fine in JDK 1.6 though. So I cannot call that horrible or anything.

    117. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0


      try:
         fh = open("blah.txt", "r")
         for line in fh.readlines():
            print line
      except IOError:
         pass

    118. Re:I don't really get the Java hate around here by owlstead · · Score: 1

      Both of your comments show how strong the language is. And why I would never *ever* like to read a few thousand lines of your code. YUCK.

      Take off new line *especially*? WTF?

                      l = [int(x.strip()) for x in l.strip().split(',')]

      Are you really trying to say I should prefer this to the methods available in Java? I (*and* you) would easily understand a piece of code doing the same thing in Java.

    119. Re:I don't really get the Java hate around here by hansamurai · · Score: 1

      Why are you posting Python code? If you aren't able to do what Java can do in Python in less lines, then there's a major problem with Python, not Java. Python is a dynamically typed language with an IO API that is readily available without import. The comparison can be made, but they're off topic to this discussion.

    120. Re:I don't really get the Java hate around here by SuperKendall · · Score: 1

      Sorry, should have guessed you'd try that - the only thing I can think of is someone removed the global env variable. If any other java apps are deployed they must have hard coded the JRE location to still work, it's common for scripts to assume a default distribution if JAVA_HOME is not set.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    121. Re:I don't really get the Java hate around here by chromatic · · Score: 2, Interesting

      You'll note that despite those two great features, Perl continues to lose popularity, mostly to Python.

      Popularity of what? I've seen various statistics, and the job trends and book sales figures (for two examples) disagree with this assessment.

    122. Re:I don't really get the Java hate around here by maxume · · Score: 2, Insightful
      I was responding to the complaint about map going away. Idiomatic python for what the original poster is doing would be more like

      import csv
      reader=csv.reader(open("file.csv"))
      # header=reader.next()
      for row in reader:
      # row is a list of strings from the columns in the csv file.
      # convert to int
      row=[int(c) for c in row]
      --
      Nerd rage is the funniest rage.
    123. Re:I don't really get the Java hate around here by FishWithAHammer · · Score: 1

      Or you can deprecate them, keep them around for a bit, and then remove them.

      Retaining deprecated functions encourages the use of deprecated functions. It's horrible for maintenance and for keeping a clean design.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    124. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 1

      There are system libraries or something in windows and different versions of the jre or jdk install different versions of that. And it does brake. Thats just not true. Every single file of the JDK, every library, every executable, every anything exists in one directory structure specific to each JDK build. You can take the whole thing and copy it into any other directory on any other machine and it will work. You can run two or twenty different versions side by side and they will not interfere at all as long as your env variables are set correctly.

      The only "shared" things are: global environment variables, and file extension registration - both you can live without.The only other thing is the browser integration - and if you are using applets you will have all sorts of other problems. Applets suck.

      -Em
      --
      RelevantElephants: A Somatic WebComic...
    125. Re:I don't really get the Java hate around here by cmburns69 · · Score: 1

      The instanceof operator allows you to test whether or not a certain cast operation will succeed without throwing an exception.

      For example, the following will NOT throw an exception, no matter what you pass into the getXValue method:


      class X {
          String value
      }
      class Y {
          public String getXValue(Object mayBeX)
          {
              if( mayBeX instanceof X )
              {
                  X casted = (X)mayBeX;
                  return casted.value;
              }
              return "";
          }
      }

      --
      Online Starcraft RPG? At
      Dietary fiber is like asynchronous IO-- Non-blocking!
    126. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I have used Java since 1.0... I found that for developing mission critical applications it was a major life-saver.

      It allowed our dev team to develop an single enterprise application that was deployed across two different hardware platforms with no problems! It let us reduce the hardware costs on the desktops from expensive graphical desktops to commodity Windows PCs to run the Java client AND totally put us in the driver's seat when choosing our backend server hardware as the application ran fine on any OS.

      We never had runtime type checking bugs either. We were able to employ simple strategies to insure type-safety even at the collection level (And this is by using only Classes and Interfaces! Totally KISS coding!)

      We saved so much money that year.
      The bonuses were totally out of control that year.

      And that is just the project for the job.

    127. Re:I don't really get the Java hate around here by hey! · · Score: 1

      I'll disagree slightly.

      While Java did get a lot better with 1.5, it wasn't that bad before. The biggest fault, in my opinion, was the object/primitive dichotomy without autoboxing.

      The biggest problem with Java were the frameworks built around it. The philosophy of using checked exceptions of course an obvious problem with those frameworks, but even worse was the ways that many Java frameworks had of complicating your life rather than simplifying it.

      I think many frameworks were built around unrealistic idealizations of problems not well understood, in which rare special cases drive so much of the developer's experience. In part this was hubris leading to overengineering in the name of best practices. In part this was the desire to productize frameworks -- even some open source frameworks could be characterized this way.

      I think the Spring framework was a turning point for the Java community. It showed that a framework could be powerful without intruding into the coding process and littering systems with references.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    128. Re:I don't really get the Java hate around here by mrchaotica · · Score: 1

      Same can be said of ANY language that evolves. I am currently battling an app parts of which require Python 2.3, parts 2.4 and parts 2.5.

      The real issue is whether we're talking about forwards or backwards compatibility. For example, if your Python code actually requires >= 2.3, >= 2.4, and >= 2.5, that's no problem: just use >= 2.5. But if your code required = 2.5 (or some other similar permutation), then the language designer screwed up by breaking backward compatibility.

      --

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

    129. Re:I don't really get the Java hate around here by mrchaotica · · Score: 1

      I was going to rant about how that was not true about C, but I stopped myself. C went through a bunch of iterations (AT&T, K&R, others still way before my time) before it became an ANSI standard.

      So, I guess the lesson is to use a language that has stopped evolving.

      Uh... what about C99?

      --

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

    130. Re:I don't really get the Java hate around here by mrchaotica · · Score: 1

      If that were true, Linux distros wouldn't need package managers.

      That's just because programs on Linux are usually dynamically linked. If I were making a commercial program for Linux, I'd just statically link the damn thing and be done with it.

      --

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

    131. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Microsoft had and continues to spread "anti-Java" FUD.

      Sadly, there are people who come to believe the FUD
      and help in spreading the FUD.

      The Java-haters all seem to be following the same playbook. Say anything against Java.

      Lot's of drive-by FUD.

      Java-hater1: "Java is interpreted, therefore slow... PHP is better."
      Sockpuppet1: "Yeah! Dog slow!"
      Sockpuppet2: "PHP is faster!"
      Random Person: "But, Java uses JIT and..."
      Sockpuppet3: "Die die!!!"

      And so on.

      In the face of this going on for years and years, there are not developers who believe propaganda over the real merits of a computer language. There are now developers who believe that JITs cannot work and strong typing means no potential for soft typing. There are all kinds of fallacies that are tossed out with the purpose of muddying the waters so that people cannot make clear decisions on the merits, but instead make decisions on the fallacies.

      A big propaganda campaign.

      What can we do to turn this around?

    132. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      the fact that it can happen at all is unacceptable.

      Same with any interpreted language. PHP, Python, same problem if you are using deprecated accessors. Heck, even the MySQL connector worked differently in PHP3 Java isn't an interpreted language, it's compiled to bytecode. Bytecode is often interpreted, but that's another story.
    133. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      using instanceof checks will protect your code when using a List. How exactly will they protect it? By the point you have a person object in a list of cars, your app is already hosed.
    134. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      I suggest using generators to get most of that functionality back.

    135. Re:I don't really get the Java hate around here by Areyoukiddingme · · Score: 1

      It does increase the installed size substantially, but it has zero impact on speed. A loaded library is a loaded library, regardless of where you get it. Same for the interpreter. There's actually some argument to be made that having everything in one directory results in some tiny loading speed improvement vs system libraries, because disk defragmenters will put all of the requisite files beside each other on the disk, eliminating a potentally long seek across the disk. (Assuming something else didn't load the same shared library you need into memory already. Eh. You pays ya money and ya takes ya chances.)

      Everything is relative though. The compressed installer, with Windows CHM help file, is still under 8 megabytes. The program has been in development for 3 years, and does many things that make the company quite a lot of money. Functionality is non-trivial, in other words. Given CD distribution and 40 gig laptop hard drives, (laptops dedicated to running the equipment), the 8 megabyte size doesn't give me any heartburn at all.

    136. Re:I don't really get the Java hate around here by Chabil+Ha' · · Score: 1

      First thing that comes to mind is validation. If you create middle ware that several apps consume, you may not have control over what they place in the list, but you sure can control how you handle things instead of outright cast something to an invalid object.

      It's certainly more efficient to do an instanceof check than to catch a ClassCastException.

      --
      We're all hypocrites. We all have hidden parts, it's the contrast between them that make us more a hypocrite than others
    137. Re:I don't really get the Java hate around here by m50d · · Score: 1
      It's horribly verbose. It's still slow, unarguably slower than C, but has what I can only assume are deliberately crippled facilities for interfacing with C (because no one would intentionally design something as hideous as JNI if they wanted it to be actually used). A consequence of this is that the standard library is slow because it's all implemented in pure java. It tries to have low-level features (arrays, types, etc.) which still don't mesh consistently with the rest of the language; it's making gradual progress in this (autoboxing etc.), but basically still sucks on that front. The String type is a horrible mess (also notice how operator overloading is good enough for us java library folks who need it, but we won't let any of you scruff have it). Forced catching of exceptions is a horrible blunder. I could go on. It's hard to port (look at the state of Java on BeOS, or, heck, non-x86 linux. Sun's done so much dicking around with "we're making it open source real soon now, honest" that I no longer listen to a word they say. Ultimately it's a language with all the coding verbosity and unpleasantness of a low-level language like C, without the performance gains. And it tries too hard to prevent you shooting yourself in the foot, with the result of making it hard to do anything at all.

      That's probably most of the reasons I hate Java.

      --
      I am trolling
    138. Re:I don't really get the Java hate around here by m50d · · Score: 1

      If you want a reasonable language that's stopped evolving, go with TCL. It's almost as nice to write as Python on a good day, and hasn't changed noticably in a decade or so.

      --
      I am trolling
    139. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Spoken like someone who's never used a real operating system. Linux has these problems because the Linux dynamic linker is *braindead*. They're solved problems, they shouldn't exist, and they don't exist on any serious system, but for some reason Linux folks are happy to go along with it.

    140. Re:I don't really get the Java hate around here by m50d · · Score: 1

      I really think there are very few jobs for which Java is the right tool. If you really need performance, Java doesn't cut it compared to C++. If you don't, a modern dynamic language (python/perl/ruby/etc.) would be a lot easier and nicer to write. About the only thing I can think of that Java does actively better than the alternatives is threading where you're doing a substantial amount of processing in each thread; a niche big enough to ensure its survival for a while, sure, but not a huge one.

      --
      I am trolling
    141. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      from __future__ import with_statement
      with open("blah.txt", "r") as fh:
          for line in fh:
              print line

    142. Re:I don't really get the Java hate around here by theolein · · Score: 1

      You know, I'm a mac user too (I admin 40 OSX machines at work), and people like make me ashamed. With any modern distro of Linux, such as Ubuntu, installing Firefox is a simple as clicking a button. That's all.

    143. Re:I don't really get the Java hate around here by ForumTroll · · Score: 1

      The loss of the print statement is definitely not catastrophic. It should have been a function from day one and I'm glad they're fixing it.

      --
      "A Lisp programmer knows the value of everything, but the cost of nothing." - Alan Perlis
    144. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      from operator import add
      reduce(add, [1,2,3]) And what happens if you have a typo? Then the application would only report that at runtime. What happens if you have the typo in a piece of code that is only run 0.1% of the time; and has not run in any tests? Then you ship defective software to the customer, great job!
      This is a problem in all weak-defined languages. You can do this kind of thing in java easily, just make an ArrayOp-object that you pass to a map(Collection c, ArrayOp op)-function.

      the other thing about python is that it tends to be self-documenting, and also, there appears to be a tendency of coders to actually write _some_ documentation. 'Self-documenting' is a satanic expression and people who use it should be dragged by their ear and forced to look at their code from 10 years back. Someone will need to understand your code, and that someone will probably not have the same deep knowledge of the programming language that you do. This is what makes java powerful: only simple-as-hell statements. This is what makes java cumbersome: only gigantic statements to do simple things.

      so things like happydoc can auto-generate you HTML documentation, by walking the code itself and collecting all the module, class and function documentation strings - just .... just... incredible! I hope you're being ironic... ever heard of 'javadoc'?

      import os
      print os.path.__doc__ You're joking, right? Ever used eclipse?
    145. Re:I don't really get the Java hate around here by MtHuurne · · Score: 1

      if (x = null) won't compile in Java, since there is no implicit conversion from reference to boolean. In C/C++, it's a valid remark, but most compilers will issue a warning about it.

      Whether a null check is appropriate depends on whether a certain variable is allowed to be null according to the design. For example, if an argument is allowed to be null, it should be mentioned in the JavaDoc and you should check for it; if it is not allowed to be null, throwing NullPointerException is the proper way to handle it.

      Something I see too often is a class in which a field is initialized with a setter and dereferenced in another method. Apparently the programmer encountered a NullPointerException during testing and to "fix" that, if (field != null) was added before the dereference. However, the method in question will not do what is supposed to do when the field is null. In most cases, the real fix is to initialize the field in the constructor. In a few cases two-step initialization is actually required; if the wrong call order is used IllegalStateException should be thrown instead of silently doing the wrong thing.

      So basically I agree with what you wrote about null checks, but wanted to emphasize that "avoid the NullPointerException and fail silently" is not an implementation of "handle them meaningfully" ;)

    146. Re:I don't really get the Java hate around here by JAlexoi · · Score: 1

      >> can break an application tells me that there is something wrong with the underlying program.

      Hm.... We migrated from 1.4 to 1.5 over 10 minutes, it took to install JRE 1.5 .
      The ONLY real problem, is to force the developers to actually use Java 5 features....

    147. Re:I don't really get the Java hate around here by Lars512 · · Score: 1

      Back in my undergrad degree we had a subject on Java. Now we also took Haskell, Prolog, C beforehand. At the time, I really didn't get Java, and resented having to learn it.

      It's cleaned up a lot since then, but I think what I didn't like was having OO design shoved down my throat. Some things just work well as functions, some things as objects. I've always liked mixing and matching. Without functions as first class objects, you end up having to build BlahFactoryFactories for things. I remember a good post on how Java limits your language here: http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html.

      That said, I've since programmed in Java again for work, and have found it a pleasure. I now really appreciate strong unicode support, and the excellent refactoring tools for it in Eclipse.

    148. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      > The ONLY real problem, is to force the developers to actually use Java 5 features....

      Hehe, well ideally, that is true. :)

      Unfortunately, even with 6 available, some developers stick to the version that they created their application with originally. A lot of software companies seem to live in a bubble, thinking "as long as it works, it's fine." But they don't always consider that their program could conflict with other software that their clients must use.

    149. Re:I don't really get the Java hate around here by p0tat03 · · Score: 1

      Even the betas? Firefox 2 comes with most modern Linux distros anyways, so an install is moot. Installing the beta, though, required several package updates, and in the case where I was on an old RHEL machine, manually building from source when the package manager didn't HAVE a new enough version of the package on hand.

      You can make a point about beta software being not ready for general consumption - but compare with OS X and Windows, where the FF3 beta was available in a ready-to-go form with NO dependency issues on ANY machines...

    150. Re:I don't really get the Java hate around here by CastrTroy · · Score: 1

      In .Net's defence, the Win32 API is a mess and needs a nice clean layer on top of it like .NET, in order for anybody to understand it. If PHP really is a layer of the c posix libraries, then they could also use a nice clean up.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    151. Re:I don't really get the Java hate around here by Rary · · Score: 1

      If you really need performance, Java doesn't cut it compared to C++.

      If you're writing a word processor, I'd recommend C++. If you're building an e-commerce website (take something like Amazon or eBay for example), nobody would use C++. They'd use Java -- and they did.

      All the people who point to C++ as an alternative are thinking thick-client applications. If that's what you build, great. As I said, use the best tool for the job. I wouldn't use Java for that either. But if you're building web applications, C++ is not the tool.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    152. Re:I don't really get the Java hate around here by arotenbe · · Score: 1

      Basically, before 1.5, Java sucked. The language was too simple for the scale of the programs it was intended for. People seem to forget how important an update 1.6 was, though. It added a zillion different library functions that it should have had a long time ago. (Array slicing? Radial gradients?)

      I don't know what the problem is that people seem to have with NullPointerExceptions. If you have a good understanding of the language, Eclipse's conditional breakpoints will help you find the cause of most problems of that type quite quickly.

      --
      Tomato wedge sperm darts that are Republican.
    153. Re:I don't really get the Java hate around here by Rary · · Score: 1

      For the many jobs where you want to deal with the versioning hell that is expecting a given runtime to exist on a particular machine.

      Java primarily dominates on the server side. JVM versioning isn't an issue, since you control the server. The clients don't even need a JRE.

      If JVM versioning on the target machine is a critical issue for a given job, then maybe Java isn't right for that job. But that doesn't mean it's not right for situations where that isn't an issue.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    154. Re:I don't really get the Java hate around here by Estanislao+Mart�nez · · Score: 1

      "it's difficult to explain but these functional-language primitives are extraordinarily powerful, providing a kind of "zeroth dimension" of data manipulation."

      It's not that difficult to explain.  One way to do it is to explain them in terms of common looping patterns in imperative programs.  One very common type of loop is the following (in pseudo-code):

      result := init_value
      for ( item in list ) {
          result := operation(item,result)
      }
      return result

      This loop pattern, with different choices of init_value and operation, is common to all sorts of code that work with lists, arrays or other types of sequences.  For example, with init_value = 0 and operation = add, that's code for summing the elements of the list; with 1 and times, it's product of the elements of the list; with init_value = "" and operation = string_append, it's concatenation of a list of strings.

      Well, that kind of loop is exactly what reduce is.  Instead of writing the same damn loop over and over with minor variations of init_value and operation, you just pass the init_value and operation as arguments to a prewritten loop.

      Map and filter are no less difficult; they correspond to different patterns of loops.

    155. Re:I don't really get the Java hate around here by arotenbe · · Score: 1

      Don't forget .NET! You have your wonderful names like "System.Runtime.InteropServices.ComVisibleAttribute".

      --
      Tomato wedge sperm darts that are Republican.
    156. Re:I don't really get the Java hate around here by WilliamSChips · · Score: 1

      Python 3000 doesn't exist anymore. The plans were scrapped and they've decided not to remove those features.

      --
      Please, for the good of Humanity, vote Obama.
    157. Re:I don't really get the Java hate around here by idlemachine · · Score: 1

      guido - believe that the functional-language-based primitives (map, lambda, reduce, filter) are "unnecessary". i initially thought that this was a joke - it was announced on april 1st. unfortunately it turns out to be true. the removal of these key features is profound: the language (python 3000) is dead before it is completed.

      Never let the facts get in the way of a good rant:

      Q. If you're killing reduce(), why are you keeping map() and filter()?

      A. I'm not killing reduce() because I hate functional programming; I'm killing it because almost all code using reduce() is less readable than the same thing written out using a for loop and an accumulator variable. On the other hand, map() and filter() are often useful and when used with a pre-existing function (e.g. a built-in) they are clearer than a list comprehension or generator expression. (Don't use these with a lambda though; then a list comprehension is clearer and faster.)

      (Python 3000 FAQ)

      As it stands, map() and filter() will both remain, and reduce() is being moved into functools. This isn't the deal breaker you're making it out to be.

    158. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      it is not possible to count python 3000 in amongst those languages with extraordinary power, because the developers - primarily guido - believe that the functional-language-based primitives (map, lambda, reduce, filter) are "unnecessary".

      i initially thought that this was a joke - it was announced on april 1st.

      unfortunately it turns out to be true. the removal of these key features is profound: the language (python 3000) is dead before it is completed. it's difficult to explain but these functional-language primitives are extraordinarily powerful, providing a kind of "zeroth dimension" of data manipulation. Perhaps you should read the Python 3000 FAQ before spouting any more nonsense.

      And find your shift key, know it, and show it a little love from time to time. Like at the beginning of sentences.
    159. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      unfortunately it turns out to be true. the removal of these key features is profound: the language (python 3000) is dead before it is completed. it's difficult to explain but these functional-language primitives are extraordinarily powerful, providing a kind of "zeroth dimension" of data manipulation. You're a couple of years out of date there buddy. map() and filter() work fine in 3.0 (with beta1 due before too long), and reduce() is still available as functools.reduce(). It got moved out of the builtin namespace since it's a lot less generally useful than the other two (an explicit loop will typically be much clearer) and a lot easier to screw up (usually by leaving out the initial value the way you did and then not testing the operation with empty sequence and 1-element sequence inputs).

      (oh, and lambda expressions ending up staying as well)
    160. Re:I don't really get the Java hate around here by oscartheduck · · Score: 1

      Fortunately, no. You can use a scanner object and just suck a file in. Same scanner class also reads from stdin and from streams and whatnot.

      --
      How to use coral cache: http://slashdot.org.nyud.net:8090/~oscartheduck
    161. Re:I don't really get the Java hate around here by Jack9 · · Score: 1

      I didn't mean to imply java was interpreted, but that interpreted languages (who have the best record for backward compatibility, since they are abstractions) suffer as well. Breaking backwards compatibility is a commonality across all languages.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    162. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 1

      Not so. It's true of a language that makes the end user provide/install a large part of the environment in which the program runs.
      Technically, this isn't a characteristic of the language per se, but of the implementation. Nonetheless, it's not the sort of problem that arises for those who use languages like Fortran, C, C++, Ada, etc. I disagree. In fact this is much bigger issue under C, C++ and so on as you usually have to link against multiple shared libs which creates nightmares orders of magnitude worse than anything Java can dish out. Just google around you will find many stories of executables failing due to missing or mismatched libs.

      Of course you can always static-link to your libs, but how is that different from just shipping the JDK along? Just because all the libs are inside same executable file, does not mean that you are not just copying them along.

      During development a similar problem can arise -- I can write code that requires a specific version of a specific compiler (or library). Somebody else can write code that requires a different specific compiler or library -- but unlike the situation with Java and such, this does not affect the end user.

      You obviously never upgraded linux kernel or a major version of gcc. For example I have much code compiled under RH9 that does not come close to RUNNING under any modern Linux distro - let along compile. Sure you can track down the right version of the lib, then find the right versions of all the libs that lib relies on, then all the libs those rely on - but you can't honestly claim this is easier then installing a particular version JDK for your OS.


      Of course, even with a language like this, a programmer can use things like .so's or DLLs (as the case may be) that can lead to problems -- as I said, this is a characteristic of the implementation, not the language. Nonetheless, it's much easier to avoid with something C, C++ or Ada than with something like Java or Python.

      C'mon, when was the last time you seen anything larger than "Hello world" statically linked? Even something as simple as cat is dynamically linked against two libs.

      -Em

      --
      RelevantElephants: A Somatic WebComic...
    163. Re:I don't really get the Java hate around here by the_lesser_gatsby · · Score: 1

      Indeed you can do that. But the discussion was about using instanceof as an alternative to generics, for which you'd probably want an exception to be thrown since the wrong type is an unexpected case.

    164. Re:I don't really get the Java hate around here by agbinfo · · Score: 1

      Have you tried setting the JAVA_HOME environment variable to the root folder of the JDK before running the application?

    165. Re:I don't really get the Java hate around here by Sean+Riordan · · Score: 1

      Now I just need to make sure a regular user has the permission to set env variables... seems unlikely, but it's worth a shot. Generally regular users can modify ENV vars for themselves, but not the system level vars so you should be fine with bat scripts to swap the env around. I can't recall which takes precedence in the case of a conflict though, been a while.
      --
      Sig? What if I prefer Glock?
    166. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      You're joking, right? Ever used eclipse?
      Yeah. It sucks.
    167. Re:I don't really get the Java hate around here by cromar · · Score: 1

      Right on, dude. That sums up exactly why the few extra keystrokes in strongly typed C-like languages are worth it - coding in those languages is a joy. Trust me. I grew up on AppleSoft BASIC. Python, et. al. just remind me too much of those nightmares.

    168. Re:I don't really get the Java hate around here by Billly+Gates · · Score: 1

      If its undocumented then where do the developers find about these tricks?

    169. Re:I don't really get the Java hate around here by Eskarel · · Score: 1
      It's not as bad as it used to be, and to be honest it was really only bad because it was one of the first serious attempts at cross platform code.

      Sun should have just built the JVM's smart enough to handle all the abstraction of file writes and reads and buffers and all that rot in the first place.

      Instead they went for a simplified VM and a complex programming structure. Personally I think a lot of this had to do with the fact that in the early days Java was slow and making the JVM any more complicated was probably counter productive. I think this was probably the wrong way to go as no one in their right minds liked all that IOStream and Buffer nonsense even if some of us understood why they did it.

    170. Re:I don't really get the Java hate around here by quanticle · · Score: 1

      Windows doesn't have this problem because Windows libraries don't change nearly as much (and this has its own disadvantages). Also, you don't remember the bad ol' days of "DLL Hell", do you?

      --
      We all know what to do, but we don't know how to get re-elected once we have done it
    171. Re:I don't really get the Java hate around here by QuasiEvil · · Score: 1

      Slow as fuck, bloated as fuck, and runs in fewer places than I can port ANSI C. What exactly was there to like again?

    172. Re:I don't really get the Java hate around here by Waccoon · · Score: 1

      PHP is badly organized, has a long history of importing third party components for what should be included in the base, and is completely inconsistent with itself in many ways...

      PHP started life as a template engine. Of course it isn't taken seriously as a language.

      I use PHP all the time because it's easy to make redistributable projects that will work on cheap or free hosts, and it doesn't give you the CHMOD headaches that Perl does. But, I'd switch to something else in a heartbeat, if there were anything else more widely available on shared hosts.

      What really busts me up is how many templates engines there are for PHP, and how much they have to undo all of the language's mistakes. Now that's a real slap in the face!

    173. Re:I don't really get the Java hate around here by Jerry+Coffin · · Score: 1

      Of course you can always static-link to your libs, but how is that different from just shipping the JDK along?

      It's drastically different, and if you'd read the previous posts in the thread, this would be obvious. With statically linked libraries, the user can have one application that requires one specific version of the library running alongside another application that requires a different specific version of a library, and never even know there was potential for a conflict.

      Shipping the JDK with a Java application isn't like that at all. Yes, if the prescribed version of the JDK is installed with my application, it ensures that my application runs (assuming I've done my job even halfway reasonably, of course). Installing that JDK, however, may break some of their other Java applications -- and the only way to fix them is to re-install some other version of the JDK, and in doing so, breaking mine.

      There is also a substantial difference in practicality: static linking adds some to the size of the program, but not anywhere close to the same as the size of the JDK. Installation isn't affected either -- static linking doesn't mean that the installation has to be carried out as root or anything like that -- whereas, the JDK normally should carry precisely such requirements, due (if nothing else) to exactly the problems outlined above.

      Of course, with something like VMWare, you can get around even the degree to which Java is broken -- all you have to do is create a separate virtual machine in which to run a separate copy of the OS, on which to run each required Java Virtual Machine. In a decent world such a suggestion could only ever be a joke, and in poor taste at that. In the Java world, it's neither a joke nor even unusual.

      --
      The universe is a figment of its own imagination.
    174. Re:I don't really get the Java hate around here by Jesus_666 · · Score: 1

      PHP has a distinct advantage over its direct competitory: A great documentation. You can enter http://php.net/levenshtein into your browser and you get a nice page with that function's signature, behavior, examples and (sometimes extremely helpful) user comments. Basic concepts of the language and the like also get close attention in the documentation. Apart from a few "this needs to be written" pages for the most exotic/new functions, PHP's documentation is extremely useful even in the offline version without user comments.

      When I tried to get friendly with Python (which failed for various reasons) I was appalled at the state of the Python documentation. There usually are three different documentation bodies that might contain what you want to know, the bodies are not always organized in an intuitive way, finding what you need isn't trivial and once you have found it you usually just have a description of what it does with little in the way of code examples etc.

      The Python documentation is certainly useful, but it can't approach that of PHP, which allows you to instantly work with whatever you're looking for (and if you don't know what you're looking for, the search function and extensive linking between similar functions allows you to quickly identify it).


      I think a good bit of PHP's popularity comes from the fact that the documentation makes it easy to understand and properly use functions/classes in short time, even if you never used them before. I know that it's ugly, but PHP is my shell scripting language of choice because I can quickly implement just about everything I need, whether I have done that task in PHP before or not. It's essentially what VB is for GUI development: Ugly but very design-time efficient.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    175. Re:I don't really get the Java hate around here by hardburn · · Score: 1

      Instead they went for a simplified VM and a complex programming structure. Personally I think a lot of this had to do with the fact that in the early days Java was slow and making the JVM any more complicated was probably counter productive. I think this was probably the wrong way to go as no one in their right minds liked all that IOStream and Buffer nonsense even if some of us understood why they did it.

      I guess that's nicer than my explanation (that Java's original class design was laid out by a grad student with too much OO theory jammed into his head and not enough real world experience).

      --
      Not a typewriter
    176. Re:I don't really get the Java hate around here by Max+Littlemore · · Score: 1

      ... Which suggests that you haven't coded for very long. It is not that Java is bad per se, it just that the competition beats it. Try Python, PHP, Ruby, Erlang, Bash, Lisp or any other really-high level language. You'll be pleasantly surprised and maybe you will also see why people dislike Java.

      This suggests you don't know what Java is - especially including bash in your list of comparisons, WTF is with that bullshit?

      Google is your friend - but I'll just start off by letting you in on a little secret to get you started. Java and Javascript are different languages.

      I have used 4/6 of the languages you listed and I still prefer Java for jobs where Java is more appropriate than say bash. Bash vs. java is like frying pan vs. screwdriver. One is good for fixing eggs, the other good for fixing a car.

      Seriously, that shit is like people who still bang on about how Linux is not ready for the mainstream desktop because it only has a CLI. Go and update your knowledge and then comment.

      --
      I don't therefore I'm not.
    177. Re:I don't really get the Java hate around here by julesh · · Score: 1

      Having a minimum JRE version is fine, but did the Java developers remove features from the language and not leave and backwards-compatibility hooks in it? That's the only reason I can see why a Java software package would require a version LOWER than "current."

      If you write a new version of a programming language you created, and old programs do not work AT ALL, then you have done something wrong. Adding features, improving efficiency, etc is fine (great). Removing functionality does not make sense.


      What happened with Java 1.5 was a little peculiar. Normally, stuff is not removed from Java but is instead deprecated (so that a compiler warning is issued). But with 1.5, they introduced generics, and there were a lot of non-typesafe methods that they decided to remove (e.g. Byte.compareTo(Object), which existed only so that Byte could implement the Comparable interface was removed, and Byte now implements Comparable instead with the method Byte.compareTo(Byte)). They effectively saw this as fixing flaws that previously existed in the language, not removing features.

    178. Re:I don't really get the Java hate around here by julesh · · Score: 1

      I wrote: (e.g. Byte.compareTo(Object), which existed only so that Byte could implement the Comparable interface was removed, and Byte now implements Comparable instead with the method Byte.compareTo(Byte))

      Err... for the second "Comparable" in that sentence, read "Comparable<Byte>".

      Should've used preview.

    179. Re:I don't really get the Java hate around here by Jesus_666 · · Score: 1

      1. Deprecate
      2. Have the compiler/interpreter issue a warning (can be disabled in config but is enabled by default)
      3. Have the compiler/interpreter issue an error (like above)
      4. Completely remove from language spec

      That way you can gradually accustom people to the fact that the feature is going to disappear. Steps 1 and 2 should usually be executed at once.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    180. Re:I don't really get the Java hate around here by m50d · · Score: 1
      All the people who point to C++ as an alternative are thinking thick-client applications. If that's what you build, great. As I said, use the best tool for the job. I wouldn't use Java for that either. But if you're building web applications, C++ is not the tool.

      I'm still unconvinced. The advantages C++ has are all still there in webapp space - it still runs faster when it's on a server, you still get all the power of the STL, there is perhaps less of a disparity in available libraries but I'd be amazed if C++ wasn't still better in or this front.

      /has worked on Java webapps and is writing a Python replacement for one.

      --
      I am trolling
    181. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Erm, you must be running windows and don't have a sysadmin with a clue. You can run as many versions of JDK in parallel as you want and they will not interfere with each other. Thanks: I am the sysadmin, and while I'm not the best ever, I am pretty good at what I do. And yes, we run Windows:[...] I'm a clueless moron
      'nuff said.
    182. Re:I don't really get the Java hate around here by Rary · · Score: 1

      The slight performance boost you get with C++ over Java (assuming that's even still valid) is irrelevant in web application development, where you're generally using really high-end hardware, and your primary performance bottlenecks are the network and the database, not the code. Plus, Java has so many tools and frameworks designed to ease web application development, maintenance, and monitoring.

      Add to all that the existence of handy starter applications like AppFuse, which allow me to get a fully functional, robust web application up and running in literally minutes, and there's simply no contest.

      Again, it's all about using the right tool for the job, and there's a good reason that a majority of the web application development jobs out there are hiring Java developers.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    183. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Having spent five years coding PHP websites, batch processing scripts, and libraries I agree completely with all the bad things you point out.

      But there are two reasons PHP is marvellous:

      1) The 'explode' function. Any language that lets me type explode in the code has to be a winner.

      2) The manual. From http://www.bash.org/?34312

      <madsen> is there an online Perl-manual that resemples the php-manual. (God! That manual can bring a grown man to his knees.)
      * madsen panics.
      <madsen> I'm in love with a manual...!

    184. Re:I don't really get the Java hate around here by Roane · · Score: 1

      One of the best ways to cut down on NullPointerExceptions is to declare everything final unless it absolutely doesn't need to be so. Otherwise, you may want to look at the FindBugs tool (free) which does a bit more checking than Eclipse (though not by much).

    185. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      Oh I do, but Linux libraries were comparably worse as well. Everyone has come a long way since then.

    186. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      I have no idea. Maybe people who "know people on the inside" get them. Or perhaps their existence is spread by the language creators, but not on "official" documentation.

    187. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      Hey troll, at least I have a job. Your amazing reading comprehension skills suggest your career opportunities are limited to administering your cock to perverted old men on the street corner. Enjoy your AIDS.

    188. Re:I don't really get the Java hate around here by MadMidnightBomber · · Score: 1

      Yeah, and maybe you could tell Tony Hoare how to write a sort routine while you're at it, give Andy Tanenbaum an update on Operating System theory, or lecture RMS on how to write a good editor.

      --
      "It doesn't cost enough, and it makes too much sense."
    189. Re:I don't really get the Java hate around here by vikstar · · Score: 1

      It's silly to say "Language A is better than Language B". Of course it is silly to say that. B is definatelly better than A, and then C is much better than B. Too bad they stuffed it up with C++, but meh, C is still in good use.

      --
      The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
    190. Re:I don't really get the Java hate around here by TheSunborn · · Score: 1

      But the solution to that is simple. Just take the jre which is included with the java sdk, and put it in the application directory. Then you can instruct the application to always use that jre. Thus no installation of the jre is required at all, and the application will always pick the included jre.

      That was what I did when we developed java desktop applications. It had the effect that we knew we would not mess with any java installed by the user, because we did not install java, and it meant that we know exactly which jre version the application were using.

    191. Re:I don't really get the Java hate around here by hesiod · · Score: 1

      Good idea, but I don't believe you can install Java into a web applet. If you can, let me know and I will start using Java immediately, because that would be freaking sweet (although slow to download).

    192. Re:I don't really get the Java hate around here by Em+Ellel · · Score: 1


      Of course you can always static-link to your libs, but how is that different from just shipping the JDK along?


      It's drastically different, and if you'd read the previous posts in the thread, this would be obvious. With statically linked libraries, the user can have one application that requires one specific version of the library running alongside another application that requires a different specific version of a library, and never even know there was potential for a conflict.

      This is exactly why it is EXACTLY the same. With Java you can have multiple JVMs running alongside each other with no problems. Some of the apps I ship include their own JVM's. Not because they are really picky but because when you charge millions of $$'s per app you don't want to rely on clueless client's sysadmins to install your pre-req's. Plus it makes installing a dupe environment in QA much easier. Anyway, I offer multiple versions of JVM's that can be installed along side of each other without conflicting with each other, let alone anything on the system level. We install as an unprivileged user in a protected dir, so no other app can even SEE our JDK's (unless it is running as root, and no one with a clue runs apps as root) let alone be affected by it.


      Shipping the JDK with a Java application isn't like that at all. Yes, if the prescribed version of the JDK is installed with my application, it ensures that my application runs (assuming I've done my job even halfway reasonably, of course). Installing that JDK, however, may break some of their other Java applications -- and the only way to fix them is to re-install some other version of the JDK, and in doing so, breaking mine.

      Thats just FUD. It is simply not true. You can run multiple versions of JVM alongside each other.


      There is also a substantial difference in practicality: static linking adds some to the size of the program, but not anywhere close to the same as the size of the JDK.

      Sure, JDK is larger - it offers a heck of a lot more than average lib, but disk space is not an issue in modern world. Logically it is exactly the same - you add required libraries and code to your code and ship them together. Not that you really NEED to do it and its rarely done in either java or any other language, but capability is there in java as much as it is in C or any other language.


        Installation isn't affected either -- static linking doesn't mean that the installation has to be carried out as root or anything like that -- whereas, the JDK normally should carry precisely such requirements, due (if nothing else) to exactly the problems outlined above.

      FUD FUD FUD. You don't need to be root to install JDK. Just copy the files and run. JDK is 100% self contained in a single directory structure.


      Of course, with something like VMWare, you can get around even the degree to which Java is broken -- all you have to do is create a separate virtual machine in which to run a separate copy of the OS, on which to run each required Java Virtual Machine. In a decent world such a suggestion could only ever be a joke, and in poor taste at that. In the Java world, it's neither a joke nor even unusual.

      More FUD. For one, VMWare would be redundant (and retarded) as JVM stands for "JAVA VIRTUAL MACHINE" It is already a VM and there is no reason you need multiple OS's - unlike most compiled languages, Java code is not OS dependent.

      Now, there ARE good reasons to run apps in VMWare on large scale apps, but that has nothing to do with selection of language app is written in.

      The bottom line is that your entire post hinges on a simple lie that JVM is somehow tied to the system and that you can only have one installed. That is just not true.

      -Em
      --
      RelevantElephants: A Somatic WebComic...
    193. Re:I don't really get the Java hate around here by Nicolay77 · · Score: 1

      PHP is popular for the same reason MySQL is popular:

      All of the cheap shared hosting services has it preinstalled. In fact, with some shared hostings, it is/was the only option.

      Get all shared hostings to offer Phyton/Postgresql (by offering an easy to setup shared hosting distro or something), and see PHP (and MySQL) popularity fade away.

      --
      We are Turing O-Machines. The Oracle is out there.
    194. Re:I don't really get the Java hate around here by m50d · · Score: 1
      The slight performance boost you get with C++ over Java (assuming that's even still valid) is irrelevant in web application development, where you're generally using really high-end hardware, and your primary performance bottlenecks are the network and the database, not the code.

      Fine - but in that case, why not use one of the modern dynamic languages (perl/python/ruby) and enjoy the ease of coding, power and reduction in bugs?

      Plus, Java has so many tools and frameworks designed to ease web application development, maintenance, and monitoring.

      Add to all that the existence of handy starter applications like AppFuse, which allow me to get a fully functional, robust web application up and running in literally minutes,

      All that applies to many languages.

      Again, it's all about using the right tool for the job, and there's a good reason that a majority of the web application development jobs out there are hiring Java developers.

      I've seen nothing to convince me the reason isn't primarily Sun's huge marketing.

      --
      I am trolling
    195. Re:I don't really get the Java hate around here by ChrisMaple · · Score: 1

      It gets better yet. "New" (1.5+) Firefox requires libraries that break Gnome in Red Hat 8.0. I had to put the libraries in a path that only Firefox could find, and even then one of those libraries had a hard-coded path that required components in the original library path. Fun and games.

      --
      Contribute to civilization: ari.aynrand.org/donate
    196. Re:I don't really get the Java hate around here by Rary · · Score: 1

      I've seen nothing to convince me the reason isn't primarily Sun's huge marketing.

      Sun tried to market Java is the be all/end all of software development. For the most part, the industry said, "yeah, right". As a result, Java acquired a sizable (and undeserved) reputation of being a clunky, slow, over-hyped fad language that failed to live up to expectations.

      Meanwhile, some developers ignored the hype, as well as the backlash, and realized that it's actually pretty good for some uses. Over time, it got better, and with it, so did the tools and frameworks. Now, many consider it to be the best option for web application development.

      Others, like yourself, disagree.

      If you've seen nothing to convince you that Java's success isn't primarily a result of Sun's marketing, then it's doubtful I'll be able to convince you either.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    197. Re:I don't really get the Java hate around here by Abcd1234 · · Score: 1

      And why I would never *ever* like to read a few thousand lines of your code.

      Why? That statement is beautifully concise and directly expresses exactly what the result should be. I'd pad it with a bit more whitespace to make the lexer's (ie, the human brain's) job a little easier, and switch to more reasonable variable names, though:

      [ int(part.strip()) for part in str.strip().split(',') ]

      How is that hard to read? Hell, I don't even know Python and I can read that. Take the string, remove newlines and split it on commas. Then, for each element, convert it to an int. That's so expressive it's bordering on declarative programming. I'd much prefer to read that then to walk through the, what, 10 or more lines of equivalent Java.

      Mayhap you just need glasses or something?

    198. Re:I don't really get the Java hate around here by jnana · · Score: 1

      Indeed, and it doesn't stop there: http://en.wikipedia.org/wiki/C_(programming_language)#Future_standards_directions

      C is continuing to improve.

    199. Re:I don't really get the Java hate around here by jnana · · Score: 1

      Where is the suddenoutbreakofcommonsense tag when you need it?

      The parent is absolutely correct, and the grandparent's statements about Java are of the "stuff I heard on the internets"-variety.

      The one thing you didn't mention is the "needing to be root" to install Java. This is false, too. You can install it as a plain user wherever you want.

      On my platform (Linux) the JDK is installed in a single directory under /opt (it could be $HOME/opt or whatever) and is completely self-contained. I could move the directory anywhere on the filesystem, have as many different versions installed as I want, and everything would work fine if I updated the JAVA_HOME variable (which would generally be set in the script that launches the application).

    200. Re:I don't really get the Java hate around here by ChaosDiscord · · Score: 1

      Java does thread-handling quite decently, it is just too difficult to grasp for most programmers.

      That's like saying C and C++ do memory-handling quite decently, it is just too difficult to grasp for most programmers. It's arguably true, but it's not much of a defense of the language. A language really suited to multi-processor work is going to as much a step forward from Java in that area as Java was from C++ in memory management.

    201. Re:I don't really get the Java hate around here by jcast · · Score: 1

      lambda will be in a library? How does that work?

      --
      There are reasons why democracy does not work nearly as well as capitalism.
      -- David D. Friedman
    202. Re:I don't really get the Java hate around here by MrMr · · Score: 1

      the flexibility is just... amazing, in python.

      You mean you need python because you're unfamiliar with the standard unix cli?

      I would just type:
      sed -e :a -e '$\!N; s/\n/ /; ta' file.csv | sed 's/,/ /g' | awk 'BEGIN {i=1} {while (i<NF) { print int($i+0.5); i++;}}'

      ~

    203. Re:I don't really get the Java hate around here by FishWithAHammer · · Score: 1

      Right. See PHP6 for details (holy shit, PHP doing something right?!).

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    204. Re:I don't really get the Java hate around here by theolein · · Score: 1

      so you think that modern distributions don't have unstable, untested sections where you can download beta software? If you're a mac user, get a trial of vmware and install a modern ubuntu.

    205. Re:I don't really get the Java hate around here by ZerdZerd · · Score: 1

      It's silly to say "Language A is better than Language B". What makes more sense is "Language A is better than Language B at task X."

      Language A is better than Language B at task X for person P working at company C with problem E, D and F, and P has most experience with A.
      --
      I'm not insane! My mother had me tested.
    206. Re:I don't really get the Java hate around here by hansamurai · · Score: 1

      It should be noted I made a mistake on this, it's hasNextLine(), not hasNext() which is word by word.

    207. Re:I don't really get the Java hate around here by Anonymous Coward · · Score: 0

      Java's well organized, has a great standard library and is (mostly) consistent with itself...

      Note that those slamming Java tend to be following the M$ party line and slamming other FOSS tools. Filter the shills out and /. crowd is mostly positive, the rest neutral.
  5. grmbl. by thhamm · · Score: 4, Funny

    What Makes a Programming Language Successful?

    those who don't know how to use it.

    1. Re:grmbl. by pdq332 · · Score: 3, Interesting

      I'm not sure if that was meant as a joke, but I happen to agree with you for the following reason: a programming language is successful when it opens up the field to low to mid grade programmers. These may be people who are professionals in other areas and are just dabbling with a specific task, incurious people who are just trying to make a living, or newbies. If the programming language has constructs and tools available that support these people, then the cost of producing programs goes down and the language becomes more widely adopted by industry. On the other hand, while quality, fully functional and maintainable programs will still be written by experts, experts can bend any Turing complete language with appropriate I/O libraries to their will. (As well, experts can turn any simple system into an overdefined complicated mess.) The one thing which seems to make no difference to the success of a programming language (but I really really really wish it did) is the ease of deployment, versioning, packaging and runtime configuration. It's time consuming on the order of requirements gathering to successfully plan and execute deployment for anything other than a statically linked executable.

    2. Re:grmbl. by morgan_greywolf · · Score: 1

      I'm not sure if that was meant as a joke, but I happen to agree with you for the following reason: a programming language is successful when it opens up the field to low to mid grade programmers.
      So how do you explain the popularity of C?
    3. Re:grmbl. by theJavaMan · · Score: 1

      Does that mean Visual Basic is the best language ever made??

    4. Re:grmbl. by Anonymous Coward · · Score: 0

      You mean marketing then :)

    5. Re:grmbl. by Anonymous Coward · · Score: 0

      So that makes Forth the most successful of all languages!

    6. Re:grmbl. by tartley · · Score: 1

      I think that pdq332 is asserting that VB would be very popular. In which he would be correct. He makes no judgement about how 'good' it is.

  6. facial hair by fpgaprogrammer · · Score: 1, Redundant

    the answer is facial hair

    1. Re:facial hair by Eli+Gottlieb · · Score: 1

      But of course! I'm trying to design an advanced systems-programming language that will let me kernel hack with an advanced type system and functional features, so of course I'm growing out my facial hair. I'm going for a sort of "Kobi Shimoni" look -- a beard with the elegance of a great programming language.

  7. Back to Basic by Z00L00K · · Score: 3, Interesting
    Python et.al. are all languages that we who were there in the 80's remember with a combined horror/amusement when we had to write programs in Basic.

    The lack of type-safe variables, the possibility to write unreadable code, hunt for bugs that are caused because two files are incompatible. Interpreting languages has been tried before, and they are never working for large projects that shall live for a long time and has to be maintained by a lot of different programmers.

    Java may be a bastard of Ada, but at least it has some type checks built in. However, it's a bit weak on the side where the user can't control memory management in a good way. Another weakness is that methods can't be declared to allow/disallow the return of 'null' values to be detected at compile-time.

    --
    If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    1. Re:Back to Basic by SatanicPuppy · · Score: 4, Interesting

      I think you've got Python confused with Perl. Python was first released in 1991, and one of its core tenets is a formatting structure that makes it a lot more difficult to write illegible code. So I'm just going to assume you were talking about Perl, and I'm going to assume that you're not as ill-informed as it appears.

      Perl is what it is: A quick and dirty language for generating practical programs. It's ugly, it's hard to maintain, and it makes a lot of peoples lives a lot easier by making operations that are extremely complicated in other languages quite trivial to code. Comparing it to C is not an apples to apples comparison. Comparing it to BASIC is like comparing a Pineapple to a Raisin.

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    2. Re:Back to Basic by Anonymous Coward · · Score: 0

      Comparing Python to BASIC is like comparing a Pineapple to a Raisin. Fuck pineapple.
    3. Re:Back to Basic by Z00L00K · · Score: 1
      I have seen Python, and it's still a flashback to original Basic code. You can easily read the statements, but the type safety is really a pain since that can cause headaches for ages to come when doing maintenance.

      OK, you won't need line numbers, but that's about it... Line numbers were abolished by Basic already in the late 80's, and the similarities are too many...

      Essentially this means that Python isn't really feasible to write any larger system and expect it to hold water over several years, or even decades.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    4. Re:Back to Basic by Anonymous Coward · · Score: 0

      Python is type safe.

      Do not mistake static typing with type safety.

      Apart from this error, the rest of the argument against dynamic languages is pretty weak at best...

      I can write unreadable code in C++, and file compatibility has nothing to do programming languages.

      You're also criticizing Java because it doesn't let user control memory... in other words you're criticizing Java because it is type safe...

    5. Re:Back to Basic by ardor · · Score: 1

      Then you didn't understand Python.

      Just look at pythonic code, and compare it with Basic. These two don't share anything.

      --
      This sig does not contain any SCO code.
    6. Re:Back to Basic by D+Ninja · · Score: 5, Funny

      the possibility to write unreadable code Hate to break it to you, but that's a possibility in any language.
    7. Re:Back to Basic by Anonymous Coward · · Score: 0

      I am fairly certain python is strongly typed.

      It's dynamically typed though..?

    8. Re:Back to Basic by visible.frylock · · Score: 1

      The lack of type-safe variables
      Coming from someone who was playing with legos in the 80s, I couldn't agree more. I wish more people would understand, type checking isn't your enemy. It's your friend. Sure it can be overly aggressive and get in the way, but python, php, and perl go way too far in the other direction IMO.
      --
      Billy Brown rides on. Yolanda Green bypasses Gary White.
    9. Re:Back to Basic by SatanicPuppy · · Score: 4, Interesting

      It is strongly typed, however it doesn't use type declarations, so some people make the mistake of assuming because it doesn't ask, it doesn't care.

      Python assumes you know what the hell you're doing, so it won't throw errors if you create two variables, put an Int in each one, and do an Int operation on them, all without declaring a type...It'll figure out the type by context.

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. They call it "duck typing."

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    10. Re:Back to Basic by edxwelch · · Score: 1

      > and one of its core tenets is a formatting structure that makes it a lot more difficult to write illegible code

      Yeah, and just as proof of that look at this code:
      http://reserve.fsffrance.org/tinyp2p/www.freedom-to-tinker.com/tinyp2p.html

    11. Re:Back to Basic by chrysalis · · Score: 2, Interesting

      Then you didn't understand that BASIC evolved.

      The GfA-Basic, Omikron Basic and the Fast Basic on Atari were really good, and except OO aspects, those BASICs don't lack anything that Python has.

      Not suitable for large projects?

      There were commercial games written in GfA and Omikron. There were complex utilities. There were demos (self-promotion: check out the Bee Forol Demo by Sector One).

      BASIC=spaghetti code is a cliché. When I dig into some PHP and Python code nowadays, there is still plenty of horrible code that no one but the original author can actually understand. Not that BASIC code was always elegant, but it was just the same thing: anyone could write either elegant code or horrible code, regardless of what the language looks like.

      --
      {{.sig}}
    12. Re:Back to Basic by NewbieProgrammerMan · · Score: 1

      Interpreting languages has been tried before, and they are never working for large projects that shall live for a long time and has to be maintained by a lot of different programmers. Honestly, if you like Java, then good for you. You'll do just fine as a developer with it, and you can probably work until you retire without having to know anything about those other "horrid" languages.

      However, your comments come across as uninformed. Anybody can write unreadable code that's hard to understand, maintain, or debug in any language. Companies and organizations, big and small, use interpreted languages in large projects (sometimes for implementing the majority of those projects) and they work just fine.
      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    13. Re:Back to Basic by shutdown+-p+now · · Score: 1

      Java can be reasonably called a bastard child of Simula and C++ (a relationship which is, in fact, incestious, so the result is understandable). Curiously enough, apart from packages, interfaces, and anonymous inner classes (a later addition to the language) every other Java construct is directly mappable to Simula - object model, memory model, closuring inner classes etc... But Ada? Where did you spot it in there?

    14. Re:Back to Basic by shutdown+-p+now · · Score: 1

      What you describe is traditionally called "weak typing". It's better than automatic conversion (when you can use a string-concatenation operator on a boolean and a double, and get a meaningful result - such as in Perl or VB), but static typing means static typing for variables and functions, not values. Of course every value has a type - this is true for any language, though some only have a single type for everything (such as string).

    15. Re:Back to Basic by shutdown+-p+now · · Score: 1

      Hate to break it to you, but that's a possibility in any language.
      I challenge you to write an unreadable code sample in Nil.
    16. Re:Back to Basic by SparafucileMan · · Score: 1

      Don't be an idiot. Python is used in the industry just fine--look at EVE online. The fact that you're fixated on type safety is your limitation, not that of the language. Types are an INVENTION, not an inherent item of a programming language.

    17. Re:Back to Basic by D+Ninja · · Score: 5, Funny

      John put the CD in the cabinet and then sold it.

      Faulty pronoun reference. Which one am I talking about? You'll never know. (And if you pick one, I'll just say it was the other one.)

    18. Re:Back to Basic by KillerEggRoll · · Score: 2, Interesting

      The lack of type-safe variables,

      What is your concept of type safety? Declaring types for variables sure as hell doesn't guarantee the validity of the memory contents in languages like C/C++ (defeated all the time with casting!). My guess is that your objection is to dynamic typing - a concept separate from strong typing. Duck typing supports a different philosophy for development - you should program to an interface rather than to a type. It promotes the same benefit of algorithm reuse as you would get from C++ templates and Java generics.

      the possibility to write unreadable code

      The next argument I could conceive is whether it is more beneficial to perform static or runtime analysis. Pushing decisions to runtime allows reflection, language constructs treated as first-class objects, and other features that are WAAAAAYYY more meta than anything you get out of the box from C++ and Java. That means you have concise and elegant syntax for expressing higher order concepts and abstractions. This in turn means that you will generally have highly readable code that has less boilerplate and more problem-solving code.

      the possibility to write unreadable code, hunt for bugs that are caused because two files are incompatible. Interpreting languages has been tried before, and they are never working for large projects that shall live for a long time and has to be maintained by a lot of different programmers.

      I would be interested in case studies on the success, or lack thereof, of dynamic languages in large projects. I certainly have a success story of my own in what I would regard a medium-sized project. I think other factors (performance, programmer skill, etc.) limit the uptake of dynamic languages in areas traditionally dominated by static languages.

    19. Re:Back to Basic by Anonymous Coward · · Score: 0

      "the possibility to write unreadable code"

      Don't remember where I saw these wise words: "There is not, and will never be, a programming language in which it is the slightest bit difficult to write bad code."

    20. Re:Back to Basic by Alpha830RulZ · · Score: 1

      Tell that to the folks over at Google. I hear they run a few lines of Python.

      --
      I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
    21. Re:Back to Basic by Anonymous Coward · · Score: 2, Informative

      No, he described strong typing. There is no implicit casting from one type to another going on in Python. Weak typing involves implicit casting of types under certain operators.

      Static and dynamic typing are orthogonal to strong and weak typing. Statically typed languages have their type integrity constraints checked at compile-time. Dynamically typed languages do at least some type checking at run-time, usually because resolving a given object's type is undecidable (until it is decided by actually running the code).

      Python has a Strong Dynamic typing system. So does Ruby. Except, this is just an implementation detail, since these languages support the actors model of object orientation, which means that Actors/Duck Typing is the appropriate model for the type system.

    22. Re:Back to Basic by Anonymous Coward · · Score: 0

      "Java may be a bastard of Ada: - by Z00L00K (682162) on Thursday May 29, @12:19PM (#23587649) You SURE about that? It looks more like C++ to me, than anything... a 'bastard of ADA' might be more like Object Pascal/Delphi, since iirc, ADA is a pascal variant-descendant... :)

      * Correct me if I am "off" here, but I was always under the impression that JAVA is a better more easily done multiplatform runtime intrepreted C++ variant!

      APK

    23. Re:Back to Basic by ericmarshall · · Score: 1

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. Actually, Python does allow you to multiply an int and a string, but like you said, it assumes you know what you're doing and allows it for convenience.

      >>> 5 * "foobar"
      'foobarfoobarfoobarfoobarfoobar'
    24. Re:Back to Basic by morgan_greywolf · · Score: 2, Informative
      "Strong typing" and "weak typing" mean a lot of different things to a lot of different people. Those who feel Python programs are difficult to maintain because they are not statically typed like Java or C don't get Python. Consider:

      >>> def func(a,b,c):
      ... return (a+b)*c
      ...
      >>> func(1,2,3)
      (the 'return' line is idented even if you can't tell :)) versus:

      >>> func("apples"," and oranges ", 3)
      'apples and oranges apples and oranges apples and oranges '
      But, also this:

      >>> func ("apples","oranges","grapes")
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in func
      TypeError: can't multiply sequence by non-int of type 'str'
      What's important to understand is that there IS type checking, but you have to understand that ad-hoc polymorphism creates power. With power may come confusion, but that is the fault of the programmer, not the language.
    25. Re:Back to Basic by tzot · · Score: 1

      [Python]
      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. In general, you are correct. It's that your specific example is unlucky:

      >>> print 6*"-="
      -=-=-=-=-=-=


      --
      I speak England very best
    26. Re:Back to Basic by tzot · · Score: 1

      > and one of its core tenets is a formatting structure that makes it a lot more difficult to write illegible code

      Yeah, and just as proof of that look at this code:
      http://reserve.fsffrance.org/tinyp2p/www.freedom-to-tinker.com/tinyp2p.html He said "a lot more difficult", not "impossible".
      --
      I speak England very best
    27. Re:Back to Basic by Anonymous Coward · · Score: 0
      I agree to most of what you said, but you chose a bad example

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. They call it "duck typing." >>> "str"*3
      'strstrstr'
      >>> 3*"str"
      'strstrstr'
      >>> "str"*"str2"
      Traceback (most recent call last):
          File "", line 1, in ?
      TypeError: can't multiply sequence by non-int
      >>>

      multiplying int by string results in n times the string (which is quite useful: indent = " "*n). multiplying a string by another string throws an error
    28. Re:Back to Basic by xouumalperxe · · Score: 1

      Here's a short Python session

      Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on
      win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> a = 2
      >>> type(a)
      <type 'int'>
      >>> a = '2'
      >>> type(a)
      <type 'str'>
      >>> a + 2
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      TypeError: cannot concatenate 'str' and 'int' objects
      >>> a * 4
      'abcabcabcabc'
      >>>

      Please note that at all points in time the interpreter knows the type of variable a. Note, further, that trying to sum a string and an int barfs. That's called strong (as opposed to weak) typing. Note, also, that I didn't declare the type of a at any point, and along the program it holds both an int and a string. Also, multiplying a string by an int has sensible semantics, so it yields a result. That's dynamic (as opposed to static) typing at work.

    29. Re:Back to Basic by Anonymous Coward · · Score: 0

      Actually. If you multiply an int and a string you will get a longer string. e.g.
      '.' * 10 == '..........'

    30. Re:Back to Basic by poot_rootbeer · · Score: 1
      Python was first released in 1991, and one of its core tenets is a formatting structure that makes it a lot more difficult to write illegible code.

      Two comments above you as I read this, someone provided the following code snippet as exemplary Python code:

      l = l.strip().split(',')
      l = map(lambda x: int(x.strip(), l)
      Yes, one can write incomprehensible code in *any* language, but apparently Python doesn't make it *too* difficult.
    31. Re:Back to Basic by jgrahn · · Score: 1

      Don't be an idiot. Python is used in the industry just fine--look at EVE online. The fact that you're fixated on type safety is your limitation, not that of the language. Types are an INVENTION, not an inherent item of a programming language.

      Yeah. And still, there are times and places for static typing.

      I am not a novice Python programmer, but when my Python programs grow large enough, I find myself longing for a C++ compiler (with the warning level cranked up to the max of course, with C-style casts forbidden, and no unnecessary inheritance). Unit tests help a bit, but they never seem to be enough for me.

      On the other hand, when my Python programs are fairly small (but non-trivial) Python's type system is great. And most of the things I do are fairly small ...

    32. Re:Back to Basic by BarryJacobsen · · Score: 1

      the possibility to write unreadable code Hate to break it to you, but that's a possibility in any language. Not in BrainFuck!
    33. Re:Back to Basic by slackergod · · Score: 2, Insightful

      My company currently maintains two large python applications (40-50 LOC, not including custom support libraries). One of them is 6 years old, the other 2 years old. On our development team, we have familiarity with Java, C, C++, Perl, and the concensus is that we've had less maintenance work under python then the other languages.

      If you add in the time spent on prototyping and testing, python has saved us way more time and effort.

      Regarding type checking and reliability... You need to read up on the idea of "duck typing", Python's philosophy is that actual types get in the way, it's protocols and interfaces that matter. And after 7 years of python programming, I'd have to agree with that philosophy.

      All of the critical parts of our apps have had unittests written (which catch semantic glitches at a level typechecking never will)... We've actually spent some time _removing_ type checking from the system, and replacing those lines with hasattr(obj, "append") calls, or creating synthethic protocol tests, allowing our implementations of various inputs to be widely varying: Jython implementations, CPython objects, who cares, they all LOOK the same.

      OTHO, maybe you're trolling.
      "Python looks like Basic" indeed.
      Out of all the languages, I would have
      never been reminded of that one.
      Javascript maybe (especially considering what prototype.js has going on)

    34. Re:Back to Basic by Anonymous Coward · · Score: 0

      Actually you can multiple a string by an int (3*"foo" becomes "foofoofoo"). You cannot, however, concatenate a string with an int.

    35. Re:Back to Basic by skrolle2 · · Score: 1

      However, it's a bit weak on the side where the user can't control memory management in a good way. What the? You are not supposed to control the memory management, that's the job of your virtual machine. This has a number of advantages, foremost is that the people writing your virtual machine need to be smart once, and their work can be utilized by everyone who is making a java program simply by running it on their JVM. If it was the programmer's job to do memory management, the programmer has to be smart every single time he or she writes a program.

      There's a reason there are many, many more Java and Visual Basic and PHP programmers than there are C or C++ programmers, memory management is really hard.

      Sometimes you need control over your memory, and in those cases you simply have to use a programming language where you get to and have to do all the memory management yourself. No language is perfect and fit for every job, even though some people delusionally think this is so.
    36. Re:Back to Basic by kellyb9 · · Score: 1

      the possibility to write unreadable code Hate to break it to you, but that's a possibility in any language. Cobol tends to read a bit like a novel.
    37. Re:Back to Basic by Anonymous Coward · · Score: 0

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will.

      >>> 3*'ha'
      'hahaha'
    38. Re:Back to Basic by Anonymous Coward · · Score: 0

      >>> quack='quack!'
      >>> quacktimes=5
      >>> print quack*quacktimes
      quack!quack!quack!quack!quack!

    39. Re:Back to Basic by jeremyp · · Score: 1

      You didn't read the definition of Nil properly. Any Nil program effectively compiles to a NOP

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    40. Re:Back to Basic by shutdown+-p+now · · Score: 1

      What's important to understand is that there IS type checking, but you have to understand that ad-hoc polymorphism creates power. With power may come confusion, but that is the fault of the programmer, not the language.
      Ad-hoc polymorphism makes its way into the static-typing land. Consider the same function in C++0x:

      template <class A, class B, class C>
      requires AB = Multipliable<A, B> && Addable<AB::result_type, C>
      auto func(A a, B b, C c) -> decltype((a + b) * c)
      {
      return (a + b) * c;
      }
      This is quite a bit more wordy, which is partly due to C++ messy syntax; but most of it comes from the explicit declaration of what operations are allowed on the types. The advantage of this approach - which is more obvious for larger function - is that the contract is declared explicitly in the code, and that it is checked at compile-type. Meanwhile, your Python function will happily accept any kinds of arguments, and throw an exception at run-time if something goes wrong (if it even gets called... I've seen stuff like that miss a unit test and manifest itself only under some rare conditions at run-time, the same bane as C++/C#/Java's null pointer dereference).

      To be honest, I don't care much for static typing as such (not for performance reasons, most certainly). I do think that design by contract, and explicit contract specifications in the code, make a lot of sense. Type systems in modern languages are really just one facet of DbC: they also attempt to describe what can and cannot be done with values of that type, and what can be expected as a result of those operations.

    41. Re:Back to Basic by shutdown+-p+now · · Score: 2, Informative

      Please note that at all points in time the interpreter knows the type of variable a.
      No, it knows the type of value that 'a' has; but that can change at run-time. Variables themselves do not have types in Python.

      But yeah, the other poster got it right. It's really static vs dynamic typing rather than strong vs weak. Sorry for the confusion.

    42. Re:Back to Basic by ADRA · · Score: 1

      True about the null case, but I imagine some pretty ingenuitous developer could write an annotation to verify this for compilation-time checking if nulls are ever possibly be returned and throw an error. Of course that would mean pre-pending the annotation to everywhere that the method is used:

      @NonNullResult public Object getMyNonNullObject()...

      --
      Bye!
    43. Re:Back to Basic by bnenning · · Score: 1

      Static and dynamic typing are orthogonal to strong and weak typing. Statically typed languages have their type integrity constraints checked at compile-time. Dynamically typed languages do at least some type checking at run-time, usually because resolving a given object's type is undecidable (until it is decided by actually running the code).

      Quoting at +2. Examples of each combination:
      Static/strong: Java
      Static/weak: C
      Dynamic/strong: Python
      Dynamic/weak: Perl

      --
      How to solve most of our problems: 1.Lots of nuclear plants. 2.Cure aging.
    44. Re:Back to Basic by ADRA · · Score: 1

      Responsing to my own post, I discovered there is already quite a bit of discussion on this topic. The post I found first: http://chaoticjava.com/posts/why-not-notnull/ has quite a few links to related initiatives ment to solve the @NonNull value problem

      --
      Bye!
    45. Re:Back to Basic by Anonymous Coward · · Score: 0

      I basically agree with your point. But you actually can multiply an int with a string in Python:

      3 * "test" -> "testtesttest"

      While this can be a good feature sometimes, it also highlights a problem with languages like Python: More often than not things will be possible in the language and errors will not lead to an error immediately, but much too late. That's the whole point of static type checking at compile time.

    46. Re:Back to Basic by Anonymous Coward · · Score: 0

      the possibility to write unreadable code Hate to break it to you, but that's a possibility in any language. Interesting. I dare anyone to write unreadable code in Ada!
    47. Re:Back to Basic by rg3 · · Score: 1

      You are right in what you said, except for one thing: multiplying a string by an integer in Python is a legal operation. The result is the string repeated X times, or the empty string when the integer is less or equal to zero.

    48. Re:Back to Basic by Anonymous Coward · · Score: 0

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. ac@foxtrot:~$ irb
      irb(main):001:0> "like this? " * 3
      => "like this? like this? like this? "
      ab(main):002:0>
    49. Re:Back to Basic by Anonymous Coward · · Score: 0

      In Python, multiplying an integer times a string repeats the string.

    50. Re:Back to Basic by Anonymous Coward · · Score: 0

      Bad example:

      Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> "abc"*3
      'abcabcabc'
      >>> 3*"abc"
      'abcabcabc'

    51. Re:Back to Basic by Anonymous Coward · · Score: 0

      Just to be pedantic (but obfuscating, as well!), you can multiply a string by a number:

      $ ./python
      Python 2.6a3+ (trunk:63784, May 29 2008, 08:02:25)
      [GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>> i = 3
      >>> s = 'hi'
      >>> i * s
      'hihihi'
      >>>

      But you can't add them:

      >>> i + s
      Traceback (most recent call last):
          File "", line 1, in
      TypeError: unsupported operand type(s) for +: 'int' and 'str'
      >>>

    52. Re:Back to Basic by m50d · · Score: 1

      It's damn hard in python. The worst I've seen is 300 character lines of nested lambdas, but even those make more than enough sense if you have a little lisp experience and indent them the way you would a lisp program.

      --
      I am trolling
    53. Re:Back to Basic by Anonymous Coward · · Score: 0

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. They call it "duck typing." actually, it will repeat the string n-times: 3 * "duck" = "duckduckduck".
      This could save you some "duck" typing.

      -catchmeifyoutry
    54. Re:Back to Basic by Anonymous Coward · · Score: 0

      >>> i=5
      >>> s='fail'
      >>> i*s

      'failfailfailfailfail' :)

    55. Re:Back to Basic by WilliamSChips · · Score: 1

      The reason we have these problems is because of the word "strong" typing. There is static/dynamic typing and there is "safe"/"unsafe" typing. Those are two independent features.

      --
      Please, for the good of Humanity, vote Obama.
    56. Re:Back to Basic by WilliamSChips · · Score: 1

      It's a lot harder in Python. You have to work against the language. In Perl, you work with the language, you get unreadable code.

      --
      Please, for the good of Humanity, vote Obama.
    57. Re:Back to Basic by chromatic · · Score: 1

      In Perl, you work with the language, you get unreadable code.

      I'll say. The magic glitter Python sugar unicorns never refactor my Perl programs for me. Jerks.

    58. Re:Back to Basic by Anonymous Coward · · Score: 0

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. Yes, but if you multiply a String by an Int, you get completely different behavior entirely. Go figure.
    59. Re:Back to Basic by Anonymous Coward · · Score: 0

      Bad example.

      >>> 4 * 'abc'
      'abcabcabcabc'

    60. Re:Back to Basic by Anonymous Coward · · Score: 0

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. Almost...

      Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
      32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> 2 * "hello, world."
      'hello, world.hello, world.'
      >>> "hello, world." / 2
      Traceback (most recent call last):
          File "", line 1, in
      TypeError: unsupported operand type(s) for /: 'str' and 'int'
      >>>
    61. Re:Back to Basic by Anonymous Coward · · Score: 0

      In [1]: 5*'hello'
      Out[1]: 'hellohellohellohellohello'

    62. Re:Back to Basic by Billly+Gates · · Score: 1

      Perl is a just an awk/sed on steriod for system administrators.

      I know that is changing as people do more with it such as run slashcode but people should use what language is best for the job.

      Perl is great for scripting jobs on unix servers. After I found out there were 3 different ways to write hello world I was shocked and my view changed. I didn't really touch it anymore.

    63. Re:Back to Basic by jfmiller · · Score: 1

      Sorry, but "duck typing" and inferred types are completely different things. See Ruby for duck typing, python is just a stripped down version of Haskell's inferred types.

      --
      Strive to make your client happy, not necessarly give them what they ask for
    64. Re:Back to Basic by Anonymous Coward · · Score: 0

      While you're right in general, your example isn't.
      This is what happens if you do what you said:
      >>> a = 2
      >>> type(a)
      <type 'int'>
      >>> b = 'b'
      >>> type(b)
      <type 'str'>
      >>> a * b
      'bb'

    65. Re:Back to Basic by TuringTest · · Score: 1

      Show me a BASIC with generators, high-order functions and list comprehension, and it won't be BASIC anymore.

      Python, otoh, has them as basic pythonic facilities.

      --
      Singularity: a belief in the "God" idea with the "demiurge" relation inverted.
    66. Re:Back to Basic by TuringTest · · Score: 1

      Yeah. And still, there are times and places for static typing.


      Fortunately, you can do that in Python too, if you really need it.

      (Unfortunately, none of the available methods have been included in the standard).
      --
      Singularity: a belief in the "God" idea with the "demiurge" relation inverted.
    67. Re:Back to Basic by aug24 · · Score: 1

      Another weakness is that methods can't be declared to allow/disallow the return of 'null' values to be detected at compile-time.

      This is my biggest single whinge about Java. It would be an immensely useful keyword: "notnull".

      The second biggest is the facility to 'nullify' an object. I'd like to be able to say to the vm 'you should be able to gc this right now, and if you can't (because someone else has its reference) please throw an exception'. That'd help fix programmed memory leaks in no time.

      Justin.

      --
      You're only jealous cos the little penguins are talking to me.
    68. Re:Back to Basic by morgan_greywolf · · Score: 1

      True, but the difference being that, in practice ad-hoc polymorphism isn't used nearly as much in C++ as it is in Python. In Python, ad-hoc polymorphism is just automatic.

      But, as you say (sometimes even despite the use of design-by-contract) stuff like this gets missed in unit test regardless of language.

      Anyway, you can do a form of design-by-contract in Python as well -- just validate your arguments using things like hasattr() and isinstance() .

    69. Re:Back to Basic by lekikui · · Score: 1

      No, that's not it. That Python code is incomprehensible to you because it's using a higher level of abstraction that the languages you're used to (It's incomprehensible to me because I don't know Python, which is quite a different factor).

      At it's heart, computer programming is all about abstracting out what's happening to the appropriate degree --- that's why very few people write in raw machine code any more. Most programmers are comfortable with the abstractions they're used to, but the python example there is using another level, those being lambda and map.

      Both are well known to schemers, lispers, haskell guys, etc. Lambda creates an anonymous function, while map uses two* arguments, a function and a list, and returns the list constructed by applying the function to each item in the list.

      So
      > (map odd? '(1 2 3 4)) ;to take scheme syntax
      => '(#t #f #t #f)
      The function odd? is applied to each element of the list, and a new list is constructed out of the return values. Interestingly, this is actually fundamentally different to the idea of iterating through the list and doing something to each element. Firstly, the list isn't damaged by it --- if we had mapped that over the list l, we would still have that list unchanged. Secondly, there's no implication about the order things are done in. This makes some stuff trickier --- say you wanted to increment all remaining values every time you found a prime one, but makes others easier --- running it in parallel across a few dozens cores, for example, because the map function doesn't necessarily have to be run on each item in turn.

      --
      "Lisp ... made me aware that software could be close to executable mathematics." - L. Peter Deutsch
    70. Re:Back to Basic by tolgyesi · · Score: 1

      However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. They call it "duck typing." Your point is valid in general, but your particular example is not, because python actually defines multiplication of a string by an integer (as repeated concatenation). But it works just because the operator knows the types of the operands.
    71. Re:Back to Basic by shutdown+-p+now · · Score: 1

      True, but the difference being that, in practice ad-hoc polymorphism isn't used nearly as much in C++ as it is in Python.
      I would disagree with that. Most of the C++ standard library (the entire STL, for example) relies on ad-hoc polymorphism, and so do the modern C++ libraries that follow STL design, such as Boost.

      The irony here is that the implicit duck typing part of C++ templates is the most frequent complaint from people who have use those libraries (myself included) - when some function several stack frames deep from your call did not compile because it couldn't find a method it wanted on an object you've (indirectly) passed to it, it can result it some fairly cryptic error messages. Hence the new optional "explicit ad-hoc" polymorphism coming in form of C++0x auto concepts.

    72. Re:Back to Basic by Abcd1234 · · Score: 1

      No, there's static/dynamic typing, and there's strong/weak typing (at least, those are the standard terms in the industry).

      Static/dynamic describes when the type checking is performed (runtime or compile time).

      Strong/weak typing describes how strict the type system is. Weak typing typically allows automatic, runtime type conversions (Perl), ad-hoc polymorphism (Python, Ruby, Smalltalk), or both. Strong typing does not (Java, C#).

    73. Re:Back to Basic by Abcd1234 · · Score: 1

      Actually, I got that wrong, Python, Ruby, and Smalltalk don't support "ad hoc polymorphism"... somehow, I confused that with dynamic binding, which is a whole other topic (and one that Python, Ruby, and Smalltalk support).

    74. Re:Back to Basic by Anonymous Coward · · Score: 0

      >>> 5*"error"
      'errorerrorerrorerrorerror'

    75. Re:Back to Basic by Anonymous Coward · · Score: 0

      "strong" Type checking at runtime is not enougth. And it's not enougth to argue that it's ok because you will do unit testing.
      You need a language that do compile time type checking also now as static type checking.
      Pick java.

  8. ... Evolution... by Manip · · Score: 1, Troll

    Either evolve or die.

    Java hasn't changed all that much in the last few years and younger languages are pushing programming further.

    Although oddly enough the languages for which I speak are things like C# and not "I wish it would die but it likely won't" languages like Python.

    1. Re:... Evolution... by Mongoose+Disciple · · Score: 1

      To be fair, Java is finally evolving again in response to some of that pressure, e.g., adding generics.

    2. Re:... Evolution... by ardor · · Score: 1

      Extremely weak generics that do not really offer much. After using generic programming in other languages, Java/C# generics look like a sad joke.

      --
      This sig does not contain any SCO code.
    3. Re:... Evolution... by chthon · · Score: 1

      How long will it take before Java evolves into Common Lisp ?

    4. Re:... Evolution... by netsavior · · Score: 2, Interesting

      Although oddly enough the languages for which I speak are things like C#


      Have you seen the new 3.0 libraries?? MS Application blocks look a lot like J2EE when it first came out + the best of Jakarta that we have all been using for almost a decade. Don't get me wrong C# does a lot of "good" stuff... but a lot of its most "innovative" stuff is just finally bringing it up to snuff with the way we have all been using J2EE since the dot com bust.
    5. Re:... Evolution... by Kohath · · Score: 1

      To be fair... You must be new here.
    6. Re:... Evolution... by nuzak · · Score: 2, Interesting

      Java has generics. Unfortunately they're erased, so they're basically nothing but syntax sugar for runtime casts when you want to use generics from another jar. To add further insult, the compiler yells at you whenever you dare to accomplish such feats of reuse, so most of us have to pepper our code with annotations to shut up the stupid warning about erasure.

      Java is now adding "closures", which may or may not actually act as static closures, but may just be syntax sugar for anonymous functions instead. We may see them next year if we're really lucky. Meanwhile C# has LINQ, which is statically typed throughout. C# has a BDFL in Anders Helsburg, Java has a committee that puts Ada's to shame.

      --
      Done with slashdot, done with nerds, getting a life.
    7. Re:... Evolution... by glgraca · · Score: 1

      A lot faster if people were not taught the latest and greatest at college. If people's first language were Lisp, their expectations of computer languages would be a lot higher AND they would be better programmers.

    8. Re:... Evolution... by Mongoose+Disciple · · Score: 1, Troll

      Have you seen the new 3.0 libraries?? MS Application blocks look a lot like J2EE when it first came out + the best of Jakarta that we have all been using for almost a decade. Don't get me wrong C# does a lot of "good" stuff... but a lot of its most "innovative" stuff is just finally bringing it up to snuff with the way we have all been using J2EE since the dot com bust.

      I grant you, the first years of C# were (depending on your perspective) either a blatant rip-off of Java, or the kind of language you get when someone who's used Java for a few years and mostly thinks it's good, but is pissed off about a couple things and decides to fix them creates a new language.

      That being said, most of that application block stuff is 5 or more years old and isn't what anyone remotely current on .NET would hold up as examples of C# innovation.

      As someone who's spent years developing with both Java and C#, at this point, C# is now ahead of Java, and Java is mimicking it to try to catch up. (We're talking core language here -- obviously there are libraries/tools that came out of the Java community that C# is still catching up to.) I hope the practice of stealing the best ideas from the other and competition continues to make both better for it.

    9. Re:... Evolution... by JAlexoi · · Score: 1

      a) Java HAS changed, event at the syntax level
      b) I hope by young you don't mean Ruby(1995) or Python(1991) vs Java(1995)

  9. Easy. by SatanicPuppy · · Score: 4, Insightful

    Power: What can it do?
    Performance: How fast can it do it?
    Ease of Development: How fast can quality code be turned out by regular programmers?

    Most modern languages fail on a couple of these. C is first class in Power and Performance, but it's not Easy. Ruby is okay in Power, and its very Easy, but it's slow. Java is Powerful, but doesn't match C for Performance, and it's not the quickest for development.

    I'm sure many fanboys will disagree with my analysis. They'll say "Regular programmers don't matter (C)" or "It's NOT SLOW (Ruby)" or "Development is too quick! (Java)".

    Really though, that's what it comes down to. The problem is, that there are unfortunate tradeoffs that have to be made. Most languages have a strength, but they all make sacrifices to be strong.

    --
    ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    1. Re:Easy. by jez9999 · · Score: 2, Insightful

      C#:

      Power: Pretty powerful, unless you want to tinker with an OS kernel or something.
      Performance: Very good, even for a garbage collected language.
      Ease of development: Very easy, if you have a decent IDE.

    2. Re:Easy. by jcgf · · Score: 1

      I don't agree that C is hard to use, it's just more time consuming to do things because it doesn't include built in libraries for everything and you have to manage memory yourself (also Microsoft can't create decent C APIs because they're all a bunch of VB flunkies at heart). However once you get used to those caveats you can write anything from an OS kernel to Web apps. I do wish C had complex number and bit variables though (C99 has the former and I guess the boolean type is close to a bit from the programmers perspective. However C99 support is kinda sketchy as far as compilers are concerned ).

    3. Re:Easy. by Anonymous Coward · · Score: 0

      I disagree with your "analysis" and I'm not a fanboy. You use concept like "powerful" and "quality code" without defining them. It seems to me you simply use them as meaningless words, probably because you never really thought about it, and the only thing important to you is to "prove" your opinion.

      So what does "power" mean? Is it power to do and control whatever you want from a hardware point of view, or features that makes complex thing easy to do? Is assembly powerful because you control every registers and the language let you do whatever you want? Or is Ada powerful because you can create multi-threaded program easily and the program will constantly check all your data to make sure there is no error?

      Same thing for "quality code". How do you define it?

    4. Re:Easy. by ggvaidya · · Score: 1

      When you're developing for web applications, wouldn't most languages beyond a point be equally "powerful"? I mean, all you really need to do in terms of "power" is process files, talks to databases and spit out HTML. Yes, Ruby is slow (but as you say, easy), but it's perfectly fine for a low-usage website, along with Perl, Python, C#, Java, and most other languages. So I'm not sure that "Power" is still a major problem for languages.

      Two other factors you missed out IMHO are expressivity and ease of maintenance. I'd argue that Java is a pain to *develop* in compared to Python or Ruby; it is, however, much easier to maintain as it tends to force people to code in certain standard ways (as opposed to Perl, for instance, where there's more than one way, etc), and because the strict typing makes it easier to make different modules written by different programmers (or yourself, several months apart) work together in predictable ways. Perl (I know) and Python (I've been lead to believe) are incredibly expressive, allowing you to write what's going on in your head down onto paper with as little difficulty as possible, whether you need to use recursion, lambdas, closures or some completely bizarro construct (I'm thinking of Perl, now) to make it happen.

      This is my longest post on Slashdot in a while, and might be a sign I need to spend more time off this site. Apologies!

    5. Re:Easy. by willy_me · · Score: 1

      Ease of Development: How fast can quality code be turned out by regular programmers?

      I don't think it is quite that simple. Different projects have different requirements. For example, Perl can very quickly put out simple quality programs but good luck maintaining and/or extending them.

      One really has to consider the project in question. For many projects the most important consideration is whether or not many different programmers can all produce quality code that will fit nicely together into a finished product. Languages like Java appear to be designed to do this. In doing so, sacrifices are made to other aspects of their designs.

      So what I'm basically saying is that I agree with your comment. But the point about Ease of Development really needs to take into consideration the project at hand.

    6. Re:Easy. by Anonymous Coward · · Score: 0

      "C#:"

      Fails on portability (don't even mention Mono) and comes from a vendor who puts your interest last on all things.

    7. Re:Easy. by wordsthatendinq · · Score: 1

      Definitely agree that power/performance are still important, and these factors were lacking in the analysis in TFA. I used to think modern computers were all fast enough that learning C could be left to the minority, until I realized some of my complicated database queries that were taking hours could be done in seconds by adding C routines (thank god for open source). C is fast because it's optimized for hardware, and hardware is optimized for C. There used to be groups optimizing hardware for Java and Lisp, but those never took off because other hardware became faster and made the efforts obsolete. But "other hardware" is still optimized for C, so it will be a long time until C goes into obsolescence.

    8. Re:Easy. by Bat+Country · · Score: 1

      I wouldn't say C is particularly hard to use either.

      The chief problem with C is that it requires you to understand what the computer is doing in order to use it easily. If the tasks you are using the language for make that utterly irrelevant - you don't care how it does it, just so long as it does it - you might see C as being hard or at very least needlessly Byzantine. There are some things I'd rather work in C to do, or work in ASM to do. However, for most applications, PHP will do just fine for me.

      Therefore I'd put forth a final metric for measuring the quality of a language:

      Abstraction: How closely does the style of programming using the language resemble the way the user actually thinks - or needs to think to solve a particular domain of problem?

      I think that the reason that a lot of these "bizarre" languages have such rabid supporters is precisely due to that. The process of developing a piece of software in these languages does fairly accurately model the thought processes which aforementioned rabid supporter uses to approach logical problems. (ugly sentence, I know.)

      If, in the course of solving problems and performing your daily tasks, you find that the language you are using makes it simple, logical, clean, and easy, then you are going to think that that language is the best.

      --
      The land shall stone them with the bread of his son.
    9. Re:Easy. by utnapistim · · Score: 1

      Fails on portability (don't even mention Mono)


      Mono. :)
      --
      Tie two birds together: although they have four wings, they cannot fly. (The blind man)
    10. Re:Easy. by LeafOnTheWind · · Score: 1

      I won't argue that Java doesn't have its development problems - there are many things I hate about java development. However, in performance I'm afraid you're a little outdated: http://www.idiom.com/~zilla/Computer/javaCbenchmark.html

      C is still faster, but not by an order of magnitude, which is what matters. On the other hand, you missed an element of "Powerful" - C is the only viable language if you need direct access to the hardware. That doesn't mean Java doesn't have its place, though.

    11. Re:Easy. by trifish · · Score: 1

      > I do wish C had complex number and bit variables though

      If you can, upgrade to C++ and you can create custom types and operators as you wish.

    12. Re:Easy. by trifish · · Score: 1

      > C is the only viable language if you need direct access to the hardware.

      The only language? What about C++?

    13. Re:Easy. by jrumney · · Score: 1

      I'd have to put Java ahead of C#, purely because of the number of high quality third party libraries (particularly from apache.org) that reduce the workload for writing large complex apps. As far as everything else goes, C# and Java are about equal.

    14. Re:Easy. by LeafOnTheWind · · Score: 1

      C\C++, then if you want to be pedantic. Your system drivers are written in C, so you will be using the C elements of the language anyway.

    15. Re:Easy. by hoppo · · Score: 2, Insightful

      For many, if not most, organizations, portability provides very little value. If I'm running a public website, it is unlikely I will swap out OS and web server platforms at will, and even more unlikely I will run some kind of heterogeneous environment. If I'm marketing commercial software, I'm likely to either pick a supported OS platform for a rich application, or market the software as a service and access the services through thin clients (either web or simple GUI applications). Either way, I'm not looking to find a 100% portable language. First, it doesn't exist, and a 90% portable language doesn't do me much better than one that is not portable at all.

      Think the fourth consideration should instead be the agility of the language. How easy is it to write code orthogonally? Is there a convenient facility for writing unit and integration tests? Can builds and testing be easily automated? .NET is a real standout with this consideration. Java and RoR are also top players. With these platforms, you can easily maintain a codebase of high quality. As software systems grow in complexity, and with software development trending toward more agile methodologies, stability and regression testing become more important.

      In fact, I'm a little surprised I haven't seen this mentioned at all in this discussion.

    16. Re:Easy. by jrumney · · Score: 1

      When you're developing for web applications, wouldn't most languages beyond a point be equally "powerful"?

      I don't know, do Python and Ruby have a standard interface to message queues? Not every web app is database driven.

    17. Re:Easy. by Anonymous Coward · · Score: 0

      Python: Powerful, easy, average speed. But a little C knowledge, from what I understand, can speed it up considerably by delegating certain tasks to the faster language.

    18. Re:Easy. by renoX · · Score: 1

      You make it sound as if language were chosen purely on their qualities, which is not the case: there is also the 'widespread knowledge' factor which is used to select a language for projects which explains that few language are used.

      And the 'cost of the tools' factor: my opinion is that Ada lost to C++ not because C++ is a better language but because Ada's compilers were expensive whereas C++ compilers were cheap/free.

    19. Re:Easy. by trifish · · Score: 1

      The word pedantic suggests that you consider C++ only a minor improvement over C. Whereas it is a major one.

    20. Re:Easy. by Anonymous Coward · · Score: 0

      "How fast can quality code be turned out by regular programmers" - i think that is the most important most crucial factor

    21. Re:Easy. by LeafOnTheWind · · Score: 1

      Ok, explain how C++ access the hardware layer differently than C.

    22. Re:Easy. by LeafOnTheWind · · Score: 1

      I'm sorry I should have been more descriptive on my position:
      http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx

      for writing C++ drivers in kernel mode for windows. As you see, many of those improvements over C are lost in kernel mode. Also, many people that I know consider it bad form to try and use C++ for drivers in the Linux kernel, since it is written in C.

    23. Re:Easy. by trifish · · Score: 1

      You can use objects, custom types, custom operators. I could continue. Compared to C++, C is a simple and obsolete language.

    24. Re:Easy. by LeafOnTheWind · · Score: 1

      Hahahaha, C is obsolete? Ever heard of the Linux kernel. I'd like to see you try to write a C++ embedded driver that would be picked up by linus.

      Oh, and most of those benefits are unavailable or cut down in kernel mode:
      http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx

    25. Re:Easy. by trifish · · Score: 1

      The fact that the Linux and Microsoft kernels are written in C does not change these facts:

      - C++ has all capabilities and features as C

      - C is an obsolete 1960's-ish language without objects, custom types, custom operators and other modern stuff.

    26. Re:Easy. by LeafOnTheWind · · Score: 1

      It does when you can't use g++ in the kernel, but gcc works just fine...

      P.S. "C++ has all capabilities and features as C" - that's why I said C/C++

    27. Re:Easy. by trifish · · Score: 1

      > It does when you can't use g++ in the kernel, but gcc works just fine...

      This does not make sense.

      > P.S. "C++ has all capabilities and features as C" - that's why I said C/C++

      You haven't said "C/C++" anywhere in this thread...

    28. Re:Easy. by LeafOnTheWind · · Score: 1

      C\C++, then if you want to be pedantic. Your system drivers are written in C, so you will be using the C elements of the language anyway. -7 replies ago

      "In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.

      The fact is, C++ compilers are not trustworthy. They were even worse in
      1992, but some fundamental facts haven't changed: 1) the whole C++ exception handling thing is fundamentally broken. It's _especially_ broken for kernels. 2) any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel. 3) you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++."

      -Linus Torvalds

      Go ahead and post your C++ credentials, but I think Linus has more experience with kernel drivers.
    29. Re:Easy. by trifish · · Score: 1

      The fact is, C++ compilers are not trustworthy.

      The fact that GCC is a shitty C++ compiler does not mean that C++ is not good for system or hardware-related programming.

      any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel.

      You don't have to do that in C++. You can do your malloc and free manually if you want. That's the beauty of C++, you can use the C subset if needed (not that it's needed as often).

      you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++.

      ROFL. That made me laugh! Good stuff. Objects in C! And C++ is crap for OO stuff! LMFAO! Was that a joke? That guy doesn't have a clue... No wonder the Linux kernel sucks big time (and, yes, I have plenty of first-hand experience with the Linux kernel -- it's just shit).

    30. Re:Easy. by LeafOnTheWind · · Score: 1

      Heh, obviously you just think you're better than everyone else, so you won't care how many qualified professionals say your position is idiotic. Trying to convince you via Linux and Window's own documents (http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx) doesn't work, so go ahead. You are a C++ god among men and know better than any of them!

    31. Re:Easy. by trifish · · Score: 1

      Apparently, you have no counter-arguments. Just as I thought. And again, the MS document does not mean that C++ is not suitable for kernel or hardware-related development. The fact that someone wrote shit doesn't meant that C++ is shit.

    32. Re:Easy. by Eivind+Eklund · · Score: 1

      The fact that the Linux and Microsoft kernels are written in C does not change these facts: - C++ has all capabilities and features as C C++ miss the feature of C of being relatively transparent in terms of what is going on when you've compiled it.

      C++ also miss the capability of being quickly compiled by a reasonable free compiler (g++ was slow as molasses the last time I checked.)

      And, C++ has a smaller programmer base: All good C++ programmers should be able to program C fairly well, while not all C programmers are good C++ programmers.

      Whether this is important enough to make it a good choice to write a kernel in C instead of C++ is of course debatable - I just want to point out that there are reasonable arguments on both sides. (I personally tend to lean towards the C side, but much less so than I used to.)

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    33. Re:Easy. by Eivind+Eklund · · Score: 1

      you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++. ROFL. That made me laugh! Good stuff. Objects in C! Yes, this is common. I actually see it used in some subsystems in most large C projects. To continue the example above, the file system interfaces in BSD kernel (I don't know the Linux kernel too well) is written using an object-oriented model in C, including an extensible operations table (similar to a vtable in C++, but possible to extend at runtime when you load a new filesystem.)

      And C++ is crap for OO stuff! LMFAO! Was that a joke? That guy doesn't have a clue... You're fairly arrogant here. I'll point you at a description of OOP by Alan Kay, the inventor of OOP, and I'll offer up this quote of his:

      "Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind." (From "The Computer Revolution hasn't happend yet", his keynote at OOPSLA 1997)

      C++ has strengths and weaknesses - and, if you're skilled, you will recognize this.

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    34. Re:Easy. by trifish · · Score: 1

      No specific arguments. Sheer mumbo jumbo.

    35. Re:Easy. by Eivind+Eklund · · Score: 1
      Specific arrogance showing up again, eh? After all your mumbo-jumbo attacks?

      Tell me, are you one of these only-C++-and-Java experienced people that feel like judging the world based on their own lack of experience - based on their own fear?

      You sound that way. And you sound horribly arrogant in your communication.

      As do probably I, right now - and that's because your choice of staying in your little stupid corner and shouting "I KNOW EVERYTHING I CAN ATTACK EVERYBODY I DON'T NEED TO LEARN LAH LAH LAH LAH I HAVE MY FINGERS IN MY EARS SO I DON'T HAVE TO HEAR YOU" is fairly annoying to those of us - or at least those of me - that actually have spent a couple of decades inside different forms of code, and actually know how to program concepts in different languages.

      Eivind.

      --
      Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
    36. Re:Easy. by trifish · · Score: 1

      I am still waiting for any specific arguments. All I see is mumbo jumbo again and now even personal attacks. Nice.

  10. Aging Engineers by avandesande · · Score: 4, Insightful

    I think many people fail to recognize that the average age of software engineers has gotten higher and that many have realized that most of the pitfalls in software development have little to do with the language chosen. I would rather concentrate on good engineering practices and refining familiar modules I have developed than learn a new language.

    --
    love is just extroverted narcissism
    1. Re:Aging Engineers by Anonymous Coward · · Score: 0

      I'm one of them. And as the years go by I'm less and less interested in learning the newest language, and more interested in honing my Java skills, and there's a lot of room for that.

      Lack of multiple inheritance still bites me once in a while.

    2. Re:Aging Engineers by Manip · · Score: 1

      I'd agree we can't hold a language entirely responsible for programming mistakes but a lot of languages make coding easier and more secure by design.

      I mean 1,000 lines of C++ and C# compared... I'd expect to see fewer errors in the C# and less severe errors when I find them.

      If we are comparing Java and other managed languages then I entirely agree the differences are smaller but any language that allows you to manage your own memory is an old dog and needs to be taken out and shot.

      ASM, C, and C++ should be reserved for Operating Systems, Compilers/Assemblers, and high end software where speed is of huge importance (e.g. 3D Games, Database Engines).

    3. Re:Aging Engineers by sheldon · · Score: 5, Insightful

      My father, just before he retired, got into a big argument with the kids. They had an embedded system, 32K onboard memory, everything was written in straight C.

      The kids wanted to do OOP. My father felt there wasn't enough memory to do this effectively and it was foolish.

      The reality was, that the kids just wanted to pretend they were doing OOP. They still used straight C, they just created structs and organized functions in files as if they were classes. It was actually rather clever and made it easier to maintain.

      It's hard as you get older, I think, you hear about some new idea as the silver bullet and your immediate reaction is negative because you've heard this so many times before. But you have to have an open mind, and watch and see what is happening.

      Otherwise you'll end up as a COBOL developer.

    4. Re:Aging Engineers by Anonymous Coward · · Score: 0

      You sir hit the nail on the head, thank you.

    5. Re:Aging Engineers by chthon · · Score: 1

      If you talk about good engineering practices : it seems that Java was developed in order to make the developers think before they code. However, why was Java invented then ? They could have built upon what Ada was already.

    6. Re:Aging Engineers by ardor · · Score: 4, Informative

      I mean 1,000 lines of C++ and C# compared... I'd expect to see fewer errors in the C# and less severe errors when I find them.

      Depends on your skills. C# is a safer environment, but C++ has immensely more expressive power. With modern and well-coded C++, these 1,000 lines may equal to 10-20,000 lines of C#/Java. Unfortunately, the ugly C++ syntax and its C cruft make unlocking the true advantages of C++ a black art.

      A trivial example is the STL. Java/C# containers don't come even close to the STL's power. Go further and look at Boost.MPL/Fusion/Proto, and you'll see stuff you simply cannot do with Java/C#.

      Well. If it were by me, Lisp would be king. But its not a perfect world :)

      --
      This sig does not contain any SCO code.
    7. Re:Aging Engineers by CxDoo · · Score: 1

      Care to back this with a real example? I use both C# and C++ on daily basis and still have to face a situation where I had to use C++ because it couldn't be done in C#, once you decide .NET is ok for your application.

      --
      "Blah blah blah." - [citation needed]
    8. Re:Aging Engineers by bsDaemon · · Score: 1

      When I was in high school, I discovered that I could put pointers to functions inside of typdef structs and create a primitive sort of object system instead of learning C++.

      I also spent a whole hell of a lot of time doing absolutely nothing productive with my time at all.

    9. Re:Aging Engineers by burris · · Score: 2, Informative

      The reality was, that the kids just wanted to pretend they were doing OOP. They still used straight C, they just created structs and organized functions in files as if they were classes. It was actually rather clever and made it easier to maintain.

      I was under the impression that this is how all quality contemporary software development in the C language was conducted. Maybe the kids weren't as clever as they were up to date.

    10. Re:Aging Engineers by sik0fewl · · Score: 1

      The reality was, that the kids just wanted to pretend they were doing OOP. They still used straight C, they just created structs and organized functions in files as if they were classes. Actually, I would still call that OOP. Obviously, you're not getting some of the language features C++ has like polymorphism, inheritance, protected members, convenient syntax, etc, but they are still using OOP principles.
      --
      I remember when legal used to mean lawful, now it means some kind of loophole. - Leo Kessler
    11. Re:Aging Engineers by phoenix.bam! · · Score: 0, Troll

      Do you have an example of something you can do with STL that you can't do in java?

    12. Re:Aging Engineers by huckamania · · Score: 1

      I've used C++ since before it was a standard, before there was even the idea of an STL and I've never come across any project that would require C++, except perhaps some old MFC stuff. C++ seems to be going in the opposite direction of every other language, becoming more arcane, requiring more, as you put it, black arts. I thought it gave developers too much rope when it first came out and the rope has only gotten longer.

      I've never been a big fan of the STL and when I have used it, I usually only use the STL as a place holder until I can write a custom container without all of the STL overhead. If you want to compare LOC, compare an email client written in Java versus one written in C++ --or-- compare an html push app written in Perl versus one written in C++. C++ won't even come close, because, that's not what it was designed for.

      Personally, I really like PHP. It's a lot like C, with the huge exception that you don't need to compile anything. Just edit the php and refresh the browser. Which is another thing that makes it great, it integrates very well with Apache and MySql.

    13. Re:Aging Engineers by UnderCoverPenguin · · Score: 3, Interesting

      The reality was, that the kids just wanted to pretend they were doing OOP. They still used straight C, they just created structs and organized functions in files as if they were classes.

      You don't need an object oriented language to do object oriented programming, just the will and discipline to do it.

      FYI, FWIW, the original implementation of C++ was as a preprocessor to C.

      OO languages certainly make it easier to do OOP, however, in my experience, the compiled executable is usually much larger than if you "hand code" OOP in a non-OO langage. Of course, in my experience, even hand coded OOP results in larger executables than non-OOP coding.

      --
      Don't try to out wierd me, three-eyes. I get stranger things than you, free with my breakfast cereal. --Zaphod Beeblebr
    14. Re:Aging Engineers by Hemlock+Stones · · Score: 1

      Having no real experience with it I assume this is pretty much what Objective C does. It should also be noted that the original C++ implementation was a pre-comiler that output C code. I myself have for many years written C programs that incorporate the use of header and code files for code file interface, function and data hiding (something like Modula 2, anybody remember Modula 2 ?).

    15. Re:Aging Engineers by JamesP · · Score: 1

      "The reality was, that the kids just wanted to pretend they were doing OOP. They still used straight C, they just created structs and organized functions in files as if they were classes. It was actually rather clever and made it easier to maintain.
      "

      This is not pretending to do OOP. This is effectively OOP.

      Linux kernel uses OOP and is still 100% C. Same thing with other systems...

      You DON'T have to use an OOP language to do OOP. And what they've done is true OOP, without the language support.

      --
      how long until /. fixes commenting on Chrome?
    16. Re:Aging Engineers by Anonymous Coward · · Score: 0

      So your father was right, he won the argument, and now your posting on slashdot pretending *you* were right, saying how "clever" you were, in order to vent your frustration?

    17. Re:Aging Engineers by avandesande · · Score: 1

      Yes, I would much rather deal with well written procedural code than poorly written OOP.
      I have found that instances where 'true' OO need to be used are few and far between.

      --
      love is just extroverted narcissism
    18. Re:Aging Engineers by Anonymous Coward · · Score: 0

      If it has a standard processer, using C++ would have given them what they wanted w/o any cost other than longer compile times.

      However, given that it has 32k, it probably doesn't.

    19. Re:Aging Engineers by Anonymous Coward · · Score: 0

      Actually, that's just normal best practices for doing modular programming in C.

      However, if they wanted to use OOP, they could have done it in C++, and if they were careful, had just as little overhead (or even less!) than C.

      The thing is, undisciplined C++ programming will lead to the kind of high overhead mess your father was against. So for an embedded system, probably best to go the route the "kids" did.

    20. Re:Aging Engineers by Sir_Real · · Score: 1

      It's the tooling. Modern languages are essentially equally capable.

      The reason Java still has a leg to stand on is Eclipse and its various plugins. When did J2EE get easy to use? It was really when Eclipse tooling for J2ee (and it's alternatives, like Spring) took off that J2EE became a workable solution.

      With the tools available, Java is easier to get stuff done with, for the average developer.

    21. Re:Aging Engineers by Cro+Magnon · · Score: 1

      Otherwise you'll end up as a COBOL developer.


      I AM a COBOL developer, you insensitive clod!
      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    22. Re:Aging Engineers by Anonymous Coward · · Score: 0

      I don't think he said it could not be done in C#, but that he could do it in less lines using modern c++.

      And I have to agree, I've saved many a line of code using Boost::lambda, boost::bind and boost::spirit :). It gives C++ the expressiveness of a functional language, but sadly the look of something that has been beaten thoroughly with an ugly stick. And you better hope you do not get a boost::lambda::bind wrong, that's easily a 100 line error message :).

      All in all though, modern c++ is an extremely powerful language, and a lot of different than traditional c++.

    23. Re:Aging Engineers by Anonymous Coward · · Score: 0

      > Otherwise you'll end up as a COBOL developer

      Rich, because nobody else can do the job?

    24. Re:Aging Engineers by Anonymous Coward · · Score: 0

      they just created structs and organized functions in files as if they were classes. It was actually rather clever and made it easier to maintain. Isn't that how you're supposed to do with C?

    25. Re:Aging Engineers by ardor · · Score: 2, Informative

      Stuff like this:

      http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost_proto/users_guide/examples/lazy_vector.html

      Generic Programming in general is impossible in C# because of underpowered generics. Unless stuff like

      template
      void random(Container &container, Accessor const &accessor)
      {
          for (unsigned int i = 0; i (i) = typename Accessor::value_type(std::rand());
      }

      is possible in C#, this argument holds. (Note that this is an artificial example I came up with; for a good example of real-world usage, check out Adobe GIL).

      Another example: http://www.gsse.at/multiprogramming/

      C++'s true power lies in its templates. Templates are turing complete, meaning that they for a meta language. Using this meta language, I can adapt code to a specific situation. For example, I can have compile-time polymorphism, which is very useful when there is enough information while compiling to choose the actual type. I can have a list of factory class types, and do a call like create_image (img); which gets compiled to the actual creator function ONLY. No virtual functions, the compiler can even inline without problems. Yes, a JIT could detect that function X has been used with the same parameters for 400 seconds, but this way, I can rationalize unnecessary runtime overhead right from the start. Yet another use was to generate code paths that only differed in pixel format type. I wrote a templated version, and iterated over a list of enums at compile-time. This helped a lot in being cache friendly while not requiring to clone tons of code. Using templates, one can write scientific computing code that rivals even Fortran in terms of performance. See: http://www.oonumerics.org/blitz/

      I know C# 3.0 has a functional core, and this is wonderful - many problems can be solved much easier and cleaner with functional style. Generic programming and metaprogramming are the things I sorely miss. I would really like to have a language that has all the strengths of C++, minus its weaknesses (most notably C legacy, hideous template syntax, #include files). So far, D is the closest one, but its not there yet. Also, C++ has an ENORMOUS momentum...

      --
      This sig does not contain any SCO code.
    26. Re:Aging Engineers by Anonymous Coward · · Score: 0
      Heh. Part of the problem with C# isn't anything to do with the language itself - it's a product of two things:
      1. Most programming in C# has that ugly heritage in .NET. It's not necessary to use .NET to program in C#, but it's what's being used in the market. This means that there are at least 5 methods to do a single thing in a single namespace, 3 of which are deprecated, and 1 of which was flagged by Microsoft as dangerous.
      2. If you come into a project late in the day, you may find that a majority of your code that you now have to deal with was written by ASP and VB programmers, and therefore it very likely is a horrid rat's nest of awful programming practices on 300 times as many lines as it needs to be.

      So while you'd expect to see less errors in C# that was written by a professional who knows what they're doing in C# and probably C++, you'd expect to see far more errors in an application C# in the wild because it's likely been written by management-trained no-engineering-experience-having script programmers.

      Not to be an elitist or anything, as I was largely self-taught before I gave up and decided to get a degree, but it's impressive the amount of indifference and disrespect that people have toward actual safe, clean, maintainable programming practices.

    27. Re:Aging Engineers by ardor · · Score: 2, Interesting

      I thought it gave developers too much rope when it first came out and the rope has only gotten longer. More powerful languages require more studies. The inherent difficulty always increases with increased ability. But there is a lot of accidental difficulty in C++, thats right. Let me emphasize one thing here: I don't think C++ is the pinnacle of programming. Far from it. But its undeniably powerful, and there is no other language that has this amount of expressiveness and range. Java and C# are severely limited in comparison. Python and Lisp are much more flexible, but at the cost of performance. Where else can I write metaprograms that construct a code path at compile-time, for example? With all the compile-time optimizations applied to the result?

      I also gave examples already. Try replicating Boost.Fusion or Boost.Proto in C# or Java. Try replicating Blitz++, or Spirit. Try generic programming in C++, then in Java and C# (you'll curse at the latter two's generics). Look up what's possible with C++ metaprograms (-> Boost.MPL & Fusion). Read books from Scott Meyers and Alexei Alexandrescu (especially Modern C++ Design).

      If you want to compare LOC, compare an email client written in Java versus one written in C++ --or-- compare an html push app written in Perl versus one written in C++. C++ won't even come close, because, that's not what it was designed for. But using metaprogramming you can write enough tools to come close in C++. You seem to be trapped in arpa/inet.h or land - try writing a HTTP server or an email client in C++ using boost (especially boost.asio), THEN compare the LOC. (In fact, there is a HTTP server example supplied with asio.)

      Lets make the comparison fair - write an email client WITHOUT the Java Standard Library. Just a thin wrapper over the socket API and the system, one that equals the C++ stdlib. I even go as far as saying that with asio, boost, and tr1, I could beat Java's LOC WITH its standard library. (Generally, when a problem demands high language expressiveness, Java's LOC count goes through the roof.)

      A lot of the arguments against C++ originate from obsolete C++ code and practices. This is 2008, folks. MFC-style C++ has less than 1% in common with modern C++.
      --
      This sig does not contain any SCO code.
    28. Re:Aging Engineers by Anonymous Coward · · Score: 0
      Absolutely right. You can tell the age and experience of a person by how they react to this topic.


      Who cares about a trivial language choice? Platforms, architecture, and business requirements must be met. We should be discussing Design Patterns, but it's just not as sexy.

    29. Re:Aging Engineers by bcwright · · Score: 1

      This is nothing new - it is, for example, how Xt/Xm and other Xlib toolkits have worked for years. It all ends up looking very "object-oriented" but it's all straight C.

    30. Re:Aging Engineers by bcwright · · Score: 1

      This sounds more like a communications problem than a conceptual problem. Depending on what you're trying to accomplish, 32K may be oceans of memory or just a tiny puddle, and using some standard OOP tools may bloat your code to the point that it's hard to get it to fit. It sounds more like they were talking past each other - using the same words to mean different things - rather than that either side was wrong given their respective assumptions about what the words meant.

    31. Re:Aging Engineers by sheldon · · Score: 1

      I may have misremembered exactly what it was they did. But you may be right, that really they were just introducing some more up to date patterns.

      Really the problem was my father heard the term OOP, and immediately jumped to a different conclusion. He admitted as much to the group later after he saw what they were doing.

    32. Re:Aging Engineers by Anonymous Coward · · Score: 0

      That's a stupid question to ask considering that C++ and Java are both Turing complete.

    33. Re:Aging Engineers by Anonymous Coward · · Score: 0

      ASM, C, and C++ should be reserved for Operating Systems, Compilers/Assemblers, and high end software where speed is of huge importance (e.g. 3D Games, Database Engines).

      You may have missed the memo, but that's already the case. I was just looking for jobs and there's *very* little C/C++ work going on, and what work there is, is where C/C++ is appropriate and necessary.

    34. Re:Aging Engineers by Peaker · · Score: 1

      When you're comparing Python, Lisp, Smalltalk, Java, C# and to a certain degree, even C/C++ then you have a point. These languages have significant productivity differences, but those are often dwarfed by other things.

      However, completely different languages, such as Haskell do indeed offer a very different approach, that may completely change the way you program, the productivity of your practice and in the (near?) future, the scalability of the program to multiple processors.

    35. Re:Aging Engineers by Anonymous Coward · · Score: 0

      I like Python and C# 3.0 because of things like closures, list comprehensions, and lambdas. Can you do those in C++ yet?

      The template libraries are nice, but it makes the code illegible and/or impossible to understand. It's hard enough to figure out how iostreams works, let alone Boost compiler errors.

      dom

    36. Re:Aging Engineers by sjelkjd · · Score: 1

      It works the other way too. Try doing any kind of dynamic class loading in c++ - welcome to COM! In contrast, Java and C# have built in mechanisms for dynamic class loading(and code generation).

      I'd say go and look further at C# 3.0, with LINQ, lambdas, and expression trees. And it's all natively supported by the language and runtime, so you'll probably get a real compile error rather than template goo.

      One more advantage of c# and java - since it doesn't have the archaic text #include, it can compile orders of magnitude faster than a c++ program. We're talking 2 minutes for 100k LOC. Heck, doing hello world in Boost and friends probably will take 2 minutes to compile on it's own to resolve all the template references :)

    37. Re:Aging Engineers by ardor · · Score: 1

      Somewhere else I wrote that one of C++'s weaknesses is the absence of reflection. But I actually think its more of a platform issue rather than a pure language one. I think it was the wrong decision to leave dynamic library handling up to the platform, and not standardize it like Java .class and C#/.net assemblies. Such a thing *is* being considered for C++0x, though. Also, LLVM is likely to have this.

      Oh, and #include indeed is one ugly hack. Unfortunately, modules have been voted down. Curse them for this :(
      But for errors and compilation speed there is hope in sight. Concepts will make sure the errors happen where they should (and not somewhere else deep within the template), variadic templates will significantly reduce template complexity (because you no longer need N versions for max N parameters), and delayed template instantiation will make sure the template is not instantiated X times (this one is the real killer).

      Yes, I've seen C# 3.0 functional stuff, and its wonderful. I am glad to see progress in C#. Now, extend generics with the C++ template power (minus its problems), and C# will own :) But its undeniable that C# makes progress while Java doesn't. If this continues, Java will be left in the dust. I also think it should be easier to add true templates to C#, since its generics are already heterogenous. MS, look at D for an example!

      One more thing: D compiles incredibly fast, too, and almost reaches C++'s expressiveness. Its still a bit immature, but I definitely recommend watching D 2.0.

      --
      This sig does not contain any SCO code.
    38. Re:Aging Engineers by Anonymous Coward · · Score: 0

      What kind of FUD is this? I hope you are talking about 1,000 lines of C++ templates since I'd like to see your claim substantiated when C++ doesn't even have basic syntax sugar like foreach (let alone lambdas).

    39. Re:Aging Engineers by Free+the+Cowards · · Score: 1

      Lisp is generally a compiled language, and with a good compiler it will be competitive with C/C++ in terms of performance. And of course its metaprogramming facilities eat C++'s for breakfast. You know you're in trouble when your language's metaprogramming facilities end up being Turing-complete by accident. In Lisp you get to write your metaprograms in exactly the same language you use for everything else, and you don't get pages full of errors when you make a minor mistake.

      I also love the part where you say, "The inherent difficulty always increases with increased ability." This is such a C++ attitude! Most powerful languages are easy. Smalltalk can be learned in hours. Basic Lisp in hours. C++ is the only language in popular use which requires years of hard study to become proficient in, and even after all that effort you get nothing remarkable.

      C++ is a great language if you think that effort equals results. It forces you to go to great strides to produce anything of worth, which in turn makes you feel great because you slew the beast. Meanwhile people using reasonable languages are just quietly getting things done and have no opportunity to feel good about themselves in this way.

      --
      If you mod me Overrated, you are admitting that you have no penis.
    40. Re:Aging Engineers by ardor · · Score: 1

      This is such a C++ attitude! You missed the part where I said "But there is a lot of accidental difficulty in C++, thats right". If a language is more flexible and powerful, it is also more difficult to master it in its entirety. Its pathetically easy to comprehend procedural programming. Its a little harder to comprehend all the things that are possible with Lisp. THIS is inherent difficulty. Usually, the accidental difficulty (= avoidable problems; stuff like the ugly C++ template syntax for example) is orders of magnitude larger, in C++ its so large the inherent one is almost nonexistant.

      Of course Lisp eats C++ for breakfast. I never disputed that. If it were by me, Lisp would be king - I have written this already (but not in the GP). The main problems with Lisp are the less polished toolchain (which is understandable - C++ has a slightly bigger audience than Lisp) and a niche position. None of the two reasons are inherently Lisp-centric, or somehow the result of the language, but unfortunately, today C++, C, C#, Java are the rulers. Unless you write a self-contained program in your spare time, or end up in a niche business, you will hardly get to code Lisp.

      And trust me, writing self-manipulating code in CL *does* feel good. Writing homoiconic pure functional collision detection code is pure gold. Etc.
      --
      This sig does not contain any SCO code.
    41. Re:Aging Engineers by Anonymous Coward · · Score: 0

      C# is a safer environment, but C++ has immensely more expressive power. With modern and well-coded C++, these 1,000 lines may equal to 10-20,000 lines of C#/Java. How on earth was this comment modded 5 - Informative ???

      The stupidity of the regular slashdot reader/moderator is depressing.
    42. Re:Aging Engineers by ardor · · Score: 1

      Templates of course. They are C++'s true strength, and its main weakness thanks to the syntax and the turing completeness being an accident rather than a design decision.

      On a sidenote, C++ HAS for_each in the STL. lambda constructs are available in Boost (Boost.Lambda, Boost.Phoenix), and a true lambda will come in C++0x.

      --
      This sig does not contain any SCO code.
    43. Re:Aging Engineers by ardor · · Score: 1

      Ok, the code example was truncated thanks to the < > symbols. In hindsight, it wasn't a good example anyway. Instead, I recommend looking at Adobe's presentations, which are full of C++ wonders: http://stlab.adobe.com/wiki/index.php/Papers_and_Presentations
      And of course the GIL:
      http://opensource.adobe.com/wiki/display/gil/Generic+Image+Library

      --
      This sig does not contain any SCO code.
    44. Re:Aging Engineers by Free+the+Cowards · · Score: 1

      I didn't miss it. The common C++ attitude is that much of the pain is necessary. That C++ misses the idea of "A good design is not complete when there is nothing left to add, but when there is nothing left to take away." If this isn't your position then obviously I misinterpreted, but it is the common position of C++ users in my experience.

      --
      If you mod me Overrated, you are admitting that you have no penis.
    45. Re:Aging Engineers by ardor · · Score: 1

      Indeed. This idea is why I admire Scheme (though it might be a bit too small :) ). In my opinion, lots of C++ bits could be scrapped, starting with the C legacies.

      --
      This sig does not contain any SCO code.
    46. Re:Aging Engineers by Free+the+Cowards · · Score: 1

      I tend to agree there. You have to strike a balance in the middle. Languages which are too pure tend to become unusable. But languages which just do whatever looks the most useful at any given moment also become unusable.

      This is why I'm a big Python fan at the moment. It strikes a nice balance between purity and practicality. If only it weren't so godawful slow....

      --
      If you mod me Overrated, you are admitting that you have no penis.
    47. Re:Aging Engineers by ChaosDiscord · · Score: 1

      OOP is more about how you think about and organize the problem than a specific language. Some languages make it easier to express the idea of an object than others, but you can do it any general purpose language. It's not fake or pretend, just less elegant. FILE* and the associated functions in the standard C library form a perfectly reasonable object oriented interface. That it's fprintf(p,...) instead of p.printf(...) is just syntax.

    48. Re:Aging Engineers by phoenix.bam! · · Score: 1

      "A trivial example is the STL. Java/C# containers don't come even close to the STL's power. Go further and look at Boost.MPL/Fusion/Proto, and you'll see stuff you simply cannot do with Java/C#." Was what I was replying to. You can do every in Basic you can do in C++ too but the parent was talking about stuff you "simply can't do." So it was a pretty valid question. Although I guess asking for an example of what ardor was talking about was trolling.

  11. From whose point of view? by mr_mischief · · Score: 5, Insightful

    Not to sound too much like Obi Wan, but many of the truths we cling to depend a great deal on our own point of view and all that.

    If I was working for O'Reilly, Manning, APress, Wiley, et al I'd say a successful programming language was one which sold lots of books.

    If I was a hiring manager for a large software company, I'd look closely at what language allowed the most cheap new grads to work together an produce something resembling quality code.

    If I was teaching intro to computer science, I'd worry about what was preparing my students for the rest of their education.

    If I was teaching a certificate-level course to people looking to get into the job market quickly, I'd look for the language with the highest placement rate.

    If I was a person of little clue, I'd go largely by the hype. Some would go with the mainstream hype, and some go with the counter cultural "that's the big hype, but our language is better" underdog hype.

    As a programmer, I prefer the language that helps me turn customer requirements into working programs that fastest with the least fuss on my part, and allows decent maintenance and customization later.

    As the owner of a small boutique programming shop, I want my expressive, powerful language to give me an advantage over others using less expressive languages. I'd like to find others who can use it, but a few is alright as I don't need a huge team to work on programs.

    1. Re:From whose point of view? by Anonymous Coward · · Score: 0

      If I was working for O'Reilly, Manning, APress, Wiley, et al I'd say a successful programming language was one which sold lots of books.

      What language is that? Amazon.net?

    2. Re:From whose point of view? by Anonymous Coward · · Score: 1, Insightful

      If I was a hiring manager for a large software company, I'd look closely at what language allowed the most cheap new grads to work together an produce something resembling quality code.

      Given my choice I would hire an engineer with 5-10 years of experience instead of 5 of those cheap new grads" and save a bunch of money.

    3. Re:From whose point of view? by Cyrano+de+Maniac · · Score: 1

      And if I was a resident of a mental health institution, I want x86 assembly.

      --
      Cyrano de Maniac
    4. Re:From whose point of view? by Anonymous Coward · · Score: 0

      OMG, a relevant insightful post.

      Did you know this was /.?

    5. Re:From whose point of view? by Reverend528 · · Score: 4, Funny

      Not to sound too much like Obi Wan
      These are your father's parentheses. Elegant weapons, for a more... civilized age.
    6. Re:From whose point of view? by starX · · Score: 1

      You sound like an intelligent and sound-minded individual, I don't suppose you're hiring :)

    7. Re:From whose point of view? by sparhawktn · · Score: 1

      I think you pretty much nailed this one everyone sees things a little differently. From my perspective I like a couple of languages that have a common syntax across them so it makes it easy for me to switch between them to accomplish what I need to do everyday. Plus the way the layout of the syntax seems more pleasing to my eye. Otherwise programming is basically the same logic you just use different words to accomplish it.

    8. Re:From whose point of view? by Anonymous Coward · · Score: 0

      As long as you have enough 5-10 year veteran experience to provide leadership (amount depends on the scope of the project), the cheap new grads are often much better hires than more adding people with extensive experience. New grads don't have nearly as many bad habits that need to be broken and can much more quickly align themselves to the way things are done. If everyone has extensive experience, you get the "too many cooks in the kitchen" phenomenon or, worse yet, everyone just does their own thing and your code base is incredibly inconsistent and no one can modify/maintain code that they didn't write themselves.

      In my experience, you don't want all new grads, but once you have the technical leadership necessary, filling in the rest of the staff with new grads that are good at problem solving and have all the core CS concepts fresh in memory is actually a much better solution. And with the propensity for programmers to have anti-social/combative personalities, I've found that fresh CS grads usually a less-developed anti-social personality than those with more experience.

      And the fact that you can almost get 2 new grads for the price of one experienced developer is important too. There really is something to the "Many hands makes light work" proverb.

    9. Re:From whose point of view? by rabiddeity · · Score: 3, Funny

      Hokey lambda calculus and ancient prefix notation are no match for a good printf at your side, kid.

    10. Re:From whose point of view? by sjelkjd · · Score: 1

      And here's the XKCD link.

    11. Re:From whose point of view? by QuietObserver · · Score: 1

      I very much agree. However, if I have a CPU with a good assembly language, I'll go with that (i.e. 6502, 68000, etc, and especially my own design; yes, I know 6502 is quite limited in some areas, but it blows x86 away in terms of simplicity and legibility). My own design may have it's own limitations as well, but it has one advantage over pretty much everything modern; when the bit width doubles, until we reach 256kbit, my CPU just needs to have an expanded ALU and then to have the next operation size activated internally.

    12. Re:From whose point of view? by mr_mischief · · Score: 1

      I think your engineer with 5-10 years of experience may well replace 3 or 4 of those grads. Maybe even all five of them. The truth is, though, that they will work cheap now and gain experience. The single engineer is going to eventually find a new job or retire. He might be hit by the proverbial bus.

      A good balance is having the experienced engineer mentor 3 to 7 new grads, I think. In five years, then, you have a number of people with more than five years of experience.

  12. Python's Success.. by neoform · · Score: 2, Funny

    Python's success is based on how much python coders bash PHP. The more they attack PHP the better the language gets.

    --
    MABASPLOOM!
    1. Re:Python's Success.. by OrangeTide · · Score: 1

      The language stays the same, only the perception changes.

      --
      “Common sense is not so common.” — Voltaire
    2. Re:Python's Success.. by Krisbee · · Score: 1

      However, it's perception that counts...

    3. Re:Python's Success.. by missing000 · · Score: 2, Funny

      Nope it gets better. PHP sucks!

    4. Re:Python's Success.. by pazuzuzu · · Score: 1

      Python's success is based on how much python coders bash PHP. The more they attack PHP the better the language gets. Who knew language development could be so easy? Guido is a genius. I'll have to start bashing PHP more often.
  13. Quck! by Anonymous Coward · · Score: 4, Insightful

    Every program on your screen and your OS was written in C/C++

    1. Re:Quck! by Anonymous Coward · · Score: 0

      You missed a few: Objective-C, Ruby, and about a dozen other languages.

    2. Re:Quck! by gardyloo · · Score: 3, Funny

      I use my own OS written in brainfuck, you insensitive clod!

    3. Re:Quck! by vux984 · · Score: 1

      Every program on your screen and your OS was written in C/C++

      I wish.

      These days half the stuff people use is written in a vomit inducing stack of generated bastardized html with VisualBasic, C#, or PHP on the backend doing the heavy lifting (which is itself running on C/C++ interpreters/VMs/CLI/whatever) and Javascript gluing it all together.

      And people wonder why even the best 'AJAX' apps suck.

    4. Re:Quck! by shywolf9982 · · Score: 1

      OSes are written in C/C++ because, well, when coding a kernel you can't say "let's have someone else do the memory management". So you use a programming language that allows you to access the memory.

      That was, btw, why C was created. Back in the times, people used languages that did memory management for you for high-level apps (yes, LISP had a garbage collector) and assembler for kernels.

      The strength of C was that it was a high level language and yet allowed you to take the memory management in your own hands.

      --
      nbody2002:If you can read this you may be addicted to the internet
    5. Re:Quck! by Anonymous Coward · · Score: 0

      Wrong.

    6. Re:Quck! by shutdown+-p+now · · Score: 1, Interesting

      Very, very unlikely. If you're using Windows, you'll see plenty of .NET software these days (IIRC, control panels for both NVidia and ATI drivers are .NET-based, for example), still quite a few Delphi applications (and used to be a lot more only a few years ago), and an occasional VB6 monstrosity. If you run a GNOME-based Linux distro, it's very likely that quite a few of Gtk+ applications you use are written in PyGtk. I would imagine it's mostly C++ in the KDE land, though - Qt really doesn't map well on anything else, unfortunately.

    7. Re:Quck! by Gat0r30y · · Score: 1

      And python, I have on my screen a web app based on python, a serial port comm program written in python and IDLE. :)

      --
      Prediction: The real iPhone killer is going to be sex robots from Japan. Think about it.
    8. Re:Quck! by Anonymous Coward · · Score: 0

      haha think again, gnome has a ton of python buddy. (as does kde I am sure)

    9. Re:Quck! by ggvaidya · · Score: 1

      I'm an Apple weenie - it's all Objective C, you insensitive clod!

    10. Re:Quck! by OshEcho · · Score: 0

      Now I don't think that C/C++ will ever go away, but here are are a few programs running right now on my laptop that are written in python:
      -Exaile (A music player)
      -Portato (For installing programs)
      And not running at the moment, but I do use:
      -Editra (An editor)

      Now, that is only a few, but they didn't exist or where unusable more than a year ago. I'd expect that in the next few years I would have another few python programs running.

      --
      -Echo
    11. Re:Quck! by Anonymous Coward · · Score: 0

      Every program on your screen and your OS was written in C/C++ Not all. Several, but not all - guaranteed. Maybe for you but not for me.
    12. Re:Quck! by interval1066 · · Score: 0

      Not true. I'm using Linux and plenty of front-facing apps are written in Python. If you're a sundry user I bet that you'd never know that probably more than half the apps you're using are written in python with a glade UI.

      --
      Python: 'And then suddenly you have a language which says "we're all stuck with whatever the whiniest coder wants".'
    13. Re:Quck! by DaveV1.0 · · Score: 1

      That python webapp is running in a web browser, a program written in C/C++ or possibly Objective-C, right?

      --
      There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
    14. Re:Quck! by 2short · · Score: 1

      True of the OS and all 6 of the 8 programs I have open whose language I know. Argue features and syntax all day if you like, in the end, the successful languages are the ones that produce the programs people run.

          Some people like to use languages other than C++ because they're doing something quick and simple, which is reasonable. Some people like to use languages other than C++ because they think C++ is too hard; I don't think other languages will solve their problem. Some people like to use C instead of C++ because they think their code will be faster; they're wrong. There are probably some smart, reasonable people who want to use something other than C++ just out of personal preference; Not everyone can have good taste.

    15. Re:Quck! by Gat0r30y · · Score: 1

      Just for you, i'm closing my browser and opening the page in idle with urllib.

      --
      Prediction: The real iPhone killer is going to be sex robots from Japan. Think about it.
    16. Re:Quck! by Anonymous Coward · · Score: 0

      Actually I use GNOME and a lot of the software uses python. It's not the fastest language out there but in all honesty waiting for user input is often not a performance critical task. Many of the libraries used by this pythonic software are indeed c/c++ (GTK, libtorrent to name just a few) and that's great for performance reasons. The nice part is that the user-interface logic is presented in a clean and simple to modify language, and that integration with c/c++ is not to difficult.

    17. Re:Quck! by DaveV1.0 · · Score: 1

      IDLE uses the TCL/TK libraries which are written in what again?

      --
      There is no "-1 offended" or "-1 you don't agree with me" mod options for a reason.
    18. Re:Quck! by Just+Some+Guy · · Score: 1

      Every program on your screen and your OS was written in C/C++

      ...he says by clicking on an HTML widget that causes JavaScript to turn his words into XML and then transmit them to an application written in Perl.

      --
      Dewey, what part of this looks like authorities should be involved?
    19. Re:Quck! by jcast · · Score: 1

      The program I'm looking at now was written in perl. The one two windows behind that was written mostly in Lisp. The program in the terminal at lower right is perl invoking Haskell (cheating, I wrote both). I've got NeoOffice (Java IIRC) running somewhere. And, this being a crappy NeXT clone I'm running, I'm sure there's Objective C around somewhere.

      --
      There are reasons why democracy does not work nearly as well as capitalism.
      -- David D. Friedman
  14. SOME Answers: by Jack9 · · Score: 2, Interesting

    The less cryptic the better. This generally means, be C-like in your operators and be easily readable at a loop level.

    Having multiple abstractions available. Multiple ways to do the same complex task efficiently, not just for() or while(). Regex plz.

    Being able to access hardware directly. This includes RAM allocation.

    Few unexpected side effects. Documentation is important for both adoption and maintenance of programs written in the language.

    That's all I got.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
  15. Article is slashdotted, can someone post a copy? by KPexEA · · Score: 1

    Slashdotted already, that was quick!

  16. Ruby and Python are ex-parrots, not Java by ajv · · Score: 4, Interesting

    I review code for security flaws for a living. I am a pioneer in this field and have literally written the book on it (the OWASP Guide and the OWASP Top 10 2007). I've been doing secure code reviews for the last 10 years.

    I've reviewed 400-500 applications (it's unclear to the total number, but I usually do a review every other week, some shorter, some longer).

    I've never reviewed a Ruby application or been asked to review code written in that language. I have been asked to review a Haskell application.

    I have reviewed:

    * 85-90% Java, usually with shell and ant scripts and occasionally some Perl. Some *years*, this is the only language I am asked to review.
    * 5-10% .NET. I haven't reviewed a .NET application this year.
    * 5% COBOL. Primarily as a side line - there's a lot of old code to review, but most folks never do.

    I've reviewed three PHP applications professionally, all in the last year, even though this is my preferred language to write stuff.

    Java is overwhelmingly used in large commercial settings for high value applications, with .NET a very distant second.

    I don't get to review that many COBOL or other mainframe apps. I've been doing ground breaking research in this area as there's no advice today. There is a false belief that this code is somehow "safe" as it resides on the mainframe. Nothing could be more wrong.

    Ruby and Python, although interesting langauges, has zero commercial penetration, even for worthless brochureware or community apps.

    What they do have is an extremely loud fan base. These languages will not kill COBOL or Java any time in the next forty years or so as the fan base is fickle and will move on to the next big thing when it comes along.

    --
    Andrew van der Stock
    1. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0, Insightful

      Maybe it just means people using Python and Ruby have enough confidence in their code (rightly or wrongly) that they don't feel they should pay someone to review it.

      Or, if you make the above information publicly known that you haven't reviewed Ruby or Python code that's a pretty good reason for someone to choose somebody else to review their code. Why would they pick a guy with little experience in that language?

    2. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      bla bla bla bla bla bla bla.....

    3. Re:Ruby and Python are ex-parrots, not Java by Jaeph · · Score: 5, Insightful

      You didn't review any C either, yet we all know that the language is out there and being used. Same with perl.

      I think your field of work is too narrow to be completely explanatory.

      Btw, I do agree with your general point - I don't see python or ruby bumping aside java. But your personal experience, extensive as it appears, is not enough to derive that conclusion

      -Jeff

      P.S. I really wish java would go. I hate the upper/lower case thing in all the names.

      --
      Please learn the difference between a dissenting opinion and a troll before you moderate.
    4. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      I have no mod points, so I will say +1 insightful and also mention the immense power of inertia.
      If your employer has a number of big Cobol / Java / xxx applications, you will have learned xxx and the next project you work on will probably be xxx. Your next job will be wotking in xxx, probably not the fashionable and interesting yyy.

    5. Re:Ruby and Python are ex-parrots, not Java by D+Ninja · · Score: 1

      P.S. I really wish java would go. I hate the upper/lower case thing in all the names. Do you mean Camel Case? You mean that thing that makes it easy to type quickly, but still be able to read what you've typed in code?

      hardtoread
      hard_to_type
      EasyToReadAndEasyToType

      What's the issue?
    6. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      Ruby, Python and Perl are fine for prototyping and weekend hacks, I'm not a huge fan myself -- I prefer lua. But to say that they've no commercial penetration isn't really accurate. Python is used extensively in scientific and VFX work and Google, Amazon use plenty of it too. These are specialist fields, penetration into desktop apps is low but unfortunately it appears to be increasing.

      I can't help but object to people making their pet language a dependency of another project, usually with the "most distros ship it by default anyway" argument. I've got interpreters for awk, perl, lua, sh, ruby, python, scheme, postscript... Love to send these people a list of my objections; all they'll need to do is install my objection runtime to read them.

    7. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 5, Insightful


      Do you ever think that maybe your survey has a heavy self-selection bias? I mean it seems to me that the most likely candidates for security reviews would be applications that have been around long enough to have somebody in management say, "Hey, we need to have a third party review this!". This explains how FIVE PERCENT of your applications are COBOL while only "three" are PHP. By your analysis, it's as if C/C++ doesn't even exist...

    8. Re:Ruby and Python are ex-parrots, not Java by bdcrazy · · Score: 1

      What's the issue? Your keyboard/os setup. Flip the upper/lower case on the -_ key (and/or redefine your keyboard layout to say, the / key to make it the _ key. ) and it becomes easy_to_type and easy_to_read.

      It is amazing how many people use the default of whatever they have without thinking about how to make it immensely easier on themselves.
      --
      Tonights forecast: Dark. Continued dark throughout most of the evening, with some widely-scattered light towards morning
    9. Re:Ruby and Python are ex-parrots, not Java by blindd0t · · Score: 1

      I couldn't agree with the parent more here that CamelCase is most appealing. Old HTML 3.5 syntax where people often used only captial letters for tag and attribute names was horribly painful to read. Additionally, I've found that there are some tools out there to spell-check your code, and can do so based on the assumption that things are in CamelCase. I find that this sort of tool can be very helpful in catching typos and spelling errors early on. For example, I can't count the number of times I've seen something like SomeCatagory instead of SomeCategory repeated countless times through projects and database schema.

    10. Re:Ruby and Python are ex-parrots, not Java by Kingrames · · Score: 1

      The issue is your hideous mutant seven-humped camel example.

      I may be the only one, but a catch-all approach just doesn't work for me.

      Sometimes "testarray" is easier on the eyes than "TestArray" or "testArray" or whatever other kind of system you've got. But it really depends on the program.

      --
      If you can read this, I forgot to post anonymously.
    11. Re:Ruby and Python are ex-parrots, not Java by DdJ · · Score: 2, Insightful

      Just as an aside, you can use "EasyToReadAndEasyToType" in a language which is not case sensitive. Nothing is stopping you.

      The real question is, should "EasyToReadAndEasyToType" be a different symbol from "easyToReadAndEasyToType"?

      I happen to think the answer is "yes, it should be a different symbol". But that's a separate issue from whether you can use camel case in case-insensitive languages.

    12. Re:Ruby and Python are ex-parrots, not Java by ajv · · Score: 3, Insightful

      It's not about the platform, language or the framework that makes an application safe, it's the security engineering that does. If you don't do any, your app WILL be insecure by design and there's no way you can't fix such code.

      However, you have a point to a degree - I am initially more productive reviewing frameworks I am familiar with. But that doesn't mean I would be ineffective at reviewing Python or Ruby. It would take me about half a day to spin up in any language or framework as I found things that are missing. And that's the important thing:

      I hate reviewing apps with zero security engineering. It's exactly like shooting fish in a barrel, but hopeless as you're not going to get a nice fish stew at the end.

      What I look for are meta-issues found in all languages and frameworks. Syntax and functions can be found in online references - if you need them.

      There is nothing special about any language as few protect against the security artifacts we look for.

      For example, if your code has an access control mechanism, I look at it in situ on a live test app, deciding how best I might attack it, and then research using the code how I can obviate it at different levels:

      * Coarse grained - is this feature access controlled at all? This is definitely a problem for J2EE apps that use servlets as folks think presentation level security is adequate. It's not
      * Medium grained - does this feature offer different levels of access based upon your role? If so, how does this mechanism work? What do I do to get around it and steal stuff?
      * Fine grained - does this feature restrict access to secured resources (direct object references)? If so, how does this mechanism work?

      Each of the things we look at are verifying security mechanisms. Knowledge of the language or framework is simply not necessary. If you know what you're doing, you can prove the lack of security engineering by testing the app in situ and then research why it fails. Once I find a weakness, I look at the code to see why the weakness exists. Once I've found the issue, I look further afield for the pattern and then I document the issue. Rarely does an app or framework have just one weakness - they are usually patterns.

      Picking up a new language or grammar and framework, like going from Struts to Spring MVC takes about half a day for someone like me who knows multiple languages, both functional like Haskell, or OO languages like Smalltalk or Ada, or scripting dynamic languages like PHP, Ruby or Python, or declarative languages like C or Java. We do not write the app, we are reviewing the app.

      Security mechanisms are usually fairly clear if they exist. If they do not make themselves immediately obvious, they are usually missing.

      Folks who have the hubris to think their code is somehow safe, like the COBOL folks on the mainframe or your example of not reviewing code if you don't know it well. That's why I turned down the Haskell review as I didn't know it well enough in the time available. If it was a longer review, I would have taken it as I love to learn new languages.

      However, fyi, if you paid me to be a developer, I could be immediately productive in the following languages:

      J2EE - Since Java was first released. Major frameworks include Struts, type 1 JSP with JSTL, Spring MVC, Struts 2.0, and JSF
      PHP - Since PHP 3 .NET (C# and VB.NET) since .NET 1.0

      Could code if absolutely required:

      COBOL - 12 months review only experience
      RPG - 12 months review only experience
      Perl - 15 years experience
      Shell scripts - 15 years experience
      Ruby with RoR - tested it out for a new version of my forum (UltimaBB/XMB) but it was too slow
      C - since 1985. Co-wrote the Matrox millennium driver for XFree86 back in the day
      C++ - since CFront was a bastard child
      Ada - since 1990. Still have fond memories
      Pascal - since 1985, haven't used it for a while

      Languages that I don't suck at but wouldn't claim any particular skills:

      --
      Andrew van der Stock
    13. Re:Ruby and Python are ex-parrots, not Java by D+Ninja · · Score: 1

      I actually agree with you that using the default without thinking about it is a bad thing. With that said, the default keyboard layout lends itself to camel case. So why should I go changing my keyboard layout around to program in something when I already have a good default anyway?

    14. Re:Ruby and Python are ex-parrots, not Java by 140Mandak262Jamuna · · Score: 3, Funny

      Andrew San, You have a /. id 5K. It is beneath you to take the bait from AC trolls. Still, thank you for taking time to explain your stand.

      --
      sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
    15. Re:Ruby and Python are ex-parrots, not Java by ajv · · Score: 2, Interesting

      Fair point - my list is not a scientific survey and was never intended to be.

      It is skewed towards high value applications - those apps my customers are prepared to pay me to review over a large number of years. There's a significant difference between that set and the total set of applications I *could* review.

      There's plenty types of apps I rarely see, such as open source apps (although I am working on one right now) or scientific apps.

      Some folks in my field specialize in embedded platforms (usually written in assembler, C or Ada). I have reviewed such apps last couple of years, including EFTPOS terminals as used by about 1/4 of Australian businesses (written in C with some concurrent extensions), and power meter readers used by plenty of US utilities (Windows CE based, written in C++). These two reviews are such a tiny minority of my work, they barely rate in my list.

      Although I am able to do code reviews in pretty much any language, I have specialized in high end financial and logistics applications, those that power the world economy. Some of the apps I've reviewed process literally a couple of trillion dollars per day in transactions. These apps are written primarily in Java and COBOL with a smattering of stored procedures (PL/SQL ~= Ada or DB2's stored procedures, generally written in a DB2's SQL dialect).

      If you want a scientific survey, SourceForge used to have a project statistics page detailing what languages are in use. This would be a good metric for open source projects. It would be a terrible metric for closed source / proprietary apps.

      --
      Andrew van der Stock
    16. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      Your observations are supported by other statistics. For example:

      http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

    17. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      I don't get to review that many COBOL or other mainframe apps. I've been doing ground breaking research in this area as there's no advice today. There is a false belief that this code is somehow "safe" as it resides on the mainframe. Nothing could be more wrong.

      One reason the mainframe is so secure is usually Mainframe Ops watches the system constantly. When you work on the same system for 10 years you know what programs should be running when and you know ALL the users and what programs they run.

      THIS makes the system secure, having real, live people who know what their doing watch the system.

      Unfortunately, many companies are starting to offshore mainframe ops and it is sharply decreasing the skill set and ability. When I went in, you needed at least an Associates and experience, now big blue is shipping it off to teenagers in Brazil, the only requirement is speaking English. /Trained people on the Toyota account in '06. //Some of them had never used a computer before.

    18. Re:Ruby and Python are ex-parrots, not Java by gbjbaanb · · Score: 1

      I have introduced a bug into a program I was maintaining because I failed to notice the difference between the member variable 'SomeVariable' and the local variable 'someVariable'. (it probably depends on the font and initial letters how easy it is to read, but its still poor practice IMHO).

      Anything that thrives on an inflexible doctrine should not be used, especially if it is more interested in its 'clever' approach to a problem instead of making things clearer.

      An example is how people criticize Hungarian notation for various reasons, mostly because they just don't like it, but if putting a p before a pointer variable helps to prevent a bug then I'm all for it. (ok, but I'm not in favour of dwpszbVariable type hungarian). Camelcase simply does nothing for helping the reader to see clearly, and should be banned for that reason alone. And I don't care how "clean" or "elegant" it might be.

    19. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      Having a bias against a naming convention is about the dumbest reason I've ever heard for disliking a language.

    20. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0
      I find that camel case is like a run on sentance with no punctuation it just goes on and on and is very difficult to read while whitespace and - and _ are much easier delimiters for me to read. I also like using variables with the case implicitely in the name str_input int_output. str_input vs strInput makes it much easier for me to see what is what.

      str_Mainling_Address
      int_Unique_Id
      var_Address_block

      strMainlingAddress
      intUniqueId
      varAddressblock
      For me the former is much easier to read and see quickly without having to do much parsing of the name.
    21. Re:Ruby and Python are ex-parrots, not Java by bdcrazy · · Score: 1

      We'll have to agree to disagree then. I find the effort for changing the default for one key to be more than offset by much easier reading of code with whitespace characters in it as opposed to your good default of camelcase. I also believe that if you have a choice, readable code should be preferred over speed of typing. To me, designing a task usually takes substantially more time than the simple job of creating syntax to accomplish that task.

      --
      Tonights forecast: Dark. Continued dark throughout most of the evening, with some widely-scattered light towards morning
    22. Re:Ruby and Python are ex-parrots, not Java by LeafOnTheWind · · Score: 1

      OWASP = Open Web Applications Security Project. He didn't review any C or Perl because he reviews web projects (J2EE, etc.). Honestly, there are about 10 people that still use Perl for enterprise web projects (e.g. slashdot) and basically none that use C.

      P.S. I like the Java upper/lower case - makes it easier to read and name length doesn't mean much when you have autocomplete.

    23. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      P.S. I really wish java would go. I hate the upper/lower case thing in all the names.


      This is the most insightful point made so far -- I don't think anything has more importance, when selecting the best programming language, than the case-insensitivity aspects.


      Well, that, and obviously whether white space is mandatory to indicate scoping or not.


      Somebody please mod parent up -- he is onto something. Or at least on something.

    24. Re:Ruby and Python are ex-parrots, not Java by Anonymous Coward · · Score: 0

      If you don't do any, your app WILL be insecure by design and there's no way you can't fix such code Phew, that's a relief :-)
    25. Re:Ruby and Python are ex-parrots, not Java by jcast · · Score: 1

      It's sometimes easier in case-insensitive languages. When I was 16, I'd name my VB functions in Camel Case, and then type in the calls all lower-case. If they were still all-lower-case after I hit Enter, I knew I'd mis-spelled them.

      --
      There are reasons why democracy does not work nearly as well as capitalism.
      -- David D. Friedman
  17. Management approval needed by ebunga · · Score: 1

    To make a language successful, it must be "good enough" for its purpose to attract developers, and promoted enough so that management types will actually allow the language to be used.

  18. Script kiddies and professionals by klubar · · Score: 1

    There is a huge difference between languages that work well for one- (or maybe two-) person teams and ones that scale to large projects. Many of the scripting languages (PHP-like) are great for quick results and small projects. Strong type checking, documentation, enforcing good coding practises don't matter if the project size is small enough that one person can keep it all in his or her head.

    As you get into large projects all of this starts to matter.

    The quality of the IDE also starts to matter--you'll find better/professional IDEs at the top end languages.

    1. Re:Script kiddies and professionals by Anonymous Coward · · Score: 0

      Hello Java Joe.

  19. 10+ concurrent users by Anonymous Coward · · Score: 0

    Websites built with Java can support more than 10 users concurrently!

  20. Re:Article is slashdotted, can someone post a copy by nickos · · Score: 1
    No wonder:

    Maximum concurrency limit of 10 exceeded.
  21. Yes, sure, it is the evil gang... by JamesP · · Score: 2, Funny

    that is going to kill poor Java

    It is not the fact that it is overly verbose, too rigid, and is bloated as as a puffer fish on helium.

    --
    how long until /. fixes commenting on Chrome?
    1. Re:Yes, sure, it is the evil gang... by hjf · · Score: 4, Insightful

      yeah, you know, 'cause when you have 50 programmers on a project, C l33tnesses like

      while (x-->0) { blah; }

      are so cool and easy to understand. and malloc()s make memory management so easy and cross-platform. and clustering is for wussies, if you need more than a core2duo on Linux, is because you're unl33t or because you need to do some routines in über-ELITE assembler.

      now when you program in Java you forget all that crap, you just code. need a bigger app? J2EE it and run it on a cluster. add nodes a needed to keep performance. node dies? no problem, J2EE takes care of it.

      migrated from mysql to Oracle or DB2? no problem, just let Hibernate know about it.

      tired of Windows Server and want to run opensolaris, linux or OS X Server? no problem, just drop your EAR/WAR on the new server and relax. it's working.

      wanna add more coders to your project? point 'em to the javadoc and let they read through the verbose (and thus self-explaining) code.

      strong typing is there to keep you from doing stupid things. you can always tell what the program IS going to do in all situations, because you HAVE to specify all situations.

      but you're too cool for java. lemme know when banks switch their systems to LAMP and we'll talk.

    2. Re:Yes, sure, it is the evil gang... by mlwmohawk · · Score: 1

      while (x-->0) { blah; }

      Perfectly obvious.

      malloc()s make memory management so easy and cross-platform. and clustering is for wussies, if you need more than a core2duo on Linux, is because you're unl33t or because you need to do some routines

      C/C++ and Java have different application types. Sure, there is cross over, but generally speaking there are things you can do in C/C++ that you can't do in Java, but the converse is not also true.

      now when you program in Java you forget all that crap, you just code. need a bigger app? J2EE it and run it on a cluster. add nodes a needed to keep performance. node dies? no problem, J2EE takes care of it.

      Umm, excuse me? You are talking about a load balanced scaling, not classic "cluster" as in beowulf. J2EE does take care of a lot of the issues, sure, but it's all nodes have all data session sharing or being reliant on a session sensitive load balancer are, IMHO, sub optimal.

      migrated from mysql to Oracle or DB2? no problem, just let Hibernate know about it.

      Hibernate, lets see some hands... Who has found hibernate to be problem free?

      tired of Windows Server and want to run opensolaris, linux or OS X Server? no problem, just drop your EAR/WAR on the new server and relax. it's working.

      It is not hard to make server code, in almost any language, that is cross platform. It is the GUI part that's the hard part.

      wanna add more coders to your project? point 'em to the javadoc and let they read through the verbose (and thus self-explaining) code.

      This is blatantly oversimplified and you know it.

      strong typing is there to keep you from doing stupid things. you can always tell what the program IS going to do in all situations, because you HAVE to specify all situations.

      Yup, we NEVER see java exceptions do we?

      but you're too cool for java. lemme know when banks switch their systems to LAMP and we'll talk.
      Yup, banks! Those bastions of technical visionaries. What decade did they finally update from COBOL? How many COBOL systems are still running!!???

    3. Re:Yes, sure, it is the evil gang... by JamesP · · Score: 1

      And I assume writing everything twice (like in Blah x = new Blah() ) is cool then... Or maybe importing dozens of libraries and instantiating a handful of classes for "Hello World"

      Oh, you want to talk about scaling? About automatic memory management and gc (that doesn't suck)?

      I can't remember the last time I had to worry about memory management in Python, Haskell (exception is "infinite use of memory" caused by some incorrect usage, which would be a problem in any language). And C++ you say? STL solves 90% of the problems.

      No to mention that Python nor Haskell (or not even C# - yes, VM was unloaded) take a million years to start the VM.

      Scaling? Actually, this has been solved for some time now, the answer lies in thinking functional (thet's the way Google does things). And Java wins hand down as the least functional language of all (Functors?? c'mon). At least in C you have function pointers. You can even do currying using some black magic (not recommended)

      Adding more coders is never simple, and even C# has a JavaDoc kind of mechanism.

      "strong typing is there to keep you from doing stupid things"

      Except when it makes you doing a million data conversions just to print something on the screen.

      "lemme know when banks switch their systems to LAMP and we'll talk."

      1 - We'll have to wait until banks get to Java in the first place (which is really unfortunate, Java is pretty good considering what several banks have there) :)
      2 - Most of the logic is in the DB

      "but you're too cool for java"

      Considering all the projects I have worked, I guess only one would benefit from Java (and that was a legacy automation system written 50% in Pascal, not pretty)

      --
      how long until /. fixes commenting on Chrome?
    4. Re:Yes, sure, it is the evil gang... by epiphani · · Score: 1

      yeah, you know, 'cause when you have 50 programmers on a project, java l33tnesses like

      Blah x = new Blah();

      is so cool and easy to understand. and just forgetting about memory management completely is so efficient. and horizontal clustering is for wussies, if you need less than 8 gigs of memory on linux, it is because you're unl33t or because you obviously aren't using as many threads as you should.

      now when you program in C you forget all that crap, you just code. need a bigger app? Abstract session management to central storage and add servers. add nodes a needed to keep performance. node dies? no problem, your IP load balancer takes it out of rotation.

      Migrated from mysql to Oracle or DB2? no problem, you abstracted your DB layer, right?

      Tired of Windows Server and want to run opensolaris, linux or OS X Server? no problem, you wrote everything POSIX, right? it's working.

      wanna add more coders to your project? point 'em to the oxygen docs and let they read through the verbose (and thus self-explaining) code.

      Compliers stop you from doing somthing stupid, and since you're scaling horizontally, service outages are absorbed by the network level. With your logging systems you can always tell what the program IS going to do in all situations, because your coding review standards force you to.

      but you're too cool for C.

      I dont normally feed trolls, but wow, everything has its place - and java's place is much smaller than some people seem to think it is

      --
      .
    5. Re:Yes, sure, it is the evil gang... by hjf · · Score: 1

      ah, but you have to do all these things yourself, while Java forces you to do all that from the beginning. then, scaling is easy.

      you can't just "what the heck, I'll hack this together to make it work and we'll fix it when we need". No. In Java, usually doing things Right need the same amount of work to do wrong (in other words, writing nasty JDBC is as hard as writing good Hibernate).

      you DON'T need to write everything in POSIX, because there is no not-POSIX, and POSIX. There is just Java. You Don't need an IP load balancer. You Don't need to write your own DB abstracton layer, you don't need an external tool to handle your docs, you don't need etc etc etc. Everything's been done before.

      Don't know why you're trolling me anyway, since my post was actually a troll to the GP who was another troll.

      The point in the end is that most KIDS don't understand java because they think they're too cool to use it. Talk to a good CS major and he'll tell you why Java is good, where to use it and where not to use it.

      Talk to some kid and he'll tell you Java sucks because it sucks. Real hackers use C and I wanna be a hacker, but elite hackers also do assembler and that's the most elitistisistic thing ever. But I don't understand what what(&lol) does so I just use PHP and Mysql and I made this cool site for my school. http://xkcd.com/327/

    6. Re:Yes, sure, it is the evil gang... by hjf · · Score: 1

      C/C++ and Java have different application types. Sure, there is cross over, but generally speaking there are things you can do in C/C++ that you can't do in Java, but the converse is not also true.


      so, because C/C++ can do things that java can't, that makes them automatically better? there is no need for other languages as anything can be done in C? childish arguments as usual.

      Java is not "a language", it's a "platform", a "framework", or whatever you want to call it. Java includes a lot of things that C doesn't include in its standard libraries, and adding another library to a java app is as simple as dropping the jar in the classpath. No need to worry about library version incompatibilities.

      You have to choose the right tool for the job. Some say Java is big and slow and takes a lot of memory. Let's extrapolate this to a real life example:

      Think of java as a pneumatic wrench and C as a regular wrench. Which one is better? The one that you can fit in your pocket and use in any weather conditions, position, altitude, doesn't require power, or maintenance and it's ubiquitous, cheap and almost indestructible... or the one that needs power for the compressor, a special hose for air, and you need to clean it, and it's likely to break if it drops, etc?

      The answer? It depends. If you only have to replace 1 bolt, the manual wrench is the right answer. If you have to replace them constantly and as quick as possible, then the pneumatic tool starts to look good... even though it can't do many things the simple manual wrench can do.
    7. Re:Yes, sure, it is the evil gang... by mlwmohawk · · Score: 1

      so, because C/C++ can do things that java can't, that makes them automatically better?

      I never once used the term better.

      there is no need for other languages as anything can be done in C?

      I never said that either.


      Java is not "a language", it's a "platform", a "framework", or whatever you want to call it. Java includes a lot of things that C doesn't include in its standard libraries, and adding another library to a java app is as simple as dropping the jar in the classpath. No need to worry about library version incompatibilities.

      That is at best an oversimplification. Yes, java has neat features, but it is not perfect either.

      Java is an environment, not really a platform. There are many environments in which to develop applications. It should be noted, however, C/C++ are more than mere platforms, and that Java is written in C/C++.

  22. The "scripting" vs "compiled" canard again??? by tyler.willard · · Score: 3, Interesting

    Jesu effing Christo.

    One thing ain't got nothing to do with the other.

    I can't decide which is worse, this particular bit of idiocy or the all-to-common: "dynamic vs strong typing" arguments.

    Actually, maybe I'm being to hasty.

    The conflation of runtime implementation details with language capabilites, or the above-mentioned typing confusion, does provide a quick and easy way to tell that someone doesn't know what the hell they're talking about.

    1. Re:The "scripting" vs "compiled" canard again??? by theJavaMan · · Score: 1

      So what is your opinion on the "scripting vs compiled" or "dynamic vs strong dynamic vs static typing"??

    2. Re:The "scripting" vs "compiled" canard again??? by Bat+Country · · Score: 1

      If you have to either:

      A) Write your own compiler for every target platform...

      ... or ...

      B) Buy a third party compiler with no community support...

      ...to turn a finished product from "interpreted" to "compiled," then it's pretty fucking relevant as a discussion on the merits of a language.

      I for one wouldn't like to run a single script on 35 million file system elements as part of a multi-step process when that script has a 5/2 second overhead as it loads/unloads the interpreter.

      I agree that in terms of the usability of the language for development, it shouldn't matter how the client has to use it, but we don't all have the luxury of ignoring our clients and letting them worry about how to use our product.

      --
      The land shall stone them with the bread of his son.
    3. Re:The "scripting" vs "compiled" canard again??? by tyler.willard · · Score: 1

      "scripting vs compiled"

      Immaterial except in terms of extreme expressivity or extreme speed, respectively.

      In most normal cases, it shouldn't matter except as a matter of preference or possibly development time.

      "dynamic vs strong dynamic vs static typing"

      I prefer strong-dynamic.

      However, if someone who knows the differences between strong-dynamic/weak-dynamic/strong-static/weak-static has a contrary opinion, I'll respect it; even if I disagree.

  23. Languages and technology stacks by Anonymous Coward · · Score: 0

    There are only two people in the world that should be allowed to create languages: Brian Kernighan and Dennis Ritchie. Everybody else should just f**k off.

    Seriously now, I've been working lately on a full-fledge distributed application using the latest of typical Java products (Spring, Hibernate, Apache CXF etc) and I feel the Java platform offers great portability and good standard libraries, but integration between components is hard, not all features work the way you want them to, refactoring is costly because the language is too strict, and there are still pitfalls like the need to use DTOs to marshall objects back and forth. However, I don't have decent experience with alternative stacks (.NET or Ruby on Rails) and I don't know how they compare with the current Java stack. Perhaps Slashdotters could shed some light on the issue from their own experiences (not just say "I like this because of that," but real experience.)

    1. Re:Languages and technology stacks by ardor · · Score: 1

      There are only two people in the world that should be allowed to create languages: Brian Kernighan and Dennis Ritchie. And repeat smart things like not treating arrays as first-class entities?

      Honestly, C is full of design errors. Understandable back then, but nowadays these guys would either repeat their mistakes, or design something entirely different than C.

      I am actually surprised somebody defends the creators of C. I was expecting a defense of the Lisp creators, or Haskell, etc.
      --
      This sig does not contain any SCO code.
    2. Re:Languages and technology stacks by Chemisor · · Score: 3, Insightful

      > And repeat smart things like not treating arrays as first-class entities?
      > Honestly, C is full of design errors.

      Come back when you know how the computer works, grasshopper. C doesn't treat arrays as "objects" because the computer doesn't do that. If you want higher level abstractions, use C++, where you have the nice vector class that does what you want.

    3. Re:Languages and technology stacks by jcgf · · Score: 1

      You can slander the Gods all you like but the fact remains that C is actually in widespread use. Lisp and Haskell are not.

    4. Re:Languages and technology stacks by ardor · · Score: 1

      I *know* how memory and pointers work. I have been using C since 93. I also didnt say objects, I said entities. Arrays as first-class entities already exist for the stack (well, sort of). Also, arrays STILL aren't first-class entities in C++, vector just wraps the allocation and access facilities. With first-class arrays, compile-time string parsing would be possible in C++, for instance - this would make writing DSELs a trivial task.

      Also note that C99 finally acknowledged the usefulness of first-class arrays to a small degree; int i = 50; char c[i]; works, for example. (It equals char *c = malloc(sizeof(char) * i).)

      --
      This sig does not contain any SCO code.
    5. Re:Languages and technology stacks by Chemisor · · Score: 1

      > I also didnt say objects, I said entities.

      Perhaps you should clarify your vocabulary for us normal people. As far as I know, everything is an "entity", including an array in C, which can certainly be used as such.

      > I *know* how memory and pointers work.
      > int i = 50; char c[i]; works, for example. (It equals char *c = malloc(sizeof(char) * i).)

      Uh, no. It equals "char* c = (char*) alloca (sizeof(char) * i)". mallocs need to be freed. alloca is storage on the stack, just as are static arrays, and is freed automatically when leaving the scope. Sounds like you still have some studying to do :)

      > vector just wraps the allocation and access facilities.

      Well, duh. Any "object" does exactly that, in any language. Other languages just hide the things wrapped and pretend they don't exist, just as you don't seem to even know they exist. Yes, Java containers have a low-level implementation too, you just can't hack it within the language.

      > With first-class arrays, compile-time string parsing would be possible in C++

      And it isn't now? gcc is perfectly capable of performing basic operations (like strlen, or printf format checking) on strings. Or are you talking about something else entirely? "First-class arrays"? WTF?

      > this would make writing DSELs a trivial task.

      Of course, everyone here automatically knows what a DSEL is. It's soooo obvious. It must stand for Dumb S*** Easy Language.

    6. Re:Languages and technology stacks by Chemisor · · Score: 1

      > Also, arrays STILL aren't first-class entities in C++

      Not being an ivory tower CS academic, I looked up "first class entities" in the Wikipedia, and it gives the following list:

      * being expressible as an anonymous literal value

      It's true that you can't initialize a vector with a static array expression. It's somewhat inconvenient in some cases, but it certainly isn't a major problem. The next C++ standard will include this capability.

      * being storable in variables
      * being storable in data structures

      You can store a vector in a variable or a data structure.

      * having an intrinsic identity (independent of any given name)

      A vector has an identity in the memory location it occupies. Is that what this is talking about?

      * being comparable for equality with other entities

      Yup.

      * being passable as a parameter to a procedure/function

      Sure, although you would usually pass by reference due to its size.

      * being returnable as the result of a procedure/function

      Yes, you can do that, but again, due to size it isn't recommended.

      * being constructable at runtime

      new vector

      * being printable

      That can never be standard, because arrays of different things require different output methods. Still, it's pretty simple to write a template streaming operator to do something reasonable.

      * being readable

      Marshalling templates are also easy to write.

      * being transmissible among distributed processes
      * being storable outside running processes

      Through marshalling.

      Except for static initialization, which IMO is not of great importance, vector is a "first class entity".

    7. Re:Languages and technology stacks by Anonymous Coward · · Score: 0

      What exactly do you mean by "C doesn't treat arrays as 'objects' because the computer doesn't do that." All a computer knows is 1's and 0's, so by your logic having higher level abstractions like literal strings doesn't belong in C.

      Arrays in themselves are an abstract higher level abstraction for pointer arithmetic in C.

      Maybe you should check your knowledge before calling someone else grasshopper, you apparently have plenty to learn too. But so do I, so none of us are perfect.

    8. Re:Languages and technology stacks by ardor · · Score: 1

      Well, duh. Any "object" does exactly that, in any language. Other languages just hide the things wrapped and pretend they don't exist, just as you don't seem to even know they exist. Yes, Java containers have a low-level implementation too, you just can't hack it within the language. The difference lies in the semantics available to the compiler at compile-time. I cannot use arrays as template parameters in C++ because the compiler doesn't HAVE arrays as explicit types - they just exist as constructs. I cannot perform compile-time overflow checks or slicing. First-class arrays don't have aliasing issues. etc.

      And it isn't now? gcc is perfectly capable of performing basic operations (like strlen, or printf format checking) on strings. Or are you talking about something else entirely? "First-class arrays"? WTF? Learn what compile-time means, grasshopper. So far, only D has first-class arrays (among the C++ derivatives). Try doing something like the regexp compiler (scroll to the middle of the page): http://digitalmars.com/d/2.0/templates-revisited.html

      Of course, everyone here automatically knows what a DSEL is. It's soooo obvious. It must stand for Dumb S*** Easy Language. Domain Specific Embedded Language.
      --
      This sig does not contain any SCO code.
    9. Re:Languages and technology stacks by owlstead · · Score: 1

      Come back when you understand what "first-class entity" means, grasshopper. Who modded this insightful?

      The GP was talking about the way arrays are handled as addresses with pointers instead of being more ingrained in the language.

      That has nothing to do with classes at all. You saw the word "class" and you went into overdrive, did you not?

    10. Re:Languages and technology stacks by Chemisor · · Score: 1

      > What exactly do you mean by "C doesn't treat arrays as 'objects' because the computer doesn't do that."
      > All a computer knows is 1's and 0's, so by your logic having higher level abstractions like literal strings doesn't belong in C.

      An array is simply a typed block of memory, just like an int or float. An object is a higher level abstraction, containing access functions, encapsulation, and some standard of behavior. C is a low-level language, where an array fits with other simple variables of its kind. You can't really make objects in C, although you can sorta do it by hand by handcoding vtables and using file-scope variables. That's what the Linux kernel does, for example. If you want objects, you use C++, where higher levels of abstraction can be properly built, and where an array can become an object (vector).

      > Arrays in themselves are an abstract higher level abstraction for pointer arithmetic in C.

      Arrays are an abstraction for memory blocks, not pointer arithmetic. An array is a physical entity in memory, pointer arithmetic refers to a method of accessing an array.

    11. Re:Languages and technology stacks by ardor · · Score: 1
      Can I use a vector as a template parameter? No.

      That can never be standard, because arrays of different things require different output methods. Still, it's pretty simple to write a template streaming operator to do something reasonable. Um, this CAN be standard, because the output of the container type is orthogonal to the container itself. TR1 tuple has a standard output, for example. int i[j]; cout << i; could yield [1, 2, 3, 4]. string s[j]; cout << s; yields ["some", "strings"]. The container takes care of [ , and ] - the values are handled by the container's value type.

      In fact, your template suggestion proves this.
      --
      This sig does not contain any SCO code.
  24. "Maximum concurrency limit of 10 exceeded." by arjay-tea · · Score: 1

    If the "13 reasons" site is written in one of Ruby, Python or the gang, I'm not too impressed.

    1. Re:"Maximum concurrency limit of 10 exceeded." by skeeto · · Score: 1

      I am pretty sure that limit is put in there by the hosting service so that other customer's websites who share the server with the article in question remain responsive. If you keep hitting refresh eventually you will get lucky (only 9 concurrent servings as you connect) and the page will load just fine.

  25. Perhaps a better measurement than /. popularity by klubar · · Score: 5, Interesting

    Don't count out the "dead" languages... IBM estimates that more than 30 billion transactions occur within Cobol programs every day. By contrast, Google averages about 150 million searches each day, or about .5% of Cobol's daily workload.

    Rather than a "gee I need a cool website for my mom" choice, perhaps the number of transactions or dollar value would be a better count.

    Cobol would probably win, followed by java and the Microsoft languages (C++, C#).

    1. Re:Perhaps a better measurement than /. popularity by Hoi+Polloi · · Score: 2, Insightful

      From a business perspective there is something to be said for older languages.

      1. They have highly experienced developers that are widely available.
      2. Apps written in them are generally older and have been time-tested and are reliable.
      3. The language and its behavior is well understood and is well honed.
      4. Many libraries are available

      Changing to the latest and greatest language demands that you have a damn good reason. Hopefully you just have to port an existing app but you'll have to start all over with QA testing, security analysis, etc. Usually the reasons for changing are:

      1. The pool of developers for that language has gotten too small to continue development and/or maintenance.
      2. Hardware changes demand it.
      3. The performance gain from changing is too big to ignore.
      4. Compatability reasons with other apps, major customers, etc.

      Making a programmer feel cutting edge isn't a good reason.

      --
      It is by the juice of the coffee bean that thoughts acquire speed, the teeth acquire stains. The stains become a warning
    2. Re:Perhaps a better measurement than /. popularity by ardor · · Score: 4, Informative

      Repeat after me:

      C++ is NOT a "Microsoft language".

      --
      This sig does not contain any SCO code.
    3. Re:Perhaps a better measurement than /. popularity by klubar · · Score: 2, Informative

      Sorry, I should have said the .net languages/environment of which C++ is one.

    4. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      Cobol would probably win, followed by java and the Microsoft languages (C++, C#). REALLY?
    5. Re:Perhaps a better measurement than /. popularity by everphilski · · Score: 1

      It's a bastard stepchild at best in the .NET world.

    6. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      >number of transactions
      That seems like comparing CISC and RISC processors (transaction size mismatch).

      >dollar value
      This highly privileges languages used in older markets (eg. Banking => COBOL).

      Both of these would obviously measure "what is the most successful today", not what "makes a programming language successful".

    7. Re:Perhaps a better measurement than /. popularity by Tritoch · · Score: 1

      That's a good point. Where I work we still have plenty of mission-critical applications running on IBM midrange systems that were written in RPG or CL. Of course we have other applications and scripts written in fancy-schmancy languages like ColdFusion, Java, and Perl (many of which I've written), but virtually none of those are integral to our core processes.

    8. Re:Perhaps a better measurement than /. popularity by willyhill · · Score: 1
      In the context of .NET, C++ is usually called Managed C++, OR "MC++". That describes applications written in C++ that use compiler extensions to leverage the .NET CLR and runtime.

      Microsoft does have a "normal" C++ compiler obviously. But it's a little weird because normally if you write an MFC application, it's still C++. An MC++ app is also C++, but MFC is a code framework that does not technically require any special compiler considerations to be used, while MC++ does introduce keywords, modifiers and attributes that are not part of the C++ language itself.

      So technically (I think) you could write an MFC app and compile it with the GCC suite. Not so with MC++.

      --
      The twitter monologues. Click on my homepage and be amazed.
    9. Re:Perhaps a better measurement than /. popularity by abolitiontheory · · Score: 1
      Excellent point. It's hard to see the things which have become "fundamental" to our existence sometimes. So many flashy new things are held up by undergirding of solid old technologies. Honestly, the comparison is like saying that a dot com start-up is going to replace the steel or tele-com industry. They're just in entirely different leagues, and one is built on top of the other.

      Things which are flashy cannot be firm, and things which are firm cannot be flashy, history generally shows.

    10. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      FYI, C++ predates .NET and even most versions of Windows. Visual C++ is NOT the language, it is just one out of many implementations.

    11. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      Microsoft languages (C++, C#). C++ is not a MS language
    12. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      C++ is not a Microsoft language. In fact, before .NET, MS didn't even have a decent C or C++ compiler. The new compilers are extremely good (and free too).

    13. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      Yeah, but I bet Google's data centers still have less compute power than the sum total of all mainframe installations running all that COBOL code. And I would think that the top search engine in the world is a little more computationally complex than adding some numbers to a column in a banking application.

    14. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      Microsoft languages (C++, C#) Are you kidding?
      C/C++ started out as languages for Unix, and to build Unix.

      C# was a marketing move by MS, and a bad move in that, which disfigured the C++ we all love.
    15. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      "... adding some numbers to a column ..." like say your paycheck to your checking account? There are two different standards here. Google is complex because it attempting to parse large amounts of text, and return meaningful results to the users. It can afford to be more fault-tolerant than a bank. Banks must process all of their transactions nearly perfectly. I would think they require more computing power for error checking and fail over.

    16. Re:Perhaps a better measurement than /. popularity by heffrey · · Score: 1

      Er, I think you'll find that MS had a decent C/C++ compiler long before .NET. What do you think it built all those versions of Windows with?

    17. Re:Perhaps a better measurement than /. popularity by Bat+Country · · Score: 1

      Don't forget on the list of advantages:

      5. You've already paid for it 20 years ago.

      --
      The land shall stone them with the bread of his son.
    18. Re:Perhaps a better measurement than /. popularity by Shivetya · · Score: 1

      One thing too many people like to do is dismiss older languages. I think a lot of this is done out of the belief that new must be better. Yet I work on IBM midrange systems where COBOL and RPGLE reign supreme. It simply comes down to, what gets the job done safely, quickly, and accurately. I think a lot of success for a language is the system for which it is written.

      I have dabbled in C, C++, Pascal (both Turbo and USCD), Modula-2, and want to take a look at ADA. Yet one thing I find is that the simpler it is the better. I was always put off with the complex naming which is prevalent in many OO languages. It almost seemed as if they could add one more "dot" then some kind of epiphany would be realized. The concept I practice when I deal with COBOL and RPGLE is to separate the interface from the rules applied to the data. While my videos handling modules do the interface work they don't know the business rules or only the slightest of subsets which would not be logical to isolate. File handling and field handling is done separately.

      Am I out of date with my languages, probably if you view it from what is taught in school, yet it is the platform which gives the languages I work in the ability to get it done safely, accurately, and quickly. Best of all, the value of the work is preserved as the platform changes because the underlying system which processes my code is immune to the machine it runs on. The very same code written in the late 80s runs unchanged. Its value and safety is preserved. I don't need to use a new language to get work done, I do use new languages to present it to new "screens". The separation of presentation from the work ensures many languages can coexist in whatever future we find.

      --
      * Winners compare their achievements to their goals, losers compare theirs to that of others.
    19. Re:Perhaps a better measurement than /. popularity by owlstead · · Score: 1

      Except when the variable lives longer than the for loop, of course :)

    20. Re:Perhaps a better measurement than /. popularity by drpimp · · Score: 1

      C++ is NOT a "Microsoft language".

      --
      -- Brought to you by Carl's JR
    21. Re:Perhaps a better measurement than /. popularity by Anonymous Coward · · Score: 0

      He used 'Microsoft' as an adjective. It means 'bug-ridden ugly bloated ~'.

    22. Re:Perhaps a better measurement than /. popularity by Lazy+Jones · · Score: 1

      Don't count out the "dead" languages... IBM estimates that more than 30 billion transactions occur within Cobol programs every day.

      Some people say it's because they haven't found those computers in the basement yet to turn them off...

      --
      "I love my job, but I hate talking to people like you" (Freddie Mercury)
  26. Good article by Foofoobar · · Score: 0

    Really points out some solid arguments about syntax and others things that alot of people have been saying for awhile.

    --
    This is my sig. There are many like it but this one is mine.
  27. Maybe some programmers should get pushed too by renau · · Score: 1

    I just got.

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests:
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    ...

    Not sure what language they used, but it should be dead too.

    1. Re:Maybe some programmers should get pushed too by Hoi+Polloi · · Score: 1

      If you are the owner of this website, you may need to upgrade to a more advanced plan.

      Maybe they just need to dust off their credit card.

      --
      It is by the juice of the coffee bean that thoughts acquire speed, the teeth acquire stains. The stains become a warning
    2. Re:Maybe some programmers should get pushed too by Anonymous Coward · · Score: 0

      Duh. Their service limits the number of connections, and the language told you so. Whatever it is, it has informative error messages. Seems pretty good to me.

    3. Re:Maybe some programmers should get pushed too by perlchild · · Score: 1

      I sure wish coralcache would be a way around this, but apparently, they are slashdotting the site too, so few resources it has.

  28. Yahoo Cache/Mirror by Anonymous Coward · · Score: 0
  29. Free market economy by confu2000 · · Score: 1, Insightful

    I can think of two ways to judge the success of a language.

    1) If people use it.
    2) If you can find people who will pay you to use it. And assorted corollaries: if people will hire you because you know how to use it, etc...

    Given that programmers need to eat, I'd tend to go with the second though the two are basically related anyways.

  30. Slashdotted - Google Cache by Anonymous Coward · · Score: 0
  31. Languages are Social/Cultural and Technology by StCredZero · · Score: 1

    Languages are a Social/Cultural phenomenon as much as a Technology. A big part of a language's power is how good and complete its libraries are. And these are built by a community of programmers.

  32. Here we go again... by Savage-Rabbit · · Score: 1, Interesting

    '13 reasons why Ruby, Python and the gang will push Java to die... of old age' People will continue to postulate that Java is dying just as they have done for years with C/C++ but I'm still willing to bet that in 15 years Java will still be a major player. When a language has achieved the kind of presence in both businesses and the FOSS community world wide that Java and C/C++ have, it is going to be a lot easier to confidently claim that Python & Co. will kill these languages off than it will be to actually do the deed. I'm sure that a number of developers will go over to Python, Ruby & Co. and thus erode the market share of Java but to say that Java will 'die of old' age is stupid. Hell we are still trying to squeeze the life out of COBOL.... with limited success I might add. I know a number of people who get paid good money to write COBOL code.
    --
    Only to idiots, are orders laws.
    -- Henning von Tresckow
    1. Re:Here we go again... by fishbowl · · Score: 1

      I'm working a side project that's Fortran-90.
      I myself started with the idea that I could or should just port it.
      That is not going to happen. It's scientific computing code that's
      been designed and tested by people far smarter than me, who understand
      higher math far better than I ever will, and it turns out Fortran is a
      reasonably expressive language for problems in that domain. Does it do
      anything that C couldn't do, almost in a 1:1 translation? No. But the
      real problem is, people might die (or worse, construction projects might
      not get approved :-) if this computation comes out wrong.

      --
      -fb Everything not expressly forbidden is now mandatory.
    2. Re:Here we go again... by Anonymous Coward · · Score: 0

      If you actually read the article you would see that he is not postulating Java will disappear. Heck, the inclusion of 'old age' in the title should have been a giveaway. The article is about why new(er) languages aren't going to put a dent in Java's user base.

  33. Ruby and Python making Java die? Ha! by Cyberax · · Score: 1, Interesting

    Sorry, but this article presumes too much.

    Python and Ruby are not going to push Java away. For one thing, they are SLOW which automatically disqualifies them in a lot of areas (like high-performance computing). Also, Python interpreter is STILL single-threaded.

    Besides, JVM can serve as a platform for many languages. My favorite one is Scala (which is now often deemed as a 'Java killer').

    1. Re:Ruby and Python making Java die? Ha! by amccaf1 · · Score: 2, Insightful

      Sorry, but this article presumes too much.

      Python and Ruby are not going to push Java away.
      I think you are actually agreeing with the article.

      TFA:

      Lately I seem to find everywhere lots of articles about the imminent dismissal of Java and its replacement with the scripting language of the day or sometimes with other compiled languages.
      No, that is not gonna happen.
      --
      "Flag on the moon. How did it get there?"
    2. Re:Ruby and Python making Java die? Ha! by Anonymous Coward · · Score: 0

      Python and Ruby... are SLOW Of course, that's a feature of a given implementation rather than a language, but it is a valid concern today, moreso than it is with Java. But if we brush that aside and ask which language works better for large projects and is easiest to use... well, I'll leave that up to you. I think that with new compilers with better room for optimisation (eg, Pypy), this might not be a problem for much longer.

      which automatically disqualifies them in a lot of areas (like high-performance computing). Well, if you're talking serious HPC, I guess you're right. I don't know of any number crunchers running Ruby. On the flipside, it doesn't seem to be an area that Java is too big in either. Cray, for example, do not ship an auto-distributing JVM or Java compiler with their environments, last I checked.

      Also, Python interpreter is STILL single-threaded. As most python programmers will tell you, this isn't as much of a problem as people make it out to be. Threading happens to be a pretty ordinary way of expressing parallelism. With the pyprocessing module that will come with 2.6/3.0, there will be a thread-like API for interacting with several python processes in the standard library, and some special objects to take care of data sharing.

      Further, using threaded extensions (via the C-API or cython/pyrex) is often a great way to get the required parallelism, and where it belongs- in the code that needs to be carefully optimised C.

      Besides, JVM can serve as a platform for many languages. Absolutely true. Another example is Pypy :)
    3. Re:Ruby and Python making Java die? Ha! by jobin · · Score: 1

      they are SLOW which automatically disqualifies them in a lot of areas (like high-performance computing) When was the last time you saw Java used for high-performance computing?
    4. Re:Ruby and Python making Java die? Ha! by Cyberax · · Score: 1

      Yesterday.

      Java works just fine for a lot of folks - it's slower than C++ but it's easier to implement some things in Java (GC helps a lot).

    5. Re:Ruby and Python making Java die? Ha! by DragonWriter · · Score: 1

      Sorry, but this article presumes too much.

      Python and Ruby are not going to push Java away.


      Um, RTFA. That's exactly what the article is saying when its says that they will make Java die "of old age" many, many years from now.

      For one thing, they are SLOW which automatically disqualifies them in a lot of areas (like high-performance computing).


      I'm not sure that's really all that relevant to their ability to compete with Java, which isn't exactly the language of choice for high-performance computing.

      Also, Python interpreter is STILL single-threaded.


      The production-ready (Ruby 1.8) main Ruby interpreter is single-(native)-threaded, and uses green threads for concurrency. The Python interpreter uses multiple native threads, but uses a "global interpreter lock" that allows only one of the threads it controls to run at a time (this is the same approach used by the Ruby 1.9 interpreter; JRuby, IIRC, uses Java threads [which in turn are usually -- always? -- native threads] without a GIL; and the Rubinius VM looks to use green threads at least initially, but is being designed with a multi-VM IPC mechanism that will provide an means of leverage multicore systems.)
  34. Java's not going to die by vivin · · Score: 5, Insightful

    I just started at a new job at the beginning of this year after quitting from my last job where I barely got to do any programming. The place where I work now is a Java shop. I was getting back to Java programming after a hiatus of a few years. For the last few years I mostly doing Perl with a smattering of C (PHP and Javascript on occasion). My experience with Java was mainly from college and a few odd projects I did here and there. The language had changed quite a bit over the last few years and to be honest, I surprised myself by being happy to get back to it (I had some sort of vague dislike for it for a period of time).

    The company sponsored a trip to JavaOne at San Francisco earlier this month, for the Dev Team. I also got to go. This was my first time at JavaOne. It was amazing, exciting, and I learnt a LOT of new stuff. The main thing I got from there was that Java, far from being a programming language, is also a platform. There are a lot of new things being built on TOP of Java. For example, Groovy, and JavaFX. Java now has excellent support and frameworks to roll your OWN domain-specific languages.

    Python and Ruby are not going to push Java out of the way. For example, you have mergers of Java with these languages (Jython and JRuby). Essentially you have Python and Ruby using Java resources and libraries. I think instead of "dying", Java is just going to evolve into a stable platform that lets you build stuff on top of it.

    --
    Vivin Suresh Paliath
    http://vivin.net

    I like
    1. Re:Java's not going to die by Z00L00K · · Score: 1
      Java will probably die eventually, but that's not tomorrow.

      And before that happens we will see a lot of new strange languages around. Brainfuck and Whitespace comes to mind.

      In my opinion - one component that's essential for a language to be successful is that it has to be able to allow for easy low-level access as well as interfacing with databases.

      JNI in Java is maybe not the easiest thing to use when accessing hardware or other low-level routines, but it works. And you have the JDBC support in Java.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    2. Re:Java's not going to die by DragonWriter · · Score: 1

      For example, you have mergers of Java with these languages (Jython and JRuby).


      JRuby is not a "merger" of the Java and Ruby languages. It is an implementation of the Ruby language for the Java platform.
    3. Re:Java's not going to die by Anonymous Coward · · Score: 0

      Java as a platform is right. Java as a language is hated for good reason. The LISP fans out there now have a new toy to play with: see www.clojure.org

      Don't miss these eloquent video seminars by Rich Hickey, the creator of Clojure.

      http://clojure.blip.tv

    4. Re:Java's not going to die by syousef · · Score: 1

      Careful not to fall for the hype. There's a lot of Java code that is a horrible out of control mess. I'd include some of the most widely used J2EE web libraries. Spring is out of hand. Hibernate is a mess that makes anything complex a nightmare and adds its own complexity. Struts is all but dead thanks to Spring MVC...everything is a flavour. Every new version breaks compatibility with the old. Every time I hear how wonderful a new version or feature is I think about what it broke and how that feature's about to be abused to make spaghetti code that'd put a BASIC programmer or an obscure code competition winner to shame.

      What you have to ask yourself about anything new?
      - What advantages does it give me? (Can I do something I couldn't before, or can I do something more easily?)
      - What are the tradeoffs? (What's it going to cost me? Is it worth the learning curve?)
      - How will a good developer leverage it?
      - How will a bad developer abuse it?
      - What does this bozo trying to convince me it's fantastic have to gain if I adopt it?

      A nice dose of cynacism is important if you don't want to end up with a mess of projects in a mess of different technology that was going to be the next big thing.

      I haven't look at it carefully but from a cursory analysis Groovy looks awful to me.

      --
      These posts express my own personal views, not those of my employer
  35. A language is good if it's useful. by Richard+Steiner · · Score: 1

    None of the new languages are useful in legacy environments unless someone ports compilers for those languages, so programmers in those environments tend to have a different definition of "useful" than Linux developers. :-)

    However, it all comes down to the same things: Will the language do what I want? Do I already know it or can I easily learn it? If I end up leaving, is it supportable by someone else? Etc.

    --
    Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
    The Theorem Theorem: If If, Then Then.
  36. Expert@work ... by foobsr · · Score: 3, Funny

    TFA: "Some languages made strange mistakes. For example Python is a great language but the idea of using indentation as block demarcation really is a cannon ball chained to its feet. While most of the pythonistas defend this idea with a lot of energy, the truth is this feature makes it really a dangerous tool in big, world wide distributed projects - and most important enterprise projects are big and distributed."

    Elsewhere: "Python Creator Guido van Rossum now working at Google"

    Well. Now I finally know how Google is dangerous.

    CC.

    --
    TaijiQuan (Huang, 5 loosenings)
    1. Re:Expert@work ... by Chapter80 · · Score: 1

      "Python Creator Guido van Rossum now working at Google"
      Thanks for the news. Richard Prior died too!
    2. Re:Expert@work ... by Chapter80 · · Score: 1

      Please disregard the misspelling of the dead guy's last name in the pryor posting.

  37. the school by hugortega · · Score: 1

    there are many colleges with microsoft oriented stuff (I do not want to imagine the reason) ... ergo, many people is educated with a short range of options and ideas such as ".net is the only and true way"

  38. What makes a programming language successful? by pokeyburro · · Score: 3, Insightful

    What makes a programming language successful?

    Same thing that makes a religion successful. Adherents.

    --
    Lately democracy seems to be based on the skybox, the Happy Meal box, the X-box, and the idiot box.
    1. Re:What makes a programming language successful? by brewstate · · Score: 1

      What makes a programming language successful? Same thing that makes a religion successful. Adherents. And kewl white sneakers and jogging suits.
    2. Re:What makes a programming language successful? by bsDaemon · · Score: 2, Interesting

      yes, but magic incantations in C are more likely to produce real-world results. The TechnoGods help those who help themselves, after all.

    3. Re:What makes a programming language successful? by Anonymous Coward · · Score: 0

      Amen, brother!

    4. Re:What makes a programming language successful? by PHPfanboy · · Score: 1

      No, what makes religion successful is fear, surprise, ruthless efficiency, an almost fanatical devotion to the Pope, and nice red uniforms....

      --
      29 mpg. YMMV.
    5. Re:What makes a programming language successful? by Anonymous Coward · · Score: 0

      That's the definition of success, not the reason for it.

  39. Comment removed by account_deleted · · Score: 5, Insightful

    Comment removed based on user account deletion

  40. Another one bites the dust... by Smith55js · · Score: 1, Offtopic

    Every time Slashdot posts a link to an article on another website, that site gets hammered and (usually) goes down due to bandwidth being exceeded. Maybe Slashdot should adopt a policy of copying the article or at least, informing the webhost of the site you're about to shut down that a link will be posted.

    --
    ~smith55js
    1. Re:Another one bites the dust... by Anonymous Coward · · Score: 0

      Wow, I never noticed that...maybe you should write a paper on the dynamics of this phenomenon and call it The Smith55js effect or something.

    2. Re:Another one bites the dust... by AutopsyReport · · Score: 1

      Give him a break... he's from Soviet Russia, you insensitive clod!

      --

      For he today that sheds his blood with me shall be my brother.

  41. Re:Article is slashdotted, can someone post a copy by Anonymous Coward · · Score: 1, Informative

    Good old google. It has a cached copy, here: http://tinyurl.com/6qo4nh

  42. I'm looking for a serious answer to this topic by SendBot · · Score: 1

    seriously, what specifically are strong features for a language? ANY language, not just php,perl,c,java,python,ruby,prolog, etc, etc, ad nauseum.

    I find php interesting for being interpreted and therefore having the ability to call functions by name at runtime. Is this actually useful? Not to me, but maybe I don't know a good application for that feature.

    Semaphore constructs, useful base libraries, concise solutions to common problems...

    I'm really curious to know, slashdot audience, what FEATURES make languages good or useful, and in what languages do you find these features?

    1. Re:I'm looking for a serious answer to this topic by nickyj · · Score: 1

      Libraries and Documentation. Those two are what make a language successful. The better those two are the better the language gets. That's why I like Perl. There are so many libraries/modules out there that if you have an idea for a function, it's probably already written (probably more than one way), and you can modify it to your needs also. The docs are usually very clear and give examples. I've had no trouble teaching people about Perl and I have had no trouble learning it, alone, from a book or website.

      --
      Causing Chaos Everywhere,
      Nik J.
      The strange world of a loner, in a populous city, drowning in society
    2. Re:I'm looking for a serious answer to this topic by Grapedrink · · Score: 1

      Simply put, the language is consistent and doesn't force any obvious wtfs, leaving the wtf creation in the hands of the developer. I look for the following:

      -Does it accomplish its base characteristics without falling down? i.e. if it's object oriented, how easy is it to implement classical concepts? If it's functional, is it truly or just some lackluster hack of a language? etc. PHP is one language that fails miserably at being object oriented because it was really procedural before and despite changes, causes design wtfs because of the way the core libraries are implemented. C# is becoming another because it's throwing in language features from other sub-types of languages that don't belong even if they are nice to have, which brings me to my next point...

      -Purity. It's really nice if the language sticks to what it does and doesn't try to be a swiss army knife. Often what happens in the square peg in round hole syndrome. It's common when trying to take a feature from a dynamically typed language into a statically typed language. All the sudden I can completely circumvent and break the type system if I want.

      -Consistency. I want the core to be designed the same and not look like I just pulled in whatever I found on the street. Nothing is worse than unwanted side-effects and having to dig through mounds of docs because the language has no direction internally.

      -Stability. Don't change the core libraries and functionalities all the time. Pick something, stick with it until you can do major releases. If the changes need to be so drastic, consider simply inventing a new language and enabling interoperability with old code through some kind of api, vm, or layer.

      -Does it support standards? The major one I see a lot is almost no/buggy unicode/utf-8 support. In the world of globalization, there's no longer a support for this.

      -Development environment. Is it easy to use? Are there tools? Intellisense is always a great one for productivity (no, it's not a crutch). Generally, I don't want to be fighting my environment to write code. Let me fight the code instead if I must have a battle.

      -Configuration Management/Build Tools. If your language needs to be compiled, this is especially relevant. Code is worthless if you can't introduce configuration management practices to handle real-world situations like versioning. You could of course build your own CM/build tools, but it's nice to not have to do this. It's also nice is the language itself doesn't produce wtfs in this area. I'm looking at you C++ developers.

      -Portable. This is low priority for me, but important depending on the job. Nice to know that you're not locked into an environment, OS, or hardware.

      -Quality of core libraries. Honestly, do I really want to spend all my time writing string functions that don't suck? Considering that the general practice in code is to build upon and expand existing code by adding new code that uses your implementations, it's great if the default implementation isn't a joke.

      -Still updated? Don't want abandonware.

      -Performance. Depends on the task you need it for, but could determine if you use it or not. I wouldn't pick ruby or lua to write a 3d renderer.

      -Can I hire people to implement it? I disagree with this point entirely because I don't want to work with people that are incapable of learning. I'd rather hire someone smart who doesn't know xyz language. Bias aside, some companies don't have the time luxury, but that's a wtf in itself. How many people have hired a Java "expert" only to find how badly the person sucks. Better imo to look for all around talent.

      -Resources/Books? I don't care about this one but some do. It's nice to have, but if I have the source to the language, I can figure most things out pretty quick. Smalltalk is a nice one here because if you want to figure out the best way to do something, just look at the so called core libraries for good examples in many cases. In a similar sense, the material is grossly lacking and out of date compared to PHP.

      I'm sure there are way more I can think of, but this is off the top of my head. I think it's a good start.

    3. Re:I'm looking for a serious answer to this topic by jcast · · Score: 1

      Ooh, I know this one! The strongest feature possessed by every language is Turing-completeness.

      --
      There are reasons why democracy does not work nearly as well as capitalism.
      -- David D. Friedman
  43. Brilliant by Alistair+Hutton · · Score: 1

    A language analysis that slams Python for using indentation to delimit blocks. Oooooh, how 20th century.

    --
    Puzzle Daze is now my job
  44. All Programming Languages Suck by Anonymous Coward · · Score: 0

    No exception. If any of them were any good, there wouldn't be so many. They suck primarily because the computer itself is fundamentally flawed. Computer science has shot itself in the foot and now that parallel programming is all the rage, the computer industry is paying the consequences. It's time for all of you old computer geeks to retire. You messed up big time. There is better way to design and program computers.

    1. Re:All Programming Languages Suck by SQLGuru · · Score: 4, Funny

      So, basically, what you're saying here is: GET ON MY LAWN! or something like that?

    2. Re:All Programming Languages Suck by Applekid · · Score: 1

      They suck primarily because the computer itself is fundamentally flawed [blogspot.com]. Not that pseudo-mathematical blog again. How come every discussion of programming langauges manages to dredge up Louis Savain and rebelscience.blogspot.com? Home of rediculous claims such as "COSA will usher in the age of programming for the masses and the era of the custom operating system: drag'm and drop'm.", "The fact remains that . . . time cannot change by definition and, as a result, nothing can move in spacetime.", and my personal favorite, "Functional Programming Is an Abomination".

      You did well to post as AC, but not well enough to not remind me of those crackpot sites that are absolutely sure there's a huge conspiracy against the science behind making free energy out of nothing and all the old men are holding it back.
      --
      More Twoson than Cupertino
    3. Re:All Programming Languages Suck by cjonslashdot · · Score: 3, Interesting

      I agree. Procedural programming is the fundamental problem. Arguing about which procedural language will succeed is like Neanderthals arguing which kind of stone will succeed the one before it. And OO languages are procedural languages in disguise. As Anonymous Coward says, we need to get out of the procedural trap. This is why programs have so many bugs. Let's stop hacking and looking for the next great tool, the next fad, and what our friends are using. Let's look at what approach is truly best.

    4. Re:All Programming Languages Suck by Anonymous Coward · · Score: 0

      Why post? Because everyone deserves their 15 minutes of flame. (C)2006-2008 by Layne Robinson

      This is funny. I must be blessed, then. I get hours and, sometimes, days of flame and abuse when I post under my own name. LOL.

    5. Re:All Programming Languages Suck by Anonymous Coward · · Score: 0

      And OO languages are procedural languages in disguise.

      Not really, no. Object Orientation has its roots in functional programming, and although the paradigm has been used extensively by otherwise procedural languages, "extreme-OO" languages (as somebody called them elsewhere in the discussion for this article) like SmallTalk, Python, and Ruby incorporate functional programming constructs, as they work together naturally. The first object system was written in Lisp, and just about every Schemer has written one.

      Erlang is probably the current pinnacle of this approach. Functional, highly and automatically parallelizable, using objects to atomically encapsulate state. Since state is encapsulated atomically, the interpreter is assured that function calls cause no side-effects, which means that parallelization is virtually automatic. Erlang also does some very neat things if you have multiple machines with a fast network between them, like treating remote objects the same as local ones, so that computation can be dispatched to other machines without restarting a current process. This is probably the biggest reason why Nokia uses it for their telephone network.

    6. Re:All Programming Languages Suck by poopdeville · · Score: 1

      Ericsson

      --
      After all, I am strangely colored.
    7. Re:All Programming Languages Suck by Anonymous Coward · · Score: 0

      Let's look at what approach is truly best.

      Yes. The best approach, however, is to reinvent computing from scratch. The current approach is broken beyond repair.

    8. Re:All Programming Languages Suck by MOBE2001 · · Score: 2, Insightful

      Since state is encapsulated atomically, the interpreter is assured that function calls cause no side-effects,

      This is an often repeated claim of Erlang fanatics. The truth is that, in Erlang, the functions themselves are the states. To say that there are no side effects in Erlang is a lie. Functions affect other functions (states) and if they are called in the wrong order, bad things will happen. Another problem with Erlang and functional programming in general, is that it does not support fine-grain parallelism. There are a lot of highly useful things that cannot be properly parallelized without fine-grain parallel processing, things like search and sort routines (I am still waiting for an effective parallel quick sort routine in Erlang). A third problem with Erlang is that, like multithreading, it is not deterministic. Determinism an essential requirement of reliable software. In addition, functional programming is not intuitive and many programmers find it hard to get used ot. So you people in Sweden and at Ericsson should stop promoting Erlang as the solution to the parallel programming problem. It is not.

    9. Re:All Programming Languages Suck by msromike · · Score: 1

      Here is a "troll" that posts a well reasoned, gramatically correct comment. Then he adds a link to an article that explains his premise in detail. I would like to see a well reasoned, gramtically correct explantion of the reasoing that led this to be modded a troll.

    10. Re:All Programming Languages Suck by Anonymous Coward · · Score: 0

      Here is a "troll" that posts a well reasoned, gramatically correct comment. Then he adds a link to an article that explains his premise in detail. I would like to see a well reasoned, gramtically correct explantion of the reasoing that led this to be modded a troll.

      Old computer geeks don't like to be told that they're old, irrelevant and wrong. :-D After all, they are the smartest group of people on earth, right? Consider also that most moderators are old, retired and they have a lot of time on their hands + mod points. ahahaha...

    11. Re:All Programming Languages Suck by ORBAT · · Score: 1

      You should gang up with Gene Ray and produce the Cubic Theory of Computation.
      "Functional programming is evil! Education destroys reactive brain, reducing mentality to geek level. It's near impossible to change an Educated OBJECT ORIENTATION Geek."

    12. Re:All Programming Languages Suck by Bastard+of+Subhumani · · Score: 1

      Ones and zeroes are too restrictive. We should do everything in trinary.

      --
      Only three things are certain; death, taxes, and apocryphal quotations - Ben Franklin.
    13. Re:All Programming Languages Suck by Eli+Gottlieb · · Score: 1

      This troll posts that same notion with a link to a copy-and-pasted blog post on his "signal-based computing" with every single article on programming-language issues. Occasionally someone debates him about, for example, how we encode information and computation in his new paradigm, and then he sort of crumbles. So we start modding him down to "troll", because we've seen it before.

    14. Re:All Programming Languages Suck by Anonymous Coward · · Score: 0

      Since state is encapsulated atomically, the interpreter is assured that function calls cause no side-effects,

      This is an often repeated claim of Erlang fanatics. The truth is that, in Erlang, the functions themselves are the states. To say that there are no side effects in Erlang is a lie. Functions affect other functions (states) and if they are called in the wrong order, bad things will happen.

      Functions do not affect other functions in functional programming languages. Function values do. But guess what -- if a function value for a function f affects a function g, you HAVE TO COMPUTE f'S VALUE FIRST NO MATTER WHAT. Indeed, the interpreter does that for you.

      I said "STATE IS ENCAPSULATED ATOMICALLY." Obviously, calling functions out of order will break a program. Obviously, the Erlang interpreter has much more leeway in the order in which functions are executed than, say gcc, because the "STATE" that is encapsulated by a functional closure is guaranteed to not interact with other functions' internal state. It can't even modify its "own" internal state across invocations.

      "Order of execution" is a red herring anyway. The interpreter determines the order in which functions will be evaluated, not the programmer.

      Determinism is a red herring. Just because the internal service thread invocations are out of the programmer's control (in the usual case) does not mean that a function's return value at a given input is non-deterministic. Nor does the functional paradigm indicate a non-deterministic Turing machine, even in principle.

  45. Its partly the API... by itsdapead · · Score: 3, Interesting

    Obviously there's more than one factor to a language's success, but the breadth and quality of the libraries and application frameworks is a huge factor - if you "know a bit" about programming then I'd say that learning your way around a new API is just as much work as learning a new language.

    A big plus for C was that it always came with a substantial standard ("de-facto" to start with, then ISO) library based on the Unix API so it was great for writing portable programs - c.f. Pascal where ISTR the core language couldn't even open a named file. C++ was largely popularized by application frameworks like MFC and OWL, and Delphi did the same for Pascal.

    PHP is pretty fugly as a language but comes with a huge library of functions and add-ons that are just what the doctor ordered for web scripting - and when people talk about Ruby, do they really mean Ruby or do they mean Rails?

    I don't know about Python - it seems to be a secret society rather than a language and you can't join unless you pass this initiation test where someone tells you a corny joke (stolen from an ancient email circular about Unix and Makefiles) about a language which uses leading whitespace to delineate blocks. I always laugh and fail the test, so I've no idea what the real language is like. :-)

    --
    In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    1. Re:Its partly the API... by owlstead · · Score: 1

      "...you pass this indentation test..."

      There, fixed it for you.

      (did I pass?)

    2. Re:Its partly the API... by Anonymous Coward · · Score: 0
      I don't know about Python - it seems to be a secret society rather than a language and you can't join unless you pass this initiation test where someone tells you a corny joke (stolen from an ancient email circular about Unix and Makefiles) about a language which uses leading whitespace to delineate blocks. I always laugh and fail the test, so I've no idea what the real language is like. :-)

      You know, if you'd stop trying to be funny and actually write some programs in the language, you might actually like it.

    3. Re:Its partly the API... by daemonburrito · · Score: 1

      When was the last time you looked at php? The "php is ugly but useful for the web because of its built-in functions" meme is from 2 releases ago (php3).

      I've been using php 5.2 for largish web projects for a while now, and find its grammar and object model to be really nice. Seriously.

    4. Re:Its partly the API... by itsdapead · · Score: 1

      When was the last time you looked at php? The "php is ugly but useful for the web because of its built-in functions" meme is from 2 releases ago (php3).

      Yes, PHP5 is a vastly better language - particularly in terms of OOP - than PHP3, and the newer libraries like PDO and XML are more object oriented.

      However - this thread is about success and it was the "ugly-but useful" PHP of 2-3 releases ago which won the popularity contest and ensured that PHP was a fixture of any half-decent web hosting service.

      An issue with both PHP and MySQL is that there's the version with all the nice features and new libraries or there is the old-fangled "flawed but useful" version with the ubiquitous support. If you "don't got root" on your target system you can often find yourself stuck with the latter.

      --
      In a survey of 100 programmers, 111111 thought that duck-typing was a good idea.
    5. Re:Its partly the API... by daemonburrito · · Score: 1

      You, sir, have a point.

      I just felt like I had to stick up for php5. The transformation between php 4 and 5 was remarkable. It is a real language now, with enough native oop features to create real grown-up apis and frameworks (see Zend Framework).

  46. Java won't die. by willisbueller · · Score: 1

    It took me till halfway through my soft eng. degree to realize, but java is an engineer's language. It implements MIS consisely. Other languages have their place as have been covered a million times (Except for PHP. God won't someone somehow kill PHP), but java is just excellent for the engineering process.

  47. Here's the article by cmburns69 · · Score: 1

    I had to reload a bunch to get past the "Maximum concurrency of 10" thing, but I finally made it. So here it is for everyone else who's had problems:

    Lately I seem to find everywhere lots of articles about the imminent dismissal of Java and its replacement with the scripting language of the day or sometimes with other compiled languages.
    No, that is not gonna happen. Java is gonna die eventually of old age many many years from now.
    I will share the reasoning behind my statement. Let's first look at some metrics.

    Language popularity status as of May 2008

    For this I am gonna use the TIOBE index (tiobe.com) and the nice graphs at langpop.com. I know lots of people don't like them because their statistics are based on search engine results but I think they are a reasonable fair indicator of popularity.

    Facts from the TIOBE index:

    TIOBE Index Top 20

    What I find significant here is the huge share the "C like syntax" languages have.

    C (15.292) + C++ (10.484) + Java (20.176) + C# (3.963) = 49.915%

    This means 4 languages get half of all the attention on the web.
    If we add PHP (10.637) here (somehow uses a similar syntax) we get 60.552%

    As a result we can extract:

    Reason number 1: Syntax is very important because it builds on previous knowledge. Also similar syntax means similar concepts. Programmers have to make less effort to learn the new syntax, can reuse the old concepts and thus they can concentrate on understanding the new concepts.

    Let's look at a group of 10 challengers:

    Python (4.613) + Ruby (2.851) + Lisp/Scheme (0.449) + Lua (0.393) + SmallTalk (0.138) +
    Haskell (0.137) + Groovy (0.131) + Erlang (0.110) + Caml (0.090) + Scala (0.073) = 8.985%

    This is less than the attention Visual Basic gets: 10.782% and leads us to...

    TIOBE Index Top 21-50Reason number 2: Too much noise is distracting. Programmers are busy and learning 10 languages to the level where they can evaluate them and make an educated decision is too much effort. The fact that most of these languages have a different syntax and introduce different (sometimes radically different) concepts doesn't help either.

    Looking at the trend for the last 7 years we can see a pretty flat evolution in popularity for most of the languages. There are a few exceptions like the decline of Perl but nothing really is earth shattering. There are seasonal variations but in long term nothing seems to change.

    TIOBE Trend

    This shows that while various languages catch the mind of the programmer for a short time, they are put back on the shelf pretty fast. This might be caused by the lack of opportunity to use them in real life projects. Most of the programmers in the world work on ongoing projects.

    Reason number 3: Lack of pressure on the programmers to switch. The market is pretty stable, the existing languages work pretty well and the management doesn't push programmers to learn new languages.

    Number of new projects started

    Looking at another site that does language popularity analysis, langpop.com, we see a slightly different view but the end result is almost the same from the point of view of challenger languages.
    What I found interesting here was the analysis regarding new projects started in various languages. The sources for information are Freshmeat.net and Google Code. The results show a clear preference for C/C++/Java with Python getting some attention.

    Reason number 4: Challenger languages don't seem to catch momentum in order to create an avalanche of new projects started with them. This can be again due to the fact that they spread thin when they are evaluated. They are too many.

    Other interesting charts at langpop.com are those about books on programming languages at amazon.com and about language discussions statistics. Book writers write about subjects that have a chance to sell. On the other hand a lot of discussion about all theses new languages takes place online. One thing I noticed in these discussio

    --
    Online Starcraft RPG? At
    Dietary fiber is like asynchronous IO-- Non-blocking!
  48. Programming Languages Evolve around their Purpose by BlueBoxSW.com · · Score: 1

    We all know a dozen languages here, and we all know they have overlapping roots, but are focused on different things.

    Each new language tries to take what's good about the past, but re-focuses on the new type of problem. At the same time, it creates or opens itself up to new issues, which take some time to resolve. I find the third generation of a programming language usually hits the mark.

    * Generation 1 - Hot, New, and Filled with Hype for what it does, but kind of buggy

    * Generation 2 - Less hype, but better adept at filling the holes in Generation 1.

    * Generation 3 - Almost no hype, but solid language. Very useful features added that weren't predicted in Generation 1

  49. Irony by w3woody · · Score: 4, Interesting

    Ironically the biggest problem I've had with Java is that, because it is relatively easy for developers to write code using an IDE such as Eclipse or NetBeans in the core language itself, but there are tons of various classes even within the core JRE, many programmers I know who write Java have created a sort of "ecosystem" of artificial complexity.

    For example, I worked on one project which was a client/server system which handled maybe 10 transactions per second, with each transaction translating into maybe one or two table updates. The application could have been put together using something simple, like Tomcat and MySQL on the back-end, and something easy to use like an XML/RPC link to the client side. (There were only something like 10 remote procedure calls being made, and this was an internal application, which means the total audience was perhaps 100 people.)

    But rather than keep the whole thing simple, we had a whole bunch of "Architecture Astronaut" wannabes who started tossing in third party frameworks like there was no yesterday, without carefully thinking if the framework was needed, and if so, how best to integrate the framework. Before we knew it, the server was broken into 8 separate EJBs, Hibernate and Spring were called in to handle the server side coding framework, and the entire build process was so complicated it no longer could be run or debugged within an IDE--apparently someone on the project didn't understand ant and used makefiles for part of the build. And to top it off, because so many different frameworks were thrown in for no good reason I can determine (there were something like 40 third-party jar files in the build directory), there were all sorts of runtime problems as each jar file was not designed or tested on the full range of Java 1.4 - 6.0 environments.

    Now if this was my first exposure to Java, I'd say that while the core language itself wasn't bad, the entire Java ecosystem sucked hard core. But no; it was the developers: rather than keep it simple, they used the 'refactor' button in NetBeans about 100 times too many, until what should have been a one person-three month job turned into half a million lines of crap, that, to their credit, limped along okay.

    1. Re:Irony by Anonymous Coward · · Score: 1, Interesting

      > the server was broken into 8 separate EJBs, Hibernate and Spring were called in to handle the server side

      And some kid comes along and replaces it all with simple and easy understand PHP in three weeks. I made a good living for about four years replacing bloated Java systems that had failed with a triaged (toss features that weren't necessary) version in PHP for a fraction of the man hours. I got pretty good at replacing systems at less than 1% of the original man-hours. With the four programmers I had we successfully replaced nine relatively large systems written in Java at an average of 1/100 the time spent on the failed system.

      > the entire build process was so complicated it no longer could be run or debugged within an IDE

      Funny you should mention build problems, I sold my part of the PHP business due to a dispute with my partner, and I am now working as a contractor to help fix problems with failing C#/.NET web-based systems. I'm seeing even small companies that can't even compile their software in Visual Studio. Even msbuild at the command line is failing more often than not for some of the larger projects. Projects that should take two minutes (going by how long the number of lines would take to compile in Java) sometimes take four hours or more to compile with .NET. At the moment I'm trying to fix a .NET system with 31k files that takes more than two hours to compile when it does compile. A large number of references and libraries absolutely screws-up the crappy Microsoft toolset. Java was bad in this regard, but C#/.NET is quickly becoming a much, much bigger nightmare because the number of libraries and the poor tools. I forsee this next career being very lucrative. You will never go broke either fixing Microsoft's problems or fixing systems that developers overcomplicate. I'm doing both.

    2. Re:Irony by owlstead · · Score: 1

      Yes, well, this happens to any language + set of API's. I won't defend Java here, there are way too many web-frameworks and data persistence frameworks to choose from. This happens when people find a gap in usability and try to fill it, each in a different way with slightly different benefits.

      The good thing about Java is that you could just stick to J2SE + J2EE and be done with it. You should be able to do most things without the problem, but you would miss out on the benefits the other frameworks may offer. Most of the time you will just have to wait a bit and the good functionality gets incorporated in the API's and language features, and - most of the time - in a very nice way.

    3. Re:Irony by w3woody · · Score: 1

      For some reason, however, Java seems to have this massive explosion of frameworks, including huge numbers of frameworks that, as far as I can figure, do nothing but implement the core runtime library using someone else's theory on how they should be done.

    4. Re:Irony by owlstead · · Score: 1

      Yes, and it would be interesting to create a time-line with points where a new framework was created and for which reason. Most of the time a framework is created because something is very hard to do using the defined J2EE process. J2EE is updated continuously however, integrating e.g. hybernate functionality and other framework capabilities. It might not hurt just to stick to J2EE because you could do most things using J2EE.

      But the explosion of frameworks has happened, and I must admit that it is not easy to keep up with it. At least not when you spend most of your time doing J2SE + cryptography as I'm doing now.

  50. Depends on what you want ... by Anonymous Coward · · Score: 2, Funny

    PHP - Great if you want to get web apps up FAST.
    C++ - Great if you want to write OS-dependant apps.
    Java - Great if you want to hire a bus-load of CS majors fresh out of university tomorrow.
    C# - Great if you want to replace your old VB projects.
    Perl - Great if you want to keep your job intact, as no one else will ever able able to read your code.
    Python/Ruby - Great if you want to impress PHB's who buy into hype and buzz-words.

    That said, the fact that Google apps runs python may see a major shift from PHP in the next few years. It's the only reason I'm starting to learn it. So far, it seems to be a cross between "Perl I can read" and "not quite Java".

    (my captcha is develop ~ how apropos)

    1. Re:Depends on what you want ... by Anonymous Coward · · Score: 0

      What I like the most about python, is "their" homepage

  51. Oh No! by bledri · · Score: 2, Informative

    Essentially this means that Python isn't really feasible to write any larger system and expect it to hold water over several years, or even decades.

    Quick, sell your Google stock!

    There is a lot of solid Python code out there. The best way to write Python is to also write unit tests. Which is a good practice in any language.

    --
    Some privacy policy Slashdot.
  52. Web cashe by Anonymous Coward · · Score: 1, Informative
  53. Grace Hopper & John Backus didnt have by peter303 · · Score: 3, Informative

    John McCarthy did. They were inventors of COBOL, FORTRAN and LISP - three languages still in use from the 1950s.

    1. Re:Grace Hopper & John Backus didnt have by morgan_greywolf · · Score: 2, Funny

      They were inventors of COBOL, FORTRAN and LISP - three languages still in use from the 1950s.
      Yes, only by people who either have finger worn down to stubs, have difficulty forming complete sentences, or have worn out the ( and ) keys on their keyboards.
  54. The Graph by skeeto · · Score: 2, Informative

    I found it interesting in this graph in the article that, beginning around 2004, the popularity of Python closely follows the popularity of Delphi. Is this some kind of flaw in the methodology in how the data was collected, like too small a sample size (as Delphi has nothing to do with Python I think)? Or is there some overall pattern causing this? A few others are pretty close in some spots, too, in terms of first derivatives.

    Note that the server isn't really /.ed at the time I am writing this, but is throttling itself based on limitations of the hosting account (says only 10 concurrent servings). If you keep trying (aka refreshing the browser) you will get the image I linked to above.

    1. Re:The Graph by sploxx · · Score: 1

      Well, this behaviour can for example be explained by the popularity of a single another language having most of the change and affecting the popularity of the others in relative terms.

      Say delphi,python have '25% popularity' (whatever that means) in that chart and C++ has 50%.

      Now, if C++ popularity drops to 20% because its programmers leave the IT field, delphi and python will have a popularity of 40% afterwards if the amount of programmers voting for these didn't change.

  55. Knuth said that the most important thing is... by dapyx · · Score: 5, Funny
    ...the name!

    The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language.
    --Donald Knuth
    --
    I'm sorry, the number you have dialed is an imaginary number. Please rotate your phone 90 degrees and dial again.
    1. Re:Knuth said that the most important thing is... by ggvaidya · · Score: 1

      "What makes a programming language successful?"
      The Book Of Knuth: "A language will not succeed without a good name"

      That's it, I think. Discussion over. Slashdot can delete all the other posts now: we have An Answer, from The Wise Old One himself.

  56. My god People Know The Answer by guysmilee · · Score: 2, Funny

    My god People Know The Answer ... the answer is beyond simple ... and any other answer is simply BS ... 1.) Clear, simple, and familiar grammar/semantics in the core language. 2.) Simple well documented techniques for creating multiple domain specific extensions (i.e. libraries). 3.) Multi-platform compiler/interpreter support. Now stop wasting my time with this trivial crap ...

  57. Wow, I am a little Amazed by Stregano · · Score: 1, Flamebait

    I bet I can tell you alot about this person and I have only read the article. He is over 40 and has been programming for over 10 years. Possible associates degree, even more unlikely is it being higher. He has good information, but I deal with these people all the time, it is annoying, and now slashdot is putting his information up.

    Look, technology changes everyday. With the change in technology comes a change in everything around it, including programming languages. In order to be a good programmer, you have to know, and understand, many languages. It is your job. If you are unable to accept that, than it is time to either retire and let somebody else take your 100,000 salary or simply quit.

    The best language translators know more than two languages. I know that is a little bit of a different example, but it still proves the point I was trying to make. You need to be versatile in order to do your job. If all you do is program in COBOL, then talk to 1974, because they want their programming language back.

    I don't even like Java all that much, but know it, and know it well. I just don't like it because I do web based work and it is easier to do it in PHP. Speaking of PHP, the syntax is as similar to c++ as it is Java.

    Somebody wrote an article without doing their homework. Once a PHP script is done running, it is done, and you need to use additional resources, like AJAX or Javascript, in order to get something else to run afterwards, where-as C++, with clever coding, can continue to run, but that clever coding would be done within C++.

    Let me guess, your company wants to move from Python/COBOL/The Stone Age to Java, and you wrote an article to show why Java sucks? Guess what, you have to learn Java like all of us did in order to be successful. I have a Bachelor's in Computer Science without taking a single Java course, and I had to teach myself Java for my job.

    Your job as a computer programmer is to do what you are told in the language you are told to do it in. No wonder it is so hard for us younger people to get jobs programming. Mr. I don't want to learn a new language so I am going to cry about it, cry all you want, but in the end, you need to quit your job. I get frusterated with you old people now doing your job good enough and holding the positions us young people are looking for. We are hungry and looking for a job, you have been doing Python since computers were made from vaccuums and refuse to do anything but what you are doing. Leave you job, we could do your job better than you in a day.

    Every college kid we get in the company I work for does more than double the work load of any of you old people, and you old people do nothing but complain. Step down or shut up.
    (rant over)

    --
    The world is how you make it
    1. Re:Wow, I am a little Amazed by thepacketmaster · · Score: 2, Informative
      If anyone thinks COBOL is a dead language, simply because the current majority of programmers don't know it, think again. COBOL is alive and well, with new programs being made for it every day. Mainstream programs running on wintel/unix systems don't use it, but it is the choice for governments/banks/large organizations. Why? Because it has a history, it is stable and reliable, and it is simpler for someone unfamiliar with a program to learn how it works. Every cheque that is processed today still goes through a sorter powered by a COBOL system.

      As the author mentions, a new programming language is only useful if it addresses a much needed gap in other languages. Java addresses the gaps of memory management, complexity, and cross-platform. Java now has a huge install base, and is serving as a relatively stable language that can do whatever the imagination desires. It's maturing every version, giving it more credibility. It's pretty tough to compete with that.

      Learning a new language simply to follow a trend is the sign of inexperience (not youth). Old or young doesn't play into it (although you feel it does). If a new programming language does the exact same thing as another, there is no point to migrate to it. Time and costs simply don't warrant it.

      I can agree that learning several languages is an advantage. It helps focus your understanding of programming concepts by having to deal with them in different ways. But if you look people that know multiple languages, the languages are probably going to be from different categories: a low-level language, a high-level language, a scripting language, a compiled language, a web-friendly language, etc.

      Btw, the languages I know (and the order I learned them in) are: BASIC, Assembler, C, Unix Shell scripting, C++, Perl, PHP, Java, COBOL. (Yes, I just recently learned COBOL for a new job)

      --

      --

      Luck is just skill you didn't know you had.

  58. Re:Article is slashdotted, can someone post a copy by Bill,+Shooter+of+Bul · · Score: 1

    Yeah, the server must have been written in .

    --
    Well.. maybe. Or Maybe not. But Definitely not sort of.
  59. From TFA by Anonymous Coward · · Score: 1, Funny

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests: /2008/05/10/script-thy-java-app/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /feed/atom/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/

    If you are the owner of this website, you may need to upgrade to a more advanced plan.

  60. readability by lkcl · · Score: 1, Interesting

    BASIC and PASCAL etc. are of the "functional programming" ilke (as is SQL, but that's another story - look up "the vietnam of computer science" if you're interested and also http://advogato.org/article/964.html ).

    python falls into the same category as LISP, scheme and smalltalk: incredibly incredibly powerful.

    it is very difficult to write unreadable code in python, for two key reasons:

    1) the indentation method

    same number of tabs (or spaces) indicates a block - FORCES programmers to make their code "tidy". many programming languages are absolutely xxxxing awful and impossible to read due to inadequate use of white space.

    2) compactness and elegance.

    key to python's readability is the lack of messing about and the use of english words. LISP, SCHEME and SMALLTALK were all developed when space was at a premium. so, you kept the source file small by using as obtuse-as-possible a syntax.

    by the 90s, this was completely unnecessary, and so languages like python are not only highly readable, but also due to having similar OO capabilities as the other elegant languages (lisp, scheme, smalltalk) you can do more with less code.

    result: less code on-screen, therefore you don't end up wading through pages and pages of code.

    overall... there's just really... no comparison to any other programming language.

    _especially_ java.

    1. Re:readability by chromatic · · Score: 1

      it is very difficult to write unreadable code in python, for two key reasons:

      Neither of those two key reasons were consistent naming conventions, good factoring, short methods, logical encapsulation, intelligent use of domain concepts, high-level documentation, a comprehensive automated test suite, or any of a dozen other features which have much more to do with maintainable code than enforced indentation, which programs such as tidy can solve for other languages trivially.

      I'll raise you a counterpoint: variables which spring into existence automagically. That is not my favorite feature of Python.

    2. Re:readability by Just+Some+Guy · · Score: 3, Informative

      BASIC and PASCAL etc. are of the "functional programming" ilke

      BASIC and Pascal are procedural.

      as is SQL

      SQL is declarative.

      LISP, SCHEME and SMALLTALK were all developed when space was at a premium. so, you kept the source file small by using as obtuse-as-possible a syntax.

      That's not why they're that way at all.

      Python's a great language, but that's no reason to get sloppy about the details.

      --
      Dewey, what part of this looks like authorities should be involved?
    3. Re:readability by julesh · · Score: 1

      LISP, SCHEME and SMALLTALK were all developed when space was at a premium. so, you kept the source file small by using as obtuse-as-possible a syntax.

      While I take your point re LISP and Scheme, I must disagree regarding smalltalk. A stated design goal of the language, in fact, was to make it as readable as possible. The syntax of smalltalk is very simple, yes, but its use of keyword/value pairs instead of traditional 'list of expressions' for passing parameters to methods results in very readable code.

    4. Re:readability by drew · · Score: 1

      I think you meant to say that BASIC and PASCAL are Procedural Languages. Many people seem to assume that "functional language" means the same as "non-OO language", but it's not even close. Functional languages are languages like ML and Haskell. Many other languages have features that allow them to be used as functional languages, like LISP or JavaScript (and probably Python, although I don't know it well enough to say for sure).

      It's possible to write utter s*** in any language, and Python is no exception. That the use of syntactically significant whitespace helps in any way to prevent unreadable code is possibly the silliest thing I've heard all week. Cleaning up poor indentation and spacing in any language is so trivially easy as to be laughable, and since whitespace is not significant in any other programming language that I am aware of, if you feel that they aren't using enough whitespace to be readable, you're free to add more to your hearts content. (Note that I am not criticizing Python's use of whitespace, just the claim that that alone helps make the code any more readable.)

      Regarding your second point, while Python is more compact than, say C# or Java, it's not really any different in that respect than Ruby, Perl, PHP, JavaScript, or any number of other interpreted languages. And yet some of those languages (like Ruby) have a great reputation for producing readable code, while others (Perl, PHP) have awful reputations. But it's still possible to write readable code in any of those languages, and equally possible to write unreadable code in Python.

      --
      If I don't put anything here, will anyone recognize me anymore?
  61. FFS by Pedrito · · Score: 3, Insightful

    Java isn't going to die any more than C. Nor will Python or Ruby die any time in the foreseeable future.

    Anyone can play Devil's Advocate and make one language look better than another from some point of view, but the fact is, different languages have their different pluses and minuses. I'm sure Ruby and Python have their pluses, but I don't see them being used NEARLY as much as Java. And take into consideration that Ruby has been around just as long as Java and Python has 4 years on both languages. If they were going to kick Java's ass, it would have happened by now.

    I suspect the article is wishful thinking (though I can't read it 'cause the site didn't survive this post). I don't know why people have to make such a big deal about this stuff anyway. Languages evolve and new languages and paradigms will be created in the future. Computer programming is still in its infancy. There's a good possibility that 20-30 years down the road, none of these languages will be around. They may be completely replaced by some far more powerful paradigm we can't even imagine yet.

    These kinds of predictions are old and pointless.

    1. Re:FFS by DavidHumus · · Score: 1

      APL is still around - there's at least four companies that sell their own version of an interpreter - and it's been dying for at least the last thirty years.

  62. Java Cannot be 100% Replaced by wigginz · · Score: 3, Insightful

    What's wrong with Java? Sure I can't slap together a web 2.0 site in 1 day like I could with .net 3.0 or Ruby, but they can't enable a high availability transactional based middle ware system. Java has so many great uses beyond simple web apps, it will always have a place in the enterprise and mobile devices.

    --
    You may find my appearance and demeanor foolish, but it is you who plays the fool.
    1. Re:Java Cannot be 100% Replaced by Anonymous Coward · · Score: 0

      You sure are right about that, another use for Java is BD-J (Blu-ray Disc Java) required to be supported by new blue-ray disc players. So I don't see java going away anytime soon.

      Also for computers, the upcoming Java SE 6 Update 10 will improve the java clientside a lot. On the applet side, java will run as a separate process outside the browserspace, so no more memory limit for applets. JRE installation will be a lot faster since you only need to download a small microkernel (500kb) which then downloads the rest of the jre as needed. On Windows, java will be using Direct3D for hardware accelerated drawing of GUIs etc. Quick start, new look and feel and other stuff. Exciting times ahead indeed!

      And as for a nice technology preview, head over to bytonic.de and launch up the Jake2 webstart for OpenGL accelerated quake...in Java!

  63. what is good by goffster · · Score: 1, Interesting

    A good programming language allows you to
    solve your programming
    problem with a minimum of effort.

    Solving your problem means a lot if different things.

    In my opinion, software that forms the foundation of other software should be strongly typed. Maintenance becomes a nightmare without such typing.

    For end-programmer applications, I would think that anything that allows you to be done as quickly as possible is best.

  64. All Programming Languages Suck by Anonymous Coward · · Score: 0, Troll

    No exception. If any of them were any good, there wouldn't be so many. They suck primarily because the computer itself is fundamentally flawed [blogspot.com]. Computer science has shot itself in the foot and now that parallel programming is all the rage, the computer industry is paying the consequences. It's time for all of you old computer geeks to retire. You messed up big time. There is a better way to design and program computers. Now is the time for the industry to wake up and stop listening to failed ideas.

  65. Troll by bledri · · Score: 0, Troll

    Will someone please tag this article as a troll?

    --
    Some privacy policy Slashdot.
    1. Re:Troll by bledri · · Score: 1

      Doh!

      --
      Some privacy policy Slashdot.
  66. What the graph shows by Anonymous Coward · · Score: 0

    The trend line for Java, C and C++ is down.

    The trend line for Visual Basic is up.

    It looks like the VB line will intersect the Java line some time around 2015. Then, obviously, Visual Basic will be considered a better language than Java because it is higher on the graph.

    How is the article's author going to explain that?

  67. Old age by dukeZ · · Score: 2, Insightful

    From the initial take, the intent of the article could easily be construed to say Java will die. But I thought was interesting that it would be from old age, not from some challenger language.

    In many regards, concerning its lifetime, C has been/will be around for a very long time too... Which, I think, is probably one of the signs of a good language. Because if it was so horrible/people could not get their stuff done reliably, no one would use it.

  68. Languages by Anonymous Coward · · Score: 0

    Languages tend to be popular, in my opinion, as a result of functionality. I use Delphi which had a huge following the first years of its development. C++ has always had a strong following also, both due to the enormous amount of free instructions and components available on the web. There is almost nothing that I have not been able to do with Delphi because of the vast amount of information with examples in news groups. Java is not an easy language to learn. I have found that even trying to use examples that have been modified don't work.

  69. Not a developer, but a user by $criptah · · Score: 1, Interesting

    I am not a developer. I don't know all the insides of Java, C#, C++, Python or Ruby. Yet, I have to use these languages and other tools on a daily basis to make a living as somebody who works in the field of integration and system engineering. Programming languages for me are just like tools. I would like to use something that is easy to learn and that gets a job done. That's why I hate C++ and that is why I see Python and Ruby pushing Java out at least in many areas where performance and ability to multi-thread are not the top priorities.

    Please spare me the inner details of every language and pros and cos and what is pure object oriented and what is not. I get paid to accomplish things and not to debate about the purity of a programming language. In the environment where you have to make two applications and throw one away, Python really shines. It is a great language for prototypes. It is easy to learn, relatively fast for what I need to do and it can be hooked up with Java or C++ without too many issues. The way I think about it, a language is like a tool. Many years ago everything had to be done by hand and then we developed power tools. I know some purists who love to build furniture and other objects using old school approach (no nails, just glue and hand work). Good for them. I like to use the latest tools that are proven to make my work easier. I don't doubt that Java will be alive and well many years from now, but it is very refreshing to have other high-level alternatives.

  70. Another related case by richg74 · · Score: 4, Interesting
    One of the author's suggestions in TFA is that functional languages have a hard time succeeding because of their concise, "math-y" syntax. Speaking as someone who has been in software development since the System/360 days, and also a sometime math teacher, I think he's absolutely right. Expressing things in mathematical terms is powerful, elegant, and concise; what is isn't is intuitive, at least for the majority of people.

    Consider a much earlier example of a math-like language: APL. It allowed concise programs and elegant expression (especially of mathematical ideas, like matrices); it ran in the then-mainstream environment (IBM mainframes); and, it was sponsored by the industry's 800-pound gorilla. And it was the best language for creating write-only programs that I have ever encountered -- think Perl with an extra helping of math and a non-standard character set thrown in. The worst programming assignment I ever had (although I did complete it successfully) was debugging and fixing a financial modeling package written in APL. My take on it was that the programmers who had written it originally fell mainly into two categories:

    • Those who were confused by the syntax and concepts
    • Those who used the syntax in a contest to see who could be "cutest"
    Neither is really what you want going on in an important enterprise-level project.
  71. elitist niche by unity100 · · Score: 1

    "heeeeey ruby" "heeeeey ruby on rails" "heeeeeey web 2.0" and other similar stuff ....

    in the last 2 years all those stampede was being made in /. for those 'new cool up and coming' languages and stuff, i have been churning out a lot of estores, service and small business sites that used php/mysql as foundation. directly php that is, nothing that has 'development libraries', or 'framework' or anything else. oscommerce, vbulletin, nuke and phpbb versions.

    the importance of that is, people use these stuff to run their business. and they are happy with it. they are cheap, they are easy to use, they are easy to get, easy and cheap to find developers for, easy for everything, all at once. all these factors come into play for their choice. eventually one or two people come up with requests for development on some nifty up-and-coming 'framework' 'script' or 'platform', but in 1-2 months' time i find them coming back again, this time for migrating their 'up-and-coming' framework store to oscommerce. oscommerce, for example is like microsoft windows now, established, widely used, strong base, strong community, developers, everything and whatnot.

    let me tell you, they do not know anything about ruby. they dont know about web 2.0. all they want and need is to have something to run their business on. they dont care about the 'amenities' jumping to another framework will bring them either. they want reliably well established and well known stuff.

    the thing is, regardless how much we programmers, developers rant and rave and get excited about 'new' stuff here, praise them or shun them, the market's choice dictates what is going to stay and what is not. and from what i see, market doesnt even know, or even care about ruby, or web 2.0, or any other nifty thing we have been discussing here. they want fast, cheap, reliable, well known and thats that. the only exception is big buck corps, but then again they can afford anything.

  72. Java is a massive object at rest by benjto · · Score: 1
    Java is a massive object at rest in many IT departments. I just don't see these dynamic languages having enough force to unseat it. Make it budge, fill a niche, find adoption in progressive teams, be introduced on the "down low" on small projects... ok, but not a wholesale replacement.

    Adoption of languages and frameworks is more about being "good-enough" at the right time. The longer a "good-enough" solution stays in place, the more compelling a better solution has to be to unseat it.

  73. Re:Article is slashdotted, can someone post a copy by skeeto · · Score: 1

    Well, the top five languages in the TIOBE index shown on the page are,

    1 Java.... 10.176%
    2 C....... 15.292%
    4 PHP..... 10.637%
    5 C++..... 10.484%
    6 Perl.... 05.869%
  74. Smalltak is a huge success and also a failure by Grapedrink · · Score: 5, Interesting

    It's hard not to turn this discussion into a war and I do believe that even from a qualitative perspective, this discussion is entirely subjective. Let me preface my comments by saying I work primarily in C#, Java, Ruby, and Python in my job, and previously was a C, C++, Fortran, and Assembly programmer. I know about a dozen more languages as well, so I feel I've at least had exposure to many languages to guage success from a developer's point of view. Generally, I think being good at a certain job/task makes a language successful. There is a corollary that one should pick the best tool for the job, not because it's the "best" language. C++ is successful because it was very fast at the time, had a lot of features people wanted, and was relatively easy to learn. Would I do a web page in C++ these days? Probably not.

    If I had to pick a language to discuss and deem successful, it would be either Smalltalk or Lisp. Some people find either of those esoteric or "weird," but I rather enjoy writing code in both. Interestingly enough, in many respects neither language is particular successful in a commercial sense, but very much so for most implementations.

    I'll stick to Smalltalk because it's a good example for this discussion. It's a case where popularity in my mind is not equal to success. Smalltalk works because it is simple (there are really only 6 keywords or so and not even really keywords at that) and is designed impeccably. If success is related to imitation and admiration, then Smalltalk is up there. Of course in itself, the language is derivative, but it's well-known enough to claim/steal credit for one of the best implementations of existing ideas. I have to laugh at other languages, especially Ruby, Python, C#, and Java as they are adding language features or libraries that emulate things that have existed in Smalltalk for 20+ years. That's rather laughable, but also an indicator of success.

    As the Smalltalk saying goes, "Files? How quaint." The language just proves you can design something successful by simplifying and focusing on enabling people to design and use their brains. I feel like I can focus on code rather than language constraints. Smalltalk coding is like teaching them to farm rather than giving them food. There are obvious merits to both approaches. The fact that the language is still around 20+ years later and gaining momentum speaks volumes.

    I think what makes it unsuccessful is that a lot of people have no idea it exists in the first place and how it really works. They might look at it and say, "yeah that looks something like Ruby, so what's the point." Usually I find it's lack of understanding of not only Smalltalk, but the fact that the development environment in many ways is the language. Most Smalltalk implementations simply don't have the problems in file-based languages like disorganized code, "too many classes," etc. So many of the plights in other languages don't happen in Smalltalk because of the design and that to me is success, regardless of the number of commercial installations.

    Another issues that has halted the language's success in commercial spaces has been ugly UI. Until recently, most implementations have looked awful. Squeak used to look like a child's toy without customizations (still does to some degree, but there's 100s of customized images floating around the internet now). Visual Works looks like an ugly ms-app sometimes, but is a huge leap over the past. Gemstone Smalltalk has no real UI (but can use Squeak). The list goes on, but the point is that even in dev environments, eye candy has a big influence.

    It gets even weirder when you look at Smalltalk and languages from the perspective of supporting products. Databases are probably the biggest, and Smalltalk can work with just about everything, but the simple support for the RDBMS is pitiful compared to most popular languages. Especially in recent years, a lot of that has to do with the Smalltalk view. In the Smalltalk world, it seems stupid not to use an object database at this poin

    1. Re:Smalltak is a huge success and also a failure by 0xABADC0DA · · Score: 1

      If success is related to imitation and admiration, then Smalltalk is up there. Of course in itself, the language is derivative, but it's well-known enough to claim/steal credit for one of the best implementations of existing ideas. I have to laugh at other languages, especially Ruby, Python, C#, and Java as they are adding language features or libraries that emulate things that have existed in Smalltalk for 20+ years. That's rather laughable, but also an indicator of success. What's interesting to me is exactly that, how Smalltalk has in fact been able to claim/steal credit for the ideas you talk about and for which it did not invent.

      First, all widely successful object-oriented languages are derived from Simula 67 not Smalltalk (C++, Java, C#, and many of the other 'substantial' ones) -- yet Smalltalk somehow gets credit with the masses for being the 'father of OO'. Even Java concepts like inner classes map directly to features in Simula. Second, the other features you imply like closures for instance and syntax simplicity, and most design patterns used heavily in Smalltalk were first perfected by LISP. Yet Smalltalk gets the credit for these things.

      Frankly, "Smalltalk is successful" is nothing more than a sham. You yourself listed 12+ 'language killer' problems with Smalltalk, agree that basically nobody ever used it and that it is old and outdated... but you still call it a 'success'? ! /boggle
    2. Re:Smalltak is a huge success and also a failure by WeirdJohn · · Score: 1

      Following that logic every language has stolen features from the Jacquard Loom. And look at the number of ideas that have come from Smalltalk - Design Patterns, Unit Tests, Continuous Compilations. Extreme Programming etc.

      Other things that have a Smalltalk heritage are those grown from OWL (which include MS Windows and the Borland languages) and MacOS (ObjectiveC).

      By the way, I like Smalltalk.

      Finally, and not directly related to your post, I am still boggled by how people consider Java Object Oriented. It's Object Like for sure, but as long as you have to jump through so many hoops just to have true abstraction and polymorphism, and as long as classes have to advertise everything about their interfaces I personally think it's a steaming pile of crap. And that's to say nothing about the Integer/int thing.

    3. Re:Smalltak is a huge success and also a failure by Anonymous Coward · · Score: 0

      "Object Obsessed" is my preferred term for languages like Java and C++. Please help it grow.

    4. Re:Smalltak is a huge success and also a failure by Fizzog · · Score: 1

      "Smalltalk users are too busy getting things done and enjoying themselves to be concerned with who likes or hates their language most of the time"

      It's a great pity that more people haven't been exposed to the fun of developing in Smalltalk.

      We develop using VisualAge Smalltalk and use GemStone as our OODB and application server.

      You just can't have more fun than coming up with a crazy idea on how to do something, knock up a quick model in Smalltalk and be able to persist those objects as actual objects. Not quite right? Then simply change it. No 'typing', no DB mapping and no memory management to worry about.

      I've developed in numerous languages and environments over many years and IMHO Smalltalk really is the most fun you can have developing commercial stuff.

    5. Re:Smalltak is a huge success and also a failure by dkf · · Score: 1

      I'll stick to Smalltalk because it's a good example for this discussion. OK. How many production systems are out there being run by Smalltalk code? (I'll exclude developer tools from this discussion; they're often written in the language they support.) The real mark of a successful language is that it is out there, supporting people doing real work, and it is holding its own in that particular area because it does the job well.

      Now, I've never heard of a production system that runs on Smalltalk, but that doesn't mean such systems don't exist. Just nobody talks about them. (By comparison, I know for sure that there have been production systems running on Lisp in the past, even though I'm not sure how many are left these days.)
      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    6. Re:Smalltak is a huge success and also a failure by Anonymous Coward · · Score: 0

      Following that logic every language has stolen features from the Jacquard Loom. And "we're all just atoms". Either Smalltalk did not invent anything because everything is a Loom or we talk about when things actually first appeared, in which case it's Simula 67 and LISP that invented pretty much everything in Smalltalk. And Englebart for inventing WIMP.

      And look at the number of ideas that have come from Smalltalk - Design Patterns, Unit Tests, Continuous Compilations. Extreme Programming etc. Exactly... buzzwords that have nothing to do with the language and that others had been doing anyway.

      Other things that have a Smalltalk heritage are those grown from OWL (which include MS Windows and the Borland languages) and MacOS (ObjectiveC). OWL no, Objective C yes.

      Finally, and not directly related to your post, I am still boggled by how people consider Java Object Oriented. No doubt because you haven't actually taken a hard look at Simula 67. That much is obvious from your statement. It's really amazing and surprising to see Simula 67 code and how Java and other successful object oriented language are just modern forms of it. You probably haven't seen the mother of all demos either.

      as long as you have to jump through so many hoops just to have true abstraction and polymorphism, and as long as classes have to advertise everything about their interfaces I personally think it's a steaming pile of crap. Sure you do, but the industry has spoken and chosen Simula's original vision of objects, reflected in C++ and Java.
    7. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 1

      Finally, and not directly related to your post, I am still boggled by how people consider Java Object Oriented. It's Object Like for sure, but as long as you have to jump through so many hoops just to have true abstraction and polymorphism, and as long as classes have to advertise everything about their interfaces I personally think it's a steaming pile of crap. And that's to say nothing about the Integer/int thing.

      I couldn't agree with you more on all points, especially on Java. It's great people can learn from and improve previous efforts, but sometimes I wish we could come up with something new. It's really hard considering how much programmers resist real change in their thought processes.
    8. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 1

      Actually, quite a few. Ask the Gemstone Smalltalk and Visual Works guys. IBM did tons of Smalltalk awhile ago. In the financial world, it's quite popular and I've personally encountered lots of market related industries that rely on smalltalk for the important stuff. Often you'll see something like java or .net on the front end, but the important stuff behind the scenes is still smalltalk.

      I've come across quite a number of wtfs of people who thought replacing a 15 year old smalltalk implementation with php or java was a great idea. It might well have been, but they failed to consider it's been running for 15+ years because it actually works as advertised. In the end, it's people too lazy to learn something new and investigate, but I can't blame that on a language either.

    9. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 2, Insightful

      Frankly, "Smalltalk is successful" is nothing more than a sham. You yourself listed 12+ 'language killer' problems with Smalltalk, agree that basically nobody ever used it and that it is old and outdated... but you still call it a 'success'? ! /boggl You obviously have a decent background and I agree with some of the tings you said, but overall I'm going to have to question what you wrote.

      No, I was saying Smalltalk is successful to me for some of the reasons I listed. I said it was not successful in terms of industry and popular terms. I don't think the 12+ language killers you are referring to are problems. Personally, those are likely the reasons I love the language.

      Fileless language? Brilliant IMO and forces people to be organized in a structured way. VM? Great idea, makes deployment a snap, restore the state of your dev environment, etc. Need I remind you how VMs in general are all the rage now? Lack of extensive keywords? Makes it simple to learn and extend because the language is essentially written in itself, no weird dropping to C or other languages (see Ruby) causing all kinds of issues.
      Outdated? It's updated more or less daily and even has several new web frameworks (just not 2.0 buzzword oriented like Ruby on Rails sorry, etc.).
      Frankly, I find Smalltalk to be way ahead of the curve as far as keeping up with the rest of the pack in most areas because there are some great coders that share their stuff and churn it out quick, and the rest was already implemented in the past few decades anyway. How many times can we reinvent a datetime library? Lots of major changes != good language.

      If you think no one ever used it, then you really lack an understanding of the language and its history. It's certainly more of a niche language than PHP, but it's not exactly an experimental research language either. I think you might be equating your own personal exposures to general usage.

      In general, your first sentence sums it up. Smalltalk is successful because it implements both existing and new ideas well to the point where at least the ideas got more exposure, adoption, and notice. You can wrap all the features in a language you want, but the wrong blend makes it taste terrible. Smalltalk did quite a nice job and that's the reason people give it credit and other languages follow suit. Did you ever stop and think maybe there is a reason people give it credit? Note that I never claimed it was original as you pointed out.

      As an aside, my favorite language for code reasons is actually Lisp, but I find developing in Smalltalk is much easier because of the philosophy and design on the language. I find Lisp more powerful, but less clear and about equally expressive for most things. I'd choose Lisp if I was going purely on language design, and Smalltalk for actual implementation from code to deployment. For me, Lisp tastes great but has a bit of an unwanted after taste in some areas. It's a personal thing.

      Anyway, again, for me both Smalltalk and Lisp are successful because they help me do great work vs. other languages. I don't consider most popular languages successful because I'd rather die than write code in them, but unfortunately it's hard to escape reality when you're selling your services in the open market. I don't see how you can call Smalltalk a Sham unless you're trying to troll. All languages are good in some way, but we all have our preferences.
    10. Re:Smalltak is a huge success and also a failure by 0xABADC0DA · · Score: 1

      You can wrap all the features in a language you want, but the wrong blend makes it taste terrible. Smalltalk did quite a nice job and that's the reason people give it credit and other languages follow suit. Did you ever stop and think maybe there is a reason people give it credit? Well personally I find Smalltalk 'tastes terrible'. I think Smalltalk gets credit mostly for a simple reason: Apple. It's legend that Apple borrowed the interface from Smalltalk, so Smalltalk gets credit for inspiring them. I don't think what goes through most people's minds that give Smalltalk credit for so much is any more complicated than seeing a picture of a Smalltalk WIMP and saying 'that looks familiar'. Never mind the facts that between Simula, LISP, and the mother of all demos it's quite clear that Smalltalk did not invent anything except the blend.

      The point I am trying to make is that these things you mention that make up the blend that you like about Smalltalk are not signs of success but of failure. I might call Smalltalk successful at demonstrating what not to do in a language but that's all.

      For instance talking about simplicity, Java's Object has 11 methods whereas Smalltalk's has generally over 100 methods -- Smalltalk is not simpler, it's just complex in different ways. If one could load all Smalltalk classes ever written Object would have thousands if not tens or even hundreds of thousands of methods. And I say 'could' because version conflicts make this impossible to do. Java would still have 11 methods on Object and can in fact load all classes from all programs ever written -- the mutable classes of smalltalk that let you do 'great work' inhibit the collective Smalltalk ecosystem from doing 'great work'.

      Lacking files, the image (which you call a VM), lack of keywords, lack of operator precedence, etc have been selected out by industry, and it shows by the increased adoption of those language that have attempted to drop out these so-called features. For instance, SmallScript created added more syntax complexity, added files, added namespaces, dropped the image, etc, and this worked well for it -- but then it wasn't special enough to make it worth using over say Visual Basic. Ruby did some of the same things, like adding sane precedence, but again it didn't drop enough of the defects of Smalltalk to make it successful.

      The blend of Smalltalk can be seen as essentially combining the Simula (object oriented) and LISP (prototype) lines, but it fails terribly at this. Javascript also combines Simula and LISP lines and is capable of all the same power as Smalltalk that helps you 'do great work', yet it is a very successful language. Javascript deserves a lot of credit as a successful blend and, IMHO, Smalltalk deserves very little -- although I concede that this is not the conventional wisdom.
    11. Re:Smalltak is a huge success and also a failure by Alomex · · Score: 1

      I have to laugh at other languages, especially Ruby, Python, C#, and Java as they are adding language features or libraries that emulate things that have existed in Smalltalk for 20+ years. That's rather laughable, but also an indicator of success.

      Odd choice of words. I'd say its rather commendable that the designers of those languages are humble enough to incorporate things that are good and were missing from the original spec. Most language specifications are frozen way too early.

    12. Re:Smalltak is a huge success and also a failure by Anonymous Coward · · Score: 0

      Always interesting to hear from the radicals that go on about what's "true abstraction" and "true polymorphism" and programmers that "resist real change" yet use a language that has *zero* encapsulation. And yes I am talking about smalltalk.

      The "Integer/int thing" means Java is acceptable for numerical work whereas Smalltalk is not.

    13. Re:Smalltak is a huge success and also a failure by cool_arrow · · Score: 1

      I was browsing for smalltalk info and found this: http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=successes

    14. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 1

      Interesting. I think it's obvious we disagree but I can see your point of view. Again, I think of course it's a personal perference as some of the things you want/mention I loathe. Perhaps we approach development differently. Can you list for me what you specifically don't think we should do in a language that Smalltalk does? I'm always curious to have other opinions and to be shown languages that make up for failures in others.

      You mentioned Java. Java in general I think is how not to design a language. If I had to pick a language closer to Java, it would definitely be C# over Java simply because I feel like C# is Java done right (but still wrong), Microsoft lock-in aside.

      I am still not sure how you can say Smalltalk is more complex than Java. I don't think number of methods or even number of keywords map directly to complexity; rather I believe complexity is something you don't discover until writing real-world projects. I don't see Java's 11 methods on type object as being an advantage at all. Smalltalk chooses to implement its underlying machinery in itself. This results in more methods of course, though in Smalltalk most of these we wouldn't even call methods at all (another topic). Java does the same to a degree, but I feel Smalltalk's approach is a lot cleaner. It's not uncommon in Smalltalk to have lots of methods, but if you actually go and look at the underlying implementation, rarely will you see a method more than five lines. Java on the other hand has methods that span hundreds of lines in some cases. I don't allege that means one is more complex than the other either, however I think it highlights that the general coding approach as a product of the language differs greatly in Smalltalk. Ultimately, it's apples and oranges.

      You also mentioned Javascript. Like everyone, I've used Javascript extensively and I can't stand in, even with some of the nice "advanced" features with prototyping and such. Javascript is a hard language to talk about given that many of the obvious reasons to hate it one can blame on VM implementations, browsers, and people's ignorance.

      I think the reason that Javascript is "successful" is that it is baked into web browsers as the defacto scripting language of choice. That would make nearly any language "successful." Few people I've ever met concede that the actual implementation is one that they like. I think most of us would prefer just about any other language aside from vbscript baked into the browser.

      I have to believe that even if you separate Javascript from the browser, get rid of the inept procedural developers trying to use it, and consequently shift the blame of some of those flaws on to the browser's handling of DOM, memory, etc, instead, Javascript would still be a wtf.

      Overall, I am curious how you think Smalltalk fails on an implementation level? Smalltalk has never made me feel like I couldn't do something easily or the language inhibited me. I think the language is easy to learn and forces you to develop well given the dev environment is integrated into the language/implementation philosophy.

      What about the image do you not like? I think dropping the image defeats some of the design of Smalltalk, and that's one reason why something like Smallscript couldn't succeed because it seems weird to many Smalltalk developers and weird to people who didn't like Smalltalk anyway. I find people who are scared off by the image concept don't understand how Smalltalk works. I've often seen people who don't know Smalltalk post about how they wish they could write code in Eclipse, emacs, or notepad. That makes no sense if you think about the impact of the image. Without the image, intellisense wouldn't work/would suck, refactoring built-in capabilities would be limited, you would loose or have to rebuild all the types of browsers, the debugging would be much harder, etc. It's a weird concept for some to accept that the image and the language are in many ways one entity. What do you feel like files gain you? I don't see the use case wh

    15. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 1

      Always interesting to hear from the radicals that go on about what's "true abstraction" and "true polymorphism" and programmers that "resist real change" yet use a language that has *zero* encapsulation. And yes I am talking about smalltalk.

      The "Integer/int thing" means Java is acceptable for numerical work whereas Smalltalk is not. I don't see how you can call me or anyone else a radical unless you lack understanding of these subjects. First, I use Java and C# for most of my daily work at present. I think you confuse static typing and the necessary evils it creates with encapsulation. Perhaps you are using that as a crutch to justify encapsulations, to which Java inhibits and adds significant complexity in many cases. This has caused huge WTFs to the point where I now see people circumventing static typing and compilation by using reflection to do things like having a true factory class without writing 10000 lines of extra code, at which point your whole "encapsulation" goes out the window anyway according to your logic.

      Second, no one ever alleged to use Smalltalk for numerical work. It's fine for most numerical work on modern hardware anyway. That said, yes in some cases I would use other languages including Java, C++, and Fortran.

      What's your point here? Have we not been discussing to some degree the right tool for the job? How often are you doing such severe number crunching that your language is getting in the way anyway? I find that's the more "radical" point of view. I'd rather have productivity and optimize performance later than rely on the language to do it for me 100%.

      The same things you probably like about Java make it much less productive and unsuitable for the web vs. a multitude of other languages as the current trend reveals including: Smalltalk, Python, Ruby, and even PHP. There's no reason why you can't use multiple languages anyway, which is exactly what I do to begin with.
    16. Re:Smalltak is a huge success and also a failure by 0xABADC0DA · · Score: 1

      We obviously differ, because in my mind Java is one of the best languages yet made often precisely for those reasons that annoy people. Let me explain.

      The 11 methods on Java Object are not some kind of golden ratio, but a reflection of the philosophy of the language. Java platform forms an (inverted) food pyramid with layers core classes, standard library, and then applications. Standard library never changes anything in core classes. Applications never change anything in standard library or core classes. The re are 4k classes in the standard library alone and once you learn a class once it is always the same, and this builds a common base of knowledge shared by all developers. A solid ground to work from.

      It takes roughly 80x as long to learn something correctly after learning it 'wrong'. So when you have code that says "well in this program Object behaves completely differently in this context" because you have to unlearn what you learned before. So having a changeable core classes is a real problem imo. Most of the benefit from a dynamically typed language comes from not being verbose and being able to substitute objects that have the same methods and not from changeable classes. For instance, you can't change the core functions of perl yet perl is a widely successful dynamic language. For instance SmallScript improved on this slightly because at least when you change a core class the change is only visible in the same namespace. This segments the 'unlearning' to a single package, but it still doesn't really fix the problem.

      Take the great example of the tax code for instance. Printed out it is what, tens of thousands of pages?, and filled with all sorts of exceptions and loopholes. So it's complex by any definition, but what makes it difficult is that it changes. If it were not changing then it might take a while, but eventually turbotax would 'understand' the whole code and then calculating the tax would actually be easier than a far simpler code, but one that changed every year. So, yes, Java methods are 'longer' and 'more complicated'. But they don't change often and this makes them so useful.

      Files are great because you can do so many things (crudely) with so little effort. Like search: "grep -r somepattern src". Or zip, or svn, or edit them with vim, or email them, etc. Yes, I know there are Smalltalk specific ways to do these things within the image which are different but 'better'. Or you can 'export everything to files', then use file tools, then import the results -- but it's really cumbersome to do this. Consider how you check your changes in smalltalk into a subversion repository... you use some widget somebody wrote to interface Smalltalk to svn in some way (an export script, an adapter, etc) but ultimately somebody had to do some work to accomplish this. And then more work has to be done in order to support monotone, mercurial, git, darcs, etc. The point being that the images makes you need extra work for each and every way you would want to interact with other file-based programs. And there are so many existing programs that are file-based, and in real life you have to interact with them. So this is another way that Smalltalk fails, because it has to reinvent everything -- even though it's reinventions are typically better they only apply to Smalltalk.

      Yes, I know you would never check changes into subversion except sometimes you have to for whatever reason. And it is these all-too-common stupid situations where you need to interact with the non-smalltalk world that make the image fail so badly.

      So what makes javascript so successful (aside from the more natural algol syntax) vs smalltalk is mostly that it is file based and it is used for throw-away things like web pages. An image make both of those harder.

      Anyway this topic is dead on /. if you want to continue please post someplace to do it. I don't have a web presence or blog to use.

    17. Re:Smalltak is a huge success and also a failure by Grapedrink · · Score: 1

      I agree this is dead so I won't go on too much more, but one thing I would ask is why does it matter to use SVN and such? I know this is certainly a reality when you're in an existing environment, but for a Smalltalk "shop" or even one that is ok leaving its Smalltalk developers/code alone, it's a non-issue. Smalltalk has several "built-in" source control repositories which work just fine (See Squeak Smalltalk for instance).

      I also like the fact that in an image, I can Snapshot the entire thing. That doesn't just include my code, but my settings, environment, and even runtime. It makes sharing and deploying things a snap, but I can see how some may dislike that.

      You mention wanting to use grep. I feel like that is a giant wtf for the way I do things. True, when I write in file languages I admit to it, but I don't see it as the right way. For one, searcihng files is not really aware of how my code works. If I want that functionality, I need to write even more complex additions to my searching programs. Contrast that with the Smalltalk implementations you mentioned. In Squeak for example, I can bring up dozens of different search browsers that can do everything from scope my search to a class name to a method even. The search is fully aware of Smalltalk and how it works, to the point where it can even be used for refactoring quite easily in addition to the other refactoring tools. I would never go back to grep if I didn't have to in other languages.

      As for changes to to the core classes, other than an update which is rare, I don't see existing methods ever changing. The only way they change is some stupid developer which sucks, but that's life when it's all open. The method count is fine with me since it's well designed and consistent. Smalltalk's browsers make sure everything is organized so it feels like less code and for me, mentally I can conceptualize the code when it's put into specific categories (closest thing in java is regions, but you're still looking at a giant file). I don't do well with a large amount of vertical text in my face. That doesn't and almost can't happen in Smalltalk.

  75. Camel case sucks by wtcorrea · · Score: 2, Insightful
    Here is what some really smart people have to say about this:
    • "The use of internal upper-case letters is ugly; it conflicts with the conventions of ordinary language; and it leads to cryptic names, hence the possible errors (compare aLongAndRatherUnreadableIdentifier with an_even_longer_but_perfectly_clear_choice_of_name)."
      Bertrand Meyer
      Object Oriented Software Construction, 2nd Ed., p. 881
    • "You should use names like ignore_space_change_flag; don't use names like iCantReadThis."
      Richard Stallman
      GNU Coding Standards
    • "I eschew embedded capital letters in names; to my prose-oriented eyes, they are too awkward to read comfortably. They jangle like bad typography."
      Rob Pike
      Notes on Programming in C
    • "Mixed-case names are frowned upon."
      Linux Torvalds
      Linux Kernel Coding Style
    • "Your choice of uppercase or lowercase letters can have a dramatic effect on legibility. In general, use downstyle (capitalize only the first word, and any proper nouns) for your headlines and subheads. Downstyle headlines are more legible, because we primarily scan the tops of words as we read."
      Patrick Lynch and Sarah Horton
      Yale C/AIM Web Style Guide
    1. Re:Camel case sucks by D+Ninja · · Score: 1

      Being smart does not make someone necessarily right. Hitler was smart, but was he right? Plus, the people you quote do not give a reason as to why camel case is bad. They all are just voicing opinions.

      Bertrand Meyer - One is ugly. (Both are still readable to me.)

      Richard Stallman - Don't do it because I said so.

      Rob Pike - I don't like it. Whaaaaa...

      Linux Torvolds - Who frowns? You? The entire world?

      Patrick Lynch and Sarah Horton - This is the only argument that makes some sense. But, they are talking about Web style as far as I can tell...not coding style.

    2. Re:Camel case sucks by Anonymous Coward · · Score: 0

      Hey, it's just a style of writing. You work with it, you get used to it. No reason to get worked up about it. The complainers sounds like the guys who can't get over the use of parentheses in lisp.

    3. Re:Camel case sucks by cptnapalm · · Score: 1

      I'm old but new to programming and I've been (unconsciously) doing CamelCase in my C for my functions. I haven't thought too much about it, except that it was easier to read than thisisabsolutleyillegible. As there does seem to be genuine hostility against CamelCase, I'll give underscores a try.

    4. Re:Camel case sucks by Anonymous Coward · · Score: 0

      Heh, I had no idea there was such contention on variable naming conventions. These are *variable* names. You should be able to, say, run a global filter on your code that automagically converts / displays variable names in whatever convention you're comfortable with!

      So you'd have one place where you define your variables in long descriptive names, and then convert them to symbols based on whatever naming convention you want to use. //I worked on some rudimentary unit conversion code for a decent-sized development project... ended up auto-generating a large amount of inline functions and constants in several different naming styles:

      e.g.
      METERS_TO_FEET
      M_TO_FT
      MetersToFeet()
      meters_to_feet()
      mtoft()
      etc.

      using namespaces to keep the, um, namespace clean. ...saved our sizable team a lot of time arguing over what to force everyone to standardize on, while still avoiding confusion or inconsistencies.

  76. Flaming Thunder by David+Parker · · Score: 1

    Flaming Thunder http://www.flamingthunder.com/ is already starting to push Ruby and Python into old age.

  77. The problem with java by Anonymous Coward · · Score: 0, Insightful

    class extended virtual theGreatEarthNovel::theProblemWithProgramming::theProblemWithProgrammingLanguages::theProblemWithJava tpwj{
          import inside here now system::ontology::basic::directions::fromAndTo::justToTestYourTyping::andYourNerves::To to;
          towards::hardware::ui::screen::virtual::notMobile::notCLI where;
    try::reallyHard::butItIsNP::4.times::atLeast:
          system::interface::ui::utf::orLess::characters::ifFail(opticalRecognition) message;

    message = "Java has no problems";

          system::magic::lostMyYouth::expele::towards(to, where, message);
    else:
          system::core::shit::happens::throw::towards::withMessage("Whoops!");

    } ...I really don't get it when people moan about java.

  78. From the article: by Kingrames · · Score: 2, Insightful

    "Reason number 2: Too much noise is distracting. Programmers are busy and learning 10 languages to the level where they can evaluate them and make an educated decision is too much effort."

    okay, if you can't bother to learn more than 1 language, then you can't really call yourself a programmer.

    --
    If you can read this, I forgot to post anonymously.
    1. Re:From the article: by bloobloo · · Score: 1

      I don't think "10" was supposed to be in binary.

    2. Re:From the article: by Kingrames · · Score: 1

      You must be new here.

      --
      If you can read this, I forgot to post anonymously.
  79. There is Only 1 Rule: My Time is Important by SparafucileMan · · Score: 4, Insightful

    I'll take any language that can let me write, read, and understand as fast as the speed of computers is progressing, i.e., exponentially.

    I don't give a crap if language xxxxxxx is more efficient, more hardcore, etc. You know why?

    Because I don't want to spend a year writing an application in C for efficiency and find out at the end that for a mere $1,000 I could have written the same thing in Python in a month and just bought a faster computer 11 months later.

    YOUR time is linear, while the computer's is exponential. You'd be a fool to not take advantage of that and, frankly, type safety, efficiency, platform independence, programming style, power, etc. etc. can all go to hell. Just give me a beautiful language.

    1. Re:There is Only 1 Rule: My Time is Important by Ullteppe · · Score: 1
      You obviously haven't ever programmed for an embedded system. In low-end embedded, you can either view the situation as getting twice the performance at the same price, or you can view it as getting the same performance at half the price (not quite, because things like packaging costs become significant for the low-end stuff).

      Result?

      State-of-the-art low-cost hardware is an 8-bit AVR or 16-bit MSP430 running at 16 MHz with 8 kB of flash and 1 kB of RAM. Try running Java (or even C++) on that, buddy.

      To be honest, I am appalled at how much resources (CPU time, memory) is wasted because of developer laziness. The instance of Internet Explorer I'm using to post this message is using 150 MB (!) of RAM. For displaying a web page, that's amazing in my mind. For shrink-wrap software, there is one developer and maybe millions of users. The users should not be inconvenienced just for conveniencing the developer. For custom software, it is another matter entirely.

    2. Re:There is Only 1 Rule: My Time is Important by ucblockhead · · Score: 1

      Two things: First, your customers don't want to shell out another $1000, so they will buy your competitor's product, which they perceive as less "bloated" than yours. Second, if you are programming for a non-PC device, you probably can't replace it every year.

      It's your customer's time that matters. If I have to spend an hour to save my customers five seconds, and I have one million customers then I have spent one hour to save my customers two man months of time. That's worthwhile.

      Your customers don't use the language. They just use the binaries. The beautiful language is meaningless to them.

      --
      The cake is a pie
    3. Re:There is Only 1 Rule: My Time is Important by MtHuurne · · Score: 1

      This is true for the low-end, but if you go up the scale a bit you see a lot of 200MHz ARM cores being used and those are fast enough to run Java. Whether that is a good idea depends on the application.

    4. Re:There is Only 1 Rule: My Time is Important by MtHuurne · · Score: 1

      If that competitor's product is already on the market and offers the same functionality, you're right. But if you can beat your competitor to the market by using for example Python or you can add new features faster, I think you're in a good position. Something that works slow today beats something that will work fast a year from now.

      Efficiency may or may not be an issue depending on the situation. If the Python app does a task in 5 hours and the C app in 1 hour, the C app has a distinct advantage. If the Python app does it in 50ms and the C app in 10ms, very few people are going to notice the difference.

  80. Depends... by Anonymous Coward · · Score: 0

    Wouldn't it depend on what you're using it for?

    So one language may be great for developing and keeping a web server running, but that same language just might suck if you were trying to make a videogame with it. (And vice versa for the language the game is made in.)

    And not only is this true for the software being made with it, but also the hardware you're using it on. Some languages just aren't appropriate if you need the program to run fast or on a portable device. And a programming language good at producing streamlined code may not be considered flexible enough for other uses.

    The question is too generalized at the moment. It should be: "What makes a programming language successful for (such and such application)." And even then there probably isn't just one good answer.

  81. LOL perl by Anonymous Coward · · Score: 5, Funny

    I was on an old dial up bbs once having a fierce argument and was deep into a paragraph lambasting my foe, when a nearby thunderstorm injected about 4 lines of pure static garbage characters into my text, and the techy walked by, glanced at my screen and said "taking up perl?"

    1. Re:LOL perl by chromatic · · Score: 1

      Awk will trade you a new sense of humor for its creaky, thirty-year-old joke.

    2. Re:LOL perl by ModMeFlamebait · · Score: 1

      Hey, I always wanted to stick a '#!/usr/bin/perl' at the beginning of sendmail.cf, just to see what happens :)

      /JAPH

      --
      Pavlov. Does this name ring a bell?
    3. Re:LOL perl by Anonymous Coward · · Score: 0

      If I only had mod points!!

      +5 Funny please.

    4. Re:LOL perl by Myrddin+Wyllt · · Score: 1

      You should have tried to run it - chances are it would have printed "Just another perl hacker" to stdout.

      --
      [ ]Half Empty [ ]Half Full [x]Twice as big as it needs to be
    5. Re:LOL perl by Lars512 · · Score: 1
      Something svunt (916464) wrote before, but couldn't find the link:

      "Perl terrifies me, it looks like an explosion in an ASCII factory."
    6. Re:LOL perl by Anonymous Coward · · Score: 0

      Chromatic,

      I always suspected your poetry had hidden messages. My personal suspicion was qualified quotations from Q.

      But now I see it was even more insidious - parsed passages pre-dating proto-Parrot.

      ;-)

      /editor
    7. Re:LOL perl by chromatic · · Score: 1

      My personal suspicion was qualified quotations from Q.

      If I had an extant Q, I'd charge admission to see it with my first editions of The Garden of Forking Paths and On the Use of Mirrors in the Game of Chess!

  82. To achieve mass popularity... by croftj · · Score: 0, Flamebait

    You almost always have to have first achieved mass mediocrity. Some prime examples are McDonalds, MS Windows and last but far from least, Disco.

      Java stands apart from the crowd in it's mediocrity. It's a nice language, but it is mediocre. By my estimates, it should go far! Way farther than C/C++ ever hoped.

    If for no other reason, even crappy programmers who shouldn't be programming in the first place can put out "okay" code. Those who can't understand pointers, not to mention, understand that a reference is hardly more than a pointer. In otherwords, it can even make crappy programmers mediocre.

    --
    -- Many men would appreciate a woman's mind more if they could fondle it
    1. Re:To achieve mass popularity... by CxDoo · · Score: 1

      Achieving mass mediocrity in terms of programming skill is a great thing given the fact masses started at zero.

      BTW, at work I have an ancient microwave you need to study the manual first in order to do the simplest thing. It is extremely feature rich though.

      --
      "Blah blah blah." - [citation needed]
    2. Re:To achieve mass popularity... by croftj · · Score: 1

      Kind of funny, I have a brand new microwave. It looked great, cool looking interface, some would even say feature rich. Sadly, the interface, thanks to a slacker coder (or some slacker designer), is mediocre. Simple changes would make it easy and slick to use. But alas, like the way of many things, it's mediocre and cumbersome to use. Kind of like Java in a way.

      I guess mediocrity has made our world better. NOT!

      --
      -- Many men would appreciate a woman's mind more if they could fondle it
  83. Re:Cisco GUI Admin Much? by mpapet · · Score: 1

    I've got three HSRP'd firewall clusters that don't work with the later versions of java installed on my admin machines. So I have pretty old java installs that I can't upgrade and other legacy issues as a result.

    Here I am, full of pride and working regular hours because the HSRP works as promised and yet you get in a tight bind when trying to upgrade the nodes on high-availability systems.

    I know the CLI cisco admins are spitting coffee out their noses right now, but in some cases the web gui is faster and easier than cli.

    --
    http://www.maxineudall.com/2010/02/should-economists-be-sued-for-malpractice.html
  84. Re:Easy. - Add: makes nice with existing code by elwinc · · Score: 1
    As of 11 posts, the linked article is unavailable. This being slashdot, who cares? I personally don't think Java will die of old age, but I can see some places where Python will shrink Java and C/C++'s market share.

    Let's look at what problem Java was created to solve: Java was designed to be C++ without memory problems. This is a big deal, because some estimates have it that over half of C and C++ bugs are related to either allocation / deallocation errors or buffer overruns. To solve this, Java got rid of malloc, free, and pointers (it also dispenses with those annoying C/C++ header files). The one unfortunate side effect is that Java cannot easily make nice with C and C++ - there's lots of hair involved.

    Note that Java's original market was programmers familiar with C/C++. Note also that Java has not killed off C or C++. There are some applications where you need to take explicit control of allocation. For example, suppose you are processing video in realtime. You want to track objects through color frames. Each uncompressed frame needs nearly a meg of RAM, so you will allocate about 1.8 GB / minute. If a garbage collector fires up uncontrollably it can create delays that will mess up your processing. For this kind of memory intensive, performance intensive realtime job, you probably don't want Java.

    Python does make nice with C/C++. Many fine C libraries have been wrapped in Python wrappers and made callable by Python. This makes Python into a kind of glue language (C# can do the same). You can use Python for things like GUI, parsing, lists, and string handling, and call your C++ routines for performance intensive tasks. Or you can do it the other way around, and embed Python in C++. So Python also markets itself to folks familiar with C/C++ and thus eats into Java's market.

    Both Java and C++ are strongly typed, and this is essential for big projects. But for small programs written quickly, strong typing may just slow you down. If, for debugging, you want to change a function to return two ints and a string instead of just one int, in C++ or Java you have to write a class. In Python, you can just return a tuple - so easy! In addition to a glue language, you can treat Python as a scripting language - like Perl only more scaleable (and arguably more readable).

    --
    --- Often in error; never in doubt!
  85. a GOTO statement by circletimessquare · · Score: 4, Funny

    hands down, if your programming language doesn't have a GOTO statement, it is a miserable failure

    --
    intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    1. Re:a GOTO statement by saibot834 · · Score: 1

      Don't you know how dangerous this can get? Inform yourself first!

    2. Re:a GOTO statement by ggvaidya · · Score: 1

      Once again, Perl FTW!

    3. Re:a GOTO statement by Anonymous Coward · · Score: 0

      You are so wrong.

      INTERCAL has COME FROM statement, which can be seen as handier equivalent to GOTO. They both are mostly interchangeable with small logic changes. Given INTERCALs reputation on scene of secure programming I feel it cannot be classified as failure.

    4. Re:a GOTO statement by Gazzonyx · · Score: 1

      Well, Java has 'goto' as a keyword, but it's unimplemented. Does that make it a success and a failure at the same time? Or is this like a quantum thing where we have to wait and see if it gets implemented to make the actual call as to its success?

      --

      If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.

  86. Re:Java is for Students C/C++ is for Coders by Anonymous Coward · · Score: 0

    How does it feel to go through all the trouble of posting your flames on Slashdot only to be ignored by anyone who cares and laughed at by those who know you're incorrect?

  87. COBOL a success? Why is this even a question? by sirwired · · Score: 4, Insightful

    I am completely confused as to how the author can even ask the question "Is COBOL a success?"

    Is COBOL old? Certainly.
    Is COBOL outdated? Yes.
    Has COBOL since been replaced by better languages? Yep.
    Would you be insane to start a new, large, application from scratch using COBOL? Of course.

    But "Is COBOL a success?" Without doubt, yes. Countless millions (perhaps) billions of lines of production COBOL code are still in use. It is still the core behind many of the applications that run our day-to-day lives. These applications have been running for decades with downtime records that would put an average "Web 2.0" app to shame.

    Certainly, IBM deserves a lot of credit for this, maintaining pure 100% backward compatibility for those apps for the last forty years or so, but some credit is due to the language itself.

    SirWired

    1. Re:COBOL a success? Why is this even a question? by Grapedrink · · Score: 1

      Is popularity == success? Maybe.

      If so we can definitely add Fortran to that list. We can also add Basic and maybe even for a time, Pascal. Certainly all are wtf languages that I am glad are out of favor.

    2. Re:COBOL a success? Why is this even a question? by Anonymous Coward · · Score: 0
      Hahah, I just had to laugh when I saw the "perhaps billions" part.


      Since this one company I'm at has a few million by itself, I think it's safe to say billions.


      "In 1997, the Gartner Group reported that 80% of the world's business ran on COBOL with over 200 billion lines of code in existence and with an estimated 5 billion lines of new code annually"

    3. Re:COBOL a success? Why is this even a question? by Anonymous Coward · · Score: 0

      These applications have been running for decades with downtime records that would put an average "Web 2.0" app to shame.

      That, sir, is not what we like to call "a good thing."

    4. Re:COBOL a success? Why is this even a question? by sirwired · · Score: 1

      Is popularity == success? Maybe.

      If so we can definitely add Fortran to that list. We can also add Basic and maybe even for a time, Pascal. Certainly all are wtf languages that I am glad are out of favor.


      All those languages were successful, but not because of their popularity. Although I would certainly say that I know of no popular language that you could consider unsuccessful. I'm not sure you could refer to any of those languages as "WTF" languages... they each served the purpose for which they were designed, and did so well. While most of them are no longer suited for those original tasks, that does nothing to diminish their earlier accomplishments.

      FORTRAN was, and remains (unlike the other languages you mentioned), a successful, useful, langage. For scientific computing, it remains a commonly-used language, even for new projects. (FORTRAN was designed for numerical analysis, after all.) It produces very efficient binaries for complex numerical computations. This is important if you are running complicated simulations. The language has changed over the years, but it is still in wide use. (I, for one, will certainly not miss the syntactic quirks of Fortran-77, which I had to program in for my frosh Intro to Engineering... in 1995.)

      Pascal was designed to be a teaching language, and for that use, it worked quite well. I cut my teeth on Pascal, and it does a much better job of being an introduction to procedural programming than a more powerful language such as C or Java. (The syntax is far easier.) Is Pascal now obsolete as a teaching language? Yes, as it has no hooks for proper OOP.

      You could consider BASIC too, to be a smashing success. It certainly was not a powerful or especially advanced language, even at the peak of its popularity. However, if your design goal is an easy-to-learn interpreted language that will run on the most puny of CPU's, it worked quite well.

      COBOL is a successful language because it unlocked the power of computers for the businesses of the world. Certainly it was far more suited to the task than any other language available at the time. Certainly if COBOL was invented today, it would be a joke. A bad one, at that. It would be rightly viewed as a sad attempt to make computer programming "friendly". However, at the time, it was nothing less than a masterstroke. It looks silly now because of the lessons we have learned over the last half-century, not because the language was defective by design.

      Before you mock the accomplishments of our predecessors, it is valuable to study their history first.

      SirWired

    5. Re:COBOL a success? Why is this even a question? by AngryDill · · Score: 1

      Very well put!

      I just wish my modpoints had not run out earlier today.

      -a.d.-

      --


      I'm Erwin Schrodinger and I approve of this message, and I do not approve of this message!
  88. Re:Article is slashdotted, can someone post a copy by Anonymous Coward · · Score: 0
    Top five numbered 1 to 6... and out of order?

    I love you.

  89. Why I use Java by Anonymous Coward · · Score: 0

    I used Java to build my first web app because that is the language I learned in college. I also think Java is the language of choice at lot of universities.

    I think you need to consider that there are a lot of new programmers entering the work force each year that have strong Java background.

    1. Re:Why I use Java by Anonymous Coward · · Score: 0

      I agree that Education plays a very large role in language prosperity and after skimming the article it appears to be an influence that the writer missed.

      I too was taught Java in college but the teacher sucked and I hated it for the rest of college. In another course I had a great PHP teacher and I still code primarily in PHP today.

  90. Sorry, but by AnotherUsername · · Score: 3, Funny

    Fact - C is the best language of all time. 10 Print "BASIC is the Best Language of All Time"
    20 GOTO 10

    As you can clearly see,
    BASIC is the Best Language of All Time
    BASIC is the Best Language of All Time
    BASIC is the Best Language of All Time
    BASIC is the Best Language of All Time
    BASIC is the Best Language of All Time
    BASIC is the Best Language of All Time
    --
    I don't like Linux. This doesn't make me a troll.
    1. Re:Sorry, but by neumayr · · Score: 1

      #include int main() { gohere: printf("GOTOs don't make a language\n"); goto gohere; return 0; }

      --
      Truth arises more readily from error than from confusion. -Francis Bacon
    2. Re:Sorry, but by AnotherUsername · · Score: 1

      Heresy!

      --
      I don't like Linux. This doesn't make me a troll.
    3. Re:Sorry, but by kramulous · · Score: 1

      That's funny ... I was looking for the link to read "x bytes more" but couldn't find it. Perhaps some print statements needed to locate the bug?

      --
      .
  91. If we're talking about server-side languages... by Yvan256 · · Score: 0, Offtopic

    Then it's obviously PHP, as it's the most installed setup at most ISPs/web hosting companies.

    It doesn't matter if another language is better, faster or more secure, because if you don't use PHP then you are seriously limiting your hosting options.

  92. Comparison is not valid by MikeDirnt69 · · Score: 1

    Different languages in different paradigms for different uses and programmers. "Success" is not the right word here, most of all languages are successful in their own niche, while some others will not be that qualified but will fit in every project.

    But that is just my opinion.

    --
    Am I eval()? - http://www.monst3r.com.br
  93. Successful? by Tiger+Smile · · Score: 1

    I don't know what does, but I do know what does not.

    Using the hash mark in the name of you language doesn't help. C + Hash says Cash to me.
    What MS names a language Cash I can only assume that means my cash into their pockets.

    Sun. Sun doesn't seem to help languages. Java has issues, most of all the VM. I mean
    as a good method of making sure we use our clock cycles and memory 100%, 100% of the
    time, sure that's nice, but what else does it do?

    Naming a language "Visual Basic" doesn't help at all. It bring up images of people
    working with virtual pre-school blocks. Also HyperCard. Sure it could have been the
    web, if only they used the network...and Apple supported TCP/IP...and they thought
    of the web idea before everyone else...Apple didn't have a bad case of Scalp&Colon
    disease back then. But truthfully HyperCard lost because of it's name. It just bring
    to mind the image of a playing card out of control(on Fox?).

    --
    -- Prepared at the direction of, or to be sent to Legal Counsel, in anticipation of litigation. Attorney Client Pri
  94. this speaks to the nature of people not Java by Anonymous Coward · · Score: 0

    I can't believe how many times I have heard java is going to die. I think this talk speaks more to the behavior of people than anything to do with technology. We just think that something has to die. In your daily life, as you cruise around, make bank transactions, call your insurance company, but stuff on amazon, etc, Java, C and C++ are doing 90% of the work. They are going NOWHERE.

  95. Assembly Language FTW by Prototerm · · Score: 2, Insightful

    Take *that* you young whippersnappers! If you want to program machines, you have to learn to think like 'em.

    --
    "My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
    1. Re:Assembly Language FTW by Just+Some+Guy · · Score: 1

      Take *that* you young whippersnappers! If you want to program machines, you have to learn to think like 'em.

      I'm not going to list all the assembly languages I'm comfortable in; suffice it to say that I could probably land a job doing either embedded or mainframe stuff.

      But I think you're wrong.

      Unless you're a CPU designed or are writing a compiler, you probably won't understand how they're thinking. From out-of-order execution to scheduling finickiness to microcode, there are so many outside variables that affect what your code is actually doing that it's almost pointless to bother trying to keep it straight.

      Even the compiler geeks can at best hope to get the rules down correctly so that the machine can generate code that will run efficiently on itself. Analogy: just because you can write a fractal generator doesn't mean that you could actually hand-generate a fractal with any reasonable speed or accuracy.

      --
      Dewey, what part of this looks like authorities should be involved?
  96. So what ever happened to Lisp? by Anonymous Coward · · Score: 0

    Am I the only person who thinks that this old ass language if one of the best? To me, python, ruby, and others are just ideas from lisp.

    1. Re:So what ever happened to Lisp? by Anonymous Coward · · Score: 0

      THIS

  97. Back in the real world ... by Tim+Ward · · Score: 1

    ... what makes a me use a programming language is that someone is paying me to use it.

    Beyond that I don't care much. (Well, there are limits, I refuse to do Perl, or Unix shell scripting.)

  98. When it does what you expect and more by JoeCommodore · · Score: 1

    Regardless of the syntax or the name spaces or variable typing, if it does what you want or surprises you by doing more it will be successful. Another factor is if you have early successes, or good beginning documentation.

    PHP, which I do use, does that for me, Ive had many a time times where something pretty complex turned out to be not a big deal using PHP, it just blows me away. Of course I migrated from FoxBase+/Mac so I had a huge leap in capacity, and added complexity (HTML, PHP and MySQL) but it hasn't failed me yet, and that what counts.

    As far as my success comment, I tried PostgreSQL early on and it was good and all but I could not get understandable answers on ensuring setup was correct and I struggled with the syntax. Went back to MySQL as it just worked (might try later, but too busy now).

    Though PHP works for me it may not work for others, it's not the nice drag and drop of Visual Studio nor is it the one size fits almost everybody of RoR, and those have their appeal as well, just not for what I do.

    With the diversity of OSs nowadays I think the overall trend is in general for "cross-platform," not proprietary lock-in. With cross platform, you or people who use your stuff, can pick the platform best suited to their environment/skills/budget/security. MS dropping FoxBase then FoxPro on the Mac and Apple killing OS9 compatibility did it for me, I was on an obsoleted platform running on a dead-ended OS, never again.

    --
    "Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
  99. Incorporate everything! by mlwmohawk · · Score: 1

    The most important aspect of any language is how open it is to incorporating external technologies.

    PHP is, by all accounts, a horrible language, but because it can wrap just about anything easily, it ends up being used a lot.

    I think what makes a language successful has more to do with how it works outside itself. Ironically, that's why I dislike Java, its focus is java java java. Other languages seem to better facilitate interfacing. (Yes I know about and have used JNI, but other languages are typically better, IMHO.)

    1. Re:Incorporate everything! by ttfkam · · Score: 1

      Is that so? It seems to me that you can compile Java to native code with gcj and integrate other languages like C++ easily with CNI.

      As for other languages on the JVM (aka, the other direction), there's Tcl, LISP, Basic, Logo, Eiffel, Smalltalk, OCaml, COBOL, Ada, Ruby, Python, JavaScript, PHP, and more.

      Exactly how does it fail to successfully interact with other languages again?

      --

      - I don't need to go outside, my CRT tan'll do me just fine.
    2. Re:Incorporate everything! by mlwmohawk · · Score: 1

      It seems to me that you can compile Java to native code with gcj and integrate other languages like C++ easily with CNI.

      Oh please, spare us. That's not how people use the java environment in production environments.

      Exactly how does it fail to successfully interact with other languages again?

      I have a Windows DLL or Linux shared library that has a standard C interface. How do you call it?

    3. Re:Incorporate everything! by ttfkam · · Score: 1

      I take exception to the notion that no one uses gcj, but I'll leave that for now.

      With regard to a Windows DLL or Linux shared library, the answer is that it depends. Is that library thread-safe? If it is, then generating a mapping header file to methods in a Java class marked "native" is pretty straightforward in JNI. If the library is not thread-safe, you have more work ahead of you, but not just because of Java. The Apache web server is already written in C and yet non-thread-safe PHP support libraries -- also written in C -- prevented stable runs in production with a threaded MPM.

      If you wrote the library to be reentrant, the JNI code is fairly straightforward. If it's written only with forking in mind, then yes, it will be far more of a pain. But that isn't Java's fault, that's the fact that you'd be trying to map one model on top of another and expecting it to be easy.

      Does C# make it easier than Java by simply marking unsafe blocks, sure. Then again, I'd trust the JVM's security model a lot more than .NET, but that's a personal preference. After ActiveX, I'm a bit more wary of Microsoft technologies.

      --

      - I don't need to go outside, my CRT tan'll do me just fine.
    4. Re:Incorporate everything! by mlwmohawk · · Score: 1

      I take exception to the notion that no one uses gcj, but I'll leave that for now.

      You may leave it for now, but it simply is not used in production environments. It is an interesting idea, bit not prime time.


      With regard to a Windows DLL or Linux shared library, the answer is that it depends.


      Of course it does.

      My biggest problem with Java are the over zealous supporters. Yes, java has some very nice qualities, but it is not for every job. Pointers have a real place in a lot of development. Pure native code as well.

  100. My RSS reader... by TerribleNews · · Score: 1

    ...truncated the title at "Suc..." and I was all raring to go with a rant about why programming languages suck. Looks like I got my knuckles all lined up for nothing. Oh well.

  101. Re:Article is slashdotted, can someone post a copy by skeeto · · Score: 1

    There was no #3. Trust me.

  102. The language situation is not good by Animats · · Score: 2, Insightful

    It's not a very good article. For one thing, measuring language use by search engine hits is silly. Just because it's the easiest way to get a number doesn't mean anything.

    The current situation in programming languages isn't very good. It's been 52 years since Backus invented FORTRAN, and we still don't have it right. Let's look at what we've got.

    • C and C++ These two languages dominate the hard-compiled field. Yet they're not very good. Every time a computer crashes, the lack of safety in C or C++ is usually at fault. A whole generation of programmers thinks it has to be that way, although it doesn't; Modula III, Delphi, and Ada were all hard-compiled languages with safety. But their supporting organizations (DEC, Borland, and the DoD Ada center) tanked. C++, incidentally, is unique in having hiding ("abstraction") without memory safety. Nobody tried that before C++, and nobody has repeated that mistake.
    • C# As a language, C# isn't bad. Unfortunately, it's tied closely to Microsoft's bloated ".NET" environment. The language itself is fast, hard-compilable, and safe. It needs garbage collection, but so be it.
    • Java An OK language buried under a mountain of mediocre libraries. The language itself isn't bad, but the amount of cruft that comes with a Java project is incredibly large. This may be because the language is free but the cruft is profitable.
    • Perl It's an awful language syntactically, and it's slow, with a naive interpreter. But it does work well and it's very portable.
    • Python Python is a nice little language held back by shoddy library maintenance. Python's support libraries (database access, SSL access, web services, etc.) are each maintained by one or two people, with no release coordination. As a result, there's no such thing as a useful "Python distro" that just works out of the box. So web hosting services don't support Python well. Perl handles this little management problem much better, and that's why Python hasn't displaced Perl.
    • Matlab Matlab? Yes, Matlab. Most engineering computations today are done in Matlab. It's an awful language, and the stock implementation is inefficient, but it's easy to do number-crunching. Matlab is what replaced FORTRAN in engineering. There's some good work on hard-compiling Matlab for parallel hardware, so the speed problem is being addressed.
    • Javascript The language of "Web 2.0". How did we let that happen? Amusingly, enough work is going into speeding up Javascript that's it's probably going to be the fastest of the "scripting" languages in a year or two. It's a mediocre language (the Self object model was probably a mistake, and the scoping rules are weird) but it's good enough.

    So that's where we are. No really good hard-compiled language in wide use, and the major scripting languages each have some tragic flaw.

    1. Re:The language situation is not good by Mmm29 · · Score: 1

      "C# As a language, C# isn't bad. Unfortunately, it's tied closely to Microsoft's bloated ".NET" environment. The language itself is fast, hard-compilable, and safe. It needs garbage collection, but so be it. "

      Every safe language has to have garbage collector or else it isn't safe. Because if C# let you use C 'free(void* p)' or C++ 'delete' that would mean you could free (and later allocate elsewhere) memory that is still in use - which isn't safe. Therefore resource deallocation must not be handled by programmer, but rather system - garbage collector.

  103. brevity and clarity, and library interface by bzipitidoo · · Score: 1

    I think C syntax beat out Pascal syntax because C is both briefer and clearer, or just as clear. Particularly, I mean things like "{" and "}" instead of "begin" and "end" for blocks, which is shorter, and friendlier to non-English speakers. Same for "if () {} else {}" vs "if then begin end else begin end", and the extra bit of confusion by allowing "if then stmt;", and the twiddling around they did with that in Modula. Also, operators are richer in C. I don't recall for sure, but I think Pascal does have an equivalent for ++, a clunky function call "inc()". And Pascal has this useless distinction between a procedure and a function. On the other hand, I've never liked C's "switch" structure, especially the part about having to put break statements all over the place. Also, structures have at least one exception to a general rule. In the statement "for (int i=0; i != 9; i++) {}", i is not supposed to be in scope outside of the brackets of the "for" structure, which goes against the simple rule that a variable is in scope from where it is declared to the close of the block it was declared in. But some compilers will incorrectly accept this. gcc did up to about version 2.7. Finally, maybe C's biggest advantage is being the native language the most popular OSes are written in, making it the easiest language to call system libraries from.

    Perl is in decline? I'm guessing Perl 6 will reverse that, if they can ever get it out the door. For me, the biggest improvement from Perl 5 to Perl 6 is the ability to just call on external library functions. If I understand Perl 6 correctly, you need only do the Perl 6 equivalent of "#include " and then you can call. In Perl 5, it's a huge pain, and may not work. For each function, you have to tell Perl in a special sublanguage called XS all the details of exactly how many parameters there are, how big each parameter is, the types (great fun if they're massive structures), and order. A reason for this is that such info cannot be gleaned from the library, it is generally only available in a C header file, which Perl 5 cannot comprehend. Or perhaps you try SWIG, and get 100K of generated source code so you can call one lousy function. Many of the Perl modules are nothing more than wrappers on common libraries, where someone else has gone through all the pain of figuring out the XS. Again, what counts here is brevity that doesn't sacrifice clarity. It's critical that a language be brief and clear on the all important interfacing with system libraries.

    I wonder if Java is drowning in libraries. Knowing the language doesn't make you a Java expert, you have to know all kinds of libraries. By comparison, C has a relatively small set of core libraries, with stdlib, stdio, and math. One book under 500 pages can cover them all. If you want to do GUIs in C, you can pick from a bewildering number of GUI libraries, from xlib to KDE or GNOME, but you don't have to know any of those libraries to be considered a C expert. Java, though... you'd better keep up with the latest in GUIs, sockets, and such to be considered an expert.

    As for C++, streaming was a disaster. iostream is slower, and generally harder to use than stdio. Fortunately, coders can ignore iostream and just use stdio. Its OOP isn't too clean either, with templates and operator overloading. C++ does however integrate nearly seamlessly with C libraries, unlike Perl 5. I found it interesting though not surprising that C is more popular than C++.

    A last word about brevity. The manual should be as small as possible, but also as complete as possible. K&R was somewhere between 200 and 300 pages. The Camel book is a little over 1000 pages. I have no idea whether there is a definitive book on Java, or how big such a book would have to be. Some documentation is more like a massive unknowable nest of hypertext the true size of which cannot be computed. Functional fans like to brag about the brevity, and will mention for instance that the specification for the Scheme dialect

    --
    Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    1. Re:brevity and clarity, and library interface by chromatic · · Score: 1

      For me, the biggest improvement from Perl 5 to Perl 6 is the ability to just call on external library functions. If I understand Perl 6 correctly, you need only do the Perl 6 equivalent of "#include " and then you can call.

      That's one of our Google Summer of Code projects, actually.

  104. Can't read the art! by Anonymous Coward · · Score: 0

    Looks like the slashdot effect is in effect. Only 10 concurrent requests! Crappy webhost plan...

    1. Re:Can't read the art! by ChromaticDragon · · Score: 1

      Does anyone else get a kick out of the fact that this article about why Java is going to die of old age is being hosted by a webserver which is...

      running Java ?

  105. Language vs class of work by mlwmohawk · · Score: 2, Interesting

    Another set of reasons why some languages survive and some don't may be the types of applications they can be used for.

    The C and C++ tool set is *never* going away. You can't, in any practical sense, write an OS in java. C and C++ are *the* standard for writing system level software. Most all system software is written in one of them and they are tightly coupled. There is no other language currently or on the realistic horizon that can replace their functionality.

    Java, on the other hand, is popular, but has plenty of practical competition, from C#, to perl, to even PHP. Hell, even visual basic has a VM environment.

    As a system level guy, I have little use for Java, C#, perl, or the others except as needed for glue between system level code.

    1. Re:Language vs class of work by gangien · · Score: 1

      The C and C++ tool set is *never* going away. You can't, in any practical sense, write an OS in java.

      Why the heck do people think this?? You certainly can write an OS in other languages and people have. I suspect many of the OSes of the future will not be written in C/C++.


      C and C++ are *the* standard for writing system level software. Most all system software is written in one of them and they are tightly coupled.


      I'd say C is the standard.

      There is no other language currently or on the realistic horizon that can replace their functionality.

      their functionality? what functionality is it, that you can't duplicate elsewhere?

    2. Re:Language vs class of work by mlwmohawk · · Score: 1

      Why the heck do people think this? You certainly can write an OS in other languages and people have.

      Why the heck do people conflate a specific argument with a general case? The statement was: "You can't, in any practical sense, write an OS in java." Which is true. Then I said: "C and C++ are *the* standard for writing system level software." Which is true for general system design, but I'll admit it may not be true for small embedded systems.

      their functionality? what functionality is it, that you can't duplicate elsewhere?

      The direct and predictable translation from source code to object code is a big one. There are others, like creating directly callable entrypoints and even interrupt handlers.

      The point isn't that it isn't "doable" elsewhere, it is just that it is not being done in other popular languages.

      You are confusing an "observation" of "what isn't" for a statement of "what isn't possible." *Anything* is probably possible, but whether or not it is practical, efficient, or something that people are going to use is a different story.

  106. I am a simpleton by opypod · · Score: 1

    irb> puts 'but ruby is so easy'

    ...OR...

    public class JavaRules {

    public static void main(String[] args) {

    System.out.println("no...java is better!");

    }

    }

    $javac foo.java

    $java foo

    1. Re:I am a simpleton by CxDoo · · Score: 1

      If writing a line of text is your measuring stick, drop the whole 'computer language' part. Use a pen.

      --
      "Blah blah blah." - [citation needed]
  107. authoritative? by Anonymous Coward · · Score: 0

    And they can't even afford a real web site with more than ten concurrent hits. Real authoritative.
    I would say that Java is already successful. COBOL was successful. Ruby, jury is still out. PHP has been successful.

  108. Int * string by Kludge · · Score: 1

    However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. Actually, if you multiply an int by a string, it will give you another string which is 3 times as long as the first, which is a really useful feature. The reason that people use Python:
    It is really useful.

    1. Re:Int * string by LeafOnTheWind · · Score: 1

      Parent is correct. What some people don't like about python isn't whether or not its strongly typed, but if it's statically typed. The advantage of Java and C in their type system is that errors in typing will be caught immediately by the compiler and there are no tests required. It's true that duck typing can help write good code, but it also requires careful unit tests because python is so polymorphic. Some programmers (me included) don't mind the option for dynamic typing, but feel that an optional static typing system would provide different functionality for those who like it.

  109. Already slashdotted... by Anonymous Coward · · Score: 0
    If you try and read TFA you get this reply:

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests: /2008/05/28/13-reasons-java-die-old-age/

    Hmm. TFA's server must be running Ruby. :)
  110. If I were you, I'd be horrified... by Anonymous Coward · · Score: 0
    ...because you completely misunderstood his article, and repeated things that were included in there as if they were not:

    You: "In order to be a good programmer, you have to know, and understand, many languages. It is your job. If you are unable to accept that, than it is time to either retire and let somebody else take your 100,000 salary or simply quit."
    Original article: "I recommend to every programmer to look around from time to time and try to understand what is going on the language market." I know you only have a bachelor's degree, because:

    You: "...you wrote an article to show why Java sucks? Guess what, you have to learn Java like all of us did in order to be successful."
    Original article: "...articles about the imminent dismissal of Java and its replacement with... ...No, that is not gonna happen. Java is gonna die eventually of old age many many years from now. I will share the reasoning behind my statement." ...you didn't even read the article. Nor can you spell "frustrated".

    Go back to college and demand your money back. Your degree is worthless.

    Sorry about that.

    P.S. I get paid over $100,000 a year to fix what numerous young college kids mess up in our company, and engineer solutions so they don't screw it up in the future.
    1. Re:If I were you, I'd be horrified... by Stregano · · Score: 0, Flamebait

      hahahahaha

      Ok, I am a bad speller, Oh no! Oh, I didn't read the whole article! Of course not, the website went out of tresh-hold on me. Old man forgot to upgrade his account.

      You have to fix what I mess up. I doubt that. You get paid 100k a year. Tell me right here right now that somebody else could not do your job? Be honest.

      You are the reason why us younger people can't get jobs. I know for a fact that I can show you a thing or two.

      Besides, you are the reason why my score is zero right now, and your score is already zero.

      Should I even trust the post of a person that gets mad and gives people lower scores when they, in fact, have a score of zero.

      Wow, seriously.

      I can play the lets quote everybody game as well.

      "fix what numerous young college kids mess up in our company, and engineer solutions so they don't screw it up in the future."
      Ok, so you are a programmer? You actually made the code personally that messed up your company? Every person in the IT industry I know that gets paid over 100k doesn't touch code, they have others do it for them.

      What languages do you know?

      The other person that showed his credentials towards me, sure I listened to what he said. I listened very well. Yes, I did not give him a good response, but I will admit I listened. Your credentials is that you get paid alot of money.

      I don't care how long you have been a manager or how long you have been programming, what languages do you know?

      I tell you what Mr. 100k a a year, I will teach you Java. Right here, right now, I will play nice on slashdot and never post another bad thing if you let me teach you java.

      How old am I, 25. I have had a programming job in our company for about 4 months, so I have about 4 months of experience.

      Mr. 100k a year, do you know Java? I can teach it to you. I can teach you PHP, C++, but you have to be willing to learn.

      Everything I posted repeats, because the message is clear, you have to be willing to learn in order to progress as a programmer.

      Your skillset that you know and have right now will mean nothing in 18 months. Don't worry, that is the same with me as well. How are you going to prepare for the new technology coming out? Are you going to sit in your comfy chair and have the people under you worry about that? I know that is how it is done in most companies.

      Just remember, the only reason why my score is zero is because somebody who totes a loud voice already had a score of zero.

      Also, when you say "engineer solutions" that sounds like something where you make a plan and tell your employees to figure it out. So you are not really fixing the issue, you are telling others to fix the issue.

      Oh yeah, and for somebody who makes 100k a year, why not sign up with slashdot? Are you afraid people might know who you are "Oh no, the humanity".

      --
      The world is how you make it
  111. this explains it all by digitalgimpus · · Score: 1

    From the linked page: Maximum concurrency limit of 10 exceeded.Currently serving the following requests: /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ If you are the owner of this website, you may need to upgrade to a more advanced plan. Yup... pretty ironic

    1. Re:this explains it all by teknopurge · · Score: 1

      His webserver is Mongrel, obviously.....

  112. Public Service Announcement from an Old Guy... by Anonymous Coward · · Score: 0

    For those who can't access the article:
    There's this neat website called "Google". It goes around on the Web and takes snapshots of webpages. Then it caches the snapshots so that you can do searches and find all kinds of neat stuff.

    For example, if I go there and type "13-reasons-java-die-old-age", I can look at a really nice snapshot of the original article- no worries about the Slashdot effect, because they have a really powerful infrastructure! Check it out: http://www.google.com/search?q=cache:cjG2pCd9RO8J:littletutorials.com/2008/05/28/13-reasons-java-die-old-age/+13-reasons-java-die-old-age&hl=en&ct=clnk&cd=2&gl=us

  113. No Sweat by Anonymous Coward · · Score: 0

    // This is why God invented comments
    return reduce(lambda b,c:(lambda x:(lambda r=sys.stdout.write(chr(x)):x)())(c+b), [32,40,29,7,0,3,-67,-12,87,-8,3,-6,-8,-67,-23])

  114. Re:Article is slashdotted, can someone post a copy by Call+Me+Black+Cloud · · Score: 1

    Despite the suspiciousness of parent post, the link is a good one and not a trap.

  115. Tcl anyone? by Anonymous Coward · · Score: 0

    I've tried a lot of languages and still keep
    searching for a new faster, better, easier one...
    but i keep going back to Tcl/Tk. It's amazing
    how fast you can code something useful with it.

    obviously we should use whatever fits the task
    upon us... I would never code an fft on Tcl/Tk.

    Any way, IMHO I think a mixture of high level
    like tcl/tk python, ruby, etc... mixed with a low
    level when needed (c, c++, even ASM!) is the way
    to go.

    my humble 2c

  116. Python by someone1234 · · Score: 1

    Python is very useful with C (or C++) as a quick way of building up GUI.
    When you code the calculation heavy stuff in C but keep the rest in Python scripts the code is cleaner, flexible and easy to maintain/understand. Also you don't have to recompile it, most of the times (unless you gotta touch the core stuff).
    I wouldn't use it alone, but a C/Python hybrid is better than Java.

    --
    Patents Drive Free Software as Hurricanes Drive Construction Industry
    1. Re:Python by OrangeTide · · Score: 1

      How is it better? Can you substantiate your claims? I get mostly touchy feely opinions from Python people so forgive me if I'm skeptical.

      (since I'm a C hacker I do my GUIs in C. Although I've done GUI in Java and it seems fine too, but I ignore Swing)

      --
      “Common sense is not so common.” — Voltaire
    2. Re:Python by jocknerd · · Score: 1

      Tere's a short video from a Plone programmer named Sean Kelly. He talks about his transition from C and C++ to Java and eventually Python.

      Look here: http://seankelly.tv/videos/

    3. Re:Python by OrangeTide · · Score: 1

      recovery from addiction ... more like face first dive into addiction.

      I automatically reject claims of "cleaner" without some way to support such a subjective claim.

      Nice bunch of assertions ... of course THERE IS NO SUPPORTING EVIDENCE TO SUBSTANTIATE THESE CLAIMS.

      also how can you not make the rent as a C programmer? I only do C for a living for years and have been able to find jobs left and right easily

      So your video link was as unhelpful as the rest of the wild claims people have been giving me as to why X language is better than Y language. :(

      The Python code didn't make any sense to me. even though he was walking me through it. Perhaps this video is just a bad explanation. The Java he was doing seems familiar though, mostly an argument for J++ (you can overload operators including assignments) than for Python.

      ps - I do like how he points out that code is read more than it is written. That's a pretty reasonable premise that I readily accept. And reminds me of when I wrote a large test framework in perl and multiple coworkers came to me and said "wow, this is very easy to read". I'm not "cool" because I write Perl like a C programmer :)

      --
      “Common sense is not so common.” — Voltaire
    4. Re:Python by someone1234 · · Score: 1

      I work with all 3 of these languages. I'm not a 'python people'. I'm mostly a C(++) people :>
      Python complements C(++) very well.
      As soon as you can implement something like gemrb (a sourceforge project) in Java, i can accept that Java is about as good as python+C.

      --
      Patents Drive Free Software as Hurricanes Drive Construction Industry
  117. Do you need map, filter? by nairb774 · · Score: 1

    For example:

    [int(x) for x in '1 2 3 4 5 6'.split() if x in '135']

    does a filter and map at the same time. And then there are the wonderful generators :) and the itertools package. Map et. al. need not be first class citizens any more.

  118. Judging from examples... by NerveGas · · Score: 1

    Judging from C, it's making giving the programmer complete control. A lot of people want/need that.

    Judging from PHP, it's taking everything including the kitchen sink and wrapping it into the interpreter, so that any schmoe with very little knowledge can whip out a web app quickly, without regard to security issues. A lot of people want that.

    Judging from Basic, it's making it easy to learn. A lot of people want that, too.

    I guess the ultimate answer is that a programming language is successful when it appeals to a need or a want in a significant section of people. But should that really be that hard to figure out?

    --
    Oh, you're not stuck, you're just unable to let go of the onion rings.
  119. Re:Opinions Are Like @ssholes by neokushan · · Score: 2, Funny

    Not knowing what exactly "COSA" was, I did the sensible thing and wiki'd it.

    Much to my surprise, it redirected me to an article on Sex Addicts Anonymous (I kid you not, try it yourself: wiki COSA).

    Upon seeing this, I can't see how it will help computing at all. Hardcore programmers aren't supposed to get laid at all, let alone get laid so much it becomes a problem. But then maybe that IS the problem, maybe all the REAL programmers are off bonking so much, they don't have time to write a decent C++ library for perfect multithreading....

    --
    +1 IDisagreeSoHeMustBeATrollOrAnAstroturferOrAShill
  120. All of what you describe is in Java already by SuperKendall · · Score: 1

    Javadoc, reflection, String class pretty much cover all of what you just did. And they all offer features richer than the basic ones provided by Python.

    I have used many, many languages from Java to Objective C to Scheme to Ruby to PHP. Python is the only modern one I specifically avoid. Sorry, had enough of whitespace dependent code with Fortran, it cramps my style.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:All of what you describe is in Java already by Just+Some+Guy · · Score: 1

      Python is the only modern one I specifically avoid. Sorry, had enough of whitespace dependent code with Fortran, it cramps my style.

      Until I quit developing with Notepad, I felt the same way.

      (Note: the above loop can be short-circuited)

      --
      Dewey, what part of this looks like authorities should be involved?
  121. Libraries fixing its flaws by Kjella · · Score: 1

    For example, C++ is a language that should be dead. It's got so many horribly insecure ways of doing things, worst of all the zero-terminated string. On a good number two comes all the array operations and such where you can read out of bounds until you crash and burn. Plus the countless opportunities you get to shoot yourself in the foot with pointer arithmetic without auto_ptr and other good practises. Why doesn't it die? Because the libraries evolve to fix things like this. Personally I use Qt so QString and QByteArray means I don't think I've ever written a buffer overflow into any of my applications. What's holding languages back are features you just can't implement through libraries, like new keywords or other fundamental constructs. C++ misses a few I'd very much like to see, but we'll see. I think older languages will persist much longer than people think, even the flawed ones.

    --
    Live today, because you never know what tomorrow brings
  122. The real reason Java will die.... by axehind · · Score: 1

    When I click on the provided link I get..... Maximum concurrency limit of 10 exceeded.Currently serving the following requests: /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ If you are the owner of this website, you may need to upgrade to a more advanced plan.

  123. This page, my friends,... by sheepoo · · Score: 0

    has been Slashdotted!

  124. Re:Opinions Are Like @ssholes by Anonymous Coward · · Score: 0

    But then maybe that IS the problem, maybe all the REAL programmers are off bonking so much, they don't have time to write a decent C++ library for perfect multithreading....

    Like I said, opinions are like assholes. Maybe you should call Intel and Microsoft and tell them that you solved their multithreading parallel programming problem and that there is no need for them to keep funding Berkely and the University of Illinois at UC. Tell them to give you the money instead.

  125. Text of the article mirrored here by jeremyp · · Score: 1

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests:

    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /favicon.ico
    /2008/05/28/%3Cscript%3Ealert(1)%3C/script%3E
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /favicon.ico
    /2008/05/28/13-reasons-java-die-old-age/
    /
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /favicon.ico
    /2008/05/28/13-reasons-java-die-old-age/

    If you are the owner of this website, you may need to upgrade to a more advanced plan.
    I really think Slashdot should try to avoid linking sites that only allow ten concurrent connections, although I admit I don't know how they could figure that out without doing some sort of stress test.
    --
    All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    1. Re:Text of the article mirrored here by afabbro · · Score: 1

      I really think Slashdot should try to avoid linking sites that only allow ten concurrent connections, although I admit I don't know how they could figure that out without doing some sort of stress test.

      SlashDot does not care about this issue. There's a FAQ entry on the subject, but all attempts to actually discuss one of the questions therein - "I could try asking permission, but do you want to wait 6 hours for a cool breaking story while we wait for permission to link someone?" - are rejected, as are polls on the subject, etc.

      My opinion: Microsoft bidding for Yahoo is breaking news, and there are lots of sites setup to take high volume that you can link to. But for a discussion like this? Who cares if we have to wait a day?

      SlashDot does not care about the "SlashDot Effect" because it's not in their business/financial interest to care about it. If they were more responsible, asked permission before linking, etc., they would need to actually have editors.

      --
      Advice: on VPS providers
  126. print statement - function by SEMW · · Score: 1

    Save your hysteria for something genuinely catastrophic, like the loss of the print statement. It's not like you won't be able to print to a console; it's just being converted from a statement to a function for consistency. Is typing two extra parentheses really "genuinely catastrophic"?
    --
    What's purple and commutes? An Abelian grape.
  127. Ada by mknewman · · Score: 2, Insightful

    Ok, I'm going to chime in on this. What makes a good programming language is Strong Typing, Bounds Checking, strong compiler time checks and easy maintainability. One of my favorite languages was Ada, back in the 80's, because it made it very difficult to write bad code. I also used a version of GCC called EGCC which did the same sorts of checks and added run time checks, but it also never caught on. Coming from a Quality Assurance background, Ada satisfies the Maintainability, Portability and Reliability requirements. I was very happy to program in it after coming off Pascal and Modula-2. Marc

  128. Scalability by Anonymous Coward · · Score: 0

    Nice list, but I would add 'scalability'. An app might perform like the bejeezus for ten people. Everyone likes it, so more people start using it. Can you support hundreds, thousands, tens of thousands of simultaneous users? Can your app leverage multiple cores? Multiple independent servers?

    I think that most folks who claim their favorite language of the day is "easy" typically aren't concerning themselves with very large deployments. Try deploying your application to a half dozen multi-cpu multi-core servers working in coordinated fashion with each other and multiple databases and you might rethink your definition of "easy".

    I agree w/ the pp's point that there are necessary trade-offs between various languages. My pet peeve are the inexperienced programmers who have never had to confront problem X (e.g. scalability) who nonetheless blithely assert the superiority of their chosen language. Talking trash is fine, but when you see this ignorance translated into actual projects, that people pay money for, that are poorly constructed around someone's favorite programming idiom, then there's a real problem.

  129. Inanity by afabbro · · Score: 1

    Can we say COBOL is a successful language?

    If you don't know the answer, you're too young to ask the question. Yes, the language that still runs the majority of the world's transactions is successful. Infoweek or Computerworld or one of those trade rags recently ran an article in which they noted that on a daily basis, there are an order of magnitude more transactions run through COBOL programs than what Google handles.

    Dumbest. Question. Ever.

    --
    Advice: on VPS providers
  130. Greatest Language of all time by thc4k · · Score: 1

    -compiles to native code
    -type interference
    -minimal syntax
    -multi paradigms
    -batteries included
    -great name

    That would be my perfect language. I'd call it Perfect Python and "just" add OCamls type interference and native code to Python3k.

    Also to add another quote since i saw the Knuth one already:
    There are only two kinds of languages: the ones people complain about and the ones nobody uses.
    -Bjarne Stroustrup

  131. I'm in the same boat by Anonymous Coward · · Score: 0

    Most of my code is written for and used by me. For embedded/dsp stuff, I use C. For almost everything else, I use Python.

    The reason I started using Python was that one of Sun's programmers wrote a memo saying that Java wasn't actually that good for what they were doing. He suggested Python as viable alternative. (I'm not sure the memo was 100% authentic.) http://developers.slashdot.org/developers/03/02/09/1347215.shtml?tid=108

    One of the things I like best about Python is that it is very easy to write self-documenting code. I can pick up something I wrote a year ago and quickly come up to speed. The parent article makes no reference to code maintenance and ease of documentation. Does that mean that serious programmers don't care about things like readable code. Hmm ... No, I think that's why we quit trying to code everything in assembly iirc.

  132. What makes a website successful? by jmerlin · · Score: 0

    Surely, uptime and bandwidth.

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests:

    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /favicon.ico
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/
    /
    /2008/05/28/13-reasons-java-die-old-age/
    /2008/05/28/13-reasons-java-die-old-age/

    If you are the owner of this website, you may need to upgrade to a more advanced plan.



    It's hard for me to take such an article seriously if the guy can't even host a website properly.

  133. Actionscript! by Anonymous Coward · · Score: 1, Insightful

    really... the reason Java is so popular is because all Universities use it to teach programming. The student are lazy and when they come out and play in reality they stick to what they know...

    My favourite language for quick&dirty app making is Actionscript/flash. No other language comes close in speedyness... You have a vector based paint & sound editing program that can read photoshop files & import just about anything from avi movies to mp3's right next to your code, powered by a nice library... and your app can run in a web page or as standalone on practically all platforms.

    So if someone is about to make a new language, check out the flash system and improve on it - Actionscript sure has it's illnesses.

  134. Wow - I didn't see that coming by blackfrancis75 · · Score: 1

    As usual, any 'discussion' regarding programming languages on /. degrades into the following argument: "A Screwdriver is more useful than a Hammer" "No way! A Hammer is more useful than a Screwdriver"

  135. A combination of 5 things by tachophile · · Score: 2, Insightful

    In no particular order:

    1) Development speed
    2) High number of areas the language works well for
    3) Low barrier to entry (ease to learn, expense and ease of setting up an initial dev environment to evaluate the language, community support...)
    4) Available (cheap) Libraries
    5) Industry Buzz

  136. common set of commands by hey · · Score: 1

    Many languages already have common commands/function - eg print split substr. I'd like to see a standards body codify this. This way switching languages would be easier since they'd share more in common.

  137. Success is irrelevent... by Bones3D_mac · · Score: 1

    Programmers will always use whichever languages they are most comfortable with for as long as they continue to be supported. As long as either a good compiler or an efficient runtime engine exists for output to whatever OS is needed, it makes no sense to switch out to a less familiar language unnecessarily based solely on it's popularity. (Especially where deadlines are concerned...)

    However, there is something to be said of using widely known and understood programming languages versus obscure or dying languages in instances where continuous support for a piece of code is required on a regular basis. If more than one person has to be involved, you're better off staying with a mainstream language for the sake of the code's own longevity, even at the cost of time lost to cracking open a language reference every so often.

    --


    8==8 Bones 8==8
  138. This is rediculous by sentientbrendan · · Score: 2, Interesting

    A lot of noise comes up about these various flash in the pan languages periodicallly, but if you look at a chart of language uses, even python that has been around for 10 years or more has only a few percentage points marketshare.

    Meanwhile, Java is the most widely used programming language ever, at around 20%.

    http://radar.oreilly.com/archives/2006/08/programming-language-trends.html

    Whereas C and C++ hover around the 10 or 20% range.

    I use python for some small utilities, and in fact I do expect python's usage to increase over time. However, expecting java or c++ to die, is like expecting English and French to die, and some Esperanto to take over.

    It doesn't even *matter* that much if there's some language out there that's so much better than C++ or Java (which is debatable, but functional programming fanatics will scream so loudly about it so I'm not going to bother to argue the point), but that fact that such a vast volume of existing code is written in c++ and java, and there are so many tools and libraries written to support c++ and java development, makes it a *huge mistake* to start some kinds of large software development projects in some other languages, where all of these things will need to be written from scratch at enormous expense.

    Projects written in non mainstream languages tend to either fall into a specific program domain the language was designed for, or tend to be very small scale, and usually both. There are very few good *general purpose* langauges that scale up and have good library and tool support. Read: There are *two* of them.... well, three if you consider c#, which I don't, because it is proprietary.

    1. Re:This is rediculous by chromatic · · Score: 1

      ... if you look at a chart of language uses...

      That's a chart of book sales figures for a given period of time. That chart leaves out a lot of factors peculiar to the business of selling books.

    2. Re:This is rediculous by blackfrancis75 · · Score: 1

      Agree. Infact one might be amazed at how quick easy it is to create a 'composite application' in Java to accomplish any range of functions. This is because it's usually just a matter of pulling in from the swathes of well-written and documented open-source code out there and stitching it together.

  139. hand-written tests are infinite descent by Anonymous Coward · · Score: 0

    write tests first how do i make my compiler write tests first? and why isn't writing tests first taught in college? and how do i test the tests?
  140. Data Base Error - Site Down already!!!! by John+Sokol · · Score: 1
    I am sorry but I don't consider Ruby or Python as serious contenders yet (leaving some wiggle room)
      And I think the jury is still out on Java. It's just such a mess even without goto's .

    The fact that this site has already tipped over is a good indication of the merits this article must have. Too bad I can't read it.

    Maximum concurrency limit of 10 exceeded.Currently serving the following requests: /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/ /favicon.ico /2008/05/28/13-reasons-java-die-old-age/ /2008/05/28/13-reasons-java-die-old-age/

    If you are the owner of this website, you may need to upgrade to a more advanced plan.
    --
    I am always doing that which I can not do, in order that I may learn how to do it. - Pablo Picasso
  141. Replacement for Perl? by Ken_g6 · · Score: 1

    Personally, I think of Python as a prettier and more coherent version of Perl. I've done a little Python. For me, no language will ever replace Perl unless it can do three things:

    1. Small, simple associative arrays. foreach helps too. I've found IronPython at least can do that:

    arr = Hashtable()
    arr['foo'] = 'bar'

    2. Small, simple, self-contained regular expressions, with variable replacement. I haven't seen another language yet that can do this in one command:

    $str =~ s/(foo|bar)/$arr{$1}/g;

    3. Small, simple standard I/O. Many languages write to STDOUT easily. Few read from STDIN *or* a file this easily:

    "while(<>) { &foobar $_; }"

    Fewer still let you slurp STDIN, too:

    "{local $/; $_ = <>;}"
    --
    (T>t && O(n)--) == sqrt(666)
    1. Re:Replacement for Perl? by gclef · · Score: 1

      associative arrays...I think you're looking for dictionaries. IronPython has them because regular python has them.

      testDict = {}
      testDict['foo'] = "bar"

    2. Re:Replacement for Perl? by Anonymous Coward · · Score: 0

      testDict = {'foo': 'bar'}

    3. Re:Replacement for Perl? by Lars512 · · Score: 1

      1. Small, simple associative arrays. foreach helps too. I've found IronPython at least can do that:

      arr = Hashtable()
      arr['foo'] = 'bar'

      How about:

      arr = {}
      arr['foo'] = 'bar'

      or

      arr = {'foo': 'bar'}

      2. Small, simple, self-contained regular expressions, with variable replacement. I haven't seen another language yet that can do this in one command: $str =~ s/(foo|bar)/$arr{$1}/g;

      Does one line or two matter?

      for key, rep in y.iteritems(): x = re.sub(key, rep, x)

      3. Small, simple standard I/O. Many languages write to STDOUT easily. Few read from STDIN *or* a file this easily:

      "while(<>) { &foobar $_; }"

      Fewer still let you slurp STDIN, too:

      "{local $/; $_ = <>;}"

      How about

      for line in sys.stdin: do_stuff(line)

      or

      input = sys.stdin.read()

      Which is more readable?

  142. What about the future? by walterbyrd · · Score: 1

    I expect that in the future, the more popular languages:

    1) will be disigned to run on multiple platforms
    2) will be designed to develop multi-platform apps
    3) will be designed to develop browser based apps

    Just my WAG.

  143. Popularity by kellyb9 · · Score: 2, Insightful

    What Makes a Programming Language Successful? I'm going to go with a high rate of user adoption.
    1. Re:Popularity by WheresMyDingo · · Score: 1

      What Makes a Programming Language Successful? I'm going to go with a high rate of user adoption. Until programming languages get smart and stop depending on humans to adopt them. A really successful language would destroy code written in other languages and spread itself everywhere.
  144. Tcl by dskoll · · Score: 1

    Tcl "antiquated, primitive and ugly???!?!?" Tcl is a thing of beauty. It's C bindings are unsurpassed in cleanliness. It's event-loop is a joy to behold. You can write some really great things in Tcl.

  145. Python 3000 still has FP concepts by Krischi · · Score: 2, Insightful

    You could write your example just as easily like this:

    l = [int(x.strip()) for x in l.strip().split(',')]

    This version is arguably *easier* to read than your map-and lambda-based example. Map and filter are pretty much superseded by list and generator comprehensions (in fact, generator comprehensions allow for transparent lazy evaluation and are heavily used in good Python frameworks). reduce() is easy to provide on your own if you really need it, since functions are fist-class objects in Python, but even so I agree with Guido that explicit accumulation loops are easier to read than most reduce() expressions.

    The only thing that I could conceivably miss are lambda functions. They do occassionally make for tighter and more readable code, but locally defined closures serve the same purpose, so again, there is no loss of expressiveness.

  146. The three qualities: Power, speed, quality. by Anonymous Coward · · Score: 0

    Fast, cheap, good. Pick any two!

    It's cheap and fast, but it's not good.
    It's good and cheap but it's not fast
    it's good and fast but it's not cheap.

  147. Re:Opinions Are Like @ssholes by clampolo · · Score: 2, Informative

    Not knowing what exactly "COSA" was, I did the sensible thing and wiki'd it.

    I got the same wiki about sex addiction. After looking at his crackpot site I found out that this miracle called COSA is just a fancy name for graphical programming and data-driven languages (basically what LabView does.) Or what a schematic diagram does.

    Guy clearly never used a schematic diagram or he'd know how painful they are compared to doing the same thing in a normal language like VHDL. Need to add an extra input to one of your functions? UH OH!! Time to tear up all your connectors and sit for 1/2 hour redrawing lines. Same thing would take 5s (literally) in VHDL.

    Hopefully, the hospital this guy escaped from finds him and returns him to his cell.

  148. The Psychology of Java Haters by neuromancer23 · · Score: 1

    This is such a joke that sometimes I feel like I shouldn't even bother to respond.

    FACT:

    Java is far and away the best platform for developing almost all serious applications today, for anyone who doesn't want to sell their soul to Microsoft. Here is why (* Indicates a feature not available in any other programming language.):

    1. Platform independence
    2. Strongly typed
    3. Good interface implementation separation
    4. Application server independence*
    5. Database independence without changing an API*.
    6. High-performance
    7. Security
    8. Distributed Transaction Bindings across multiple resources*.
    9. Still the standard for messaging.
    10. Can run on all kinds of devices (phone, pda, smartcard, etc.)
    11. Runs on more devices than any other programming language in the world.
    12. World's best memory management.
    13. Cross-Platform native interface (i.e. JNI)
    14. More open source applications written in Java than in any other language.

    The script kiddies can babble all they want. None of them have ever had to maintain an application in the real world. If they had, they would know that writing large applications in a scripting language is a bad idea. I've yet to meet a Ruby, PERL, or PHP advocate who I would consider to be a good software developer.

    Scripting languages have their place and there are definitely some cool apps written in Python (e.g. portage), but there isn't any valid reason to use Ruby, even if you are the most dogmatic fan of the ActiveRecord anti-pattern.

    Most people have no concept of what it would take to replace Java and all of the features that Java has. Scripting languages are (at best) still several decades away from getting to where Java is now. In fifty years from now Java will still be the language of choice. You could make a better argument for replacing C, but then why bother? Why not stop being a loser and build something useful instead of tearing down the leader all of the time? The answer of course is that advocates of using scripting languages for serious software development are sexual impotents who can't create anything and they view real creators with hatred and jealousy. If you want to understand why they keep bringing this point up in spite of the obvious superiority of the Java platform, you should read the Mass Psychology of Fascism.

    1. Re:The Psychology of Java Haters by ardor · · Score: 1
      You mix Java the language and Java the platform. The platform is excellent, I agree. The LANGUAGE is a bastardized lobotomized C++. "Java is C++ minus its weaknesses and strengths."

      Its easy to find a language that is more powerful than Java. Python, Perl, Lisp, Haskell, C++, Scheme, Clean, Smalltalk, Objective-C, ....

      For business, there is little chance to avoid Java. But please, separate the language from the platform.

      I've yet to meet a Ruby, PERL, or PHP advocate who I would consider to be a good software developer. Ironically, I've yet to meet a C++ developer who has difficulties learning Java (same goes to Haskell/Lisp/etc. developers), and on the other hand a Java developer that can pick up C++ with ease. (And not just tiny bits of it - boost/STL-class C++.) I have no doubt that great Java developers exist - the language is ultimately secondary, after all. But if I wish to build shiny new houses, I don't choose a cheap hammer.
      --
      This sig does not contain any SCO code.
    2. Re:The Psychology of Java Haters by neuromancer23 · · Score: 1

      Point taken. Would you prefer something that was more like C++?

      Personally, I love Python, but in my opinion, it's lack of strong typing makes it unsuitable for enterprise apps. One nice thing you can definitely say about Java as a language is that code that is poorly written in Java is easier to read than code that is poorly written in Python or PERL. That's what matters to me, but my career consists entirely of cleaning up other people's messes.

    3. Re:The Psychology of Java Haters by chromatic · · Score: 1

      One nice thing you can definitely say about Java as a language is that code that is poorly written in Java is easier to read than code that is poorly written in Python or PERL.

      That's a silly comparison. No one writes code in PERL. It's a joke language.

    4. Re:The Psychology of Java Haters by ardor · · Score: 1

      I would like a language with the *power* of C++ (i.e. multiparadigmatic, metaprogrammable, turing-complete templates, generic programming, operator overloading - which only makes sense with generic programming - ...) but WITHOUT its many weaknesses and errors (like the dreaded template syntax). Metaprograms get unreadable quickly. Also, C++ still lacks a standardized reflection mechanism. And the compile time is abysmal too.

      D is a hot candidate, but is quite unpolished and unfinished (don't bother lookin at 1.0, wait for 2.0), and doesnt have the same momentum C++ and Java have. I see them on a good path, though.

      --
      This sig does not contain any SCO code.
    5. Re:The Psychology of Java Haters by neuromancer23 · · Score: 1

      Have you ever thought about just creating your own? It would be an interesting project, and you could always compile to java byte code. Have you ever used Groovy?

    6. Re:The Psychology of Java Haters by ardor · · Score: 1

      Indeed I have - as an academic curiosity. Especially the type system would be an interesting playground - instead of primitive and structured types in C style, I'd think about more Haskell-like ones. Also, I would specify access and traversal semantics (in case its a compound type), treating variables like fiber bundles (or maybe even sheafs).

      It is absolutely out of the question for production stuff of course. But I am not sure about Java byte code. IIRC it works at a high level, knowing about classes etc. this makes heterogenous templates a challenge. Or am I mistaken and homogenous templates are purely a Java issue? If not, LLVM might be more interesting.

      Nope, never used Groovy.

      --
      This sig does not contain any SCO code.
    7. Re:The Psychology of Java Haters by neuromancer23 · · Score: 1

      You are correct that Java byte code is inherently class based, but there are many good APIs for modifying byte code even while it is running. I think you could probably add traversal simply by inserting custom methods into each class at compile or runtime. Of course, Java code will always be object oriented. Does that cause a problem?

      Primitive types in java really don't bother me since I rarely use or think about them (except for boolean of course). The one exception is JDBC code, which uses primitive types.

      resultSet.getLong() returns primitive type long instead of object type java.lang.Long.

      I don't know why they didn't use the wrapper classes instead, especially since you are dealing with database columns that can contain null values.

  149. True by Anonymous Coward · · Score: 0

    I've done polymorphic functions in Fortran77 with the VAX extensions (widely available) of %LOC and %REF.

  150. change will come by Anonymous Coward · · Score: 0

    Change will come from young programmers and start-ups that don't have much invested in terms of development tools and accumulated knowledge related to the old dominant languages....

    over years, leaders will spawn from this group and they will control the thoughts (salaries) of the rest of us mortal programmers, but until then...

    I for one welcome our current corporate Java sipping overlords!

  151. CPAN by Doc+Ruby · · Score: 1

    The language has to start out exposing lots of functionality of the machine it's to program. Its syntax has to be the most consistent, so new functionality and techniques are more easily learned on the fly. But that's just the entry fee.

    The more existing code there is to "just use" (by calling it, simply and easily), the further ahead the language will pull in the competition. The easier it is to get that code, the more that existing code will count. The more documentation and people who answer questions about using the code, the more the code available will get used well.

    And that's why I love Perl. It does everything, really everything, but not necessarily all at once. Most programming problems have already been solved in Perl, and usually in as many ways as there are to do it. And there's so many people who can answer the questions, and already have in googlable pages, that it's pretty reliable to get up to speed to do something, and master it quickly - if the programmer is any good.

    Now if I could just store my Perl programs' call graph in a relational DB instead of a flat file, and flip the view between flowchart and lexical subroutines/modules, Perl would be nearly flawless. If it could import other languages like Java, Ruby, Python and C/C++, and output concise, efficient Perl to edit, then spit back efficiently revised code in the original language, it would be perfect.

    --

    --
    make install -not war

  152. Re:Opinions Are Like @ssholes by s4m7 · · Score: 1

    COSA is the answer to everything that ails computing and you can't stop it I'm curious... where can I download an actual functional implementation of this miracle of CS?
    --
    This comment is fully compliant with RFC 527.
  153. Missing Some Info by ttfkam · · Score: 1

    Java can do this *without class extension* with what are called interceptors. These can be invoked either just before a method is called, just after, or both. You can log, perform timing measurements, or just about anything else. In addition, the class doesn't even have to be annotated with the logging data. Most environments will allow you to specify interceptors without changing your class files or a single line in source code. This means you can add logging without re-compiling or even unpacking your production code.

    As for your precious Rails, two words: EJB 3.0. Entity beans don't need to extend from any other class -- although they can if you want them to. You can specify many-to-one, many-to-many, and other relationships with simple annotations. You can ensure that fields are not null and maximum length. Even beyond that, you can make your bean in Groovy, taking advantage of EJB 3's annotations while writing even more succinct code. All of this while still having access to the complete Java API.

    If Ruby on Rails works for you, good for you. Keep using it. But it's got nothing that other frameworks on other languages don't have. Python and Django come to mind. Drupal on PHP as well (although I hate PHP with a passion).

    --

    - I don't need to go outside, my CRT tan'll do me just fine.
    1. Re:Missing Some Info by arevos · · Score: 1

      Java can do this *without class extension* with what are called interceptors. These can be invoked either just before a method is called, just after, or both. You can log, perform timing measurements, or just about anything else. Interceptors are part of the EJB 3.0 specification, correct? How long did it take that specification to be finalized and implemented? How many people were involved? What was the total cost in manpower?

      EJB 3.0 looks to have been in the works for over 2 years, with numerous expert groups involved in the process. Even if only 1% of the effort was spent on developing interceptors, that's still a significant amount of time and effort.

      In Ruby, it takes one person 10 minutes and a dozen lines of code to produce the equivalent functionality.

      The Java libraries, extensive though they are, can't account for every situation. More flexible languages, like Ruby, can introduce new functionality much faster than Java. When it takes 10 minutes to implement a feature, that's time worth spending. When it takes 10 days or more, that's probably not worth it, unless the feature is going to be used extensively.

      Further, I'd argue that there's a crippling information cost in Java's approach. It's much better to have a small set of core rules that result in a flexible language, than to try and compensate for an inflexible language with hundreds of libraries and frameworks.
    2. Re:Missing Some Info by ttfkam · · Score: 1

      Actually, interceptors are not specific to EJB 3.0, but nice try to divert attention from the main issue: Java has access to a feature that earlier was asserted it did not.

      As for the number of hours the spec took to make, that is wholly irrelevant. The W3C CSS specs took far longer to make and many more hours than Netscape's layer approach in their 4.0 browser revision. That is a statement of effort, not of quality. If you want to assert that the quality of a particular interceptor implementation or the amount of time it takes to define an interceptor relative to Ruby, fine. But that wasn't the argument you just made.

      As for a Ruby developer taking 10 minutes to produce the equivalent functionality, that may be true, but that does not mean it would take the Java developer much longer for the same task. That Ruby developer is taking advantage of many developer hours to make Ruby available, and Ruby also had the benefit of hindsight, being a younger language. If Ruby were older than Java and yet showed sufficient foresight to implement this feature, I'd be far more impressed.

      Java, on the other hand, had to implement this feature in an accessible manner without breaking existing code. Now that this foundation has been laid -- not originally by Sun, by the way -- an admin or programmer can link primary code to intercepting code without even recompiling. So where is the advantage to Ruby? That Ruby has a standard library that handles logging in this manner? I was under the impression that increasing the size of the standard library was "crippling" in all common cases?

      Today, since before we even started this debate, both languages would allow the same approach to development. If they both have the feature, why keep on arguing about who got it first or how long it took for either to get it? What's the point?

      If we're going to talk about feature parity, where's Ruby -- and by extension, Rails -- with regard to sandboxing? Can you download code from an external source, execute it, and still be assured that, for example, that code cannot write to a particular directory on the server's filesystem? Can you limit that code's ability to open up network sockets to any host not on a whitelist? Can you transparently deploy an application to multiple servers in a cluster and have them act as one without ad hoc schemes involving rsync?

      Java can.

      I have no problem with your use of Ruby on Rails. If it works for you, keep on using it. Why do you feel the need to try to piss on others' parades? Just be warned that if you do so, others will be tempted to point out that no matter how new and shiny your hammer is, it's still a hammer like everyone else's.

      --

      - I don't need to go outside, my CRT tan'll do me just fine.
    3. Re:Missing Some Info by chromatic · · Score: 1

      If Ruby were older than Java and yet showed sufficient foresight to implement this feature, I'd be far more impressed.

      Ruby is arguably older than Java -- and if you want to quibble about Oak and public releases and whatnot, they're both fourteen or fifteen years old.

    4. Re:Missing Some Info by ttfkam · · Score: 1

      I stand corrected. I guess the "developer hours" argument doesn't work either.

      Then again, this argument has been far too acrimonious on both sides. Can't we all just get along?

      --

      - I don't need to go outside, my CRT tan'll do me just fine.
    5. Re:Missing Some Info by chromatic · · Score: 1

      I stand corrected. I guess the "developer hours" argument doesn't work either.

      You had something about Ruby benefiting from hindsight though. The best thing you can say about Java from a language design perspective is that it took only 95% of the "must own the world" approach from Smalltalk and borrowed the syntactic and semantic simplicity of C++ (which is mostly backwards from what any sane language designer would do).

      You can give Java-the-platform some credit for dragging the "Only pre-compiled software is serious software" world slightly toward JIT compilers and garbage collection, but again, Ruby the platform implements far more of Lisp than the JVM is likely to.

    6. Re:Missing Some Info by arevos · · Score: 1

      Actually, interceptors are not specific to EJB 3.0, but nice try to divert attention from the main issue: Java has access to a feature that earlier was asserted it did not. That's not the main issue. Or at least, it's not the point I was trying to make. But that wasn't my point. You can implement any complex functionality in Java through reflection and bytecode generation. My point is that it's much more difficult to implement functionality in Java than in more expressive languages.

      That Ruby developer is taking advantage of many developer hours to make Ruby available, and Ruby also had the benefit of hindsight, being a younger language. If Ruby were older than Java and yet showed sufficient foresight to implement this feature, I'd be far more impressed. Java 1.0 came out in 1995, Ruby 1.0 came out in 1996. A year's difference does not really leave much room for hindsight.

      And Java isn't just limited by today's standards, it was limited even when it was first designed. Lisp is 50 years old, yet even McCarthy's original paper, back in 1958 described a language more expressive than Java. And the first Lisps could implement the same observer function as in Ruby.

      Today, since before we even started this debate, both languages would allow the same approach to development. If they both have the feature, why keep on arguing about who got it first or how long it took for either to get it? What's the point? Because you'll eventually come across a problem that hasn't be solved with a library. If you can produce a solution for method observer faster in Ruby than you can in Java, then what does that say about the speed with which other problems can be solved? If you can implement a solution to a problem faster in Ruby than in Java, isn't that a solid reason to use Ruby?

      Can you download code from an external source, execute it, and still be assured that, for example, that code cannot write to a particular directory on the server's filesystem? ...

      Java can. But Java can't. The JVM and the standard libraries can, but that's not inherently a property of the language, but a property of the environment.

      All those advantages apply equally to any other JVM-based language, such as Scala or JRuby.

      Just be warned that if you do so, others will be tempted to point out that no matter how new and shiny your hammer is, it's still a hammer like everyone else's. Ruby isn't a hammer; compared to Java it's a nailgun. It's more dangerous, certainly, but in the right hands and in the right situation, you can produce results in a fraction the time your hammer can.

      My intention is not to piss on anyone's parade, but Java is a language that artificially restricts the number of solutions open to a programmer; some would say deliberately so. But it's hard to see these restrictions if you don't have experience with other languages. It's the Blub paradox.
  154. Java supports PHP by Mr.+Kimba · · Score: 1

    It is a sad fact that many sites that promote JAVA are written in PHP: www.JavaWorld.com www.eclipse.org www.netbeans.org www.myeclipse.com Does this make PHP better, I think not, but it does show that JAVA is a pain to put something up and it is easier, faster and robust enough to program it in PHP.

  155. well, the blog broke! by Anonymous Coward · · Score: 0

    Wonder which one of the upcoming successful languages his blog was written in...

  156. Lambda the Ultimate by bob.appleyard · · Score: 1

    I assume LAMBDA is some dynamic definition of the named parameter

    No, lambda defines an anonymous function with closure. It's simply amazing, and the listing above does it no justice at all, mostly due to the broken way that Python handles lambdas. I'd tell you to check out lambda calculus, but it comes across as hard maths (because, to a degree, it is), but really, it's fantastically simple.

    Say you wanted to iterate over a list of numbers, squaring the result, and then adding up the total. This could be done with

    (reduce +
    --------(map (lambda (item)
    ---------------(* item item))
    -------------list))

    Ignore the dashes, I don't know how to indent inside one of those bastards. What this does is take list and maps the lambda to each item (which squares them), returning a list containing all the squares to reduce, which then applies the + operator to all of the items in that list, satisfying our requirement. Three very simple lines in Lisp, a shitload of lines in C.

    Do demonstrate closure, let's take map, and make a function that takes a list and adds a number to every item, and then returns the resulting list.

    (define add1
    --(lambda (list increment)
    ----(map (lambda (item)
    -----------(+ item increment))))

    See how we just created a function on the fly, that refers to variables defined locally, but outside the lambda? We can return a lambda from a function that refers to local bindings inside that function as well, if we want. Hell, we can do what we like, lambdas are just objects like anything else. This is closure.

    Those two properties, together, are incredibly powerful. It's fantastically easy to make abstractions that are simply impossible in a language without them, unless you're prepared to put up with lots of boilerplate and obfuscation.

    Honestly, before I met this fellow, I was wedded to OOP. Now I'm not so sure. I can do OOP with lambdas, but the other way round? Messy, very messy.

    --
    How dare you be so modest!! You conceited bastard!!
    1. Re:Lambda the Ultimate by SQLGuru · · Score: 1
      Ok, I get the first one.....

      select sum( items.item ^ 2 ) from items And I sort of get the second one......

      select items.item + increments.increment from items, increments where items.rownum = increments.rownum Layne
    2. Re:Lambda the Ultimate by Ichoran · · Score: 1

      Lambda functions in Python don't really have any advantages over inner classes in Java except that the syntax is a little shorter and Java's standard libraries don't use the model enough.

      I also think you need to have more complex examples to see the power of closures or lambda functions.

      For example,

      int n = 0;
      for (Integer i : list) n += i*i;

      is shorter than the closure code to do the same thing (and is easier on one's working memory). Likewise for

      void AddL(List<AtomicInteger> list,int increment)
      {
          for (AtomicInteger i : list) i.set( i.get()+increment );
      }

      And these would be prettier still in a weakly typed language, or a bit prettier if Java would assume sensible defaults.

      Often, languages that have lambda functions need them because they have low-level types that are accessed by value (or other immutable types). For example, in Python,

      numbers = [1,2,3,4,5]
      for i in numbers: i = i+5

      does not do what you want because i is not accessed by reference. So you write

      numbers = [1,2,3,4,5]
      numbers = map(lambda i:i+5,numbers)

      and feel all pleased, except that you only needed to do that because "for" only refers to objects, not base types, by reference.

      Lambda calculus is very powerful, but I've not seen any simple examples that actually demonstrated the power beyond what you could achieve with standard programming constructs. Closures are nice for things like sorting, UI events, and such--but inner classes are even nicer because they can carry data too in a more obvious way (instead of simply by scoping rules).

    3. Re:Lambda the Ultimate by bob.appleyard · · Score: 1

      You're right in that simple examples don't do it justice. And yeah, Java inner classes have closure, which is nice, although it feels clumsy to use them. That's at least one thing going for Java, I suppose.

      What I really want to know is how you got that indentation.

      --
      How dare you be so modest!! You conceited bastard!!
    4. Re:Lambda the Ultimate by bob.appleyard · · Score: 1

      Oh yeah, and your second example doesn't meet the requirement.

      --
      How dare you be so modest!! You conceited bastard!!
    5. Re:Lambda the Ultimate by Ichoran · · Score: 1

      Use and tags to enclose your code to get indentation (you can then just write the indentation with spaces).

      Also, you're right that I didn't conform exactly to the specifications; I probably should have added a "return list;". But when not doing functional programming, there's often no reason to bother.

    6. Re:Lambda the Ultimate by bob.appleyard · · Score: 1

      Ah, thanks. It would help if that was actually listed as an allowed tag, but hey.

      --
      How dare you be so modest!! You conceited bastard!!
    7. Re:Lambda the Ultimate by bar-agent · · Score: 1

      Lambda calculus is very powerful, but I've not seen any simple examples that actually demonstrated the power beyond what you could achieve with standard programming constructs. Closures are nice for things like sorting, UI events, and such--but inner classes are even nicer because they can carry data too in a more obvious way (instead of simply by scoping rules).

      Dylan combines the two in its exception-handling system. I did something similar to the following recently. It is slightly hacky, but I didn't want to pass the uncertain-entries variable everywhere when it was only used in one place, and I didn't want to make a global for it.

      let (known-entries, uncertain-entries) = resolve-values(...);

      let handler <need-uncertain-entries>
            = method (exception, next-handler)
                      uncertain-entries
                end method;

      process-contents(known-entries);

      Elsewhere, in a different file entirely, but called indirectly by process-contents...

      if (entry-not-found)
            error("%s not known; maybe you mean one of %s?", entry,
                        signal(make(<need-uncertain-entries>)))
      end if;

      The let handler makes an exception handler. The handler is a method -- a.k.a. a closure or lambda -- that is called to handle the %lt;need-uncertain-entries> exception. The handler's return value is returned by signal. I could also have returned a class or other structured data, like an inner class.

      Basically, I used a closure to get data I didn't have in scope.

      --
      i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
  157. Parallelization by Anonymous Coward · · Score: 0

    Given the current trends in processor architecture, a programming language is going to succeed if it will be amenable to effective automatic parallelization (by a compiler).

  158. The article can't be reached by magisterx · · Score: 1

    The server the article is sitting on seems a little overwhelmed. Is there a mirror somewhere?

  159. Often overlooked in Java by ttfkam · · Score: 2, Interesting

    I love dynamic languages as much as the next guy, but there is one major item that I think make Java shine: explicit typing in the interfaces. No seriously, hear me out.

    One of the great things about languages like Python is that you can shove just about anything anywhere provided the method signatures and properties match what's being executed. But what about when you didn't write the code? Plone (for example) has gotten much better, but when developing for it, it was often a PITA to find out what features were available from the return value of a given function or what features you should be putting into an object. Yes, I know, the documentation for that CMS has improved greatly in the last couple of years, but I got burned a few years back. And I blame the language.

    With Java and interfaces, the objects and values passed to and fro are all documented by design. Javadoc, as often as people like to malign it, is so much better than nothing at all and worlds better than competing code documentation generators for languages like Python, Ruby, or Perl.

    "Just look at the Python object definition," you say? The problem is that coders tend to mutate the object during runtime, adding *public* properties and methods on those objects. In addition, there are often methods and properties that are completely useless to the given job at hand. Are they needed in a given instance? You cannot know by looking at the object definition. You need a published interface for that, and that's what Java's interfaces do.

    At less than five thousand lines of code, any language would work except maybe for Brainfuck, but that's a whole other can of worms. Once your codebase grows and, more importantly, gets more people involved in its development, documentation becomes all the more important. No, Javadoc isn't the "end all, be all" solution for project documentation by a long shot, but a hell of a lot better than nothing, and without explicit interface definitions, no automated documentation engine will help one bit with real problems.

    --

    - I don't need to go outside, my CRT tan'll do me just fine.
    1. Re:Often overlooked in Java by tolgyesi · · Score: 1

      I have similar experiences. Python functions taking and returning tuples, having to wade through a gazillion calls to get some insight about what those tuples can contain, when. I spent days to map it out for myself. I prefer strong typed declaration over "declaration by assignment" any time.

  160. Out with the programmers, in with the engineers. by tagattack · · Score: 1

    There was some item above I was replying to when I decided to make a larger post...here's the item I was responding it:

    It should read only :

    map(lambda x: int(x.strip), input.split(","))


    But this is easier than you think in java, or perl, or any other language that has regular expressions.


    List results = new ArrayList ();
    Matcher matcher = Pattern.compile("([^,]+)").matcher(args[0]);
    while (matcher.find()) results.add(Integer.parseInt(matcher.group(1).trim()));


    Granted, the java version is 3 times the amount of code than the most expressive python version. But it's still not a lot of code, in fact, it's quite concise. And it's a lot more optimizable -- and more strict.

    But both of these examples suck, really. Because if you're looking for numbers -- your regular expression should match numbers, and not just try to blindly parse the data as an integer.

    And here's the part that really matters

    Anyway, I think ruby, python and friends are growing in popularity not because they increase productivity, but because people suck. After all, those ruby folks who hate java also hate XML, and XML is nothing more than a collection of super fantastic technologies built ontop of a common document format where a single parser and parsing framework can be used to represent a myriad of types of data -- how cool is that?

    And like any tool, it's only as good as it's user, which precludes that the user using the tool must be using the right tool for the right job, which all too often is not the case regardless of the language. I think the entire world of software engineering would benefit from forgetting about the related philosophical wars related to programming languages, tools, and frameworks and just learn how to use as many of them as possible. Learn as much about them all as possible. And start trying to chose your language, framework, and libraries based on how they solve the particular problem each and every application faces -- which is always specific to the application and it's purpose.

    If we chose tools using this pragmatic approach, rather than buying into any given framework, language or library regardless of the problem we would actually have a better cognative ability as an over-all community to be more productive in developing tools, languages and frameworks that meet the needs of specific problems and do that well, and would thus increase our over-all effectiveness as an entire industry.

    Of course, that's probably not going to happen.

  161. Sorry but no editor can help you enough by SuperKendall · · Score: 1

    I used Emacs with Fortran, and that worked OK because it had a good custom mode to control column indenting to the exact degree required. But with python, code behavior is controlled by whitespace in infinite variability - good editors can help, but none of it matters if you've indented something wrong and don't pick up on it, how is the editor supposed to know what is right and what is not? To me braces simply are more readable as far as grouping, AND allow for greater expressivity in coding (as sometimes code is more readable when left flat or indented oddly). It reduces too much flexibility for far too little gain (especially funny that you mention using modern editors since real editors do things like insert brace pairs for you as needed eliminating any potential benefit you got getting rid of them).

    I've used many modern IDE's, I tried a few different things with Python and nothing made it tolerable. So I finished what I had to do there, have never looked back, and have been the happier for it.

    It seems to me as I touched on before, that you may well not be familiar enough with modern editors and IDE's that do the heavy lifting for you if you are so bothered by code that requires braces.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Sorry but no editor can help you enough by Just+Some+Guy · · Score: 1

      It seems to me as I touched on before, that you may well not be familiar enough with modern editors and IDE's that do the heavy lifting for you if you are so bothered by code that requires braces.

      I would say the same if you are so bothered by code that doesn't.

      --
      Dewey, what part of this looks like authorities should be involved?
    2. Re:Sorry but no editor can help you enough by SuperKendall · · Score: 1

      I would say the same if you are so bothered by code that doesn't.

      Except that as I pointed out, you are wrong to say so in that editors can help you far less with whitespace controlled behaviour of an application because they do not know which is correct. It does not matter how advanced your editor is as you must personally exert greater care that your code is grouped correctly, because the editor cannot know programatically what it right.

      Honestly though I have no real problems with Python. People who can tolerate that style of syntax, I respect thier happiness. I am simply saying that python is one of those things that does not work for everyone generally the same way most other languages do. As a language I have a lot of respect for it, having a a decent subset of the features Java offers.

      Note that currently I am an Objective C programmer, so it's not even like I really give a fig about either - it's just that I know them both in ways you do not seem to.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
  162. Java Nukum Forever by fm6 · · Score: 2, Insightful

    Your disclaimer is relevant, since you never got to experience most of Sun's big mistakes. Some of them will never go away, like the fact that some of the original library writers didn't understand the difference between byte streams and character streams. But all in all Java has a certain maturity it lacked when Sun was overselling it as the solution to all our problems.

    But that's not why Java is in no danger of dying. Like any other software technology, programming languages are subject to lockin, that combination of cultural habits and legacy installations that keeps software around long after it's. Languages seem to be more subject to lockin than other technologies: unless it's a total failure right out of the gate, it soon develops a culture that maintains it, and a big body of software that must be maintained, and is too expensive to rewrite in a more modern language.

    Consider FORTRAN. It was the very first high-level language (1953) and is full of design mistakes that reflect a total ignorance of artificial linguistics and compiler design theory by its inventors. (Not the designers' fault, these fields hadn't been invented yet.) And yet it remains the language for heavy-duty numerical processing. A lot of hard science and engineering grad schools rebel when told to learn it, but learn it they do.

    Ironic story: I was working for Sun's Java org in 1998, when a corporate reshuffle caused our group to be given responsibility for maintaining Sun's FORTRAN compiler. Everybody's response was: What? Why the heck do we even have a FORTRAN compiler? Answer, the people who buy high-end computers for science and engineering won't even look at your platform if it doesn't have a FORTRAN compiler.

    So Java (and FORTAN) will live forever. And centuries from now, newbie programmers will be wondering about those weird classes that are used to handle standard input and output.

  163. high-performance computing? by Ken_g6 · · Score: 1

    Perhaps we have different definitions of "high-performance computing". Doing a fluid-dynamics simulation on a 100+ CPU cluster is high-performance computing. I took a class where they taught it it with C or Fortran and MPI (which has a really awful API, by the way).

    Perhaps you mean real-time computing? Java might be up to that in some cases.

    --
    (T>t && O(n)--) == sqrt(666)
    1. Re:high-performance computing? by Cyberax · · Score: 1

      Nope. I mean 'high-performance computing' as in: "100 nodes in a cluster, doing hard statistical computations using MapReduce from Apache Hadoop".

  164. Re:Opinions Are Like @ssholes by MOBE2001 · · Score: 1

    I'm curious... where can I download an actual functional implementation of this miracle of CS?

    Miracles don't come cheap. If they did, Intel and Microsoft would not invest tens of millions in research labs at major universities around the globe (not to mention their own labs) to come up with one. Fork up a few millions dollars and your wish will be granted.

  165. Decrease in IT spending by koehn · · Score: 2, Interesting

    One of the reasons that Java became so popular was that it was new during a time that business was making enormous investments in IT. That time has passed, and business is less likely to invest in new languages, tools, etc, regardless of their merits.

  166. Apples and Oranges by ttfkam · · Score: 1

    If all you are worried about in C is stdio, stdlib, and math, then comparing that to the entire Java API is hardly fair. In that case, you could tell people to simply limit themselves to java.lang, java.io, and java.util. With just those three packages, Java is simpler to use and faster to learn.

    Seemingly as a counterexample, you list off the dizzying array of GUI libraries available for C as proof of its superiority. I consider them to be a gross liability. Not only do you have to learn a GUI library, you have to learn a few to see which one would work the best. Also, picking a GUI library commonly locks you into a certain niche. While GTK+ is making inroads on Windows, it still lags in display performance and has poor integration with the host system if that system is not X Window-based. Qt on Windows or Mac? Definitely not my first choice.

    So in expertise, you're right. A C "expert" does not need to know GUIs or databases to be considered an expert. Your assertion that a Java "expert" does need to know these things in all circumstances doesn't diminish Java, it simply means that you are holding the two against different metrics. There are quite a few Java coders out there that don't know AWT/Swing, and yet they are quite expert at server-side work (aka no GUI). I know Java game developers that can barely spell SQL let alone know the intricacies of JDBC or the java.sql and javax.sql packages. Some Java "experts" know the Java class file definition format by heart, while other "experts" do not and yet others limp along with tools like ASM.

    You cannot really claim that Java is "drowning" while C's thousands of redundant and competing libraries for GUIs, databases, RPC, networking I/O, file I/O, cryptography, etc. -- with all of their wildly different and often times inconsistent APIs -- are somehow an improvement. That's simply deluded. Java has its faults, but "drowning" in libraries is not one of them.

    Take some time coding for ODBC before talking about C's simplicity and utility again. C for most tasks is like using a hacksaw to put in a screw. No, there's nothing wrong with a hacksaw or with the screw. But don't try to ridicule someone for owning a screwdriver just because you can't cut metal easily with a screwdriver.

    --

    - I don't need to go outside, my CRT tan'll do me just fine.
  167. Re:Opinions Are Like @ssholes by s4m7 · · Score: 1

    Are you saying that such an implementation already exists and simply costs a godawful lot of money, or that it doesn't yet exist, and may never, but my coughing up a couple mill might just speed it along?

    --
    This comment is fully compliant with RFC 527.
  168. Python == Basic !?!? by weston · · Score: 2, Interesting

    Python et.al. are all languages that we who were there in the 80's remember with a combined horror/amusement when we had to write programs in Basic.

    You have got to be kidding me.

    This is a mistake on the order of "Cats are mortal. Aristotle is mortal. Therefore, Aristotle is a cat."

    I'm not a particularly big user of Python, but I know enough to know the comparison with Basic is pretty shallow. There's an interpreter, and there's divergence from C syntax. I think that's about it. And there's all kinds of stuff in Python, Perl, Ruby, and even *PHP* that you could never dream of doing in any Basic I saw during the 1980s.

    The lack of type-safe variables,

    Type safety. Okay. You're one of those people. You're hereby sentenced to read all of Steve Yegge's blog posts for a year.

    Alternatively, you're welcome to cite studies indicating higher productivity for type safe languages.

    the possibility to write unreadable code

    Which language have you found it impossible to write unreadable code in?

    hunt for bugs that are caused because two files are incompatible.

    Right. Like there exists a language that addresses this problem.

    Interpreting languages has been tried before,and they are never working for large projects that shall live for a long time and has to be maintained by a lot of different programmers.

    "Implementations with feature X have failed, therefore any implementation with feature X will fail." That sword can be wielded equally well against compiled "type safe" languages.

    The fact that a language has an interpreter that implements it really doesn't have much to do with whether or not it can be compiled. Python can be compiled to Java class files, for instance, and probably a few other targets I don't know about. So can Javascript. Probably Ruby, too.

    And as for large, sustainable projects You're posting on a system that's over 10 years old that's built in Perl. You've probably bought books or something else from a bigger site that uses it too. I've worked on a system that predates Slashdot that had a codebase that was 10% Perl and it's still going strong. This is to say nothing of highly visible examples of development in PHP of all things.

    I have nothing against compiling when the situation demands it, and I can respect the fact that automatic tools for catching certain kinds of mistakes are helpful. That's not really a function of type safety, however. Ask Perl or PHP (and probably the others) to warn you if you've misspelled a variable or done other "bad" things with it, and they will, for example. But moreover, it's been a long time since most of the mistakes in my programming had anything to do with whether or not I fed the right variable the right type of primitive or reference, and I suspect the same is true of most experienced programmers.

  169. Re:Opinions Are Like @ssholes by MOBE2001 · · Score: 1

    Unfortunately, I wasn't born with a silver spoon in my mouth. Nobody can design and create a new CPU, operating system and a set of graphical dev tools in their spare time. Otherwise, we would not be having this conversation.

  170. Re:Opinions Are Like @ssholes by clampolo · · Score: 1

    Labview and schematic hardware diagrams already exist. Cosa is nothing new or innovative.

  171. If it's shaped like C, that's a plus! by Anonymous Coward · · Score: 0

    A language with the cyntacks of C and the string-handling floo'n'C of Visual Basic -- oh, call it "Flamingo" -- that's kewl.

  172. "No it isn't" by SlowMovingTarget · · Score: 1

    Hmmm... I seem to have found Argument, I was looking for Abuse... I'll try down the hall.

  173. Re:Opinions Are Like @ssholes by MOBE2001 · · Score: 1

    Labview and schematic hardware diagrams already exist. Cosa is nothing new or innovative.

    Labview is data flow visual programming language that uses threads and a script language, AFAIK. COSA is a thread-less, control flow software construction and OS model in the tradition of synchronous reactive languages. Nobody is claiming that COSA is new although several aspects of it are. In fact, the COSA site/blog repeatedly emphasizes that the parallelism of COSA is not rocket science and has been around ever since programmers began to use 2 buffers and a loop to simulate parallelism in such applications as neural networks, cellular automata, video games and VHDL. Notice that threads are not needed and thus none of the problems associated with multithreading exists in COSA. What is new is the claim that this form of parallelism is what computing should have been from the start and that it is the answer to every problem that plagues the computer industry from unreliability and low productivity to parallel programming and multicore processor design. Read the COSA Saga for more.

  174. Things that make a language "Good" by bill_kress · · Score: 2, Interesting


    Depends I suppose. There are multiple worlds at play here. In one corner, there are the new kids just coming into programming, those on small teams, web developers, thrill seekers. They are looking for languages that offer minimal keystrokes, neat features, quick prototyping (rails!), minimal configuration, etc.

    For these people, maintainability isn't really even a remote consideration. For them the critical measurement seems to be the ratio of:

      (functionality * fun cleaver features) / (keystrokes * prototype dev time)

    They often get bogged down in their own code after the first few releases, but the people who started the project and chose the language are often off to another by this time, and if not they rarely even recognize the additional time spent to repair something later. (and to tell you the truth, if you used prototype development speed to sell the project and delivered the initial prototype and the customer bought it, there is a valid argument that they did the right thing even if it moved time and problems to later in the project cycle)

    Another very large (and very quiet) group is more interested in a formula like this:

        (Maintainability * Stability * Consistency * Comprehensibility) / (cleaver features ^ 2)

    Note that there is absolutely no concern for how much you type here. Typing speed has no relationship whatsoever for how long it takes a large project to come out--it's an inverse relationship in fact. Having to learn something new just to save a few keystrokes is a huge negative (multiply learning time by the 500 people on your team, it becomes like a manyear per feature easily)

    This group is huge--it's virtually every team I've worked with, and, of the ones I've known, maybe 2% twitter, blog, read blogs or listen to podcasts. They are not involved in the community, they just work and go home to their families. They are typically comfortable with Unix and A few read /. (the exception that makes the rule)

    They are generally developing in pre java-6, and often pre java-5. Sometimes because they have to, but often because of stability and huge retesting requirements to ceritfy a new development tool.

    In my realm they are almost always Java or C++, although the latter is getting more rare. I'm sure in windows they are almost all using C#.

    They usually aren't interested in learning about other languages or complicating the one they are using (although they will use the features if available).

    This group ranges from uncreative programmers who struggle with concepts like OO or Generics or (in some cases) pointers and boolean math to are excellent all-around programmers; and many used to be in the first group.

    Most are just good programmers that want to go home at 5:00 and spend the night with their families instead of jumping straight on the computer to learn a new technology.

    Personally I think this latter group is quiet enough that the industry writers, bloggers and podcasters don't realize they exist, but I'd guess that they are at least 70% of the programmers out there.

    If it wasn't for Java and C#, they would probably be using ADA or C++. Ruby and Python would never be considered.

  175. FORTRAN whitspace != Python whitespace by mkcmkc · · Score: 1
    That was my first reaction, too, but if you're associating the way Python deals with whitespace with FORTRAN, you're completely misunderstanding the situation. They have nothing to do with each other at all.

    A better way to look at the situation would be to ask yourself, "In properly formatted code, what purpose do braces serve?"

    If you consider this a while, you may decide that the answer is "None.".

    --
    "Not an actor, but he plays one on TV."
    1. Re:FORTRAN whitspace != Python whitespace by QuasiEvil · · Score: 1

      Delimiters for those of us who are either too sloppy/lazy/defiant to create "properly formatted code"...

      Python - don't mind the language, but absolutely *hate* the whitespace thing, which is why I seldom ever use it.

    2. Re:FORTRAN whitspace != Python whitespace by mkcmkc · · Score: 1

      Delimiters for those of us who are either too sloppy/lazy/defiant to create "properly formatted code"... I hope you won't take this the wrong way, but until you work that out, thank you for not using Python. :-)
      --
      "Not an actor, but he plays one on TV."
  176. Your wait is over... by mkcmkc · · Score: 1

    1. Small, simple associative arrays. foreach helps too. I've found IronPython at least can do that: Yes. See also collections.defaultdict, which pretty much takes care of every other Perlism that you could want.

    2. Small, simple, self-contained regular expressions, with variable replacement. I haven't seen another language yet that can do this in one command: $str =~ s/(foo|bar)/$arr{$1}/g; I'm not that crazy about putting this on one line, but here it is

    s = re.sub(r'(foo|bar)', lambda m: arr[m.group(0)], s)

    This particular example fits Perl's chunking a little better. For the other side of the story, consider

    $str =~ s/($foo[bar]/$arr{$1}/g;

    which no real person understands. (What kind of variable is 'foo'? Is 'bar' are bareword? ...)

    3. Small, simple standard I/O. Many languages write to STDOUT easily. Few read from STDIN *or* a file this easily: "while(<>) { &foobar $_; }" for line in fileinput.input(): foobar(line)

    Fewer still let you slurp STDIN, too: "{local $/; $_ = <>;}" That's either sys.stdin.readline(), sys.stdin.read(), or sys.stdin.readlines(). My Perl is rusty from lack of use. :-)
    --
    "Not an actor, but he plays one on TV."
    1. Re:Your wait is over... by chromatic · · Score: 1

      For the other side of the story, consider

      $str =~ s/($foo[bar]/$arr{$1}/g;

      which no real person understands. (What kind of variable is 'foo'? Is 'bar' are bareword? ...)

      $foo is a scalar. [bar] is a literal string. %arr is a hash. You're missing a closing parenthesis.

      I guess this makes me a fake person.

    2. Re:Your wait is over... by mkcmkc · · Score: 1

      For the other side of the story, consider

      $str =~ s/$foo[bar]/$arr{$1}/g;

      which no real person understands. (What kind of variable is 'foo'? Is 'bar' are bareword? ...)

      $foo is a scalar. [bar] is a literal string. %arr is a hash. You're missing a closing parenthesis.

      Yeah, the paren's wrong--my mistake. Any of the obvious fixes works.

      How do you know that $foo is not an array? Why would [bar] be a literal string rather than a regular expression that matches one of 'b', 'a', or 'r'?

      --
      "Not an actor, but he plays one on TV."
    3. Re:Your wait is over... by chromatic · · Score: 1

      How do you know that $foo is not an array?

      Because I took the time to learn Perl.

      Why would [bar] be a literal string rather than a regular expression that matches one of 'b', 'a', or 'r'?

      That depends what $foo contains. What if it ended with a single backslash?

  177. platform - antisocial by mkcmkc · · Score: 1

    The main thing I got from there was that Java, far from being a programming language, is also a platform. True, but it's far from clear that this is a good thing. In many ways it's a synonym for "doesn't work and play well with others".
    --
    "Not an actor, but he plays one on TV."
  178. Basic in the '80s? by mkcmkc · · Score: 1

    Python et.al. are all languages that we who were there in the 80's remember with a combined horror/amusement when we had to write programs in Basic.

    I think I wrote my last Basic in 1983. Take my word for it, Python may have it's problems, but it's nothing like Basic.

    --
    "Not an actor, but he plays one on TV."
  179. Yikes by mkcmkc · · Score: 1

    I hope that if I ever write something like this, someone will point out to me how clueless I sound. :-)

    --
    "Not an actor, but he plays one on TV."
  180. bloat vs big by MtHuurne · · Score: 4, Insightful

    Not every big library is bloated. It's only bloat if it has a poor size to functionality ratio.

    For example libc is small, but it does not include XML parsing, HTTP support, SHA1 and MD5 sums, the ability to read compressed files etc. Sure there are libraries for that, but you have to pick and add them yourself. So libc is small not because it is amazingly efficient, but because it is limited in scope.

    Personally, I like big standard libraries like Java and Python have. You pay for it in the initial install, but once that is in place, your application has access to a huge amount of functionality without having to add a lot of external dependencies.

  181. Python? Well... by Lars512 · · Score: 1

    I'm not even sure what Python offers over the dozens of other languages that preceded it.

    Easier to code, easier to read, easier to maintain.

    You type a lot less code to get things done, due to a mixture of dynamic typing, significant whitespace and a huge number of well designed, readable, high-level libraries. You pay a potential performance hit for all the sweet abstraction, but you worry about lower level optimisations in the rare applications/places where it matters. In practice this saves a huge amount of time.

    What's more, the basic paradigm is actually the same as the C/C++/Java set, so it's very easy to learn if you're working from these languages. One thing I agree with in the article is that people are extremely resistant to taking up a new programming paradigm, for example a functional or logical programming approach.

  182. Scala is the next big thing by WamBamBoozle · · Score: 1

    I think scala has the potential to be the next Java. It is very modern but still has a C like syntax. Scala programs can be much more terse and expressive than Java. Scala has closures, much more powerful static analysis, and so on. The strictness of the type checking makes most variable declarations redundant.

    James Gosling is on record saying that scala would be a good replacement for Java.

    It compiles down to the Java VM.

    The next big thing will be powerful like python & ruby, but will be strongly typed. Programmers prefer strongly typed: it catches bugs at compilation time and it is easier to write IDE's for them with autocomplete and such.

  183. Um, that's not dynamic typing. by Estanislao+Mart�nez · · Score: 1

    Dynamic typing where you can create new identifiers implicitly is pretty scary to me.

    You're mistaken about the meaning of "dynamic typing." To put it simplistically: a dynamic type system is one where the type of the object or value bound to an identifier can only be known at runtime; or, in other terms, any variable may be set to any object of any type. Static typing, conversely, is when the types of the values bound to the identifiers is known at compilation time.

    Python doesn't have the ability to "create new identifiers implicitly" any more or any less than C. In both languages, the implementation can statically analyze the code at each block to determine which identifiers are used in that block, and generate code that preallocates them in a stack frame. In both cases, which identifiers are used in each function can be determined from static analysis of the code. To make it dead simple: the Python parser, when parsing a function, can enumerate every single variable used in that function, just as well as a C parser can do the same for a C function.

    A third example that's "in between" C and Python: OCaml is statically typed like C, but most identifiers are introduced without type declarations, like in Python. This is because OCaml has type inference; it can figure out the type of (nearly) all expressions and identifiers at compilation time.

    And yet a fourth example, just to make the concept of static vs. dynamic typing more subtle: Java's type system has both static and dynamic components. Each identifier in a Java program must have a declared type, but all identifiers may be bound at runtime to objects of a subtype of the declared type. The declared type of the identifier provides a compilation-time guarantee that the values of the identifier will belong to a set of types; still, the objects must carry around type tags, and many operations require checking the tagged type of the objects at runtime.

  184. Successful does not mean "good" by drolli · · Score: 1

    Successful is not necessarily "good"by academic or theoretical means. Needed things:
    1) A application niche, which is not fully occupied yet, where this language brings an unique advantage. E.g. perl (unify shell scripts with sed/awk). E.g Python (lighweight scripting in applications, with suitable syntax for easy (but solid) construction of iterations. Java (Cross-Plattform distribution). etc...
    2) Easy to learn. usually this means either orthogonality in the features in the language (python, tcl) or a vast collection of the languages it is going to replace (perl). Usually new languages are accepted and used if they make life in some aspect easier in the very moment.
    3) Supported by some larger organization or by an active community. A good head programmer reacting on bugs, feature requests and weigthing them off.
    4) Usually: free implementations are needed. Or at least a good students program.

  185. it's bad code, but it's not that hard by Estanislao+Mart�nez · · Score: 1

    The key to understanding that code is to understand the <tt>reduce</tt> function.  How many times have you written loops that look like this?

    define do_thing_to_list(list) {
        result := init_value
        for ( value in list ) {
          result := operation(value, result)
        }
        return result
    }

    I think it's a really safe bet that you write loops like that all the time.  Well, reduce is just a higher-order function that abstracts that exact pattern.  To sum a list of numbers, you just reduce over it with addition as the operation, and 0 as the init_value.  To get the product of a list of numbers, same thing, but with multiplication and one.  To concatenate a list of strings, you reduce it with the string append function and the empty list.  The pattern is pervasive, and abstracting it makes code easier to understand.

    GP's example is deliberately obfuscated, because in good code you just don't use reduce to do character-per-character I/O where the string of characters to output is expressed as a constant list of integers offsets that tell you how to calculate each character's ASCII code as an offset of the previous one.  That is just an obfuscated way of printing a constant string.

  186. You're missing the damn point. by Estanislao+Mart�nez · · Score: 1

    Eliminating pervasive null pointer exceptions is a trivial language design problem. It's as simple as this: (a) a variable of type Foo is never allowed to be null; (b) if somebody needs a nullable variable that may point to a Foo, then that variable must be declared with a different type: nullable Foo; (c) provide type conversions between plain and nullable types. It's trivial for the compiler to reject programs where a plain Foo variable can ever be assigned null. After you have that property, you have a compile-time guarantee that NPEs can only happen when converting from a nullable Foo to a plain Foo.

  187. It's a dynamic language. by csirac · · Score: 1

    I've also mostly developed in C (on embedded systems), among other languages (Verilog on FPGAs, for example). At work, I chose Ruby (could have chosen Python, but found Ruby more expressive). I would have considered Java more seriously if the company I worked had more than one development engineer (me) and had a more rigorous engineering style (at the moment, virtually none). So I'm sort of hacking on the fly. It's a large app, for me, possibly the largest scope for anything I've undertaken before. But I could not have done it in C/C++/Java - customers don't know what they want, so much pie in the sky features they desire. With Ruby I've been able to meet deadlines and even implement their crazy ideas without as much pain as I would have had with Java. So there you go. Java can thrive in properly engineered, bureaucratic apps with the resources to support that deveopment style. Ruby thrives in a more ad-hoc, rapid development. You may even consider it a prototyping language (in fact, I have done that once: knocked up a prototype web interface for an embedded project for the customer to confirm what they wanted. Then it took two months to do the same thing in C). If you can't see the merits (and pitfalls) of where dynamic languages are useful, you need to play with them more ;-)

  188. juz becoz guys by Anonymous Coward · · Score: 0

    wanna-be "oldies look-alike"
    try to get respect by knowing old stuff

  189. Um, you're confused. by Estanislao+Mart�nez · · Score: 2, Informative

    You don't seem to be very clear on the differences between strong vs. weak type systems, and static vs. dynamic types.

    Python is strongly typed. In every place where a Python program can have a type error, the result is defined: some sort of exception is raised immediately, and can be handled regularly through the exception handling system, or to propagate uncaught and kill your program immediately and in a clean fashion.

    C is weakly typed. Many kinds of type error can happen at runtime that will leave your program in an undefined state, which may continue indefinitely. E.g., you can do pointer arithmetic and read data from random locations in memory, and interpret it as any type you want instead of what it's supposed to be.

    Python is a dynamically typed language. A valid Python program may not contain enough information to infer the type of the values that are assigned to its variables at runtime; or, in other words, any variable may be assigned any value of any type, values in Python must be tagged with their types at runtime, and Python runtime systems need to check the types of arguments at runtime are compatible with the types of the operations applied to them.

    C is a statically typed language. The C compiler must be able to determine, at compilation time, the type of every variable, and every expression must type-check for a program to be valid. The way C ensures this is by requiring type declarations on every variable and function. However, that's not essential; languages like OCaml and Haskell are smart enough to infer the types of most of your variables and functions without declarations.

    Now, having said all that, let's quote you:

    Python assumes you know what the hell you're doing, so it won't throw errors if you create two variables, put an Int in each one, and do an Int operation on them, all without declaring a type...It'll figure out the type by context.

    The main problem with this statement here is that you're not specifying what you mean by "context" here. There are two kinds of context that could be relevant: (a) compilation context; (b) runtime context. As it turns out, Python (because of dynamic typing) is allowed to use (b) to figure out the type. However, a language like OCaml can also "figure out the type by context," in the very different sense that it can analyze the program well enough at compilation to figure out that the variables are bound to ints, without your telling it. (And to make it more complicated: an implementation of a dynamically typed language is not required to check types at runtime in every case. A technique used by optimizing compilers for dynamically typed languages is to perform incomplete type inference on programs, figure out the types of variables as best as possible, and use this information to remove runtime type checks where the compiler can prove that they will always succeed. See this blog post for examples of people who've tried to do this for Python in various ways.)

    However, if you try to multiply an Int by a String, it'll throw the same type errors any other strongly type language will. They call it "duck typing."

    The phrase "multiply an Int by a String" turns out to be ambiguous. Most of the people who responded to you thought about it in terms of syntax: "foo" * 7. The thing is that Python overloads the * operator, and dispatches it to different concrete operations, depending on the type of the arguments. What Python does do is, when applying a concrete operation, throw the type errors.

    But also, that is not what the term "duck typing" means. Read your own link. What you're mentioning is just plain old dynamic typing--raise a type error at runtime when the tagged type of the arguments does not match the type required by the operation.

  190. God invented comments and the Devil countered with by patio11 · · Score: 2, Funny

    Perl.

    "Go ahead, take a bit of the apple. There is more than one way to do it."

    Next thing you know there are two naked Perl programmers standing around, who quite sensibly made the decision to cover up because "naked Perl programmer" is a scary, scary concept.

  191. more perl puzzles by mkcmkc · · Score: 1

    How do you know that $foo is not an array?

    Because I took the time to learn Perl.

    :-)

    How about /@foo[bar]/? What are the possibilities?

    Why would [bar] be a literal string rather than a regular expression that matches one of 'b', 'a', or 'r'?

    That depends what $foo contains. What if it ended with a single backslash?

    What if $foo's value ended in a single backslash?? Would that matter here?

    Obviously I'm not very knowledgeable about Perl, but I believe my larger point is being made here.

    --
    "Not an actor, but he plays one on TV."
    1. Re:more perl puzzles by chromatic · · Score: 1

      How about /@foo[bar]/? What are the possibilities?

      As the Perl 5 regular expression documentation suggests, the array @foo interpolates, following standard interpolation rules. [bar] is probably a character class, unless there's a single backslash at the end of the interpolated string, in which case the opening square bracket is a literal square bracket and the character class becomes a literal string.

      What if $foo's value ended in a single backslash?? Would that matter here?

      Yes.

      Obviously I'm not very knowledgeable about Perl, but I believe my larger point is being made here.

      Which larger point is that? Of course people who don't know a language don't understand it! Why is that a surprise?

    2. Re:more perl puzzles by mkcmkc · · Score: 1

      Blah, it's been too long. I think the example I was reaching for was /%foo[bar]/. Again, what are the possibilities?

      As far as $foo ending in a backslash, I don't know one way or the other, but I hope you're wrong, because that would be pretty hideous.

      My larger point is that Perl is needlessly arcane, to the point of incomprehensibility for most people. (Quick: How does x +2 parse? If your answer is shorter than 100 words, it's probably wrong...)

      --
      "Not an actor, but he plays one on TV."
    3. Re:more perl puzzles by chromatic · · Score: 1

      I think the example I was reaching for was /%foo[bar]/. Again, what are the possibilities?

      What does the documentation say? (If you didn't read the documentation and are just guessing at what could happen, you should probably not write programs anyone cares about.)

      As far as $foo ending in a backslash, I don't know one way or the other, but I hope you're wrong, because that would be pretty hideous.

      If this worked the way you think it should work, it would "work" like PHP's magic auto-escaping auto-SQL-injection-hole features. You need the quotemeta operator or the \Q...\E sequence in regular expressions.

      My larger point is that Perl is needlessly arcane, to the point of incomprehensibility for most people.

      Most people aren't programmers, let alone Perl programmers. No one in Japan cares that I can't read Kanji. How is that interesting?

    4. Re:more perl puzzles by mkcmkc · · Score: 1

      My larger point is that Perl is needlessly arcane, to the point of incomprehensibility for most people.

      Most people aren't programmers, let alone Perl programmers. No one in Japan cares that I can't read Kanji. How is that interesting?

      By "most people", I meant "most Perl programmers" as well... :-)
      --
      "Not an actor, but he plays one on TV."
  192. Hmmm.... by Jane+Q.+Public · · Score: 1

    I don't see you saying anything about what those "good ideas" are... maybe you don't have any yourself?

  193. Starting a new project by spaceyhackerlady · · Score: 1

    I've just started a new project at work. I was told what it needed to do, and left to fill in the blanks myself.

    My boss suggested I have a look at a system that did some of the things we want to do. It's clearly not the answer to our problem, but does some interesting things with python and twisted. A bit more digging suggested django as a web application framework. So that's how I'm doing it: python, with twisted to talk to stuff on the network and django to serve up a web-based user interface.

    I've worked with tomcat and java server pages, but wanted to try something new. Preferably solving a real problem. See if experience had come up with newer, better ways to solve the old problems. So far, it looks good.

    At least for me python is more successful than java, because it was my choice when starting a new project. If nothing else, I've sexed up my resume a bit. :-)

    ...laura

  194. One word by $0.02 · · Score: 1

    Marketing

    --
    If enithin kan gow rong it whil. (Murfey)
  195. Two principles by ignavus · · Score: 1

    Many languages are popular because they were the first (or the first usable) language to fill a niche.

    Look at the longevity of Cobol and Fortran - they started the business language and scientific language niches. They still run heaps of applications - they still have some momentum, decades after they were first mooted as languages.

    PHP took out the server-side web page niche; Javascript took out the client-side web niche ... where uniformity across all web-clients was particularly important (that is why vbscript never made it on the client side).

    Secondly, many languages built on the popularity of the existing languages. Java is more popular than (say) lisp/scheme/etc - regardless of how wonderful they are - because it built on top of people's C skills, and was an incremental change, rather than an entire new way of thinking.

    Look at Java, Javascript, PHP, C#, Python ... all show the signs of competing for the C (and C++) programmer mindshare. They are not aimed at functional programmers (unless Javascript subtly is).

    So ... first occupier of a niche, building on existing skills, but extending that power into new areas ... that is popularity.

    --
    I am anarch of all I survey.
  196. Ruby? by Jane+Q.+Public · · Score: 1

    You have completely neglected Ruby, which leads me to think that maybe you do not know much about it.

    The article accused it of having syntax borrowed from Perl, but that is highly debatable. Ruby borrows much of the good from many of the interpreted languages available today, without carrying over much of the bad, and adds a few really slick tricks of its own. Overall, that makes a pretty damned good mix.

    None of the objections you raise about the other languages above apply to Ruby today. So... don't you think that deserves attention?

    It is a much higher-level language than C or C++, with easy to use syntax and none of the memory leaks that make C and C++ so awful so often.

    It is not grossly bloated as C# and other .NET languages invariably have been.

    There are many excellent Ruby libraries (plugins and "gems"), and Ruby can easily import just about any C-language library out there. Score a big one for Ruby! Existing work keeps on working, and that eliminates any advantage C might have had other than raw speed.

    It is a dynamically typed language, and so does not suffer from many of the strict limitations of Java. Libraries have already been addressed.

    MAJOR plus: Ruby "mixins" have the advantages of both single- and multiple-inheritance for objects, without the headaches of either.

    Like Perl, the Ruby syntax is terse, but unlike Perl, it is elegant and quite readable.

    Matlab is NOT a "general-purpose" language. It might have been expanded from its roots to encompass the minimum Turing-machine, but that does not mean it is suitable as such. In any case, Ruby can import the C-language libraries (already written) that will do most of what MatLab does now.

    Javascript also meets the minimum standards of a general-purpose language, but... let's get real. That's not what it's for, and if you are using it for that then you are missing the boat.

    Admittedly, as a dynamic language nobody has yet managed to compile it adequately, so it must be interpreted. But that is the same limitation shared with all high-level dynamic languages. Flexibility and functionality come at a price.

  197. A good language is... by Kohenkatz · · Score: 1

    An old good friend of mine who died in his 90's last year and over the course of his life worked on every computer he could get his hands on (I have seen a small fraction that he still has) told me that a successful programming language is one that you can learn, not use for 20 years, and then come back to and still remember how to use it. If it passes this test, it is as easy to use as a spoken language, and that makes it successful.

  198. It all depends.... by Max+Littlemore · · Score: 1

    How does one measure success?

    The most successful language I know would have to be befunge93. It set out to be difficult if not impossible to compile and was an outstanding success. The facts that it's used to develop exactly 0 projects on Sourceforge and that there are no compilers are testament to this.

    --
    I don't therefore I'm not.
  199. Re:Off the top of my self? by Anonymous Coward · · Score: 0

    self.it's self.got self.a self.better self.object self.model self.than self.Java

  200. Re:Opinions Are Like @ssholes by iamacat · · Score: 1

    Nobody can design and create a new CPU, operating system and a set of graphical dev tools in their spare time.

    Maybe you underestimate the human spirit?

  201. Implementations by hdon · · Score: 1

    Don't forget having quality, accessible implementations available. Everyone hated Javascript for a real long time because the only implementations available were bad, and locked up inside browsers which didn't really work as good development tools.

  202. This is the perfect article for slashdot... by tenyearsgone · · Score: 1

    ...loaded with flames. Even I the levelheaded one started to get hot when he complained about python indenting (it makes your code more readable dammit!) .
    But I refuse to bite any more...except I though indenting was stupid too but now i seeeeee.
    Nevermind these arguments are pointless...but the decline of perl is obvious. I couldn't even read my own code after 2 weeks.
    and so on.

  203. Re:Opinions Are Like @ssholes by orangesquid · · Score: 1

    I'm guessing that you're Louis Slavain. You say that the computing industry needs to listen to you, but you're hard on the ears. That's not going to warrant you much success. Academia will be much more likely to discuss your proposals if you patiently listen to criticism and defend against it without engaging in personal attacks. Don't respond to the laughter or harsh words of others with harsh words of your own; professionals will not respect you unless you can maintain professionalism even when your opponents don't. You can support your ideas intensely without being uncomfortably intense on your audience. If you channel your personal drive into productivity rather than ranting, you will find followers much more quickly.

    You do have some interesting ideas. I think that many problems in computing can be answered by some of the reactive models that you are developing for fine-grained parallelism, but the days of algorithms and functions are not numbered. You might also want to investigate large-scale asynchronous systems whose individual modules are only locally synchronous; to me, it seems like some of your ideas can be compared to the way that nature works on the scale of chemical reactions and particle interactions, which might be synchronized locally on very small scales (e.g. "Planck time") and exhibit some large-scale emergent synchronization but don't indicate any general dependency on nor tendency toward large-scale synchronization.

    Yes, time "travel" seems an unlikely possibility. I would suggest you study the philosophical writings of Peter van Inwagen; he has written a number of responses to the ideas presented by David Lewis about the nature of time and relativity.

    I would also encourage you to implement more examples of COSA systems that achieve useful goals, then start writing introductions to COSA for people coming from the algorithmic and functional points of view. In actuality, COSA may have more in common with functions (although not necessarily Functional Programming as it is generally taught) than you think. Have you ever conducted an extensive survey of the difference in approach in Scheme versus Lisp? Lambda functions and tail-recursion can often be easily optimized to collapse complex, nested Scheme code into a straightforward iterative sequence; in a similar way, similar transformations may show some classes of functions to be readily changeable to COSA systems. Mature Lisp systems often exploit modularity to automatically implement some coarse-grained parallelism, which is another interesting transformation worth examining.

    --
    --TheOrangeSquid Is it any wonder things seem so awry? We swim in a sea of confusion and don't have to think to survive
  204. Programming Languages Too Complex by SkipStein · · Score: 1

    Someone mentioned COBOL and wondered if it was 'successful' or not; well I believe it was. Just look at the lines of code as a guide. Opinions differ on languages, mostly with bias towards your 'first' one! Personally I always believed PL/I was the best of all languages, it combined the best of COBOL, FORTRAN (Formula Translation for you young pups) and assembly level coding. It was all things to all people and became very popular in the Banking and Scientific circles. Unfortunately, IBM released it before it was really ready for 'prime time' and the compiler errors created a 'bad feeling' with a lot of programmers (back in the day when programmers made their own decisions). Anyway, I'm an old fart and don't believe we have made much if any progress. Just try to read some of the code sets created today. Most are unstructured and unfathomable as to any real base logic flow. I don't care which one you select, there is no real training with basic program logic flow. Most programmers today are 'self taught', which is admirable, but do you want a 'self taught' surgeon to take out your appendix or do a valve replacement on your heart? Most companies rely on these 'self trained' programmers and typically get what they pay for. I wrote an article on this that can be viewed at: http://www.msc-inc.net/Documents/wrong_turn_in_computing.htm. Cheers, Skip Stein Management Systems Consulting, Inc. 800.856.3193

    --
    Skip Stein Free Agent Management Systems Consulting, Inc. http://www.msc-inc.net www.linkedin.com/in/skipstein
  205. Strange to come from a C hacker by Anonymous Coward · · Score: 0

    I'm mainly a C hacker, but I don't get why people would prefer Python over Java. Dynamic typing where you can create new identifiers implicitly is pretty scary to me. I'm not even sure what Python offers over the dozens of other languages that preceded it. As C is not much more high level than assembly language and has static and weak typing and allows you to do crazy things with pointers, I find it ironic that a C hacker will find strong dynamic typing in Python scary.

    Make a typing mistake in C and your programs crash at best and behave strangely and unpredictable at worst. At least in Python you will get a human readable exception.
    1. Re:Strange to come from a C hacker by OrangeTide · · Score: 1

      I use statically typed languages almost exclusively (C, Java, StrongForth, ...). There is nothing ironic about my distrust of dynamic typing.

      Weakly typed is no big deal. Almost all of my bugs are related to logic errors, like typinge > instead of or forgetting to actually do anything with a variable after passing it to be processed. My strict habits in C have eliminated bugs where I don't allocate enough memory for a buffer and walk off the end. And gcc has eliminated the bugs of using uninitialized values from all of my code.

      A lot of errors in C cause a segfault, but I don't consider this any different than unhandled exceptions in Java. The program blows up, prints a dirty message and terminates. Then you go at it with a debugger or just read the code for a couple minutes and repair the issue.

      In my opinion, there has not been a better time to program in C than right now. All sorts of great tools (gcc warnings, valgrind, efence, gdb). And unit testing and continuous integration have (finally) become the cool thing to do. One you have fancy tools and a test oriented approach, C becomes a very easy thing indeed.

      --
      “Common sense is not so common.” — Voltaire
  206. Is Scripting language "x" really better than Java? by mdu · · Score: 1

    Why is it that people keep churning out articles on why language x is better than Java and will someday displace it as the language of choice? Specifically everybody thinks their scripting language of choice is better. Certainly scripting languages have advantages, but I still prefer strongly typed languages for enterprise applications.

    I couldn't imagine what our current app would be like to maintain if it was written in Ruby or Python. I'm sure somebody will respond and tell me how much cleaner the code would look and how it would be 1/3 smaller, etc. but smaller isn't necessarily better. Years ago we did away with using line of code counts to evaluate programmer productivity and learned to value quality over quantity. Some companies still consider good design and maintainability to be better than churning out huge amounts of code.

    Java certainly isn't perfect but then again neither is any programming language. Personally I enjoy programming in Java, and despite its flaws, there isn't another language I'm really interested in learning right now, except maybe Scala. The only scripting language that has caught my eye is Groovy, mainly because it is basically Java syntax.

  207. Re:Opinions Are Like @ssholes by Anonymous Coward · · Score: 0

    What I don't understand is how COSA is any simpler to program in than any other programming language. I just don't follow why using a graphical language is any more or less helpful than flow charts.

    Maybe COSA is good because it forces people to use flow charts... but I don't see how it brings programming "to the masses."

  208. Perl's TMTOWTDI by DrYak · · Score: 1

    You could also do close analogs to the Perl and PHP versions if you wanted to in Ruby And Perl being Perl, you could find a way to express in Perl exactly analogs to what each other example do, if you wanted. Plus 5 additional way to express it that won't make any sense except maybe to someone who was intensively trained in both APL and BrainFuck since a very young age.
    --
    "Sufficiently advanced satire is indistinguishable from reality." - [Tips: 1DrYakQDKCQ6y52z6QbnkxHXAocMZJE61o ]