About the project
Progopedia is a free web-based encyclopedia of programming languages. The project aims to create an exhaustive list of existing programming languages (including language implementations and versions), to provide structured information about them and to present solutions to a set of standard programming tasks in these languages. The ultimate goal of the project is to be a reliable and useful encyclopedic reference for scholars of different levels and as well for professional seeking information about specific language version differences and features. Another goal of the project is to prove that programming can be not only routine day-to-day job but also fun and to show the variety of ways in which each task can be done. Finally, we aim to create a kind of a museum for old, out-of date languages and implementations which were once used, as well as for new esoteric ones which were never meant to be used.
The articles are written and edited by volunteer editors. If you want to write about a language — no matter common or esoteric, the one you love or the one you hate — you're welcome to sign up and contribute. Alternatively, you can add a comment to any article, post a suggestion to our Google-group or contact us on email@example.com.
Note that the point of the project is that you should write about the language only if you are familiar with it, have tried it out or at least are studying it, and not if you've only vaguely heard about it. Similarly, if you post an example or add versions to an existing one, please make sure that this example compiles and runs in the listed versions and does exactly what is required. This way we aim to get high-quality articles of practical value.
While it can look very alike at first glance, Progopedia differs from Wikipedia, the world largest encyclopedia, in a number of important aspects:
- We prohibit anonymous articles editing and approve new editors by hand. We understand that this policy will lead to fewer users and articles and less frequent updates, but we believe that it's a fair price for our goals: ideally we want articles to be written by professionals and experts, and we don't want people to avoid citing Progopedia as a source because article content can be changed any moment by anonymous spammer or vandal.
- There exist subjects which don't satisfy Wikipedia notability guidelines and aren't worthy of a separate article in general-purpose encyclopedia but deserve an article of their own in Progopedia. For example, articles about changes in new minor version of some not so popular open-source compiler would be out of place in Wikipedia, but in Progopedia they are welcomed.
- More concrete and technical point of view. We don't really want articles about languages to have long excursuses into the history of its creation, biographies of its creators etc, a brief history and a link to corresponding Wikipedia article is just fine.
- A stricter structure of articles and examples. We aim to develop an universal structure convenient for language description and comparison. Also we are limiting the quantity of example types so that each example type will have implementations in as many languages and versions as possible.
Subject-specific site engine. Progopedia site engine was created for this particular project and is updated along with its development.
It's not a wiki-type engine. It's written in Python (using Django framework) and has a number of features tailored to our specific goals:
- multilevel articles structure "language" -> "implementation" -> "version", with optional dialects bound to languages;
- structure of examples of certain types bound to versions (though one example can work in several versions, implementations and even languages), with code coloring for lots of languages (done using Pygments library);
- separate articles about programming paradigms and typing disciplines, since these topics are crucial for describing languages and understanding the ways they are similar and different;
- automatic linking between articles. Thus, if language B influenced language A, adding this information to article about language A will show up in article about language B; if language A supports paradigm B, noting this will add A to the list of languages which support this paradigm found in article about B; implementations and versions of language are added to article about the language automatically, as well as the examples bound to versions of this language, etc.
Several other web-based projects have goals somewhat similar to Progopedia's ones. We are aware of their existence and might use some ideas and even some content from them (well, if they use GNU Free Documentation License or other compatible license):