Sunday, July 17, 2022

IntelliJ IDEA Ultimate

At the start of the year, I described my tranisition to Cursive for all Clojure development. Following this, I also considered a number of other IDEs like Visual Studio Code, Eclipse, Netbeans, etc. But the fact of the matter is that no one human has an infinite cognitive load. We all need to keep our cognitive load down to a minimum in order to increase our productive efficiency. This has always been important to me.

Already in late 2000s I saw that there was too much incidental complexity in web development. The web technology stack at the time required that you switch between client side languages JavaScript and server-side languages like PHP. This required that you actively memorize incidental syntactic differences between JavaScript and PHP that are not relevant to solving your problem.

This was eventually solved with NodeJS which unified client and server sides under JavaScript. This was certainly a step forward towards reducing the incidental complexity that pervaded full stack web development. But I feel perhaps even the NodeJS doesn't go far enough. There is still incidential complexity of switching between JavaScript, HTML, and CSS. Clojure, combined with Hiccup, goes all the way in allowing you to even unify HTML and code.

So I feel in with Clojure at this time in the hope of reducing the pointless incidental complexity that pervaded full stack web development, and by extension most of the computing industry. Ideas like the unification of code and data, client side and server side development, and all kinds of other aspects of development could provide a fantastic simplification of computing. This in turn could free me up to focus on the concepts that actually matter like mathematical structures.

Clojure shouldn't be compared against a single syntactic language like Java, but rather a collection of them. A single programming language like Java with its own distinct syntax isn't that big of a deal. The incidental complexity comes in when you want to introduce a number of different Algol based languages like JavaScript and PHP with their own syntaxes. I don't want that. By the same token, I don't want the potentially even worse incidental complexity that comes from using different IDEs.

Having to switch between different IDEs would be probably an even bigger problem then switching between different languages. Different IDEs have different hotkeys and user interfaces, which prevents the habituation which is so necessary to using a computer efficiently. An experienced developer habitually used to IntelliJ can use all of its hotkeys seamlessly, producing an unmatched developer experience.

The JVM is the only neutral ground to define your programs. It is the only platform which isn't tied to a language like JavaScript or a single companies languages and developer tools. In particular, the JVM is distinguished by how seamlessly it supports the creation of new languages by serving as a compiler target. But even if it is the best programming platform in the world, where would it be without a IDE? That is where JetBrains comes into play.

It is only by combining the JVM and IntelliJ that you can achieve the best developer experience. While the JVM lets you switch between languages like Java and Clojure on a language level, IntelliJ lets you switch between them on the IDE level. Both have their own roles to play. Furthermore, if you want to truly use Intellij without having to switch between IDEs, you are eventually going to want to get the ultimate version.

Cursive is the best Clojure IDE
The situation we are in now is that the Cursive plugin for IntelliJ is the best IDE for Clojure. I probably wouldn't consider using IntelliJ, let alone paying money for it if it were any other way. This gives IntelliJ a decisive advantage over Java IDE's like Eclipse and Netbeans, which don't have Clojure plugins.

This way you can use Clojure directly within IntelliJ, just as you would use Java. You can even seamlessly mix Java and Clojure into a single project. Best of all, if you just want to make a Java project that doesn't use Clojure, you can do so without the mental overhead of having to switch IDEs. You never want to switch to a different IDE if you don't have to.

Special features of the ultimate edition
The ultimate edition mostly comes equipped with special features for enterprise users and web developers, while the community edition is mostly focused on Java SE. While I am the biggest fan of Swing and JavaFX, realistically if you are want to make business applications you are eventually going to want to handle enterprise and web technologies.
  • Java EE: the ultimate edition provides built in support for all the features of the Java EE (enterprise edition).
  • Spring: the staple of enterprise Java, the Spring framework, is only supported in the ultimate edition.
  • Hibernate: the ultimate edition has full support for the Hibernate framework for handling mapping between object oriented domains and relational databases.
  • Microservices: the ultimate edition has built in support for Quarkus and Micronaut.
  • Web technologies: JavaScript is supported in the ultimate edition along with all other web technologies. In particular, it comes with support for React, which is the basis of all ClojureScript web applications.
Many of these ultimate features might be available in other IDEs, but they don't have support for Clojure so they really aren't an option for us. If you use Clojure in even one of your projects, you are going to want to use IntelliJ.

External links:
IntelliJ IDEA Ultimate The Investment That Pays Off

No comments:

Post a Comment