Slashdot Mirror


The Power of Multi-Language Applications

wbav queries: "I've been programming for a number of years, and someone always asks, 'What language do you use, Java or C++?'. Now personally, I find that question a little biased, mainly because, of how I program. Rather than making one massive program, adding in all the support I need to make up for weaknesses in languages, I prefer to make several different apps that call each other, each using the strengths of that particular language. I tend to use C++ as my controlling program, and then execute Perl, PHP, or Java depending on what will give me the best performance for and cause me the least amount of pain to accomplish the task at hand. Do you guys use this kind of method, or do you try to do everything in one program? What advantages or disadvantages do you see in creating one program compared to many programs?"

127 of 413 comments (clear)

  1. What if you get hit by a bus? by easter1916 · · Score: 4, Insightful

    This sounds like a nightmare for PHBs. What if you were to shuffle off this mortal coil, it would be difficult for them to find someone with a similar skillset to maintain those applications, would it not? On the other hand, from a technical POV, this seems eminently reasonable.

    1. Re:What if you get hit by a bus? by aridhol · · Score: 2, Insightful

      Any code that is written as job security is inherintly a bad thing. Reducing the maintainability of the product to the point that only you can work with it prevents errors from being caught. As we've all learned, the person least likely to find an error is the person who made it. When that person is the only one who can possibly find the error...well, you do the math.

      --
      I can't say that I don't give a fuck. I've just run out of fuck to give.
    2. Re:What if you get hit by a bus? by dasunt · · Score: 2


      Actually, being the only one locally with even simple linux skills, that's the exact same fear I have promoting samba over win2k fileservers.


      Just an interesting viewpoint.

    3. Re:What if you get hit by a bus? by zEvilOne · · Score: 2, Insightful

      hm, so you guyz are saying that most developers only know 1 language? Now I'm really scared...
      Basically most languages have at least 1 thing they are good at fe: Java has good networking, and PROLOG is great for AI but please don't open a socket with it..Using languages where they excell is key for rapid prototyping. Personally, I think you shoud really be afraid of the '<language XYZ > isn't performant, I'll code it in C' excuse that some hackers have for there ignorance. development cost comes first and since maintenance is a function of KLOC, you should prefer compact solutions (even if that means gluing code written in several languages together).

      have fun.

    4. Re:What if you get hit by a bus? by Sentry21 · · Score: 3, Funny

      Not to sound insensitive towards my employer's position, but if I got hit by a bus, my company is the last thing on my mind.

      --Dan

    5. Re:What if you get hit by a bus? by Skapare · · Score: 3, Insightful

      This is why it is so hard to find a decent cool job. The PHBs are always looking for the lowest common denominator. And this is despite the fact that there are plenty of good people around to be had. The key to this is their inability to find. Why would a decent programmer or a decent system administrator come to work for a PHB who is so concerned with being able to replace them with any jerk scrounged up off the street in a moment's notice?

      --
      now we need to go OSS in diesel cars
  2. You scare me. by supabeast! · · Score: 2, Insightful

    Is it just me, or does the thought of debugging an app controlled with C code the executes code in PERL, shell, java, and whatever else sound really, really horrible?

    1. Re:You scare me. by MWright · · Score: 3, Interesting

      Actually, I think you could argue that it would make debugging easier. The program is proken down into parts, each doing a certain task. If one part has a bug, you only need to debug that specific part, rather than wading through masses of code that aren't related.

      --
      "But really, I think life is just a game of Mao Nomic." -Purplebob
    2. Re:You scare me. by Ayende+Rahien · · Score: 3, Insightful

      Unless you tend to make the mistakes in the calling code.
      I did, and spent a couple of hours trying to find out what is wrong, because I knew what I *meant* to put in the calling code, and never tried to look up what I actually wrote.

      --

      --
      Two witches watched two watches.
      Which witch watched which watch?
  3. well by djweis · · Score: 5, Interesting

    I can see some merit in that, but if you pass on maintenance to someone else, you could have just increased the number of people required to support the project, or require the new developers to learn more new languages before they can be useful. It's easier to find someone skilled in foo than to find someone that knows foo, bar, baz, etc.

    1. Re:well by ez76 · · Score: 2, Insightful

      I can see some merit in that, but if you pass on maintenance to someone else, you could have just increased the number of people required to support the project, or require the new developers to learn more new languages before they can be useful.

      I see your point, but if all teams used this reasoning, how would better languages (technologies) ever get developed? How does a system evolve when it has reached the limits of its underlying language/technologies?

      There is always a learning curve when learning a new language/technology, but the more experienced (or talented) you are, the less steep this curve is, and the less a cause of concern it becomes when considering future maintenance requirements.

      I don't think I'm alone when I say I actually look forward to working with a new language/technology, because it increases my skill set. At this point in my career I've worked with enough tools/technologies that I don't balk when a new one falls into my hands because I know it will probably work pretty similarly to others with which I'm already familiar: very few (good) technologies these days are so revolutionary as to confound even veterans.
    2. Re:well by dhamsaic · · Score: 5, Funny

      And that, my friend, is called job security. :)

      --
      Every once in a while I like to masturbate a new word into my vocabulary, even if I don't know what it means.
    3. Re:well by jabbo · · Score: 2, Troll

      Dude, this is like saying that you shouldn't use VB or shell scripts because then you'll have to hire a [language Foo] guru.

      Anyone who can understand C++ or real C code can pick up Perl or Python or PHP in a few hours.

      --
      Remember that what's inside of you doesn't matter because nobody can see it.
    4. Re:well by Neon+Spiral+Injector · · Score: 2, Insightful

      People always seem to say that. Sorry I don't want to stay in the same job for the rest of my life. And I'd rather not have people curse my name after I leave.

      Of course if you if you leave a complicated, but otherwise well functioning system perhaps they'll say "wow, that guy was really sharp, too bad we didn't realize what we had, now we are going to have to hire 4 people to replace him." That is how I'd like to be thought of.

      Oh well...

    5. Re:well by Nelson · · Score: 2, Interesting
      I agree. I hope he described his system poorly and really meant something else.


      The fact is, lot's of large projects are multi-language based right now. Not always in ways you might expect but for example, a large project I worked on for a very large and successful computer company had a large C++ code base. It has a set of no less than 35 support "scripts" written in Korn shell, it has an elaborate build process written in "make" which has portions that break out into Korn or Bourne shell to read environment variables and do various things. If you want to be pedantic you could easily point to pure C in the code base as well... And that doesn't include the java based client that was written later. Honestly I don't know of an easier or better way to run it, not for something like that. It was a very large "system" and not really an "app" or a "program" there were dozens of programs in the system that were sold as a package.


      With web based apps I don't think it's terribly uncommon to have C or C++ doing some kind or service oriented task and then have something like perl or php interface to it and format some HTML. I could easily see a C++ server with some support scripts in Bourne shell (perhaps entries in /etc to start it up) feeding XML type data to a PHP or Perl script running on apache or something like that. As long as things are kept sane I could see it being a very easy way to develop an app and probably a sane one. I don't see someone writing C or C++ code to do what PHP does any better than PHP does it or producing the product very quickly. As a consultant, most of my clients would gladly pay for a few lines of php if it means I get done in 2 months instead of 4 months.

    6. Re:well by ekrout · · Score: 2

      That may be the standard (and evil) practice of a significant percentage of programmers who work in the private sector, but I really hope that not documenting code and making simple code difficult to analyze don't spread to other areas. If you think about it, research is one area where associates must share information and newly-discovered ideas in order to extend their knowledge in a specific field. The world would be a better place without obscure code lying around on every machine.

      --

      If you celebrate Xmas, befriend me (538
    7. Re:well by Aceticon · · Score: 2

      I can just see the talk:

      Manager 1: So, you finally fired the guy?
      Manager 2: Yes, we finally did. We gave him a company car when he demanded one. We gave him a boat when he demanded one. We gave him each and every salary raise he asked for ... except this last one ...
      Manager 1: What happend with the last one?
      Manager 2: He would've costed us more than hiring 4 guys to take his place, so he became redundant...

  4. Optimization across processes can be tricky... by gatkinso · · Score: 4, Interesting

    ...just the cost of the context switch can be enought to deter one from this.

    Cross platform development just got that much more complex.

    Add in the cost (not always $) of additional development tools, maintaining such a beast, and obtaining the required knowledge/skills can make your approach daunting - esp on large scale multideveloper projects.

    --
    I am very small, utmostly microscopic.
    1. Re:Optimization across processes can be tricky... by dmelomed · · Score: 2, Insightful

      However, the cost of context switch, though very high for an OS, is not high for some installations. Depends on application. Your disks might as well be the bottlenecks. Profiling is necessary in any case.

    2. Re:Optimization across processes can be tricky... by horster · · Score: 4, Informative

      > ...just the cost of the context switch can be
      > enought to deter one from this.

      not really - breaking up your app by process adds a few efficiencies with a nice, simple, easy to understand model.

      1. multi-processor scaling, generally a no brainer with seperate processes, if they are broken up intelligently

      2. reduced memory foot print - well broken up processes mean you don't have to worry about loading up a ton of libraries all at once, you can let the os deal with memory as processes are kicked off and finished

      3. security - different processes can be run as untrusting groups, a great boon especially if one processes needs to run as root!

      a great example of this is qmail, the original mta that took a monolithic app like sendmail and used the unix process model to break it apart into well defined pieces. the result is a faster, more secure, easier to understand and generally much simpler application.

      h

    3. Re:Optimization across processes can be tricky... by lkaos · · Score: 3, Interesting

      I hear these arguments alot, but they are just not right.

      1. multi-processor scaling, generally a no brainer with seperate processes, if they are broken up intelligently

      This is what threads are for. Now, there has to be communications amoung the processes and the overhead to accomplish this is greatly reduced if done in a single application. Now, you can bitch about programming threads but if you can break the program into entirely seperate processes, you shouldn't have to worry about race conditions since you code is already so seperate.

      2. reduced memory foot print - well broken up processes mean you don't have to worry about loading up a ton of libraries all at once, you can let the os deal with memory as processes are kicked off and finished

      Well, one would hope that if multiple processes need to be using a common library that it be made into a shared library. There is only ever one instance of a shared library in memory. The little bit about avoiding memory leakage by having processes restart frequently requires a great deal of latency when actions occur. If your application can handle this latency, and you want to be that lazy about programming, then just have your application restart every n minutes.

      3. security - different processes can be run as untrusting groups, a great boon especially if one processes needs to run as root!

      There are very few circumstances when a process should ever have to run as root. Why do a bunch of apps have to run in a group whereas a single app can't? If an application absolutely requires some bit of access to resources only given to root, then having that application just exist presents a huge problem since you are effectively making a resource that many smart people think shouldn't be given to arbitrary applications and giving it to them.

      qmail is written in C, and this is definitely the C way to do things, but in C++, objects present a much cleaner interface to all of this. That is the beauty of OOD. qmail really should be written in C++ if there is such to encapsulate things. (although OOD is accomplishable in C, albeit very, very ugly).

      --
      int func(int a);
      func((b += 3, b));
  5. Maintainability by cfadam · · Score: 4, Insightful

    When you start using several different languages, you now need a person with several skills to maintain it. Trying to find a mid-level programmer who is strong in 5 unrelated languages is much more expensive than a mid-level programmer with 2 primary languages in his toolbox.

    Personally, I write something end-to-end with one language because its nice to be consistent.

    - A

    1. Re:Maintainability by cmowire · · Score: 2

      Most programmers I know who actually have a CS degree or equivelent (That didn't come from Bob's Orange Smoothie and School of Computer Science) can pick up a new programming language fast enough to be useful.

      But then, my definition of a mid-level programmer must be different than yours is.

    2. Re:Maintainability by hearingaid · · Score: 2, Insightful

      5 unrelated languages?

      Are there 5 unrelated languages?

      Okay, let's see. There are assembly languages. There's ALGOL-family languages, which include every language I've seen mentioned here except maybe Perl (and it's usually written in an ALGOL kind of style). There's LISP, Forth, Prolog.

      Okay, there are five unrelated languages. But C, Java, C++, Pascal, ADA, FORTRAN, COBOL, BASIC, Modula-2, and lots of others are all related, and frankly are pretty easy to learn once you know one of them well.

      --

      my old sig used to be funny, but then slashcode ate it and now it's not funny anymore

  6. use 'em all by gerardrj · · Score: 2, Interesting

    I personally like the 'use whatever gets the job done' technique.
    Writing differnt parts of apps in difernt languages is the easiest way for me to accomplish a task, and to support the software later. For instance, writing some things in AWK or PERL will dramatically reduce the complexity of a C++ program. I Write some things in C or Assembly (I gave up machine language with my 6809) for speed or source code control.
    There is something to be said for developing a library of code all in one language, but for my purposes the multi-language approach works best.

    --
    Article X: The powers not delegated... by the Constitution...are reserved...to the people
  7. oh god yes by jabbo · · Score: 5, Interesting

    I'd go insane if I tried to use a compiled language for frequently-changing applications (eg. web interfaces to purchasing systems, database large object manipulation & indexing, etc.) but likewise I'd grow old waiting for things to happen if the cores weren't in C.

    Personally I dislike C++ because I find it harder to port than ANSI C. But I wrote plenty of it when I was learning how to program (before I learned Scheme and Perl and Java and got some latitude in my paradigms). Either C or C++ is great for speed and hooking into the OS or an Apache module or whatever. It's also less tempting for admins or rookies to mess with C code because bad code may not compile.

    On the other hand, object-oriented (or at least modular) PHP and Perl code, and decently-written Java code, is much easier to adapt to changing demands. I stick with PHP and Perl, myself, and I use Perl as kind of a glue-core layer between C applications and PHP interfaces. If I had more time I'd probably write the hooks as PHP extensions, but Perl is just so damn powerful when you use it right.

    I'm not sure what people are thinking when they specify that everything on a project "needs" to be done in Java or whatever. It's not particularly hard to use my code, since it's all just calls to libraries that automagically do the hard stuff. More importantly, I tend to use POD or Javadoc-style comments in everything, and don't put it anywhere else. That way I am forced to keep it all up to date, because that's where *I* remind myself what arguments to feed what methods!

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
    1. Re:oh god yes by pi_rules · · Score: 5, Insightful

      I'd go insane if I tried to use a compiled language for frequently-changing applications (eg. web interfaces to purchasing systems, database large object manipulation & indexing, etc.) but likewise I'd grow old waiting for things to happen if the cores weren't in C.

      Tisk tisk... if it's changing so often why it is integrated right into the logic of the code? Simple, it shouldn't be. Find a way of breaking the presentation layer out of the actual code; and write a config file for other options, one that's expandable. Don't suffer from C programmer's diesease thinking that changing #define statements and recompile is a "user friendly" way of doing things.

      On the other hand, object-oriented (or at least modular) PHP and Perl code, and decently-written Java code, is much easier to adapt to changing demands.

      I can't really think of any basis for this to tell you the truth. Well designed c/c++ projects shouldn't be any harder to modify than any other language. If they are then the initial design is too inflexible which usually means the original coder didn't know the language at hand well enough to properly put together a project.

      I'm not saying that you've picked the wrong languages for whatever you're working on... just disagreeing with the overall "blanket" type nature of the post.

    2. Re:oh god yes by SecretAsianMan · · Score: 3, Funny

      got some latitude in my paradigms

      Yeah, I bet it really helped you to leverage your synergy to grow your productivity.

      --

      Washington, DC: It's like Hollywood for ugly people.

    3. Re:oh god yes by foobar104 · · Score: 2

      There's an old adage that sooner or later every argument will devolve to the point where one side or the other compares the subject of the argument to Hitler. At that point, the argument is over.

      (Too lazy to look up a source for that right now. If you know who said that first, share and enjoy!)

      Similarly, every discussion of the merits of one programming language or practice versus another will devolve until eventually somebody plays the "well-designed system" card.

      "In a well-designed system, changes would be easy."

      "In a well-designed system, implementations would be both opaque and portable."

      "In a well-designed system, code would be self-documenting."

      Now that we're through counting the merits of well-designed systems, could we please get back to talking about real-world experiences?

    4. Re:oh god yes by SecretAsianMan · · Score: 2

      Snort! Thank you for the comic strip link. It rocked my uncannily Dilberty world! Now, please excuse me while I try to stop rolling on the floor. :)

      --

      Washington, DC: It's like Hollywood for ugly people.

    5. Re:oh god yes by adubey · · Score: 2

      *sigh* another know-it-all :)

      Tisk tisk... if it's changing so often why it is integrated right into the logic of the code?...write a config file for other options

      Right. C isn't interpretted. Don't be stupid and use an interpretted language. Just be smart and write an interpretter in C!!

      There are definately cases where this approach makes sense (i.e. if you're writing a web server for millions of admins who really don't want to tinker with your code). There are cases where it is overkill (i.e. you need to toy with the UI of a small custom app). The danger of being a know-it-all is that you give people hammers when they definately don't have nails.

      I can't really think of any basis for this to tell you the truth. Well designed c/c++ projects shouldn't be any harder to modify than any other language. If they are then the initial design is too inflexible which usually means the original coder didn't know the language at hand well enough to properly put together a project.

      I can think of plenty of basis for this. Have you ever used any of the other languages? Have you ever felt the freedom from not having to chase stack overwrite bugs or memory leaks? Of not having to design your interface to track memory AND implement an algorithm rather than just designing it to implement an algorithm? The time spent on doing these needless tasks makes things harder to modify. And these are tasks which C++ forces you to do.

      ...just disagreeing with the overall "blanket" type nature of the post.

      My sentiments exactly.

    6. Re:oh god yes by swillden · · Score: 2

      Right. C isn't interpretted. Don't be stupid and use an interpretted language. Just be smart and write an interpretter in C!!

      Or, even better, use one that is already written in C. It's a bad idea to use a full-blown interpreted programming language where a simple tool to define name-value pairs will suffice. If the reason isn't obvious, I'll leave you to ponder it for a few years. You'll figure it out.

      I can think of plenty of basis for this. Have you ever used any of the other languages? Have you ever felt the freedom from not having to chase stack overwrite bugs or memory leaks? Of not having to design your interface to track memory AND implement an algorithm rather than just designing it to implement an algorithm? The time spent on doing these needless tasks makes things harder to modify. And these are tasks which C++ forces you to do.

      I don't know about the other poster, but I've used a great number of different programming languages. I've also used C++ since 1990, and I can tell you that if you're having to deal with stack overwrite bugs, memory leaks and implementing a memory management system, you're not using C++ correctly.

      Stack overwriting is generally caused by using C-style strings and arrays. Don't. Use the STL or, if you can't use that because you need to port somewhere that doesn't have a decent C++ compiler, find or write classes to fulfill these purposes.

      Memory management in C++ is a breeze if you use smart pointers religiously. The only decisions I ever have to make about memory are performance-related, really. I could just use reference-counted smart pointers for everything and not worry about it (well, simple reference counting doesn't deal with cycles, unlike a real GC, so there is some need to watch out for those). But reference counting is a bit inefficient and more often than not I know that the lifetime of a particular object is bound to an ownership relationship with a stack variable or another object, so I can use an ownership-passing smart pointer. Also, I often know that instances of a particular class are going to be allocated and destroyed very frequently, so I choose to use a pooled allocator, rather than relying on general-purpose memory management.

      Not only is memory management no big deal in C++, neither is any other sort of resource management. While garbage collection frees the programmer from worries about managing memory, it is no help whatsoever with other resources. C++ destructors are a very nice general-purpose resource management tool. I can easily close files, release drawing contexts, deallocate semaphores, etc., etc., etc. in precisely the same way that I free blocks of memory. Yes, I know Java has finalize methods and, no, they're not useful.

      C++ does provide all of the power required to make programming quite safe and easy, if you use it. It's far from a perfect language (it's complexity is such that I hesitate to use it on any project with a large number of novice programmers) but please don't put down the language just because you haven't learned how to use it correctly.

      BTW, all of the above should make it clear why I think it's really inaccurate to discuss "C/C++" as though it were two dialects of one language. C++ is vastly more usable than C, one one has learned it.

      --
      Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
  8. Release and maintenance problems. by Hiro+Antagonist · · Score: 5, Insightful

    I will do this sometimes for code that is intended for short-term, internal-only use, as I can often save quite a bit of valuable time.

    If the code has to be maintained, forget it; what if I leave the company? Not only does my employer need to find someone who can code in C, C++, Java, Perl, Python, shell script, and assembler, but they have to find someone who knows how all the languages work together. Debugging is also a bit more difficult, as you have to jump between languages, and it can nastily confusing.

    For code which is supposed to be release-quality, this is out of the question; you can't expect all of your clients to install Python because GUIs in Java are grotty, or install Perl because you don't want to screw with hashes and regexps in C. Release code also needs to be maintained, and there is going to be some developer turnover; it'll be easier to replace coders who leave when you don't need to list five languages as "required" on the employment-availablity posting.

    --

    --
    I Hit the Karma Cap, and All I Got Was This Lousy .sig.
    1. Re:Release and maintenance problems. by Atzanteol · · Score: 2, Insightful

      I didn't get the impression that he was talking about using 5+ languages on a project. Two or three is perfectly reasonably, under certain circumstances.

      I personally use Perl, C/C++, and PL/SQL in tandem with each other. Each language performs certain tasks better (or easier) than the other. I find this can make supporting the code 'simpler.' It's much easier to write a small PL/SQL stored proc for some actions than to muck around with C/C++ for the same task. And Perl is great for automating file movements (ftp files from a to b, run processes q and z on them).

      Use what gets the job done. It's not *that* difficult to find developers who know 2 or 3 languages.

      --
      "Ignorance more frequently begets confidence than does knowledge"

      - Charles Darwin
    2. Re:Release and maintenance problems. by KyleCordes · · Score: 4, Interesting

      [Not only does my employer need to find someone who can code in C, C++, Java, Perl, Python, shell script, and assembler]

      You are certainly right in the extreme case, but this is often overdone. If your employer is not hiring people who can learn a bit of Python when they need it, perhaps they should hire different people. If you can save a lot of time and money why adding a second language to a project, it may well be worthwhile. Adding the 5th language very likely is never worth it.

    3. Re:Release and maintenance problems. by Malcontent · · Score: 2

      Two things.

      "what if I leave the company?"
      You should exhibit loyalty and compassion towards your company exactly as much loyalty and compassion they have towards you (and maybe less).

      "You can't expect all of your clients to install Python because GUIs in Java are grotty"

      This is rather irrelevent. I can't count the number of times MS made me install IE or patch IE or install the latest version of MDAC or the MSI installer to install some other program. If MS can make you install 60 megabytes of stuff just to run it's XML parser then why should you care if someone has to install a tiny perl interpreter.

      --

      War is necrophilia.

  9. Maintainability by Xawen · · Score: 4, Insightful

    I think that by designing one larger program, you leave the maintainer (even if it is yourself) with an easier job. It is much much less painful to use one compiler to change one set of source files, in one language. Maybe it's just me, but I always seem to have problems shifting gears between more than two languages at once. And C compilers don't like perl a whole lot.....

    This goes double if your code is open source. There is enough hard to read, poorly organized code out there that anything that is unified (in style, language, etc.) is helpful. Call me old fasioned, but simpler is usually better.

  10. Generally, a bad idea by Ars-Fartsica · · Score: 5, Insightful
    People mix languages out of necessity for accomodating legacy code.

    Mixing multiple languages creates huge maintainence issues - will the API for integrating the languages give you enough breathing room in the future?

    How about performance? Integrating multiple languages means invoking multiple runtimes and address spaces.

    What about debugging? The small amount of experience I have had integrating Perl and C clearly indicates that debugging large apps written in multiple languges is extremely difficult - forget about your IDE or traditional single debugger.

    1. Re:Generally, a bad idea by evbergen · · Score: 2, Informative

      Depends on your interfaces, of course. If you want to bind the modules together by having them freely call each others functions, this can and probably will become a debugging nightmare.

      However, for those cases where you'd already go for a multiprocess design, using a clean protocol that's spoken between the modules, it can be quite a good idea to exploit the simple fact that some languages are better at some things than others.

      Eg. my current project, OpenRADIUS has a C core that does low level packet handling, job scheduling, etc., and a module that happens to be written in Perl to easily deal with simple and more complex formatted ASCII tables.

      If I would have had to write that module in C as well, it would *definitely* have taken me a lot more time.

      --
      All generalizations are false, including this one. (Mark Twain)
    2. Re:Generally, a bad idea by tgke · · Score: 2, Insightful

      You are right that languages are often mixed because of legacy code, and mixing languages can create maintanance issues.

      But, those issues can be reduced if a proper the entire system is properly design, with clean and well documented interfaces.

      And performance IS an issue, but only in certain, often small sections of the entire code base. Rapid development in a protoyping language as Python, and optimizing using compiled C modules does not sound like a bad idea to me.

      Time you win during the development cycle can be well spend in the important testing and refactoring stages.

      And don't worry, in larger projects, refactoring WILL be needed. ;-p

  11. Languages are a means not an end by javester · · Score: 3, Insightful

    Use a screwdriver to drive in screws. Use a hammer to drive in a nail. And sometimes, if I need something really quick and dirty, you can just staple it in.

    Having language religion is bad!!!!

    Also, there's much to be said about the life of applications. Save for COBOL, how many old-style two-tier client-server apps are still around with no plans of being retired.

    Also, I second the motion that using scripting languages is not a bad idea. For those parts of a system that get executed repeatedly, it makes sense to go with a compiled language.

    For those program paths that are called occasionally, its not a bad idea to use "glue code".

    1. Re:Languages are a means not an end by peteshaw · · Score: 2

      I am reminded of the expression

      "If your only tool is a hammer all your problems begin to look like nails."

      Look at what development is going on today. VB and Java represent a huge and growning number of large business data driven apps. Why? Ease of use, rapid prototyping, simple(r) debugging.

      But these languages are limited by their design. VB is platform dependant, and is a good arms length from the OS. Also, it isn't very fast. Java is slow too, and its platform independance separates it from the OS as well. .Net is another framework of 'Glue' languages.

      Any of these, require occasional tweaking with something more low level, and that usually meanse C++, Delphi, ANSI C, whatever.

      --
      www.avacal.com -- the home page of pete shaw
  12. Policy... by AcidDan · · Score: 2, Insightful

    Actually, I can agree with the "right tool for the right job" which is what you are saying however, I can see points for the other side of the coin (especially in a large corporate environment).

    - Standardisation upon one language and/or platform drops training costs for the org (and keeping people up to speed to maintain parts of the system).
    - This allows one guy on one project to be shifted to another with minimal re-training (just some familiarisation time).

    I will make the point though, that as developers we should be able to language-hop easily as we know the concepts common to all languages.

    However, from a business point of veiw - it does make sense to put all the eggs in the one basket (though at times you feel like all your problems look like nails because you've been given a 'hammer' to work with).

    -- Dan =)

  13. A little simplistic by harangutan · · Score: 5, Insightful

    There are a lot of factors you haven't mentioned: will you need to reimplement the same features in multiple languages? Will you have messaging between programs that don't support identical datatypes and structures? Will you have unicode support in all the languages when you need it? How about futureproofing? Will all those languages continute to have the necessary degree of orthogonality two years from now when you need o overhaul the system to meet some new requirement or paradigm?

    These are all risks that you take, and this is just off the top of my head.

    I mix languages on occasion, mainly for client-server apps where I need the server to be fully optimized and not necessarily portable, but the client must be portable and can stand to be less optimized. But you introduce a lot of risk and redundancy if you don't have very good reasons for doing everything you're doing.

  14. Not a fan.. by Xzzy · · Score: 4, Informative

    I spent some time dorking with tcl a ways back and it's always been touted as a "glue" language for bringing lots of pieces together.

    Ultimately I decided I didn't like it because unerringly, at some point, you'll want your "pieces" to talk to each other more intimatley than your "glue" will provide (without substantial effort anyways). Keeping my pieces to modules or at the very least individual C libraries means I can have my stuff talk amongst itself in whatever form the language provides.

    My suspicion is that having lots of executables laying around increases run time / memory usage as well because the system has to deal with that many more processes getting created.

    And that's not even getting into the readability issues of having a piece of software use a random number of different languages..

    The only "language" I've ever found the glue idea even remotely useful was in shell scripting, because the massive bulk of my scripts are just done to automate repetitive shell commands and it's a lot easier to type ./foo.sh than it is to dork with the up arrow.

  15. Languages are tools by ez76 · · Score: 2, Insightful

    I think your approach (and ones similar to it) make the most sense.

    Programming languages are like sets of tools; the challenge is picking the right set for the job(s) at hand. I'm sure that given enough resolve, one could code a 3-D FPS game in perl (knowing our community, this has probably already been done). You can also get away with using a butter knife instead of a powerdrill in some instances. It doesn't mean it's the best use of tools or technology.

    I've always been puzzled by people who are fanatic about a single language (or any single technology for that matter). You'd never hear a carpenter say, "I always use a chisel and hammer, no matter what the task."

  16. YIKES! by geekoid · · Score: 2

    what a nightmare!
    Here is that Bank software you waned, the interface is written in VB, Java and C++, the middle tear is in C, PERL, and fortran, and the back end is cobol, fortran and informix.
    yeah, that would be good.
    Too often when someone says a language has a weaknes, what they really mean is "Its too hard to learn the language really well".

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    1. Re:YIKES! by scott1853 · · Score: 2

      Was this suppose to be funny? You've actually descibed my perception of corporate applications to a tee. Lots of little individual things written in whatever language the consultant of the year wanted to use.

    2. Re:YIKES! by EnderWiggnz · · Score: 2
      ahh yes, the average IT type -

      USE ONE LANGUAGE!!! we are all idiots who can only learn one language, and we MUST use it for every single project, on matter how inapplicable it is.

      Informix 4GL doesnt have file access? who cares, make a temporary database table!!!

      VB isnt known for its alogorithm capabilities, screw that, write a schedulign algorithm in it...

      BUT whatever you do, dont use something that works, everything is a nail, and we've got this golden hammer.

      no thanks, been there, done that. you end up with code that is written in languages ill-suited for the purpose.

      --
      ... hi bingo ...
  17. Re:A good idea... maybe... by brsett · · Score: 2, Insightful

    Well performance might not be so much a problem as scaling. Spawning threads and processes has some amount of overhead, and in some OS'es can lead to stability problems. If you were to take this proposal too far you could write applications that essentially became fork bombs, or processor pigs.

    I do think it is a good idea to give up the quest for teh single best programming language, currently there are just too many tradeoffs that programming languages and applications need to make for a single programming language to be sufficient, on the other hand I would suggest picking a single programming technique and applying that to your entire application at least. For example, you might use only imperative languages that support real objects, or you might use strictly procedural techniques. But with good enough reason you could vary from that (of course the maintenance costs might skyrocket in that case -- but a prolog based rules system could be cool in a Java business app -- and incredibly slow).

    Offtopic: regexp and regcmp are very good parsing utils for C. In general I don't have any problems with Perl, but I am of the opinion that some of its touted advantages don't exist for good C programmers -- of course that is a skillset many do not wish to attain, and I can hardly blame them

  18. Depends by Frijoles · · Score: 3, Insightful

    "Do you guys use this kind of method, or do you try to do everything in one program?"

    Depends on the situation. In a workplace environment, which is where I do most of my coding, we code in the same language. I just attended DevDays from MS. One of the strengths of the .Net CRL that they touted was that each developer could write in whatever language they were comfortable with. mkay, that's nice. The problem is when A) programmer quits B) programmer goes on vacation C) programmers is assigned elsewhere. Just my opinion, but in a workplace environment, a standard language should be adopted. Otherwise you have another programmer who doesn't know Cobol trying to debug the app.

    What you do on your own time, that's a different story. Whatever suits your fancy.

    --
    -Frijoles-
  19. Boy, I hope I never run into one of your programs. by Wakko+Warner · · Score: 2, Interesting

    Imagine trying to install it on a machine without one of the 80 billion interpreters or libraries or virtual machines your code needs in order to run? Is it multiplatform? How do you maintain this stuff? Do you get paid to write it, or is this simply stuff you write for yourself and use by yourself? I guess, if the former, there's quite a bit of job security there. But I'd shoot code that looked like that, just by the sound of it.

    --
    "Remember when the U.S. had a drug problem, and then we declared a War On Drugs, and now you can't buy drugs anymore?"
  20. What do you mean? by aspillai · · Score: 2, Insightful

    I'm confused about what you're saying. Are you saying you break your problem into small chunks, solve those chunks in the language most suitable, and put them together? If so, how do you call the other chunks? Using exec() or other synonymous calls or using CORBA or SOAP? That's the main problem I have with this.

    If I'm solving a large problem, your solution makes sense. I can use CORBA or SOAP to do the parameter passing and the solution will be elegant. The only problem will be the learning curve. I'd have to learn the protocol used. However, it'll pay off in the long run because each is solving the problem the most elegantly. You'd save performance and maintence costs. (Provided you're actually know the multiple languages well and even then, in a large team it'll be iffy.) In a large program, using exec() is probably not acceptable. (Unless, you really know what you're doing.)

    But what if I'm solving a small problem that nonetheless can be broken down into smaller chunks that can be best solved using different languages. Would I? Probably not, because the solution you're proposing would complicate the entire development cycle. I'd have to build the small chunks and then try and assimilate them together some how. The problems that I can encounter are a lot and it's not worthit. Also, the increase in performance will be negligible because it is a small problem.

    Having said that, for fun, I'm thinking of doing what you're proposing. I know it'll be complicated and I'll have headaches, but it's fun programming something like that.

    Me

  21. My point of view by Ayende+Rahien · · Score: 2

    First, I think that a developer needs to know several languages, both LLL and HLL.
    Now, I think that it's prefferable to do a project in one language, that way it's much easier to mention, and you don't have to move from one way of thinking to the other.
    That said, there are some inherited weeknesses and strengths to languages, which is why I think that sometime it's important to mix languages. (For example, creating a fortran library to do the number crunching, or c dll for string handling)
    When I mix languages, I usually end up in writing roughly 90% of the application in one language, and using another just to support its weak points (VB for major string handling, frex.)

    --

    --
    Two witches watched two watches.
    Which witch watched which watch?
  22. doh! by Chundra · · Score: 5, Insightful

    Looks like you have it backwards. If you're going to mix languages, why not do your control code in some high level language and then call your c++ or c from that? I guess it really depends on what you're doing, though.

    Lately I've been using python a good deal. I write the major features in python because it's wicked fast and yet scales well. Once you have a program written in python it's pretty damn easy to convert modules to C or C++ (especially with SWIG) for optimization.

    My reasoning is simple. Hack out the major features quickly, look at where your bottlenecks are, then optimize those 1) in python if possible (maybe just a bad algorithm)...otherwise 2)in c/c++. It just seems counter productive to me to have some c/c++ code calling modules written in some higher level language. The glue languages of choice are perl, python, and shell.

    Then again, if what you're doing works well for you, by all means use it.

  23. Quite the Contrary by spoonboy42 · · Score: 3, Informative

    Actually, I've been working on a pretty large programming project recently, and I find that breaking up the task into several different small programs, written in different languages for convenience, actually makes debugging easier. This allows me to test each program chunk individually under controlled conditions. Compare this to a single monolithic executable, and seeding loops with printf commands to figure out just where it segfaults. This also enables me to identify problem code much earlier in the development process.

    --
    Anonymous Luddite: "What do you think of the dehumanizing effects of the Internet?"
    Andy Grove: "Not Much."
    1. Re:Quite the Contrary by plover · · Score: 5, Interesting
      I, too, am working on a large programming project. It's primarily written in C++, but I use other languages to write quick-n-dirty tests for the objects.

      A curious side benefit I've found is that when I cross language boundaries, I tend to expose more flaws than if I just had a small main() testing the objects. Crossing language boundaries forces me to code the interface to each object very properly and distinctly.

      John

      --
      John
    2. Re:Quite the Contrary by Ayende+Rahien · · Score: 2

      I think that if you need to use different language to break the task to small parts, then you might want to review your design methods.
      You are supposed to do it anyway, after all.

      --

      --
      Two witches watched two watches.
      Which witch watched which watch?
  24. This is not human languages! by bluGill · · Score: 5, Insightful

    this is computer programing. I know people who tought themselves Basic in a morning. I belive that I can learn any computer language you wish me to program in, in under a week. I can read well written programs in most lanuages without any learning time. I'm not special, any compitent programer can do it.

    However after attempting to teach myself Spanish for 6 months I still couldn't hold even a basic conversation (and I had a year of spanish a few years back). Once I learn spanish I won't have much a head start should I need to learn Russian or Chinese. Learning those two wouldn't give me much advantage if I need Hebrew.

    People think of programing languages as if it is something special to know a lot. Really you know zero (most people), one (a lot of people, normally basic), or all of them, including ones that have not been invented yet, though you will need a refresher before you would use one.

    Mastering a programing language takes expirence, and that only comes with time, but a good programer in his first week with a new language can already prove that good programers are 10 times as productive as bad programers, even if the bad programer has been using that language for 10 years.

    I know people who know 20 programing languages, I'm not impressed. I know people who are fluent in 17 human languages, and I'm impressed. In school I was once given the task of learning 12 languages in 10 weeks, and I had 2 other classes besides. It was no big deal, in fact learning 3 languages was trivial compared to using one language (C) to write a program in anouther class, even though I knew that language very well.

    Use the language that is right for the job. TCL is designed to make your programs scriptable. Perl is great for string manipulation. There is no reason you can't combine both, someone who needs to maintain you code will not find it difficult to learn the ones needed.

    PLEASE PLEASE PLEASE make sure that you write nice, well commented code. As an example of the above, monday I was digging into someone else's C++ code. Even though I haven't done C++ is years, it was no problem reading C++. However the lack of comments was a problem. I can make changes, but I can't be sure I make the right ones without knowing what the programer was thinking. this is far more important than what language it is written in.

    1. Re:This is not human languages! by RedWizzard · · Score: 2
      this is computer programing. I know people who tought themselves Basic in a morning. I belive that I can learn any computer language you wish me to program in, in under a week. I can read well written programs in most lanuages without any learning time. I'm not special, any compitent programer can do it.
      Yes it is easy to pick up a new language. Languages are not the problem, it's the libraries. If the multi-language apps are all using the same libraries or are fairly self contained, then fine. Otherwise there's a lot of knowledge invested in the different libraries each langauges is supported by.
    2. Re:This is not human languages! by scrytch · · Score: 5, Interesting

      Imperative languages are pretty much isomorphic. Learn one that's sufficiently rich and you pretty much know 'em all.

      The story gets different when you start with other paradigms. Try teaching yourself Haskell or prolog in a morning. And it's languages like that that are often a reason to pick one over the other, because the problem space demands it. I could write a web form processor with db access in any language ... but trying to write a fraud detection system in C is like trying to build a house with a hammer (actually the fraud detection system I'm thinking of was written in APL ... yowza)

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    3. Re:This is not human languages! by Lumpy · · Score: 2

      I belive that I can learn any computer language you wish me to program in, in under a week.

      you obviously never experienced perl.

      Some parts of perl confuse even Larry Wall at times.

      The only language on the planet that is obfuscated from the start! (That is a loving joke... I love to program in perl... but some expressions are fricking bizzare.)

      --
      Do not look at laser with remaining good eye.
    4. Re:This is not human languages! by hearingaid · · Score: 2

      Sure, some bits are hard.

      But realistically, a good programmer can learn perl well enough to do useful things with it in a week.

      The only basic thing that's hard is regex, and that's not unique to perl.

      --

      my old sig used to be funny, but then slashcode ate it and now it's not funny anymore

    5. Re:This is not human languages! by Pseudonym · · Score: 2

      I know Prolog, and I consider myself a fast learner. (Java 1.01 in one day.)

      Writing interactive code to determine family relationships in Prolog is easy. Writing a full application which scales is much, much harder. When your medium-sized program fails with no explanation or space leaks for no apparent reason, you really have to know the tricks.

      You're right, though. Once you know the paradigm, adapting to anything else in that paradigm is easy. If you know Lisp, Haskell, ML and Erlang will all come easily. If you know Prolog, Mercury and Goedel will come easily. If you know Java, Eiffel and Sather will come easily.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    6. Re:This is not human languages! by nathanh · · Score: 2
      People think of programing languages as if it is something special to know a lot. Really you know zero (most people), one (a lot of people, normally basic), or all of them, including ones that have not been invented yet, though you will need a refresher before you would use one.

      Except the people who honestly believe this (and you are one) write C++ like they were writing C, and Perl like they were writing C, and Java like they were writing C, and Postscript like they were writing C.

      So in the end we have a bunch of languages with individual strengths, and some smart-arse who believes they know them all, and a bunch of crappy code that all looks like semantically broken C.

      Stick to one language. Learn it well. Stop pretending that you know them all. I'm sick to death of people who "know C++" but really just write C code with a different extension.

  25. that's why I only write in machine code by nomadic · · Score: 2, Funny

    0100100100100000011101110110000101110011
    0010000001101010011101010111001101110100
    0010000001101011011010010110010001100100
    0110100101101110011001110010111000100000
    0010000001010110011001010111001001111001
    0010000001100110011001010111011100100000
    0111000001100101011011110111000001101100
    0110010100100000011101110110111101110101
    0110110001100100001000000110001001100101
    0010000001100001011000100110110001100101
    0010000001110100011011110010000001100100
    0110111100100000011101000110100001100001
    0111010000101110

    1. Re:that's why I only write in machine code by jandrese · · Score: 2

      0101100101100101011000010110100000101100
      0010000001100010011101010111010000100000
      0111010001101000011011110111001101100101
      0010000001110111011010000110111100100000
      0110001101100001011011100010000001110010
      0110010101100001011001000010000001010011
      0110110001100001011100110110100001100100
      011011110111010000101110

      --

      I read the internet for the articles.
  26. Keep it simple - minimize the number by Kefaa · · Score: 4, Insightful
    I stick with one, or in some cases two. The basic reasons are:

    Common understanding by Developers- while I know a variety of languages, the next person probably does not. Nor can I expect to know all those that someone else might. Limiting choices provides a means to decide if an individual has the skills necessary to participate and to introduce training.

    Resource Consumption- Each transition of languages, one to the next and back is resource consumptive. This tends to make applications with multiple languages more expensive (CPU, Memory, and response time) over single languages.

    Developer Time- Very similar to machine resource, multiple languages tend to be more difficult to debug and more difficult to maintain. As developers now tend to be the most expensive part of a project, this can have a real impact on the budget

    All that being said, there can be very good reasons to use multiple languages. Some languages have inherited limitations that would make a secondary option worthwhile. However, that needs to be weighed against the prior notes to ensure we are getting something for the extra effort.

    Finally, all language transitions should be completely encapsulated. While a good idea regardless, try to make it as easy as possible replace a unit and especially to replace it without requiring changes to everyone calling it.

    1. Re:Keep it simple - minimize the number by camusflage · · Score: 2

      As developers now tend to be the most expensive part of a project

      Now that we've done away with those silly things like analysis, design, requirements gathering, integrated testing, et al, I guess that does just leave developers holding the bag.

      --
      The truth about Scientology, Xenu, and you: Operation Clambake
    2. Re:Keep it simple - minimize the number by camusflage · · Score: 2

      I don't particularly like to work with people who are Coders only

      I think that's a pretty fair statement for any developer. Coders care about functionality. Developers care about functionality, supportability, performance, stability, and all those other "little" things. This is, of course, the problem with contracting out development. Typically, it's going to be to coders, not developers.

      As to all those other things, other people should be involved. Analysts in analysis, architects in design, business analysts in requirements, and users in testing. In most places I've worked, as is your experience, that kind of thing falls to the developers, to the detriment of the code.

      --
      The truth about Scientology, Xenu, and you: Operation Clambake
  27. It's called "Alternate Hard and Soft Layers" by avdi · · Score: 4, Insightful

    This approach to software has been codified into a Design Pattern: Alternate Hard and Soft Layers. From the WikiWiki page:

    By virtue of the FirstRuleOfOptimization, go ahead and write most of your code in the highest level language you can find.

    By virtue of the ThirdRuleOfOptimization, when you must, use a profiler and find the slow parts of your program. Take those parts, and write them in a lower-level language.

    In other words, use a "soft", dynamic language for the parts of your program that may change, and that don't require extreme effeciency. Use "hard", static, compiled languages for the parts of the program that must run as fast as possible; or that need to do low-level memory-twiddling. To put it even more succinctly, use the right tool for the right job.

    Lately I've found that using SWIG makes this pattern very easy to apply in real life.

    --

    --
    CPAN rules. - Guido van Rossum
    1. Re:It's called "Alternate Hard and Soft Layers" by YoJ · · Score: 2

      Why not have the best of both worlds, and develop everything in a high level statically typed and compiled language? You lose some flexibility that a dynamically typed language has (like the ability to call functions that don't exist, and still have the program work up until that call). But I think for most applications this is not a problem. This method also removes the transition from one language to another, which can be costly. So write your programs in OCaml!

  28. mixing it up by zephc · · Score: 2

    mix Python, a language that is fast to write with, with time-critical functions as libs written in C (using the Python/C API)... get the best of both... use python as a glue for your C code

    --
    "I would say that 99 per cent of what my father has written about his own life is false." - L. Ron Hubbard Jr.
  29. Language independent process by sterno · · Score: 2

    The process you described is irrelevant of differences in languages. It's always better to break down your code into components and debug the components as much as possible seperately. Coding those chunks in different languages is just adding possibly unnecessary complexity in doing integration testing between the components.

    From personal experience using JNI, I found it to be a giant pain to try to debug the code. Sure you can test the underlying C++ code on it's own and test the Java on it's own, but when you glue them together you get new bugs and debuggind between the two layers is much more difficult than if it was all Java in the first place. In that case we had no choice but to use two languages so we put up with it.

    As for using printf's, what does that have to do with how you wrote the code? If you choose to debug using printf's that has nothing to do with if you have one big mound of spaghetti code or a well designed modular architecture.

    --
    This sig has been temporarily disconnected or is no longer in service
  30. Think about it by Ars-Fartsica · · Score: 3, Interesting
    I'm not sure what people are thinking when they specify that everything on a project "needs" to be done in Java or whatever.

    Building software is a function of economics. If you've dumped considerable resources into training, code licenses, an existing software base, or other real-world issues, you will be very inclined to insist that your "chosen" language be used in future projects unless there is an overwhelming issue that prohibits it.

    1. Re:Think about it by KyleCordes · · Score: 2

      You are right, but this is sometimes taken too far. Some companies / managers have a wildly over-inflated idea of the effort of switching to new tools or new languages.

  31. Mixed languages by the+eric+conspiracy · · Score: 2

    Hmmm - I spend a fair amount of my time maintaining a web site that is a mix of PHP/Java/Perl.

    I hate it becaue basic functionality on the site is coded in each language, and has to be maintained or changed in at least 3 places every time an update has to be made.

    So I guess I would say that the lack of ability to share working code from one language base to another in this implementation is a hell of a good reason to avoid this approach like the plague.

    1. Re:Mixed languages by the+eric+conspiracy · · Score: 2

      you need to develop some configuration files or such for you site

      Actually my preference would be to find a job where I didn't have to maintain this godawful mess.

      Configuration files aren't going to help me solve the problem of having to calculate a discount based on some business rule in PHP, Java, Javascript, AND Perl depending on where you are on the site. An external library, which has been pointed out could be written in one language, then called from others is as step in the right direction - but not good enough. If the site was written in ONE language I'd be able to structure the code rationally across the whole site, and use a system like Javadoc to generate the documentation for the site.

      Trying to use multiple languages seems to me to be an organizational nightmare for any programming job.

  32. I'm terrible... For web apps I use everything by Mustang+Matt · · Score: 2

    I'm starting to standardize on PHP, but for a while I would do chunks in ASP and then have them hit other chunks of the apps in PHP and it was a mess.

    It was convenient at the time though because I knew how to do pieces of the code in each language quickly and easily.

    --
    The man who trades freedom for security does not deserve nor will he ever receive either. - Benjamin Franklin
  33. Yes, we do this by Adam+Wiggins · · Score: 2

    We do this at my company. The web apps are all written in PHP; most of the small "helper" apps are either Perl scripts or bash shell scripts, depending on the size; and the large, complex programs are written in Java. Finally, key server components that require extremely high throughput are coded in pure C in order that they run as fast as possible.

    This works well for the reasons stated in the story. However, my main complaint is that getting your development workstation set up such that you can use and debug all of these languages effectively takes a little doing. Things have gotten easier: a few years ago installing JDK's was kind of a pain, but today they come in RPM form which makes it easy. Ditto for PHP.

    The other big problem is the context switch required, not only the languages themselves (which I don't find it hard to move between, especially with a good syntax-highlighting editor like vim) but rather the different tools. The Perl debugger is very similar to, but not completely the same as, gdb. So I find myself hitting the wrong keys when I'm switching back and forth between debugging Perl and C. PHP, on the other hand, uses good ol' fashioned "printf" debugging, so no problem there. :)

  34. IMHO your approach is fine by wrinkledshirt · · Score: 2, Interesting

    I don't think there's anything wrong with your method. Certainly if you can coordinate everything, your approach has definite advantages.

    Personally, I've found that a good knowledge of C can pretty much be used to fix any limitations of any other language (and pretty much every language has better string-handling routines than C ;). It's also a great glue language, so that if you've got one language that doesn't query a database, but it can interact with C, then you can write the C stuff to query the database and have the other portion of the program call that. Pretty much everything out there has a C-based API.

    In my case, I coded a messageboard website in PHP, which does everything really well, except that when it came time to work in a search engine for the site, I figured I wouldn't want to go through some sequential parsing of all the files through PHP each time because it would probably be superslow and interpreted each time.

    Now, you can redirect from a php page to a c-based cgi page and vice-versa (just have to know your HTTP headers), and you can code sockets in c in linux pretty easily. So what I have is a daemon process running in the background in C, with all the information indexed in a binary search tree (from when it was loaded) and ready to receive connections. The php search page hands off to the cgi page, which queries the daemon with some data, receives the resulting data, and redirects the output as part of the header to a php page, which displays the results. The search daemon in the background is all c-based, with queries to postgresql, and the way it's set up now, could receive CRON commands to rebalance the tree, repopulate the tree, add new messages to be indexed, dump all the contents to an XML file, etc.

    Now, PHP has bindings to pretty much every database worth its salt, does great string manipulation, can interact with XML files, can interact with LDAP (I think), has some socket capabilities, and they're working on making it work with GTK+ and also be CORBA compatible. PHP combined with a web-browser can pretty much create the perfect client, and of course, you do whatever the hell you want with the server...

    The main problem is having a good protocol to communicate between everything. That's nothing to scoff at. But I still think your approach is sound.

    --

    --------
    Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...

  35. Benefits... by sporty · · Score: 2
    Since everyone is bashing the concept, I'll gladly take the stance accepting it.


    If you write the core of the program in C/C++, the part that's slower or extreemely common and then let the rest be implemented in say, Perl or PHP (or some other script language) you have the benefits of higher maintainability with quick and easy development.


    Take any perl program and port it to C, it might be a little harder. Imagine how much more of a hassle a BBS (or slashcode) would be if written only in C.


    Now imagine the same program written only as perl. You don't get the beneifits of speed (lets not assume mod_perl :)).


    Now what if the core parts of slashcode were written in C and less complex or higher maintained parts were written in Perl, you get the best of both worlds. This is how shell programming almost works, no? You write the simple logic which would be a pain to write in C to use C programs that do other things well.


    It adds the complexity of knowing 2 languages, but if both lanugages are not bad languages (don't dare pick on perl :P ) no one should have a problem learning them. One shouldn't use more than 2. SQL and regexp are acceptable since they are very limited, but adding a third or fourth into the mix only adds complexity as it takes away either from quick development or maintainability.

    --

    -
    ping -f 255.255.255.255 # if only

  36. Re:You make my life HELL! by wbav · · Score: 2, Funny

    That's where good commenting technique comes into play. As a good programmer I always put at the top, in a comment "If you break this [program/script/set of scripts] and want me to fix it, you'll have to pay my consulting fee of 80 dollars an hour, minium of 10 hours."

    See, comments can fix any problem.

    --

    =================
    Unix is very user friendly, it's just picky about who its friends are.
  37. COM, CORBA, and .NET by ClubStew · · Score: 2

    This is where these technologies work great! You create modules that you can use in a variety of languages from a variety of languages. With COM, you can write it in C++ (MFC,ATL), Java, VB, and other languages. CORBA I believe works similarily. With .NET, you have a standard API set you can use in any language. Build many modules, use them in many applications, and make your applications smaller.

  38. depends by jon_c · · Score: 2

    it really depends on how you do cross language development. For instance COM allows in process and in thread calls, even if one side is C++ and the other is VB.

    A good example of how COM and 'COM like' systems can work is with DirectX in VB. There is obviously more then one language at play: VB, C++, C and a good deal of x86. however I've seen some very impressive demos done with this exact setup the is because the overhead for calling a C++ method from VB is virtually nothing, at least if it's in process.

    --
    this is my sig.
  39. Framework by mugnyte · · Score: 2, Interesting

    For a long time, many of the readers of /. have laboured to put together a private, then public "Framework"

    While not discussing the merits of such an endeavor, they almost always have a productivity gain result, with the added propeller-head feature of making the dev team "kings of the castle" of How It Should Be Done.

    Every OS is merely an minimal acceptable level of a framework.

    By writing applications in a single language, platform or environment, you leverage your knowledge in the language. BFD. BUT! When you organize it on a grand scale as a Framework, you can make extraordinary differences...and you avoid the hodge podge of applications that may or may not live as long as your users need them.

    In my world, enterprise applications written in a massive and ever-more-portable / feature-filled / wrappable C++ framework are the norm. They last years and become somewhat of a family hierloom that we take pride in.

    We have budding frameworks (both built and purchased) for VB and Delphi - but they slip and slide through versions way too often. Ever 3 years the language is updated to take advantage of the Next Big Thing. In a lower-level framework, you can add in these features because you're closer to the understanding of basic toolset.

    Combined with a Component take on development, one can merely add a object to the mix and suddenly the security model, status reporting, version control and documentation stay compatible.

    If you are trying to use different frameworks to achieve solid goals merely from your single opinion of "best for the job" - you are missing a lot of management skills.

    mug

  40. True, but the project must be completed! by jabbo · · Score: 2

    In my opinion, the single biggest hurdle is acceptance by the client. If it's too late, or too buggy, or too rigid, no one will care whether it's in Java or PHP or Perl or Visual Fortran...

    I write code on-demand because that's what I get paid to do. I've tried being super-neat and uni-language, sloppy as hell and multi-language, and have settled on the processes that work best for me to keep our clients happy.

    I don't pretend to offer a solution for everyone in every situation, but in a small company with high-profile clients, results are the only things that matter. I find that using a fast, compiled "core" with flexible, highly-documented "glue" keeps me from having to work too much overtime, and allows other developers to get up to speed quickly.

    Documentation is KEY to my strategy. Without it, I don't think any of my other comments are relevant. I'm not an OO fascist but it sure does make documenting and segmenting code easier, for run-of-the-mill business and controller apps.

    Again, this is just one programmer's experience.

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
    1. Re:True, but the project must be completed! by jabbo · · Score: 2

      Actually, we're in DC, and I work on 3 of them. They're incredulous that things can actually get done, and I plan to keep them that way! More are lined up because of this.

      --
      Remember that what's inside of you doesn't matter because nobody can see it.
  41. Modular Programming by Tyrall · · Score: 2, Insightful

    Use whichever language you feel comfortable with.
    There's been a lot of comments in this thread suggesting you should use x for y job. Whilst this is true to an extent, if you can get something that works using C++, or spend an extra few hours (days?) doing the same thing in {other language}, use C++. It may be less elegant, but most PHBs don't give a crap about that.
    Whether you use multiple languages or not, modular programming is essential if your project isn't a single one-off deal.

    Incidentally, even if it is a one-off deal, it's often handy to modularise programs, as there's always the time someone from sales will wander in and say 'can I get a report kinda like that one I had yesterday, but in [blue|mauve|cyan]?',

  42. you see it in research computing by reverse+flow+reactor · · Score: 2, Insightful

    Often, in scientific research computing (my field is chemical engineering, but I am sure physics, chemistry, geography et. al. use similar techniques) we use multiple languages.

    For example, you may have a simulation that requires several hours of CPU time to run. We will write the math end of the code in Fortran. (If you really require high speed execution, you will write the most frequently run code in assembler.) We then write the GUI or the interface or file handling parts in C, C++ or Java, depending on what you want.

    -----

    --

    The significant problems we face cannot be solved by the same level of thinking that created them. -Einstein

  43. action items needed by jabbo · · Score: 3, Funny
    Indeed, going forward, I must be goal-oriented and results-driven,
    lest you facilitate a dialogue with my supervisor.

    my sourcebook for business-speak -- Action Item Man comics

    yeah, you got me... I'll go back to my TPS reports now.

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
  44. Active Scripting by MrBlack · · Score: 2

    I like ActiveScripting in windows for this. I can write an application in any COM language and inculde the script control. I can share objects between script and application code, I can call one script langugage from another, and the choice of languages is fairly good (JScript, Perl, Python, TCL....O.K. - I admit I've even used VBScript for some date calculation stuff). Doing it all this way means you can debug it in one place, and leverage the strength of the different languages that are available. The final application has a lot of flexability too. Store you scripts in external files you can just edit them in a plain old text editor, rather than edit/re-compile/deploy. I agree with the other posters who note that you may be creating problems for management, but it's not like they've never create problems for developers in their whole lives is it?

  45. Cart? Horse? by Lumpish+Scholar · · Score: 3, Insightful

    I tend to use C++ as my controlling program, and then execute Perl, PHP, or Java ...

    That's very ... unusual. You're using C++ as your "glue" language, and a higher level language for the code where your inner loop resides?

    --
    Stupid job ads, weird spam, occasional insight at
  46. Any good books... by jmccay · · Score: 2

    I have never combined languages (except when using web stuff. I would be interested in the hows, whens, whys, etc of it. Are there any good book people can recomend?

    --
    At the next eco-hypocrisy-meeting, count the private jets used to get to the meeting. Should be interesting to see that
  47. Well, if I had time to write domain-specific code by jabbo · · Score: 2

    maybe your arguments would make more sense. But I can't really be bothered to futz with the internals of Postgres or Apache or qmail or [...] every time I need to change something.

    And the other employees of the company want to change things, our clients want things changed, no spec is ever firm, etc... eventually, at least in the line of work I'm doing, it dawns on just about everyone that the "logic" and the "presentation" are not only separate, but often so totally unrelated that one or two hooks will suffice. That's where my break happens.

    The whole "MVC" idea says the same thing, in so many words. I'm just using the best tool for the job, and I've done this sooooooo many times, our business is soooooooo specialized, and our clients expect things sooooo fast (cause we always turn things out pretty fast) that, rather than being a conscious decision to eschew CMM or OOP or whatever the PHB buzzword of the week is, I simply got the damn job done, producing some reusable libraries along the way.

    It's also worth noting that all of this *COULD* be in C/C++ or Perl alone, but I don't feel that Perl is good for anything other than glue, and I don't want to dive into a shit load of C code every time a client requests a change.

    Anyways, that's just my job experience. Yours may be totally different, and probably is, if you write device drivers or microcode for a living, work on huge integrated apps, and so on. Then I'd probably want to stay in one language with *maybe* a scripting language for unit tests and prototyping interfaces.

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
  48. Embed/extend? by Lumpish+Scholar · · Score: 2

    You may already be doing this ...

    If you've got a system that's half C++, half (for example) Perl, you might consider either extending Perl to support your C++ code, or embedding Perl (interpreter and your code) in your C++ code. For Perl, it's documented in chapter 21 of the Blue Camel (3rd edition). I assume the same tricks can be applied to PHP. C++ and Java can play well together with native methods, I believe.

    I'll point out the downside: This still requires your successor(s) to know both languages, plus the "glue" between them.

    (Forget about being hit by a bus; you may want to move on inside your current organization. The harder it is for your successor(s) to support this system, the more likely it'll be a boat anchor around your ankles, when it comes to job mobility.)

    --
    Stupid job ads, weird spam, occasional insight at
  49. VB Developer and Proud by WndrBr3d · · Score: 5, Informative

    Being a Visual Basic developer, I feel who better to know its short comings as a language. For the last few months, I've been doing cross language applications for windows.

    Basically, I develop the Application Interface and Simple Functions using Visual Basic Modles and ActiveX Classes.

    -but- For Intense Number Crunching, I weave Visual C++ DLL's that have all the function calls that would normally chew and grind Visual Basic to a halt (Floating Point Number Calculations, Loops on Data, and Byte Cyphers).

    There's a wonderful book on the topic by A! Press (I know.. I'm a Wrox man myself) called "C++ for VB Programmers" (Link) which explains the process of using Win32 DLL's and ATL COM DLL's in your VB Application.

    This process leaves VB doing what it does best, looking pretty. It also lets C++ do what it does best..... all the work ;-)

    1. Re:VB Developer and Proud by plover · · Score: 3, Insightful
      I have a huge issue with this approach, however.

      We used to have our application written this same way. VB GUI front end, C++ business logic back end. The problem we had was that some people on the team were stronger in VB than in C++, and we ended up with business logic creeping into the VB. A few years ago, we decided we had to walk away from that app for future development, and here we are reinventing the wheel today. After five years, we had ended up with more business logic in the VB than in the C++. It's an awful mix. It's tough to maintain, and tough to debug.

      On the other hand, I don't think it was necessarily the language that caused the problem. What we had was people developing without understanding the underlying architecture of the application. The VB portion was originally created by a vendor in 1995, and she walked away from it as soon as it compiled. It was thrown over the fence to other coders at that vendor's site, as well as us at that time. Those of us who got in on her initial training were able to carry the design forward, but almost immediately the new hires (and the vendor developers who were not under our direct supervision) started "blending" business logic into the VB.

      I think we were doomed to this fate from the get-go because we didn't have strong project control. Any ongoing programming task is going to have issues like this creep in eventually. Multiple languages aren't necessarily the problem, and in some cases can help, but discipline is required to pull it off successfully over the long run.

      John

      --
      John
  50. Welcome to the World of Web Development by thomis · · Score: 2, Interesting
    On any given page in my current project you are seeing the results of VBscript or JavaScript running on the server (ASP), usually JS running on the browser(for DHTML effects and validation), XML/XSLT (formatting large result sets and general neato-ness), and FoxPro (the database. Don't laugh, I'm trapped in an M$ shop, and FoxPro is the most subversive dev tool we use (no licensing for server, just whip up a COM, and it kicks M$QL's ass))


    This seems pretty common in the Web world, and yes, it explains alot... but I definitely try to pick the right tool for the job (dates are easier to handle in VBS, but forget about regular expressions, that's a job for JS).
    I think I'd get bored quick if I had to develop in on language. Then again, it might lead to a deep understanding of the language.

    Of course, I could be wrong.

    --
    ceci n'est pas un 'sig'
  51. Perl + PHP by justinstreufert · · Score: 3, Interesting
    I worked at eGrail, whose flagship product is coded in a mixture of both PHP and Perl. Web user interface is in PHP with a fast internal parsing system written in Perl.

    There are definite advantages to this design; PHP is probably the easiest language in which to write a web GUI, and Perl greatly simplified the process of building the incredibly complex parser.

    The disadvantages: eGrail has (or at least had) a ridiculously long list of dependencies; one needed both a working web server with PHP4 and many extensions, not to mention Perl 5 with a host of 3rd party modules. TWO seperate database interface libraries are required.

    I think it was a good thing for eGrail, but it's a carefully balanced tradeoff.

    Justin

    --
    "Why would God give us a waist if we wasn't supposed to rest our pants on it?" - Rev. Roy McDaniels
  52. Good and bad uses of multiple languages by Anonymous+Brave+Guy · · Score: 2

    The pros and cons of using multiple languages have been detailed already here, so I won't repeat them en masse. Suffice it to say that the pros boil down to the flexibility to use the right tool(s) for the job all the time, while the cons boil down to extra overhead getting your tools to work together, and getting your developers up to scratch in using them all.

    From personal experience, this leads to certain "good" uses of the tools, and some "bad" ones. Below are my "best choice" times to use multiple languages.

    1. On a large project, the main program is written in a single language (e.g., in my current case, C++) and other languages are used for independent supporting tools (e.g., our fairly involved build process uses Perl and Python scripts, our installer uses XML source data, etc.).
    2. If you're working on a genuinely multi-tier project, given well-defined communication protocols between tiers, what each is written in can be independent of all others. For example, given a web front-end to an e-shop, you might sensibly write the front-end using scripting tools, the back end in C++ and the database using a full-fledged DBMS.
    3. Your main bit of code is written using a relatively high-level language, and after profiling, you optimise by recoding specific routines in a lower-level language for better performance.
    I'll just note here that in each of these cases, the languages are being used in complementary parts of a project, but never simultaneously on the same part without a very well-defined interface between them.

    Personally, I'd say that going further and trying to use multiple languages on different pieces of the same basic development is asking for trouble. The drawbacks start to seriously outweigh the benefits if you're not very careful. I'm sure it has been done effectively somewhere, but I've never seen such a case myself.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  53. Re:Depends by scrytch · · Score: 2

    Whereas if the app was written in Cobol without the CLR (I'm going to assume there is some kind of COBOL.NET), you not only can't maintain the app, you can't even script the pieces with another language. Standards are good, but sometimes that standard happens to be cobol (proof that there is no god).

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  54. The Ultimate Language Triple by mr_gerbik · · Score: 2

    This will make you millions...

    Lisp + Perl + C

  55. Re:What if you get hit by a bus? (other case) by wbav · · Score: 2, Insightful

    Your arguement goes both ways

    let's suppose for a second, that you're a programmer, working on you own class. Now you know it inside and out, unlike anyone else. You need to add a function to it, you know how to do it so that everything works correctly. And then you're hit by the bus.

    Sure other people will have the skills to read what you've done, but understanding why you did things will escape them; unless, you document your code. Which leads to the solution to this.

    Good documentation is key; make sure to include your consulting fee for fixing the program or script and your email.

    --

    =================
    Unix is very user friendly, it's just picky about who its friends are.
  56. uhh... by smack_attack · · Score: 2

    All I can say is that debugging must be a pain in the ass.

  57. Web programming is multi-lingual by nature by LoveMe2Times · · Score: 4, Informative

    I'm willing to bet that most of the posters on here saying that using more than one language isn't a good idea (for whatever reason) haven't done much web programming. For a fairly normal browser plugin project that I worked on, we used the following:

    1) C++ for the actual plugin.
    2) JavaScript for webpages embedding the plugin.
    3) Perl for CGI backends.
    4) SQL (duh).
    5) Wise Installer script for the installer
    6) Delphi (Pascal) for a game builder app that made games to be played in the plugin. This app loaded the plugin as a normal dll.

    If you're doing integration between technologies, you'll almost invariably wind up using different languages. Often times, you have no choice. Also, this isn't meant to be offensive, but people that think C/C++ is one language are naive. Generally, you have to ship clients executables, so you're limited to languages that compile natively (with the possible exception of Java). You generally can run whatever you want on your own servers. Then you have web browsers that are their own funky platform. If you can get away with using only one language, congratulations!, but don't expect that all the time.

  58. Re:Java is the VB of the new millenium by the+eric+conspiracy · · Score: 2

    It leads to bloat. Case in point- Limewire.

    Rookie C++ code is going to be just as crappy, if not more so due to the complexity of the language as rookie Java code. Probably MUCH worse in terms of stability, too. C++ may be able to give you better performance, but it WON'T give you better code than what can be achieved in Java, and it certainly will be less stable, harder to maintain and be a less productive place to develop in.
    As far as I am concerned, C++ is a design error. Indiscriminant inclusion of features the the designers now regret and a STL library that anyone who wants the performance of a compiled language needs to avoid has lead to a nightmare language.
    The fact is that the biggest problems in producing good applications - stability and consistent design are not addressed by bolting OOP features onto what is really a procedural high level assembler.

    C++ is a Frankenstein's Monster of a language.

  59. Re:To keep flogging this horse... by Magumbo · · Score: 2
    Using multiple languages is a Good Thing(tm) if, and only if, they are not used to take shortcuts, learn on the job, or avoid writing "hard" code.

    If you worked for me, I would fire you on the spot.

    According to this logic, a programmer shouldn't take some extremely useful c/c++ libraries, write some perl or python wrappers around them, and then whip up an application in perl or python utilizing them? Suppose doing that would be something really useful and it would simplify their job. For the sake of argument, suppose that Joe Hacker was doing this at work, and that he hasn't written those particular wrappers before. He would:

    • take shortcuts
    • learn on the job
    • avoid writing "hard" code
    • learn new technology

    And therefore break every one of your grossly misinformed guidelines. At the same time, he would be creating something that would alow other people to get their jobs done easier. Welcome to the world of abstraction, my close-minded friend.

    if you're calling interpretated languages, you need to remember that the burden for prereq's on your target platform is going to be huge

    Please explain. If you mean prerequisite memory and cpu cycle consumpiton, yeah I'll agree. Usually a constant (time and space complexity-wise) penalty is NOT a problem though, and it's hardly a "burden". If you mean prerequisite Things You Need To Do To Get Things Working, then that's simply not true.

  60. Re:Generally, a bad idea -- your view is! by Ars-Fartsica · · Score: 2
    The OS is language
    The programs like sed / grep / awk / find use a languages.
    TCP is a langauge, APPC/APPN, modems

    This is gibberish. He is talking about mixing together multiuple turing-complete programming languages.find and the TCP/IP protocol do not qualify. In the case of the latter, it is a byte ordering protocol, not even a "syntax" per se.

  61. Porting? by MrBlack · · Score: 2

    by Porting I assume you mean going from Windows -> *nix....I guess it depends on the scripting language you choose. If you choose VBScript then porting will not be an option (and perhaps you should go and sit in a quiet dark room for a while) but if you choose something like python...you can always port you "main compiled application" to Java (assuming you didn't develop it in Java in the first place) and interact with python via jython. Or write it in C/C++. I'm not sure about Perl ('cause I have zero knowledge about it) but I assume there are ways to do it. Porting from one OS to another is fairly involved anyway (from what I hear), is that what you meant by porting? As far as being all web-based goes - what did I say that gave you the impression it was all web-based? I've imbedded active scripting into desktop apps before (and I will probably do it again).

    1. Re:Porting? by MrBlack · · Score: 2

      No worries - Active Scripting is probably best known for it's role in web development, but I really love imbedding script in applicaitons too. The Doctor Dobb's Active Scripting Newsletter is quite good for info on this sort of thing.

  62. Most "applications" are not one program by Pseudonym · · Score: 2

    Think about your favourite shrinkwrapped software. Chances are it doesn't only contain one executable.

    As an example, my employer makes a product which includes a processor-intensive number crunching program, a compiler, a file format converter and a reporting tool. The number crunching program is in C++ (to keep a cap on performance). The file format converter needs to be in something which can be interfaced with C so it can use some third-party libraries. The compiler, however, has no other requirements and is not time-critical, and so is being rewritten in Haskell for ease of implementation.

    The point being that even if it's hard to get two languages to talk to each other, multi-language application suites are more common than you think.

    (Although, even Emacs is written mostly in Lisp...)

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  63. Efficient programming by rice_burners_suck · · Score: 2, Funny

    I think the best way to go is to write all the time-critical portions of your program in Java. Then, write a Java VM in Perl. Then, write a Perl interpreter in BASIC. Then, write a BASIC interpreter in Python. Then, write a Python interpreter in shell. Then, write a shell interpreter in C++. Then, compile that C++ program and run it under an x86 simulator written in COBOL. Then, write a COBOL interpreter in Pascal. Then, write a Pascal interpreter in Prolog. Then, write a Prolog interpreter in Smalltalk. Then, write a Smalltalk interpreter in awk, and use M4 macros to convert that into a C program, which you compile and run natively on the machine.

    Now remember, the previous paragraph applies only to the time-critical portion of your program. The other 99% of it should be hand-coded and highly optimized machine language.

  64. What a load of rubbish. by carlfish · · Score: 5, Insightful

    I consider myself a good programmer. It's been my experience that depending on the complexity of the language, it takes between six months to a year of experience in a language before you are fluent. Fluency is not mastery, it's the point at which you can sit in front of the code and write in such a way that you are using the language, not wrestling with it. And you can't write good code when you're fighting the language.

    As for reading a language. Sure, you can read any program immediately, provided the syntax is familiar, and the code is well named and well commented. On the other hand, there are always unfamiliar syntaxes - take someone who's only coded in C and Perl, and put them in front of Lisp or Smalltalk, and they'll need a couple of days work just to be able to parse it.

    You can learn enough to slap a program together in a week, provided the syntax of the language isn't particularly alien, but it's not going to be one you're proud of the week after, when you've learned a little bit more. You'll know the syntax and control structures. You'll have some idea of the shape of the main libraries, and you'll know where in the documentation to look if you need to know more.

    I've done this before - I remember having three days to learn enough of a particular language to fool a customer into thinking I knew what I was doing. And I did, we got the tender, I continued to learn more over the ensuing weeks, and the customer was happy with me. Looking back, my total unfamiliarity with the language probably cost this customer many thousands of dollars in lost productivity, for all the time I took looking up library functions in the language documentation, and all the time I spent inefficiently re-implementing functions that were already available, but that I wasn't aware of enough to know to look for them.

    A week of study will qualify you to painstakingly inch through other peoples code with piles of documentation at hand, and get a pretty good gist of what the code is doing. It'll qualify you to write something artificial for your CS class. It'll qualify you to make simple logical changes real code. It will NOT qualify you to write, or make significant changes real code.

    The syntax of a language is only the smallest, and easiest part of it to learn. The libraries, the idioms are far more important. Knowing all the weird letters you can stick at the end of a regexp in Perl. Knowing that double-checked locking in Java doesn't work. Knowing which collection in the STL is most suited to the data you're storing. Would you trust the maintenance programmer you've just hired and taught C in a week not to introduce an exploitable buffer overflow?

    Charles Miller

    --
    The more I learn about the Internet, the more amazed I am that it works at all.
  65. Re:Java is the VB of the new millenium by the+eric+conspiracy · · Score: 2

    C/C++ is the default language for system software.

    I would say that C is the default language for system software. Not C++.

    I would rather have features available then not.

    I would rather have useful features than not. Much of what I see in C++ seems less useful than I would hope.

    why does a 10 line Java program require a 30 megabyte VM ?

    It doesn't require any such thing.

    gcj -O5 --main=hello hello.java
    ls -l a.out
    -rwxrwxr-x 1 eric eric 73117 Nov 20 22:36 a.out

    Templates. Again, you DON"T have to use them.

    Templates are evil because their definitions are not type checked in parameterized form. This often leads to problems that are the devil's own work.

    The fact is that C++ compilers are forced into heuristic methods for evaluating static type safety rather than the mathematical surety that Java's design permits. Which would you rather have?

    Crappy software can be written in both languages. The argument that C++ automatically produces crap code is ridiculous.

    I merely propose that the skill of the programmer is the primary determinant of code quality.

    C++ is a STANDARD, that was reached using a democratic process.

    In other words it was designed by a committee of people with no overarching vision of what the language should be. No wonder they started with a horse and arrived at a camel.

    Political arguments are irrelevant when evaluating the technical merits of a language.

    However, from what I've seen most of the Java code out there is PROCEDURAL.

    Sturgeon's law states that 90% of everything is crap. This is overly optimistic when it comes to code.

    One of the reasons that I originally learned Java is that it seems to have become the default language in much of the Design Pattern and OOP/OOD literature. Clearly there is a reason for this - and the reason is that Java is very good at expressing good ideas in software design in a clear fashion. I have found that in my own work this is a very valuable language feature.

  66. Weird languages by YoJ · · Score: 4, Interesting
    A lot of people seem to be saying that it is dangerous to use "alternative" languages for major projects because people that must maintain the code may not be familiar with the language. This is undoubtedly a valid concern. One neat idea to get around this is to use a high-level language as a tool for creating a project written in a lower level language. For example, if the target application is some sort of GUI app, then someone may decide to use Java. But Java is not a particularly high-level language, so you decide to use Lisp. You create a Lisp "environment" that facilitates creating Java source code. Lisp functions create abstract data types representing Java programs with certain attributes, e.g. widgets and widget behaviors. Then you write a Lisp function that translates the data structure into valid Java source code. Developing the program then becomes less of a mundane Java programming task, and more high-level and fun.

    This method has a loss of productivity from the added complexity of the task, but this can easily be made up for in increased productivity at the meta-level. I.e. if your application has many buttons with only slightly different functionality, a single Lisp function call creates each button. Changing behaviors and adding or deleting parts of the program becomes simple. Best of all, the end result is a valid Java program that anyone who knows Java can understand. If the person who comes after you does not understand Lisp or the idea of program generation, it doesn't matter. They have a Java program to hack on. If they do happen to understand Lisp, even better, they can pick up where you left off with a big productivity gain. Lisp is particularly suited to this type of thing, but any good high-level language would work.

    1. Re:Weird languages by YoJ · · Score: 2

      Actually Ocaml has a macro system that (I think) is of comparable power to Lisp's macro facilities. It is called caml4p. Basically it duplicates the parser of the interpreter, but with a configurable syntax. So you can declare new control constructs, new keywords, etc., and attach semantic meaning to them. The alternate syntax can then be accepted by the compiler and interpreter through a command-line argument. So the end result is somewhat like Lisp's macro facility, but maybe slightly less convenient to set-up.

  67. Re:Java is the VB of the new millenium by Skapare · · Score: 2

    What you are really pointing at is bad programmers. And bad programmers abound in any language. Higher level languages just get more of them. I've seen exactly the same thing you are talking about even in C++ where programmers believed they were doing the right thing but had no objects at all, and couldn't even explain what object oriented meant. The funny thing is, when I suggested to this one guy that he might as well just code in C, his response was "but I heard C is too hard to learn". If only it were hard enough to keep him from being a programmer.

    --
    now we need to go OSS in diesel cars
  68. Everything is a bad idea ... by King+Of+Chat · · Score: 2

    ... when taken to extremes (my Pair agrees with this and we've got several test cases to prove it).There are good cases though for mixing a few languages.

    Using 6 or more languages on a project is clearly not a good thing. but I can think of two reasons for using more than one language:

    1. Cost. An example, C++ is fast, powerful, flexible but good C++ programmers are scarce, incredibly sexy and expensive (although not expensive enough). It's also a painful way of doing GUIs. Given that you need the performance of C++ but only for part of the application, why not just right the performance critical bit in the "expensive language"?

    2. Architecture. Separating a system into parts written in different languages forces you to think about clean interfaces. If there is a language barrier, then there's no way of shortcutting. May seem painful to some, but the benefits will show.

    I don't think that you can ever say that you should never do mixed language programming. How many systems have, in addition to their main code, a load of SQL?

    --
    This sig made only from recycled ASCII
  69. This is why my choices are C, PHP, and Java by Skapare · · Score: 2

    This is why my choices are C, PHP, and Java. And a little bit of machine specific assembler for a few architectures thrown in for fun. The core of my programming (I think bottom up, so my "core" is the low level parts) is done in C, and I do include some OO design in there, too. When I do need a full-fledged OO language, I go to Java. And PHP fills in the gaps to make quick web pages. I never got into C++ and now days I sure am glad I never made that mistake. I love C and I can do a whole lot in it where other people would flee. But where I need to do full OO, there are things in C that just should not be done and C++ loses its advantages so I might as well go with Java.

    --
    now we need to go OSS in diesel cars
  70. funny. by leuk_he · · Score: 2

    I would have said:

    And that my friend, is called job security

    "he best job security you'll *ever* have is the ability to quickly get
    a new job."

    (I am glad the /. system moderated your article as funny, it got +1 interesting, +1 underrated and +1 funny)

  71. Perl. Linux. by mattr · · Score: 2
    Sure, you need to break a big project into pieces to keep your sanity, make it doable, and reduce errors. Seems there are a lot of people who think the maintainability issue alone is reason enough to tell you no.

    Well, guess what, Linux is pretty darn big and yep it's written in lots of languages. And Corba is built to let you do the same kind of thing for big systems. As long as you aren't building a time bomb maintenance-wise, you should consider carefully the post above about the design pattern for alternation of hard and soft layers. It's not cut and dry.

    I just posted in a previous thread reasoning about using Perl in a large project. For one thing, Perl is already a big system and it is written in Perl, C, C++, and whatever else you may want. You can call object code modules from Perl, wrap them in Perl Modules, and even write code from other languages inline inside your Perl programs (compiled automatically).

    I do think you should seriously consider scrapping PHP. It is really not that great and if you are using Perl there is no excuse not to separate design from code. Also it is backwards to control Perl, a high-level language, with C++, a low-level language. The final answer is that there are valid systems for both multi-language and single-language implementations, but your choice is likely to have a big effect on the performance, maintainability, packability, and development schedule/paradigm so think hard about it! (But please stop lobotomizing Perl by calling it from C++!)

    1. Re:Perl. Linux. by mattr · · Score: 2

      You may be right. My reasoning about PHP is mainly due to

      1) often needing to extend things and *knowing* I'll be able to do it in Perl.. PHP who knows?
      (I tried PHP in the early stages and whenever I come back to it, it doesn't seem powerful enough)

      and

      2) looking at existing php code which maybe is not written by the best people.. I get tired of seeing every PHP page restating the code to get a database handle for example. I believe in abstracting code into reusable modules, and separating design from code (it bites me whenever I forget to do so, and you can see plenty of rants about that on perlmonks.org). I also often think of doing something in PHP just as I realize I would have to add some preprocessing before the data gets to the screen that would be harder in PHP.

      Possibly these things could be done if I put more time into studying PHP, and certainly a very quick interface with minimal window dressing and error checking is a cinch in PHP. But I think you lose something, it just doesn't feel as powerful as Perl does.

      That said, I'd much rather do PHP than say Cold Fusion if I was asked to use it, and I do make my own Perl templates that do some of what PHP does as well. So I suppose there are shades of grey. I'd love to see some good uses of it like you mention. Thanks.

  72. Best tool for the job by sfe_software · · Score: 2

    I don't have any one favorite programming language, and I tend to choose the best tool for the job. I don't know Java, and never really cared for C++, but I use C, Perl, PHP, various shell scripting, and even VB...

    If I'm writing an app for *n[ui]x, I usually stick with C for anything serious (where a shell script won't do). I may hand off certain tasks to other languages though.

    When doing Windows programming (though I mostly use Linux, I do find myself working with Windows sometimes), I always choose VB for the interface, and any computational stuff goes in a DLL written in plain C. As much as I hate to admit it here, VB is the quickest way to build a usable interface on Windows IMO (and I have lots of BASIC background). It works well with DLLs written in any language (with the right calling convention), and this is a perfect example of using the best tool for the job.

    When I'm asked what lanugage do you use, my response is simply whatever language(s) is/are best for the task at hand. Would you ask a mechanic what tool do you use, a wrench or a ratchet? Though it's not exactly the same thing, we do have many tools, some of which are more appropriate for a particular task. I wouldn't use bash to decode MP3 data, and I wouldn't use C to write a startup or installation script, though many times the choice isn't that obvious.

    --
    NGWave - Fast Sound Editor for Windows
  73. Re:LITHP Thuckth by brlewis · · Score: 2

    The impoverished languages you're accustomed to using require 2-5x the amount of code to get the same functionality as in Scheme or Lisp. You have to slow down and stop scanning large blocks of code to see what trival task is being accomplished. Instead, take it one keyword at a time.

    You are right, though, that blind LISP masters can't tell you what code will do at a glance. They have to wait for their screen readers.

  74. My experience by bockman · · Score: 2
    My current project (areoeospace ad-hoc s/w development) currently uses 5 languages:
    • C++ for core modules
    • Java for portable libraries and GUIS
    • PHP for some Web front-end
    • Perl in form of an off-the-net free software which does mirroing (thanks to the author of it, BTW).
    • Python in form of a quickly assembled propotype (to be refined, but it will stay Python) when my customer told me: why don't you do ... (initial reqs did not call for it, but this is much an impromptu project).
    And yes, if I leave my company would have problems with Perl and Python modules (and lesser problems with PHP, also). But in both chase it was matter of $$$ ( in terms of developer time) and I still think I've made the right decision. BTW, Python can be learned on the flight, so my only worry is the perl program (which anyway works fine and probably wont be ever touched).
    --
    Ciao

    ----

    FB

  75. Re:Java is the VB of the new millenium by the+eric+conspiracy · · Score: 2

    I was talking about the working set size, not the object file size. The smallest of Java programs requires a huge VM to be loaded into memory.

    This Java program requires NO VM to be loaded. The working set size is 73K. Java can be compiled to native code, eliminating the need for the JVM.

    73K is about 500 times smaller than your posited 30MB JVM.