Phil, please introduce yourself
Hi Adam. I’m a veteran software developer with over 15 years of experience working with companies of all sizes, including fairly large enterprises such as Citigroup, IBM, Microsoft, Nokia, Oracle, and the Volkswagen Group. I’ve been part of the Java community from the age of 19, and joined the Java Community Process in 2004, (I believe). I also became an evangelist of Sun Microsystems development tools for Java a few years later. I think Sun called us “Heroes”.
You are "Consultant CTO" and you are also working on new technology startups. What are you exactly doing?
A few years ago I moved from large enterprises to support startups. I felt large enterprises were stagnating, and most of the innovation was happening on a small scale. I’d had a few startups already by that point, but always felt pulled back to large companies. That changed in 2014. I began advising investors on which startups to invest in, from a technical view point, and then that led to sitting on the board of several startups, and eventually leading / developing products and services for a few. Now I focus on developing idea and concepts for startups to prepare them for scale and investment.
What are you building with Java EE?
Well, that’s a good question. What can I openly discuss? Actually, I’m developing some large-scale solutions that integrate with agricultural systems in South Africa and South America, drones, professional hardware devices, a machine learning system, and consumer apps. Actually, that’s all one project. It’s been in development for a few years, and despite the fact it’s for a startup, it’s possibly the largest system I’ve been working on. In addition to that I’ve been working on enhancing the security in several cloud-based systems and developing a scalable video game platform using Java EE. All of which play to Java EE’s strengths. I’m technology agnostic, and only pick what works best in each case. Scale and security are definitely a bonus of working with Java EE.
What was your geekiest Java EE project?
That’s a tough question. I’ve had so many geek moments in my career. I worked on a smart TV that had a custom JVM running on a custom Linux-based operating system. Java EE provided the TVs app store and advertisement network, so through and through that consumer product was entirely Java based.
That would probably go hand-in-hand with working on a government intelligence project; prototyping an enterprise intelligence system with service bus, which integrated a large number of disparate data systems, including projects from Oracle and Motorola, and displaying real-time data on a web-based geographic information system. Some of that work included collaborating with interesting government intelligence folk, and was a lot of fun.
Can you share with us some geeky numbers like e.g. TX per seconds, heap sizes etc -- whatever Java EE devs might find interesting.
Honestly, I can’t remember the statistics. Those projects were both in 2008 and 2009. The intelligence system had to be real time though, and managed significant amounts of data. Some of the feeds came from systems that were built before Java existed. It certainly competed with some of the largest banking systems I’ve seen in terms of transaction throughput. Reducing things like reliance on sessions and in-memory storage, kept the system running with minimum memory requirements. It’s a fine balance between runtime performance and instantiation performance when working on systems on that scale, and we built it with runtime performance in mind.
Is Java EE the right choice for a startup?
That all depends on what the startup is trying to achieve, and what resources they have available. I’ve seen startups move from Java to Ruby. That has never ended well. And I like Ruby. But scaling teams with Ruby can be quite painful. Some startups can get away with lightweight Node.js, and it works quite well for them. I’ve used it a lot myself. If I see PHP, I’ll walk swiftly in the opposite direction. If a team is considering Python, I tend to push them towards Go these days.
Java EE works well for a startup with security and scale. Those two aspects should be considered with every technology startup, but when they are critical to what you’re trying to achieve, then there is nothing better, yet. Also, if you look at cloud infrastructure, concurrent development, machine learning, and scalable data processing, then Java EE has it all there. If you look at some of the largest tech. companies, and the decisions they made over time, you’ll see Facebook moved quite a lot to Java, Twitter is predominantly Java-based, from Ruby, and Apple has been for many years.
That doesn’t mean Java is a silver bullet. It still requires intelligent architecting of solutions, and a sensible approach to infrastructure design.
Which application servers, tools or IDEs are you using?
I tend to use Wildfly at the moment. I was a Glassfish user, but Oracle’s position on its technology tends to make me want to find an alternative these days. I use Maven, against the popular trend. I heavily rely on inheritance on Maven project files to keep them lightweight and simple, and I use NetBeans mostly for Java development. However, I also use Atom and Visual Studio Code more recently, and then manage my builds on the command-line. That workflow ensures I’m comfortable with the portability of the project in its current state. I use Codeship to maintain continuous testing and deployment, to enhance my confidence with the work I’m doing.
I also write code on my Mac in an Ubuntu virtual machine, as that’s what my projects tend to run on. That way, I can design and develop immutable instances using Docker on my local workstation, and commit the system scripts to my code repository with the same workflow in which I manage my application code. That enables me to hand over a project to a third-party developer and know they can run a simple command and have a whole application instance built, deployed, and have the application subsequently built and installed onto that instance, without having to concern themselves with anything but the changes they are there to make.
How important are standards for you? Does your application depend on application server specific APIs?
My view on this has evolved over the years. When I joined the JCP I was all about standards. I joined W3C working groups for the same reason. I still believe standards are essential, but the way in which standards can come about should be flexible. I prefer to wait for a platform to innately mature with platform standards, than use a server-specific API out of impatience. I never jumped in to Spring or Hibernate if I didn’t need to either, as Java often provided decent tools. These days I evaluate on a case-by-case basis, but I still tend to avoid application server-specific APIs. I don’t want to struggle to move my application between platforms, or struggle to find resources capable of understanding what I’ve built and why.
Which Java EE APIs are you using in your products?
Lots. I use Java EE 7, across all of my Java EE-based projects. EJBs, Servlets, Authentication, JMS, JAX-RS, JPA and JTA. Leveraging mature APIs enables me to rapidly develop performant systems without having to identify a new approach or identify compatibility between two different third-party components too often.
You commented my post "Oracle Moves In Strange Ways", what is your take on current Oracle's strategy?
When I make decisions on new projects, or new components of new projects, I will always re-evaluate the current technological landscape and where I expect a system to be in 3 years. Oracle is tainting that view significantly by not loosening the reigns on Java to allow Java EE 8 to be completed. It should be looking at the more modern Node.js, Go, and Rust programmes, to understand how best to support the development community. Oracle is living on a legacy of enterprise software licensing, and that doesn’t work with Java. If it wishes to benefit from the huge ecosystem surrounding Java, specifically the free resources that can help support the platform, then Oracle needs to let the community drive it rapidly, or risk losing a costly acquisition. There is no bigger community of developers than the Java community, and that alone is invaluable to Oracle.
Take a look at the Java EE 8 APIs. Which of the APIs are most interesting / important to you?
Java Security as it needs to stay modern and relevant. JSON-B is also key to that. WebSockets and Concurrency are also key to making Java EE a relevant platform for new system development.
Can you share any resources (blogs, etc feel free to promote yourself) with us?
My blog is in refurbishment! I tend to read yours for Java Enterprise. Otherwise I just follow people that interest me on Twitter and follow the links from there. It’s replaced my RSS feed for Java news.
Phil, thank you for the interview!