5 ms·
Pretty much 95% of this list is why Kotlin is my primary programming language now. It's more productive because it accomplishes almost everything on this list o
by jpgvm 5y ago
Pretty much 95% of this list is why Kotlin is my primary programming language now. It's more productive because it accomplishes almost everything on this list out of the box on IntelliJ IDEA. The only bits I generally need to add on are some Gradle plugins to handle linting (spotless or kolinter) no-friction Docker images (jib) and overtime amassing a list of very high quality libraries for specific tasks (Clikt for CLIs, Jackson for serialisation, etc).
Couple all this together you get incredibly productive out of the box experience that is very easy to onboard new team-members onto. Pairing with this setup is also great, Code With Me is constantly getting better (pairing tool built into IDEA), being able to teach newbies keyboard shortcuts in IDEA to make them more productive etc.
I think the latter stuff is probably more important to me now as I mostly take on lead roles, my own productivity has always been high but being able to make that more scalable has been immensely more valuable.
- skohan 5y agoThe thing I’m not a huge fan of with the IntelliJ model is that it’s super tooling-dependent. I would rather work with a set of loosely-coupled tools and automate my own workflows.
- jpgvm 5y agoTo be honest I used to be the same way. Used desktop linux (gentoo then arch), tiling wm (xmonad), 3k line vimrc with every plugin you could want, tons of scripts to automate gdb/valgrind/etc. Then something happened, I'm not sure what. Maybe I just got old but I no longer derived value from it being -my- setup. I just wanted whatever got the job done most efficiently. These days I'm ultra boring. I run macOS everywhere, I still use zsh and a fairly pimped shell, but minimal vimrc and IDEA has replaced the vast majority of my dev environment. It doesn't have any of the personality it once did and tbh that doesn't bother me in the slightest.
- skohan 5y agoYeah it’s not so much about being my setup, I think its more that I’ve gotten used to working this way and I don’t want to learn a whole big tool which might not do exactly what I want. With most of my projects, I have a couple of scripts to take care of the tasks relevant to that project. When I start something new, I just copy them over from a similar project and edit where needed. Super light weight, and basically will work until the end of time. For work sometimes I need to adopt someone’s highly tooled workflow, and then you have to get the editor license, find the right plugins, make sure you’re on the same version and so on. And sometimes you dust off an old project and something broke in this big magical dependency chain and you have to do surgery to figure out what it is.
- mleonhard 5y agoI had the same experience. One day I realized that I no longer enjoyed doing sysadmin work, especially on my own machines. I began to loathe complicated config files that require reading manuals to figure out how they work. Examples: SystemD, NixOS, Bazel, and BCL/GCL. Even worse are tools that silently ignore errors in config files. Examples: Gulp, ESLint, and nearly every other tool written in JavaScript. Now I use a single machine with macOS and leave nearly every setting at the default. I don't even use Brew. I prefer to use tools that come with their own installers and updaters. I think this change happened when I finally found work that difficult for me and took all of my energy. I had no energy left over to waste on sysadmin work. Also, my brain began to fill up with knowledge of systems programming, languages, and libraries. Recalling details of random config files takes more effort than before. I think my brain has a hierarchical memory system with four types of long-term memory: 0. Knowledge available instantly 1. Knowledge retrievable with 2-3 seconds of concentration 2. Knowledge that is unavailable upon request, but usually pops into mind 1-2 minutes later. 3. Knowledge that I can retrieve only with an associated memory or idea. When I was a teenager, my technical knowledge fit into my tier 0 memory. Then I earned a degree and worked some years and my knowledge grew to fill tiers 0 & 1 and some has been relegated to tiers 2 and 3. I take and keep many photos because I can use them years later to retrieve forgotten memories. Maybe I will start taking screenshots of my computer to use in a similar way.
- gjvc 5y agoChanging the IntelliJ boot JDK from JBR version 11 to Azul Zulu (or Prime aka Zing) version 15 is the biggest productivity win I've made this past year. The difference is night and day.
- jpgvm 5y agoI have been thinking of doing something similar, what differences has it made? Is it faster at indexing/build system model refreshes?
- gjvc 5y agoLiterally everything, from startup to indexing to window / menu painting to font zooming with the mouse wheel (the last one on Linux is worthless on JBR 11). I am very annoyed with JB for keeping customers stuck working in molasses. Changing from JBR 11 to Azul Zulu 15 puts the "Jet" back in JetBrains!
- Aeolun 5y agoI would love all this, but I detest the JVM.
- jpgvm 5y agoWhy? My gut reaction used to be similar due to bad experience with it in university but now I realise I was just ignorant.
- skohan 5y agoI think JVM has come a long way, largely thanks to having the entire enterprise market incentivized to optimize the hell out of it, but at the end of the day it’s still an un-needed dependency.
- heurisko 5y agoI deploy things on the JVM running on two architectures. The "write once run anywhere" concept is still very useful, when required.
- skohan 5y agoYou can also "write once run anywhere" with compiled languages. But you don't pay a virtualization penalty. The only advantage of a VM is that the actual executable artifact is platform agnostic.
- heurisko 5y agoWith Hotspot, hot areas of the code are compiled, lessening the virtualisation overhead. We compile some C libraries and use them via JNA. It takes time to create the cross-compilation environment with all the correct versions of the libraries they depend on (and the libraries that those libraries depend on). In comparison, if a library works on Java version x, we can include it and debug it running on the JVM as necessary.
- jpgvm 5y ago
- sireat 5y agoKotlin feels like it could take over Scala at some point. Until recently I've been very happy with Scala support in IntelliJ. Stuff just works or at least works for Scala 2.12 and 2.13 I tried to kick tires with Scala 3 and well it is not ready (warnings about experimental support). Worst of all Intellij is not actually compiling Scala 3.1 but 2.13.6 still. (despite build.sbt having scalaVersion := "3.1.0") You start messing around with manually adding and removing jars and you are in for a bad time. Dealing with setup just saps productivity especially if you have to work on other languages. First bad experience with Scala and Intellij.
- mewpmewp2 5y agoDon't they have slow compilation times? At least my experience with Scala. I'm used to TypeScript mostly.