db4o Developer Community

db4o open source object database, native to Java and .NET
Welcome to db4o Developer Community Sign in | Join
in Search
More Search Options

Carl Rosenberger's web log

How good is your favourite programming language?

...it depends...

Well yeah, of course it does. "Good" means nothing at all without "good at what".

Three of the key metrics are of course:

  • speed
  • memory consumption
  • size of the code base

Here is a very nice website that let's you weight what you are interested in most to race your favourite languages against eachother.

I recommend that you spend some time to play with the parameters. What happens if you rate CPU time (performance) to be most important? Which language is a good choice if you want the smallest codebase?

Thanks to Miguel for the pointer on his blog and for his interpretations.

When you choose a language for your next software project you may want to think beyond three simple metrics that are easily measurable. Here are some more factors that need consideration:

  • Potential user base for libraries that you write
  • Availability of educated and experienced developers
  • Strong IDE support
  • Tool support (profilers, code coverage, obfuscators, build)
  • Productivity (time needed to write one line)
  • Readability (time needed to read one line)
  • Safety (Does the compiler check as much as it can?)
  • Advanced Concurrency Concepts (Actors, Software Transactional Memory)
  • Elegance
  • Reusability
  • Availability of powerful (free) libraries
  • Supported deployment platforms and operating systems
  • Future (Who will develop and support the language ?)
  • Availability of the language source code
  • Extensibility of the language source code

My 2 cents: No language is perfect. Comparing to all other languages, the big picture of Java is quite good. Functional languages are likely to have a bright future in a more concurrent world [1].  Scala could give us the best of all worlds, if IDE integration were better and if there would be visible strong support by one of the big players (preferably Sun, IBM or Google).

[1] While travelling over the holidays I spent some time to read in books on Haskell, Erlang and Scala. Mind bending! Great fun!

Published Monday, December 31, 2007 8:30 AM by Carl Rosenberger

Comments

 

Bookmarks Tagged Concurrent said:

December 31, 2007 3:08 AM
 

Rodrigo B. de Oliveira said:

An interesting but of course pretty subjective question is how the different factors weight against each other.

Extensibility is closer to my heart.

December 31, 2007 12:05 PM
 

Carl Rosenberger said:

@Rodrigo: Extensibility is extremely cool as long as a language is young, changing and emerging and as long as you do not need to train a team of 1000 developers to work with a standard that all can understand.. From what I know, your Boo language ( http://boo.codehaus.org/ ) is among the very best languages with respect to extensibility. Maybe Boo could also be a very good platform to test different approaches for concurrency empirically.

December 31, 2007 1:46 PM
 

Rodrigo B. de Oliveira said:

"@Rodrigo: Extensibility is extremely cool as long as a language is young, changing and emerging and as long as you do not need to train a team of 1000 developers to work with a standard that all can understand."

Well, people need to be trained on the domain specific libraries and on the domain coding idioms when they switch teams. Why wouldn't they be trained on domain specific languages that are being used for making the team more productive in the first place?

December 31, 2007 8:22 PM
 

Carl Rosenberger said:

"Why wouldn't they be trained on domain specific languages that are being used for making the team more productive in the first place?"

Sure, that can be done, but it takes time and you can't just hire people that already are experienced with working in a particular way.

What if the language changes again after the training is done and yesterdays training is plain wrong because there is now a better way to do things? Keeping up documentation and training material with the latest state of developments is very difficult and it slows down progress.

Maybe "documentation first" would be a process just as valuable as "test first" ? Not possible. You don't know the final state of an API before it is complete.

Who defines the required scope for documentation? I can't even think of a useful metric for measurement. You usually don't know all that can be done with a specific functionality in advance. Good training material usually is written after APIs are stable for months or years.

Extensions vs. Standards:

Students can learn about using the Java Swing libraries at their university, but they will have a tough time to get a course for the latest extensions to Boo.

While agile processes that change every day may work very well for small smart teams, I don't think they are a fit for large organizations.

January 1, 2008 11:48 AM
 

Rodrigo B. de Oliveira said:

"Students can learn about using the Java Swing libraries at their university, but they will have a tough time to get a course for the latest extensions to Boo."

Comparing a standard GUI library against "latest extensions" to an extensible language is flawed. But just for the sake argument I can imagine those same students will still have to learn in the job how to use the specific BTree class library (the *latest extensions* to java) the company they work for uses.

The main point of extensibility is not that there is something like the oficial "latest extensions" to the language but on the contrary that any team anywhere can build its own set of interesting language constructs that are relevant on their particular domain. In that respect I dont see the learning effort any bigger than the effort of learning how to use a privately developed class library.

January 2, 2008 2:10 AM
 

Carl Rosenberger said:

"Comparing a standard GUI library against "latest extensions" to an extensible language is flawed."

I think it's perfectly legal to compare where and how both can be learned, in order to become a productive programmer.

If you extend a language, you have to learn things on a lower level than source code: Syntax.

I dare say that I can read, learn and use any Java BTree library by looking at the source code.

Since I have never programmed with Haskell, I still find it hard just to read the syntax of a list comprehension, even though I have thoroughly read through the book "Programming in Haskell" just a week ago. Learning syntax is different: You need an explanation in addition to the actual code. The same goes for extensions to a language: You need someone to teach usage.

January 2, 2008 5:06 PM
Anonymous comments are disabled