Same Dev Tools/Language/Framework For Everyone?
AC writes "Upper management of the company I work at recently declared that all new development should be done with a single combination of development tools, language, and framework. The main rationale is that people can be relocated from one group / project to another faster, because they don't need to learn a new environment when they switch. Of course the chosen language / framework used by everybody does not need to be the best tool for the job, but it should be good enough to allow every project to get done. What does Slashdot think about this? Is it OK to use the same development tools and language for every project, instead of choosing what fits best? Will the time saved be sufficient to offset the time lost to the 'not the best tool for the job' environment developers will be forced to use?"
1. Slashdot will think that you should be able to use anything you damn well please as long as it's Open Source.
2. Yes, especially if the people who sign you paycheck tell you that's what you have to do.
3. Maybe. A lot depends on how well the team is managed.
"I'd rather be a lightning rod than a seismometer." -Ken Kesey
Management invariably tries to standardize the wrong tools because they have no idea how software development works. They think in terms of the IDE as "the tool set" rather than the MAKE or ANT build systems, compiler toolchain, version control, and other behind the scene tools.
If you want the standardization to go well, make sure the build tools are standardized. Once anyone can build the project (IDE or no), it won't matter what the "standard" IDE is. (Unless it's Rational Application Developer. That's just a piece of shit right there. Universally agreed upon.) Developers will still download their own editor or IDE tools to make themselves happy without disturbing the greater whole.
Javascript + Nintendo DSi = DSiCade
Sure, and while they're at it, let's give all the mechanics just one size of wrench and screwdriver.
This policy shows a gross misunderstanding of the engineering process, and of what computer science is. Any computer scientists worth his/her salt should be expected to learn whatever tools are needed to get the job done. And conversely, each project team should be free to evaluate the best tools to get each job done.
It's not unreasonable to have guidelines and even strong recommendations; for example, a company could discourage csh scripts in favor of bash because of the known problems with csh. But to think that C/C++ can substitute for a scripting language or vice versa, or that even a language like FORTRAN has no purpose, completely misses the point.
When I was at Stanford, we got ZERO units for learning different programming languages. We were EXPECTED to learn C, C++, Lisp, and about a dozen other languages, before we could call ourselves computer scientists. If anyone thinks that limiting a computer scientist's choice of tools is a good idea, you should kick that manager to the curb.
Seriously get out your resume and start updating it. Once management starts treating all programmers as interchangeable is the day that all things start going to hell. Programmers are not interchangeable, and all languages are not interchangeable. I sure hope you guys don't do anything that requires AI or if you do I sure hope you don't do anything that requires graphical interfaces because you are screwed either way if you need to pick one language.
I am sure we could all make due building every road out of steal, but it would certainly be a little expensive, because if we need to build everything out of the same material because all road builders need to be interchangeable, than we would never be able to build a bridge over say San Francisco Bay with using stones...
We were all warned a long time ago that MS products sucked, remember the Magic 8 Ball said, "Outlook not so good"
It depends on how varied your projects are; if all you ever do (as a company) is produce slight variations on a single theme, it should go fine. If you need to develop everything from hard real time embedded apps to web 2.7 social networking goo, you're screwed.
--MarkusQ
Where developers must interface, such as coding style, source code repository or corporate blog? Yes, it makes sense. I may not *like* a coding style, but if management at a large company told us to use one, I'd at least understand why. IDE? OS? Compiler (except for the one that actually builds the product)? No, NO, NO!!! A thousand times, no! Why? Because you're just going to stifle creativity.
Management point: IT needs to work on the same thing. Counterpoint: IT is often clueless. Developers can almost always troubleshoot their own systems.
Management point: Ensures software licensing compliance. Counterpoint: None really, they kind of have you there; but since most companies have a policy against installing unlicensed software anyway, punishing developers by forcing them into a cookie-cutter workstation isn't going to solve that problem.
Management point: puts them all on the same page, builds team. Counterpoint: It makes development less a "collegial" environment, where diverse ideas are explored, and more of a "command" environment. Developers are notoriously intolerant of following orders simply for orders sake.
Newbie developers coming right out of school might not mind being told to use all the same tools; but experienced developers might feel otherwise. If you want to annoy experienced developers who know all the ins-and-outs of their particular toolset, then go right ahead. Then, wonder why nobody comes up with new ideas, makes comparative observations of one system against another, or develops an alternative approach that goes beyond the status quo. Wonder why people who don't drink the kool-aid on your particular toolchain leave for greener pastures. Wonder why you don't have any in-house expertise on any other system when your chosen flavor is no longer sweet.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
Comment removed based on user account deletion
27 years experience and I've heard this idea before. It is dumb.
2-3 languages- sure. One for gear-head, one for report/data mining at least.
5 languages at the same company is a problem- but 1 language is a problem too.
She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
Languages are just details. It's far better for developers to standardize on a set of processes - documentation, as-builts, code review, unit tests, TDD, scrum, FDD ... pick a set of development processes that make sense for your company and project. Some methodologies always make sense - if developers write clear, concise docs and as-builts for their set of coding responsibilities (yeah, right :rolleyes:) then a good developer can pick the code up and run with it regardless of the language.
Language is just syntax. (OK, it's mostly syntax :p) But the primary point is that most developers have had a wide range of language exposure. I don't know Ruby nor Python, but I've done a helluvalota PERL, JavaScript, and C/C++ and it'd be fairly trivial for me to pick up a well documented Python app and maintain or extend it. Just give me a good O'Reilly book. It takes longer to figure out what the actually code is doing than to understand the syntax and semantics anyways.
to pronounce my name, I would have to pull out your tongue...
Whoa, whoa, whoa! You forgot the most important thing: source control!
Perforce is probably good for larger companies, while Subversion or Git should be good for small/medium companies.
Perhaps your environment is unique, but I've rarely seen an organization capable of moving people around at will, simply because not everyone has the same skill sets. Even within the Web development paradigm, there's always the "SQL guy", the "CSS guy", heck, even the "regex guy" who's been writing Perl since he was a kid. making that guy use Eclipse instead of vim and puTTY seems counterproductive to me, even if you happened to have someone with those skills on each team.
body massage!
Look for another job. When upper management sticks their nose in with the rational that you described, doom is just around the corner. The problem is simple. How do you get the best performance out of your best people? The answer is not: Fit them all into the round hole. The correct answer is: Let them use the best tools possible as they perceive them to be.
Okay, languages need to be standardized, but after that, the environment needs to be perogative of the developer.
Nuff said...
Beware the wood elf!!!
I used to think that a programmer's tools are sacred and you should basically let people use whatever they feel they are most productive with, but I'm starting to see problems with that, at least in big organizations..
First, IDEs - I've worked on teams where 3 different IDEs were being used by different members of the team - IntelliJ, NetBeans, and Eclipse. It worked fairly well and no real problems came about as a result of the different IDEs. I've also been in training sessions where everyone is using the same IDE except for some crackhead insisting that their IDE is better and that they can't switch to Eclipse even just for the training, and everyone in training has to wait for half an hour why the instructors try to help them figure out why stuff isn't working in their IDE.
Second, platforms/libraries/frameworks - There are really a lot of valid reasons for standardizing the platforms, libraries, and frameworks your organization uses. You have better internal support, can leverage work done by other groups, and training is easier. Being able to switch people around easily is perfectly valid as well - people leave, get promoted, need a break from their project, want to explore different career goals, etc.. Plus, I think it is good to send people off to other projects to learn and share good practices. Having a standard set of tools makes this relatively easy - all you really need to learn on a new project is the business side of things.
That said, there isn't a one-size-fits-all solution, so it probably makes the most sense to pick a standard set of tools for common project types. If a project needs to deviate from one of those standards, that is fine, but they need to make their case for doing so.
So for full-blown enterprise apps, the standard may be Java EE. For smaller apps, it might be Rails or Grails. For desktop apps, you might mandate .NET. Then if someone says "Hey, it would be cool if we wrote this small app in Python", then they could do it, but they would have to show that the benefits gained by using Python in that scenario would outweigh the costs of using a non-standard platform.
The tech lead is an S&M friend! Give me a freaken break!
I use VS and Reshaper and am extremely productive. If I was using Java I would use Eclipse which is the same as VS and Reshaper combination.
The need to show "how good you are" with VIM is extremely lame!
Having developed for several decades I actually see the point of the standardization. That way you will not have one developer come in with their "latest and greatest" language that HAS to be used since everything else is so lame!
And if people don't like it they can leave...
Of course this goes on the assumption that dev had some input on the toolset, which is the case with half decent companies.
"You can't make a race horse of a pig"
"No," said Samuel, "but you can make very fast pig"
I might be wrong (am sure some Slashdotter will enjoy correcting me in this), but the difficult part of moving between projects is not differences in language. It's differences in the mindset of the who wrote the existing code: the naming conventions they use, any nomenclature specific to the project, what classes are responsible for what functionality, etc. Learning all that malarkey is the difficult part.
Obviously extremes are bad, if your company is using tens of languages, you might want to start looking at ways that can be slimmed down. However I would argue that choosing a small group of languages that complement your core business is preferable to attempting to shoe-horn one language into doing every job.
Think of it as being like reading books by different authors: Java is Virginia Woolf, and PHP Charles Dickens, a book is like a chunk of code. Both authors have different writing styles, but anyone can still pick up a book written by either of them and understand the words written within.
What the PHB's in your company believe, is the difficult part of understanding the storyline in a book is getting to grips with an author's writing style. So everyone should standardise on one author to save time. The reality is, people will get to grips with a new language within a few pages, but won't understand the concepts of the whole until they've read most of it.
I know: most borked analogy ever. But hey, I'm bored of hearing about cars. :)
There is definitely value in having the members of the development team agree to a set of tools around which they can share common experiences and exchange solutions for problems that come up. That's fine. What scares me about your question is that it is driven from above,
The main rationale is that people can be relocated from one group / project to another faster, because they don't need to learn a new environment when they switch.
Developers are not plug-compatible interchangeable parts that can be slotted in and out of various projects according to shifting needs. It doesn't matter if they all know exactly the same toolset or not, dropping Jane from the accounting project who has been around for a couple of years in to replace James in the supply-chain project who left because he got married and his wife is taking an internship at a distant hospital and expecting equivalent results demonstrates a vast ignorance of how developers become productive.
Nearly every company's management wants to imagine it can standardize developers for a lot of bad reasons -- because they believe that gives them leverage over someone who has deep domain knowledge and can't easily be replaced with a junior programmer for example. Or they imagine they can save money by buying bulk licenses for a product from a vendor. Beware of management playing golf with software tool vendors, you'll get stuck with some POS for sure.
Perhaps going to management and suggesting that the developers collaborate to nominate a selection of acceptable toolsets from which management can select would work, but that kind of suggestion never seems to be taken very well by the suits.
Your company probably has all those RDBMS because somewhere along the line they bought an accounting package, say, that runs on Sybase. No, let's get real, Oracle Financials. HR somewhere got onto a package like Lawson or JD Edwards, because Oracle HR was too bloody expensive and the moneybags did not want to pay any more for Oracle DBAs than they have to. So it's Lawson or JDE on Sybase or SQL Server. And then maybe there was some budgeting, forecasting or other Enterprise-y application (say, data warehousing/datamart, business "intelligence", etc.), and because of the extortion being paid to keep various beta-level versions of Oracle Financials, along with all the in-house customization done on top of those, even though your company might have an enterprise-ish license, no one will give any authorization to do development against Oracle, and to a lesser extent, Sybase/SQL Server.
MySQL would indicate that there is a fondness for this Fine System for web application internet/intranet development, too. Plus, the licensing is nice, and the hardware costs are...well...they're commoditized, so it's easier for someone to say, "Hey, I need a database for this spec", and someone says, "OK, I'll build you a server on this fine '486 box to run it", rather than figuring out whether the SunFire box with the Oracle database on it can handle some more ad hoc querying for reporting and relatively light I/O.
Hey, I wonder if you have an AS/400 box or two running DB/2-based apps somewhere?
Don't worry about it. Most companies are a mish-mash of one Really Important Database system (usually whatever runs accounting and AP/AR), and a bunch of lesser tiers of RDBMS and servers, down to and including MS Access-based key applications...
If all your company does is make websites(or web 2.0, cloud computing or whatever the buzz word is this month) this might be fine. If the company makes a variety of applications for different purposes or targets, then this is a really bad ideal. The engineers attached to the project are the people who should be making the decisions about the tools and languages that are used to actually make working code. Management above the project level is to far removed from the actual work that will have to be done to be making that kind of decision.
If this is a major factor when ramping-up a new engineer on a program, then your application domain is probably so easy that your jobs will be outsourced to Albania soon anyway.
WTF is this crap of "any team member to move from one workstation/area of work to another"?
If someone is good at something, ferchrissake KEEP THEM THERE!
There's nothing more devastating for a developer than to be ripped out of context and forced to learn something entirely different, but just as difficult, just because some braindead accountant thinks all developers are alike.
Please stop that. I think it has a more than measurable impact on productivity, not to mention staff morale.
Translation: everyone who thinks programmers are interchangeable should go fsck themselves with a chainsaw.
First of all, it's a pile of shit and it stinks.
I can show you two programs written in Java that are so different that you wouldn't know it was the same language if you found them in the wild. As remarked before, switching languages is almost never the problem.
The problem is that developers in different divisions are not interchangeable like parts in a machine.
Newsflash: developers are not interchangeable.
If you hire and train in a smart way you might get developers that are smart enough to deal with somebody elses messes and that leave messes that can be dealt with by somebody else.
The first thing that a developer will say when he starts at an existing project: "This should have been done differently, using language Y, framework X. This is a pile of shit!" (Y and X varying among developers and over time). Doing everything with language Y and framework X doesn't fix anything though, because they are in constant flux.
Newsflash: projects are not all the same.
If all your projects are the same you should come up with a way to let the business owners roll out variations on the theme and get the hell out of there.
The interesting bit about writing software is to learn the domain and find the programming model that works best there. Then simplify it until you're done.
This is not to say that developers should be allowed to try anything new. Reducing the choice a bit (dare I mention web frameworks?) makes a lot of sense. Eliminating all choice is just plain stupid.
If you dumb down the organization by eliminating evolution of the programming model and robbing the developers of the freedom to do what makes sense, you will see the smartest developers walk first. The next thing you will see is a huge drop in the rate of change in the products and the responsiveness to the market. The last thing you will see is lawyers.
Show a man some news, distract him for an hour. Show a man some mod points, distract him for the rest of his life.
"Management standardizes that which they do not understand, to relieve them of the responsibility of having to think about it any more..."
dave
Yes, there are almighty drawbacks. Things aren't nearly as simple as management tend to believe.
However...
That doesn't mean the reverse isn't often true as well.
Just like 95% of drivers know they're in the top 50% of all drivers, I know this'll piss off a lot of indignant engineers who know they're far too smart to fall prey to this...
But, the truth is, a lot of engineers are absolutely terrible at picking the right tool for the job too.
The right tool is not "anything other than the tool I used last time because I know that one has lots of flaws now." Every tool has flaws. There being a devil you know doesn't mean the other option is a blessed saint. It just means you don't know its flaws yet.
I've watched countless engineers choose tool A, decide they hate A and want to use B because it solves X that they didn't like about A... Then decide B does Y badly so they move to C... Then discover C screws Z up but A has a new version that's supposedly much better. And then they repeat... Every time, writing lousy code because a decent tool that's poorly understood is often worse than a bad tool that you understand deeply enough to avoid most of the pitfalls of.
Conversely, the right tool is also not the one that you know and won't put down because you're scared of the learning curve and don't want to look bad compared to other engineers when you're safe and secure in your existing kingdom.
The right tool is also not the one that'll make your resume look really cool and cutting edge. Yes, it's often exciting to learn new skills and they make you look really advanced. Learning tends to have a diminishing rate of return. Say you can learn the first 50% of a language in a month. You can probably learn the next 25% in the next month. Two or three years in, you're hopefully smart enough to still be learning but you're only improving by fractions of a percent of what's out there each month. It's tempting to pick something new and learn 50% of a whole new language... but that doesn't actually make it the right tool.
Engineers also tend to be very bad at understanding what makes the business actually work. Yes, I know there's deep moral righteousness but, here's the interesting thing... if the business can't find anyone in the area to help you ship a product on time because you chose too obscure a tool... if the business goes bust because they're paying too much for trendy skillsets... it's still the wrong tool. If the business isn't in business anymore because the tool ignored financial realities, it's the wrong tool.
In short, there are a lot of ways that engineers tend to make very, very bad decisions about what a good tool is.
Yes, I know you're not one of those engineers. I know bean counters make even worse decisions. I know I need to go to hell for suggesting this.
But the right tool is often a combination of factors. Some engineers tend to get, some engineers tend to be very bad at getting, some managers tend to get, some managers tend to be very bad at getting.
Being open to identifying the flaws in decision making processes and finding ways to make better decisions is how we really get to the point of picking good tools. In some companies, for certain processes, that may mean standardized tools, in others it won't. Smart people are open to all ideas and pick the best from them for each situation.
The company I work for has an extensive set of systems. As a systems architect I like to know that for any new project I can go to the developers in that area and get advice on how to design and implement the project solution, whether it affects them and how they woudl design their part.
I rely on knowledge growing in each area. And it takes years to get to know the code in each system really well, and the business rules which the business has forgotten about which are mastered there. Yes, people write it down. But it has to be learned so that realtime dialogue and decision making can occur!
In our case, I agree that it's the system knowledge which should be seen as the biggest asset. Not transferability across teams.
MEMO
It has been brought to our attention that in our company
jewelers, stonemasons, blacksmiths, framers, joiners, bricklayers, welders etc
all use different hammers.
This cannot go on!
From now on everyone will use the Craphammer 1.0, so transfers between groups will be much easier.
The Management.
Which was the reference to Intercal in the parent post. If the key piece is written in a language that only a couple of staff members know, then you don't have the flexibility because there isn't "an equally skilled member of the team".
If the language and environment are standardized (I'd be more worried about the language, libraries, and framework than actual development tools), then there are plenty of equally skilled team members that can pick up where someone else leaves off.
Personally, in answer to the original post, I would probably stick to the language that fits your industry best and evaluate the available frameworks. Once that is settled, then (and only then) would I worry about toolset -- let each group suggest something that fits them and select a couple as standards.
If you are writing business apps, the top choices are Java and .Net.
If you are writing games, C/C++.
If you are prototyping, a scripting language (several to choose from).
For a database, it's pretty much Oracle (with nods to DB2 and SQL Server in some instances) for large businesses; MySQL and SQL Server for small businesses.
Sure, you can argue that RoR or PHP or Perl or what have you can be used to make business apps or games or whatever, but in this case, marketshare is much more important than anything else you can argue about. A larger market base means better (more robust) tools, available frameworks, educational material, etc. All of the factors that management cares about.
Layne
Sorry, I cannot take anyone seriously who proposes to "standarize developement tools". As others have pointed out that's such an obvious productivity killer - you're in the wrong business if you even think about proposing such a thing.
Everyone knows the ancient proverb that says it all: Right tool for the job. Period.
If java is the right tool for everything in your company then fine, standarize on that.
But in reality it normally makes more sense to write the application in java, write the admin-scripts in perl (or whatever scripting language), script the webserver in lua, and so on.
Trying to use "the one hammer" for everything simply doesn't work, never did.
Furthermore: Productivity can only suffer if you force your team to use tools that they don't like.
Your best developer probably prefers Vim or Emacs to write his code while everybody else is using eclipse. If you try to force an IDE down his throat he'll soon be your former best developer. Trying to standarize on editors or IDEs is a no-go. No sane developer will follow if you rule out his preferred tool.
My first guess is ......
That being the main problem with this entire topic: He has not provided enough information about what his company does for us to come up with a sensible answer.
I can think of some cases where forcing everyone to use the same tools would be ridiculous. I can also think of some cases where it would make sense. Without knowing how big his company is or having any idea about the longevity of each project or how different each project is we have no idea what makes more sense for them.
As far as we know he is talking about two teams of 3 developers who interchange between similar projects on the same web application. He also might be talking about a company of 1000 developers for hire work in long term projects where each team develops an entirely different application. In the latter standardising on a single language would probably be impossible.
I dont read
Why would you need something like Putty in Linux?!
Once management starts treating all programmers as interchangeable is the day that all things start going to hell. Programmers are not interchangeable, and all languages are not interchangeable.
Maybe not, but there has to be some standardization. If every programmer is allowed to do things their own way, you end up with a code hodgepodge that's unmaintainable.
Mild example: I knew a guy once who had a weird thing for Javascript. He had found an engine that allowed him to run it outside a browser, and he used it for everything. (Ironically, he had no occasion to use it for a web application!) He even used it to write an RTF parser. Never mind that Microsoft supplies very nice libraries with all the parsing built in, he had to hand-code his own. The result was temperamental, consumed vast amounts of maintenanced and didn't support many RTF features. But he was insanely loyal to it, and resisted switching to a more common scripting language to the bitter end.
Another co-worker at my current company wrote a bunch of tools that we still use a lot. Basically, he wrote them in Perl. Except Perl wasn't expressive enough for him, so he wrote his very own preprocessor. And it's a beautiful piece of work, his Perl code is very concise. (Brilliant guy, really.) But he never documented the thing, and he doesn't work here any more, so if any of his tools need maintenance, we are SOOL.
Programmers need to get over the idea that they can do every little thing their own way. Your employer's role is not to provide you with a playground for you to do things the way you want. The company needs to sell stuff, and has hired you to make that stuff. Yes, it's a creative job, and you need some leeway. But if there are no rules or standards at all, then everybody's working at cross-purposes and nothing useful gets done.
I've worked at software companies where this was the case. Very unsatisfying places to work because at the end of the day, you really had nothing to show. Plus you spent all day battle everybody's ego trip. That's my idea of workplace hell.
A programmer that brings his own tools is a cowboy at best, especially where I work...
Agreed, but who drives the decisions for what software to buy at the shop? If it's anyone but the programmers, you're in trouble already.
There's a lot about the idea that's dumb, but I just want to talk about language standardization, since that's an idea that suckers even smart people.
For a decent programmer, switching languages is not really a problem. On the other hand, there's not a lot of point in having a proliferation of quite similar languages.
You're basically going to always have to write some C, whether you're doing some low-level control or interfacing to an API or whatever. For most business applications, this is a marginal task--that is, it takes place on an application's margins.
You're going to need some kind of scripting language, and you can make it object-oriented if you like--that's not a bad way of organizing some programs and helps keep a handle on the sometimes complex applications "scripts" become. These tasks are also marginal (they're management or stopgap or interfacing or, literally, scripting server-side resources together). I wouldn't choose Perl here, it would be Ruby or Python; but really, any of those are fine.
And then you'll need something for the really important stuff. And this is what kills me. Time after time, productivity studies show that terseness counts a lot for programmer productivity, and for quality (a programmer produces the same number of lines of code per unit time, regardless of language; and makes the same number of mistakes), and can otherwise show that Java is utter garbage for this task, but it's most frequently chosen anyway.
Java's not much better than C for terseness, and it's full of typing misfeatures that have never been shown to increase code quality. On the contrary, Java is such an unmanageable beast you have to use a program to type chunks of your program for you. About the best thing that can be said for it is that the JVMs aren't bad and can sometimes be used to run non-Java languages.
For the important stuff you'd think people would pick a family of languages that have been shown time and again to result in faster, higher-quality development: functional programming languages. But managers and developers alike resist it (unless the developer actually has experience with a functional programming language). Lots of people have speculated why and I'm not going to restate all that here.
I'll put my word in here for Erlang because it comes with so much technology and fills such a need in the non-marginal problem space of so many business applications. But Haskell or PLT Scheme or whatever would be good choices, too.
I recoil at the idea of picking a language because it might be popular with "average" developers. Who sets out to hire a large number of mediocre, interchangeable developers? If you choose Java, that's essentially what you're aiming at: a large number of minimally productive programmers producing reams of code that doesn't do very much.
None of this should override compelling external factors. Sometimes you really need some FORTH because you want to embed an interpreter in something. Sometimes your embedded wiki is in Perl and you're going to extend it with that, your corporate standard of Python be damned. And, yes, sometimes maybe Java is the right answer (though if it is, I haven't come across the question yet).
Now, look, we all know "any programming language can do anything." And we have all heard the religious arguments about all these things before. But surely, if a company is serious about "standardizing" it must do so on the basis of actual programmer productivity data and not on the basis of wild-ass guesses and the popularity of books? Continue to accept orthodoxy and be prepared to suffer a lack of excellence.
demi