Artful Computing

The perfect computer language - your first choice for every type of application - has yet to be invented.

It will probably never appear. Problems that need solving with computers tend to live in their own particular domains, each with its own set of important concepts.

A robot designer might well be interested in the problems of planning routes through 3D spaces, while the designer of a power-plant control system wants to collect and display instrument readings and control pumps and valves.  

An effective language for each domain will be designed to express mainly concepts that are most important in the easiest possible way. Providing features to handle irrelevant concepts will just make things more difficult to learn and the programmer will make more mistakes. 

 So, for example, Processing emphasises the description of visual constructs, and though it also provides enough general purpose features to solve other types of problem it would not be your first choice.

Every programmer has his prejudices about computer languages.

This page documents mine. I have learned and forgotten more programming languages than I can now remember. Some have stood the test of time, others have fallen into obsolescence. There are many languages that I do not mention because I have never used them seriously - or they are so long gone that they are now irrelevant. I have no favourite language: just a preference for some languages for particular types of job, influenced by history, availability and personal competence.

I have probably used four or five languages extensively on largish projects and could instantly work in any of them. Most experienced professional software engineers will probably tell a similar tale - and like me have another four or five languages in which they are a little rusty but in which they could be up-to-speed quickly, or about which they know enough to go "Ah! that would be just right for this problem." They may have an entirely different collection of languages - but when taken together, they would be just as useful to them as mine are for me.

Sterile arguments about the "best" languages bore me and I avoid them.

There is a great deal of hot air in Web forums, from people who have yet to acquire the wisdom that needs to underlie technical knowledge. The software engineering world has suffered from fashion: languages rise to popularity, and fall away for not particularly rational reasons. Sometimes you just have to follow the fashion, because most of us need to exchange work with other co-workers in a common language. Perhaps your management has believed the "magic-bullet" promises of a sales-man. Having spent a great deal of money on a tool, they want to see it used (even if you could do better by other, cheaper means!).

Good programming is about applying computational concepts rather than intimate knowledge of the syntax of a particular language.

This is an important point that some people who claim to be experienced programmers never fully appreciate. The real experts think about computational problems at a much higher level of abstraction that one has to use to express the detail of algorithms. They can then translate their solutions into any of the languages at their disposal. 

Nevertheless, you do need to understand strengths and weaknesses of different tools.

They all have their advantages and disadvantages: the important thing is to get to know what these are and to learn to play to the strengths and avoid the pitfalls. The least convincing reason for choosing to use a particular language on a job is that it happens to be the only one you know. This is like using a hammer for every job because you happen to have a hammer and you have never learned how to use a screwdriver.

Breadcrumbs