| Struck a cord, and I think I managed this prior to LLM in a certain degree. My primary editor is vim, and for a significant amount of time I was using it almost in puritan fashion, this was before LLM was mainstream. However, I could not use vim to edit java, even with language server - I tried, but each time I went back to intellij - the rest of the code base in python, ruby and typescript was typically fine. The reason was two fold, because everyone was using all of the features that intellij had to offer, the code was structured similar to intellij and obviously the java design patterns that was popular at the time. Everything went through factories and managers and interfaces and tracking them through a pure editor was almost impossible. The IDE handled it for you. But everything else? Things I or others had to build from ground up was built with this cognitive limitation in mind, which means I can fit everything nicely and edit with vim, even without a language server with high efficiency. Those cognitive limitation is good for the software. It's easy to explain, easy to debug, easy to add and subtract. And I've come to disregard the intellij way, or the current vibe coding till it works that is common everywhere now. The principle is KISS - keep it simple stupid. If AI will not do that, then you have to. It is a simple philosophical question that is more important than ever. And sadly most people still don't realize it - they will happily tack on the next "feature" in with the scaling they didn't need at that time with the design pattern that they don't need at the time and prematurely optimize themselves into cognitive and technical bankruptcy. |
One of my journeyman theories of programming is that your IDE has a way bigger impact on how you write your code than would be implied based on how much people talk about it online.
Trivial example: worked at a startup with a coworker who double spaced all of his code. He should have just set his editor / IDE up to have a larger margin between lines. The lines were too close for his comfort in his IDE.
I often find juniors will write a bunch of “utility functions” if their IDE lets them quickly hover or ctrl-click for function definitions. Then they just create a “utils.py” and store all of those “utility functions” there. Now their code is a spaghetti of indirection without any conceptual groupings.