A Strongly Typed Cup of Java

That desk clock needs a new battery

Collective Scientific generally uses the Java programming language. It’s only one tool in our tool-belt but it’s a big one. Why did we choose to use Java?

We’re Efficient at Writing Java

This is really the biggest reason. We can do more in less time by using a language with which we’re comfortable. We know the quirks of the language and can avoid them when possible. This stems from our collective decades of experience writing applications and systems with Java. We can focus more on the scientific problems to solve than the tooling. The advancements in Java 8, namely streams, gave us another boost in productivity.

Strong Types

Java is a strongly typed language. I like the compiler to tell me when I’m doing something wrong. This means the language at compile time will tell us if the type of data moving around the system is the expected type. Given we’re dealing with scientific and mathematical concepts, I favor the language enforcing correct types. We can discover compile-time issues more quickly than run-time issues.

This makes the system intentionally more rigid. Some language lend themselves to faster rapid prototyping but there is a cost of compile-time guarantees. The sooner we can detect problems, the faster we can fix them. If we can prevent problems from occurring in the first place, even better.

Stable

Java has been around for over two decades and is likely to stick around for a while longer. Scientific discovery takes time. We want our tooling to be relevant years from now. A stable language helps us realize that goal.

Existing Tools — Reuse is Good

The Java language has a large array of tools and libraries available. We can assemble libraries together to solve a problem without reinventing most wheels. There are also native Java cheminformatics libraries available such as the Chemistry Development Kit (CDK). Other tools, such as OpenBabel, have Java jars available or JNI hooks. Amazon Web Services offer a Java client. There’s even a T-SNE implementation for Java.


Originally published at Collective Scientific