Happy 25th Birthday Java

Java is still going strong after 25 years. I’m even more excited for the next 25.

Image for post
Image for post
Four JavaOnes and two JavaDays Tokyo in one photo

My Java Story — A tale of two decades

I started learning Java in 1997. I started programming professionally in Java in 2000. Two decades later, I am still programming happily in Java. My plan is to continue programming in Java and to help Java compete as the programming language of choice for new developers.

I’m just getting warmed up.

I’m going to tell some of my story of developing with Java, and how for 20 years Java has continued to help steer my career.

My first Java IDEs

I was a full time Smalltalk developer who worked in IBM Global Services and used IBM’s VisualAge for Smalltalk IDE to code in the 1990’s. When I started learning Java, I used IBM’s VisualAge for Java IDE. I loved this IDE, probably because it felt familiar and comfortable coming from VisualAge for Smalltalk. I believe VisualAge for Java was developed using VisualAge for Smalltalk, and both products used an amazing version control system called Envy.

I used VisualAge for Java until JDK 1.3 came out, and then I switched to Borland’s JBuilder because VA Java didn’t support JDK 1.3. In 2002, I began comparison shopping for a better Java IDE and looked at Eclipse and IntelliJ. The project I was working on had a million lines of Java code. My first thought was that Eclipse would be the best choice, as it was the successor to VisualAge for Java which I loved. Unfortunately, I could not get Eclipse 1.0 working with the large code base. Another developer highly recommended IntelliJ so I tried it and it just worked.

I’ve been an IntelliJ IDEA user ever since.

My 1st, 2nd, 3rd Java O/R Mapping frameworks

Over the years, I’ve built O/R mapping frameworks in CA-Visual Objects, Smalltalk, VisualBasic 6.0 and Java (twice). The first Java library I ever built was an O/R Mapping framework that I named JPOPI. The acronym was Java Persistent Object Pattern Implementation. JPOPI was a fun library to build, and was actually open sourced on a CD in 2000. I’ve lost all copies I’ve had of the CD so the source code is lost to time. I’m sure if I looked at the code today I would probably have a good chuckle or be very embarrassed.

I built another Java O/R Mapping framework with a colleague when I started working at a large financial services firm in 2001. My colleague and I named the framework simply ObjectManager, which was one of the main classes in the pattern we based it on. We started building ObjectManager together in 2001 when then the only other option available was TOPLink for Java (now known as EclipseLink). After almost a decade of development, I migrated to something better which has since been open sourced called Reladomo.

You can find out more about Reladomo at the following links.

I’m very happy Reladomo is available in open source. I’ve never had the need to use JPA/Hibernate on a project. I’ll probably only use another O/R Mapping Solution if I join a project that already uses one. Reladomo also uses and provides integration with Eclipse Collections which is an added bonus.

From O/R Mapping to Caching

In 2003, I started working as an architect in charge of a large Java Caching architecture. In the caching architecture, there was a fairly simple pattern implemented using the ObjectManager O/R Mapping framework. We would load all of the data into memory from a relational database into a Java object graph at beginning of day and periodically load in updates throughout the day. Then we would write linear process models that sliced and diced through the object graph in memory performing various calculations. It was a simple and powerful programming model.

We loaded a lot of data into memory. This was at a time when memory was expensive and harder to find and take advantage of. I started working on the code base using JDK 1.4 in 32-bit JVMs where we only had access to 4gigs of RAM on Solaris. We later upgraded to 64-bit JVMs which gave us access to more memory but also started to show us an ugly reality.

We needed more efficient in-memory data structures.

The standard JDK HashMap and HashSet were wasteful when used with large in memory object graphs. Around 2005, we started using Trove’s HashSets and HashMaps. I also started building our own fixed size Lists, Sets, and Maps which were memory optimized for small collections. Since we were writing hundreds of calculations and business logic using collection interfaces, I also recognized how much code duplication we were suffering from using standard JDK Collections.

So I started building a framework with rich functional APIs and memory efficient data structures which would later be named Caramel.

