rapidcoder wrote:
Using appropriate tool for the job is essential part of software engineering. If you can't understand this, and you don't care which language / tool is better for the job, programming is probably not for you. |
I agree with this statement 100% - out in the industry, I have met so many experienced developers who can only see nails because they are holding a hammer in their hand. It's unfortunate and it's frustrating working with some of them, because there's better stuff coming out all the time.
For example, there is a growing consensus that the new generation of JVM languages, like Scala, will supersede Java because they are more elegant and more concise (fewer LOC) and can deal better with the advent of highly multithreaded CPUs.
This is a good thing, but it doesn't mean that older languages are totally obsolete.
In my case, I chose C++ for writing a multithreaded realtime server, for performance reasons - I wanted to be close to the metal (though, in the future, I may try using "D" or "go" to replace this version). For the client side, I chose Scala because I wanted to get a GUI up quickly and it was nice having the extensive Java API available on hand. I will also use scripting languages like R or Ruby, if they fit the task at hand.
In my experience, the interesting thing is, I have a hard time finding "beautiful C++" code in my repertoire - this could be because my C++ skills are insufficient or it could be that the language is not conducive to writing beautiful code or most likely, a combination of both. Sometimes, when a C++ design pattern fits like a glove, that's a beautiful design, but that seems to be somewhat removed from beautiful code.
FWIW, I have definitely seen some really beautiful Scala and Ruby code, though. Smalltalk also results in extremely readable code (in particular, Kent Beck, of Extreme Programming fame, is very good at writing extremely clear code).
IMHO, beautiful code is concise and semantically rich.
That means a high signal-to-noise ratio in the code.
You can glance at it and understand exactly what it's doing.
To me, that's "awesome code."