Characteristics of a good programming language
It seems to me that a good programming language suitable for non-professional programmers (and perhaps for some professionals too) should include the following characteristics.
- The vocabulary of the language should resemble English (or some other human language). Symbols, abbreviations, and jargon should be avoided unless they're already familiar to most people.
- Programs should consist mostly of instructions; tedious declarations should be kept to a minimum.
- The language and its class or function library should be fully documented. Source code, even if provided, is no substitute for documentation. At least for beginners and part-timers, a page of documentation is far more intelligible than a page of source code. Any function will generally invoke a number of other functions, and therefore the source code is completely unintelligible unless you already know what every function does.
- There should be no need to manipulate pointers explicitly, and no means of doing so. Pointers are tedious to deal with and they're a fruitful source of bugs; they should be managed by the language and not by the programmer. This approach has been tried and shown to be feasible in a number of languages.
- The language should provide arrays of unlimited size: there should be no need to declare array bounds. Sorting facilities should be included as standard; we shouldn't have to write our own sort routines.
- Integers of unlimited size (as in Smalltalk) are nice to have in principle, though in practice not urgently needed for most programs.
- The language should provide full facilities for handling a graphical user interface. These should be defined as a standard part of the language, irrespective of the operating system in use. Algol-60 was a failure in practice because it failed to define input/output as a part of the language, and therefore its input/output statements varied from one implementation to another. Input/output now includes the graphical user interface, and any programming language should take responsibility for it.
- The language should probably be object-oriented. However, I've never actually written a pure object-oriented program, so I say this with more faith than experience.
- In Smalltalk, everything you write yourself is included in the "image file" and effectively becomes part of the language from then on. I dislike this approach: I prefer to keep one project separate from another, and my projects separate from the libraries supplied with the language. When I create classes that I want to use in more than one project, I should be able to put them in a Personal Library folder or something.
- Any concept that can't easily be explained to children probably shouldn't be included in the language. Part-time programmers don't want to struggle with difficult concepts, they just want to get a job done quickly and easily.
The Python language isn't perfect, but it meets most of my requirements. It's designed to be easy to use, and it is.