# AnyLang Programming Language Comparison/Introduction

This book is designed for people who want to quickly compare common operations in different programming languages. There is also some background and instruction for people who want to enhance their understanding of basic programming concepts.

### Quick comparisons

The following links are useful for making quick comparisons between programming language concepts:
* PLEAC Crossref contains links to sections within PLEAC.

## Background

There are many programming languages that are considered "mainstream" and are in common use by computer programmers. There are also strong feelings and preferences for particular languages that vary depending on the individual. This difference is a source of variety and lots of choices. It can also be a source of confusion, especially for those who have the responsibility or the interest to understand how the different programming languages relate to one another.
The AnyLang Programming Language Comparison is intended as a guide to help individuals learn the differences and similarities between some mainstream programming languages. It is also intended to help explain some concepts and ideas that are common to some mainstream programming languages, and contemporary computer programming culture in general.
This guide is intended as a general-purpose overview and is therefore best used in conjunction with other authoritative sources for those who wish to learn in detail about any specific language or concept. Some of the content in this guide is sourced from the English language edition of Wikipedia.

### Understand common concepts and jargon

Part of the difficulty of comparing and unifying concepts across multiple languages derives from the sheer volume and variety of terminology. Moreover, there are some subtle differences in meaning for common terms. There are also very common terms that are used frequently, but rarely if ever defined unambiguously.
The circumstance of vague and ambiguous usage of common terms in some computer programming circles can make it difficult for those who are just beginning to understand some of the more well-defined terms. Moreover, plain-language explanations of terms may be hard to come by, since differences in understanding may make translation of core concepts extremely difficult, even for someone who is motivated to explain and clarify.
Examples of Multi-Meaning Jargon (MMJ):
* object oriented
* polymorphic
* strong typing
* weak typing
* duck typing
* overloading
* closure
It should be emphasized that any person or group of people may understand these terms and also have clear, unambiguous definitions for them. The issue is not the validity of the terms, but rather the extent to which they retain practical relevance in communicating ideas to those uninitiated in their usage within any given programming sub-culture.

### Enhance understanding through simple source code comparison

One way to help minimize the confusion and obfuscation inherent in multi-meaning jargon is to restate matters in practical terms wherever possible. Practical considerations include things like:
* how much typing does it take to create a program that obtains a specific, well-defined result
* what is the difference in the amount of typing (hand-entry) it takes when comparing languages
* how many different ways are there of organizing hand-entered code
* how many different ways are there of organizing files consisting of hand-entered code
* what are the practical benefits of having a book on programming in comparison to a personal friend who knows programming
Since this book places an emphasis on these practical considerations, the primary focus is on comparing source code. The theoretical and domain-specific motivations behind the various languages is left to the experts. For this book, there is little more than a bare look at the source code as the primary basis for comparison.