When you’re talking with some programmers, particularly younger ones, you can’t help but run into the ‘great language debate’ at some point or another. That is, that many programmers have a language which they feel is superior to all the others, and they’ll put up a ton of resistence should you suggest that they use something else. It happens in other areas too of course - preferred operating systems, databases, apps etc, but as coders the language issue always tends to come up most, closely followed by IDEs.
I’m increasingly finding myself thoroughly tired of those discussions. Over the years, I’ve used a lot of languages - the main ones in approximate order of ‘first encounter’ (excluding assembly, which I don’t count as comparable): BASIC, C, C++, COBOL, Smalltalk, Visual Basic, Java, Prolog, Javascript, Python, Perl, PHP, C#, Lua, Ruby, Actionscript. At one point in my career, I would have obsessed over things like the verbosity of COBOL and Visual Basic (with all those superfluous Dim, As and line continuation bits), how useful closures are, how C++’s template system exceeds ‘generics’ systems, or Perl’s regular expression integration. But over the years while I still have elements I like and dislike about one language or another, and appreciate it when some ‘nice to have’ features are present, I’ve come to the conclusion that none of it really matters. I reckon I could pick up just about any modern programming language and be productive and content with it, because at the end of the day, language nuances are mostly icing - they don’t fundamentally affect the development process at the macro level at all.
Of course, that’s not to say that you’d want to pick up any random language for a given problem; of course not. Each has its own strengths and weaknesses for particular tasks, and crucially most often that’s not even related to the language itself but rather the surrounding ecosystem; platform / operating system support, availability of libraries and frameworks, performance characteristics at build and runtime, integration with existing software etc. This fact is what makes language allegiance so inappropriate in fact, along with unqualified, generalised statements like ‘language A is so much better than language B’. As engineers, which all good programmers should be at heart, we should recognise that each tool has its strengths and weaknesses.
Personally, if I’m looking to do a system automation tool or other portable scripted system, I’d probably look at Python or Perl, or maybe Ruby (except that I’m not as familiar with it), because they’re suited to that kind of task. If I’m looking to do something very intensive where performance and memory footprint is paramount, C or C++ would likely be a good choice. For an ultra-simple web app, PHP might be fastest, or moving up a little Ruby (on rails) might be good. If I need to make a moderately complex Windows-based tool fast, C# might attract me. If I want to make a more complex portable web app, Java is likely to be my choice. Horses for courses.
I think many programmers expend too much emotional energy on the languages that they like. Languages are just a way of expressing the implementation - they’re the very lowest level consideration of any software project. Sure, it’s what the programmer works with every day so maybe they’re entitled to obsess over it a bit, but in my mind that’s short sighted. Really your choice of language should be based based on the surrounding environmental conditions (like requirements for portability, speed, memory usage, deployment, integration, framework needs etc), not preferance for given syntax, since most syntax elements can be expressed in different ways anyway. Let those needs guide / boundary your choice rather than your language preference.
I think it’s actually far more important to think about all the things that apply regardless of implementation language - things like design, use of patterns & frameworks, use of techniques to improve software quality & maintainability like aspect-oriented programming, dependency injection, test driven development, contract-based programming, iterative agile development, all that good stuff. In the end, all of those considerations will impact the quality and maintainability of your final deliverable far more than what language you used.
In short, I think we should stop loving our languages and see them for what they are - simple tools which should demand no more allegiance than spanners, screwdrivers and hammers. Making software is about so much more than the individual characters we type into an editor, and I think we risk losing sight of what’s really important when we’re geeking out over the language minutae - just making good software. I for one don’t consider myself a C++ coder, or a Java coder, or whatever - I make software, and to do that I use a bunch of different tools depending on the circumstances. I actually think the more flexible you can be about those tools, the better.









March 14th, 2008 at 4:05 pm
Here. here Steve. Nicely said. To this day I still program in about a half-dozen programming languages on a regular basis. In learning about these languages, I’ve gathered techniques and best practices that I tend to use amongst all the languages. I sort of feel like a musician who is comfortable using several different instruments and has attained a dynamic playing style from the mix.
What better way to think outside the box but to step out of it first?
March 14th, 2008 at 4:38 pm
amen.
March 14th, 2008 at 5:31 pm
I couldn’t agree more. I’ve grown tired of the never ending language debates. Each language has it’s own strong and weak points, and arguing about which one is ‘better’ is futile.
March 14th, 2008 at 6:50 pm
I have a preference for certain languages, syntaxes, idioms, styles and techniques when writing software, but I’ve always felt that this was more to do with how my thought processes work as a developer, as well as being contingent on the types of projects I work on. In other words, this sort of thing is often a matter of preference (or a matter of practicality, such as when working on a team.)
Thus I can’t say I’ve ever entertained with any seriousness the idea that one language would work the absolute best in the hands of everyone, for every possible project.
I don’t believe all languages are created equal, however. After all, I don’t think many people write useful software with INTERCAL or lolcode.
March 15th, 2008 at 3:30 am
I agree, each language has some pros and cons and certain jobs make sense for different languages. However, one language I’ve never like, is objective c… blah, why couldn’t apple just adopt a standard (C++) instead of something less used on any other operating system
(They could have written Cocoa with elegant C++ API 
March 15th, 2008 at 10:45 am
pjcast:
Because Apple did not create Cocoa from scratch. The framework is based on NExTSTEP. That is why almost all class names in Cocoa begin with “NS”. NExTSTEP / OPENSTEP used Objective-C long before Apple stepped into the picture.
March 16th, 2008 at 3:53 am
@pjcast: Funny, I was just looking at this. Some of the features do sound nice but (speaking as someone who started programming with BASIC and then C/C++) I simply cannot get over how fricking ugly the Obj-C language is. Ugly and unintuitive… arcane… opaque…!
I admit that this is mostly subjective and C++ definitely has its weak points, but Obj-C makes me go completely cross-eyed just from looking at it.
I suppose someone who was raised on Lisp, Smalltalk and other such punctuation-heavy languages would not be as horrified, but I submit that there might be a reason most recent popular compiled and scripting languages are based on reasonably intuitive syntax, plain english keywords, and easily comprehensible metaphors and semantics.
I’m not saying Obj-C sucks (or Smalltalk, Lisp, FORTRAN, assembler, or punch-cards) … but suffice to say I personally do not like it.
(Captcha: Hack 22)
March 17th, 2008 at 6:18 am
I’ve been running across this sort of thing a lot lately. There are people who are “language guys” which basically means each language you put in front of them is a totally new experience. Then there are people who are just programmers. To me, they seem rarer than seems reasonable. They are problem solvers, and languages are just tools.
March 17th, 2008 at 7:17 pm
@praetor: It took me a long time to go from a beginner who only understood some *BASIC and C, to a programmer who could probably get proper work done in VB, C, PHP, C++, JavaScript, Java, C#, Bash script, Python, Ruby, etc, if I really needed to.
In order to leave that initial stage of only being comfortable with one or two languages, one has to challenge themselves.
I know someone who went into CS at a fairly well-known University, and AFAIK, to this day that person is only comfortable with Java.
I’m thinking a large number of people working in software have never learned nor been taught how the practise of solving complex computer logic problems, and the practise of expressing solutions to those problems in a certain format, are separate.
Hence the large number of “language guys”, as you call them.
As for your last statement, Praetor, sure, “languages are just tools”, and game consoles are just hardware, and sports teams are just groups of athletes…