Slashdot Mirror


Does Company-Wide Language "Standardization" Work?

RMX asks: "In our company, we're currently going through the debate of standardizing on a computer language for our next set of products. The pro-standardization guys say that a single language (like Java) will save everyone time. The anti-standardization guys are advocating a mixed environment (of languages like Python, Ruby, and C#), and argue that the whole discussion is as silly as a manufacturing firm standardizing on screwdrivers for all their screw/nail/glue fastening needs. Have any of your companies standardized on a language? How well did it go?"

59 of 654 comments (clear)

  1. Solutions Should Be Natural by eldavojohn · · Score: 4, Insightful

    Problems and needs are naturally occurring things.

    They take on unforeseen forms with non-standard characteristics. If your tool can't solve the problem or satisfy the need, you build a new tool that does. It's the human way.

    Likewise, your company can standardize methodologies and practices all it wants. But should they ever standardize the tools they use to solve problems ... well, let's just say it won't be long before a problem or need comes along that the standard doesn't fit.

    And then someone might be tempted to work hard at trying to make your standard fix it and work. They might spend hours re-inventing the wheel. And what will that get them?

    Why, the ability to say, "Yep, and we did it all with one language."

    The customer doesn't care how a solution is created. They care that it works and meets their requirements. Rarely have I seen requirements that read "... and it must all be done in the same language."

    I am a computer programmer. I make computing devices do what I want. I will use any tool at my disposal, to hell with my employer's proposed "beneficial" restrictions.

    In my dictionary, fatalism is the inability to cope with change. Adapt or fail. I am required to adapt to each new language I learn and I hope I never get rusty at that. Confining employees to one language does just that, it gives them a false sense of security and teaches them to think inside their box.

    --
    My work here is dung.
    1. Re:Solutions Should Be Natural by acidrain · · Score: 3, Insightful

      Why, the ability to say, "Yep, and we did it all with one language."

      And the fact that I can actually debug all the code that goes into one of our games. I love debugging a C++ callstack that goes in and out of an interpreter a few times. It's bad enough having ten programmers with different approaches to programming without mixing langauges.

      Mixing langauges essentially means that a person who introduces a new langauge gets to build themselves (and a few of their pals) a little ghetto where other programmers are afraid to walk at night.

      --
      -- http://thegirlorthecar.com funny dating game for guys
    2. Re:Solutions Should Be Natural by JanneM · · Score: 3, Insightful

      I got the impression the poster was talking about choosing the right language for a given project, rather than mixing languages within the same project - or mixing languages within a single binary.

      Now, embedding an interpreter can be a very good idea in some cases (Think Emacs - or a game like Neverwinter Nights for that matter) - but of course only if the benefits outweigh the pretty daunting drawbacks that you point out.

      By contrast, having more than one language in a project may make perfectly good sense if the project itself is heterogenous; you may want to write the web backend in Java while having thin client UI glue as client-side Javascript (and of course access the database with SQL).

      And choosing proper tools for a new project rather than habitually, thoughtlessly use whatever you used on the last one is a no-brainer.

      --
      Trust the Computer. The Computer is your friend.
    3. Re:Solutions Should Be Natural by Duhavid · · Score: 4, Insightful

      I've worked with code like that in the "language of choice".

      Do these introducers never get asked to justify their actions?

      I dont see a problem with mixing languages, as long as the
      choice is a defensible one that moves the project forward.
      Making project choices on the basis of "gee, this will look
      cool on my resume", or "gosh, I really want to play with this"
      on any level ( in language or out ) should, generally, be
      disallowed.

      --
      emt 377 emt 4
    4. Re:Solutions Should Be Natural by Wdomburg · · Score: 5, Insightful

      And then someone might be tempted to work hard at trying to make your standard fix it and work. They might spend hours re-inventing the wheel. And what will that get them?

      Why, the ability to say, "Yep, and we did it all with one language."


      At the other extreme you've got people writing in whatever they want whenever they come across a problem and end up re-inventing the wheel because either "I don't like Perl!" or "Numbnuts wrote this code in Object Intercal 95, which doesn't have a compiler/interpreter on the platform I need."

      And what does that get you?

      Why, the ability to say, "Nope, we don't confine our employee's choice of languages." Well that and a morass of code based as much on individual whim as any logical need.

      As always, there is a middle ground - having a standard (or standards) with an allowance for justified exceptions.

    5. Re:Solutions Should Be Natural by rve · · Score: 4, Insightful

      Are you the only programmer at your company?

      Support and maintenance costs go way up when every programmer writes his little chunk of the application completey in his own style. By standardizing, on tools, coding patterns, naming etc, a company makes it less difficult for someone to debug or modify code that someone else wrote.

    6. Re:Solutions Should Be Natural by NitsujTPU · · Score: 5, Insightful

      I have to say that I agree with both your and the parent's point of view, but I think that you're taking what the parent is saying a bit too far.

      The parent is speaking of company-wide decisions. It makes a lot more sense to write a video game in C than in PHP, in the general case. It makes a lot more sense to write a web site in PHP, than in C, in the general case. You don't want to force your developers into an awkward scenario by having a company standard tool.

      You, surely, can picture the conversation where the writer of the interpreter from your game is told that he cannot use LEX/YACC, because his company standardized on C++. You can't? I was once told this at a meeting.

      On your point, however, I can also agree. Needlessly writing code in other languages makes debugging a pain, and reduces your ability to share code inside the project, a place where I imagine that the most reuse is likely to take place.

      Still. I can't really see the need for a company-wide decision to standardize on a single language for all of their development.

    7. Re:Solutions Should Be Natural by Jeremi · · Score: 5, Insightful
      Mixing langauges essentially means that a person who introduces a new langauge gets to build themselves (and a few of their pals) a little ghetto where other programmers are afraid to walk at night.


      Just to be contrarian... it can work the opposite way as well. Many of my co-workers are scared of C++, but when I added a Python interpreter to the codebase and started implementating some of the program's functionality in Python, they felt comfortable creating and editing Python code.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    8. Re:Solutions Should Be Natural by DavidTurner · · Score: 2, Insightful

      You have a great point about the difficulties of cross-language integration and debugging. It can be a bit of a nightmare, and is a good reason to develop individual products in a single language.

      However...

      "Where other programmers are afraid to walk at night"? What kind of "other programmers" are we talking about here? Speaking for myself, I have little time for programmers too afraid to venture outside of their "comfortable" language. Particularly if they then have the gall to describe themselves as "developers".

      Software engineering is language-neutral. If you can do it in pseudocode, you can do it in Lisp, C, Pascal, even (heaven forbid) Visual Basic. As many others have pointed out, some languages are better suited to certain tasks than others. One of your responsibilities as a programmer is to know which languages are appropriate for the task at hand. Blindly hammering away with C or Python or whatever is a sure road to obsolescence.

    9. Re:Solutions Should Be Natural by StressedEd · · Score: 2, Insightful
      Many of my co-workers are scared of C++

      That's a healthy attitude to have. Once you are scared of the beast you learn to treat it with respect!

      The lion tamer that runs into the cage armed with nothing but an innocent air and a blindfold doesn't stay a lion tamer for long;-)

      [Unless of course (s)he manages to put the blindfold on the lion, but that is another story and not really a suitable metaphor]

      --
      Be nice to people on the way up. You will meet them again on your way down!
    10. Re:Solutions Should Be Natural by The_Wilschon · · Score: 5, Insightful

      or "gosh, I really want to play with this" on any level ( in language or out ) should, generally, be disallowed.

      Except that "Gosh, I really want to play with this" is, especially among hacker types, probably the single most powerful motivator there is. Disallow that, and not only do you lose out on the drive that hackers have to play with something cool, but they get annoyed and disgusted, and probably wind up working less hard on the things that they are told to work on.

      --
      SIGSEGV caught, terminating

      wait... not that kind of sig.
    11. Re:Solutions Should Be Natural by Confused · · Score: 3, Insightful
      There is really no difference what language they wrote, if they can demonstrate a reason for using a different one and there are no strings attached (e.g. as there are for anything attached to .NET) then no problem.


      This attitude may work well in small throw-away projects, but from experience I can tell you, maintaining a mixed language product is hell. Just think about the awful mess you're going to have 5 years down, when you need to do an upgrade. If the whole project is written in one language, you're going to have to find only one replacement compiler/library/development environment - which can be hard enough. If you have a mix of exotic languages, you basically can forget it, just rewrite the whole mess.

      The same applies to training. The original developers may have been the biggest guru in the necessary languages, but where are you going to find maintenance drones that are fluent enough in all of them? Training a halfwit well enough to maintain some crappy C-Code is hard enough, trying to train him in C, Ruby, Scheme and Haskell is impossible. And even if you'd succeed, Mr C-Ruby-Scheme-Haskell-Halfwit won't stay once he comes out of training, he'll be gone to the next job before the ink on his new resume dried.

      All in all, if you're doing long term projects stay with one language and try not to use too many extra libraries where you don't have the source code available.
    12. Re:Solutions Should Be Natural by 47F0 · · Score: 3, Insightful

      Yep, you're an IT manager all right.

      Frankly, I think you should standardize on COBOL for your video game product.

      A question for you. When you take your car to be serviced, do you feel like effective work is being done when the entire collection of shop tools in the garage fit into a lunchbox?

      I've been doing this for thirty years. I have worked, both as management and grunt in highly standardized, and very non-standardized environments.

      My take? It's a bell curve. At one end, development anarchy is non-productive, and unmaintainable. On the other hand, you absolutely cannot be afraid of the idea that a hammer is not a universal tool.

      Somewhere in the ideal is the notion that it often take more than one tool to do the job effectively - balanced with the knowledge that it seldom takes fifteen wrenches to change a tire.

      In general, simply because of human fear of the unknown, or sheer sloth and inertia, a large majority of shops gravitate WAY too far towards standardization. Your development manager DOES NOT WANT NEW TOOLS - it makes their job harder (i.e. challenging) "We're a VB shop - you can do anything in VB. VB Rules". Yeah, well, sometimes that's exactly right. Sometimes.

      Sorry, but I promise, whatever the cost of acquiring those new tools, if they're appropriate to the job, not acquiring them costs even more in the long run. Every time. But hey, if all you care about is the next quarterly budget, pick your poison and live with it.

      Otherwise, get used to the idea that your mission is going to be constrained and compromised by the fact that you bought the $9.99 tool set at autozone instead of hanging out at the back of the Snap-On tool van learning something. In the meantime, if your business is at all competitive, someone is out there gunning for you - with a little faster gun.

    13. Re:Solutions Should Be Natural by Bush+Pig · · Score: 2, Insightful

      To repeat a quote whose source I can't recall: "If the only tool you have is C++, everything looks like a thumb."

      --
      What a long, strange trip it's been.
    14. Re:Solutions Should Be Natural by petermgreen · · Score: 2, Insightful

      the trouble is unless you are prepared to use a purely procedural C style api (and with some of the less conventional languages even if you are) calling cross language can be more work than reimplementing the functionality from scratch. (wrap object in C style api and then re-wrap that c style api for the target langauges oop system) and if some or all of the langauges aren't native code compiled will likely increase your deployment hassles too.

      and ofc if you wan't your java code to run untrusted then its going to have to be 100% pure java. Not to mention that using awt/swing components in a non-java window does not appear to be documented anywhere (the jni awt stuff gives some clues on possible ways but it seems to be mainly aimed towards native code drawing within a java window not vice versa).

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    15. Re:Solutions Should Be Natural by TheRaven64 · · Score: 5, Insightful
      You dont learn a language, which is just basically a syntax and keywords, you learn abstract concepts like iterations, paralellization, recursiveness, object orientation, etc.

      You learn all of these things. Then you look at Visual Basic code, and realise that a lot of other people didn't.

      --
      I am TheRaven on Soylent News
    16. Re:Solutions Should Be Natural by cduffy · · Score: 2, Insightful

      My environment is all web-based programming.

      If that's all you're doing, and there's not a huge amount of variety between projects, and your sysadmins don't write in-house tools which might be covered by this policy, good for you. That said, I'm in an environment where there are good reasons to be heterogenous, and I would object strenuously if there were attempts by someone in management to make that change.

      Our core (a large webapp) is written purely in Java. That makes sense -- it should be written purely in Java, and if some developer were to prefer to use Jython or a Java-bytecode-compilable Scheme variant, they'd need to have an exceedingly compelling reason. However, there's more to our company than just the one webapp, and that's where other languages come into play.

      For the surrounding infrastructure that supports our code, we have bits written in POSIX shell (mostly related to integration with various components of the operating system -- these would be much more trouble to build and maintain in a different language, and the JVM's limited view of UNIX permissions means that some of their functionality couldn't be implemented in Java at all without writing a JNI module); bits written in Python (most particularly, our framework for using a fully OO inheritance model to build screen scrapers for 3rd-party terminal applications with which we need to integrate. This uses pexpect, a Python-focused variant of Expect [which is otherwise available for Tcl, and also has a Perl variant, but would be a PITA in either C or Java], for the screen scraping bits, and makes heavy use of Python's object model (including some things that Java won't do) to keep the code size and complexity for the actual screen scrapers (as opposed to the framework) at a minimum).

      We maintain patches to some 3rd-party OS-level tools which are written in C. We maintain some win32-specific tools, including an installer (written in a custom language just for the purpose) for a package of items to be installed on our client systems. We've patched the DSDT tables used to initialize the PCI bus on our servers before (large systems which were given to us by a partner free-of-charge) and written our own SCSI drivers (to be able to use a tape jukebox which we picked up nearly for free). We couldn't conceivably do all this in one language.

      If we'd been hamstrung to use Java for everything, the Windows installer would have been a pain. The screen scraper integration code would have been almost unthinkable to write in-house, and we would have licensed a (hard-to-use and expensive) API from a 3rd party. We wouldn't have been able to write the remote client support tool based on the UltraVNC SC client (the first version was literally put together overnight; the upstream code is C++). The system administration tools would have been written in shell in violation of the policy, because convincing sysadmins to write their tools in Java is pretty much unthinkable.

      That said, things are still broken out. The core dev team, which is most of the coding staff, only needs to know Java (and in many cases SQL). The system administrators only need to know POSIX shell, Python, PHP, SQL and C (and the entry-level ones can get away with only POSIX shell). The integration developers only need to know Python, Java and SQL, with a little POSIX shell being helpful but not required. The deployment engineers need POSIX shell, Python and SQL, and the most senior of them need C. Just because we have a number of different languages in use somewhere in the company doesn't mean that everyone needs to know everything, and the strong majority of dev staff (the core team) knows only one. System administration, integration and deployment are much smaller groups, so training them is more reasonable. (Further, these requirements are of the form "someone in the department must know", rather than "everyone in the department must know", particularly for the latter-listed languages).

      Standardizing on

    17. Re:Solutions Should Be Natural by Patrick+May · · Score: 2, Insightful
      The same applies to training. The original developers may have been the biggest guru in the necessary languages, but where are you going to find maintenance drones that are fluent enough in all of them? Training a halfwit well enough to maintain some crappy C-Code is hard enough, trying to train him in C, Ruby, Scheme and Haskell is impossible.

      You could avoid the problem by not hiring halfwits.

    18. Re:Solutions Should Be Natural by 16K+Ram+Pack · · Score: 2, Insightful
      You are right.

      For instance, with your set, would PERL make sense? For me if a developer said that they wanted to add a step to a process as PERL, I'd tell them to just write it in one of the core languages. A 10% time saving wouldn't justify the legacy costs and lack of leverage. On the other hand, if someone suggested that we install Bugzilla, even though it was another language, it could make sense.

      In the end, it's about what the most cost-effective decision is. And most of the time, adding a new language doesn't meet that. The most common justification to me is actually switching languages (like companies I know that decided to stop writing new VB and switched to C#, or in my case, making a cost-based decision to switch to Python).

    19. Re:Solutions Should Be Natural by crawling_chaos · · Score: 2, Insightful
      Disallow that, and not only do you lose out on the drive that hackers have to play with something cool, but they get annoyed and disgusted, and probably wind up working less hard on the things that they are told to work on.

      Which causes management to move development to the subcontinent, where such prima donna behaviour is not coddled. You take the man's money, you play by the man's rules. If you can't return value in excess of your salary on those terms, expect to be asking someone if they'd like to Biggie Size that soon.

      A while back there was an article on NASA's programmers for the Shuttle's systems. They don't use the latest whiz-bang tools, they work nine to five, and they follow a development model that is so rigid that most coders would quit after the first five hours. They also have never flown a mission critical bug, if I recall correctly. There's not a line of Ruby, no perl scripts, no XML, no fun. Just software that works as advertised. In the end, that's what management wants to build. Your self-esteem is secondary at best, despite what your Kindergarten teacher told you all those years ago.

      --
      You can only drink 30 or 40 glasses of beer a day, no matter how rich you are.
      -- Colonel Adolphus Busch
    20. Re:Solutions Should Be Natural by Chandon+Seldon · · Score: 3, Insightful
      Code for the space shuttle is embedded systems code designed to run on an otherwise obsolete platform. Also, they can easily afford to spend a million dollars per line of code.

      Real projects are a bit different. There are time and budget constraints. The choice of programming language(s) is an engineering consideration, and the choice should be made by the same people who would chose data structures and algorithms.

      In the real world, working with more than one programming language can save a lot of time and effort. A competent programmer should know most of these languages anyway, and learning a new one is pretty easy.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    21. Re:Solutions Should Be Natural by 16K+Ram+Pack · · Score: 2, Insightful
      ... and then what happens if you then want to put some of the functionality that you wrote in your flat text reader into your web service (for example)?

      Multiple languages in your example are only justifiable if I know that the file processing in our key language could not meet the business requirement (like it was overnight processing and would take 20 hours in our key language and 2 hours in an alternative). Even then, I'd seriously consider what else could be done first.

      The cost of programmers and delivering the service is a far higher consideration to me than the cost of machines. More languages means more complication and risk.

    22. Re:Solutions Should Be Natural by TheSpoom · · Score: 2, Insightful

      I'm sorry, but even as a programmer I can see that having your program work and be maintainable is much, much more important than allowing a developer to play with new toys.

      --
      It's better to vote for what you want and not get it than to vote for what you don't want and get it.
      - E. Debs
    23. Re:Solutions Should Be Natural by Chandon+Seldon · · Score: 2, Insightful

      Training is a small short term cost with huge long term benifits. There's no good reason not to do it.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
  2. depends on what you code by Pavel+Stratil · · Score: 4, Insightful

    Among my collegues we discussed this about a year ago. After doing some performance tests and after trying to write "problematic" pieces of code in some other languages, we dropped the standardisation idea. You either end up with bad performance or some long bizzare code (when you have problems with translation). There are also times where interpreted/scripting languages are of much higher value. Naturally you shouldnt end up using everything...

    There are a few languages groups:
    Special: Sql, Fortran, ASM
    Brute force: C,C++
    Object: C++, Py, Java, Ruby, Lua
    Scripting: Perl, PHP, asp
    High level: Haskel, LISP

    As Python, Ruby, Lua are all the same and closely related to Java I definitely wouldnt use all of them. You might be well of with one, maximally two from each of the groups you use (appart from the special group:)).

    That's my point of view being a person solving a very wide range of problems. But if you just write stuff that doesnt have much inovation (i.e. basic desktop apps.), a single language might suite well enough.

    1. Re:depends on what you code by shutdown+-p+now · · Score: 5, Insightful
      First of all, there is no such language as "ASP". Classic ASP is VBScript/JScript out of the box (and you can also have e.g. PerlScript if you want to). ASP.NET applications can be written in any language that targets .NET, but typically it's C# or VB.NET. Also, it's very interesting how you lump Perl and PHP together and call them "scripting". If it means what it normally does, than why Python, Ruby and Lua aren't there as well? Or did you mean to write "web development", perhaps? but then it's even stranger, because Python and Ruby are also just as good as Perl in that regard (ever heard of those things called Zope and Rails?), and Perl is also a decent generic-purpose language which supports OOP (arguably to a better extent than C++ does, in fact). Lua, on the other hand, is not an object-oriented language by itself.

      Also, what makes Lisp high-level over, say, Ruby? And Haskell is a very different thing from Lisp, you know, probably deserving a category of its own (together with Scheme and OCaml).

      Then... WTF? Python and Ruby are closely related to Java?!! And Lua, too? Gosh... Lua isn't even object-oriented, for one! Ruby is essentially a bastard child of Smalltalk semantically, highly dynamic, closure-centric - nothing even remotely close to what Java is. Python - it has multiple inheritance and multimethods, again, something Java avoids on purpose. So... er... looks like you don't know what you're talking about, really...

    2. Re:depends on what you code by root-a-begger · · Score: 4, Insightful

      I agree with your concept of categorizing based on type/style of programming. I don't especially agree with your categories, but that's just my opinion.
      About 2 years ago, I went through the same thought process as asked in the original post. I was not encumbered by a large IT department that would dismiss my opinions if I came up with non-mainstream ideas. This led me to a very broad and lengthy search. Here is the result of my quest for an answer:

      1 - Application language - Erlang
      2 - Brute furce / close to the metal - C
      3 - System scripts - Bash

      I chose erlang after 8 years of Java programming which was followed by 8 years of Smalltalk. The main reasons for departing the mainstream OO world were concurrency, distribution and conceptual integrity. I found that in large systems what kept me worried most is being able to "prove" that my code worked as the system scaled and became distributed over local and worldwide "clusters". I wanted to be certain that no race conditions or locks occurred (just being able to monitor and restart VMs was not the answer for me). You can get concurrency assurance with Java or any "shared memory" / object pointer based langugage but you need very well written and tested frameworks to fully encapsulate anything that may be touched by more than one thread/process. Solutions like JBoss or other widely encompassing application servers also were not the answer for me as I had to trust that everything the app server did was correct and wading into these projects to find out if things are correct or to fix anomolies is a big challange.
      I simply grew tired of writting the frameworks required to encpsulate concurrency and limiting my application code to the nature of the frameworks. Sure, there are many existing frameworks in the Java world that encapsulate the hard work and concurrency for you. But thats exactly the problem: there are many of them. This gets me to the last point of my rational: conceptual integrity. Each Java framework unleashes its own concepts and patterns. I wanted one small set of patterns that are used everywhere. I found this in erlang. It turns out that by making concurrency a first class priority in the language design, the need to invent frameworks and other patterns to encapulate the hard work mostly dissapears leaving behind a clean slate to write your app.

      The second category, C, speaks for itself. Occasionally, I need to touch the OS or even bare metal and want a very straightforward way to do this. My C code ends up being very limited, well tested and compartmentalized.

      The third category was a tough call. I was tempted to pick Python/Ruby/Lua/Tcl for system scripts. But the bottom line is I didn't really need them and for anything complex, I could write system tools in erlang that were called by Bash. This keeps my usage of Bash simple and maintainable without introducing yet another language.

      I realize that my first choice, erlang, brings up the obvious issues of how do you replace programmers easily when you can't find resumes with erlang expertise. I have found that no matter what lagugage you choose, you have to re-train programmers to do things your way and there is a learning curve to introducing anyone new to your IT group. My choice in erlang has not increased the learning curve for good programms I bring on board.

      I realize this seems like a giant plug for erlang. It is and it isn't. My rational stands on its one regardless of your choice.

      good luck to you...

  3. That's dumb. by Max+Threshold · · Score: 4, Insightful
    Speaking from experience: use whatever tool works best for the job. Let me guess... the guy advocating using one programming language for everything wears a suit and has never written a single line of code in his life?

    Now, one thing that does need to be standardized is terminology. I'm working on a contract right now for a wireless telco. The hardest part of this project was getting managers from various departments to agree on how this system we're trying to automate is supposed to work, and describe it to me in a way that would allow me to translate it to software. Compounding the proverbial six-blind-men-describing-an-elephant problem was the fact that everybody was using different vocabulary.

    1. Re:That's dumb. by Rix · · Score: 3, Insightful

      I bet you've never driven a backhoe professionally, but still you have strong opinions, based on good business sense, on whether people should accidentally cut off your company's Internet connection with one?

      Yes, but I wouldn't presume to tell someone else which brand of backhoe would be least likely to do that.

  4. All languages are the same by photokevin · · Score: 2, Insightful

    Standardizing on one language is not a problem. "The determined Real Programmer can write Fortran programs in any language".

  5. Size of your company by erbmjw · · Score: 5, Insightful

    It can depends on the size of your company. I worked for a fairly small shop that specialized in Java and SQL work, because of that we became known for it in a positive way. It also was very useful because we all had a decent grounding in Java and our constant work in it had all of us improving our own skill sets quite rapidly.

    But the firm had only 9 geeks, so as I said ... small shop. In other situations I can see why multiple languages would be more useful than a standardized company one.

  6. Danger, Will Robinson by Gorobei · · Score: 4, Insightful

    If you can, avoid the discussion/meetings/emails.

    Firm-wide standardization drives are

    a) usually politically driven, and if you voice the wrong opinion you will be disliked.
    b) driven by the incompetents - if they could do something profitable, they would be doing that.
    c) out of date by the time they are finalized.

    There is no upside here because there is no magic standard that will make things better.

  7. Pick Two by Tablizer · · Score: 4, Insightful

    Pick one static/strong-typed language like Java or C#, and one "scriptish" language such as PHP, Python, or Perl. Some tasks will be best suited to one or the other.

    1. Re:Pick Two by samkass · · Score: 5, Insightful

      I think the parent is exactly right. All the people talking about "use the best tool for the job" have probably not worked very long in the industry. Being able to build on each other's successes, re-use code across projects that gets more vetted with each project, and build expertise with all the "gotchas" in your language of choice will make your company's product better and the company more profitable. These days, you can do almost anything with any of the popular languages, so there's no point in using more than one or two of them.

      I'd say, standardize on Java, C#, or C++ (depending on your needs) as your primary language, add your scripting language of choice, then fire anyone who can't handle that. You'll be better off five years down the road than if you'd all built your fiefdoms around the tower of babel and every project becomes a throwaway codebase as the next "best tool" comes along 4 months later.

      Any company that can't standardize on a language doesn't really have a coherent vision anyway, and probably is either a bunch of folks pretending to be a consulting firm or will disappear before too long.

      (I'm sure I'm going to lose mod points for this reply, seeing what other people have written, but I don't see how any other approach is practical in the long term.)

      --
      E pluribus unum
  8. Like a single screwdriver? by PornMaster · · Score: 4, Insightful

    Why wouldn't it be more like standardizing on torx vs. phillips head, or standard vs. metric?

    We all know that monoculture can be bad. Besides platform uniformity, strict monoculture opens you up for enterprise-wide vulnerability, and even getting people with a similar, closed mindset. But it also provides for the ability to have a common dialogue with one another. It can be a shared jumping-off point. It keeps you from getting screwed when the one guy at the company who knew mindfuck leaves, and nobody else knows how to read his code.

    There are costs and benefits to having, and to deviating from, a standard operating environment. Deviations should be allowed, but the deviations shouldn't be up to the developers, they should be weighed by management (who shouldn't be idiots), and risks and benefits weighed.

    Business needs shouldn't be determined by developers. Developers tend to believe in nifty hacks. Code monkeys can love the elegance of using nuance in their code, but there's also a reason that they're not in charge. And it's not just because managers are stupid. Processes may be tedious. They may even be a reason for a developer to hate his job, which isn't good for productivity. Knowing 4 languages, and having the business be dependent upon him may be wonderful from his point of view. But having an employee dictate how things will be done can be destructive to the business. Particularly when he leaves the company for another job, and the new Java guy can't do shit with the Ruby and python.

  9. Some of the pros and cons by alangmead · · Score: 5, Insightful

    A single language makes each developer easily replacable. You quit, they just hire another Java programmer. If the collection of software you develop with is sufficiently unique (XSLT with extention functions written in both Groovy and Jython on IKVM running under .Net) you can create a position that would be nearly impossible to fill.

    On the other hand, having each developer work on projects with their own collection of technologies tends cause the maintainance tasks of those projects go back to the original developer. This is generally a bad thing. Having a developer know that no one will ever see their code gives a temptation to take shortcuts that they wouldn't take others. Even more than code reviews, splitting maintanance across developers encourages quality code. You don't want a co-worker cursing your name as they try to add one minor feature to something you've done. ("F'n Andrew! Why'd he do that!").

    Different languages and other technologies have their strengths and weaknesses. If they are chosen based on their strengths and not just their familiarity (let alone out and out prejudice) then their should be productivity gains achived from the choices. Of course, that means that this would increase the ramp up time a new developer needs to be very productive.

    So if you have high turnover, you want to get new developers productively quickly (which would imply standardizing on as few languages and technologies as possible) and you want to get projects seen by as many developers as possible before the original developer leaves. (If Andrew is long gone, then "F'n Andrew!" can be an excuse given by the maintainance programmer, even if it is groundless.) If you have a lower turnover, then developers start getting a better feel over which technology choices fit in which business scenarios.

    If this standardization is being driven by upper management, they are hoping to turn the developer positions into a cookie cutter role.

  10. Pondering further by deadlinegrunt · · Score: 4, Insightful

    What item should I pick to always win in rock, scissors, paper?

    --
    BSD is designed. Linux is grown. C++ libs
  11. Better reasons than that... by cfulmer · · Score: 5, Insightful

    "Save everybody time" is the best the pro-standardization folks could come up with? How about: (1) save training and support expenses for multiple sets of tools & languages; (2) specialists in the language & its quirks can benefit the entire enterprose not just the single group; (3) integration between different pieces of software is significantly easier if they're all in the same language; (4) easier to reuse code; and (5) easier to adjust when developers leave.

    It's impossible to know whether it's a good idea in your case without knowing a lot more about what your company does, but in general a bad technical decision made for a good business reason is better than a bad business decision made for a good technical reason. The first one will cause you headaches down the road, but the second will make sure there's no road to go down. The key is deciding which decisions are good and which only appear to be good.

  12. Sounds to me like some people only know Java by leereyno · · Score: 1, Insightful

    When the only tool you have is a hammer, every problem looks like a nail.

    It sounds to me like the people who are pushing for standardization only know that one language they want everyone to standardize on. They're not trying to make things easier for EVERYONE, they're just trying to make things easier for themselves.

    Anyone who is limited to a single language is essentially incompetent. If they lack the natural curiosity to seek out and experiment with new development tools and languages, then they're pretty much worthless.

    I work as a sysadmin, but even I know how to code in C/C++, Java, Perl, Bourne shell scripts and even visual basic. If someone told me I had to "standardize" on just one of the above, I'd KNOW they were either crazy or stupid.

    I think you really need to consider finding employment someone else, hopefully someplace where the idiot quotient wasn't quite so high.

    Lee

    --
    Muslim community leaders warn of backlash from tomorrow morning's terrorist attack.
  13. There is perhaps another viewpoint... by riprjak · · Score: 2, Insightful

    ...You seem to be seeing it as a negative, yet standardisation is the Engineers greatest tool; without standardisation, Eli Whitney wouldn't have been able to manufacture weapons fast enough to win the American Civil War; Henry Ford wouldn't have produced a cost effective automobile; Toyota wouldn't be the insanely successful company they are today, of course, they standardised on a method of doing things, not a specific type of tool... Anyway, enough engineering bias, let me try and make a point :)

    Could a layman not ask the question of multiple programming languages being utilised as follows; why do you need to use thirteen different tools to solve the same problem thirteen different times? This is just as foolish... Note I am not talking about solving DIFFERENT problems...

    Standardisation is NOT INTENDED as a straight jacket, however it does intend to ensure that faced with the same situation you use the same solution. It is about portability and interoperability, it is about ensuring that if you get hit by a bus an equally competent colleague can pick up where you left off with minimal learning curve. Naturally you should employ process improvement methods after each activity to fine tune the methods!! that goes without saying. Anyway the true Engineer only uses appropriate tools to solve a problem. Sometimes "appropriate" means the tool which is perhaps not the most ideal immediately, but creates the least ongoing burden (for maintenance, interoperability, etc...).

    The descision to standardise should be made for one reason only, to IMPROVE your businesses products or processes. If you do not gain from standardising, do not standardise. Likewise, do not resist standardisation just because it is out of your comfort zone, because it makes YOUR life harder even as it yields overall benefits or because you PREFER tool a over tool b. It most certainly not be resisted because it makes your job less secure. :) Like everything else in business, there is only one reason to do ANYTHING, you take an action because it yields an overall, objective benefit. Of course, I, personally, take the long view to "overall" and often recommend and sign off on short to mid term pain for long term gain.

    just my $0.02AUD
    err!
    jak.

  14. Argument for Standardization by Hairy1 · · Score: 2, Insightful

    There are a few things I could say about standardization:

    First of all it means that any developer can work on any project. If you have a developer leave, die or go on holiday their projects are not left in limbo while some other developer gets up to speed. In large shops it might not matter so much, but with a small shop of four or five developers it's a different story.

    Maintaining a level of professional proficiency in any language means spending time on a regular basis developing in it. Languages and utilities change all the time, and to keep up takes time. I can't imagine a single developer being proficient in more than three languages. For example, I used to do Delphi, but havn't really done anything in it in a couple of years, so I'm not really in touch with it anymore.

    From a business perspective its good to concentrate on being good with one technology rather than being mediocre in several. Learning new languages takes time, and so having standardized on one language means not needing to train new employees in several languages, and also keeps the employment pool wide.

    It means you can be clear about which projects you are aiming for, who your clients are, and allows you to concentrate on what you are good at. Obviously you don't want to chose a language which paints you into a corner - it must be flexible, generic, well supported by employee availability, and accepted by clients (and yes, some clients do care).

    However, that doesn't mean you stop evaluating the options. Right now we are moving from Java technology towards Python. Our bread and butter is still Java, but Python is giving us a faster more effective way to develop web applications without sacrificing our favorite language features. We even mix languages in projects.

    However, unregulated use of languages is not permitted because it would mean having no clear strategy for the future support and maintenance of the project. Moving to python for me means moving all our developers to that technology, and making sure we don't lose the company advantages we built up by using Java.

  15. For a product line, ok. For a company, god no. by gte910h · · Score: 4, Insightful

    Unless your company is an ungodly narrow sort of business, you should rule out the use of other languages entirely.

    If you're hiring programmers who are totoally hopeless in other languages, you're not getting very smart programmers.

    However, it makes oodles of sense to restrict languages for a certain product. That makes everyone on the team interchangable, and it makes it easy to have a place to plop new hires (who know that language).

    However, before you build in a product restriction, you should put an out for performance/library reasons. I think it's silly for a shop to standarize on Java/Python, when you quite often need to make a C/C++ JNI/Swig wrapper to get certain tasks done.

    At my firm we do a LOT of Python with C++ performance cores. We do some Expect scripts to interact with interactive programs. If we had standardized down to the point we would have used One And Only One language, then we would have one of many suboptimal situations: Standarizing on Expect would have been silly, TCL is not a full featured language. If we had standarized on Python Only, some of the code that needed to run over HUGE datasets would have taken approximately 15 times longer to complete than the C++ core did. The C++ core took HOURS as it was.

    If we had standardized on C++, our dev/debug time would have been much much higher. We also would have had to spend more hiring developers (you can get good python code out of an intern. Good C++ doesn't come out of interns often enough to mention).

    Standardizing on C++ isn't really standardizing. For a project to really standardize on C++, you have to pick a subset of that colossus and forbid the rest.

                                      --Michael

    --
    Want to see every step I took to start my company? http://www.rowdylabs.com/blogs/pitchtothegods
  16. Are You Surrounded by Incompetents? by cheesedog · · Score: 4, Insightful
    Here's how to tell that the people that surround you, um, how to put this delicately... 'lack critical thinking skills':
    1. They advocate standardizing all software development on one language
    2. They advocate standardizing all development tools in one IDE
    3. They advocate standardizing all code formatting into one standard (tabs v. spaces, how far to indent, where to put the curlys, etc.).
    4. They advocate standardizing on hitting '60' instead of '100' when you use the microwave and want to heat for 1 minute.
    5. They advocate standardizing on one height for all adjustable chairs in the office.

    Notice a pattern?

    If there are enough people in your organization that this issue actually has to be debated, you might as well start looking for an exit -- the company is doomed to, at best, forever wallow in mediocrity. I'm not exagerating. This type of 'discussion' shows a serious disregard for reason, logic, and a lack of respect for wisdom. It's a serious indication that those spearheading the push have no clue what they should be doing in their roles -- they can't figure out how to do real work that would actually be valuable to the company, so they choose to waste their time on this.

    There is something else at play here: whoever is pushing for this doesn't trust their developers to make sane decisions regarding development tools. Maybe that mistrust is warranted, maybe it isn't. Either way, you are screwed.

    Now, if you were talking about a 5-man startup, it's almost a sure bet that you are all going to be writing in the same language, and you might even all be using the same IDE. Same if you are working in a small team in a larger organization. But a company-wide push to put all your eggs arbitrarily in one basket? Insane. For one, it means that the company will only attract (or keep) programmers who are not interested in developing new skills. And a programmer who is not interested in keeping their toolset current is generally a very poor programmer.

    Smart people don't build monocultures on purpose.

  17. Pick Two: It Does Make Sense to Narrow the Field by BigTimOBrien · · Score: 5, Insightful

    Pick Two

    One from - Java, C#

    One from - Ruby, Python, Perl

    It makes perfect sense to standardize on both. Scripting languages will always be more appropriate for text processing and other tasks like validation and system administration.

    But, from what I've seen, it is important to standardize an organization on one of each. Letting people go off and just write System X in new technology Y might be enjoyable, but it does end up in a great deal of duplication and expense. For example, one environment I've seen has a great deal of Actionscript, a great deal or Ruby, more Perl than I'd ever want to see, and some J2EE applications. This usually occurs when an organization lacks a sufficient level of oversight over architectural decisions.

    Just pray that neither side wins. Writing only Java is as silly as writing in a different language every single day.

    --
    ------ Tim O'Brien
  18. Minimize platform diversity, don't eliminate it. by firewrought · · Score: 2, Insightful
    I believe in using the best car for the job. When I'm going to the beach, I take the SUV. When I'm driving to the other side of town on surface streets, I take my civic; if it's raining, I'll swap out the touring tires for all-season ones and give the windshield a quick RainX treatment. When oil prices spike, I'll whip out my OBD-II and tweak my fuel ignition timings; I usually remove all the passengers seat too, though one time a coil popped loose and tore a hole in some new jeans. If I've got a date, I'm going to pick her up in the Porche, unless she's the earthy type who would rather make out in a Jeep... or, actually, I'd prefer to use a HumVee, but I had to sell mine so I could rent a 18-wheeler to help my friend move out of his apartment. It was a hefty expenditure given that I had to hire a commercial driver and pay insurance, but we were able to get it all in one trip! With an ordinary vehicle, we would have to ferry stuff back and forth, which would have taken, like, ages.

    Moral: 'The best tool for the job' is not the same thing as 'the best set of tools for all of our jobs'. I suspect most businesses will do best picking one or two languages (static+dynamic works well, like Java/Jython) and sticking to them except in well-justified exception cases (like needing to write a device driver). DBA's and sysadmins will probably have their own collection of scripting languages dictated by their DBMS or OS platform.

    The opposite of 'best tool for the job' (often subscribed to by programmers) is the 'one size fits all' advice (often subscribed to by management). It has problems too. If your bias is towards 'best tool', think about (1) overcoming any reluctance you have to learning a new or "rival" platform (2) long-term cost and risk of having an extra platform [it's higher than you think]. If your bias is towards 'fits all', learn more about when language choice it matters and be receptive to dialog on new or alternative tools. (2) avoiding pointless diversity which will cause headaches for future maintainers down the road.

    --
    -1, Too Many Layers Of Abstraction
  19. The distinction between standards and uniformity by jd · · Score: 5, Insightful
    I agree completely with what you're saying. It all comes down to an important distinction between having standards and having uniformity. "Wait!" I hear some cry, "Aren't the two the same?" Well, no. A standard translates, in pseudo-code terms, to "if X then Y". Uniformity translates to "always Y".


    What needs to be standardized, then, is not the language per-se, but the rules by which a language is selected. The IF statements. If you read through the standards documents on the IETF's website, you are not looking at a single, all-encompassing rule. You are looking at possibly a few thousand rules, with enough logic behind them to determine which rule applies.


    In the case of a company picking a programming language, you probably don't need a few thousand rules. A single side of paper should be more than sufficient to cover all the meaningful languages and the cases they apply in.


    Rule 1 might be: "If a more precise rule is not defined, programs should be written to the ANSI dialect of C, revision C-99 with all threading assuming the POSIX threading model and other parallelisms within a single computer assuming OpenMP extensions. Where a more precise rule exists, that rule takes precedence over this default action."


    For embedded code in web pages, the rule might be: "Except where a specific project requirement dictates otherwise, embedded code within web pages should be written in PHP, revision PHP-5.1"


    For transportable bytecode, you might say: "Web-enabled applications, applications needing to run on clients without installation and applications needing to run on otherwise unsupported platforms should be written in Java and compiled to bytecode using a standard Java SDK version 1.5"


    For configuration code, you might say: "Automatic configuration files should be written to the standards specified by Gnu Autoconf and Gnu Automake, using the applicable Gnu M4 macros" (Hey, M4 is a language too!)


    You'd then have a few more cases for specific types of work the company does a lot of. This may include additional rules requiring C, but that's fine. You want the specifics in there, so that if you want/need to change the default action, it doesn't screw everything up.


    If you're defining standards for languages, I'd also define in the same document some standard coding practices (eg: keep namespaces distinct, if you're using javadoc or something similar then comments should follow javadoc's rules, if you're using a code validator that uses comments to embed commands then state what commands should be used and when, if you're using a SCM - a very good idea - then comments to embed details like revision notes, date, etc, should be included in a standard location, etc.)


    The upshot is that there's a lot of different things to consider, nobody can just pick one language for all occasions. Well, they can, but the only language that will ALWAYS work for ALL cases is assembly, and I don't think many people really want to write entire applications in assembler any more.

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
  20. This is Why We Have the Mess We Do! by SerpentMage · · Score: 2, Insightful

    "I am a computer programmer. I make computing devices do what I want. I will use any tool at my disposal, to hell with my employer's proposed "beneficial" restrictions."

    This is why we have we mess that we have now! If you were an engineer and machinist you would be screaming bloody murder! About 20 years ago the car industry had the problem where they had 20,000 parts that were unique to a car. When a new model was introduced there were 20,000 more parts unique to the car! All of these unique parts were wrecking havoc on car design, and maintenance.

    If any of you remember the K-Car from Chrysler it was the first attempt in the car industry to share parts (Oh the horror! ;) ). It worked and brought Chrysler back from the brink. From that point the car industry understood standardization needs to happen. Now we even see standardization of major parts across car manufacturers. And yes standardizing on one screwdriver is part of it!

    --

    "You can't make a race horse of a pig"
    "No," said Samuel, "but you can make very fast pig"
  21. I see your problem! by Gorimek · · Score: 2, Insightful

    A company where that can happen has a much bigger problem than languages. Such as a complete lack of teamwork and communication between it's developers!

    Standardizing on a language will help a bit with the symptoms of that, I suppose, but unless you address the actual issue, I don't foresee great things for that kind of organization.

    Not to get religious, but avoiding problems like this is one of the big "hidden" advantages of pair programming.

  22. Language Per Project by Anonymous Coward · · Score: 1, Insightful

    It's shouldn't be an issue of best language for the company, it's an issue of best tool for the job. I saw the reference regarding standardizing on a screwdriver in a manufacturing plant. Strangly enough that does makes sense alot of the times (I used to run a plant and standardizing on a screwdriver meant we could buy 500 high quality screw drivers each at the cost of a cheaper model). But on the other hand, on one production line where we handled through-hole soldering work on a primarily surface mount board, we used high quality Diamond-Excelite diagonal cutters that reduced the number of blisters and calluses on the workers hands. In the primarily through hole manufacturing environment, we standardized on using air tools for clipping, Diamond Excelite make a fabulous air compressor powered set of clippers that can cut 6 leads simultaniously in one click of a button. In this environment, it made more sense for that tool. Also, I'd like to make clear that in cases where we needed a hammer, we used a hammer, not the other end of a heavy screwdriver.

    That all being said, working as an engineer in a leading commercial software company, we standardize on a language per project/environment. The software we develop is 95% C++ and 2% Java and 3% scripts (makefile generators etc..). In the IT/IS departments, we use Perl for the automated build systems and we use PHP for web systems. In places where we know there's no hope for a standardized scripting language across platforms, we often write simple C programs mixed with bourne shell and windows scripting host.

    For managers, this environment is often a disaster. It requires that we have a minimum of 3 developers for each language used. Of course there's often an overlap in skills, and typically, an educated developer can work in any language, but it still means that we have to make sure the talent is always available.

    The rule to remember is that if you have 1000 screws and 1000 nails, and the job requires 2000 fastening components, it often is better to standardize on one or the other and purchase the extra 1000 fasteners while the first 1000 are being used. But it does not make sense to use 2000 nails if 2000 screws does the job cleaner and more efficiently.

    This is a problem I have seen in many companies over the 14 years of my professional development career. If you are however an IT department developing a single set of systems of a single set of users, then standization may not be the wrong choice. If your company has the budget to hire a Ph.D. that can work purely in a research environment to develop alterative solutions to problems, it may make sense to hire one. It often makes sense that a proper researcher is on staff to make sure that the company is never stuck in a single solution environment. I personally like the .NET solution over Java (and in fact, I don't like either solution, but choosing the lesser of two evils) because Java is theoretically standardized on a single language for a single platform (the JVM) where .NET is instead a solution that standardizes on no language but could realistically be targetted to different platforms if someone were interested. It would be excellent to one day see a C# and Visual Basic compiler targetting the JVM for instance.

    Good luck, but I suggest you just go with it, if management has come to such a solution, it's is more likely that managing multi-language systems is too much for the organization.

  23. Libraries - not languages by StressedEd · · Score: 5, Insightful
    Having read many of the posts here I think people are missing the importance of libraries.

    I would hazard a guess that most people want to get a problem solved in the most painless manner possible when programming.

    Surely the best way to achive this is by avoiding the reinvention of the wheel.

    In some manner I tend to view languages now as nothing more than the glue that binds library calls together!

    My approach is:

    1. Work out what you want to do.
    2. Find libraries that implement the most difficult parts of the problem.
    3. See what language bindings exist.
    4. Choose the language appropriate to this.

    For example, there is a wealth of scientific code out there in F77. Just because F77 is old doesn't mean that the libraries are now wrong. They still do what they did back then. They are still useful. People have spent a great deal of time working out the error propagation in these codes, the efficiency and their validity. Do you really think you will save yourself time and do a better job by rewriting it in Java? No! So. Use them.

    Then there are (great) libraries such as ATLAS or FFTW [*] written in C. Why assume you can do better? You can't, use that too.

    In the rare case where you need to have something written from scratch, write it in whatever you are comfortable with. In my case C++/Boost (yes another library).

    Finally you need to tie all this together, and hack around with it, and analyse the results so what's wrong with a bit of Python and MATLAB?

    Perhaps this is an extreme example, and doesn't fall into the buisiness relm but the point is "the path of least resistance". Sometimes that path is dictated by existing code.

    Do you really expect someone to rewrite from scratch an XML parser in "DoomJuice", or whatever is fashionable in house, just to please the people that want to standerdise on "DoomJuice"? No, use an existing library!

    Ok, I've made my point. I will stop now.

    [*] Yes I know FFTW technically uses Objective CAML to generate C code, but that's really only a distinction that a nerd would make.

    --
    Be nice to people on the way up. You will meet them again on your way down!
  24. Using one language for all by Z00L00K · · Score: 2, Insightful
    is one of the more stupid ideas. You will never be able to achieve all features you use in one single language. If you are doing development in Java you may get away most of the time, but there may be things that can't be done unless you do a different language. (of course the portability suffers, but it is a trade-off between function and availability.)

    Every generation has had it's favourite language, and the big ones has been Cobol, Basic and C in history. Currently the languages Java and C# is rising, and offers flexibility that can be used and abused but in the end are far much more flexible than the early languages. Ada can be defined as a father of Java and C#, and certainly has it's place.

    What you actually should focus more on is not a specific language, but how to model solutions and do efficient coding models. It doesn't matter what language you use if you aren't able to do a good system design. And system design is not something only for senior system analysts to do - even junior programmers should be involved. Start with a large meeting whith a HUGE whiteboard and a lot of pens in different colors - try ideas - even ideas that may seem stupid and explain WHY it's stupid. Break down into task groups and let each group do it's own analysis. This should be repeated through various phases in the project to be able to stay on track. A system isn't better as it's overall design - even if it incorporates solutions that are outright brilliant.

    Building a system is like building a house - you use different material for different parts. The foundation the house resides on is the operating system. Utilities like electricity, gas, water and sewer are all connected at foundation level, which can be seen as C code (and optionally assembly code) and are normally part of the language you use unless you have special features. The basement is done with the basic language classes of Ada, Java or C#. As is the framework of the rest of the house. The walls are then done by extended classes of your language of choice and then all trimming, wallpapers etc. are your completely custom-built classes. There is need for different class groups in different rooms - like a kitchen and a bedroom does have different properties - so only a few properties are common, and you may even be able to accept that they don't even share these properties in an abstract base class since that may require too much interoperating time between different task forces. It all comes down to how big your project is. The re-inventing of the wheel can't be avoided every time, and if the wheel costs five minutes to invent - is it worth the time to check if it is already invented?

    --
    If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
  25. Standardization is hypocritical by Anonymous Coward · · Score: 1, Insightful

    Some company we worked with was one of these Indian, cmm level five, everything-prefixed-with-'enterprise' outsourcers. They had standards alright; everything was oracle and java. Everything. Except, of course, when the software had to fax. Or convert html to postscript. Or print. Or be accessible from the outside. Or generate images. Or do things in a timely manner. Etcetera, etcetera, etcetera. Really, everything was java and oracle in the end, except for everything the software had to actually *do*.

    I guess the whole debate is the symptom of some sort of culture-clash; not Indian vs. Western or anything, but rather programmers versus managers in large bureaucratic companies with standards vs. small flexible companies where people actually talk to each other.

  26. Hmm, web development anybody? by LoveMe2Times · · Score: 3, Insightful

    If you're doing any web development (and let's be honest, if you're doing any develolpment, your organization is doing some web development somewhere), you *must * use 3 or 4 different languages. No way around it. If your organization isn't using some combination of HTML, XML, CSS, Javascript, XSLT, XPath, ActionScript (1, 2, or 3!), SVG, and other web languages, well, WTF?? Toss in a server side language, either Java, ASP.Net (any), PHP, Perl, Ruby, etc, and often you pick (or have only 1 choice of) a tag language to match (like JSP/JSF/etc with Java). Unless you're using some data abstraction layer, ORM type thingy, you'll probably have some SQL kicking around too.

    Next, if you create an end-user application of some kind, in many many cases, you must use C/C++ due to end user requirements. Some of this is being eaten up by C#, but not everybody is willing to target the .Net runtime. Then, you probably have to write an installer, and this might be using InstallShield's scripting language or similar. Does your QA department do automated testing? The automated testing tools usually have their own scripting languages too (maybe these are moving to .Net languages now, I haven't looked in a while). And if you're a big dev team, you'll be doing automated builds, so'll have somebody who's actually hacking around with makefiles (potentially MS format NMAKE files).

    If you're company is big enough to be worrying about this kind of problem, you'll have an IT infrastructure of some importance. Your IT team damn well better be using Bash scripting, Perl, Python, or some other Sys Admin language. Even Windows admins these days write scripts; there's even this new scripting framework scheduled (as an add on?) for Vista. How about your Apache config files? Your various mail/proxy/firewall configs (talking to UNIX folks here...)?

    If you have a real IT division, I'll bet you have an accounting section. Remember why people have such trouble moving to OpenOffice.org? That's right, custom Excell/Acess solutions. What's that, VBScript you say? Moving into Fortune 1000 territory, how about R3? Well, that SAP system never actually did anything, but those consultants sure made a helluva lot of money. Manufacturing and assembly lines use all kinds of weird stuff. Got any telephony solutions running around? Are you targetting mobile devices? Use scientific/mathematical software? Rendering software? Various pre-press systems? Work in the medical/health care industry? A lawyer's office? All these verticals have lots of custom things running around that you sometimes can't avoid.

    So in a nutshell, any reasonable corporation doing software development *should* be using 5-10 languages. If you were to pick only 1 language, the only choice you could possibly have is HTML. You could theoretically write a static HTML page with no CSS, no Javascript, no server side scripting, no SQL, and no Flash. You could run it off of one server, with no admins and no scripting. With no product to hawk, you don't need an accounting deptartment, and voila. Good luck with the whole money thing, though... What a stupid question. Use what you have to based on the requirements, and when you have a choice, do your best (maybe even bend over backwards) to avoid unnecessary proliferation.

  27. One Standard Language by Danathar · · Score: 2, Insightful

    It was tough. But once we standardized on english, communication was MUCH easier.

  28. The Danger in Corporate Language Standardization by constantnormal · · Score: 3, Insightful

    ... is that it tends to degenerate to the "lowest common denominator", or the most widely-used language for everything, regardless of applicability and common sense.

    Nonsense such as COBOL in the desktop environment, or perl in an IBM mainframe environment. Neither makes much sense, as the supporting codebases that might make COBOL in an IBM mainframe environment do not exist in a desktop environment (without extensive (and expensive) porting) and similarly, the large pre-existing codebases for perl do not exist (or again require substantial porting) in the mainframe environment, not to mention perl's targeted UI of a unix shell or console is not what one is presented with in mainframe environments. REXX makes for a much better choice of a scripting language on the mainframe.

    Yes, you CAN use COBOL for everything. Or Java. Or C/C++. Or perl. Or assembler.

    That old saying, "To the man with only a hammer in the toolbox, every problem looks like a nail", applies here.

    Having a toolbox with a reasonable assortment of versatile tools is a sign of a craftsman. Having a toolbox with every tool known is a sign of a rich dilettante playing at being a craftsman. Having a toolbox containing a single tool is a sign of an idiot playing at being a craftsman.

  29. Value by omyar_hunt · · Score: 2, Insightful

    The question of client value is one that has been ignored up until very recently, with areas like interaction design, and Agile methodologies incorporating client needs and goals into the day to day programming work. It comes down to this - only do what work has obvious value to the customer . The only question for these standardizers is : what value does this peice of work have? I would purport that standarizing on a language across multiple disparate teams for it's own sake has no value. So whats the reason these people have for wasting company time and money? Are they backed up in their claims by metrics, prior experience of a successful changeover, or published works backing them up? OR are they, as I would assume, going with a bad idea through lack of imagination? Trollish as it may sound, lack of imagination in people who have big ideas is a bigger problem than people realise. Those who come to the idea first, and quickly, are those who are most unwilling to change (src: http://www.poppendieck.com/ Lean development techniques). It is exactly these types of personality which graduate towards management positions, pushing bad ideas until they are proven irrevocably wrong. Who are they anyway? Are they programmers themselves? (in which case I'd be inclined to dismiss their opinion on the basis they are naturally biased to one language anyway) or are they managers? (in which case I'd be inclined to dismiss their opinion on the basis they don't know what they're talking about)

  30. There are perfectly good reasons to standardize by drdread · · Score: 2, Insightful
    I run an engineering division within my company. I have ~40 developers and a total staff of around 110. This includes biz dev guys, testers, systems engineers, production engineers (builds, installers), etc. We do mostly contracting work, with a small amount of licensed product sales.

    We have standardized on a single language (C#), and it has worked for us. We have a significant base of legacy code, including C++, Java, and Visual Basic. I can tell you from personal experience that 90% of the agony we endure is related to the legacy code, specifically maintenance of said code. Keeping enough people up-to-speed with skills to work in more than one or two languages is a tough challenge. Organizationally speaking, my life would be vastly easier if we could get down to 100% of our code in a single language.

    Of course, that's never going to happen, so we do try to retain the people who have experience with our legacy code base. We also try to assign new people to work on the legacy code whenever it looks like we're getting short of experience in any one area.

    I'm a coder by trade and experience -- this management stuff is definitely new to me. I have always personally enjoyed learning new languages/techs/whatever as a developer...but from an architectural and business standpoint, I can definitely point to reasons to standardize on a single language or development platform. We are transitioning to a product line architecture, where deliveries are based on off-the-shelf in-house components (new development as necessary, of course). Customers *hate* it when we tell them "after you install this, you'll have .Net 1.1, Java 1.5 and VisualBasic runtimes on your machine, along with all the support libraries, etc." They would much prefer a homogeneous environment with minimal footprint.

    There are also issues within a product line with mixed-platform development. Unless you work *really* hard on decoupling components at exactly the right places, mixing platforms makes it difficult or even impossible to develop a solid product line. I'm starting to think that it's actually impossible without going to a full-out service based architecture.

    So don't dismiss the idea of standardizing on a single language. Just because you're a developer and you want to play with the latest cool toys, that doesn't mean there is a defensible business reason to allow that.

  31. Re:The distinction between standards and uniformit by iabervon · · Score: 2, Insightful

    The original question, however, said they were considering standardizing on a single language, which is a dumb idea. It sounds to me like they're conflating the good idea of having standards with the bad idea of having a standard that doesn't respond to requirements.

  32. Its a simple debate by dilvish_the_damned · · Score: 2, Insightful

    One that we have here at times, only under differing guises. To end the arguement early I would ask "Why cant we just do everything in Perl?", and the response would be "Perl hardly makes sense in a multitude of situations, for instance you wouldnt use perl to build a packet router".
    And I would say "and C hardly makes sense when you want a scriptable telemetry data simulator". So we use at least two languages here as long as you dont count the cases where we use C# for win32 gui's, java for some corba interfacing stuff, VB for program/device monitoring (on win32), etc.
    There is no 'silver bullet' language so why would you force yourself into treating one like it was? Any time you might have saved by not having to learn a new language will be eaten alive by the time spent trying to shoehorn a problem into a your chosen languages paradigm.
    Really, all languages suck, some less than others, but its really contextual.
    To really break the arguemtn you might say something like "When we standardize on a language we will also standardize on the types of problems we can address competitivly".
    At least thats the way I figure it.

    --
    I think you underestimate just how much I just dont care.