In a continuation of my thoughts from last week's post on method overloading, I thought that I would keep bashing Java with a large hammer. Plus, who doesn't like bashing on the world's most popular language. On with the show!

1. Overloading Functions

Sorry, I know I already went over this, but really it is an anti-pattern that is burned into students' minds.

2. Compiling

Understanding the difference between assembly and higher level languages is an important distinction, but Java compilation isn't actually compiling to assembly. It compiles to the Java Virtual Machine binaries. So, the value of learning compilation is lost.

3. Barriers to Entry

Java may be incredibly popular in corporate development teams, but has some serious complexities when it comes to learning the required conventions.

  • public static void main(String[] args)

So this is probably one of the biggest barriers to entry to Java. For months students are told to pay not attention to the man behind the curtain. In fact, it was not until I was out of college and developing in PHP that I actually really understood the background behind the static keyword.

  • Library includes

Java has a ton built into the standard Java Runtime Environment. Unfortunately, none of this functionality is easily accessible. As a student, you just have to import java.io.* and smile for months. Or you have to just sit and listen to an in-depth explanation of a topic for a later date.

  • Strong typing

Java is a great language when it comes to typing variables. Unfortunately, strong typing is rough for students to learn and deal with. For the longest time you have to write procedural code within a main function in a class named after your current assignment.

While these are all topics, that should be taught, do they really have a place in CS101? Do we really need to teach students in a language where 0.0 does not equal 0 except when you remeber to run it through special comparitors or run (double) 0 == 0.0?