Red | Orange | Green | Blue |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
There are likely issues which will affect the usage in an educational environment. | There are there are potentially some issues that need to be considered. | The language meets the requirements. | The language is particularly good in this specific area. |
Some of the issues are clarified at the bottom of the page. If you hover over (or click) on the colored circle, the exact comment will be highlighted. This page is highly subjective, but I have done my best to review and consider all appropriate material. If you wish to suggest some adjustment, please bring it to our attention through the issue tracker.
Comparison Table
Notes
Java
[c2] Java is well suited for cross-platform development.
[c11] Most of Java has now been reimplemented and released under an OSI approved license, but some parts remain proprietary. Hopefully this will be rectified.
[c17] Java is a highly verbose language with many constructs and keywords required for even the most basic program.
[c26] Java requires a huge amount of boiler plate code and every class needs to be in a separate file.
[c31] Java code tends to have many separate files and implementations incorporate many disparate programming techniques.
[c48] Java provides functional concepts by using anonymous classes which are conceptually heavy.
[c53] There are a few teachers with a good understanding of Java.
Python
[c3] Python is well suited for cross-platform development.
[c58] There are a few teachers with a good understanding of Python, but this number is growing.
[c59] There are many good resources available, and even a few specifically targetted at education.
[c67] The Python community is a fantasic place for new programmers.
Ruby
[c4] Ruby is well suited for cross-platform development.
[c20] Ruby has a very elegent and understandable syntax.
[c34] Ruby code is generally well written and easy to read due to its hybrid object-oriented/functional approach.
[c44] Ruby provides a fanstic set of accessible online libraries.
[c60] There are many good resources targetted at people learning programming in their own time, but few resources targetted directly at education.
[c68] The Ruby community is a fantasic place for new programmers.
Smalltalk
[c5] Smalltalk is well suited for cross-platform development.
C#
[c6] Tools and development environment keyed towards Windows based development, but alternative implementations do exist.
[c9] The main .NET implemetation is not available under an OSI approved license.
[c12] The main .NET implemetation is not available under an OSI approved license.
[c21] C# is a highly verbose language with many constructs and keywords required for even the most basic program.
[c27] C# can require a large amount of boiler plate code.
[c36] C# code tends to have many separate files and implementations incorporate many disparate programming techniques.
[c40] C# has a good type system but it is also very large and complex, which may be daunting to new programmers.
Visual Basic
[c7] Visual Basic is Windows only.
[c8] VB6 is now deprecated. To use any copy of Visual Basic, one must have already purchased Windows. There are potentially other costs involved in acquiring the offical development environment.
[c10] Visual Basic is not available under an OSI approved license.
[c13] Visual Basic core libraries are not available under an OSI approved license.
[c22] Visual Basic has a highly structured syntax which could be considered limiting.
[c45] Visual Basic tends to tie a large amount of code to a GUI.
[c62] There are many online and offline resources - but many of them a buggy or covered in advertising.
[c70] The Visual Basic community does not seem highly cohesive.
C
[c14] The basic C syntax is relatively simple, however its type system often leads to typecasing and other complex syntactic elements.
[c23] C can be used for solving simple problems, but does not provide any builtin support for
[c28] C code can be written clearly, however due to the dependence on external libraries (including libc) which have few, if any, shared code conventions, and poor programming practice, it can sometimes be difficult to read C code.
[c37] C is statically typed. C also has a huge number of similar types.
[c41] C code tends to be very explicit, which makes reuse difficult. The language features do not make code reuse easy.
[c52] There are relatively few teachers with a comprehensive understanding of C.
[c63] Documation is remarkably sparse and inconsistent.
[c65] There are few, if any, cohesive communitys for this purpose.
C++
[c15] C++ is a highly verbose language with many constructs and keywords, some of which have different meanings depending on context.
[c24] C++ requires a header/implementation file structure which causes a significant amount of overhead.
[c29] C++ code is highly context sensitive and relating together dependent functionality can be complex.
[c38] C++ has a large number of compile type meta-programming features based around static typing.
[c42] C++ code tends to be very explicit, which makes reuse difficult.
[c64] Easy to understand documentation is almost non-existant.
[c66] There are few, if any, cohesive communitys for this purpose.
Haskell
[c16] Basic Haskell syntax is fairly simple, but complete programs require relatively advanced syntax.
[c25] Writing Haskell code requires a sound theoretical understanding of the language.
[c30] Reading Haskell code requires a sound theoretical understanding of the language.
[c39] Haskell has a fantastically powerful type system which may be considered too complex for the majority of educational problems.
[c47] Haskell is an excellent language for advanced functional programming.
Pascal
[c18] Pascal syntax is fairly verbose.
[c56] Many teachers are no longer interested in teaching Pascal since it is often considered an old programming language.
Perl
[c19] Perl syntax is extremely concise to the point of making it difficult to use without having a good understanding of many different keywords and operators.
[c33] Perl code tends to be very terse and difficult to read.
[c43] It can be difficult to understand what a particular piece of Perl code does, and therefore difficult to reuse it.
[c50] Perl does not provide a consistent framework by default for object-oriented programming. However, there are extensions which improve it.
[c57] There are a few teachers familar with Perl.
PHP
[c32] Due to the nature of PHP syntax and standard library it can sometimes be hard to read and understand code written by someone else.
[c49] The very latest version of PHP finally supports functional programming, but it isn't widely used yet.
[c55] There are a few teachers with a good understanding of PHP, but it is a fairly popular language.
Scheme
[c35] Due to many parenthesis, it can be hard to read deeply nested programs.
[c46] Scheme can be used imperatively, but this scenario is generally not common.
[c51] Scheme does not provide any object-oriented data structures by default.
[c61] There are a few good educational resources, but many of them are quite old and uninspiring.
[c69] The main communities seem highly academic.
JavaScript
[c54] There are a few teachers with a relatively good understanding of JavaScript.