Pensieri di un lunatico minore

24 August 2005 Programming

Freedom of expression

In “Code Craft,” Kevin Barnes writes about Freedom languages. I’ll let him put it in his own words:

Freedom languages are those languages that put the individual programmer at the center of their philosophical world. They work hard to remove any language constructs that reduce programmer freedom, and add the most powerful constructs available. Many are post-modern languages and most tend to be syntactically dense.

This is in contrast to what he calls “safety languages,” but I would just call boring:

Safety languages think first about the creation of contracts between modules, objects and functions. They focus on teams rather than individuals. They remove language features that are confusing or frequently misused so that there are fewer opportunities to make mistakes and so there can be clear separation of concerns and maximum verifiability. These languages are full of barriers and check-points and well-defined paths and they tend to be syntactically verbose.

He goes on to talk about how languages like Ruby, Python, Perl, Smalltalk (and leaves out Lisp, though it’s the most “free” by his definition) are free, and the more traditional choices, like C++, Java, etc., are “safety” languages. I think of them more as straight jackets for the programatically insane. Read his writing for a great explanation of his perspective.

Here’s mine.

The safety languages are designed to protect people from themselves as much as anything else, and their first, second, third, and as far as I can tell all, priority is to restrict what people can do for fear that they might shoot themselves in the food. Unfortunately, what they do is put a cap on the maximum amount of productivity one can achieve.

As for the team argument, it is my opinion that good teamwork is defined not by rigid enforcement of “modules,” but instead by a high level of testing and discussion of interdependencies. Instead of pretending that they can be wished away with a few static declarations, they need to be embraced. We need to test our assumptions and work with them, not pretend that we can declare them a non-issue.

My experience is that “teams” for Smalltalk, Lisp, Python, Ruby, etc., are small. Often they are composed of 5-10 people maximum. At Digital Creations we had a product in Python that competed against another company writing everything in Java. We had 5-6 “core” developers at the time. Our competitor? 300-500. Maybe when you have that level of mediocrity, you need the straight-jacket.

But then, maybe, you need some diapers to clean up the mess they create.

[via James Robertson]

This entry was posted at 9:14 pm on 24 August 2005 and is filed under Programming. You can follow any responses to this entry through the post-specific RSS 2.0 feed.

I agree that Lisp is a freedom language and I can’t think how I left it out of my post. I put things a bit more softly than you have, but on the whole I agree with your points. To the extent that teams are made smaller and more efficient by better architecture (made possible by freedom languages like Lisp) then the goals of the safety languages are superfluous.

Heh … I wouldn’t use the word “safety” to describe C++’s operator overloading.

Maybe Lisp is an “anarchy” language.

And, though even mentioning it makes me nauseous, ColdFusion (CFML and CFScript) is like a sippy-cup language.

Well, C++ has the perception of “safety” even if it’s all smoke and mirrors. Java is a bit better about that, but comes at an even higher level of verbosity. Proustian languages.

Lisp, as the only language that full unifies data and code, has the power, and the risk, of being anything. Good practices are necessary to create readable code, but then, good practices are necessary, period.

REBOL is also a freedom language that unifies data and code. It’s not open source, but it’s the best full freedom language I’ve ever seen.

Both comments and pings are currently closed.