In my previous article I answered part of the question of what makes a programming language convenient for me by focusing on syntactic and semantic language features. In this article I am going to provide the other half of the answer that deals with the ecosystem of a language. A language’s ecosystem consists of every language related aspect that is neither syntactic nor semantic, e.g. the language implementation, the libraries, the culture, the community, the tools and so on. Without a doubt, these aspects are in general much more important for solving particular tasks than a language’s syntactic or semantic merits. The following list thus enumerates those aspects that I want to find in the ecosystem of a language to call it convenient.
- Good name1
- Good image/marketing
- Great Community2
- Easy installation
- Good documentation3
- Good package manager and build tool4
- Many good libraries/frameworks
- Good Tooling
- Scripting capability
- With regards to the implementation
Many mainstream languages fulfill most of the above criteria which should come as no surprise since a lot of these aspects are simply a natural consequence of having a lot of users over a long time. Yet other features are not, or mostly not, dependant on the number of users but on careful language design and right decisions.
With this article I conclude my answer to the question of programming language convenience for now. The next interesting question is then which concrete languages I find convenient. That will be answered in another article.
The following are further relevant links I found after having published this article.
The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language.
— D. E. Knuth ↩
Ideally: many (commercial) users, a rational and helpful culture, many enthusiasts but also begrudgers, “stars” and a grumpy dictator. ↩
In particular there should be many answers on Stackoverflow for the language. ↩
With support for sandboxed environments. ↩
Especially for idiomatic code and not only for “C written in language X”. ↩
This implies a module system and separate compilation. ↩
With help from the type system if possible. ↩
Benefits include: better toolability (refactoring, completion…), machine-checked documentation, program design aid, performance, better error messages… ↩
This is a major advantage of mature statically typed languages over mature dynamically typed languages. ↩