Monday, February 27, 2006

the search for the best programming language

Although I'm not a great programmer I've often had the thought in the back of my head that the search for the "best" programming language is an important philosophical issue. It's about world view. Do we prefer freedom or safety? Do we prefer bottom up or top down? Do we prefer free untramelled exploration or confinement?

Just as some people in the world are control freaks - they always have the best of intentions but I end up saying "no thanks" - some programming languages seem to be designed to constrain you rather than set you free.

It's becoming clearer by re-reading some of the introductory remarks in Structure and Interpretation of Computer Programs.

Brushing aside issues to do with syntax, clever algorithms and maths the authors say that writing a computer program is really about the intellectually difficult task of how to control a complex system. The programming language provides us with a means to express and explore ideas about this which would otherwise be too complex to manage.

They go onto outline the techniques used to achieve this, which are:
  • build abstractions that hide details where appropriate
  • build a user interface that enables us to "mix and match" well understood pieces
  • establishing new languages for describing a design (I hadn't understood that LISP can do this. Another thought is that Game Maker Language is such a language, with many game specific programming features)
They also talk about the nature of computing knowledge, that it is about the study of the structure of knowledge from a "how to" perspective. It is not just about describing the world, it is more to do with changing the world.

This is why I like computing. It ought to be a doing subject, about writing programs to do complex things that we couldn't do before. And it's why I don't like courses that focus on top down design and dry theory which is often divorced from real practice. It's about world view, who I am.

0 Comments:

Post a Comment

<< Home