I have noticed that I tend to say “I’m sorry about that” when someone tells me that they learned to program in Java. I really mean it when it is a student in our department (which, unfortunately, teaches Java as an introductory language). To understand why Java is such a rotten first language, let’s consider a typical instance of “Hello, World!” in Java.
class hello
{
public static void main(String args[])
{
System.out.println("Hello World!");
}
}
It is only a handful of lines of code but how many concepts presented in this code? The following list is, sadly, not exhaustive. But in addition to the (1) language syntax you need to understand (2) classes, (3) class methods, (4) public, (5) static, (6) types (String and void), (7) arrays, (8) types libraries (i.e., System), and (9) namespaces. (Did I miss anything?) That is too much to learn up front. Therefore, students are told “do this; we’ll cover it later.”
Additionally, there are many other ways to trip up. For example, the method must be named main. The type void must be all lowercase, whereas String must be mixedcase.
Compare this to “Hello, World!” in Python.
print "Hello, World!"
This is not just shorter, but it is clear and obvious.
But that is not all. Consider what is need to execute the program. In java, you have to compile the code first and Java is nasty to work with because of silly requirements such as a single source file can contain only one public class and its name must match with name of file. Therefore, if you didn’t name the above file “hello.java” it will cost you an hour of your life–well, that’s what I paid for this “knowledge.” The effort is so taxing that students (with instructors’ encouragement) use an IDE so that students don’t have to learn (and instructors don’t have to teach) what is really going on.
On the other hand, we execute our Python program (assuming it is in the file named spam.py–why? because we can):
python spam.py
Java is a horrible instructional language.
QED.