From Caching to Collections

I have written a lot about Eclipse Collections and GS Collections and Caramel. Most of the blogs and presentations I wrote about Caramel are now lost to time, but fortunately what is not lost to time is the source code. There are several hundred thousand lines of code developed over a 16 year period by many developers waiting to be discovered and read in Eclipse Collections.

I gave my first public talk on Caramel at GIDS in 2010, and my first public talk on GS Collections at GIDS in 2012. I’ve written a couple of articles on GS Collections which were published on InfoQ as well.

So how did a former Smalltalk developer become a Java developer who worked on O/R Mapping Frameworks, then Caching architectures and finally building a comprehensive and optimized Java Collections framework?

I needed software to solve real problems I was encountering while working on enterprise applications at a financial services firm.

My Smalltalk background gave me an understanding of what was missing in Java. I started building what I needed, when I needed it. Others joined me along the way contributing things they needed as well. We created an inner source model for Caramel so anyone in the bank could work collaboratively on the framework. I gave a presentation at JavaOne in 2017 with Nikhil Nanivadekar on the the API Design of Eclipse Collections. This summary slide explains best what happened up until the point that we finally created Eclipse Collections.

Image for post
Image for post
These were the steps we took from Caramel, to GS Collections to Eclipse Collections

From Collections to the JSR EG on Lambdas

In the summer of 2011, I joined the JSR 335 Expert Group and attended my first JVM Language Summit. This was the first time I was involved with something publicly related to Java. GS Collections was open sourced on GitHub in January 2012, and I would present “A Java collections framework design” at the 2012 JVM Language Summit.

Building a rich collections framework in Java prior to Java 8 came with one serious impediment. I had to explain to developers how to use a rich collections framework effectively using anonymous inner classes. I had to explain the concept of lambdas, without having a nice syntax for lambdas. This was extremely painful.

Anonymous inner classes make my eyes bleed.

I would continue contributing to the EG discussions on Lambdas and Streams and Collections in the JSR 335 Expert Group (libraries) mail list until March 2014 when Java 8 was released with Lambdas, Method References, Default Methods and Streams.

The release of Java 8 with lambdas and streams was a pivotal moment in the history of Java. I had to wait a full decade for Java to get lambdas. My passion, patience and persistence investing in a lambda-ready collections framework has since proven worthwhile. The Java community has benefited from all of the development that was done on Eclipse Collections since 2004.

From JSR EG to JCP EC Rep and JavaOne

In May 2014, I participated in my first face to face meeting of the JCP Executive Committee. I also gave a presentation at the meeting titled GS Collections and Java 8. In September 2014, I participated in my second face to face meeting of the JCP EC which was held at the Twitter headquarters in San Francisco right before JavaOne. This is when I created my Twitter account. This might sounds surprising but it took me a few years before I got comfortable tweeting.

I gave my first JavaOne talk in 2014 on GS Collections. I also participated in the JavaOne Strategy Keynote in a Q&A about using Java lambdas in the enterprise. The Java 2014 Strategy Keynote was the most exciting and terrifying public speaking experience of my life. The stage at the Moscone center is enormous and the crowd was the largest I have ever presented to.

I have presented every year at JavaOne and CodeOne since 2014. I have only spoken in a JavaOne strategy keynote the one time, which I think may be enough.

From GS Collections to Eclipse Collections

In December 2015, GS Collections was moved to the Eclipse Foundation and became Eclipse Collections. There was an interview on InfoQ about the migration.

In December 2020, Eclipse Collections will celebrate its fifth anniversary being a project at the Eclipse Foundation. The website below has been translated to 10 different languages.

I remain an active Committer and Project Lead for Eclipse Collections at the Eclipse Foundation. I’ve given conference and Java User Group talks on Eclipse Collections every year since 2015.

Java User Group Meetups along the way

Starting around 2013, I began attending and presenting at Java User Group meetups in New York City, London, New Jersey and Pittsburgh. I regularly attend and occasionally present at the NY Java SIG and ACGNJ meetups.

