Over the weekend I had the chance to sit down with a friend who is studying a computer science degree and give some suggestions on their software engineering assignment. What made this interesting was that the assignment was in Java.

I hadn't used Java since the early days of Java 1.0/1.1 when we used it to create some browser applets to be used in teaching electrical engineering at UniSA, so I wasn't sure how much help I was going to be.

As someone who spends most of his professional life using Microsoft tools, I was pleasantly surprised to see that most concepts I use with C# and Visual studio have equivalents in Java language and IDE (NetBeans in this instance). That Java and C# are similar shouldn't be any surprise, but I certainly gained an appreciation of how C# has learned from it's older brother. It was only an hour or two so the comparison is certainly not extensive, but it is interesting to observe some of the subtle variations:

  • Having to deal with exceptions that might be thrown (or the Java compiler fails your build)
  • Properties seem to be just a convention of methods named getXXX/setXXX
  • Importing namespaces and having to append .* on the end of the namespace
  • Coming to grips with Swing and AWT (versus coming to grips with GDI/WinForms/WPF!)
  • Inheriting a base class uses 'extends' instead of ':'
  • NetBeans had familiar features including refactoring, project references, breakpoints and step through debugging, intellisense (kind of)

I think there's probably more the same than different, and I can understand how you could reasonably easily swap from one environment to another.

It did cause me to wonder how these languages and environments are going to change over the next few years. It does seem ironic that in many ways Microsoft may have some advantages in being able to innovate their language more easily than Oracle/Sun. On the other hand I think it is very healthy for there to be competition to encourage new features that will improve the development experience in both camps.

In the end we made some good progress on the assignment, though in my opinion it seemed it was trying to force the use of a particular design pattern into a scenario which didn't really need it, which probably ended up being more confusing and less useful to the students.