Programming languages synthesize our ideas about computing. Computing is diverse, and so are the ways in which we conceptualize it. As we gain more experience through practicing programming, our perception of the tools we need in our craft evolves, and we find ourselves in a never-ending search for new programming languages.

Like other cultural phenomena, programming languages come into existence, grow in popularity or die out, influence other languages or fall into oblivion for a great many reasons, too often not related to their technical merits or the actual need for them. Fashion trends, inertia, economic policies, interpersonal relations, geography, chance – any of them can be decisive in the success or failure of a language. A conscientious and patient observer will inevitably notice that certain ideas and whole languages may need long periods of time before they are truly appreciated: witness the renewed interest in functional programming or in dynamic languages since the beginning of this century.

One should avoid hastily belittling a language on the ground of it being not widely known, or exaggerating its virtues just because of its current popularity. Much wiser is to collect, revise, and perfect knowledge about what programming languages exist, what ideas they represent, how these ideas are implemented and how they interact within certain languages, which languages for what are used, what is (or can be) learnt from this usage, what is perceived as successes and failures of languages and their uses etc.

A person's interest in programming languages can have various sources of motivation, e.g. theoretical, historical, or practical. It is a good tradition in many universities to offer a course under the title ‘Concepts and constructs of programming languages’ or similar, which usually is a mixture of the said directions of study. There are good books on the subject. I am teaching myself such courses for years.

However, the world of programming languages is too many-sided – let alone voluminous – to embrace in a single, orderly presented conceptual system or scientific (or teaching, or pragmatical) discipline. There is certainly room, and need, for a more ad hoc and informal approach to studying languages. The systematic and ‘random’ approaches can be used complementarily to each other. Actually, I am convinced that they should be.

On this site, I take such an informal approach to presenting programming languages, based on my own understanding of how I like to learn about them. As I guess there are many other people with a mind inclination similar to mine, hopefully the site is of interest to them. I believe it can be useful both as a resource for individual learning and reference and as an aid to those who are teaching programming languages.

Learning a programming language may be a fascinating experience. It has been many times for me, and by making this site I want to help others share the same passion for languages that I have. There are a number of programming languages described here, together with useful links for each one, and some examples. More specifically, implementations are made in many of the languages that all solve one particular problem stated here. The links section leads to other language-related resources on the net.

There is a rationale section where I explain why the content of the site is what it is. If you are new to the site, you may like to read that first. And you are welcome to share suggestions, criticism, or simply impressions of what you like or dislike about the site.