Friday, March 27, 2009

The benefits of expressivity

This is the result of a chain of thought kicked off by reading "The fallacy of high level languages".

While I agree with many points made, it did start me thinking about how the debate about high and low level language is framed almost entirely in terms of the main developers. This is probably since most people in the debate are heavily involved in commercial software development. One of the great strengths of FLOSS development is the existence of the casual contributor, the person who submits a fix to an bug they find personally annoying or such. They often are more interested in using the program than developing it, but they have the skills to make the occasional contribution.

Consequently, ease of contribution is a factor that is worth considering, and, based on my personal experience, the easier it is to get up to speed on the code around the problem, the more likely I am to write and submit a patch. Expressive, compact code is easier for me to get my head around, and thus easier for me to contribute to.

Of course, expressive code is only partly function of language choice, often being more a matter of developer discipline (nothing can save one from writing crap code, after all).

Compactness is just as important though. When dealing with a new codebase, the less I have to keep in my head in trying to follow the logic flow of the path of interest, the better. Here, language and library choices are important, and this is where high level languages can really shine.

Indeed, pretty much all of the arguments for the maintainability of code written in a high level language are much more relevant for casual contributers, who can't fall back on the sort of overview somebody who's worked extensively with the code base will have, than it is for the major developers.

1 comment:

Unknown said...

There's a time and a place for C, and a different one for Python. While Scott is far more trusting of C Programmers than Python Programmers, I much prefer working with Programming Programmers who have a multitude of languages in their toolkits and an understanding of which is suitable at any given time.

That said, programming is all about managing complexity and raising the level of abstraction is an important part of that. I much prefer working in higher level languages because more of the state in my head is about the business problem rather than language semantics and technical details. C (or even asm) is usually the better solution when such details are of real importance, which I seldom find to be the case.