Java turns 20 this week. Java is more than a programming language or a platform. It is a large part of the life of many developers. In this blog post, I try to summarize what Java means to me in 20 words.
I started my Java career on a SparcStation with Linux. Unfortunately, there was no Java SDK for Linux/SPARC by then (1995). Good enough, there was a very small group of people working on a port of Java to Linux, and I joined that team. This was the Blackdown team. Many people said we were crazy, as nobody was interested in running Java on Linux.
I learned a couple of things: if you need something and it doesn't exist, you can always do it yourself. And don't listen to people saying "this will never work".
With Blackdown, we got an award for the best team contribution to Java at one of the early JavaOne editions, but in general, I feel the role of Blackdown was more important than many people realize. I miss my old buddies who did most of the job. It's even hard to find references to the team that did it, but good enough we have the WayBackMachine, so here is an old page of contributors that need a huge Thank You: http://web.archive.org/web/20070807032743/http://www.blackdown.org/java-linux/java-linux-contact.html
Java was probably the right language at the right moment. But that alone doesn't explain it's ongoing success. I am very privileged to have had conversations with a number of people that created Java or that have defined the language/platform over the years, and those are truly geniuses.
The Java Compiler is my best friend when developing. The compiler is the one that gently reminds you you are about to do something you probably don't want to do. This makes Java different from non-compiled languages, where the gently reminder is replaced by a non-avoidable runtime error.
Credits to Sun for providing the best environment the Java language needed in its early years. It is really a pity that Sun doesn't exist anymore, but people working on Java code know that Sun is still there. (com.sun.....) I even download my SDK's from http://java.sun.com !
One of the early promises of Java, and still relevant. Actually, even more relevant than ever. Java is a language that is not tied to a particular container or environment. It is not the hammer that can be used to fix everything that looks like a nail, though. It really adapts to the environment, from the very small to the very large ones.
The best moments on work days are those where I say: "Are we done with this meeting/administration/...? I'll go back to coding now". Every day, once a day, give yourself a present. Don't plan it. Don't wait for it. Just let it happen. And write some Java code. I feel more relaxed when writing code.
My job as a Java developer is a perfect job. I get paid for what I like to do: writing Java code. If you look at job sites, you see there are many opportunities for Java developers. As Java developers, we should be very grateful that we can support our families by doing what we want: writing Java code.
When Oracle acquired Sun, many people feared this was the end of Java. However, it was also clear to many that Oracle relies on Java. As Larry Ellison said during his JavaOne appearance after the acquisition was announced: "Sun didn't make money on Java, but Oracle does." So Oracle keeps investing in Java. Not only because they love us and the Java language, but also because it benefits their business.
The Java ecosystem is an interesting one. Because Java is so big and works on so many different environments, one company can not oversee and control everything. This allows for interesting partnerships and it provides opportunities. Recently, I co-founded Gluon, which is a great proof of this ecosystem: Oracle isn't interested in commercializing everything that is Java related. At Gluon, we focus on Java Client technologies that are very mature, but that are not in a commercial Oracle offering.
There are examples of other technologies that are controlled by a single company. I don't think that is good for innovation.
This is really one of the things that make Java unique. The yearly pilgrimage to San Francisco is something I really encourage every Java developer to do at least once in his career. It would be nice to have this in May again though, not at the same moment as Oracle Open World. It would be more affordable to developers that way.
JavaOne paved the way for a number of other successful Java conferences. If you look at the growth of the Devoxx family and other conferences, you realize that Java developers like to gather together to learn and discuss.
It's hard to put a number on it, but the Java community is co-responsible for the success of Java. As I said earlier, Java is too big to be controlled by a single company. I don't remember when the term "Java Community" was used first, but I remember the "Community One" editions that accompanied JavaOne 2007 and later. It is hard to describe the Java Community. I think the power of the Java Community is the combination of individuals and companies that have different goals, different ambitions, different ethnic and religious backgrounds, but that all benefit from a strong Java platform.
This is probably related to the community aspect. I've seen many debates and discussions in the Java world. Strong opinions, healthy discussions, and also discussions that were completely irrelevant. But almost always those discussions are held with respect for each other. That may sounds obvious to many, but if you have a look at forums where other Internet technologies are discussed, it is by no means plausible. Occasionally, I am shocked when I read discussions between leading people in other technologies.
There are heavy discussions in the Java world as well, but as far as I am aware, all are held with mutual respect.
While working on Java code, there is one thing you should always have at hand: the JavaDoc. The uniform format of JavaDoc is in my opinion a big contributor to the success of Java. When I have to work with a new framework, the first thing I look at is the JavaDoc. Java technology never feels strange, as long as there is JavaDoc.
I have to admit, I made a switch here. Until late 2007, I wasn't using an IDE at all. I tried most of them in the early 2000's, but I felt they were too slow. So I kept using vi for a very long time. I thought that was pretty cool, but when I told James Gosling about this, he gave me a strange look and recommended me to have another look at NetBeans. That's what I did, and that's what I'm still using (still using vi occasionally though).
In general, IDE's are making developers way more productive, and they make their job relaxed. Good enough, the popular Java IDE's are very fast up-to-date and are very inter-operable.
There are a number of Java technologies that I really loved but that didn't reach the major break-through we were hoping for. Jini is my favorite technology that didn't make it. I really loved the idea of connected devices, talking to each other and to big servers... Great technology, but they spelled it wrong I guess. Calling it "IoT" and waiting a decade made it more viable. I remember it was rumored Jini was an acronym for "Jini Is Not Initials". So on the plane back from JavaOne where Jini was announced, I wrote my own implementation of Jini, and called it Gina, which means "Gina Is Not Acronym". To be fair, I can't consider Gina a lost investment. At the contrary, I learned about the need for connecting embedded and big devices, and that was the foundation for my later work on RedFX and more recently on Gluon Cloud.
James Gosling often talked about "the Feel of Java" -- e.g. see http://www.win.tue.nl/~evink/education/avp/pdf/feel-of-java.pdf. When working with Java, you get used to how it "feels". The current architects of the Java language are evolving the language while preserving the Feel of Java.
I think this is very important, and so far the subtle balance in preserving the Feel of Java while leveraging new capabilities is working very well.
I remember Java got bashed in the early days for being so slow. I never worried about this, because I was confident it was just a matter of time before the runtime engines would provide the required performance. Today, Java allows to create incredible performant applications. It puts the power in the hands of the developers. If you use the tools correctly (e.g. Java EE pooling configurations, Java concurrency,...) you can create powerful applications.
When I'm working on end-to-end project, ranging from embedded devices with cables and leds to big enterprise systems in virtual clouds, I encounter issues in many different layers. When the issue is in one of the Java layers, I feel very relaxed as there is nothing that prevents me from fixing it. Java is your reliable friend.
The Java Community Process as it is today is one of the most open standardization organizations that I am aware of. The JCP facilitates the process for defining Java specifications. They put lots of effort in involving the Java community in this process. Long ago, Java critics were complaining the specs were created by a few people behind closed doors. Today, this is by no means the case. I don't know of any other Internet technology that is so open for input from its own developers.
Java is 20 years now. If you search for announcements of "the death of Java", it is amazing how dumb some self-declared analysts are. I typically don't spend time arguing with them. If you like Java, use it. If not, you have two options: either you try to improve it, or you use something else.
Because Java showed over the past 20 years that innovation is possible while maintaining the feel of Java, I am confident that the Java Platform has a bright future.