I highly recommend attending Java User Group meetups in your local area. They have high quality talks with well known presenters at zero cost. They are also a great place to start giving public presentations on Java, if you want to build confidence before submitting talks to big name conferences.

My first visit to JCrete

In 2016, I attended my first JCrete unconference. This was definitely a bucket list moment for me. It was my first time to Greece and the island of Crete. The island and the unconference were both amazing. I met so many amazing Java experts at the event and saw so many amazing things while on the island.

Image for post
Image for post
The Orthodox Academy of Crete

Every year since 2016, I hope to return to this amazing destination and unconference. I will definitely return one of these years with my family.

From Articles and Conferences to Blogging

The year 2017 was a game changer for me. I created an account on Medium and started blogging. I will be celebrating three years of blogging publicly on Medium. I can’t stress enough how important it is for us developers to tell stories. We need to leave a digital trail for other developers to learn from.

Most of my blogs have been about Java Collections design and Eclipse Collections. This is the first public blog where I am telling my Java story, including interesting bits from the past 20 years. Here are the latest blogs on Eclipse Collections on Medium.

In 2017, I gave a talk with two other colleagues at Devoxx US that would prove fairly popular. We compared several different Java Collections frameworks. We repeated the talk at JavaOne 2017 as well.

Slides from Collections.compare talk at Devoxx US

This would be the first of three comparison style talks I would co-present at Devnexus and JavaOne/CodeOne.

I also gave a presentation titled “They Can’t Hear You On Mute” at the Open Source Strategy forum in 2017. This was the first time I publicly shared my advice as an open source project lead how to achieve success in open source.

Java Champion and return to JCP EC

I will always remember 2018. This was the year I was nominated and selected as a Java Champion. This was a great honor and I am humbled to be part of this amazing group of Java developers.

I attended my first Java Champion summit in 2018 right before Oracle CodeOne.

My company was also elected to the JCP Executive Committee at the end of 2018 and I have rejoined the EC as my company’s primary representative. The JCP EC is an amazing group to be a part of, and I have built some great long term relationships being a part of this group on and off since 2014.

I also presented at Devnexus, QCon New York and Oracle CodeOne in 2018.

2019 — The blogging and presentations continue

This was the blog I wrote after two years of blogging. I’ve been writing at least one blog per month since August 2017.

I presented at Devnexus, Oracle CodeOne and the Open Source Strategy Forum in 2019.

I also submitted an article for consideration to the book “97 Things Every Java Programmer Should Know”. My contribution is available online at the 97 Things Medium account.

2020 — From Blogger to Contributing Author

I wrote the following blog in February. In it I share my thoughts on what could be included in a new collections framework for Java. I believe including a new collections framework in Java will be the key to helping Java remain the preferred programming language for the next 25 years.

I also presented at Devnexus 2020. This will most likely be the last in person conference I attend in 2020. It was great catching up with so many talented Java developers in person at this amazing conference.

In May 2020, my blog contribution to the 97 Things Medium publication in 2019 was published in the “97 Things Every Java Programmer Should Know” book . There were so many amazing authors included this book. I was humbled and honored to have my contribution accepted and to have my picture included on the cover.

This year is not quite half over yet, but so many life changing things have happened, from being sheltered at home during a pandemic and getting published in an amazing book for Java developers.

Reflecting on 20 years and the future

After two decades of programming in Java, I can honestly say I am just getting started. There are still so many things I would like to accomplish, and the future is looking very bright for this relatively young programming language.

At the end of 2019, I wrote down all the things I would like to accomplish in the next decade. All of these things still remain goals, although I would now add “Survive and thrive during a pandemic” as an 11th goal.

Happy 25th Birthday Java!

I am a Project Lead and Committer for the Eclipse Collections OSS project at the Eclipse Foundation. Eclipse Collections is open for contributions. If you like the library, you can let us know by starring it on GitHub.

Written by

Java Champion. Creator of the Eclipse Collections OSS Java library (http://www.eclipse.org/collections/). Inspired by Smalltalk. Opinions are my own.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store