Performance Zone is brought to you in partnership with:

David Green is a developer and aspiring software craftsman. He has been programming for 20 years but only getting paid to do it for the last 10; in that time he has worked for a variety of companies from small start-ups to global enterprises. David co-founded the London Software Craftsmanship Community (http://www.londonswcraft.com/) - a group of professional programmers who meet regularly to exchange ideas and improve their craft. David is a DZone MVB and is not an employee of DZone and has posted 24 posts at DZone. You can read more from them at their website. View Full User Profile

Choosing a Programming Language

04.10.2013
| 16886 views |
  • submit to reddit

What programming language to use is probably the single biggest technical decision facing a project. That one decision, affects every one that follows – from the frameworks and libraries you can use, to the people you hire. So how do you go about choosing what programming language to use?

The truth is, you probably do what most people do and use the same language you used on your last project. Or, if you’re a hipster, you use the latest super cool language. A couple of years ago all the cool kids were on rails. Now the hipsters are trying to tell me how awesome their nodes are. Or that clojures are where its at. Last time I checked, their turing complete language had the same problem solving capacity as my turing complete language. Really what they’re arguing is their language gives them better expressive power: it’s faster to write and/or cheaper to maintain.

Right tool, right job

As the old adage goes: always use the right tool for the job. If you need to automate some command line maintenance task – use a language that’s good at shell scripting: bash, perl, hell even ruby; don’t use Java. If the problem you’re solving needs a desktop client that integrates seamlessly in a Windows environment: use C#, don’t use Java (be quiet Java on the desktop fanboys, just be quiet). If the problem you’re solving involves handling lots of XML and you like stack traces: sure, use Java.

The biggest distinction normally comes down to algorithmic complexity. If what you’re working on has a lot of algorithmic complexity, use something that’s good at expressing it: a functional language, like haskell or F#. Or if, like 90% of webapps, what you’re doing is data in, data out you need a language with good OO power to try and model your domain: Java and C# are both good choices here, along with almost every other modern language out there.

Scala

Or maybe you really hate yourself and you want a compromise: why choose functional or procedural when you can have both? Why miss out on every language feature thought of over the last 50 years when you can have them all, baked into one mess of a language? Yes, if that sounds like you, you probably think you’re a hipster but you actually missed the boat by several years: its time to learn you some scalas.

I suspect part of the reason Scala is gaining so much popularity is that it finally gives all the frustrated Java devs the language toys they’ve always wanted. Java really is an unbelievably retarded language now, it’s incredibly frustrating to work in. As someone that’s just switched to C#, I’ve relished all the new language gadgets and geegaws I’ve got to play with. Have they made the code any better? With lots of toys comes lots of complexity and variety, making code hard to understand and hard to maintain.

The thing is, Java is a toy language: any idiot can write decent idiomatic Java. The trouble is, Java is a toy language: everyone is forced to write screeds of noddy idiomatic, idiotic Java, no matter how much of a ninja rockstar they are. The best thing with Java, is it stops all the ninja rockstars from showing how ninja they are by writing undecipherable crap. I fear the impact lambdas will have on the maintainability of the average Java codebase as everyone starts finding new and confusing ways to express everything.

Hiring

Another reason to choose the right programming language, is it affects the developers you can hire. But does it really? I work in a C# shop now, do I turn down Java developers? Hell no. A good developer is a good developer, regardless of the language. To dismiss potential recruits because of the language they know is retarded.

And the trouble is, if you think that hiring only python or node developers will get you a better standard of developer: you’re wrong. The pool will simply be much smaller. Maybe the average quality of that pool will be higher, who knows, who cares? I only need one developer, I want her to be the best I can hire – it makes no difference where the average is.

Language has no correlation with ability: I’ve met some very smart Java developers, and some truly terrible hipster developers. I’d rather cast the widest possible net and hire good developers who are happy to use the technologies we use. To do anything else is to limit the pool of talent I can draw from; which, lets be honest, is pretty limited already.

Another argument I’ve heard is that the technologies you use will limit candidates willing to work for you – some developers only want to work in, say, clojure. Well, they’re retarded then. I’d rather have people who want to work on interesting problems, regardless of the language, than people who would rather solve shit problems in the latest hipster language. Now if you work for a bank, and all you have are shit problems? Sure, go ahead and use a hipster language if it helps you hire your quota of morons. If nothing else it keeps them away from me.

Lingua Franca

Take a room full of hipster language programmers and ask them to form teams. What happens? Magically, you’ve now got a room full of C# and Java developers. Almost every developer will know at least one of these two languages – they are the lingua franca. Everything else is frankly varying degrees of hipster.

The truth is the most important thing when choosing a language is how many developers on your team, and those you plan on hiring, already know the language. If everyone on the team has to retrain into say, smalltalk; and everyone you hire needs hand holding while they learn the new language – that’s a cost you have to factor in. What’s the benefit you’re getting from it?

Secondly, how easy is it to get support when you hit problems? The open source community around Java is awesome – if you’ve got a problem, there will already be 15 different solutions, some of which even work. If you work in C#, your choices are more limited – but there will be choices, some of which aren’t even from Microsoft. If you’re working in the latest hipster language, guess what? You’re on your own. For some people that’s the draw of hipster languages. For those of us wanting to get work done, it’s just a pain.

In the end, the best advice is probably to use the same language you used on your last project: everybody already knows it and your tooling is already setup around it. This is why Java has quickly become the new cobol.



Published at DZone with permission of David Green, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Dan Howard replied on Wed, 2013/04/10 - 8:12am

Instead of "don't use Java" I "Don't read retarded shit from David Green"

Hussachai Purip... replied on Wed, 2013/04/10 - 10:40am

Unfortunately, you had a bad experience with Java. I've never faced the problem like that. I don't mind working with other languages as long as it can make the job done. Java just gives me a lot of power to make the job done not because of the language but the frameworks and libraries.

IMO, this kind of post should be in your diary or personal blog not here.


Seth Nartey replied on Wed, 2013/04/10 - 12:13pm

 A java a day will keep such a post away.

Karl Peterbauer replied on Wed, 2013/04/10 - 1:10pm in response to: Dan Howard

 +1

David Gonzalez replied on Wed, 2013/04/10 - 9:57pm

Honestly, even if the post belongs here, there's nothing constructive about this post. No decent recruiter or developer will benefit from this type of nonsense. 

Andreas Haufler replied on Thu, 2013/04/11 - 4:13am

 I know one shouldn't feed the troll, but I really wonder what you mean with "If the problem you’re solving involves handling lots of XML and you like stack traces: sure, use Java"...

XML processing can be done in any language, thats not the point, but what the hell is wrong with stacktraces? Having a standard format for stacktraces and the ecosystem of tools around this feature is one of the best features of Java in my eyes. I've use quite some languages and the timewise from "customer calls" over "check the logs / error reporting" to "having located the right point in code" along with call history and everything Java is still undefeated in this area.

Therefore...I don't always trace errors, but when I do, I use stacktraces ;-)


Just to make it clear - I'm not a Java fanboy, and yes - other languages can do the same..My point is, stacktraces look ugly and scary - but are the most helpful part of any log file or error message. Having that said, the one best error handling capability was probably provided by SmallTalk. once you screwed up a method a debugger popped up and gave you the opportunity to fix the problem right here and right now - and that in the 1980's!

Cosmin Mutu replied on Fri, 2013/04/12 - 2:25am in response to: Dan Howard

 +1 (no doubt about it)

Lund Wolfe replied on Sun, 2013/04/14 - 7:25pm

I am a java fanboy, but I do agree with the practical advice at end.  You will need to pick a language (and framework and tools) your developers already know and/or a language that developers you hire want to use.

Most applications will benefit most from an OO language, so you need to know one.  The developers you have and can get will probably guide your language decision more than the project requirements.  Jobs ads are often non language specific for that reason.  Maybe the developers hired will indicate/dictate implementation in Java, C# (Objective C, C++), Python, or something else.

Damien Dormal replied on Wed, 2013/04/17 - 5:49am

I've been developing in Java for a long time, I did a bit of C# and I also use your so called "hipster language".

This has to be the least constructive post I read on dzone.

The last paragraph is particularly interesting :

----

In the end, the best advice is probably to use the same language you used on your last project: everybody already knows it and your tooling is already setup around it. This is why Java has quickly become the new cobol.

----

Seriously ? if you follow the logic we would still be using Cobol, not Java.

The real problem with java IMO is the JCP and more precisely the rate of new features/modifications added into the specification. The idea is great but it really fails to keep the language appealing and productive in comparaison to others.

Joao Osorio replied on Wed, 2013/04/17 - 8:37am

The programming language is a matter of syntax. It's the compiler and runtime environment that make the difference.

Like the given example, imagine a room full of developers and ask them to form teams. Magically, with a good interpreter and compiler, each can code on their preferred language e compile it against the same runtime. That's real magic. 

Take C#, VB.NET, IronPython and F# for .NET and Java, Scala or Jython for the JVM. It can be done guys and it's the right way to go.

Happy programming!

--

http://blog.ozzie.eu/

Adam Retter replied on Wed, 2013/04/17 - 8:43am

What a terribly written Article. I had come to expect more from DZone.

Whilst there are a couple of valid points in this article, its mostly just opinion without objective arguments. It also seems to hit a new record for using the word "retarded" the most times in any DZone article, I find that offensive!

Robert Brown replied on Wed, 2013/04/17 - 9:39am in response to: Joao Osorio

Ask yourself this, 

Who do you write Code for?  
Answer should be the next programmer that will look at it (which may be a future version of yourself but in any significantly large solution will be someone else).  

So Language is actually a very big deal but not necessarily in terms of Software (they will all compile down to machine code), but in terms of code maintenance.  If you say "everyone use whatever language you want as long as it compiles into .NET" for example, you are asking for a maintenance nightmare where one module is written in F# and another in VB.NET and another in C# and then when something breaks you have to not only figure out where the error is, (is it in the F# code or the C# code) but you have to either learn a new language or find someone who knows the language you are looking at.  

This is also a good reason for coding standards.  If dev 1 decides that passing all variables as hashmaps makes the most sense for them (I've seen it) and implements all functions as public void doSomething(HashMap a) it becomes very difficult for the next developer to know that that is what is going on.  Now you may say, "well that isn't a good developer" but it's the shared code standard that we all have decided to abide by that tells us that.  

Even things like 
if (a == 1) {
doSomething;
}

vs 
if (a==1)
doSomething; 

can have a huge impact on troubleshooting (try quickly adding a logging statement to the second one and see how long it takes to troubleshoot vs the first one).

Language makes a HUGE difference, it just doesn't make a difference at the Software level, it makes the biggest difference at the maintenance level.


Dennis Jeremias replied on Wed, 2013/04/17 - 10:38am

did a java programmer steal your girlfriend?

Ryan Headley replied on Wed, 2013/04/17 - 10:45am

5 minutes that I will *NOT* be getting back...why did I keep reading?!?

Marc Chanliau replied on Wed, 2013/04/17 - 11:06am

 What a terrible article! Poorly written, poorly researched, if at all. And stop using the word "retarded" at every turn. This blogger should never be allowed again on this site.

Joao Osorio replied on Wed, 2013/04/17 - 11:17am in response to: Robert Brown

Point well taken :)

Edward Garson replied on Wed, 2013/04/17 - 1:49pm in response to: Dan Howard

Amen to that. In fact, I'm done with DZone altogether for publishing this kind of baseless drivel.


Jaime Metcher replied on Wed, 2013/04/17 - 10:34pm


Um...am I the only one who read the post as saying "Do use Java"?

Or maybe to expand that a little: "Choosing the 'best' language is a stupid thing to hang either your project or your career on - so you might as well use Java (or C#) most of the time".

Nobody else saw that?  Oh well...

Gael Pool replied on Thu, 2013/04/18 - 4:55am

Halleluja!  we lived in sins for decades, and thanks to this Green guy we can see the light at the end of the tunnel. Halleluja! Scala? Oh my Green! do you mean you really can write code in this language, and build apps that make sense with it? Wow.
Scala is like Jesus,  everybody is talking about but nobody met. Functional languages have been around for 50 years, why would it be today the salvation day? is Groovy too liberal for you?
When Java 8 will be released, everybody will come back to sense and Scala will join Haskell, Lisp and the like in the niche of functional Uberprogrammers.
Dzone! if this was posted April 1st, it would've been the best joke!

Robert Brown replied on Thu, 2013/04/18 - 8:28am in response to: Gael Pool

Hi Gael, 

Pretty sure what the article was talking about was that it doesn't make sense to go with a "hipster" language like Scala or Groovy or whatever.  Pick the language that fits the bill and pick a language with a large enough in house developer base that you don't have to retrain or hire for.  At the end he says that language is likely the one you used for the last project.  His delivery leaves a lot to be desired but I agree with his sentiment. 

Language is both VERY important and NOT important.  It's NOT important in that, if you can write it for Scala with a mysql backend, you can write it in Java with an oracle backend both languages are perfectly capable of producing the same tangible results.  

On the other hand language is VERY important when it comes to maintenance and productivity.  If you have a developer base that is all .NET, building the next project in Scala just because it's the next big thing doesn't make a lot of sense.  

That's what I took from the article.  Not well written, so it's easy to understand how people will come to different conclusions.  His last paragraph basically says it all for me "In the end, the best advice is probably to use the same language you used on your last project: everybody already knows it and your tooling is already setup around it."

Eric Mosley replied on Thu, 2013/04/18 - 1:17pm

There are some nuggets of truth in this, if you can stand the unprofessional language bashing and overuse of the word "hipster".

Matt Hostetler replied on Thu, 2013/04/18 - 9:10pm

Are these articles not edited by someone with at least a passing understanding of professional writing? Never mind the personal vendetta with Java, the repeated use of the word 'retarded' should have raised a million red flags and this bush league article should have been disposed. Come on Dzone.

Jim Nunyabizness replied on Sat, 2013/04/20 - 10:07pm

Kudos to you David for daring to say anything negative about the almighty Java.  The responses seem to bare out the elitist hipster factor.  John Calvin would be proud.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.