Slashdot Mirror


Hope For Multi-Language Programming?

chthonicdaemon writes "I have been using Linux as my primary environment for more than ten years. In this time, I have absorbed all the lore surrounding the Unix Way — small programs doing one thing well, communicating via text and all that. I have found the command line a productive environment for doing many of the things I often do, and I find myself writing lots of small scripts that do one thing, then piping them together to do other things. While I was spending the time learning grep, sed, awk, python and many other more esoteric languages, the world moved on to application-based programming, where the paradigm seems to be to add features to one program written in one language. I have traditionally associated this with Windows or MacOS, but it is happening with Linux as well. Environments have little or no support for multi-language projects — you choose a language, open a project and get it done. Recent trends in more targeted build environments like cmake or ant are understandably focusing on automatic dependency generation and cross-platform support, unfortunately making it more difficult to grow a custom build process for a multi-language project organically. All this is a bit painful for me, as I know how much is gained by using a targeted language for a particular problem. Now the question: Should I suck it up and learn to do all my programming in C++/Java/(insert other well-supported, popular language here) and unlearn ten years of philosophy, or is there hope for the multi-language development process?"

371 comments

  1. Languages by Anonymous Coward · · Score: 1, Insightful

    Programming Languages are just tools. And, surprise, languages of the same type are equivalent.

    Go study the fundamentals of CS.

    The rest will follow.

    1. Re:Languages by BadAnalogyGuy · · Score: 1, Insightful

      Yes, it may be true that languages are essentially equivalent, but that doesn't mean that some languages don't make some tasks easier for the programmer than the other.

      If you had a task that had serious text processing, surely you would use C++ over Haskell or Lisp. On the other hand, if you needed to do AI, you would use Forth instead of Pascal. Graphics means using a well supported library, so Perl/Tk is the better choice than Java/Swing.

      So while programming languages may be equivalent at some theoretical baseline, they are designed to address specific issues and often provide better support for some tasks and worse support for others. Using a combination of languages is a very good idea, but it also takes a lot of discipline to keep interfaces well defined.

    2. Re:Languages by Antique+Geekmeister · · Score: 4, Insightful

      If I had serious text processing, I'd use Perl. And do.

    3. Re:Languages by FishWithAHammer · · Score: 3, Informative

      Graphics means using a well supported library, so Perl/Tk is the better choice than Java/Swing.

      Um...I do not think "well supported library" means what you think it means. Tk is old and crufty. Swing isn't much better, but if you're doing graphics you're almost certainly doing it with SDL or some other accelerated system, and you wouldn't use Swing for that either.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    4. Re:Languages by 1gig · · Score: 4, Insightful

      Graphics means using a well supported library, so Perl/Tk is the better choice than Java/Swing.

      Um...I do not think "well supported library" means what you think it means. Tk is old and crufty. Swing isn't much better, but if you're doing graphics you're almost certainly doing it with SDL or some other accelerated system, and you wouldn't use Swing for that either.

      Tk is not as old and crufty as you think. It has been updated allot recently

      Java/Swing actually has a very fast fully accelerated OpenGL drawing pipeline that is even supported on Linux. And yes many graphics heavy applications are buildt using Java/Swing The problem with swing is that it takes some heavy study time to learn how to do it correctly and not make your interface suck. But done correctly Java can keep up with most things out there. It's the done correctly part that is hard.

    5. Re:Languages by atraintocry · · Score: 0, Flamebait

      Tk is never a good choice.

    6. Re:Languages by Anonymous Coward · · Score: 0

      I am astounded at the stupidity of the Slashdot moderating audience to mod you +5 insightful, rather than +5 funny.

    7. Re:Languages by CarpetShark · · Score: 4, Funny

      If I had serious text processing, I'd use Perl. And do.

      I have serious text processing to do every time I see perl's syntax ;)

    8. Re:Languages by blool · · Score: 2, Insightful

      Oh wow, my eyes glazed over the sentence the sentenced that had "serious text processing" in it. I am not very familiar with Forth so the next part seemed plausible. Finally my tired eyes spotted an anomaly; surely Java/Swing is on par if not more "well supported" than Perl/Tk. But the comment said +4 insightful my mind protested! Oh wait a second, whats this? It's bad analogy guy! I've seen his comments before I remember, amused at how I had caught the joke just barely before it passed over my head. (A look at the 6 other comments here shows that there was plenty of *whoosh* to go around though)

    9. Re:Languages by un_om_de_cal · · Score: 1

      If you had a task that had serious text processing, surely you would use C++ over Haskell or Lisp. On the other hand, if you needed to do AI, you would use Forth instead of Pascal. Graphics means using a well supported library, so Perl/Tk is the better choice than Java/Swing.

      Hint to slashdot mods: all the examples are reversed.

    10. Re:Languages by Anonymous Coward · · Score: 1

      Actually, the examples are not reversed. They are all non-sensical.

    11. Re:Languages by TheTurtlesMoves · · Score: 4, Informative

      Properly written swing is fine, and i have used without complaints from clients. It looks and performs rather well with openJDK. The problem is that 99% of swing out there are by 1st year students learning how to write any code at all, let alone competent GUI front end. But it is just another gui api with all the pros and cons that seem to come with them all.

      --
      The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
    12. Re:Languages by chthonicdaemon · · Score: 1

      If that were true wouldn't there just be one language by now? I have studied the fundamentals of CS and one thing that one learns is that Turing completeness is a very low bar. Observe the many Turing tarpits and the or the proliferation of domain specific languages. I have not spent my time learning all these languages because I am ignorant.

      --
      Languages aren't inherently fast -- implementations are efficient
    13. Re:Languages by c1ay · · Score: 1

      And yet Perl is written in C so you are still effectively using C to do your serious text processing. Then again, why write your own C code for text processing when you can just reuse what someone else already wrote to do the job, i.e. Perl....

      --

    14. Re:Languages by jbolden · · Score: 1

      I'd say you earned your user name on that one. I wasn't even sure if you were being sarcastic.

    15. Re:Languages by Antique+Geekmeister · · Score: 2, Insightful

      What you describe about Perl is quite correct. And for many odd-ball functions and forms of processing, someone has already published a CPAN module for it, and in many (not all!) cases it's good enough.

      But the level you mention, almost _everything_ is written in C. Many software packages that are allegedly in C++ could be switched to ANSI C in a single afternoon with s competent programmer, and in fact gcc's quiet compilation of both without error has led to a lot of people writing mostly C when they think they're writing C++. And anyone who thinks Java, Ruby, or Python have enough power to write themselves has not looked carefully at them.

    16. Re:Languages by Ancheta+Wis · · Score: 1

      I routinely use Perl to write the code of at least 3 other languages simultaneously, to solve the single problem at hand. The other languages are specialized to their domain, and the program development is pretty fast and responsive to the requirement.

    17. Re:Languages by ericlondaits · · Score: 3, Interesting

      For many years now I've successfully developed with a multi-language model in Windows...

      I do my low level code in C++ and encapsule it in a COM/ActiveX object, which I then can call from a Javascript script launched by the OS (through WScript.exe), server-side ASP pages and client-side DHTML pages or HTML Applications (HTA files). Both the "classical" COM/DCOM/ActiveX architecture and the new .NET were made to support integration of different languages and low level and high level code.

      It's also possible to integrate Windows COM components and DLLs through Python scripts.

      Through this model I developed quite a number of reusable parts which in practice I was able to integrate to a variety of projects. Having this separation between low level code and high level scripting as "glue" works great for me... it forces a layered design, makes for smaller binaries and cuts a lot on compilation times.

      --
      As a Slashdot discussion grows longer, the probability of an analogy involving cars approaches one.
    18. Re:Languages by Anonymous Coward · · Score: 1

      You probably should stop skimming what people say when you are going to respond to them. He said languages ***of the same type*** are equivalent. I don't think he's just talking about OO vs something else.

    19. Re:Languages by budgenator · · Score: 1

      Lisp is a powerful text processing language, EMACS is written in a version of Lisp, it was also the language of AI for decades. Its keywords are a little intimidating for someone who didn't grow up writing programs in IBM 360 Assembler, but Logo fixes that. I'm surprised it isn't used more in Bioinformatics because it also excels at pattern recognition.

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
    20. Re:Languages by budgenator · · Score: 2, Informative

      Forth is more like a RPN programable calculator on steroids, it's stack based and used more for embedded systems, but I haven't looked at it in decades. In it's day it was used in 8 bit PC's to replace BASIC as a programming language.

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
    21. Re:Languages by mR.bRiGhTsId3 · · Score: 2, Insightful

      This is true. Almost all major languages have the ability to call into C code. And, most of the dynamic languages have the ability to allow C code to embed their interpreters in C code. Thus, my conclusion would be, write in whatever languages you want and use little bit of C glue to tie it all together.

    22. Re:Languages by DuckDodgers · · Score: 1

      ?? Haskell is quite good for text processing. Java/Swing has excellent support. I think you need to define your criteria better.

      C++ is a superior choice for text processing if high performance is critical. Haskell is a relatively fast programming language, but not quite on par with C++. In terms of development time, Haskell can handle all sorts of text-processing abstractions with pretty compact code, and has a good regular expression library. So if developer time is critical, Haskell may well be a much better choice. I can't speak for Lisp.

      I suspect Java/Swing is better supported across platforms than Perl/TK. Java/Swing is needlessly complex and has a nasty learning curve, but it works perfectly well. Perl/TK may be far easier to use or more productive (I wouldn't know, I've never done GUI programming with Perl).

    23. Re:Languages by Anonymous Coward · · Score: 0

      I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser Gate.

    24. Re:Languages by Drasil · · Score: 1

      Funnily enough I was going to mention Forth in favour of using a single language. It's very easy to write domain specific sub-languages in Forth, and you can easily switch between them or even use more than one at once. In this way it's possible to have the best of both worlds. It's a shame that in the real world things are a bit more complicated and Forth probably isn't the best choice in many instances.

    25. Re:Languages by Cyberax · · Score: 1

      Then you might try HTMLayout - it's a stand-alone HTML renderer which can be easily embedded in a C++ (or .NET) application.

      And it's being ported to Linux right now.

    26. Re:Languages by ericlondaits · · Score: 1

      I've used the IE renderer embedded as a COM object in my own C++ programs as well as the ActiveScript Javascript parser which can also be used as a COM object and allows you to inject other COM objects in the Javascript context.

      --
      As a Slashdot discussion grows longer, the probability of an analogy involving cars approaches one.
    27. Re:Languages by pluggo · · Score: 1

      Oh, now, I wouldn't say that. ;)

      It's easy to make a Python interpreter in Python! It even has the exact same performance as the native interpretation.

      exec(file(sys.argv[0]).read())

      Or even

      execfile(sys.argv[0])

      Seriously, though... dogfooding isn't an appropriate comparison for interpreted languages.

      --
      Pulling together is the aim of despotism and tyranny. Free men pull in all kinds of directions. It's the only way to mak
    28. Re:Languages by Dr.+Smoove · · Score: 1

      Everytime you look at the ok> prompt on SPARC systems, you're looking at a FORTH interpreter. So it's like a graphing calculator on steroids.... on the incredible hulk.

      --
      "If you plant ice, you're gonna harvest wind."
    29. Re:Languages by darkjedi521 · · Score: 1

      See also Open Firmware on Power/PPC and I believe the firmware interpreter on SGI MIPS systems was also Forth based.

    30. Re:Languages by EsbenMoseHansen · · Score: 1

      Many software packages that are allegedly in C++ could be switched to ANSI C in a single afternoon with s competent programmer, and in fact gcc's quiet compilation of both without error has led to a lot of people writing mostly C when they think they're writing C++.

      I don't see that often -- in fact, I can't recall anything larger than a few files that do this. Can you quote any software 2 projects written in C++ but easily convertible to C? I assume that easy does not include "rewrite classes with virtual functions as structs with function pointers".

      And anyone who thinks Java, Ruby, or Python have enough power to write themselves has not looked carefully at them.

      I think that the usual claim is that the compiler is written in the languages themselves, while the virtual machine is usually written in C or C++. Though, they being Turing complete, you should be able to do it.

      --
      Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
    31. Re:Languages by Z00L00K · · Score: 1

      With CS I assume you mean Computer Science. If you say that CS is C-sharp, you should have specified C#, which I refer to as C-hash.

      Anyway - knowing more than one programming language is never wrong. The experience gained in one language can be reused for another.

      And when a particularly tricky problem arises that can be easily solved in another language you can use that language for that solution - if you are able to figure out how to make them interact.

      Knowing a language doesn't mean that you have to be an expert in that language, it only means that you can adapt to a different way and perspective of thinking. It's never wasted to learn a new programming language, but some are not very useful in reality - like brainfuck.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    32. Re:Languages by TheTurtlesMoves · · Score: 1

      I personally have found swing no harder than other widget toolkits to get right. Regardless of what I use, I am still reminded of heavy goto usage in BASIC with event models.

      --
      The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
    33. Re:Languages by Antique+Geekmeister · · Score: 1

      wu-imapd, and HylaFAX. I got asked to look at both of them in legacy systems a few years ago. (wu-imapd was replaced with dovecot, and HylaFAX is still in use there.)

    34. Re:Languages by Hognoxious · · Score: 1

      What you describe about Perl is quite correct.

      Pedantically correct, but irrelevant. You might equally say that eventually it's all machine code.

      Programming involves the expression of a problem - and certain languages fit some problems better than others. Remember also that the communication isn't just programmer to computer, it's programmer to programmer (as in the unfortunate soul who has to maintain it).

         

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    35. Re:Languages by Antique+Geekmeister · · Score: 1

      And you accuse _me_ of being pedantically correct but irrelevant, when you say "certain languages fit some problems better than others"?

    36. Re:Languages by cyclop · · Score: 1

      And anyone who thinks Java, Ruby, or Python have enough power to write themselves has not looked carefully at them.
      Maybe it's you not looking carefully enough?

      --
      -- Patent no.123456: A way to personalize /. comments with a sig attached to the end.
  2. It's a big umbrella by cptdondo · · Score: 3, Interesting

    You can do either. Either way you gain and lose. I personally have a hard time with the kitchen sink approach, preferring C as my programming environment. This leaves me in the cold as far as contributing to, say, mythtv, but then I can contribute to other projects, like lirc.

    So it all comes out in the wash. When you come to a fork in the road, take it.

    1. Re:It's a big umbrella by thebigbadme · · Score: 1

      So it all comes out in the wash, and as the great Yogi Berra said " When you come to a fork in the road, take it. "

      there, fixed that for ya

      --
      "It's the Law of the Universe, and I'm the sheriff." Slash-cott 2/10-2/17
    2. Re:It's a big umbrella by jerep · · Score: 3, Interesting

      I agree, I've done both a lot of shell scripts, web scripts and compiled languages programming; it all comes down to what your goal is, there's no perfect combination of languages for every scenario.

      Personally I prefer having a core program written in a compiled language (C++, D), with a bundled library for scripting (LUA, Python) for I do mostly cross-platform programming these days.

      However, when doing system admin tasks and automation, nothing beats shell scripts, it takes too much time to write and maintain compiled executables for simple tasks.

      On a side note: I also recently found out about rdmd a few days ago, you might want to add that to your shell's arsenal ;)

    3. Re:It's a big umbrella by avanderveen · · Score: 2, Insightful

      "Should I suck it up and learn to do all my programming in C++/Java/(insert other well-supported, popular language here) and unlearn ten years of philosophy, or is there hope for the multi-language development process?"

      No, DON'T unlearn ten years of philosophy. DO learn to do programming in C++/Java/(insert other, imperative programming language here).

      Simply by learning a new language, you should not lose abilities and ideals you gained with others (goes for scripting too). You should build on your previous experiences. Experience in functional programming languages (and scripting) goes a long way for your ability to efficiently and effectively use an imperative language. This is why a lot of colleges and universities are starting to teach Scheme as an introductory language instead of Java.

      There is hope for a multi-language development process, just make sure that your capable with the languages that are more prevalent

    4. Re:It's a big umbrella by chthonicdaemon · · Score: 1

      I think you missed the emphasis in that question. I already know and use several imperative languages (primarily Fortran as I do a lot of numeric work, but I also know and use both c and c++). I was not asking whether I should learn c++, but whether I should learn to use it for things that I don't use it for now. I would rather use awk/perl/python for basic text-processing type tasks or 'throw-away' scripting and once I have an awk script that does exactly what I want I would rather not rewrite it in c++ just because I want everything to be in one language.

      --
      Languages aren't inherently fast -- implementations are efficient
    5. Re:It's a big umbrella by jgrahn · · Score: 1

      You can do either. Either way you gain and lose. I personally have a hard time with the kitchen sink approach, preferring C as my programming environment. This leaves me in the cold as far as contributing to, say, mythtv, but then I can contribute to other projects, like lirc.

      I think you should learn some scripting language, too. It hurts to see people coding simple Perl one-liners in pages of C. Pur differently, learning at least one "scripting" language would free up time and energy so you could write more worthwhile C code.

      As for the original poster: I believe the Unix Way is alive and well, and that it will prevail. More importantly, I believe it's the best and most fun way. I stay away from monoliths, frameworks and cults. My tools are shell script, Perl, Python and C++. C if I need to interface with the many C people out there. That covers most needs. Sed and awk have been eaten by Perl already.

      Add to that knowledge of special-purpose tools like make, graphviz, gnuplot, troff, ... Generating input to those tools often makes a major programming project boil down to a small perl script.

  3. Depends, really by Shados · · Score: 4, Interesting

    Not really "tool based" programming like the unix stuff that was mentionned...but for example where I work, they combine languages. Our .NET stuff will be a mix of raw intel assembly, managed C++, C#, and F# for the algorithms. Mixing purely functional languages with procedurals languages with some functional features seem to be gaining momentum in algorithm heavy fields.

    Then there's the occasional java program that will invoke perl scripts for jobs, for example.

    Its definately there for large projects. Its just that with the power of more modern environments, the projects have to be MUCH larger before they start warranting to take the overhead of mixing languages/tools to gain efficiency. The extra tools, testing, integration, installation, dependencies, etc that are involved are not worth it for "small" projects (and again, by today's definitions, a "small" project can be quite large, hehe)

    1. Re:Depends, really by BadAnalogyGuy · · Score: 1

      How do you like F#?

    2. Re:Depends, really by Shados · · Score: 5, Interesting

      I was introduced to functional programming via C# 3.0, with the lambdas, LINQ, and better delegate support. Not quite "real" functional programming, but its a nice gateway drug, and have been hooked since then (thats background info just to say I'm no expert, but no dummy either).

      F# is pretty slick. Its basically a "real" functional language, that still allows it to be easy to integrate with "real business", including databases, IO, and has great support for tooling since its based on .NET. So its pretty much the "perfect" functional language, for the "real" world. (I know many are better from a theoretical or scientific point of view, but i'm talking purely pragmatic here).

      That said, I didn't use it much. What I can say, is we have an army of PhDs implementing -extremely- complex algorithms here (functions being passed around with several douzens levels of nested function types, to do very, very complex modeling in a couple lines of code...), and they swear my F# now (they've been using it since early technology previews, and are getting ready to push large amounts of code in it in production...its working awesome, supposingly).

      Sorry I'm vague on the details... but what I can say, is its good enough for one of the largest linux-centric company in the world to shift some of its code to it. Nuff said :)

    3. Re:Depends, really by lokedhs · · Score: 1

      Not really "tool based" programming like the unix stuff that was mentionned...but for example where I work, they combine languages. Our .NET stuff will be a mix of raw intel assembly, managed C++, C#, and F# for the algorithms.

      Definitely. You also work in a shop where all kinds of different operating systems are supported and used. Windows XP, Windows Vista, Windows 2008... See?

    4. Re:Depends, really by Shados · · Score: 1

      That was an example of my personal responsibilities:) We have more unix machines than Windows, hehe.

    5. Re:Depends, really by Anonymous Coward · · Score: 0

      I have been using Linux as my primary environment for more than ten years. In this time, I have absorbed all the lore surrounding the Unix Way -- small programs doing one thing well, communicating via text and all that.

      As much as I like Linux, I don't think I ever brought into the "unix" way. Communicating via text is fine, but it doesn't seem really efficient.

      When all you have is a hammer, everything looks like a nail... I wish this book, the Unix Hater's Handbook got a sequel:
      http://web.mit.edu/~simsong/www/ugh.pdf

    6. Re:Depends, really by ClosedSource · · Score: 1

      "As much as I like Linux, I don't think I ever brought into the "unix" way. Communicating via text is fine, but it doesn't seem really efficient."

      I have a background in traditional embedded systems and the idea that OS's like Linux actually call text-based command-line tools before the system boots boggles my mind.

      Unix definitely served the needs of the times it was created in (i.e. small programs performing small tasks).

    7. Re:Depends, really by Anonymous Coward · · Score: 0, Interesting

      the text was always the customization of optimized and specialized c code. the ratio of script to binary was always very small. and most of the text (for perl) quickly compiled into large swatchs of native c library segments. the power of the unix model was the ability to adapt it.

      it wasnt that you had programs piping large volumes of text around. it is more often void main return values and signals or the occasionsal 1 line of text returning from highly cached microprograms. yes there is tremendous overhead in invoking those apps, but they are almost always the startup process.

      consider that the windows alternative is vb + COM libraries (in mem shared library + state references). that is all fine and good for efficiency, but my experience is tremendously less stability. consider the com equvalents in linux. kde and gnome. yes you can use them without persistent services - but we dont. so instead of highly stable single processes that use locks and file based resources, we have buggy interdependent code. one process hang takes down a bunch of services. i have to kill 3 processes every time pidgin locks evolution-data which locks evolution which locks beagle and tomboy notes. this happens daily when i have integration enabled. If they stuck to the old way of a few rpcs and direct file accesses and maybe a few named pipes then life would still feel like unix. But noooo we have to be windowsy.

    8. Re:Depends, really by Anonymous Coward · · Score: 0

      Sorry I'm vague on the details... but what I can say, is its good enough for one of the largest linux-centric company in the world to shift some of its code to it. Nuff said :)

      Let's just hope this company doesn't blow up the stock market again, or there vaguely will be hell to pay, linux or no :)

    9. Re:Depends, really by jipn4 · · Score: 2, Interesting

      "That said, I didn't use it much. What I can say, is we have an army of PhDs implementing -extremely- complex algorithms here (functions being passed around with several douzens levels of nested function types, to do very, very complex modeling in a couple lines of code...)"

      If you do OOP, you're effectively doing the same thing when you're passing objects around: every method and every method of every class type that those methods work on is a "level of nested function type".

      Also, it sounds like they're effectively using F# to build little domain specific languages. Functional programming languages are convenient for that purpose, but the end product tends to be worse than if you had actually designed a domain specific language from scratch.

    10. Re:Depends, really by Shados · · Score: 2, Interesting

      Yes, OOP is indirectly the same thing. The Strategy design pattern is just a way to implement functional-like paradigm to non-functional language.

      Its still not as easy or elegant, and the compiler cannot optimize as aggressively, and some stuff will take a whole lot more code. Thats why the base functional paradigms were added to VB.NET and C#.

      They're also not building domain specific languages at all. Its just the mathematical model (not model as in a DSL model, but really, as in a math one) is extensive, so the formulas are very, very complex, even when done on paper. One of primary reasons to use a functional language (aside that it goes from paper to code easier) is that its easier to prove the code afterward, which is required by law in some businesses.

    11. Re:Depends, really by Shados · · Score: 1

      Let's just hope this company doesn't blow up the stock market again, or there vaguely will be hell to pay, linux or no :)

      I may be dense here, but i'm not too sure how one company can blow up stock markets... especially not "again". Wtf does a company coding in F# has to do with the economy, anyway?

    12. Re:Depends, really by mounthood · · Score: 1

      Was Scala considered? Did .NET win because of tools, existing code, developer opinion? Not trolling, I would really like to know.

      --
      tomorrow who's gonna fuss
    13. Re:Depends, really by Shados · · Score: 3, Interesting

      Very good question. I personally looked at Scala and thought it looked pretty good, but that I didn't try at all (just read the documentation). If I had to guess, I'd say its a mix of Microsoft support (which, while I know i'm saying this on Slashdot, is actually pretty damn good, and you have tons of support calls included with MSDN subscriptions, volume licensing agreements, etc), the fact that the language is just really well designed, the better, faster interop with native code (so if you have to do something in C/C++/Assembly, you won't lose 90% of the performance bonus in the interop layer), and that some of these algorithms have to be integrated with thick client software on desktop machines, as Office plugins, etc.

      The last 2 are probably the biggest deal. You know for sure you can interop (well) with anything and everything, that it can run on the servers (most are Unix, and its by far the preference, but we can put a Windows server without affecting users if we really need to) and on the client integrated with basically anything. Almost anything that can be extended will support some kind of COM/COM+ or .NET interop model of some kind. Doing it with Scala is not impossible, but far more annoying. And if the F# code needs to be distributed, WCF tends to be better than many alternatives, etc etc.

      So in short (and again, its just a guess. I always tend to be quite curious too when a Windows solution gets selected over a Unix one, since we're not locked in on Windows much if at all), easier to extend, and better corporate support.

    14. Re:Depends, really by Anonymous Coward · · Score: 0

      That said, I didn't use it much. What I can say, is we have an army of PhDs implementing -extremely- complex algorithms here (functions being passed around with several douzens levels of nested function types, to do very, very complex modeling in a couple lines of code...), and they swear my F# now (they've been using it since early technology previews, and are getting ready to push large amounts of code in it in production...its working awesome, supposingly).

      FYI, a guy on the F# team had told me that they have a few real-world customers already (despite not even having a 1.0 release), and most of those are banks using it for large-scale financial computations.

      As for internal use, apparently, Microsoft adCenter uses F# for some the more interesting stuff.

    15. Re:Depends, really by ClosedSource · · Score: 1

      There's certainly no vb code involved in booting Windows. kde and gnome are certainly not equivalent to COM in any way. It doesn't sound like you know much about how Windows works.

    16. Re:Depends, really by sw155kn1f3 · · Score: 1

      You haven't seen some of the production perl code one of our dev produces. It's entirely $d=`ls -l` stuff, seriously.
      Code reusing my ass.

      --
      - Arwen, I'm your father, Agent Smith.
      - Well, you're just Smith, but my father is Aerosmith!
    17. Re:Depends, really by jipn4 · · Score: 1

      Its just the mathematical model (not model as in a DSL model, but really, as in a math one) is extensive, so the formulas are very, very complex, even when done on paper.

      That sounds like bullshitting to me. Complicated mathematical models generally do not require complicated programming constructs to implement. In fact, C#/F# has such a dearth of pre-existing mathematical libraries for it, that it is a poor choice for anything particularly mathematical.

      One of primary reasons to use a functional language (aside that it goes from paper to code easier) is that its easier to prove the code afterward, which is required by law in some businesses.

      The hard part in proving implementations of complicated mathematical models correct is not proving the control structures correct (which tend to be simple), it's proving the numerics correct.

    18. Re:Depends, really by jipn4 · · Score: 1

      Its still not as easy or elegant, and the compiler cannot optimize as aggressively

      The compiler doesn't have to optimize as aggressively in OOLs because anything that needs to be high performance is written using traditional loops. Conversely, even the best functional programming language compilers aren't good enough to reliably compile functional control abstractions down to the same level of efficiency as loops.

      and some stuff will take a whole lot more code.

      Yes, it will. And it would be nice if someone actually produced a decent, high performance functional programming language. F# is not it. The only saving grace for F# is that you can drop down into C# or C++ if you need it to go fast.

    19. Re:Depends, really by jgrahn · · Score: 1

      "As much as I like Linux, I don't think I ever brought into the "unix" way. Communicating via text is fine, but it doesn't seem really efficient."

      I have a background in traditional embedded systems and the idea that OS's like Linux actually call text-based command-line tools before the system boots boggles my mind.

      Unix definitely served the needs of the times it was created in (i.e. small programs performing small tasks).

      So the Unix way was fine in the 1970s but now, when we have so much CPU power so we cannot find a way to waste it, it's too slow?

      You may be trolling, but I say it anyhow: process spawning is fast in Unix, and so is parsing text data and executing shell scripts. None of this has been an issue for at least twenty years.

  4. StupidPeopleTrick by StupidPeopleTrick · · Score: 5, Insightful

    The more languages, the more of a pain for support, debugging, and dev hand-off. If the solution is going to make money, make time to think of how you can grow the business (I.E hire developers and develop a position description). Things in this perspective get ugly when you have 5 components developed with 5 different languages.. - SPT

    1. Re:StupidPeopleTrick by plover · · Score: 1

      Maintenance can be really expensive, especially if you have to maintain a bunch of old projects written in 25 different languages. So for all the reasons you just mentioned, a really big, monolithic, waterfall shop may have standardized on just a few languages, and you won't get a real choice. They will probably tell you when you are being interviewed that the job will be C++ or Java or C#, and the scripting language will be perl or vbscript or sh or whatever they use, so it shouldn't be a surprise.

      --
      John
    2. Re:StupidPeopleTrick by TapeCutter · · Score: 1

      Yes, total freedom to mix and match is great from the developer's POV but in an enterprise setting application developers rarely get to see the full system, even something seemingly inoccuous such as changing an error/log message can have upstream consequences that exceed the cost of development by more that an order of magnitude.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    3. Re:StupidPeopleTrick by Mr.+Slippery · · Score: 2, Informative

      Things in this perspective get ugly when you have 5 components developed with 5 different languages.

      That depends on the complexity of the languages.

      A Bash script that invokes awk uses two "swallow" languages and is going to be a lot simpler than some crazy conglomeration of, say, C++ and Perl.

      --
      Tom Swiss | the infamous tms | my blog
      You cannot wash away blood with blood
    4. Re:StupidPeopleTrick by Billly+Gates · · Score: 2, Funny

      "The more languages, the more of a pain for support, debugging, and dev hand-off."

      You forgot to add job security to that. :-)

    5. Re:StupidPeopleTrick by leabre · · Score: 1

      There are times where multiple languages can be beneficial. For example, I'm primarily a C# developer but for the problem domains I must solve, sometimes a Fortran.NET or Prolog.NET would be much more suitable than C#. Prolog is better at logic and fuzzy logic, and Fortran is clearly better at mathematics. I'm not terribly interesting in changing IDE's or using different compilers and trying to interop with multiple languages, but in the .NET variety, if they were available, it would be very convenient to use the various syntaxes to express myself more efficiently.

      Supporting such a hybrid could be an issue for some. But in general, I don't think C# is good for everything (it can certainly do everything, but C-derived languages aren't good at expressing everything -- such as SQL or Logic, or Functional, for example). Lisp isn't very good at expressing everything, either. But you could use the best language (or domain) for the task and be more productive that way.

    6. Re:StupidPeopleTrick by Anonymous Coward · · Score: 0

      Things in this perspective get ugly when you have 5 components developed with 5 different languages.

      This makes me suspicious of hiring practices. Most programmers should be able to learn new languages pretty easily, and that's especially true when we're talking about "mini" languages like awk and sed. If lack of ability to handle awk and sed keep you from hiring a C programmer, then the mixed-language situation might have just helped you, as that C programmer was probably not all that bright.

      I'm not saying you should see awk on someone's resume; I'm saying that if you don't see it, you should assume they either know it but saw it as too trivial to put on there, or they should be able to pick it up quickly. If that's a bad assumption (and I guess it could be) and you end up hiring the guy anyway, then something went terribly wrong with the decision to hire him anyway. You had an incompetent who somehow slipped through, and lack of awk wasn't really the issue. He probably isn't very good at C either.

  5. do not sweat it and enjoy! by jackb_guppy · · Score: 4, Informative

    The world ebbs and flow. One day it C, another RPG or CL or ADA or PHP or ...

    Do what you like to do.

    What you may want to, is join a project that is more inline with Linux as whole versus a single app. Ubuntu or another general distro, or help with a small single use distro like IPCop. They should be glad to have some one like you help out.

  6. One time..... by phantomfive · · Score: 5, Interesting

    One time at my company, a programmer who must have been in his 50s came in with a resume that had no less than 25 programming languages. I was interviewing him, so I asked him, "Which of all these languages do you like most?" I figured he'd have some nuanced answer dealing with precision in Ada or flexibility in Lisp, or the happiness of Perl. Nope. "Shell scripting" he said. My jaw nearly dropped. He said, "It easily lets me tie all these different building blocks together. No other language can do that." He didn't end up working with us but it was one of the most educational interviews I ever did. I like interviewing more experienced programmers, even if they don't end up working for us, just because something interesting ALWAYS happens. I could tell you stories........

    As for the question, I think in part he's right, it is good to have a separate mailer from the browser from the calendaring program, and have ways for them to communicate. Some systems do work in this way, for example, most chess programs will let you change your chess engines, separating the front end from the back. Might want to check how they do it. Other programs on OS X will let you manipulate variables and send messages using applescript or automator. Also, on OS X, there's no reason to not use awk or sed. But definitely learn C++ and Java, they're used everywhere and once you know one, the other's not too difficult.

    Maybe if you were more specific in the question you asked we could answer better? Or were you just trying to encourage all programmers on slashdot to program more modularly?

    --
    Qxe4
    1. Re:One time..... by FlyingGuy · · Score: 1

      That much experience huh? So why did you pass him up? Were you intimidated by his skill set or was it that he didn't fit into your ( sounds like some 20 something kids club ) post modern punk world?

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    2. Re:One time..... by cyborch · · Score: 1

      Whoa! Hold back on the anger kiddo. Are you looking for a job and missed an opportunity you really wanted? There are many reasons not to hire a guy. One could be a really bad attitude - kind of like the one you just demonstrated.

    3. Re:One time..... by BorgDrone · · Score: 1

      That much experience huh? So why did you pass him up?

      Mabye he passed them up.

    4. Re:One time..... by phantomfive · · Score: 2, Interesting

      The main problem with old guys I've found is that they are inflexible (that's a gross generalization, of course, and not always true). In his particular case he was looking for a consulting gig, not a full time position, and applying for a job was his way to try to get in the door. I had another old guy sit in the interview and tell me how he had spent six months at his previous job working on something his employer had asked him not to, but he had also done some amazing technical stuff. It's not always about technical ability...

      My suspicion is that anyone who's been around that long and who has all their marbles in a row doesn't need to look for a job very often. They are either rich, in management, or have connections.

      --
      Qxe4
    5. Re:One time..... by FlyingGuy · · Score: 5, Insightful

      And the main problem I have found with young guys is they have absolutely no appreciation for talent and can't stand it when they are in a position to hire because quite frequently it eclipses their own by an order of magnitude (that's a gross generalization, of course, and not always true). But the by far the biggest problem I have found to be more and more true these days is that some kid manages to get himself hired because he has a degree in java, manages to keep his nose clean and then gets to hire more talent as the project gets bigger and in most every case they turn down anyone with a vastly superior skill set that was born more then 3 years before they were because they prefer a quiet well lit office that doesn't stink of BO and stale junk food. I might be wrong, but somehow I doubt it very much.

      Now you are probably thinking, "Must be some old fuck" and you would be right I am part of the over 50 crowd who has a very current skill set and has 30 years of programming experience to back it up. I am a consultant and I am frequently hired by CEO's and CFO's who are at their whits end with the "kids" that got hired by the other kids that got the job then decided the lights were brighter and more sparkley someplace else after talking management into using the latest and greatest hair brained library written in a language that uses tabs for scoping.

      Mostly what I am is a janitor, a very very well paid one, but a janitor never the less, cleaning up messes left by kids.

      Don't take offense because one of these days you (if you are any good) will be doing the same thing in 30 years and why? Not because you "need" the money but because you, like me, will hopefully have some ethics about our craft.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    6. Re:One time..... by Anonymous Coward · · Score: 2, Insightful

      There's an important distinction between being highly skilled and being inflexible, bull-headed, or argumentative. If someone lacks good judgment in how much arguing a particular issue is worth before letting it go, or if they lack the skills to convince other people of their views - much less recognize when their own views are wrong, then what other expertise they have as an engineer becomes much less worthwhile to most employers.

    7. Re:One time..... by Anonymous Coward · · Score: 0

      You forgot to say "Get off my lawn!"

    8. Re:One time..... by Anonymous Coward · · Score: 0

      Don't dis python, you old fart.

    9. Re:One time..... by swillden · · Score: 3, Insightful

      using the latest and greatest hair brained library written in a language that uses tabs for scoping.

      I'm with you for all but this. And, BTW, I'm 40, with 20 years of experience. I was skeptical about Python, but I've recently started working on a significant project written in it, and I think it's a fine language. It does require a decent editor to keep the indentation clean (and the recommended practice, BTW, is not to use tabs at all for indentation, only spaces), but assuming you don't abuse the dynamic nature of the language, Python code tends to be some of the clearest and most readable of any language I've used.

      Python is a fine language (and not a particularly new one, being roughly contemporary with Java). Like any sufficiently-powerful language, inexperienced programmers -- and especially very *clever* inexperienced programmers -- can make a huge mess.

      I'm sure that's little consolation when faced by such a mess, but (and I'm sure you're fully aware of this), the problem is the messmakers, not the toolset.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    10. Re:One time..... by Anonymous Coward · · Score: 0

      And the main problem I have found with young guys is they have absolutely no appreciation for talent...

      I am in your cohort (over 50, several decades of experience) and that seems too generalized, as you acknowledge. I have confronted that younger stereotype a couple of times but I have also faced guys my own age or older who have their own prejudices when it comes to hiring the mature developer. Some older managers are as uncomfortable having someone their own age working for them as a young guy might be having an older subordinate.

      The problem with ageism is that most people aren't aware of it as much as racism or sexism and haven't spent any time questioning their assumptions about age. In the real world people separated by a decade or two can have a lot more in common than their generational siblings and develop mutually rewarding relationships. It's just hard to see that if people haven't taken the time to think it through. It is doubly hard in the ridiculously stilted social format we call "interviewing".

    11. Re:One time..... by thogard · · Score: 1

      How do you define a mess? I tend to define it as "Is it done?" When the answer is "no", then the next question is "will it ever get done?"

    12. Re:One time..... by Peter+La+Casse · · Score: 1

      and the recommended practice, BTW, is not to use tabs at all for indentation, only spaces

      Recommended by some, perhaps, but I do not understand why they think it is a superior technical solution. Every good IDE and editor can change the displayed indentation size of tabs, allowing the tab-indented file to automatically conform to each user's preference without changing the source.

    13. Re:One time..... by mkcmkc · · Score: 2, Interesting

      written in a language that uses tabs for scoping

      This sounds like a half-baked (and incorrect) jab at Python's syntax. Sounds like someone's skill set isn't quite as current as he thinks... :-)

      That notwithstanding, I also find after decades that programming involves a great deal of janitorial work. I'm trying to convince myself that this is a good thing, as it means that I will always be able to find a job cleaning up these messes. But, it does kind of suck cleaning up vomit written in Perl, C++, and (god help me) RPG...

      --
      "Not an actor, but he plays one on TV."
    14. Re:One time..... by npsimons · · Score: 1

      Mostly what I am is a janitor, a very very well paid one, but a janitor never the less, cleaning up messes left by kids.

      Don't take offense because one of these days you (if you are any good) will be doing the same thing in 30 years

      Heh. Nice stereotyping there. I was already cleaning up after other people's messes when I started my second job (in my early twenties) practically straight out of college. It's called maintenance programming, everyone (of every age and skill level) has to do it sooner or later, even if it's to their own code.

      As for your other points, I won't take contention with those. Anyone who can't hack it shouldn't get the job; if they are happier to be interviewing than coding, then by definition they aren't the person you want working on the code. If they hire nincompoops, then you need a better interview process, or possibly to fire the person that hired them.

      As for the "quiet, well lit office that doesn't stink of BO", I thought those were basic conditions conducive to productive work? Sure, we can all say "well, you should be able to hack out a real-time system in assembly while in combat!" but the truth is that asking for decent working environment isn't whininess; it's better for long term retention (including health) of employees, and helps them be more productive.

    15. Re:One time..... by mkcmkc · · Score: 2, Insightful

      Like any sufficiently-powerful language, inexperienced programmers -- and especially very *clever* inexperienced programmers -- can make a huge mess.

      True enough, but I've found that because Python is not yet that popular, it's still drawing mainly above-average programmers. Maybe 2% of the Python code I see is awful, versus over 90% for Perl. I think part of this is due to Perl's inherent flaws, but surely another part is due to the fact that every Joe learning to program is pointed at Perl (which can't end well, and doesn't).

      --
      "Not an actor, but he plays one on TV."
    16. Re:One time..... by Anonymous Coward · · Score: 1, Informative

      That's funny, I'm 24 and I spend most of my time at work cleaning up horrible code written by people older than me. Talent--or the lack thereof--shows up at any age.

    17. Re:One time..... by Anonymous Coward · · Score: 0

      they prefer a quiet well lit office that doesn't stink of BO and stale junk food

      Who would prefer an office that smells like BO and stale junk food?

    18. Re:One time..... by cptnapalm · · Score: 1

      An imperative to remove yourself from his lawn is located in his signature.

    19. Re:One time..... by ir · · Score: 0

      It's not that they prefer it. Some people just too stupid to clean up after themselves. They don't even realize it.

      --
      Irina Romanov
    20. Re:One time..... by BlitzTech · · Score: 2, Interesting

      You might want to take a look at the Dunning-Kruger Effect. It's a fairly detailed and scientific explanation of why a lot of people have difficulty hiring people smarter/more competent than they are. I certainly hope you're over-generalizing, though - being a 'kid' myself (22), I'd hate to get lumped in with a bunch of incompetents. Not that I'm some amazing coder, but that I'm willing to learn from people more intelligent/experienced than I am.

    21. Re:One time..... by Anonymous Coward · · Score: 0

      You're not as talented as you might think you are if you're left doing the same mundane task and dealing with cruft after 30 years. All that experience and only complaints to show for it? Maybe you picked the wrong field, gramps.

    22. Re:One time..... by Blakey+Rat · · Score: 1

      You win the Slashdot award for Most Crotchety Post! Congratulations! (I'll get off your lawn now, oldtimer.)

    23. Re:One time..... by swillden · · Score: 1

      and the recommended practice, BTW, is not to use tabs at all for indentation, only spaces

      Recommended by some, perhaps, but I do not understand why they think it is a superior technical solution. Every good IDE and editor can change the displayed indentation size of tabs, allowing the tab-indented file to automatically conform to each user's preference without changing the source.

      Yes, that's an appealing argument.

      As long as you consistently use only tabs OR spaces, you'll be safe from inadvertent scoping errors. What causes huge problems is when a developer who uses one approach touches code by a developer who uses a different approach.

      I'm not sure why the community settled on spaces-only rather than tabs-only. Perhaps it was to accommodate users of lousy text editors that don't let you redefine tab width, or to accommodate users who like to print their code out or view it in console pagers, where tabs would get expanded to the unwieldy 8-space "standard".

      I don't know what the origin is, but at this point I think it's far wiser to adopt the consensus position rather than fight it and potentially break code.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    24. Re:One time..... by Anonymous Coward · · Score: 0

      I'm a younger (30) programmer who is best at Java, but who has had the opportunity to work with four (at different times) older programmers in different languages. I've noticed that there is a huge transition from sequential type programming to object oriented programming. The older programmers actually think about things quite a bit differently. I've learned to think both ways, and use both techniques in different situations. If I wanted to quickly build a system which can be changed easily, I'll use object orientation, simply because it supports modularity in a natural way.
            If I want to do something complex which is not well understood and I have no idea how it would be broken down into objects, or I think that breaking it down into objects would simply make it yet more complex, I'll use the sequential method.
            In some cases, after using the sequential method, I've had the module completely rewritten by another young programmer, who would always leave the module in a state of complete disrepair with countless bugs (and leave). I'd usually just go into the revision system and wipe the changes out after studying the changes made and thinking about the purpose and ease with which I could actually complete the bug fixing process (sometimes it would be virtually unsalvagable).
            I definitely see your point.

    25. Re:One time..... by phantomfive · · Score: 1

      And the main problem I have found with young guys is they have absolutely no appreciation for talent and can't stand it when they are in a position to hire because quite frequently it eclipses their own by an order of magnitude

      You probably are right, after a few years you manage to learn SOMETHING.

      I wrote a nice long post with lots of reasons explaining why we didn't hire certain 'old' people (realistically there is no reason to really call 50 old, unless you want to be called it. If you take care of yourself, you have another 30 to 50 years in your life. That's enough time to earn a PhD in physics, and become a sculptor on the side. I mean, that's a lot of time).

      But in almost every case it boiled down to, "this person really doesn't want to work here." Some because what they really wanted was a consulting job, others because they wanted to be a manager, others because they had anti-recursion fetishes. Realistically, if you want a job as a manager, don't apply for jobs as basic programmers. Go find a job that has potential to give you what you want. If you are in an interview, and you act like you don't really want the job you are applying for, you probably won't get hired.

      This goes for young people too. The difference is that with young people the #1 reason for not getting hired is they suck completely.

      --
      Qxe4
    26. Re:One time..... by bXTr · · Score: 1

      This is exactly why I don't find myself using Python much. It's not so much the language, but the attitude of its fans, or to be more precise, fanboys. Most utterances from Python fanboys seem to be about pissing on other languages with Perl being the frequent target. The perceived issues with Perl, justified or not, are irrelevant. You can write spaghetti code in any language. The fact that these people can't seem to promote their favorite language without trying to tear down another is what keeps me away from it.

      That said, there's not that much wrong with using indentation for scoping because you're going to indent your code anyway. You might as well make it worth your while. As far as tabs vs. spaces are concerned, that's what coding standards are for. Define them, and enforce them. By the way, that works for all languages, not just Python.

      --
      It's a very dark ride.
    27. Re:One time..... by Anonymous Coward · · Score: 0

      It does require a decent editor to keep the indentation clean...

      Like Vim?

      It does a fine job. And if an old guy like yourself doesn't use Vim, you're lying about your age.

    28. Re:One time..... by mkcmkc · · Score: 1

      This is exactly why I don't find myself using Python much. It's not so much the language, but the attitude of its fans, or to be more precise, fanboys. Most utterances from Python fanboys seem to be about pissing on other languages with Perl being the frequent target.

      I wouldn't have said it if it weren't true. Like it or not, I have to read and fix Perl code all of the time, and I wish nothing more than that that code were readable and reasonably well-written. It's not. Maybe I'm just really unlucky.

      The perceived issues with Perl, justified or not, are irrelevant.

      If the issues are justified, they're hardly irrelevant, no?

      --
      "Not an actor, but he plays one on TV."
    29. Re:One time..... by benhattman · · Score: 2, Interesting

      How is this not flamebait? I have worked with young guys who don't know what they are doing, and I have worked with old guys who don't know what they're doing.

      Incompetence knows no age limit. Neither does competence by the way. In your case, FlyingGuy, I would not hire you (if I were doing hiring) and it has nothing to do with your age, but rather with your bad attitude.

      FWIW, I am a younger programmer and I have found two things (major generalization forthcoming). 1) The older developers have taught me very little about programming. Actually, I usually teach them how to code better. Too many of them are confused by templates and don't really know how to do OOP correctly. 2) The older developers have taught me plenty about software development. These guys know best practices, they know the design mistakes they've been burned in the past by, and they know how to spec a problem.

      In other words, don't turn to the old guys for what you can learn in school, but do use them as an excellent resource for the rest.

    30. Re:One time..... by bXTr · · Score: 1

      I wouldn't have said it if it weren't true. Like it or not, I have to read and fix Perl code all of the time, and I wish nothing more than that that code were readable and reasonably well-written. It's not. Maybe I'm just really unlucky.

      That's not necessarily because it was written in Perl. You have problems with Perl in the same way I have problems with Japanese. I wish I could read and understand Japanese, but I can't. Maybe I just don't know Japanese well enough. Maybe I'm just really unlucky.

      If the issues are justified, they're hardly irrelevant, no?

      If the issues are because I don't know the language well enough, or because I don't like how someone else wrote it, or because it's not in my preferred language, then yes, it is irrelevant.

      --
      It's a very dark ride.
    31. Re:One time..... by slashtivus · · Score: 1

      This may be a Windows vs. Linux thing, but for me spaces are the rare exception. Tabs are the consensus. I've been programming Windows for about 15 years now and have only 1 time seen a single spaced indented program. Since I'm not used to that it was rather hard for me to read, although I still got it fixed.

    32. Re:One time..... by Anonymous Coward · · Score: 0

      I tried to moderate this but couldn't find the "-1 bitter" option.

    33. Re:One time..... by swillden · · Score: 1

      I use EMACS. Have for 20 years.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    34. Re:One time..... by swillden · · Score: 2, Informative

      Are you talking about Python code? The "standard" for Python appears to be four-space indentation, all spaces, no tabs.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    35. Re:One time..... by guitaristx · · Score: 1

      [...]hair brained library written in a language that uses tabs for scoping.

      Making comments like this clearly reveal that your 30 years' experience in programming hasn't taught you to appreciate the benefits and drawbacks in any given programming language. I suppose you're probably more liberal with venting your opinions on /. than you would be with your CEOs and CFOs, but still, this ingnorant drivel deflates your argument. I've encountered lots of programmers who've seen it all and been there done that and appear to have a similar attitude to yours about young people. I recommend you should spend some time doing some code maintenance, bug fixing, or even some unit testing in an open-source Python project before you write it off.

      That being said, I totally agree about ethics in our craft. I find that the quick fix is far to often applied. Then, when someone mentions that something needs to be revisited in the next release, the managers cover their ears and say "la la la, can't hear you, it's already in the field working right, that means it's perfect!" While it's true that few of us are building software systems for the space shuttle, that doesn't justify building code that behaves like a Rube Goldberg machine.

      --
      I pity the foo that isn't metasyntactic
    36. Re:One time..... by slashtivus · · Score: 1
      Short answer: No. I assumed you were generalizing all code bases, I was only taking issue with the 'consensus' part of your post. Not a flame to you, just a different perspective that I was mentioning.

      Cheers.

    37. Re:One time..... by swillden · · Score: 1

      This is exactly why I don't find myself using Python much. It's not so much the language, but the attitude of its fans, or to be more precise, fanboys.

      Will it help if I give you my list of things that suck about Python? It has its warts like any other language. Perhaps fewer than most, but that's mainly because the Python community seems more willing to break compatibility between versions -- which is another sort of wart.

      Overall, though, I find it a very usable language. I quite enjoy the functional capabilities; they're limited compared to a real functional language, but there's just enough there to make a lot of things really simple. A tradeoff is the more of the functional aspects you use, the less readable the code is to a novice Python programmer. The libraries are extensive and powerful, although there are very clear signs of the language evolution exposed by the different APIs, which is sometimes mildly ugly.

      Probably my favorite thing about the language is the iteration constructs, particularly "generator" functions. Generators rock.

      Hmm. It might be interesting to see if I can briefly explain generators.

      Start with list comprehensions. Suppose you want to construct a list of every line in a file. Lists in Python are represented like:

      lst = [ 1, 3, 5, 7, 11, 13 ]

      Simple enough, just a comma-separated list enclosed in square brackets. They're called lists, but they're really what I'd call an array. They're indexed, zero-based. They're also iterable.

      So, to build a list of every line in a file, you could write:

      f = open("filename")
      lst = []
      for line in f: lst.append(line)
      f.close()

      Straightforward enough, right? Files have a default line-by-line iterator. But you can also write:

      f = open("filename")
      lst = [ line for line in f ]

      Very slick. And suppose you wanted to munge each line before building the list:

      lst = [ munge(line) for line in f ]

      And maybe you want to filter the list a little:

      lst = [ munge(line) for line in f if line.startswith('foo') ]

      But maybe you really don't want to build the whole list in memory. In that case, just replace the brackets with parentheses to get:

      gen = ( munge(line) for line in f if line.startswith('foo') )

      Now 'gen' is a generator. Basically, it's an iterator. You can manually call 'gen.next()' and get the next value, or you can use it in for loop syntax, or to define a list -- or another generator!

      gen2 = ( mungemore(line) for line in gen )
      for line in gen2: print line

      But those are the lame and simple generators. You can also define generator functions by writing what looks like a perfectly ordinary function, but wherever you want to return a value you write "yield value" instead of "return value". When you call a generator function what you get is an iterator. Each time you call "next()" on the iterator, the function runs until it hits a "yield" and then you get back the yielded value. Function execution suspends at the yield. When you call "next()" again, it picks up right where it left off.

      The result is that it's really easy to create powerful processing chains of layered generators for efficient "stream" processing of data without having to build in-memory temporary lists. The resulting code is an order of magnitude simpler and clearer than non-generator approaches to achieving the same efficiency, because non-generator approaches have to either serialize the computations in the code (making it brittle and inflexible) or else actually return values and then manage the state so that the functions are "resumable".

      Oh, but I was going to tel

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    38. Re:One time..... by swillden · · Score: 1

      Ah, no, the consensus I was talking about is strictly a Python issue. In other languages that don't base block scoping on indentation there's less (no?) need for such consensus. For non-Python code, I have my editor apply the most efficient mix of (8-space) tab characters and spaces to get the indentation for the line (I like three spaces per level). For Python code, I have it uses spaces only, four of them per indentation level.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    39. Re:One time..... by mkcmkc · · Score: 1

      I won't try to convince you that I know Perl, but I did use it regularly for a number of years. Here's a list of Perl puzzles that I wrote a few years ago--knock yourself out.

      --
      "Not an actor, but he plays one on TV."
    40. Re:One time..... by slashtivus · · Score: 1

      4 space indentation is my favorite as well. (I don't program Python)

    41. Re:One time..... by FlyingGuy · · Score: 1

      I would not normally reply to something like this; however, I will because I see your point, but you need to understand a few things. Yes I couch my language slightly differently when dealing with my customers, but sometimes you tell it like it is, no bumpers, no soft edges.

      I can and do appreciate the nuances and utility of many languages that I have and do write in and the applicability of each according to the problem at hand.

      Having said that, it is beyond me why any language author who would appear to subscribe to the Sugar / Salt / Saccharin doctrine would produce a language that can be rendered utterly useless by a text editor that is miss-configured. I respect the work of Landin but I must, for obvious reasons, take exception to the "Off-side Rule". Surely the "sugar" of a closing delimiter that is visible and obvious does not, in and of itself, cause python fall into a realm of sugared language. Further it is perfectly obvious that Python is sugared a great deal by the class syntax.

      I think python at its core is a quite useful language for certain applications, but to force me to subscribe to a particular formating doctrine is something I find unacceptable in terms of language function. There are a good many reasons to have and enforce formatting rules based upon style preferences, but on function I must disagree completely.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
    42. Re:One time..... by Anonymous Coward · · Score: 0

      Wow, and I thought male menopause was a myth.

    43. Re:One time..... by WhiteHorse-The+Origi · · Score: 1

      Python is your closest bet for multi-language situations. It can use C, C++, COM, .NET, CORBA, and many more. It also can use Java libraries and compile into java byte-code with Jython.

      Any questions? Honestly, python is one the most well thought-out languages and it's growing very fast.

    44. Re:One time..... by WhiteHorse-The+Origi · · Score: 1

      Oh for you web devs, you need some CherryPy, oh yeah, my CherryPy.(funk music background)

    45. Re:One time..... by sum1 · · Score: 0

      Hello FlyingGuy,

      Thank you for writing this post. I'm not anywhere near being as wise as you - I'm only 27 years old - but, I must say I definately not only agree with you, I respect what you are saying.

      Before I go on, I must say that I am a complete idiot; I only went to college for 3 years, and in that time managed to fail out of both schools... I guess I just couldn't understand why I was paying people to tell me what books to read and how to read them... oh well.

      Anyway, it's pretty easy to see that hardly anything is original these days, it's all just copies of other copies... and if a real problem turns up - hey, no big deal - we can just call up FlyingGuy and his buddies... I just hope he doesn't give us too much trouble this time..

      As far as this whole topic goes, computers are just big calculators - they do math. All of the programming languages created to do that math were created by us stupid humans to put that math into words.

      Hopefully my grammar and spelling were good enough for any readers of this post.

      -sum1

    46. Re:One time..... by doom · · Score: 1

      There's an important distinction between being highly skilled and being inflexible, bull-headed, or argumentative. If someone lacks good judgment in how much arguing a particular issue is worth before letting it go, or if they lack the skills to convince other people of their views - much less recognize when their own views are wrong, then what other expertise they have as an engineer becomes much less worthwhile to most employers.

      Unless they're promoted to management.

    47. Re:One time..... by bensch128 · · Score: 1

      If you're working on maintainance jobs all of the time, then that really sucks. Maybe you should request a change in position from your boss.

      However, being the lead on a new project is pretty rare. Most work is adding an feature, fixing a bug, etc.

      I'm fortunately at my current job to be the lead on a new project. But ultimately, it'll just be a front-end to a current existing system

      Just my two cents.
      Cheers
      Ben

    48. Re:One time..... by jgrahn · · Score: 1

      I'm not sure why the community settled on spaces-only rather than tabs-only. Perhaps it was to accommodate users of lousy text editors that don't let you redefine tab width, or to accommodate users who like to print their code out or view it in console pagers, where tabs would get expanded to the unwieldy 8-space "standard".

      Or accomodate users who aren't the one person who wrote the code and knew exactly how he configured his text editor?

      I am surprised that people still believe you can redefine the size of a tab from 8 without causing chaos. I work on two code bases in parallel. One was written with TAB misconfigured as 4, and I have to edit my ~/.emacs and start two copies to work with them at once. Reindenting would be impolite, since that would break version control.

      I'm sorry, but this whole TAB/SPACE thing would be a non-issue, unless there were idiots who thought they could make TAB 2, 3, 4, .., wide.

    49. Re:One time..... by jgrahn · · Score: 1

      I was already cleaning up after other people's messes when I started my second job (in my early twenties) practically straight out of college. It's called maintenance programming, everyone (of every age and skill level) has to do it sooner or later, even if it's to their own code.

      You make maintenance sound a bit negative. I actually like it -- provided I have the power to do more than apply band-aids. It's rewarding to start with a complete mess, apply one of a handful of techniques, and end up with code which does the same thing, but which is obviously correct.

    50. Re:One time..... by npsimons · · Score: 1

      You make maintenance sound a bit negative. I actually like it -- provided I have the power to do more than apply band-aids. It's rewarding to start with a complete mess, apply one of a handful of techniques, and end up with code which does the same thing, but which is obviously correct.

      I've had some bad experiences maintaining other people's code. Sifting through things like the idea of version control as "copy a subdir and start the new work in that with no indication of which is newer" left me a little bitter. Lately, I have come to appreciate that while from scratch programming can be exciting and seems to have limitless possibilities, it's nice to sit down to something where you can just hammer away at it until it's better. It can even be a nice change from that feeling you get at the beginning of a new project where you have a blank file and no idea what to start typing.

    51. Re:One time..... by Peter+La+Casse · · Score: 1

      I am surprised that people still believe you can redefine the size of a tab from 8 without causing chaos. I work on two code bases in parallel. One was written with TAB misconfigured as 4, and I have to edit my ~/.emacs and start two copies to work with them at once. Reindenting would be impolite, since that would break version control.

      I do it all the time (to work around my coworkers' goofy combination of tabs and 4 spaces, and to deal with code that is nested way too much). I primarily use vi and kate, though, so running multiple copies of the same program is no big deal.

      It sounds like using indent would help in your situation as long as you remembered to also use indent to return it to its original form before making commits. That could be scripted.

      What I really want is an editor that will change how the white space is displayed without changing the indentation style of the underlying file.

    52. Re:One time..... by swillden · · Score: 1

      Well, ignoring continuation lines, variable tab sizes don't cause chaos if ONLY tabs are used for indentation. It's when your editor mixes tabs and spaces that changing the tab size makes for random-appearing indentation, and requires the reader to cycle through tab settings until he hits one that makes things line up.

      I've never been a fan of redefining the tab width.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
    53. Re:One time..... by pla · · Score: 1

      they prefer a quiet well lit office that doesn't stink of BO and stale junk food.

      Some of us, regardless of age, prefer to always have music on.

      For light... Well, the screen(s) make their own light.

      As for BO and stale junkfood... Eeew. I don't think anyone prefers that over cleanliness and hygiene.

  7. Don't understand the premise by quax · · Score: 2, Interesting

    I am an IT consultant for a large software vendor. In the last 5 years I worked and developed in Python, JScript, Perl, XSLT, SAS code, SQL, Java and Shell scripts. While it is true that big software packages are usually developed with primarily one implementation language it still holds that to glue things together in an enterprise setting a plethora of languages can still be deployed. I often find that I have the freedom to pick the best tool for the job.

    Language free protocols are abundant, object communication often facilitated via XML or JSON. Even on Windows the Scripting host has been around since NT - JScript and VB are natively supported and pretty much any other interpreted language under the sun can sit on top of it. And then there is .Net which has even escaped the confines of Windows.

    Just as with human languages the more you mastering the merrier and I find that small is still beautifull.

       

    1. Re:Don't understand the premise by Anonymous Coward · · Score: 0

      I have to say, I didn't understand the author's premise either.

      Has there been a trend in business to only focus on one language for everything? Not from what I've seen.

      If anything, I think you'll NEED to learn different languages (which is actually more like learning different methodologies) if you wish to KEEP a career as a developer.

      On the other hand, I don't think its such a great idea to try to master EVERYTHING, or try learning EVERYTHING at the expense of not being "competent" with the "core" languages that will be your bread and butter.

      Its best to have a good grasp of basic computer science, and then understand the philosophic methodologies driving the creation of a particular language. For example, there is no point in learning LISP if you don't realize its about stack oriented processing and object oriented processing. There's no point in learning C in order to write scripts that process text patterns.

    2. Re:Don't understand the premise by chthonicdaemon · · Score: 1

      The premise is that the modern approach seems to be to learn one language and its associated libraries well instead of learning several languages and when each applies to a problem. Basically, the Java for everything guys and the c or c++ for everything guys. This is supported by huge, well-developed and supported environments like VS and Eclipse, well-organized sets of documentation and an ever-increasing community.

      When I started on the whole linux thing, what I am doing now was the default position -- you had to learn a lot about the terminal and low-level stuff just to get Linux going. Once you figured the Unix Way out, it helps you to be very productive and you end up building a lot of tools to help you. You may build some of them in different languages, just because certain languages match certain types of problem. A lot has changed since '97, and I'm wondering whether it's time to press through in C++ when I know the job I'm doing now is really suited to xsl or awk or whatever.

      --
      Languages aren't inherently fast -- implementations are efficient
    3. Re:Don't understand the premise by quax · · Score: 1

      Seems to me this reveals more of a problem about how programming is taught rather than the reality in the industry. For any given core application you will usually decide upfront to go primarily with one language e.g. Java for an enterprise web app, C for an embedded app with tight hardware resources. Typically you pick whatever is best suited for the job although the familiarity of a language for your developer resource pool will certainly factor in. But I really don't think anybody with some seniority in the IT business would take the position serious that one language will always fit the bill.

      At any rate if you haven't done so I'd very much recommend you pick up one of the C influenced languages. C++ wouldn't be a bad choice since it contains C as a subset but something more esoteric like Objective C makes also for a good choice especially if you are into OS X as well. If you know any of the OO off-spring of C fairly well then gaining competence in C, Java and JScript is a small step.

  8. Yes by H0p313ss · · Score: 5, Interesting

    Should I suck it up and learn to do all my programming in C++/Java?

    Yes.

    In my 10 years of professional development I've covered many languages, but the last three doing nothing but Java have been the happiest. The second happiest was doing nothing but C++. There's a wonderful economy of scale to focusing on a single technology, you don't waste time on the glue.

    --
    XML is a known as a key material required to create SMD: Software of Mass Destruction
    1. Re:Yes by Anonymous Coward · · Score: 4, Insightful

      meh...

      In my 23+ years of professional development, administrative and engineering roles, I've found that you stick to what you're best at, and learn new things in between...

      Unless the command prompt disappears, there will always be shell-scripting and that strung together happiness of well written, single-purpose shell scripts doing their jobs together as though a well orchestrated symphony.

    2. Re:Yes by whyloginwhysubscribe · · Score: 1

      Me too. In the last 10 years I've covered many languages but since being made redundant, the last three doing nothing have been the happiest...

    3. Re:Yes by viljun · · Score: 1

      focusing on a single technology, you don't waste time on the glue.

      The original question was if there is any method to avoid the time wasted on the glue when the components are ready. Or is there a fast way to glue things up when the components are ready.

      --
      Ville / Varuste.net
    4. Re:Yes by harry666t · · Score: 4, Funny

      $ PS1=""

      Oh, no! The command prompt disappeared.....

    5. Re:Yes by thogard · · Score: 1

      The glue is the problem most of the time. That has been the case since the 1950s and while there have been lots of attempts to fix it, I'm not sure the new stuff is progresses since it just pushes around the problem.

  9. Eclipse by setagllib · · Score: 4, Informative

    Eclipse is a fantastic platform for multi-language development, especially if your primary languages are C, C++, Python, Ruby, etc.

    All you need to do is create a C++ Makefile Project, then use the makefile to wrap your build system (e.g. ant, scons, actual makefile, whatever). You can build any number of binaries and launch them (or scripts) from the powerful launch profile system.

    Basically, Eclipse projects have "facets" - they can cram in features from multiple language development kits and mostly remain compatible. You still sometimes have to do the glue work yourself, but in general C/C++/Python are very easy to mesh. It is therefore easy to have a project with C libraries being loaded by Python, and so on.

    --
    Sam ty sig.
    1. Re:Eclipse by zippthorne · · Score: 1

      So.. what is the benefit of separating the languages for a single project? Other than taking bits from things developed in several languages?

      If you're starting from scratch, wouldn't it be better to be homogeneous?

      --
      Can you be Even More Awesome?!
    2. Re:Eclipse by PitaBred · · Score: 1

      Some languages work better for different jobs. Depending on what processing jobs your project calls for, choose the language best suited. Hell, even C++ allows inline assembly for jobs where assembly is better suited than letting the compiler choose what registers to fill and so on.

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

      Eclipse is slow as shit and has huge lack of features (refactoring, method extraction, etc...) SlickEdit is miles ahead for c/c++ development.

    4. Re:Eclipse by ClosedSource · · Score: 1

      Things may have changed but the last time I tried using Eclipse for C++ development I found that it compared favorably with Visual Studio 97.

    5. Re:Eclipse by bonefry · · Score: 1

      In a multi-language environment nothing beats a capable text editor like Vim or Emacs.

      From my experience Eclipse is good for Java, awful for everything else. Eclipse plugins always have some unfixed in-your-face bugs, and while working on a C++ project (with CDT, which is in good shape compared to the rest) I just gave up and switched back to Emacs.

      Also, you always need to make little tweaks here and there, and waiting for Eclipse to load the whole project just so you can edit a simple file ... is just painful.

      For Java it's OK because of Java itself ... its APIs having been designed for IDEs (like instantiating 3 different classes to open a file with Unicode) so it's quite painful to work without intellisense. But while working on Java projects I also have a shortcut that opens the current file in Emacs and I use it quite a lot ;)

    6. Re:Eclipse by richpm · · Score: 1

      When did you last use Eclipse for C/C++ work? Refactoring support was added in the release last summer and there were substantial improvements both the speed and accuracy of parser. This is still being actively developed and they'll be a new major release at the end of June. Richard

    7. Re:Eclipse by SleepingWaterBear · · Score: 1

      So.. what is the benefit of separating the languages for a single project?

      I've had several occasions to write programs using both C++ and Python. I find that developing in Python is much, much faster than developing in C++ since I can usually accomplish the same task in half as many lines of code and the code will be more legible and easier to maintain. For a large project this can add up to hundreds of hours of time saved. However, Python isn't always fast enough for a given task so it can be worthwhile to write computationally intensive code in C++. Also, there is a larger range of libraries available for C++ and it often makes sense to write wrappers for a library in C++ so that you can use it in Python.

      I could have done these projects in C++ alone, but it would have taken me half as long again to complete them and my code would have been less maintainable. Basically, I find Python a more productive programming language, and can use C++ to shore up its shortcomings.

    8. Re:Eclipse by Anonymous Coward · · Score: 0

      If you're starting from scratch, wouldn't it be better to be homogeneous?

      not always. for example you may plan, from the very beginning, to code the business logic in python, and the number crunching in C.

    9. Re:Eclipse by benhattman · · Score: 1

      I would actually recommend NetBeans over Eclipse for most users of more common languages (C, C++, Java, Python, Ruby).

    10. Re:Eclipse by setagllib · · Score: 1

      This has nothing on top of make because it just uses make. And you get all of make's power. I use make to wrap Scons in Eclipse projects. I've used it before for LaTeX compilation as you describe.

      --
      Sam ty sig.
    11. Re:Eclipse by setagllib · · Score: 1

      Maybe, but NetBeans only looks/works well in Windows, and elsewhere it just looks and feels wrong, especially font rendering which Swing in general does very badly. It also desperately needs run profiles. Other than that I don't have much against NetBeans.

      --
      Sam ty sig.
    12. Re:Eclipse by Anonymous Coward · · Score: 0

      Eclipse is a fantastic platform for multi-language development

      That sounds useful; it is medium platform for any single-language development, due to its lack of support for split windows. (It is, of course, possible to work well with Eclipse, as with most other IDEs, if you use another program to edit the program text.)

    13. Re:Eclipse by setagllib · · Score: 1

      The what now? You can dock any number of editors and tool panels in any way, and start a whole new window for your second monitor if that's not enough.

      It's not a grid-like split if that's what you are after. Request it on the bug tracker if you like.

      --
      Sam ty sig.
  10. Huh? by Vellmont · · Score: 0

    So I'm to understand that application programming has only occurred in the last 10 years? That's strange, as I distinctly remember using programs that don't necessarily communicate with each other via stdin/stdout more than 10 years ago.

    Anyway, there's plenty of room for multi-language programming. One example of this is SOAP. Another example is CORBA.

    This is obviously more complicated than simple standard IO programming with grep/awk/sed and the like, but how many programs outside of some simple shell scripts really use that?

    --
    AccountKiller
    1. Re:Huh? by gbjbaanb · · Score: 4, Funny

      Anyway, there's plenty of room for multi-language programming. One example of this is SOAP. Another example is CORBA.

      is this your argument for or against multi-language programming? :)

  11. Python by Pope+Raymond+Lama · · Score: 4, Insightful

    You need to go no further.
    Python gives you the Rosetta stone for a project combining any other languages you'd like.

    It is a very high level development language, and does have a vast common library, able to "talk" tens of protocols, you can call directly any module compiled into a dynamic library with the CTypes module.
    Also, if your application or parts of it run in the Java VM, no problem, python is there in the form of "jython", enabling you to use this dynamic, multi paradigm and interactive language directly from inside the JVM, with all its standard library, plus full access to any java classes you have in there. Oh..you do you use .net? Ditto - there is ironpython!
    Ah, you need to exchange data from parents of your app in the jvm with native code in .CPP? Use libboost or ctyypes to interface python with the .cpp, and soem xmlrpc to talk with a module in the JVM (oh, it would take you 10, perhaps 12 lines of code to write two methods in python which use the standard library to talk back and forth between both running enviroments.

    Plus, connectivity with the automation interface of hundreds of other software - including OpenOffice, GIMP, Inkscape, all of KDE software through DCOP (kde 3) and DBUS (KDE 4), easy communication to any windows software which does havea COMM interface - and, it even works under GNU/other unixes - just run your windows app and win32 python under the wine emulator (the apps "think" they are ont eh windoews, but sockets and network ports are on localhost across windows and native apps)

    Anyway -- too much to try to write in such a shrot space. It obviously have all you are askign for and certainly goes beyond that.

    And, pronably you don't know Python yourself , or you would not need to ask such a question - souyou might have the impression itr is a "script" language jsut like some dirty linear scripting tools around one have to sweat a lot of hacks to insert a "for" and a "if" statement. Not such. It is multi paradigm and de-bureaucratized, but it supports a full OO model, written in from scratch, not shoehorned in a later stage of the language like happened with PHP or Perl. Everything in Python is an object. Even integer numbers, and it can give you more flexibility with your classes and objects with features such as meta-classes, computed properties, and such than the majority of OO languages out there.

    And before one says "ruby", just a thing: "readability counts"!

    --
    -><- no .sig is good sig.
    1. Re:Python by kiddygrinder · · Score: 1

      I don't even think he was hinting that python was the "one" language, you can possibly tell that by the way he was talking about it works so well with c++ and java.

      --
      This is a joke. I am joking. Joke joke joke.
    2. Re:Python by Jane+Q.+Public · · Score: 1

      Sure it does. But flexibility WITH readability counts even more, if you are a professional programmer.

      Sorry you don't like Ruby's ability to use terse syntax... but in Ruby you also have the ability to make your code as readable as you like. Your choice... unlike Python.

      You seem to be trying to make the point that choices are a bad thing?

    3. Re:Python by smallfries · · Score: 3, Insightful

      I'd agree with this completely. I've worked on a few large multi-language projects, and had to combine flavours of asm, C, C++, perl, prolog, bash, maple, haskell, java and a few others together to get what I want. After years of working this way, and stumbling over the questions posed in the article (integrating build processes, dev environment etc) I had my arm twisted into using Python. What a joy it has turned out to be.

      As someone with a background in functional programming (most of my PhD was implemented in Haskell) the "functional" programming support in Python is a bit barren - but list comprehensions and bound methods are powerful enough for most tasks. The shell integration is nice, and the regexps are simple enough that I hardly touch perl these days (thank god...). Sage replicates most of the functionality that I would use maple or magma for.

      A sibling (AC) poster complains that Python is not "the one true language" (tm) that the parent asserts it is. Well the parent makes no such assertion. I would assert that if you want a single True Language then Python would be a good candidate for you. But if you like multi-language programming then Python is good glue. Personally I like it as glue, shockingly other people may have different uses for it. Lastly, a general word on the whole monolithic application vs small tools in multiple languages. This isn't a new debate that has sprung up in the past decade. It has always been there. There isn't even really a debate, because the two approaches are building tools for disjoint sets of users.

      If you eat your own dog-food, it's vital that you have the quickest turnaround time possible on adding new features and trying out new ideas. In a sense you are continually prototyping, never finishing. You are your own end-user, although occasionally other people may pretend. As a result your target audience is highly literate in the languages that you are using, and wants to maximise the power of the tools with a programmatic interface. The unix-philosophy was constructed to service this case.

      If your target user is a non-programmer, who simply wants to be able to perform a task then you will need to wrap up the functionality in a non-programmatic way. GUIs are the best way (so far) of doing this. Because there is no intention of exposing an external call interface the overhead of mapping from language to language becomes pure overhead and there is a natural tendency towards a single monolithic language approach.

      The interesting gap between these two areas is when your target audience spans the non-technical and the technical. This is where monolithic applications with APIs and scripting interfaces appear. I've got to say that AppleScript is quite cute in this area, purely because it's pervasive enough that it reminds me of Arexx all those years ago...

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    4. Re:Python by damaki · · Score: 1

      It's not a Rosetta stone, just a low performance swiss army knife missing some blades. I won't make my C++ code automagically communicate with my java code, neither will it allow my legacy software to interconnect efficiently with other software.

      It is not the Grail, just an embeddable scripting engine like many others.

      --
      Stupidity is the root of all evil.
    5. Re:Python by jbolden · · Score: 1

      What was your PhD on? Always like to hear about Haskell projects.

    6. Re:Python by Pope+Raymond+Lama · · Score: 1

      Excuse me?
      Did I wrote "use python o write an OS core?" ?
      I did say: Use python to connect things, as it is everywhere! Connect things as diverse as cpp, java , and .net code with one same lanaguage - and use the same code for this (otherwise one might have to write a communication protocol for anr app three times over, a different language in each environment - this is he kind of thing Python spares you)
      I didn't sa that one should try to write parts needing high performance in python - I just said it can talk to whatever part of your application does the high performance, while you have to write consistently fewer and more readable lines of code to interface around it.

      Funny that you wrote "plain flat WRONG" about my post, when most of what I mention there are facts, not suggestions, or speculations: the language _is_ available in the environments I mention, and can do what I've written. Yes, they are written in an enthusiastic and marketing like way -hundreds of applications :-), could've been "several applications" but = it is "hundreds" when you count KDE and WinComm enabled apps.
      Moreover, if i did any argumentation that is not a fact s that it would be the best solution for most of the connecting and high level code on projects involving multiple languages and you didn't mention any technology that might do part of the features I point there,

      --
      -><- no .sig is good sig.
    7. Re:Python by Pope+Raymond+Lama · · Score: 1

      Hey pal,

      it is people who have exactly these ideas that I was addressing. For your sake, give it a check. Inclusive on the "performance" FUD -
      it is slow when compared with C or CPP, shure - but how much of your code needs to run at native speeds? And no, I am not saying that tehre are no parts of your code that need to run at native speed, but surely, that part about calling a toolkit library to draw windows and buttons could be a lot easier if you can just type what are you thinking instead of putting tens of casts for type of data, keeping track of allocated memory yourself, and so on.

      And the whole point of my previous post is that no, it is not just like "many others"

      --
      -><- no .sig is good sig.
    8. Re:Python by damaki · · Score: 1

      It's not FUD, it's annoyance and it's not only speed, it's also about the garbage collector performance which is really bad for an embedded engine, according to my own experience.

      The worst part is that I really like the python language; I just dislike the qualities you find in it. Do not sell python as the ZOMG best scripting engine in da world. Lua and javascript are faster, nice and really portable too. You only see python but there is a world out there of great interpreters. Python currently only has its clean syntax for him.
      Move on and look around. There are so many great languages AND great portable interpreters.

      --
      Stupidity is the root of all evil.
    9. Re:Python by Vornzog · · Score: 4, Interesting

      Just to expand on a couple of your points:

      But if you like multi-language programming then Python is good glue.

      If you eat your own dog-food ... You are your own end-user, although occasionally other people may pretend.

      If your target user is a non-programmer, who simply wants to be able to perform a task then you will need to wrap up the functionality in a non-programmatic way. GUIs are the best way (so far) of doing this. Because there is no intention of exposing an external call interface the overhead of mapping from language to language becomes pure overhead and there is a natural tendency towards a single monolithic language approach.

      Almost 100% of *my* code is python these days, but I use it glue together any number of my old scientific applications that are often written in C. You can turn an archaic, unusable program into a slick, modern GUI or web service with very little code.

      Most important here, though, are your points about who your target audience is. I think the submission author is missing that point, and it deserves to be made in no uncertain terms.

      I am a scientist and a programmer. When I am writing for myself, I want to spend time on my data, not my program. So, I bang something out unix style - command line only, text I/O, move on with life. Usually, that happens in Python, but it might be in C, R, MatLab - whatever. Programs from my PhD are almost strictly command line. My co-workers from that part of my life had to learn command line if they wanted to work with my stuff. And you know what? They all did. Some of them got quite good at it, and I had more than a few inquiries about learning to program - they all saw the utility of what I was doing.

      After finishing my PhD, I've worked a little for a start up and a government agency, both based on my PhD research. In both cases, I've played the role of the scientifically literate programmer. My users are somewhat tech savvy, but with few exceptions, they don't want command line tools.

      A few of my old tools are still in use, though, just because they do one thing so very well, and a handful of people took the time to learn them. In return, I save them hours every day, which make those few tech savvy souls very happy.

      The trend - what is likely to keep me employed for years to come - is building GUI/web programs for people who are good scientists, but don't understand.

      I take a hybrid approach. What my end user sees is a standard Windows GUI. They happily click buttons to find some raw data, and then their analyzed data pops up automatically in Excel.

      Behind the scenes though, my code is an amalgam of programs, most of which can still be run command line, just like they always could. The GUI code is wxPython, and it quite happily runs on Windows and Linux. I think it would run on a Mac, too, but I haven't had occasion to try it yet. It looks native in all of those environments, it never does anything to scare the users, and yet I can still do most of my analysis command line when I need to.

      I'm currently developing a DNA sequence database. User interaction will all be web-based, data analysis will largely be a mixture of Python, MatLab, and C programs behind the scenes. My users won't have to care how their data gets analyzed - it'll just magically show up in the form they need it. They focus on further analysis and interpretation. Given who my users will be, this is a Very Good Thing(tm).

      The point, though, is that my programming spans everything the submission discusses. These approaches aren't orthogonal. Pick the right one for the code you are working on.

      If you are coding for yourself or for very tech savvy scientists, stay command line. It's easier to code and debug, and you'll get more done.

      If you are selling to Joe Sixpack, a GUI with a Staples-style 'Easy Button' is probably the right choice. Add advanced options as stand-alone

      --

      -V-

      Who can decide a priori? Nobody.
      -Sartre

    10. Re:Python by Pope+Raymond+Lama · · Score: 1

      Ah, now we are talking. :-)
      It is amazing as an over-enthusiastic post can draw people bashing you these days.
      Yes, you got me to the point - what really attracts me in Python is the clean syntax.
      And I concede I have not used it as an embedded language - you can see that despite it would be relevant in the context, I did not even mention it in my original post.

      I rather tend to think of the python interpreter as being to large to be embedded - I just found out that i think projects the other way around: write the project in a very high level Language, and the core parts that need speed in C or C++. Embedding is a solution when you have a large project in these low level languages and want a higher level interface.

      Actually, if one would ask me directly what language to embed in a C project, my first response would actually be Lua.

      And for your part - in other usages than embedding, do not take the Language for its implementation - the other python interpreters, for .net, and java use those environments respectively for GC, for instance.

      --
      -><- no .sig is good sig.
    11. Re:Python by Pope+Raymond+Lama · · Score: 1

      Ok
      I apologize.
      Should not have mentioned ruby at all in the grandparent.

      Actually, what bothers me most about ruby is having to prefix variables with not-pronounceable characters like @ and $ -

      As for flexibility, tough, I think python can be every bit as flexible as ruby, unless you are really determined to make your project rather unmaintainable. (you can't add behavior to he native numeric objects like in Ruby - but you can subclasses those and add the behavior to your own classes, for example).

      Now, instead of spending energy arguing around which is better, I think I'd like to see a post of how ruby can be used in the original context - of multi-programing language projects. Maybe you could point out Ruby's strong points there? (do not misunderstand me, there are good posts on the other comments about lisp, perl, java and JVM sibling languages - a good one about Ruby would be nice)

      --
      -><- no .sig is good sig.
    12. Re:Python by jstults · · Score: 1

      Gotta agree, I develop numerical simulations and python is definitely a great glue for multi-language development. In a Linux environment it's tough to beat Maxima --> Fortran --> F2py for developing numerical algorithms. Then you get your inner-loops in *correct* Fortran90 and you can use them along with all the great 'batteries included' of python.

    13. Re:Python by krunk7 · · Score: 1

      Having learned ruby first and python second, I'd say there's not much difference between the two except a bit of philosophy.

      The one thing that ruby provides over python would be unconstrained anonymous functions and a greater emphasis on flexibility for the developer. It also has better package management.

      Lastly, it has a cleaner designed feel. By this I mean, once you learn the basic classes in ruby you can easily find other packages since they tend to occur where you'd naturally expect them. In python, there's often quirks of the language on finding what you're looking for. For example, path functions are found in two different modules (sys and os) and if one considered the path to a file as an attribute of the file one could say that attributes and methods relating to files are spread across several modules.

      I think this is more of a sign of ruby's relative newness to python and Python 3.0 has attempted to eliminate some of these inconsistencies and oddities that have accumulated over time of the language.

      Where python shines is libraries and maturity. The interpreter is very mature and Python has a much deeper library than ruby. If you went with ruby for all your tasks, you'd quickly find yourself becoming a ruby contributor as you likely won't be able to find the library suited for your task. . . especially if your programming in the math and sciences.

    14. Re:Python by smallfries · · Score: 1

      Analysing the timing behaviour of assembly language programs for embedded systems. Haskell was used for the majority of the analysis, with perl used to munge data about prior to processing. Huge fun to write, but left me with a lasting desire never to combine perl and Haskell again...

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    15. Re:Python by Jane+Q.+Public · · Score: 1

      And I would point out the ease with which Ruby interfaces with C libraries... though I won't try to contrast that with Python. It may be that Python does as well.

    16. Re:Python by mkcmkc · · Score: 1

      It's not FUD, it's annoyance

      I admit that you did succeed in annoying me... ;-)

      --
      "Not an actor, but he plays one on TV."
    17. Re:Python by Jeremi · · Score: 1

      The one thing that ruby provides over python would be unconstrained anonymous functions and a greater emphasis on flexibility for the developer. It also has better package management. Lastly, it has a cleaner designed feel.

      And a ruthless efficiency, and an almost fanatical devotion to the Pope. Wait, I'll come in again.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
  12. Heh. I'd love to pick an environment by NotQuiteReal · · Score: 3, Interesting

    Sure, I'd love to pick to do "all my programming in X".

    I'd be even more productive, if I could just master "one thing". As it is, I have to use C, C++, C#, sometimes VB, perl, csh, bash, html, ASP.NET, AJAX, Qt, oh, forget it.

    I do ok, doing everything, jack of all trades, and fool at none (or something like that), but I have a nagging feeling that I'd be a GOD if I could concentrate on just one... or broke.

    Oooh, shiny! (wanders off)

    --
    This issue is a bit more complicated than you think.
    1. Re:Heh. I'd love to pick an environment by setagllib · · Score: 1

      Man, I hated the last project where I had to write an HTML script to pipe data between.. wait what?

      --
      Sam ty sig.
    2. Re:Heh. I'd love to pick an environment by Anonymous Coward · · Score: 0

      Man, I hated the last project where I had to write an HTML script to pipe data between.. wait what?

      Web applications. The UI layout is crafted from HTML + CSS. Yeah there's no logic, but it's still another language you need to know if you're writing for the web.

    3. Re:Heh. I'd love to pick an environment by cptnapalm · · Score: 1

      "jack of all trades, and fool at none"

      Jack of all trades, master of none ;)

    4. Re:Heh. I'd love to pick an environment by setagllib · · Score: 1

      His point was that he could be a developer God if he could focus on one language, but HTML is completely orthogonal to the languages presented. You can't use Python as web markup and you can't use HTML for shell scripting.

      --
      Sam ty sig.
  13. Running exec helps by Anonymous Coward · · Score: 0

    I have done a lot of shell programming as well. It was one of the reasons I avoided coding in PHP. Finally one of my PHP devs told me to run my shell scripts using an exec command. So I broke the seal and added PHP to my language library. I rarely make shell calls but occasionally they are useful, especially as an interface to existing scripts.

  14. You can by Anonymous Coward · · Score: 4, Insightful

    Well, this ain't going to be a Slashdot pleasing answer, but .NET would seem to be the best environment for multi-language programming. There are also a number of languages that work in for the Java Virtual Machine. There's Groovy, Scala, Jython etc.

    1. Re:You can by Anonymous Coward · · Score: 0

      Heeaaathen!!!1!

    2. Re:You can by nicholdraper · · Score: 1

      That's a funny response. You're like the pirate of penzance that has never seen a woman except his old maid. So, you would limit this programmer to a language that doesn't work on the iPhone? I use .Net and I like C#, but half the systems I program don't have any Microsoft code and couldn't run .Net. The more languages you know well the more opportunities you have, although most programmers can't master even one language. So, this is really a question of what do you desire and do you have the talent to back up your desires?

    3. Re:You can by Anonymous Coward · · Score: 0

      Who gives a shit about the iPhone, it's not worth developing for

  15. Do both. by Skreech · · Score: 4, Insightful

    You already know one philosophy. You don't "unlearn" it by learning another. You just learn more. Gain experience!

    1. Re:Do both. by FuryOfTheGods · · Score: 1

      ...You just learn more. Gain experience!

      Ding, just hit lvl 80 guys!

    2. Re:Do both. by Tablizer · · Score: 4, Interesting

      You already know one philosophy. You don't "unlearn" it by learning another. You just learn more. Gain experience!

      I don't think that's entirely true. I find the more languages I know the more times I accidentally write a statement from the wrong language or pause because I mix up the syntax in my head and have to remember which was which. There are more erroneous paths for neuron signals to travel down. I congratulate you for having a photographic mind, but we are not all that lucky.
           

    3. Re:Do both. by Anonymous Coward · · Score: 0

      Yeah, it's a pretty dumb question he asked. Tune in next time for the high quality, thought provoking Ask Slashdot discourse you have come to expect!

    4. Re:Do both. by pgn674 · · Score: 3, Informative

      Not necessarily. In psychology, interference theory proposes that people forget information because of competition from other material. One kind of interference is retroactive interference, which occurs when previously learned information interferes with the retention of new information.

    5. Re:Do both. by Anonymous Coward · · Score: 0

      Philosophies are not languages. You don't harm your procedural knowledge by learning functional programming. After some time, your procedural programming improves because of the functional exposure, though you feel more restrained in mere procedural languages.

      The real danger, as you alluded to, are languages that are similar to each other in syntax and style enough to throw you off. I wasted 2 hours at work the other day writing C because I indented all the statements under the if statement and expected them all to run. :(

    6. Re:Do both. by Anonymous Coward · · Score: 0

      Ding, level up?

    7. Re:Do both. by lawpoop · · Score: 1

      I don't know, I think I could see how this might work for memorizing details ( i.e. "What's the syntax for x() function? In version 4.3? ) But I find that, the more I learn, the more structures I have in my personal cosmology. I believe there is a difference between details of knowledge and structures of knowledge. I think details probably compete for headspace, but once I have an insight or revelation about the structure of the world I live in, I don't think I forget that information -- just my internal map gets updated.

      My personal cosmology is like the organizational structure that holds all the details I've picked up over the years. When I get a better structure, I'm able to hold and recall more details, because the whole system is better organized.

      --
      Computers are useless. They can only give you answers.
      -- Pablo Picasso
    8. Re:Do both. by mattwarden · · Score: 1

      > There are more erroneous paths for neuron signals to travel down.

      Please god make the improper neuroscience references stop.

    9. Re:Do both. by owlstead · · Score: 1

      "You already know one philosophy. You don't "unlearn" it by learning another. You just learn more. Gain experience!"

      That's true for philosophy's. But it is certainly not true for languages and even less for API's.

      I've programmed HTML (yes, at advanced levels it is similar to a programming language just like emacs is), PHP, JavaScript, assembly, basic, C, C++ etc. But coming down to it I just know lots about Java now. Of course, it is easier to get into things for larger projects, but basically you will have to stick to one PL if you really want to get fluent in it and not make (basic) mistakes.

      Currently I'm sticking to Java but I'll auto learn scripting and C because I've just decided to switch to Linux for my development PC at home. My biggest problem with many languages is that the development environment sucks. Without a good IDE, you need to know the language from the top of your head, and you spend *way* to much time on fringe problems.

    10. Re:Do both. by doom · · Score: 1

      There are more erroneous paths for neuron signals to travel down.

      Please god make the improper neuroscience references stop.

      Only if you drop the improper religious references.

    11. Re:Do both. by mattwarden · · Score: 1

      touche

  16. Sometimes you do not notice... by shutdown+-p+now · · Score: 1

    Quite often "multilanguage" creeps in quite unintentionally; for example, in the last 3 years, I've only worked on one project which didn't contain a significant amount of XSLT - which, like it or not, is a separate language, and quite complicated one at that.

    On the other hand, with .NET, it has become a pretty popular approach in Windows land to mix C++ and C# - the former for performance, and also when dealing with messy C/C++ APIs, and the later for high-level business logic and UI; though lines do get blurred sometimes. I think the reason why it is fairly common is because it is so easy to do - you can have a solution with C++ DLLs and C# projects together in it, with a few tricks you can set up dependencies, and calling C API from a DLL is very easy from C# thanks to P/Invoke (and even easier when there's a C++/CLI wrapper) - most of marshalling chores get taken care of automatically. I think this isn't quite as common with Java because JNI is, frankly, a very inconvenient API, and pretty slow as well. Python and others are better, but you still get a lot of boilerplate code in C. Then again, SWIG helps a lot (in all of the above scenarios), and for Python specifically, boost.python is great.

    Getting back to .NET, with the late additions, it seems to be going beyond C++ & C# combo now. For one thing, VB actually has some neat features over C# now, most notably language integrated XML literals and queries, so it can be used much in the same way as XQuery. This is actually convenient enough when dealing with a lot of XML that I had used separate VB projects for XML processing in an otherwise fully C# application just for that reason. Then, of course, there's F#, the newcomer that is very handy at certain tasks: text parsing - FParsec is great!; tree and graph processing; and, in general, all sorts of computations, especially parallelizable ones.

    1. Re:Sometimes you do not notice... by ljw1004 · · Score: 0

      Agreed. Here at Microsoft it's not uncommon to see a single solution containing sub-projects in two or more of F#, IronPython, C# and Visual Basic.

      What's nice is that the object model is shared by all of them: objects, fields, methods, interfaces, inheritance in any language is directly accessible from all the others.

      I use each language for its particular strengths -- F# for the rapid prototyping, parsing, maths. Python just for awesomeness. VB or C# for serious big systems. And as you say VB especially for XML literals.

      I've also switched my personal web-services from Debian/Apache/PHP or Python over to OpenSuse/Apache/Mono/VB. Call me old-fashioned, but I just found them easier to get right with strong typing.

    2. Re:Sometimes you do not notice... by Anonymous Coward · · Score: 0

      Yes, people piss on .NET/mono, and yet don't realize the threat and benefit it presents as a commercial development tool.

      Yup, if you wanted to stick to only a hammer in your toolbox, you could learn .NET/, and be sure an enterprise would have no problem hiring you, even after no one uses VB or C# anymore. Provided of course, they had a clue.

  17. Are you daft? by Anonymous Coward · · Score: 0

    If someone tells you what to do are you going to do it? Don't bother thinking for yourself.

  18. Cross platform programming and multiple languages by drolli · · Score: 4, Interesting

    Ok. Im not a CS genius, and a matter of fact i am seeing this from purely practical point of view. I am a experimental physicist, and as such i program measurement and evaluation software. I always (at least since 1999) work cross-platform, which means that all applicable parts (e.g. if i dont hav a daq driver for linux, then obvioulsy the application will have no daq) of my applications run on linux and on windows, be it just for easier testing.

    My experiences which worked turned out to be pretty much the generic one you would expect

    a) Use ANSI C (not C++) for the vectorized operations and interfacing to the system level
    b) use a cross-platform scripting language (in combination with SWIG). (tcl, python, jython)
    c) If you feel like it, use java.
    d) If you can affort it use a already existing Framework which does what you want (in my case: matlab)
    e) Refrain from anything platform specific, unless you have to use it.

    My best experiences in terms of multi-language+multi-platform where

    -tcl+C (Since i started to use tcl in 2007 i always wondered why i did not do that earlier. tcl/tk is lean, easy, fast and
    quite stable)
    -java+jython+C

  19. JVM languages by Anonymous Coward · · Score: 0

    Forget your philosophy.

    It's funny you say this, because I find things these days are much MORE amenable to choosing your desired language than ever before.

    Here's the nuts and bolts of it: Java is not the greatest language in the world, but it runs everywhere you probably need to run, has tons of well tested libraries, and people who talk about "the enterprise" all the time are comfortable with Java-based stuff. Now comes the cool part: there are great languages that run on the JVM. Like Clojure. Choose one. Actually, just choose Clojure and be done with it.

  20. Gnome by RichiP · · Score: 1

    Gnome has done a good job of adding bindings for many languages (Python, C++, perl, etc.) and to some extent, it even allows GObjects to communicate with one another (dbus). Of course, the holy grail of having all object communicate with each other while running under their respective VM (or natively) is still a ways away. I'm not even sure if that's a goal.

    1. Re:Gnome by Weedlekin · · Score: 1

      "Of course, the holy grail of having all object communicate with each other while running under their respective VM (or natively) is still a ways away. I'm not even sure if that's a goal."

      I thought that both GNOME and KDE (or more correctly, GTK+ and QT) had recently settled on D-BUS for inter-process messages on a single machine. There are D-BUS bindings for a variety of native (i.e. compiled) languages, and also for most popular interpreters and VMs, e.g. Python, Java, Mono, Ruby, Perl, etc., so it's certainly at least theoretically possible for objects in different languages and run-time environments to communicate with one another over it.

      NB: I say "theoretically possible" because the quality, maturity, and completeness of D-BUS bindings varies quite considerably, so one cannot yet assume that things which work well with some sets of bindings will work equally well (or indeed at all) with all of them.

      --
      I'm not going to change your sheets again, Mr. Hastings.
    2. Re:Gnome by TheRaven64 · · Score: 1

      Take a look at what we're doing with Etoile[1]. We have the distributed objects system inherited from NeXT via GNUstep, allowing you to transparently access objects in other programs. We have the System Services mechanism, which allows you to add global commands that work on the current selection. We have the Core Object framework that provides a shared persistent store modelled loosely on GemStone and Newton Soup. We have Script Services, which allows you to trivially wrap any stdin / stdout or file-based tool as a System Service, so you can invoke any of the standard UNIX tools via the Services menu in any application.

      Last year I committed the first version of LanguageKit, which uses LLVM to make it easy to implement new compilers (JIT and static compilers) that target the same ABI as the rest of the system. We have a Smalltalk front-end working and a JavaScript front end in progress, both of which use the same underlying object model as the rest of the system, so can be used to extend existing objects, either by subclassing or just by adding methods.

      Of course, the holy grail of having all object communicate with each other while running under their respective VM (or natively) is still a ways away

      This kind of thing depresses me. NeXT had this working in 1993. GNUstep had it working a few years later. It's been stable and working for over a decade, with objects in different processes and on different computers appearing like local ones, added and introspected at run time.

      To paraphrase Henry Spencer, those who don't understand OPENSTEP are condemned to reinvent it, poorly.

      [1] Accents omitted because Slashcode is still stuck in the '90s.

      --
      I am TheRaven on Soylent News
    3. Re:Gnome by doom · · Score: 1

      Accents omitted because Slashcode is still stuck in the '90s.

      A brief HTML lesson: If you type "&eacute;" you will see: é

    4. Re:Gnome by Hognoxious · · Score: 1

      Some work, some don't. It's less frustration not to bother.

      (I tried pasting the list in from here, just to see which do and which don't, but apparently it contains too many junk characters...)

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  21. OpenVMS by Nutria · · Score: 1

    It was designed to let modules written in many languages all link together in one application, so each piece can be written in the language that most suits the problem. To facilitate that goal, all language compilers create a common .OBJ format.

    http://h30266.www3.hp.com/odl/vax/opsys/vmsos73/vmsos73/5973/5973pro.html

    --
    "I don't know, therefore Aliens" Wafflebox1
  22. I don't know about you... by zullnero · · Score: 1

    But no matter what platform I'm developing on, one language just isn't enough. With every project, there's lots of little one off scripts you write to perform various maintenance or deployment or testing tasks. Maybe I do too much, I don't know, but I've been doing this for about 10 years now, and I can't think of one project that used only one language, and no complete system that didn't integrate some other platform/SDK in somehow.

  23. stay with the Unix philosophy by martin-boundary · · Score: 2, Insightful
    The kitchen sink approach to programming an application is an unstable approach, and usually a symptom of bad or no design. Sooner or later, large monolithic programs end up splitting into a set of libraries or "drivers" and some simple logic, possibly a scripting language designed to build mini-apps on top of a "platform" etc. That's reinventing the unix approach again, in all but name, badly. If you stay with the unix philosophy, at least you'll have a small competitive advantage over time as well as a more flexible mindset to recognize solutions to problems which arise with kitchen sink programs.

    I'm not sure why you say that there are no multi-language environments. Emacs is a great example of such an environment (and not the only one). There are modes which let you program in just about any language in separate buffers, all at the same time.

    The only valid argument I can think of for choosing a single language and sticking with it for everything is that your collaborators may only know how to program in the one language. The big danger for you in that case is obsolescence in a few years, when the world decides that your language is no longer desirable.

  24. Yep by Sycraft-fu · · Score: 5, Insightful

    Becomes a real problem if the multi-language thing is more or less "You use what you like." So you get one dev who likes some obscure language and uses it for his little part. Everything works well so nobody cares. Then he leaves for a different job some day. Time comes around to update his part... and nobody has any idea how to. None of the other staff are skilled in that language. Now you are in for a world of hurt while that gets sorted out.

    Multiple languages for their own sake isn't a good idea. Any time you choose a programming language for a project, there should be a reason. That includes the initial language, but certainly applies to any other languages also used. For example suppose you have a web package that's written in Perl. You chose it because your package deals with a lot of text processing and Perl does that well, and also because your target platform supports Perl. Ok, good choice. There are other legit choices, but that's a fine choice. Now you have a client app that goes with it. Perl doesn't work well for that, so you choose C#. You choose that because the client app needs only to run on Windows, isn't speed critical, and needs to be easy to develop a GUI for. Also a good choice.

    However you then decide to add a new feature to your server side of the program. You chose Ruby because it is new and seems neat. Bad choice. The server portion is already written in Perl, why add a new language? The "Because it's neat," is a horrible reason. Will Perl not do the job? Then why add more complexity.

    Just sticking in new languages at semi-random on a project will do nothing but make it much harder. If there's a real compelling reason to have multiple languages, ok then great. That certainly does happen. However just saying "Let's use more languages for fun," is just setting yourself up for hard times.

    1. Re:Yep by Vahokif · · Score: 0

      >You choose that because the client app needs only to run on Windows .NET for Mac and Mono would like to have a word with you.

    2. Re:Yep by Anonymous Coward · · Score: 0

      You missed the "and needs to be easy to develop a GUI for", if you want C#-Gui to run on Windows .Net (not Mono!), Linux and Mac developing there is no longer anything easy about it.

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

      I agree, for the most part, but I assure you that Perl is quite capable of GUI work. Perl/Tk has been around for a long time, and just like Perl itself, it's supported on multiple platforms. There are lots of other GUI modules as well, including bindings for Gtk, Qt, and even native Win32 itself (Win32::GUI). And since I already know Perl quite well, and don't know any C#, my inclination would be to stick with the known and focus my energy on the application itself rather than diverting my energy to learn a brand new new language and environment (which also entails making a lot of mistakes along the way).

    4. Re:Yep by Anonymous Coward · · Score: 0

      He also missed "and needs to not totally suck".

  25. So you want to learn object oriented now? by Antique+Geekmeister · · Score: 4, Funny

    That sounds like an unfortunate step into another layer of short-lived languages. Learn how to actually program: learn C.

    1. Re:So you want to learn object oriented now? by D+Ninja · · Score: 1

      That sounds like an unfortunate step into another layer of short-lived languages. Learn how to actually program: learn C.

      Are you being sarcastic or something? In case you aren't, OO is here to stay (and has been for quite some time). It is an extremely powerful paradigm and I think it would be good for the author to take time to learn it.

      C is fine for a lot of things (and the best tool for jobs such as embedded systems). That doesn't make OO "short-lived" or obsolete or anything along those lines.

    2. Re:So you want to learn object oriented now? by RightSaidFred99 · · Score: 1

      Yeah, those OO languages are just flashes in the pan. Those, and "algorithms". Flashes in the pan. Also, "the web" - another flash in the pan.

    3. Re:So you want to learn object oriented now? by smallfries · · Score: 2, Informative

      I would read it as sarcasm. Try reading this manifesto and updating Fortran to C to account for 20 years of shift in the industry. Anyone not using C is just eating Quiche.

      Although his joke went over your head, it is worth pointing out that OO is not a paradigm. I know wikipedia thinks that it is, and so do a hoard of practically illiterate researchers publishing crap papers in junk conferences. But that doesn't make it true. Object Orientation is just a method of organisation for procedural languages. Although it helps code maintenance and does a better job of unit management that modules alone, it doesn't change the underlying computational paradigm. I say procedural languages because class-based programming in functional languages is actually a different type of beast although it gets called OO to appeal to people from an imperative background.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    4. Re:So you want to learn object oriented now? by mechsoph · · Score: 1

      Object Orientation is just a method of organisation for procedural languages.

      Do you realize that closures and OOP objects are semantically identical? Both are a function(s) and associated state. The only differences are syntactic (ignoring the unforgivable lack of GC in some languages claiming to be object oriented)

    5. Re:So you want to learn object oriented now? by smallfries · · Score: 1

      Not only do I not realise it I would argue strongly that it is wrong :) You are correct that both closures and objects contain a state and a function(s). But the object allows direct manipulation of the state by the external world, while the closure does not. Hence the set of operations that can be performed on the object is open (as the whole purpose is to allow functional extension), while on the closure the set is closed. Hence the semantics may look superficially similar, but there is a deep difference between them.

      I'd be interested to know if that was your opinion, or if you've picked it up somewhere from the literature. Arguing about semantics always comes down to the details and it would be interesting to know what model of closures / objects gives rise to an equivalence.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    6. Re:So you want to learn object oriented now? by Antique+Geekmeister · · Score: 1

      Please read again. I didn't say 'OO' is short-lived. Neither is the tendency for people to bu EXCITING! NEW! SELF-HELP BOOKS! And spend lots of money on such seminars. But the individual approaches do not seem as functionally stable as I like for a long career. C has turned out to be extremely stable.

    7. Re:So you want to learn object oriented now? by TheRaven64 · · Score: 1

      But the object allows direct manipulation of the state by the external world, while the closure does not

      I don't know where you get this idea from. The classical definition of an object is a simple model of a computer that communicates via message passing. It does not directly expose its state at all, except in response to messages. Some languages allow direct manipulation of the object's state, but this is an optimization. Some languages also allow direct manipulation of the state of a closure (e.g. some Smalltalks allow explicit re-binding of variables in closures).

      --
      I am TheRaven on Soylent News
    8. Re:So you want to learn object oriented now? by the+donner+party · · Score: 1

      In "Structure and Interpretation of Computer Programs", an extensive first-year programming textbook by Abelson and Sussman, everything is introduced in terms of Scheme and for the most part they use only the functional subset of Scheme. In particular, they show how to implement objects as closures. But IIRC they did use setq to modify state variables.

    9. Re:So you want to learn object oriented now? by chthonicdaemon · · Score: 1

      Know it, don't like it, doesn't do the things I want to do (data processing and matrix/vector math) all that well or as quickly as a combination of scripting for the text stuff and Fortran for the numerics. Perhaps with some Python for higher-level stuff. Perhaps with Java for cross-platform GUI. I know plenty of "All C, all the time" guys and they seem content. They also spend a lot of time coding around C. The existence of other languages that were developed after C basically proves that C is not the last word.

      --
      Languages aren't inherently fast -- implementations are efficient
    10. Re:So you want to learn object oriented now? by windsurfer619 · · Score: 1
    11. Re:So you want to learn object oriented now? by coryking · · Score: 1

      Maybe they are flashes in the pan...

      - OO doesn't map to relational databases very well, and I'd say relational theory will be around a whole hell of a lot longer then any programming methodology. Really a "loose", dynamic-typed language with strong support for hashes are the best for database stuff (Perl's hashrefs, PHP's array/hash things, etc). I've always strong-typed languages like C# lead to massive amounts of code to build even simple queries--good database coding involves SQL that returns only exactly the stuff you need (SELECT username, uid vs. SELECT *). The problem with languages like C# and Java are that you have to map every specific query to a bunch of structs, objects or whatever. The whole system strongly discourages dumping the mess into a hashtable and calling it a day--when you do, you loose out on intellesense and other niceness.

      - OO doesn't always play nice with threads and parallel programming. The "future" of computing will be massively parallel computers the size of your iPhone. You can see hints of this trend already with quad-core cpu's becoming the norm for consumer desktops and GPU's being exploited for things besides 139.1fps WoW games. This could be simply that our languages haven't made this kind of programming very intuitive. It could also be that parallel programming is just a hard thing all together, though I suspect it is just the languages we use suck at it.

      - Many modern languages and their libraries are offering non-oo ways of doing things. Look at jQuery and the state of javascript. Sure you can do OO in JavaScript, but why would you want to--it just isn't a good fit for the language*.

      - That said, OO languages, especially those with strong typing, are easy for good IDE's to figure out. Even though VS2008 can kinda-sorta figure out Javascript, it isn't perfect and it is very easy to trip up the IDE to the point where it can't describe what you are creating.

      The future, I predict will be a happy blend of OO and functional, dynamic- and strong-typed. OO for the "core", functional for the expressiveness, dynamic for the relational database stuff and strong for the non DB stuff.

      I also predict a return to line numbered code. BASIC is hot these days.

      * Though your client-side javascript doesn't have to scale to hundreds of files and tens of thousands of lines of code. In other words, it doesn't have to scale to a large codebase. Thus it isn't the best example.

    12. Re:So you want to learn object oriented now? by Anonymous Coward · · Score: 0

      You can wrap OO into functional C++ but no one will understand what you did and you might as well write your own language.

    13. Re:So you want to learn object oriented now? by kbrasee · · Score: 1

      I also predict a return to line numbered code. BASIC is hot these days.

      Line numbering is what I miss most about BASIC...

    14. Re:So you want to learn object oriented now? by smallfries · · Score: 1

      I get this idea from the way that OOP is implemented in the mainstream languages (Java, C++, Python...). What you are describing is familiar to me, although not under the label OOP. I've seen it in process oriented languages like Occam. After a wee bit of background research I see that OOP as you're describing it, and Smalltalk implemented it, is quite a different beast to what I'm used to. It's a shame Smalltalk wasn't invented a decade later :)

      As for my original point about OO not being a separate paradigm as the OP mentioned; it's less obvious now. "Pure" OOP (as the Smalltalk page called it) does seem to be quite a different beast, although it is unclear to what extent the evaluation would be different to functional programming.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    15. Re:So you want to learn object oriented now? by ais523 · · Score: 1

      Some languages also allow direct manipulation of the state of a closure (e.g. some Smalltalks allow explicit re-binding of variables in closures).

      Well, yes, but Smalltalk allows anything no matter how ridiculous or paradigm-breaking it is. Try running "true become: false" some time, and watch your Smalltalk interpreter blow up. (Yes, some versions of Smalltalk accept that.) So saying that Smalltalk accepts something doesn't mean that the paradigm, in general, accepts it.

      --
      (1)DOCOMEFROM!2~.2'~#1WHILE:1<-"'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1"
    16. Re:So you want to learn object oriented now? by RightSaidFred99 · · Score: 1

      Yeah... The main problem is most of that is false. OO maps to relational databases quite well (see: LINQ, ADO Entities, Hibernate/NHibernate, and the dozens of other tools for doing this). OO is fine at parallel tasks, as well. It also doesn't have to be all or nothing - you can use OO analysis and design, and languages suited to implementing OO designs and then use functional tools where it fits.

    17. Re:So you want to learn object oriented now? by Anonymous Coward · · Score: 0

      You might want to review your Springer & Friedman chapters 12 & 13...

      Chapter 12 builds a substantial OO system in R3RS-compliant scheme, and ch 13 builds a toy simulation system in this OO style.

      Abelson & Sussman do something similar in their dialect, and Manis & Little do something similar for more than a toy simulation, using R4RS.

      There's also things like SCOOPS and Meroon, of course...

      Rees has an early '89 overview here:

      http://mumble.net/~jar/pubs/oopis.ps

      His first example on page 2 uses closures over state held in lexically-scoped variables. State is imported and exported from "lexical prison" through setter and getter messages, although it can be mutated in place.

      FWIW, a proof of GP's assertion that closures over local state are semantically identical to objects was one of the things explicitly striven for in the formal operational semantics of the Scheme programming language (see R6RS.org for details).

      But the object allows direct manipulation of the state by the external world, while the closure does not.

      "Allows" is an important concept; OO systems usually require the use of methods (or messages) in order to set, get or mutate the state of the object. Inheritance means you don't have to specify every single possible method or message for any given class or instance of object. There is nothing different in OO systems built with closures -- access to the internal state is regulated by a method/message interface -- except that they are usually used in a much more functional than procedural way.

    18. Re:So you want to learn object oriented now? by Anonymous Coward · · Score: 0

      Although his joke went over your head, it is worth pointing out that OO is not a paradigm.

      Under which paradigm would you place SmallTalk then?

    19. Re:So you want to learn object oriented now? by smallfries · · Score: 0, Redundant

      As I pointed out earlier in the thread, it's not a language that I'm familiar with. After a quick look at the samples on smalltalk.org it looks like an Imperative language.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    20. Re:So you want to learn object oriented now? by smallfries · · Score: 1

      As you are the third reply to make the same point (although in more detail than the previous two) let me make myself clear.

      OOP is not a well defined concept. The parts that are well defined - that a system should be constructed from smaller units called objects which combine data and code - are shared across all of the languages that claim to support OOP. One basic difference between possible implementations of OOP is the decision for whether or not object boundaries should be strict, or loose.

      It is possible to define OOP in such a way that there are hard lexical boundaries around each object, and access is only possible using get/set methods. If the choice to define OOP in this way is made, then it can be shown that the result object is equivalent to a closure. It can also be shown that it is equivalent to a process, as the restriction on state management via explicit set/gets is a form of MPI.

      The fact that we can derive a clean and elegant formulation of OOP that has these nice properties does not mean that OOP is general has these nice properties. In particular none of the mainstream language with OOP support use this strict lexical scoping over objects, and as a result the objects in most OOP systems are not equivalent to closures, or to processes, or to anything well-defined enough to be useful.

      That is the distinction that I was making somewhat loosely on the earlier poster who came out with the bold claim that objects (no context given) were equivalent to closures. This claim can only be made in such general terms from somebody so deeply sucked in Scheme that they have forgotten it is not the whole world. And of course I stand by my original claim to the OP that OOP is not a paradigm, although I will now modify that slightly to make explicit the trivial consequence that (like imperative programming in general) with suitable restrictions it can be equivalent to other well-known paradigms.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    21. Re:So you want to learn object oriented now? by Keynan · · Score: 1

      That sounds like an unfortunate step into another layer of short-lived languages. Learn how to actually program: learn COBOL.

  26. You should be able to do both by moocat2 · · Score: 1

    Being able to create a single large product with a single programming language is a great skill, but so is being able to do Unix shell scripting.

    The system/product I have been working on for the last 10 years is two major pieces that is about 90% of the total code base and lots of small pieces. The two major pieces are both essentially a single program that can be developed in unified environment. But we also have lots of small pieces that are shell scripts that are done in the classical Unix spirit.

    Being able to work in both ways is a great strength for the engineers who can do that. Those who can only do one or the other are essentially marginalized as that limits what they are able to do.

  27. Shell scripting + Python works for me by lbates_35476 · · Score: 4, Interesting

    I've been programming for going on 35 years and have tried a BUNCH of different languages and approaches. I'm glad I've finally settled on writing virtually 100% of my code in Python (using C only when performance is an absolute must). That plus some shell scripts seems to work for almost any project that I've come across in the last 5 years. Python brings lots of tools, good support system, etc. and I'm finding that concentrating on a single language means I'm deepening my understanding with every program I write and adding to a robust personal library of reusable functions and classes that make writing bulletproof code a pleasure. I can be VERY productive because of the high level nature of the code. It is almost like writing pseudo-code once you get a good understanding. I write for Windows and Linux (not much on the Mac). I've written Windows Services, COM objects, GUI programs (with wxWindows), as well as normal batch programs and scripts. On Linux I've written daemons, GUI programs, and background batch processing scripts. What is great is that I only need the one language. I have just never felt at home in the GUI IDE world that seems so popular with some.

    1. Re:Shell scripting + Python works for me by Anonymous Coward · · Score: 0

      For those that are comfortable in the GUI IDE world, I highly recommend using Eclipse with the PyDev plugin. I've been using it with great results for more than three years.

    2. Re:Shell scripting + Python works for me by owlstead · · Score: 1

      "I have just never felt at home in the GUI IDE world that seems so popular with some."

      The IDE world has moved on quite a bit. Nowadays it is not just code highlighting anymore. You get parsing editors (no more syntax errors), exploring of runtime libraries and API's, automated documentation, graphical debuggers, integrated team management, generation of UML (the right way around:), automated formatting, searching, refactoring. Um, I probably forgot about half of the features you get nowadays. For larger applications with multiple developers, choosing a standard IDE is more or less a must. I believe Eclipse has good support for python nowadays, maybe you should check it out.

  28. Can someone mod this link spammer down? by Anonymous Coward · · Score: 0

    Can someone mod this idiot with all his double links down? Such behaviour shouldn't be encouraged, it reads like a bad Wikipedia article.

  29. Don't do it, but support it. by SanityInAnarchy · · Score: 2, Interesting

    Your "Unix Way" is a wheel that's being reinvented as SOA, etc.

    Here's the thing: It is possible for one language to be good enough for nearly everything, especially if you pick one with good support for internal DSLs (I like Ruby). Also, while message-passing is a good idea, it's usually slow, and you probably don't want to be designing your own text-based format every time.

    Now, you're still going to have DSLs and whole other languages forced on you, occasionally. For example, JavaScript is still the best language for AJAX clients, simply because no one has written a better language that compiles to JavaScript. (That's relative, of course -- if you like Java, then Google Web Toolkit will be perfect.) In fact, with web development, you'll want JavaScript, HTML, CSS, and probably another language (Ruby, Perl, Python, PHP, etc), and SQL, all in the same application.

    But, each additional language is that much more for a newcomer to learn, and it's that much more glue. If you communicate with text, how much time are you spending writing text parsers instead of your app?

    Of course, ideally, you provide a language-agnostic API, because you may need this application to interact with others. You might even find yourself writing multiple applications...

    But the other big win of a huge application is the UI. The Unix commandline has made mashups of many small programs as easy as a pipe character. There's really no equivalent for the GUI -- users will relate better to one big monolith, even if it's just a frontend for a bunch of small tools.

    So, I would split application by the UI concept, and share the small, common utilities via shared libraries. That's not far off from the Unix Way, either -- it's not hard to write a small commandline app with a shared library, if you find you need it. It can be annoyingly difficult to go the other way -- for example, Git bindings aren't as easy as they should be.

    --
    Don't thank God, thank a doctor!
    1. Re:Don't do it, but support it. by johannesg · · Score: 1

      There's really no equivalent for the GUI -- users will relate better to one big monolith, even if it's just a frontend for a bunch of small tools.

      If there is one thing I positively hate, it's that.

      The reason why is simple: those TCL/TK-and-then-call-a-commandline-tool apps never, never, never deal with error conditions correctly. In other words, it works while everything is fine and dandy - and then when the shit hits the fan, as it invariably does, you must still go out and delve into the commandline. And by definition that happens at a time when you have other problems to deal with.

      So just Don't Do It, Ok?

    2. Re:Don't do it, but support it. by SanityInAnarchy · · Score: 1

      The reason why is simple: those TCL/TK-and-then-call-a-commandline-tool apps never, never, never deal with error conditions correctly. In other words,

      In other words, they're no worse than a GUI app with a library which doesn't check for error conditions either. In any case, it's not the methodology you hate, it's the implementation.

      when the shit hits the fan, as it invariably does, you must still go out and delve into the commandline.

      All things considered, that is better than having to delve into an API.

      So just Don't Do It, Ok?

      If that's referring to my subject, I wasn't indicating this as the only way to tie things together -- at least, not intentionally. An obvious example is Erlang -- it tends to avoid allowing anything to link directly into a running Erlang VM, and rather exposes a C library that allows other languages to send messages to a running Erlang program. Thus, you could build a bunch of small tools which communicate with each other over local Erlang sockets...

      But, consider that Erlang is actively implemented in telephone switches which are not allowed to have downtime, even for upgrades. It is doubtful the Erlang community isn't going to handle errors correctly.

      Ultimately, I suppose they could screw it up, just as I could ignore the exit code for a commandline app. In each case, it's programmer error -- I don't really see anything to make the environment inherently fragile.

      --
      Don't thank God, thank a doctor!
  30. Babel project by memoryhole · · Score: 2, Interesting

    Seriously, they're trying to make multilanguage projects possible (if not easy). Ever want a Java object to inherit from both a Python object and a C++ object? Then Babel is your tool. https://computation.llnl.gov/casc/components/babel.html

  31. to unlearn by Anonymous Coward · · Score: 0

    Has anyone here ever "unlearned" anything? I have, for sure, forgotten plenty ... but never something that I've gone so far as to have "learned" in a philosophical sort of sense. I say to devour java/c++/ruby/whatever and put everything that you've learned up until this second into it. Commands are objects, pipes are interfaces. Reuse. Recycle.

  32. And where did you learn this "philosophy"??? by Jane+Q.+Public · · Score: 2, Insightful

    You started using Linux 10 years ago... yet the "monolithic program in one language" was in fact the de facto computing standard for most large programs, from the very beginning... clear back to when Grace Murray Hopper was inventing the first thing that even remotely resembled a modern high-level language.

    Nothing has changed in that respect. Sure, you have more options and there is more interoperability today... and it is indeed a "philosophy" to allow such flexibility. But if you think that a hodge-podge of various scripts and languages (which is what you appear to be saying) for large projects was ever any kind of "computing standard", then you got a VERY wrong impression somewhere.

    I would like to know about this "philosophy", because I have never encountered it before.

    1. Re:And where did you learn this "philosophy"??? by TheRaven64 · · Score: 1

      Read any of the early UNIX publications - you're about two decades too late with Linux - and you'll see that `small tools doing one thing and doing it well' is the idea that is strongly proposed. This was, and still is, a very good way of designing software. The problem that UNIX quickly encountered is that untyped bytes sent over one input and two output streams does not provide enough flexibility for anything other than text processing. If you want to use richer data formats then both ends have to have some hard-coded support for them, and you lose a lot of the advantage of the separate tools. To see this implemented well in a modern system, take a look at the System Services mechanism on OS X and GNUstep (both inherit it from OPENSTEP). This uses the pasteboard mechanism - which supports rich data in multiple types - to allow external tools to manipulate the current selection in the active application.

      --
      I am TheRaven on Soylent News
    2. Re:And where did you learn this "philosophy"??? by chthonicdaemon · · Score: 2, Informative

      It is the Unix philosophy, as expressed in many places like The art of Unix programming or here (first paragraph, "small, sharp tools") or the Pragmatic Programmers (under Occam's razor).

      --
      Languages aren't inherently fast -- implementations are efficient
    3. Re:And where did you learn this "philosophy"??? by Jane+Q.+Public · · Score: 1

      We are, to a pretty big degree, talking about two different things.

      You are referring to largely single-purpose tools that do one thing and do that thing well. Which is my general philosophy also, as a computer user and programmer. But the topic of discussion was not programming, it was programs. Unix or no, few customers want a large-scale program that is nothing but a mashup of scripts in different languages and/or shells. There is a very big difference. What they want is, indeed, a "monolithic" tool that does THEIR thing, and does it well.

      Good luck selling programs to big customers that consist of a hodgepodge of scripts in multiple different languages. At the very least, your customers will look at you funny.

    4. Re:And where did you learn this "philosophy"??? by Anonymous Coward · · Score: 0

      i've heard of it before.
      ie use a shell script with
      cut and sort instead of
      writing a c program to do the same.
      the number of unix "do one thing well"
      commands is huge.

    5. Re:And where did you learn this "philosophy"??? by chthonicdaemon · · Score: 1

      Of course you're going to sell a single GUI program to the market these days, but I was talking about programming to get stuff done. But that seems to be a big theme I missed -- the idea of someone programming to get their job done instead of paying money for someone else to write a GUI to do their job is fading. So much so that even the people wanting to program for themselves are better off using the tools that the other programmers use because there's more support for that approach.

      --
      Languages aren't inherently fast -- implementations are efficient
    6. Re:And where did you learn this "philosophy"??? by Hognoxious · · Score: 1

      If it looks and feels like one monolithic application that will be enough. 99% of users won't understand what a "mashup of scripts in different languages and/or shells" is.

      As for selling to big customers, I find your naïvité disturbing. If it's cheap and/or you take the PHB out playing golf you'll make enough sales to keep in business.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  33. Through stranger eons... by Anonymous Coward · · Score: 0

    Go with what you know and if there is an interest in other languages and techniques, then move on to that, because even if a language or technique falls out of favor, it will come back to haunt us. Remember Cobol? It's the Cthulhu of languages IMHO.

  34. Bzzzt by Anonymous Coward · · Score: 1, Informative

    HTML, while not compiled, is not a scripting language.

    1. Re:Bzzzt by pem · · Score: 0, Flamebait

      Did you replace the batteries in your smoke detector and in your sarcasm-ometer last fall?

  35. What are these mythical one-language projects? by Len · · Score: 1

    I've worked on many projects in recent years have that have used multiple languages. E.g. SQL, Java, JSP, HTML & Javascript; or SQL, C++ & Visual Basic. IDEs support multiple languages in one project, and people do take advantage of that.

    The work I've been doing is more component-oriented than tool-oriented, but it still comes down to using the right tool for every job.

  36. Stick With What You Enjoy by Anonymous Coward · · Score: 0

    I have coded in nothing but assembly language and C for the past 25 years. I still enjoy programming day and night, I still feel challenge and satisfaction, and I have neither financial nor technical reasons to stop wielding the tools that I am most familiar with in favor of something that I would feel suboptimal with. If you enjoy building things using the Tao of Unix method, then stick with it.

  37. Are you a programmer or not? by Weaselmancer · · Score: 3, Insightful

    Learn new things.

    The more stuff in your toolbox, the faster you can solve problems. Yes, I know you can solve a lot of the problems you face with the tools you have. It's true you can solve any realistic problem in any Turing complete language. But would you really want to write a pinball simulation in Cobol?

    Learn more languages, and you'll develop a feel for when they're appropriate. I've been known to spend a day looking at different languages before starting a project. It saves time later on.

    --
    Weaselmancer
    rediculous.
    1. Re:Are you a programmer or not? by chthonicdaemon · · Score: 1

      I know many languages and their strengths -- the question wasn't about not knowing any language, but not wanting to use just one on a given project.

      --
      Languages aren't inherently fast -- implementations are efficient
    2. Re:Are you a programmer or not? by kbrasee · · Score: 1

      I would not want to write "Hello World" in COBOL. After seeing people on a z/OS mainframe use COBOL and assembly to send XML messages... no thanks. Never.

  38. Using one language by Kingrames · · Score: 2, Insightful

    Using only one language is like only using one tool. sure, you can use your screwdriver as a hammer but that's what you have a hammer for.

    --
    If you can read this, I forgot to post anonymously.
  39. Brittle glue code by cerberusss · · Score: 4, Insightful

    In my experience, using multiple languages in a project will force you to write sizeable amounts of glue code. These processes will have to communicate one way or another and they all have their particular way to do so. So, your glue code is often not that simple but deals with interprocess communication for which a protocol will have to be devised (could be simple, but nevertheless).

    Now if that was all, then so be it: write glue code. However, I found most programmers do not heavily check for errors in their normal code, where you have things like exceptions and return values at your disposal.

    This becomes much worse when doing interprocess communication. The normal language constructs aren't there, you're communicating using a self-defined protocol. Often this is invented on the spot and does not include a proper way to catch errors and deal correctly with them.

    So in my opinion: don't shy away from using multiple languages, but remember that you need a decent amount of time for what could be quite complicated glue code.

    --
    8 of 13 people found this answer helpful. Did you?
    1. Re:Brittle glue code by SanityInAnarchy · · Score: 1

      Your subject actually seems very insightful...

      Consider that any protocol you use will have to have an implementation in every language you're using, otherwise there's no point. That means that to tweak the protocol, you need to tweak the same code in each language, unless you use a shared library -- say, a C library that each language now has bindings to. But if you do that, you still have some of the same problem (maintaining the bindings), and a lot less of the point -- why have a protocol at all, instead of just a common API?

      For that reason, I'd avoid inventing your own protocol from scratch, unless you have the hubris to think there's something wrong with all the existing ones, and that you'll do better. (I know I do, but for now, I can't really find too much wrong with HTTP and things like JSON or YAML for most purposes.) Stick to things that have common libraries, making them easy to interface with from any language. And try to stick to things that are simple enough that you could write your own library... not that you want to.

      --
      Don't thank God, thank a doctor!
    2. Re:Brittle glue code by TheRaven64 · · Score: 1

      Only if your languages don't share a common ABI. This is the problem I've recently been working on. The Smalltalk compiler that I wrote for Etoile outputs object code that uses the same ABI as GCC and clang/LLVM do for Objective-C. Using C or C++ from Objective-C doesn't require any glue, you just call the functions directly. You can then subclass the Objective-C objects in Smalltalk and write code in a high-level language. Someone is currently working on a JavaScript front end, which will allow you to do the same thing with a dialect of JavaScript. There's no glue code, a method call in JavaScript compiles down to the same binary code as a message send in Objective-C.

      This becomes much worse when doing interprocess communication. The normal language constructs aren't there, you're communicating using a self-defined protocol

      Unless you use a decent IPC mechanism. The Distributed Objects system we get from GNUstep gives you a proxy object that behaves exactly like the remote object. You get exactly the same behaviour if the object is local as if it's remote, aside from the latency differences. Communicating between objects in different threads in the same process, different processes on the same machine, or different computers can all use the same mechanism.

      --
      I am TheRaven on Soylent News
    3. Re:Brittle glue code by burris · · Score: 1

      This used to be true but it's not nearly so much any more. Every language in use these days has standard RPC ready to go such as XMLRPC, JSONRPC, SOAP, etc... There is also now stuff like Thrift, which is available for a dozen languages that are in common use. Thrift, being much more than just a protocol, has client and server implementations for all target platforms with a consistent API.

      On the back end, multi language is here to stay and the way to go unless you like rewriting stuff just so you can have it in your pet language (this brain damage seems most common in the Java world.)

    4. Re:Brittle glue code by cerberusss · · Score: 1

      I hadn't heard from Thrift before, great tip, thanks.

      --
      8 of 13 people found this answer helpful. Did you?
    5. Re:Brittle glue code by sourICE · · Score: 1

      I believe that your point was very well made~

  40. .net by McBeer · · Score: 1

    Learn .net and you can mix and match between c++, c#, vb(dunno why you would want to), F# etc. It really gives you more options then anything else I know of.

    --
    Hikery.net - The best hiking site ever. Made by yours truly.
    1. Re:.net by gbjbaanb · · Score: 1

      c#, vb(dunno why you would want to)

      because C# and VB are practically the same thing, except VB has more powerful features (condition catch clauses are my favourite, but look at language integrated xml) plus is easier to use as it tries to be more helpful. Everyone using C# does so because it looks cool, not because of any real reason. That's why. You should try VB sometime and see for yourself.

    2. Re:.net by chthonicdaemon · · Score: 1

      So, either you think that Mono is great or that I should not only learn .net, but also learn Windows development even though I am quite happy in linux?

      --
      Languages aren't inherently fast -- implementations are efficient
  41. Is there a contradiction... by PaulBu · · Score: 1

    ... between what you were saying and your /. .signature??? ;-)

    As to the distinction between "the lowly developer" and "the wise Architects", I would say, look at the developer, and if he is any good, poor money into his own company!

    Paul B.

    1. Re:Is there a contradiction... by TapeCutter · · Score: 1

      I don't see any mention of "wise architects" or "lowly developers" in my post and I'm sorry you interpret it that way, but since you asked...

      The point of my sig is that we all live in ideological, intellectual, and emotional cages of one kind or another, recgonition of that allows one to cautiously venture outside their cage and draw insight from other peoples POV. In the case of software development I have spent the last 20yrs in the developers cage flinging the occasional turd at architects, testers, sysadmins, users and people with bow ties. When I venture outside my developers cage all these people (except those with bow-ties), offer ideas and experience that I can use in my own cage. In other words I interpret the 'war' as a the war of ideas.

      I believe but cannot prove the song itself is about marriage/relationships, my own 20yr marriage ended in bitterness over a decade ago when it was fashionable for women to leave hubby and kids in order to "find themselves". The "wish you were here" part is a lament for something long gone, ie: two people who enter a long term relationship are never the same people when it ends.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    2. Re:Is there a contradiction... by PaulBu · · Score: 1

      Well, sorry if I made any too far-reaching conclusions from your post -- and no, I've never had a job with "developer", "coder" or "architect" in its title (while considering myself a computer scientist and physicist and/or engineer).

      I was just reacting a bit to the implicit (I thought!) distinction in your post between developers and those who see the whole system (for the lack of better term, I called them the architects) -- as you might (or might not) agree, in computer programming this distinction is a pretty recent phenomenon. It used to be (not that long ago) that a developer would see something that he does over and over again and was totally justified to architect an abstraction around it. (e.g.: yacc/lex, lisp macros, network protocols...) in short, all cool well thought through libraries and abstractions that 70s and 80s gave us.

      Now, I am not surprised that your average Java jockey or outsourced programmer on the other side of the globe needs to have way more discipline and supervision, but do you think this is because it has to be this way, or because we just failed to automate what he is doing and replace him with just another program? From personal standpoint, I could understand how bad he would feel (especially after being promised a lifelong gainful employment in the field of "computers" by his community college recruiters); from aestetical and philosophical standpoint, if it can be done by a machine, it should be, and humans should use their intellect for better things.

      As to the song -- sure I know it, and, at least in my time learning about it in Soviet Russia ;) the accepted interpretation was that the whole album was about Sid Barrett (and Wikipedia agrees with me here: http://en.wikipedia.org/wiki/Syd_Barrett ).

      Cheers,

      Paul B.

    3. Re:Is there a contradiction... by Anonymous Coward · · Score: 0

      Well, sorry if I made any too far-reaching conclusions from your post -- and no, I've never had a job with "developer", "coder" or "architect"

      Then you don't know what you're talking about, so STFU.

  42. The Unix Way was never good at everything by AdamInParadise · · Score: 3, Insightful

    The Unix Way is a perfectly valid method to develop administrative, text-based tasks targeting a single, well-known platform, but does not scale well toward the development of other types of applications.

    First, compared to modern languages like Python or Java, shell scripting sucks. The syntax is awkward and it can only manipulate bits of text. The world has moved on from text. Today, I want to be able to process complex structures, which in many cases cannot be converted to a simple text format.

    Second, modern languages have huge libraries, so usually there is no need to use anything but those libraries. Furthermore, using those libraries reduced compatibilities issues. When I develop for the Java 6 platform, I know the code is going to work on every single platform with support for Java 6: Windows, Linux, Solaris, you name it. With the Unix Way, you have to make sure that every single function of every single tool you use is going to behave in the same way on every single platform. This is of course a huge pain in the ass.

    But there is no need to fret. You quote Python: from my point of view, it is one of the platforms that can be used exclusively, so your experience is perfectly valuable. Regexp are pretty much the same everywhere.

    But I do not really understand your problem. If you're developing applications, you should know all that already. If your software development experience is limited to administering systems, shell scripting is always going to work for you. I guess that in this last case, you may want to try to pick a singe platform (say, Python) for all your dev needs and see how it goes.

    --
    Nobox: Only simple products.
  43. Yes, .NET may actually be the best bet by benjymouse · · Score: 3, Insightful

    What good are multiple languages if all inter-language integration have to be funneled through some narrow C-like basic model?

    The problem is not with the languages but rather with the platform on which they are based. As long as the common denominator is C memory blocks or opaque text-serialized objects, integration is always going to be a pain.

    Sometimes language pairs are supported by an asymmetric relationship (one of the languages often being C). Using objects/features from one language is usually easier in one direction than in the other. Often there are severe restrictions on the layout of objects/functions. Examples of this is how PHP can use some C based functions/objects, provided they adhere to the "PHP way" of laying out objects. Using PHP functions from C is considerably more involved and certainly does not qualify as minimalistic.

    The problem is that these bindings are often just pairs, excluding other languages from richer integration. Sure, you can integrate other languages with C as well, but rarely will the object layout of one language align with the layout of another language. This makes multi-language integration a pain. Going (down) to C level loses a lot of meta information and complicates going up the abstraction chain to another language. Essentially this is a hub-and-spoke problem with the hub being too weak. Another example is Java/JavaFX. It's quite easy to use existing Java classes from JavaFX, but going in the other direction requires a number of ceremonies. And this is still just a pair. Even though the Java platform has been used to implement a rich set of languages, the basic problem is still there: The "hub" (Java) is too weak to describe objects/functions on a the level which would let you pass objects from Jython to JRuby to Groovy to JavaFX to Scala. Java's generics are incompatible with the generics used in Scala. Java (and also the VM) does not support unsigned integers.

    Java was always designed to be an abstraction over the underlying platform not to integrate with it. This philosophical difference was actually at the center of Microsofts dispute with Sun over the direction of Java. Microsoft wanted the language to evolve in the direction of facilitating integration with the platforms (one in particular) while Sun wanted to abstract away the world outside Java and have everything remodeled in Java. Microsoft enhanced their Java implementation with the "lacking" features, Sun sued and won and Microsoft completely left Java and went on to design .NET.

    Your example illustrates that at least in the area of multiple programming languages, the .NET platform is much more evolved. Unlike Java, Microsoft designed .NET as a multi-language platform from the get-go (although initially for multiple statically typed languages).

    The .NET Common Type System (CTS) and common language runtime (CLR) were always (and still is) more advanced and feature rich than the primary driving language, C#. The CTS already supports generics variance (C# and VB don't yet) as part of the platform. (aside: Scala generics while being define-site with variance are merely an internal Scala thing and not compatible with anything else; Java generics based on type erasure are merely a compile-time only and as such doesn't exist for anything else).

    The latest development in .NET is to incorporate support for dynamic languages into .NET. C# 4.0 and the CTS will lay out a common principle (a "dynamic" interface) which theoretically can accommodate most known static languages, hybrid languages and dynamic languages on a very high level.

    This will enable any language which adhere to this specification to participate in a high fidelity hub-and-spoke architecture. You will essentially be able to pass a IronRuby object to IronPython, C#, VB, F#, Eiffel etc. and interact with it there while still relying on the Ruby

    --
    Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
    1. Re:Yes, .NET may actually be the best bet by Shados · · Score: 1

      Another dynamic language that has worked quite well on the platform is JScript.net. Not very popular, but it worked since the beggining. The common runtime doesn't help much with dynamic language, but they definitely are still possible, and interop well 2 ways already (calling C# to JScript.net, and vice versa, is a breeze)

    2. Re:Yes, .NET may actually be the best bet by multi+io · · Score: 2, Insightful

      The latest development in .NET is to incorporate support for dynamic languages into .NET. C# 4.0 and the CTS will lay out a common principle (a "dynamic" interface) which theoretically can accommodate most known static languages, hybrid languages and dynamic languages on a very high level.

      This will enable any language which adhere to this specification to participate in a high fidelity hub-and-spoke architecture. You will essentially be able to pass a IronRuby object to IronPython, C#, VB, F#, Eiffel etc. and interact with it there while still relying on the Ruby member resolution principles.

      Really. So how are you going to represent classes with multiple or "mixin" inheritance in a language that only has static single inheritance? Or how are you going to map classic objects with modifiable state to stateless, side-effect-free languages like Haskell? I'd imagine that that's not going to be pretty, no matter what the underlying runtime can supposedly do, because the unpretty-ness is a function of the semantic gap between the languages themselves, not of some feature set (or lack thereof) in the runtime.

    3. Re:Yes, .NET may actually be the best bet by Anonymous Coward · · Score: 0

      "This philosophical difference was actually at the center of Microsofts dispute with Sun over the direction of Java...."

      Meh. I was around and alert at the time, and I can assure you that the primary dispute was political, not philosophical/technical. MS wanted to usurp control of Java by expanding it in MS-controlled ways, using their OS/browser monopoly...

    4. Re:Yes, .NET may actually be the best bet by benjymouse · · Score: 1

      Really. So how are you going to represent classes with multiple or "mixin" inheritance in a language that only has static single inheritance?

      The dynamic classes of Ruby, JavaScript, PHP etc. are accomodated by using the IDynamicObject interface. Basically each object are allowed to define its own member resolution. Ruby mixins can still just update a symbol table somewhere up the hierarchy. During execution the object will be asked to resolve any member access itself. This means that Ruby objects can resolve using the Ruby way which will respect mixins. JavaScript can resolve member access according to prototypes etc.

      You do not need to map dynamic classes to static classes. You would only need that if you wanted to be able to specialize classes from other languages. Most interoperability between languages will not require class interop. The most important interop needed is object interop, where you pass object instances between languages, not classes. Indeed some languages (notable JavaScript) don't even *have* classes.

      --
      Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
    5. Re:Yes, .NET may actually be the best bet by shutdown+-p+now · · Score: 3, Informative

      Really. So how are you going to represent classes with multiple or "mixin" inheritance in a language that only has static single inheritance? Or how are you going to map classic objects with modifiable state to stateless, side-effect-free languages like Haskell? I'd imagine that that's not going to be pretty, no matter what the underlying runtime can supposedly do, because the unpretty-ness is a function of the semantic gap between the languages themselves, not of some feature set (or lack thereof) in the runtime.

      Yes, of course. What .NET really did was to standardize on some common feature set and model. Languages are still pretty distinct, and e.g. F# has a lot of stuff that simply doesn't map well to anything in C# land; but they have some common ground, and that common ground is much more high-level than what we had in C. What more, this approach is extensible - they needed to add dynamic languages such as Python and Ruby in 4.0, and the existing conventions did not cover that, so DLR was born; and now C# and VB are also moving to it in the next release, and any other future dynamic language on .NET likely will, too.

      This comes at the expense of languages themselves having to support that common model. For some it's natural, because they were designed around it - see C# and VB. Others - C++ and F# - are different, and they essentially have to add some subset specifically for dealing with that model; so e.g. in C++ on .NET you still have full power of ISO C++, and it does compile to CIL bytecode, but it's unusable from other languages; and then you have C++/CLI, a set of language extensions that allows you to create and use CLS-compliant types. That separation is very distinct and clear. With F# it's somewhat more blurry, but even so, there are some clear differences between the traditional FP constructs that are F#-specific on .NET (ADTs, curried functions, and tuples, for example) - which don't map nice to any other language; and the F# object model, which pretty much follows CLS closely, with only a few twists.

      On the whole, it's hard to say it's a perfect approach, but it certainly provides for better multi-language interop than the traditional C FFI solution. Pragmatically, it works.

    6. Re:Yes, .NET may actually be the best bet by itzfritz · · Score: 0

      Anders Hejlsberg, is that you? ;) If so, Unfair! It's like Sophocles engaged in discourse with monkeys.

    7. Re:Yes, .NET may actually be the best bet by multi+io · · Score: 1

      The dynamic classes of Ruby, JavaScript, PHP etc. are accomodated by using the IDynamicObject interface.

      You do not need to map dynamic classes to static classes. You would only need that if you wanted to be able to specialize classes from other languages. Most interoperability between languages will not require class interop. The most important interop needed is object interop, where you pass object instances between languages

      Doesn't that just prove what I said? You *can't* represent mixin inheritance or the absence of side effects (which IDynamicObject doesn't even deal with) in a C#/Java-like language which has single inheritance only and side effects. Don't get me wrong -- it's nice that there's something like IDynamicObject that serves as a kind of standardized interoperability "bus", enabling a range of different languages to call each other more easily. But that's not in any way a perfect integration. Is it possible to mix Ruby mixins into C# classes? Probably not. And classless languages will have a hard time integrating automatically with .NET technologies like XAML that work by looking up classes by name and instantiating them all the time.

      As a result, I'd expect that e.g. Ruby/C# interoperability in a .NET project won't be handled so much differently from how Ruby/C interoperability is handled in non-.NET projects: One language is used for low-level stuff, the other one for high-level integration or "glue code" (IDynamicObject might well make this usage pattern easier than it used to be). It would still be infeasible to support a scenario in which every developer, no matter what layer he's working on, just writes code in whatever language he or she prefers, and the runtime makes it all work together magically.

    8. Re:Yes, .NET may actually be the best bet by multi+io · · Score: 2, Insightful

      OK, thanks for the explanations. So it comes down to the fact that there are different levels of interoperability, and .NET in combination with the CTS and IDynamicObject supports what's realistically possible, and it does that on a higher level than the traditional use of C for the same purpose.

    9. Re:Yes, .NET may actually be the best bet by shutdown+-p+now · · Score: 1

      OK, thanks for the explanations. So it comes down to the fact that there are different levels of interoperability, and .NET in combination with the CTS and IDynamicObject supports what's realistically possible, and it does that on a higher level than the traditional use of C for the same purpose.

      It's interesting to note that, because of this approach, Microsoft-produced .NET languages tend to converge. The latest example of that - .NET class library didn't have a standard tuple type, because no language needed one (even though people have been asking for it for a long time). Then F# came with ML tuples, and with its own custom type for them; and now, all of a sudden, .NET 4.0 gets System.Tuple generic type overloaded for up to 5 arguments, plus a standard nesting scheme to extend it to arbitrary number - and F# release that'll come in VS2010 uses that now instead of its own type. I've also seen strong hints that future C# versions (post-4.0) will provide native syntax for dealing with those tuples, too.

      VB and C# have also cross-pollinated a lot - VB got RAII blocks and lambdas from C#, C# 4.0 is now getting opt-in duck typing from VB... in fact, the explicit design goal for the following versions of VB and C# is "feature parity".

      It seems that, eventually, we'll see a "swiss army knife" of languages appear out of this process, combining all the more or less mainstream and proven approaches and models. I strongly suspect this will be some future version of C# - it had already shown that tendency by absorbing a lot of FP techniques in the most recent release, and now also scripting-style dynamic programming in the upcoming one. I'm not sure whether it's a fundamentally food thing or not, but it's certainly interesting to watch that process.

    10. Re:Yes, .NET may actually be the best bet by benjymouse · · Score: 1

      You are right that the integration will never be "perfect". That would require the languages to become effectively just different syntax for the same constructs, sort of the relationship between C# and VB.NET.

      C# and VB.NET exist and are supported because of historical reasons, not because one of the languages supports or excels in a particular paradigm.

      However, it will be possible to consume a C# class (a static .NET class) in Ruby and use it as base for the Ruby class construction. I.e. you can take a C# class and mix in more members. This will yield a dynamic class, however. If you went back to C# with this, C# doesn't support specializing dynamic classes, but it will (4.0) support creating instances of dynamic classes. It will know that these objects are dynamic and that member resolution should be done by the object at runtime. To C# the object will be statically typed to be dynamic.

      The point is exactly to raise the common denominator and ease interop. Provisions also exists for language developers to support drastic optimizations, such as member lookup caching etc. The goal is not to have all languages converge; rather it is to allow full specification compliant languages to interop and to remove the pain of doing so.

      And I think you are still focused on a single language pair. The really compelling upshot of IDynamicObject is that you can interop with, say, C#, F# and Ruby.

      --
      Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
    11. Re:Yes, .NET may actually be the best bet by angel'o'sphere · · Score: 1


      The "hub" (Java) is too weak to describe objects/functions on a the level which would let you pass objects from Jython to JRuby to Groovy to JavaFX to Scala. Java's generics are incompatible with the generics used in Scala. Java (and also the VM) does not support unsigned integers.

      That is not correct.

      If you want to pass objects from Java to any of the languages you mention you have to do nothing but call the appropriated method/function and pass the Java object.

      The other way around might be a bit more difficult as Jython Objects e.g. are only slightly enhanced Hash-Maps and don't really have "methods" e.g. Ah, I reread ... you said from Jython to JRuby that is not a Java/JVM problem, but a Jython problem. Jython is not generating full fledged Java Classes when compiled to byte code, but only a fancy Hash-Map as mentioned above.

      Groovy and Scala just generate normal Java classes, when compiled. I don't understand what you mean with "Java generics are incompatible with generics used in Scala". Of course they are not. Both compile to the same byte code. Probably you can not use generic Java classes directly from Scala (because the idea what instantiating a generic actually means might be different), but that would make me wonder. The opposite way is ofc, thinkable, as Scala generics are more templates than generics.

      Bottom line the JVM spec is in no way different than the CLR ... however Java lacks a counterpart for .NETs CTS. OTOH most JVM languages use as ersatz CTS the java.util.* package, what else, ofc.

      I don't really can figure what your exact point is ^^ do you think/claim that .NET / CLR is superior about Java? Well, jsut a matter of oppinion then IMHO.

      Regards,

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    12. Re:Yes, .NET may actually be the best bet by Anonymous Coward · · Score: 0

      Or how are you going to map classic objects with modifiable state to stateless, side-effect-free languages like Haskell?

      Monadic programming. Keep in mind Haskell's type system is Turing complete. You can create types for computations that might have state, or side-effects, and use a combinator called "bind" (written >>=) to chain function calls on elements of the monadic type, and a function called "return" to make a new value of the monadic type.

      With a little bit of syntactic sugar you end up with code that looks like:

      main = do
          xs <- getArgs
          putStrLn( concat xs )

      The "xs <-" line says that "xs" are elements of "getArgs", which has type "IO (String)" -- (probably, I don't feel like looking). Functions are defined in the plain (and extremely powerful) Haskell style. There is NO semantic gap here. Indeed, this approach is much more flexible and general than most object systems.

    13. Re:Yes, .NET may actually be the best bet by jgrahn · · Score: 1

      What good are multiple languages if all inter-language integration have to be funneled through some narrow C-like basic model?

      Thirty years of success for us Unix users doesn't feel like a waste of time ...

      It's through C APIs I have access to thousands of libraries for various tasks. I have them in Python, Perl and all other major scripting languages too -- but only because those C APIs exist. Sure, a richer interface than C function calls would have been nice. But it would have failed, and I prefer something which works. C works because it's a lowest common denominator which everyone who counts can agree on.

      You are also ignoring the most useful inter-language integration: pipelines, text file formats and communication using standard protocols on top of TCP/IP. See The Art of Unix Programming for additional arguments.

    14. Re:Yes, .NET may actually be the best bet by benjymouse · · Score: 1

      You can view the VM as nothing more than a glorified assembler. In that case you would focus on bytecode. And sure, as bytecode is really just a portable assembly language you can pass around (simple) objects.

      What I'm talking about is the ability to pass around higher level objects, such as e.g. dynamic objects or classes or even generics.

      The .NET CLR actually has define-site generics with variance, compatible like Scala. On the .NET platform a language like Scala would be able to interop with generics with the upcoming C# 4, VB and other generics-aware languages. The Java platform stops short of specifying how generics should look. Hence, JVM based languages cannot interop on generics. You cannot inherently take a Scala generic and realize it (create a concrete type) using another language, not even Java.

      The same goes for dynamic objects, i.e. objects for which their "host language" defines the name resolution for members. These rules are different for most languages. As you point out Jython objects are merely hashtables. Anyone else must know the Jython rules for member resolution to use those objects.

      Compare that to the situation on the DLR/CLR. The IDynamicObject lets anyone else invoke methods dynamically on any object and defer the member resolution to code provided by the "host language". IronPython objects can be used from IronRuby, C# or VB as if they were native objects. Whenever a member is referenced the IronPython name resolution will spring into effect and look the name of in whatever internal hashtables are relevant.

      The JavaVM was originally only designed to execute Java code. Hence, it is only slowly adopting constructs needed to accommodate other languages. This means that lacking the infrastructure those languages will merely use the byte code as an assembly language, not the type system as it carries over all of the Java limitations.

      So no, the JVM spec is very different from the CLR/CTS. CTS was a generalized type system from the get-go and was always designed to be more general than any of the languages.

      --
      Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
    15. Re:Yes, .NET may actually be the best bet by benjymouse · · Score: 1

      Thirty years of success for us Unix users doesn't feel like a waste of time ...

      It's through C APIs I have access to thousands of libraries for various tasks. I have them in Python, Perl and all other major scripting languages too -- but only because those C APIs exist.

      They are still pairs of which C is always one. What's more, using those objects from C is a pain as they all have different object models and name resolution principles.

      True interoperability comes when you can use Python objects directly from Ruby or PHP as if they were native objects. The C API doesn't give you that.

      You may heralt the 30 years of Unix C API. Meanwhile Windows has almost completely moved to an object-oriented model (COM) for many APIs. COM is a binary object model with absolutely minimal overhead. Cue DirectX. The APIs which have not moved to COM are generally wrapped in object-oriented .NET APIs.

      The upshot is that Windows is becoming a object oriented OS. That's what enabled PowerShell - and why PowerShell really is at it best at Windows despite PASH (PowerShell for *nix). Leaving the text-based pipes behind, PowerShell now features an object-based pipeline. You will only realize the true value of this development once you try it.

      So I would say that we have come to a point where the lack of more sophisticated object models in *nix will be holding it back. At one point I believed that Java could be it (Java views everything as objects), but Sun blew it with the OS community at that point, only releasing it under a true OS license only last year.

      --
      Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
    16. Re:Yes, .NET may actually be the best bet by fava · · Score: 1

      Correct me if I am wrong, but powershell objects are xml based. Xml is text based. So a powershell pipeline is actually a text pipline.

    17. Re:Yes, .NET may actually be the best bet by benjymouse · · Score: 1

      Well, you are wrong. PowerShell objects are not xml based at all. PowerShell can expose COM, .NET and WMI objects as PowerShell objects.

      The ls command (actually an alias for Get-ChildItem) returns a mix of DirectoryInfo and FileInfo objects. Each with a number of properties and methods. A formatting rule for a collection of FileInfo and DirectoryInfo items defines what appears to be the "usual" ls format. But you can actually do something like:

      ls c:\ | ?{ $_.Length -gt 100KB} | ft FullName,Length

      (get child-items of c:\; select only those with a length greater then 100KB and output them formatted in a table with two columns: The full path name and length).

      --
      Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
  44. Re:My suggestion: Learn QT by nawcom · · Score: 1

    The least you can do is call it by it's correct name dammit, Qt! not QT!! This isn't some acronym, it's a damn word. It's pronounced 'Cute'. Though I've also heard a few different ways, due to language differences.http://www.qtcentre.org/forum/f-general-discussion-10/t-how-do-you-pronounce-qt-11347-post61535.html
    Piss off with your horrid promo of Qt. I love Qt4 myself, and unlike you I have used it many times, but you seriously just treated Qt like a husband publicly degrading his wife. Shame on you. VLC wasn't created using "QT" it was created in C++. They took advantage of the "Qt" motherfucker, "Qt" toolkit for its GUI.

  45. so ... by reiisi · · Score: 2, Funny

    the mods were reversed, too.

    The moderators expected all the slashdot crowd to understand what was going on, right?

    ;->

    --
    Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
  46. Popular != Monolithic - Java in the console by Anonymous Coward · · Score: 0

    I work in J2EE generally, however this has not prevented me from following the unix philosophy. The use of ant makes it easy to utilize a number of java widgets that do one thing and chain them together. Generally done as task1 followed by task2. So while it's not as clean as piping, it does allow me to make utilities that do one thing well. In particular I backported a number of gui based utilities that did this, but didn't offer a command line version.

    Java does make the command line syntax of calling a utility a little gross, but it's at least doable. It'd be nice to configure the installed jvm so that you could store a bunch of jars in a common location and just call java jarname instead of java -j jar (or worse if the jar is poorly packaged:
    java -j jar fully.qualified.package.to.the.MainClass
    ).

    There is also the issue that java has poor support in the command line (no chance for something like ncurses). You have to implement your own java console to regain the control of the screen in that fashion. Anyone know any good libraries for doing this?

    1. Re:Popular != Monolithic - Java in the console by pjt33 · · Score: 1

      I haven't used it myself, but Java Curses is probably worth a try.

  47. C++/Java and Multi-language programming by quarkie68 · · Score: 1

    Your question has three blocks of scope in programming terms: 1)The philosophical one: No, you should not suck it up and unlearn what you have learnt. Scripting and esoteric languages are here to stay. And if it wasn't the fact that some 'academic' environments tend to snob them, the situation would be better (the academic in quotes is meant as a criticism). 2)The toolkit enabling one: Apart from higher level architectures that support multi language development (Mono .Net, etc), the multi language programmer needs more effective IDEs for support. I tend to use the Eclipse platform, but a tool that handles the 'pipeline' aspect of multi-language programming integgrated in such an IDE is a must. 3)The language glue aspect:Many popular languages such as Python and Perl have specific dedicated mechanisms to use/call C++/Java. Number 3 means that using C++/Java from Python/Perl and perhaps other languages has never been out of the question. For more info, shout and I shall discuss details.

  48. Make it scriptable by Ed+Avis · · Score: 1

    The usual answer is to write the core of the application in a relatively low-level language and add a scripting extension which can be used for less CPU-intensive, more rapidly-developed parts (often including the UI). The split between 'core' and 'extensions' varies but some examples are:

    Firefox: core C++, UI and many extensions in Javascript.

    Emacs: a small core in C, almost everything in Elisp.

    Core in Java, scripting in Jython or another language that compiles to JVM bytecode (eg IBM Websphere)

    Core in C#, scripting in IronPython, IronRuby, etc.

    Core in C, scripting in Scheme (The Gimp's original Script-Fu, see also Guile)

    There are other languages designed to be plugged into a C or C++ program, for example Lua and Tcl. You can even embed Perl though it's a little more complex.

    --
    -- Ed Avis ed@membled.com
  49. One solution... by Bootarn · · Score: 1

    ...for C and an intepreted language, such as python, is to make the C program fork(), and let the child exec() the intepreter for the other language and use some sort of IPC (dup:ed pipes comes to mind). A bounded/unbounded buffer may also accomplish this.

  50. C + JavaScript by Anonymous Coward · · Score: 0

    Personally I use JavaScript to drive a C-written graphics engine, much like Emacs and Lisp. The core hereby provides low-level graphics routines and file formats while the JavaScript-VM allows for the implementation of custom scenegraphs and animation.

    This works perfectly for me and I really get the best of both worlds. I think the important point is to design for scriptability from the very beginning and not attach the scripting language later on.

    For the (horrible amounts of) glue code between C and JavaScript, I wrote a code generator which is available at [1].

    -Thomas

    [1] http://sourceforge.net/projects/jsapigen

  51. It's all in the tools by Alkonaut · · Score: 1

    Depends on the size of project, length of maintenance and so on. Of course there may always be "the right tool for the job" within a project (e.g. writing an os where some parts would need assembly and some parts c, or a web project where some parts just have to be js). But I'd always be careful when choosing multiple languages over one. How many IDE:s do you need? How many build tools to rebuild all the software? How many testing frameworks? Can your IDE debugger step between language barriers? Is there even an IDE with integrated debuggers for all languages? Can you find new developers that know all the languages, or to you need to have separate developers for each language?

  52. .NET anyone? by Hattmannen · · Score: 1

    "is there hope for the multi-language development process?"

    I dare venture that the .NET initiative (and mono) is just that.
    Common language runtime, sure. But use any language you want as long as you can bind it to the framework.

    [sarcasm] So my next major, multi-megabyte project I will build with brainf*ck.NET. [/sarcasm]

    --
    People are not wearing enough hats.
  53. history repeating by ThePhilips · · Score: 1

    I have traditionally associated this with Windows or MacOS, but it is happening with Linux as well. Environments have little or no support for multi-language projects - you choose a language, open a project and get it done.

    Probably because more and more people start using Linux to do some real work? It's not for geeks/nerds/engineers anymore.

    But see below.

    Recent trends in more targeted build environments like cmake or ant are understandably focusing on automatic dependency generation and cross-platform support, unfortunately making it more difficult to grow a custom build process for a multi-language project organically.

    It's old, but it works - GNU Cons. Also Google for "pcons", its parallel version.

    All this is a bit painful for me, as I know how much is gained by using a targeted language for a particular problem. Now the question: Should I suck it up and learn to do all my programming in C++/Java/(insert other well-supported, popular language here) and unlearn ten years of philosophy, or is there hope for the multi-language development process?"

    This is like "Emacs vs. vi". There are people who to do work need well integrated environment. And there are people who prefer to have bunch of lego blocks and make from them whatever fits better task at hand.

    Approach of building integrated, all-in-one, probably language-dependent software is nothing new and expected step in evolution of more or less any software product.

    Main reason is that integrated systems have lower entry barrier. Essentially, people get some well-controlled sandbox where nothing can go wrong. Mostly because they do not want to learn - or do not have the time for it. Slap some task oriented UI on top of all of that - and any with knowledge of application field would be able to do his work with the software.

    It's kind of funny that somebody brings it up again. Many people in past were dooming *nix to extinction because learning curve (and need to learn *nix philosophy too) is quite steep. Some bits about that are scattered around in ESR's TAOUP.

    The only advise I can give you is to look out for application fields where your expertise with *nix and scripting can be advantageous and then change job. But honestly, I still can't recall single company where I did not end up writing bunch of small programs/scripts for whatever internal needs people have. Was it DOS, Windows, Linux or *nix, needs are the same. Even more so when people standardize on some all-in-one solution: I have never seen perfect one, which didn't required some custom hacks.

    In the end, from my experience, expertise in making hacks - in making workflow more efficient - is well appreciated. Though more in smaller companies than in larger companies. Just do not limit yourself to Linux, and you'll be fine.

    --
    All hope abandon ye who enter here.
  54. Yes, choose the JVM as your platform! by lucifron · · Score: 1

    The JVM is pretty much ubiquitous. It is also free, open and mature.

    There's of course Java, but you also have a multitude of other languages taking advantage of the JVM, e.g. JRuby, Groovy and Jython. See a more complete list here:
    http://en.wikipedia.org/wiki/List_of_JVM_languages

    My personal favorite is Clojure; a modern lisp taking full advantage of the JVM and Java's extensive libraries.

    1. Re:Yes, choose the JVM as your platform! by Anonymous Coward · · Score: 0

      > The JVM is pretty much ubiquitous.

      How do you define "ubiquitous"? It is not installed on any of my PCs, it is installed on rather few of the company PCs.
      Official and current versions exist only for x86, x86_64, Itanium and SPARC with a "early access" version for ARM/Linux, and those still seem to require 32 MB of RAM.
      For some uses that may cout as "ubiquitous" but for others you can count that as "useless", e.g. on my Linksys wireless router Python, lua, ... are far more useful (though pure C is probably simplest to get running).

  55. Script on top of Java by Anonymous Coward · · Score: 0

    you can also script on top of Java:
    here

  56. Re:Cross platform programming and multiple languag by Anonymous Coward · · Score: 1, Informative

    Interesting. I am an experiment physicist myself, although I have spent my recent past in the pharmaceutical industry.

    My first analysis programmes were a mix of FORTRAN and MODULA-2. A bit exotic perhaps, but it worked well enough once we had figured out the calling conventions. However, it was hard to port when we moved from a VAX/VMS mainframe to Ultrix workstations. Digital had a tool to convert binaries, so we actually compiled on the VAX and then converted the binary for Ultrix, instead of properly porting it.

    In the 1990s we moved to (much cheaper) Linux machines, and then I too opted for a mix of Tcl/Tk and C, although I later converted most of it to Tcl and C++. I didn't see any reason to prefer C to C++, although it is probably best to use a subset of C++ features and avoid environments like Visual C++ -- I usually worked with g++ and a good editor. The problem with Tcl was that the code became difficult to maintain as the project grew, because IIRC it didn't even have namespace support at the time.

    When I moved to industry I found that my colleagues had adopted a mixture of LabView and C. LabView, at least in that version, turned out to be an even worse choice for integrating a complex system, to the extent that it was easier and quicker to modify the low-level libraries than to modify to high-level wrapper code. I preferred to replace the C part with completely new code written in C++, rather than attempting to correct the bugs in the LabView code.

    Today, if I had to do it again, I would probably rewrite most of it a mix of Jython, Java, and C. I think that is more or less the state of the art in this industry, offering a good compromise between performance and flexibility. Typically Matlab or R are thrown in to handle more complex analysis of images and numerical data. For remote calls, people usually try WebServices before they decide that these fall far short of meeting performance requirements, and then they either improvise something or opt for solutions such as Zero-C ICE.

    However, in my current working environment language choices are made at some stratospheric management level, instead of by programmers, and they decided to do everything in .NET because MS gave them a good deal and any software a righteously minded person could ever want :-/ I don't particularly dislike .NET, but there are several good reasons not to do this.

  57. CMake by flithm · · Score: 1

    Should I suck it up and learn to do all my programming in C++/Java/(insert other well-supported, popular language here) and unlearn ten years of philosophy, or is there hope for the multi-language development process?"

    What you should do is suck it up and learn a modern build tool like CMake (which you even mentioned in your question).

    I have successfully and painlessly used CMake as a build tool for multi-language projects. It's actually quite trivial -- you don't even need to do that much. For example, one source dir might use C++, another C, another D, etc, etc. It's no problem! CMake does all the hard work for you.

    The whole question is actually moot to me. Multi-language development is alive and well and has been going on for a long time. It's not even a problem that really needs solving anymore.

  58. C++ and python by oergiR · · Score: 2, Informative

    Combining of C++ and Python works really smoothly with Boost.Python. C++ objects can look and feel like Python objects, and vice versa.

  59. gphnzykrzwki by fforw · · Score: 3, Interesting

    peut-être.. Although many Ergebnisse sont loco.

    --
    while (!asleep()) sheep++
    1. Re:gphnzykrzwki by anon+mouse-cow-aard · · Score: 1
      Is qu'il y a ein punkt que estas tendando to express? Creo que les chances sont bonnes que viele personen verstanden these statements, no?

      I'm multi-lingual you insensitive clod!

  60. the UNIX philosophy in the 21st century by erik258 · · Score: 1

    As linux market share grows I think there's going to be a bigger group of people building small specific programs and using stdin and stdout to communicate between them. On the other hand, whereas in the glory days of Unix simple text processing was quite common, the next few decades will probably revolve more around markup like XML or various rich text formats that play less nicely with sed and awk style operations. Nevertheless, I feel that many of the power users of windows will eventually become old school unix types, usin cut for example where they might have previously fired up Exel. Incidentally this is bad news for the bad guys. If people do move back to old school unix philosophy, many of the exploits that rely on monolithic, and therefore messy, programs will be obsolete.

  61. dynamic inter-language communication by lkcl · · Score: 1

    there is a lost art involving inter-program communication which has not really been kept up-to-date as the complexity of applications and users' expectations both increase.

    the "simple" principle which you are referring to - of joining (pipelining) applications together to achieve a purpose - was the ethos behind unix that made it so successful.

    but - that principle was based on text files.

    along came windows and blew that out-of-the water - but not in ways that you might anticipate. what really blew everything away was the use of MSRPC aka DCE/RPC with some small but highly strategic enhancements.

    the use of MSRPC in Windows NT took the inter-process communication principle to unprecedented (as far as users were concerned) levels of transparent program boundaries.

    the basis of DCE/RPC is that instead of burdening the developer with "rolling their own inter-program file communication", the developer can instead subdivide the application at the API level.

    this was so successfully deployed in Windows NT that nobody really even knows that it exists. even the _internal_ teams inside microsoft often assume that an API is "direct" instead of networked, resulting in 2nd level APIs that repeatedly send 10mb of unintialised _crap_ over-the-wire.

    then, later on, once the proprietary push of DCOM onto the world failed, microsoft tried again with CLR. CLR has been slightly more successful, as it is not tied historically to the operating system.

    the bottom line is that there is plenty of technology out there for cross-application communication that makes it perfectly possible to have really quite sophisticated applications written in different languages.

    DCOM. DCE/RPC. JSONrpc. Objective-C. CLR/.NET. even CORBA, god help us.

    all of these have varying degrees of sophistication _well_ beyond "pipes and text file formats" that have developers throwing up their arms either in horror or to scratch their heads.

    and it's exactly the ignorance and the lack of appreciation for these powerful technologies that leaves you, cthonicdaemon, in the situation that you are presently in.

    1. Re:dynamic inter-language communication by dodobh · · Score: 1

      The network equivalent of the Unix pipe is the socket. Why would I want to make an API call instead of writing a message (text or binary) to a file?

      --
      I can throw myself at the ground, and miss.
    2. Re:dynamic inter-language communication by mkcmkc · · Score: 1

      along came windows and blew that out-of-the water - but not in ways that you might anticipate. what really blew everything away was the use of MSRPC aka DCE/RPC with some small but highly strategic enhancements.

      Wow!!! OMG I can't believe I missed this!!! I've been living in the past and didn't even know it. I'm going to say it three times just so I don't forget: MSRPC, MSRPC, MSRPC is the future!

      this was so successfully deployed in Windows NT that nobody really even knows that it exists. even the _internal_ teams inside microsoft often assume that an API is "direct" instead of networked, resulting in 2nd level APIs that repeatedly send 10mb of unintialised _crap_ over-the-wire.

      This seems like a relatively minor problem, though. In these days of gigabit ethernet, who cares whether every function call comes with a 10MB network overhead?

      all of these have varying degrees of sophistication _well_ beyond "pipes and text file formats" that have developers throwing up their arms either in horror or to scratch their heads.

      I know what you mean--that pipe character is spooky. It almost looks like a tiny axe-murderer, only without arms (which is even scarier, if you think about it).

      and it's exactly the ignorance and the lack of appreciation for these powerful technologies that leaves you, cthonicdaemon, in the situation that you are presently in.

      With a dusty debugging skills? ;-)

      --
      "Not an actor, but he plays one on TV."
  62. Yuck by sega01 · · Score: 1

    Projects with multiple languages are harder to maintain and typically make the application more bloated. I can understand a programming language, some inline assembler, and a scripting language, but mixing C, C++, Ruby, and Perl is a nasty mess. C/C++ isn't too bad, but I highly recommend keeping the languages count to a minimum.

  63. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  64. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  65. Two languages seems a good balance to me by PacoSuarez · · Score: 1

    At work we use primarily two languages: C++ and Perl. Most programs we write have a Perl wrapper that takes care of parsing options, reading configuration files and that kind of thing. Then it creates a text file with key-value pairs and invokes the C++ program, which reads that file for all its parameter settings.

    The use of Perl allows for lots of flexibility for configuration, handling of special cases and plain-old hacks. The C++ does the bulk of the work, and here we care more about good interfaces, efficiency and other quality considerations.

    I don't particularly care about which specific pair of languages we use, but having this combination of a main programming language (C++) plus a flexible glue language (Perl) is invaluable. At some point in the past more languages were used (C, Tcl, shell scripts), but in a company were about 100 people may have to read each other's code, it's easier if you keep it down so you "only" have to learn 2 languages to join the team.

  66. Two Rules of Thumb by smcdow · · Score: 1

    1. Loose coupling between S/W components is always better then tight integration. Always.

    2. Regardless of what other languages you know, learn the shell. It's the language of the system, and it's the language of S/W integration. Sooner or later, you have to integrate your S/W into a larger system, and so there will always be a need for glue.

    --
    In the course of every project, it will become necessary to shoot the scientists and begin production.
  67. Re:Cross platform programming and multiple languag by drolli · · Score: 1

    Ouch... labview... Yes, i also used labview. When talking about big projects beeing difficult to maintain in tcl, all "difficult to maintain" phrases will get strongly relativated in your mind in the moment you use labview.... I rather would code in a mixture or perl, R, and 8051 Assembler instead of maintaining a big (or only moderatly sized application in lv).

    I also used webservices. I drew a webserver in Labview, which deliverd xml to a controlling matlab part where it was decoded into matlab source by a fitting xslt. While this solution was interesting, i replaced the labview part of the application two months later in matlab and lived happily ever after (until the end of my phd thesis....)

  68. I do this everyday... it is called ILE by Shivetya · · Score: 1

    Integrated Language Environment, the basis of programming on the iSeries. I can easily combine RPGLE, CL (command language), COBOL, C, C++, and JAVA. I can invoke REXX and talk to the internet through other methods as well.

    What IBM did for programming and developers in general with the iSeries really needs to get out. I would love to see this level of integration on the pc/mac platforms. IBM takes it so far as that the code is compiled down to a "p-code" level and invoked by whatever hardware layer is present.

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

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

    Look, I know many look down on systems like this, let alone RPGLE as being old school like COBOL. However we run a billion dollar business with these as do many other big companies (you would be surprised to learn the companies that do) because not only is it robust, secure, and easy to manage, but it is so programmer friendly.

    I am sure there are examples in the pc/mac world; well I am not sure; but the ease and level of integration is unparalleled. All I can suggest to geeks and such is look to what works on business platforms and see how those ideas can be extended into other environments. Don't dismiss them. These systems benefited from a lot of knowledge and time. Everytime I hear "rpg is dead" or "cobol is dead" I keep going only to read the same thing five years later.

    --
    * Winners compare their achievements to their goals, losers compare theirs to that of others.
  69. share the knowledge by Anonymous Coward · · Score: 0

    I like interviewing more experienced programmers, even if they don't end up working for us, just because something interesting ALWAYS happens. I could tell you stories........

    If you have the time, why not start a weblog and share them? Share the knowledge.

  70. That Would Be Microsoft? by littlewink · · Score: 1

    The title says it all.

  71. Re:Cross platform programming and multiple languag by chthonicdaemon · · Score: 1

    I happen to be a control engineer, so I spend most of my time processing large amounts of data from measurements and experiments. I find C/C++ syntax terrible for matrix/vector stuff, while Fortran (>=95) is well-suited for it, including having damn efficient compilers. I started with Matlab at University, but the licensing issues really got me down.

    This is exactly what I'm talking about -- I've chosen languages based on what works in terms of syntax, performance and suitability to the job at hand, but these days popularity and homogeneity seem to be more important for long-term success.

    --
    Languages aren't inherently fast -- implementations are efficient
  72. you must be new to open source . . . by Anonymous Coward · · Score: 0

    OK, now listen up. This will be an education for you.

    You design your system, white board it, do whatever
    you do to come up with the pieces.
    Then, for each piece, you develop a project.
    You shop each project-piece out. You find the best solution for each part. You try different solutions for each part. Each part can also be
    aggrigations of parts that are written in different languages as well.
    Of course you don't have to use the same
    tools for each solution. One part might be in
    PHP, another in compiled C, another a set of
    bash scripts. How they interact, what they do together, the artifacts that they create, the
    connections that they need, the IPC they use, all
    of that is up to you, lead project manager, to have your team devise (maybe your team is just you).

    If you want to see how this is done in the real
    world I suggest you study how to create the specification files for RPM. RPM is what yum uses. Or maybe you use subversion? Or perhaps you like apt?
    All of these source control solutions are useful. if you study any of them you will
    learn a lot about how real world packages work.

    Also, having various pieces means that you have
    other parts, building blocks, for other projects
    as you are laying there, afterwork, relaxing
    and yet unable to get your code-head to stop
    coding, your design-brain to stop designing.
    You will suddenly see the mutability of
    software. The aggrigations of pieces might be
    reengineered if you have the budget. Or you can
    use new pieces that you find out on the internet
    to replace something that is costly to design.

    After you have all of your parts working
    Then you create a 'package' in rpm or in apt, that
    groups all of the pieces together! you distribute
    that as a installable package. What that does
    is go and get the various pieces and
    it installs all of the pieces so that you can
    use them. And you can install them on different machines.

    And then if any piece gets upgraded only it
    might need to be upgraded, and not everything.

    And then you are putting out a project that may be written in
    many langauges. Your clients will not know
    or care. They install your RPM and they are done.
    Things are up and working.

    This method is tried and proven and works. It is
    how all modern Linux distributions do things.
    As a matter of fact a Linux distribution
    for a desktop is just such a collection of
    packages.

    You can make a bootable CD that boots linux and
    your project as a demo disk for your clients
    once your stuff works.

    If you don't do open source you will need
    to have a huge budget up front to buy all of
    the tools for your propriatory system and you
    will need to deal with the crazy-ness of
    whatever random things the vendor does
    and their policies of submission. And I mean
    submission to their hedgemony.

    PS: Most of the 'parts' that you will need
    for your final aggrigate have most likely already
    been developed, either open source or otherwise).

    For example: I created a touch screen qwerty keyboard that used festival to speak the words
    that were typed. It was exceptionally easy.

    I wrote the keypad program to output ASCII and
    ran it with a pipe into festival.

    The 'pipe into festival' part was just a
    'hey, I can do this too' kind of thing. and I did
    and it worked the first time. Didn't have to
    develop anything.

    Only thing if my company were to use this
    they would need to worry about following
    the licenses.

    Good luck

  73. You should develop for the web by Lennie · · Score: 1

    You should develop for the web, lots of languages there.

    You can use Javascript, HTML, CSS in the browser, SQL, PHP, Java, C, Perl, TCL, whatever on the server. If you use one the scripting languages, you don't need a makefile or build-system.

    It's instant multiplatform as well. :-)

    --
    New things are always on the horizon
  74. Learn several languages by MarkWatson · · Score: 1

    For one thing, just using one language all the time is boring :-)

    My list:

    1. Ruby: my default language for small utilities, and for low volume web portals (with Rails/Merb)

    2. Java: high performance web and server side stuff

    3. Common Lisp: research programming, and some applications requiring very high performance

    Then, seldom used:

    4. Prolog: seldom use it anymore, but for some things it is the best

    5. Smalltalk: research (mostly NLP) and sometimes Seaside

    In other words, have a few core languages, but keep an open mind. I found myself not using Erlang after learning it, but knowing Erlang makes it easier to use things like CouchDB that are written in Erlang. Same for Python: it was worth learning the language because I sometimes use programs written in Python.

    1. Re:Learn several languages by dmihalik · · Score: 1

      My list:
      Java - Used mostly for research
      Visual FoxPro - Used extensively in the past for building database apps.
      C - Used mostly for console based utilities
      Visual Basic 6 - research
      C++ - research
      C# - Use everyday to do Windows/ASP.NET and Sharepoint develoment
      VB.NET - research
      Mananged C++ - research
      Python - research
      Perl - research
      PHP - Used to manage my web site
      Ruby - research
      Tcl - research
      Delphi - research
      Objective-C - research
      Ada - research
      List - research
      ActionScript - research

      The research is done for my web site devoted to creating a master index of programming functionality across many different programming languages.

  75. The One True Language by Anonymous Coward · · Score: 0

    As soon as it is available, writing the firmware for flying cars and finishing off Duke Nukem Forever will be a cinch.

  76. All it takes is a common calling sequence... by Anonymous Coward · · Score: 0

    With a common call sequence (and some understandable ways data can be passed) you can mix any languages you like which can be compiled to that sequence. (For interpretive ones you need glue.) This can be advantageous, where one language may for example be especially good at handling structured I/O and another may have some computational facilities that make the part of the problem you are trying to solve easy to solve and easy enough to see that the solution is correct.
    Those who claim this is unstable ignore the value of getting the program right (friend of accuracy and of security) or appear to be getting lazy about picking up a different language (should be the work of a week or two).
    This has been done in some systems; OpenVMS had this facility in the 1980s if not before, and its built in make facilities are not language specific. The main problems they had to solve to get there were arranging common calling/linkage systems, and some RTL naming conventions so that the link-time namespace did not have massive collisions. This last may be more difficult in unix due to its historical base, but essentially it never showed up within a language; the name prefixes were usually invisibly added by compilers and resolved by linkers. If you wanted to call a c++ library element from, say, cobol, yes, you needed to be aware of the conventions. This was not common though.
    Knowing multiple languages is however a good thing, and being able to use the pieces to solve your problems, where you can choose the best language for each part, is mightily helpful and can make for a smaller, faster, cleaner design.
    If your staff objects because God told them to use and not to pollute it with , consider that mental ossification and laziness can occur at any age and that these are not good qualities to keep around.

  77. correctness first by mkcmkc · · Score: 1

    If I wanted the answer to be correct, I wouldn't. And don't.

    e.g., $ perl -e 'print "this should give an error"' > /dev/full but it doesn't

    --
    "Not an actor, but he plays one on TV."
  78. When your only hammer is C++ by mkcmkc · · Score: 1

    every problem looks like a nail that takes 18 months to pound in...

    (and 18 months to pull back out when you figure out it's crooked)

    --
    "Not an actor, but he plays one on TV."
  79. Mu by Anonymous Coward · · Score: 0

    Imho the question demands a Zen answer. If you think, that the command line is the path to enlightenment, than you haven't understood the first thing about programming.

    There are reasons why people use java and there are reasons why people use awk...
    Now go and do some one handed clapping.

  80. Buzzwords by shiftless · · Score: 0, Troll

    "Grow" ... "organically"? What is this, a fucking tomato garden? Are you fertilizing it with goat shit? After you're finished are you going to take the end product and sell it at a farmer's market?

    If you answered "no" to all of the above questions, why the fuck are you using words like "organic" to describe your project?

    1. Re:Buzzwords by anon+mouse-cow-aard · · Score: 2, Informative
      Cool it brother, organic means that you're going with the flow dude, just learning what you need to "on demand", "just in time", and not trying to cram for "crunch time". When a project is five or ten years long, there is this management idea that you build a big mpp file in the first two months, get it vetted by the managers, and then execute the next five years of software development, feature by feature, on schedule...

      If you're looking at it organically, you are understanding as much as you can at first, doing a little functionality, hopefully delivering it, then moving on, getting small wins, and the system gets more functional over time... naturally.

      In the former approach, you are doing all the planning when no-one has the faintest idea what needs to be actually done. In the latter method, you are doing small, incremental, plans right before you start working on a component, when you have the most information possible, and you are dealing with specific clients for specific requirements.

      Organic: not just for produce any more...

    2. Re:Buzzwords by shiftless · · Score: 1

      OK, so why don't you just call it "INCREMENTAL" development instead of coming up with all these ridiculous buzzwords just for the hell of it, or because you think it sounds cool? (It doesn't. Makes you sound like a bunch of marketing dweebs with an over-inflated sense of job importance.)

    3. Re:Buzzwords by anon+mouse-cow-aard · · Score: 1
      Look up dweeb at Dictionary.com 1968, U.S. college student slang, probably a variant of feeb "feeble person." -- Dweeb is a word made up by college students, earliest reference is 1968. Why do you use their neo-logism, instead of 'feeble person'?

      Why did you not use some existing word rather than inventing your own? I suspect you were trying to sound cool by using a modern word, even though it likely dates back to your father's generation.

      Go back forty years and look up the word 'entree' . It didn't exist in US English. It is also highly confusing to French speakers, because whoever imported it into English got it wrong. In French, an entree is an appetizer. In English, it's a main course.

      language evolves. get over it.

    4. Re:Buzzwords by shiftless · · Score: 1

      How exactly does your pointing out that language evolves refute my assertion that the term "organic" as applied to software is stupid? It's stupid not because it's an "evolution" of language, but just because it's a stupid term that some dipshit came up with to sound intelligent, and other dipshits copied so as not to be left out. The same thing with "going forward" and other bullshit corporate words. It's stupid, and you are stupid for buying into this nonsense.

    5. Re:Buzzwords by anon+mouse-cow-aard · · Score: 1

      How exactly does your pointing out that language evolves refute my assertion that the term "dweeb" as applied to language is stupid? It's stupid not because it's an "evolution" of language, but just because it's a stupid term that some dipshit came up with to sound cool, and other dipshits copied so as not to be left out. The same thing with "dork" and other bullshit abusive words. It's stupid, and you are stupid for buying into this nonsense.

  81. MultiLanguage Programming thoughts... by Codifex+Maximus · · Score: 2, Insightful

    I have a toolbox at home that contains a pair of pliers.

    These pliers have a formed handle that can be used as a screwdriver. I can pry with it, I can pound with it, I can pull small nails, grip, twist and an assortment of other jobs.

    It's not particularly good at anything.

    I also have a set of combination wrenches that work great for loosening nuts and bolts without buggering them. The pliers just can't do the job.

    I have a hammer that can cleanly drive a nail and pull it out too. The pliers would be hard pressed to drive a finishing nail much less pull it.

    Programming languages are tools.

    Some are better at some tasks than others.

    Recently, I have begun using Python. It is a very nice pair of pliers and the proper tool for one specific task - prototyping. It is so good at prototyping that the prototype often BECOMES the finished product.
    Python code is so close to pseudocode that often the code documents itself.
    Python is pervasive but not as much as C/C++/Java.

    However, if I wanted absolute speed of computation, I'd make the finished product using C or C++.

    If I wanted cross platform - Java is king.

    Python is an excellent glue language for MultiLanguage Programming. Black box your components and call em with Python to tie it all together.

    Or use another pair of pliers language that meets your needs.

    What I'm getting at is:
    There is a proper tool for the job.
    Use the proper tool for the job.
    Have more than just a pair of pliers in your toolbox.
    Use the pliers if it's the right tool.

    --
    Codifex Maximus ~ In search of... a shorter sig.
    1. Re:MultiLanguage Programming thoughts... by Anonymous Coward · · Score: 0

      Or, to put it more succinctly:

      If the only tool you have is a hammer, every problems looks like a nail.

    2. Re:MultiLanguage Programming thoughts... by owlstead · · Score: 1

      *warning: building upon analogy*

      Of course, in the programming universe you sketched you can question if everybody should use all the tools. Generally, you don't have one person use all of the tools. You use experts for building walls, laying foundations etc. when building a house or any advanced project.

      In our company we use many kinds of (proprietary and non-proprietary) scripting, database languages, C++ and Java. But for intricate C++ applications or even scripting applications, I'm pretty useless. Others do those jobs, and they have much more experienced in it.

      Of course, you can use a lot of tools given enough time, e.g. during gradual home improvement. But for larger projects with a tight schedule, let the tools be handled by experts.

  82. Facebook by Anonymous Coward · · Score: 0

    Facebook was grown organically in several different languages, so theirs may be a good example to learn from. To create an easily extensible website, they needed a uniform way of connecting everything together. They created Thrift to cope with this problem, and have released it as open source. From the web page, it supports "C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml."

  83. orthogonal, not random! by Anonymous Coward · · Score: 0

    the original post was about using The Right Language/Tool For The Task(tm).

    That's like using SQLite instead of hand-coding your own equiv. into your app.

    *Not* about using random languages.

    Dividing The Problem up into an orthogonal set of sub-problems, and designating specific solutions to each one CAN be much more capable than OneSizeSortaMaybeFitsMost coding.

    Using different toolkits for different portions of the problem is essentially the Same Thing, dontchaknow...

    Cheers.

  84. Re:Cross platform programming and multiple languag by drolli · · Score: 1

    Matlab licensing issues. Yes. everybody has them. Therefore i usually write my code in a way that the substential part (e.g. reading data files, processing etc.) runs also on octave, while plotting sometimes is matlab-specific.

    I heard the thing about Fortran bein great for vector operations and i tend to believe it, however most libraries for DAQ are designed for C, so i stick to that.

  85. to me it's not about the language anymore... by Anonymous Coward · · Score: 0

    Hi started programming in "2nd generation languages". No it's all 3GLs (Java, C, C++, C#, Python, Bash, whatever), all 3GLs, so I feel quite old.

    However I keep studying and improving and I realize it's really not about the language anymore. It's all about abstraction and modelization.

    OOA / OOD is the name of the game for me nowadays. Working in the RT/E field where you can have one "abstraction" (I don't way to say one "object" for the heavy bias it carries towards certain languages) representing incredibly complex machines made of hundreds -if not thousands- of subparts just feels like magic.

    Kernels are made using ASM and C. Real World [TM] applications having 4 nines of uptime are designed using OO methodologies (excepted for certain very particular, very trivial, mostly DB-only apps, coded mostly in 4 GLs like SQL, but this is not a majority). For everything in between there are toy languages. And there's a use for toys languages.

    I often do quick prototyping piping scripts but once the "real thing" needs to be done, for the Real World [TM], there's no match...

  86. Javascript, not python by cryptoluddite · · Score: 1

    Python gives you the Rosetta stone for a project combining any other languages you'd like.

    I can see where this is going... a Shamwow?

    I'll just cut to the chase. There are and will be two universal interface languages:

    * C for compiled languages
    * javascript for dynamic languages

    Javascript is a really, really simple language (in the same nature as C). On the implementation level it's name:value pairs. C for comparison is basically address:value pairs. This gives a nice simple universal platform that anything else can be built on. Python does not have this simple layer that everything is built on.

    Javascript also has a syntax that can be used in non-file situations such as a command-line (a javascript shell). Javascript syntax is also a direct dynamic language equivalent to C, which has succeeded in the developer marketplace.

    Currently what you find is that Javascript does not have a good interface to the system, without native javascript APIs for open, read, etc, and without a standard set of hooks into C programs. This is entirely because of javascript starting in the web browser, but what you'll see is people developing these and then python going the way of the dodo because javascript can do all the things python does, and better, but it can also do other things such as being the universal glue for dynamic languages.

    1. Re:Javascript, not python by Pope+Raymond+Lama · · Score: 1

      Currently what you find is that Javascript does not have a good interface to the system, without native javascript APIs for open, read, etc, and without a standard set of hooks into C programs. This is entirely because of javascript starting in the web browser, but what you'll see is people developing these and then ...

      I should rest my case here.

      But, jsut for nto being so dry, I will write on:

      The Syntax: javascript doses use an archaic C syntax - which is nice when you have to closely follow the way the processor is behaving inside so you can have maximum effectiveness and even have a good idea of the machine code generated as you write it. The only good reason this syntax was choosen is that it...resembles C! Python syntax drops some punctuation so that the language resembles the way we do think our algorithms when we address our problems (at least in western Languages like English and Portuguese). As other peopl have noted in this thread: it resembles pseudo-code.

      As an example, pick the integer dependent "for" statement - when you can have those in high level. (yes I know there is a "for each" in javascript. I tried to use it once, only to learn it would work only in some browers, so nobody actually uses it)

      Finally: Python is there already, it is not "going" anywhere. One of the strrnghts in python is exactly the ease to open and manipulate files - to single method calls and you have the data in memory, ready for manipulation - and you just admited javascript can't read files at all. And if current javascript engines are faster than the standard python implementation's engine, no problem in there as well: python with it is nicer, higher level syntax can be seamlessly translated to javascript and run on javascript backends for at least two different projects (Pypy and pyjamas).

      No trolling here: just try a bit of Python - it is much better to write (and read) than the C legacy syntax of Javascript.
      And there are a few goodies in the language that javascript don't do, for example: namespaces, and trying to access an as of yet unattributed variable yields an error - it may sound simple, but saves hours on debugging complex incorrect behaviors derived form small typos in variable names.

      That said, I agree with you that the javascript VMs are evolving at huge steps with Apple, Google and Mozilla each trying to deliver a faster engine. And I will be running Python (auto-translated to javascript if needed) on those - on client side web pages. Up to there, I will just use native python to do desktop GUI programing, web server apps, network and server management tasks, videogames, scientfic computing, and so on.

      --
      -><- no .sig is good sig.
    2. Re:Javascript, not python by cryptoluddite · · Score: 1

      And if current javascript engines are faster than the standard python implementation's engine, no problem in there as well: python with it is nicer, higher level syntax can be seamlessly translated to javascript and run on javascript backends for at least two different projects (Pypy [codespeak.net] and pyjamas [pyjs.org]).

      ...which is kind of my point. Javascript is / will be the lingua franca for dynamic languages.

      Finally: Python is there already, it is not "going" anywhere.

      Neither has COBOL, also once the 'plain spoken' language without all that 'algorithmic programming' weird syntax...

      Python syntax drops some punctuation so that the language resembles the way we do think our algorithms when we address our problems (at least in western Languages like English and Portuguese).

      Again, "ADD 1 TO COBOL GIVING COBOL".

      For instance, can you name a single programming language besides COBOL that has not used tokens to delimit blocks?

      One of the strrnghts in python is exactly the ease to open and manipulate files - to single method calls and you have the data in memory, ready for manipulation - and you just admited javascript can't read files at all.

      But really that's a weakness of python then, isn't it, because that only takes a 'standard library' function that's a few lines long... stat, open, read/mmap, return. There's nothing special about it, and a single developer could write that function in a few minutes for spidermonkey, for instance.

  87. ...with varying levels of support by Rob+Y. · · Score: 2, Interesting

    I recently had need to access a large Java library from my C app, and was able to do it pretty easily (with ample help from online forums). So yes, you can embed a Java interpreter in C code.

    But there's a API documented for embedded Java to unload the VM when you're done with it that turns out to not be implemented. Because of this, embedding Java means incurring a pretty stiff memory usage penalty that isn't transient.

    And the 'unload VM' call has stayed unimplemented for several versions of the JRE (at least 1.4 through 1.6). So, while embedding Java in C works, it seems to have less than wholehearted support from Sun.

    --
    Posted from my Android phone. Oh, I can change this? There, that's better...
    1. Re:...with varying levels of support by abell · · Score: 1

      So yes, you can embed a Java interpreter in C code. But there's a API documented for embedded Java to unload the VM when you're done with it that turns out to not be implemented

      Interesting. Out of curiosity, would it have made any sense in your case to have the Java part running as a separate application communicating with the main C one over some IPC channel (sockets, RPC or something else)?

      Cheers

    2. Re:...with varying levels of support by Rob+Y. · · Score: 1

      Interesting. Out of curiosity, would it have made any sense in your case to have the Java part running as a separate application communicating with the main C one over some IPC channel (sockets, RPC or something else)?

      Yep. It occurred to me, because someone in the forum that I turned to suggested it. And that's the way I ultimately went. It works great. But still, that doesn't contradict the impression that embedded Java isn't given second-class status by documenting the obvious need for an 'unload JVM' function and then providing one that doesn't really unload the JVM.

      --
      Posted from my Android phone. Oh, I can change this? There, that's better...
  88. Intriguing, but Microsoft by mkcmkc · · Score: 1

    I'm intrigued by what I've read of .NET. It does sound like a desirable thing, at least when viewed from afar.

    Unfortunately, though, it's from Microsoft and they have patents and god knows what else to garrote anyone that uses it, any time they like. And they have a considerable track record of doing just that sort of thing. You'd really have to be a fool to walk into that one at this point...

    --
    "Not an actor, but he plays one on TV."
  89. Multi-language seems like the norm to me by pebs · · Score: 1

    I think multi-language program is pretty much the norm, so not sure what this is talking about. At my current job, for our products we use PL/SQL, Java (on the server), and C# and ActionScript on the client, with a bit of JavaScript here and there. For some of the automation-type stuff we use some Python and all the typical UNIX utils including the ones that were mentioned (but these are not things that are actually part of our product).

    The typical web app usually requires you to know at least 2 programming languages (some language + JavaScript). Though, JavaScript on the server side and things like GWT are making it possible to code in one programming language.

    learn to do all my programming in C++/Java/(insert other well-supported, popular language here)

    I would insert Python into that list, as the question author already uses it.

    --
    #!/
  90. Re:A bit too general and a bit too fanboy by shutdown+-p+now · · Score: 1

    Hey, it looks like a commercial from Microsoft, vague enough, with the correct buzzwords, talking about big projects done with a few lines of code.
    Entrophy goes somewhere, you can write something with three lines of code but you will have tons of code supporting those three lines.
    Hey, I can write simulate.object(world) and in one line I will have a world simulator ! WOW !
    But what is behind that ?

    The answer is very simple if you have the right background.

    Do you know Standard ML or CAML? Do you understand the benefits that it offers over e.g. C/C++/Java?

    If so, then picture mostly the same thing, but for .NET. That's F#. There are quite a few differences, of course - lack of functors on one hand, "active patterns" on another, etc - but fundamentally it's about the same thing.

  91. Mono by Anonymous Coward · · Score: 0

    What about mono? Supports lots of languages. Multi-platform, modern, large & growing community. Great IDE.

  92. two licks to get to the center by Anonymous Coward · · Score: 0

    in my experience, you never need more than two languages for any project: a fast one where performance counts, and an expressive one where speed of development counts.

    there are some exceptions of course. for example, when you're integrating pre-existing components, or when you use another language as part of your build process (lex, yacc, perl generated source files etc.).

    but for the most part, you'll get the most milage out of two well chosen languages, and many of the classic combinations are X + C.

  93. Interfaces by Anonymous Coward · · Score: 0

    The language in which you write is an interface to various things:
    * The computer's hardware
    * Algorithm libraries that do things you need correctly and perhaps efficiently
    * Other processes on other computers, written in other languages (the focus of much discussion here)
    * Other developers
    The last one may not seem as important as the others the day you choose the language, but it may well be in a year or three. Consider the best language for making clear what you've done, extending it, porting it, etc, and you will have chosen well.

  94. Unix philosophy is crap by countach · · Score: 0, Flamebait

    Tying stuff together with byte streams is incredibly primitive. That's why they had Lisp machines - everything is a Lisp object. Tying the world together with one language to rule them all is a far more powerful paradigm. The trouble is, not many languages are up to the task of such an exalted job. C certainly isn't. Lisp is. Some object languages are.

    The missing link is an object file system. WHen the file system is all about byte streams it gives you the false impression that everything should boil down to byte streams. Wrong answer! Everything should boil down to objects. A Lisp machine + CLOS + an object file system. Common everyday OSes like Linux, Windows etc are holding back the future, but that's where we are right now.

    1. Re:Unix philosophy is crap by TerranFury · · Score: 1

      It might be a little flamey, but the point is valid, mods...

  95. I smell a plug by Requiem18th · · Score: 1

    I'm sorry but this smells like a shameless plug for Microsoft's dot net.

      Dot net is not the solution, because the libraries are still incompatible and dot net doesn't support all platforms, not even most.

      Using dot net you can combine code written in many languages but all this code will depend even if only partially on features only present in Windows, in MS flavor of dot net.

      Take IronPython for instance, IronPython code doesn't run in Python nor Python code can run in the CLR unless you only use the subset of the standard library that has been ported to the CLR.

    --
    But... the future refused to change.
  96. Multi-language Programming? Don't hold your breath by doom · · Score: 1

    No: there is little hope for "multi-language programming", because the barriers are social, not technical. Every time you add a language to a project, you're raising the bar on the number of languages you need to be familiar with to work on that project.

    The academic attitude is that you should learn all languages, and all programming methodologies for the sake of the mental exercise involved, but out in the real world people go hog-wild for things like object-relational mappers -- whose main benefit is to save procedural programmers from the horrors of having to shift gears and think relationally.

    There is one possible bright spot I know of in the multi-language world: the development of things like the Parrot virtual machine, which is intended to be an efficient backend for all dynamic languages, including (but not limited to) Perl 6. It seems unlikely to me that this technical achievement is going to bridge the social barriers between the camps of language advocates, but you never know, maybe I'm underestimating Larry Wall's social engineering skills.

    By the way: the unix "do one thing and do it well" philosophy has almost never been adhered to by anyone. It's more like "do one thing sort of okay, then trick it out with command-line options, configuration files, and customization languages until you can't tell if it's going to fry eggs or go to the bathroom". In reality, piping together small programs is of extremely limited utility: a pipe is too narrow a communication channel -- that's why perl was such a success, it integrated all of the old shell favorites into one process so the pieces could talk to each other much more easily.

  97. Re:Multi-language Programming? Don't hold your bre by doom · · Score: 1

    s{ procedural }{object-oriented}x;

  98. Re:Multi-language Programming? Don't hold your bre by wombat21 · · Score: 1

    I'm ambivalent on this - we use Perl for most of the back end business logic and Java (GWT and POJOs) for the web front end, and it mostly works. Comms are via the DB - actions, changes of status, flags etc - and we dont have to spend a lot of time trying to second guess the other devs. That said, I'm not so crazy about the fact that one of our legacy apps is written in PHP, almost entirely by one guy, and it bears no relation whatsoever to the rest of the codebase. The day he decides to leave, its 'Hey, I noticed that you did some PHP back in the 90s !' ....

  99. Shell scripting isn't going away by GWBasic · · Score: 1

    Shell scripting isn't going away if you have to tie together lots of different programs. Bash and the other variants are still quite powerful; and are well-supported on Windows. (To be frank, I learned shell scripting on Windows years ago, yet I'm just starting to dip my toe in the Unix waters.)

    Today, a lot of tools are moving to use XML. I have mixed feelings about this; as some tools use very weird schemas. However, being well-versed in XML is a "portable" skill.

  100. Last time I checked... by gatkinso · · Score: 1

    ...you didn't have to buy a license for your hammer, pliers, and screwdriver.

    Your saw worked exactly the same building a house as it did on some other platform like, say, a deck.

    Nor did you have problems when you upgraded your hammer.

    When you buy a new screwdriver you don't have to replace all of the screws.

    The hand tool analogy is suspect at best.

    --
    I am very small, utmostly microscopic.