Summary
Martin Fowler ponders whether developers should stick to a single language in a project, or whether a combination of multiple languages can yield more effective results.
Advertisement
While languages such as Java or C# have more than their fair share of the enterprise development spotlight, a major trend of the past few years has been the emergence of high-quality, enterprise-focused implementations of other languages as well: Scala, Erlang, Python, Ruby, Haskell, JavaScript, or EcmaScript, are all enjoying a robust and growing user base. But how welcoming is a typical enterprise project to such languages?
In his recent blog post, Should we strive to only have one language in our development efforts?, Martin Fowler speculates that having multiple languages in a developer's repertory yields the potential benefit of being able to choose the right tool for the job. But Fowler also notes that using multiple languages in one project, or even inside one development organization, has its downsides, such as increased training and greater complexity in hiring:
Throughout much of the last decade the fashion in the enterprise software world has been to focus on one standard language for software development efforts. Many development organizations strive to do all their work in Java (or C#/VB).
The rationale for this is that developers find it hard to be proficient in more than one language. Sticking to a single language lowers the learning burden, particularly when hiring new people...
Fowler points out, however, that the reasons that made Java or C# or VB popular, now make other languages attractive to developers:
The last decade has seen the rise of memory managed C-based languages. People saw that, despite many years of skepticism, memory management makes life sufficiently better that it was worth stepping away from C and C++ in the enterprise world. A common platform and language also pulled people away from proprietary walled gardens like Powerbuilder and Delphi.
Now there is a similar question. Are modern scripting languages another step forwards? Do we prefer their well-chosen terseness? Time and time again I hear experienced Java and C# developers report they are more effective in Ruby - which is why I've been encouraging Ruby. It wouldn't surprise me if similar reports appear in the next few years about other languages too...
So are we returning to the language cacophony of the late 80's and early 90's? I think we will see multiple languages blathering away, but there will be an important difference. In the late 80's it was hard to get languages to inter-operate closely. These days there's a lot of attention to making environments that allow different language to co-exist closely. Scripting languages have traditionally had an intimate relationship with C. There's much effort to inter-operation on the JVM and CLR platforms. Too much has been invested in libraries for a language to ignore them.
How friendly are the projects you're working on to multiple languages?
All nontrivial projects written in a "systems" language (e.g., C/C++, Java) that I've ever seen used at least two languages: one for the core code (e.g., C/C++, Java) and one for the build system (e.g, make + bash, ant, Python).
I realize this may not be the intent of the question or article, but I think it's significant that many, many projects will depend on more than one language whether you think a lot about it or not. You might argue that make and ant don't define real languages, but as far as requiring someone on the team to be proficient with them, I think they're pretty similar to "programming" languages.
1) C++ + tcl Historically it was common for financial services applications to use tcl for rapidly changing business logic running in-process within C++ middleware/infrastructure code 2) J2EE (=Java + XML) is a good example of crappy use of two languages 3) "The inmates run the asylum" - I interviewed for a team that used a hereogenous C#/Java/C++ architecture. When I asked the manager why, he said that his C++ developers didn't want to learn Java, his Javav programmers couldn't doi anything else, and his management wanted him to use .NET. I ran.
For me the bottom line is that if we use two or more languages each should contribute something distinctive to the mix.
"People saw that, despite many years of skepticism, memory management makes life sufficiently better that it was worth stepping away from C and C++ in the enterprise world."
The truth is that people are blindly following what marketing machines tell them. C++ had garbage collection before Java even existed. The major Java "improvement" over C++ in garbage collection arena was taking away RAII from the programmer.
Another similar example we are currently seeing is generic programming, touted as a "big new thing" by the same marketing machines. The truth is that generic programming was new almost half a century ago.
Back to the original topic: We should definitely use multiple languages. I don't see how one would go about doing client side nowadays without HTML and Javascript. Or write a utility script without a scripting language of choice. Functional languages (Erlang being a prime example) are showing much better performance in multithreaded scenarios than anything we've seen so far, so maybe this is a time for those languages to go mainstream in that arena. All that being said, the plethora of languages we currently have is both good and bad. Good because there's something to learn from every language. Bad because we get involved in endless language wars and ultimately act as Buridan's donkey, not committing to any of them for any significant amount of time. And too often, people superficially learn a new language and then try to achieve world peace with it. Long time ago F. Brooks figured out that there is no silver bullet. That's why we need multiple languages.
> Three other reasons to have multiple languages: > > 2) J2EE (=Java + XML) is a good example of crappy use of > two languages > > For me the bottom line is that if we use two or more > languages each should contribute something distinctive to > the mix.
Are you suggesting that Java and XML do not offer anything distinct or something else?
With many projects it is not feasible to use one programming language. For example, we use C++ for the core libraries, but for the web scripting there is JavaScript. The other way around would not make much sense :)
> "People saw that, despite many years of skepticism, memory > management makes life sufficiently better that it was > worth stepping away from C and C++ in the enterprise > world." > > The truth is that people are blindly following what > marketing machines tell them.
The key word here is "enterprise", IMHO. C and C++ are biased towards system programming and I can easily understand that enterprise folks don't appreciate them.
But you are right - it is astonishing how people fall for marketing buzz.
In recent days, though this has been true before, I've come to realise that having a good core system built in a system language with another scripting or high level language to manipulate said system works awfully well.
You need something a little more system oriented for the core in case you need extra functionality that required a more "hands on" approach. But for most tasks after that, a scripting language or interpreted language makes a lot of sense. For example, games have been built this way for a long time with the ability to create mods. Also, one of the boons of scripting languages is the short ramp up time to get something working.
The real issue I see is people that only know one language. You can't even begin to think of creating a scenario like the one I just described. That kind of solution is simply not in their repertoire. That certain solutions aren't in their realm of the possible is one notch in favour of learning multiple languages.
> The key word here is "enterprise", IMHO. C and C++ are > biased towards system programming and I can easily > understand that enterprise folks don't appreciate them. > > But you are right - it is astonishing how people fall for > marketing buzz.
You are right. C++ is probably the most over-hyped language to date.
> The truth is that people are blindly following what > marketing machines tell them. C++ had garbage collection > before Java even existed. The major Java "improvement" > over C++ in garbage collection arena was taking away RAII > from the programmer.
No, C++ did not have garbage collection, nor does it today.
Please don't make things up in an otherwise biased and argumentative conversation, as it will tend to confuse those of us readers who are enjoying the mindless banter.
> You are right. C++ is probably the most over-hyped > language to date.
Sure, and it has an enormous corporate marketing machine behind it to drive it. It was only a matter of time when this discussion would turn into language bigotry.
> > You are right. C++ is probably the most over-hyped > > language to date. > > Sure, and it has an enormous corporate marketing machine > behind it to drive it. It was only a matter of time when > this discussion would turn into language bigotry.
No, I am talking about your statement that C++ is over-hyped. Where is the driving power behind it that over-hypes it? Strousrup and few other volunteers? They don't have the power to over-hype anything. Marketing machines like Microsoft, Sun, Oracle and IBM do. About C++ garbage collection, as I said, it's been around for a long time. It will become standardized (and remain optional) in C++09. GC is more complex topic than wholesale 'mark and sweep'.
> > Are you talking about your post? > > No, I am talking about your statement that C++ is > over-hyped. Where is the driving power behind it that > over-hypes it?
It was everywhere. Now it's only the hold-outs. I was personally pushed into it using it without being given any reasons. I don't believe that there has to be a company behind hype but I'm sure there were some back in the day. Borland made quite a few pennies off of C++.
It's pretty arrogant to say that people are leaving C++ only because of hype.
> > Are you talking about your post? > > No, I am talking about your statement that C++ is > over-hyped. Where is the driving power behind it that > over-hypes it? Strousrup and few other volunteers? They > don't have the power to over-hype anything. Marketing > machines like Microsoft, Sun, Oracle and IBM do. > About C++ garbage collection, as I said, it's been around > for a long time. It will become standardized (and remain > optional) in C++09. GC is more complex topic than > wholesale 'mark and sweep'.
Garbage collection for C++ is available as an external module, which makes it largely inefficient when compared to Java.
Flat View: This topic has 60 replies
on 5 pages
[
12345
|
»
]