They clearly are the state of the art of IDEs for most mainstream languages nowadays.
It's easy for young developers to overlook the power of intellij IDES, and to use the "sexier" vscode.
But clearly for any medium to large project, learning to master intellijs are one of the highest ROI that a developer can get.
I'd go so far as to say Intellij and eclipse are one of the biggest reasons for Java and python's success. Those two languages came about during an IDE revolution and it made them so much more accessible.
I generally prefer JetBrains' IDEs over vscode. However, vscode's remote editing capabilities just tipped the scale for me.
Not too long ago I bought a "powerful" laptop (expensive!). It still chocked frequently when running multiple vm's, docker machines and/or multiple "auto-compile watchers".
Then I tried vscode remote editing. I just run the browser & vscode in the laptop, and everything else on the desktop. It makes for a much, much nicer experience overall.
JetBrains, if this somehow gets to you: please copy vscode's remoting abilities and I'll be back. Until then... I had a great time with you.
What's the point of tribalism? It's a natural human tendency to be protective of what's close to your heart and reject things you're unfamiliar with.
Every single HN post about either Emacs, IntelliJ, Vim, VSCode, or Atom always gets riddled with disingenuous comments of people who liked one thing more than other things. Things they either haven't tried or had some cursory experience with them.
These tools are very individual [just like toothbrushes], for someone Emacs offers something that IntelliJ or VSCode can't, for others - nothing is better than Vim.
To truly achieve mastery, one has to try and learn them all and choose a tool that works well for the situation or the one they like (for objective and subjective reasons). Some might say: "that's a waste of time", try saying that to musicians. Go tell James Hetfield of Metallica that he shouldn't be trying all sorts of different guitars because Gibson is hands-down the best.
If you're wondering, the "6M users / 405k customers" comes from the Community editions of PyCharm and IntellJ (maybe also Android Studio) and their free-for-students offer[0] ( which I would imagine is a big part of getting companies who hire college grads to license JB products).
> which I would imagine is a big part of getting companies who hire college grads to license JB products
I would assume so as well. It sounds negative though, but I'm quite okay with this particular one.
I think this is different from student offerings where there is some sort of lock-in. Microsoft makes sure every student can try Microsoft Windows Server and Microsoft Office and get used to how it works, but with an editor from a company that just makes editors and doesn't want to tie you into their ecosystem, I think it's fine.
> I would imagine is a big part of getting companies who hire college grads to license JB products
It's a good idea because, at least in our company, all of the young kids who are fresh out of school use VS Code while most of the seasoned people use IntelliJ (obviously there is one senior person using VIM as required by developer stereotypes).
Jetbrains products are awesome though. I used to use a heavily customized vim which was a pretty good setup, but the things a jetbrains ide can do are just much better than what my custom setup could do. I pay for a personal subscription and couldn't be happier. I will recommend everyone to atleast give their products a try. They have a free trial period.
I'm also a big of of their products, and pay for a persnal subscription for Rider, ReSharper, DotMemory, DotTrace and DotCover. Rider is absolutely stuffed with features, and is way more stable and performant than Visual Studio.
I also like the way your renewal gets cheaper every year, as a kind of loyalty bonus.
I honestly had no idea they were making so much revenue - very pleased to see it though!
I also enjoy DotPeek a lot more than the other .NET decompilers out there. I bought Rider, hoping the Visual Studio emulations would satisfy me (I use Visual Studio at work, but run linux at home) but sadly I have been unable to get it to work.
I thought the same when I first saw "stock" Rider - it's a very different look and feel from Visual Studio, more what you'd be used to as a Java dev with IntelliJ, or an Android dev with Android Studio. I personally found th look a bit... dated.
A while back JetBrains made Rider more themable (prior to that update, you could only really theme the editor, not the file explorer etc). After that update, it looks great with a dark theme enabled!
I'm on mobile now, but if I remember later I'll mention the name of the theme I'm using - it's pretty close to VS's dark theme.
That's one of the out-of-the-box themes, but I just checked and the theme I use is called "Visual Studio Code Dark Plus", and I use the colour scheme with the same name. You can find it as a plugin here:
https://plugins.jetbrains.com/plugin/12255-visual-studio-cod...
That's just it for me. The tools have so many good features, remain stable, and keep all those features out of my way until I need them. Like Adam Savage's first order accessibility principle for his workshops, the tool I need from their IDEs is always often in arms reach, yet still out of the way.
Oh, and a special mention is deserved for Rider's git merge UI, which is by far the best I've used.
It's based on 3 window panes: you get your code on the left, theirs on the right, and the result in the middle, along with tools for accepting changes from either side, and you can edit the result pane at will too.
I've never liked the git merge UIs in VS or VS code (or other IDEs I've tried over the years) - Rider's is perfect for me.
The thing is JetBrain's IDEs use that diff tool where-ever a diff is needed, not just for git. For example, in a local history of a file (like undo history), history of a single line in code, etc.
I always found the Edit and Continue function in Visual Studio to be flakey: often it would say it wasn't "allowed" with the type of project I was using, or it took minutes to apply changes when it did work, or it crashed while applying changes... Rider got Edit and Continue 1-2 years ago (I think), and it's been completely reliable in that time!
I recently went ahead and purchased theyr3 full product line, because I figured there are several I would end up wanting to use and it was just cheaper that way. The reason I bought it though, was specifically for CLion. I figured having a full featured IDE would make it much easier to browse and understand large C or C++ projects, but sadly it seems to only support CMake projects.
I have used CLion, and would say JetBrains did an excellent job with making a C IDE. The issue is that C is not much of an "IDE language"; my experience has always been to just use a text editor (vim or vscode), and it seems to be the same for most C devs I know. Looking at newer languages, they seem to pair closely with IDEs; I'm still not a big IDE guy, but most use them for python, java, etc. I'm not enough of an expert to quantify the reasons behind this, but I think it's hard to build a stand-out good IDE for a language with which IDEs often aren't used or are just used as glorified text editors.
> The issue is that C is not much of an "IDE language"
This isn't an issue with the language so much as it is with the build systems, includes, library paths, and tooling.
Compare to Java (set the classpath to exactly the artifacts you want and IntelliJ uses its own build system unless you explicitly tell it otherwise), Python (set up a virtualenv with exactly what you want and PyCharm handles its own builds, insofar as Python builds).
In C on Windows and Unix you have to figure out how to find and address includes and libraries in a cross platform way. CMake is probably the best bet. If they were in the position of, say, TurboC back in DOS days where they provided stdlib and you added everything else you wanted, they could do as good a job as for Java.
> This isn't an issue with the language so much as it is with the build systems, includes, library paths, and tooling.
Exactly. #include "header.h". But where is it? Depends on compiler flags. Java has the same problem, but luckily has only ~2 build systems that are well-supported by IDEs.
Java doesn't really have the same problem. It has the classpath, and that's it, across all platforms. Nor do the big IDEs use ant, maven, or gradle as their internal build system, though most of them support controlling them.
Yeah, there was some improvement. But the issue for me is building a C++ app which requires Linux headers, Boost headers, and Wt, CLion seems to wants to take four cpu's for a hot trip. Even with a bunch of the code helpers turned off.
VSCode with CMake, clangd, and C++ code filter seems to work for the little I've used it so far.
Havn't quite taken the leap of faith in VIM, clangd to see if that is suitable.
One thing I've found with CLion is that you really, really want to edit the JVM settings for the IDE. By default it starts with a 2GB memory limit for the JVM, which even for small projects will severely drag down performance, e.g. my MBP would run very hot, spin the fans and the IDE would get very laggy. Increasing the JVM settings to allocate 8GB completely solved this.
No it is not fine. The only impression I get from glorified notepads consuming gigabytes of RAM is the ever increasing desire to send them to /dev/null where they belong. My opinion of course
It's not the editor part that uses all this RAM I suppose, but the code parser and indexer that by default includes scanning & interpreting all your dependencies (system headers, boost, other third-party frameworks). There is a clang process that has the full AST for all of your code + its dependencies in the background all the time, so you can get search, index, autocomplete, syntax check, refactor etc. that actually works compared to the half-baked solutions you get with VIM plugins (and I've tried all of them).
I guess you can switch all of that off of course, but that's what makes it an IDE and not an editor. I think the memory tradeoff is perfectly fine for this kind of application.
At the moment I am sitting here adding couple of things to a huge desktop application written in Delphi. More then a million lines for a full build (which takes 11 seconds on laptop btw). It does all that you mention with all bells and whistles of a modern IDE and consuming whopping 380MB. How's that for a change?
Apples and oranges, Delphi != C++, and on top of that I don't think you really want to make the argument that the Delphi IDE can do all the things CLion can do for C++. I fondly remember my time writing Delphi, but I'm not jaded enough about the resource requirements of modern IDE's to pretend that you can compare these environments equally.
Anyway, I don't really see the point you trying to argue here. It appears you are principally opposed to software that uses more resources than what you consider necessary, which is fine and in the case of something like CLion or VS code justified to some extent, because they are far from lightweight. But if you remove these ideological objections from the discussion, none of this actually matters all that much considering typical workstation hardware. I honestly don't mind trading 4 or 8 of the 16 GB of RAM in my laptop for all the features I get from CLion compared to the alternatives. A full compile and run of the thing I'm building can easily get by with (much) less than 2 GB. And if I would be developing something that uses up 8+ GB by itself, I probably want a beefier workstation with 32 GB or more anyway. It's just not an issue, RAM is plentiful, and it's in there to be used.
All my laptops have 32GB of RAM. And if I had no other options I probably could've been stuck with CLion. However as I've already mention CodeLite and QtCreator are multiplatform, very responsive, work just fine as an IDE and eat very little memory comparatively to CLion. I often have to test big in memory datasets so I have way better ways of wasting RAM.
There is absolutely no excuse for any editing product to be perceptibly slow.
A single ordinary, commodity CPU core can sort 100M of totally random ints in 5 seconds. The amount of work any editor legitimately needs to do to provide you editing support is trivial, in comparison, by any measure.
This minimal cmake file should setup the ide for any project, the build will have to be ran externally though. You can setup the ide to debug external binaries as well, as long as it has source information (was built from the current project sources with debug info).
I purchased the whole product line as I think Jetbrain's product is excellent, the only complain from me is this CLion Cmake requirement, could be more versatile, and supports non-Cmake projects(or even single files without makefiles), even Geany does better than CLion as far as c/c++ is concerned. Please make CLion better for C/C++
OTOH that means you have to upgrade quite frequently (EAP stop working) and the editor is completely broken from time to time.
Also if you take part in a prerelease EAP (before the product is 1.0) (and your feedback is constructive and valuable enough) Jetbrains might gift you a license. That's how I got my first year of PyCharm (well my first year after the EAP ended anyway).
I can't figure out how to download the IntelliJ EAP. Everything seems to direct to the standard Commercial/Community IntelliJ download page. Anybody have a link?
This is actually what triggered me to get the personal site license when it first came out a number of years ago.
JetBrains announces that IntelliJ is going Open Source.
I checkout the code, build it (~20ish minutes) inside of the downloaded bits, launch the newly compiled IDE, build the repo source again this time debugging IntelliJ from within itself. All in less than an hour, with no hiccups. Amazing.
I came to say this. That $270M revenue is backed by a #1 product line. I first tried PHPStorm back in 2014 after I got tired of the wonky debugging capability in Eclipse. I still think Eclipse is a really important project in the way that JetBrains is the Google of IDEs and Eclipse is maybe the Firefox, and we need Firefoxes.
You may like them more for a variety of reasons but how is photoshop less free/open than Jetbrains products. Both are commericial products that require a licease and both are on the subscription model after selling unlimited liceases for years.
I remember there was a time when IBM really invested in it that it was miles better than anything in the Java editing space, or honestly any competitor at the time. For example, instantaneous compiling and error checking was so far ahead it took MS many years to catch up with it.
It used to be a matter of huge excitement when a new language or framework was supported by Eclipse.
But I moved away from Eclipse for a few years (I wasn’t programming then) and I’m back and suddenly it’s absolute terrible. Not just worse than browsers of the time, but possibly worse than what it was when I last used it.
Not sure what you're experiencing but I use Eclipse daily and I can't see anything remotely like what you're describing. It's clunky and sometimes slow (esp. if you run it with default memory - ALWAYS increase the memory). But it works just fine for me.
IBM getting involved in something is usually a death sentence. Initially they might inspire hope. But they'll turn everything into a horrible mess lacking those polishing touches that makes stuff nice to work with. They'll tick feature check-boxes. But the stuff will barely be usable.
Mozilla has made a commitment to privacy into its products' main differentiator, and I am 100% okay with that. The fact that FF ships with its Facebook container system turned on by default, and that it just works, is probably my favorite browser feature in quite some time.
I use Jetbrains products for everything at work. I don't know what's going to happen if I ever have to work at an Eclipse shop. Might have to turn it down, honestly.
The last place I was at was an IntelliJ shop, but I don't think there was anything in the project layout or committed files that was specific to IntelliJ, so if they're good about not committing project files, it should be the same for Eclipse. You'd just be on your own, though.
There are Eclipse shops? In 2019? Why? I mean, even IntelliJ Community (which, despite the implications of the name, can be used for everything) is a fair bit better.
Speed in large projects. IntelliJ is super slow once you have huge source/text files. E.g. WebStorm is unusable for debugging as one step over takes ~10s on a 128GB RAM machine in such cases.
I am mentioning this in the off chance you did not tried it, exclude the node_modules/vendors/build folders or other third party code that is not part of your project you are editing.
I am not experiencing this issue and I have a large project PHP and JS plus the plugins for jquery and angular , all linting on. After the project loads I don't feel any lag, I run an i5 6th gen CPU , 4cores. I might have tweaked some VM options years back (my configs and styles are at least 5-6 years old so I do not remember).
Also if you transpile all your js into a big minified file, exclude that too, right click on it and there must be an option as mark as plain text.
I've been the sole Eclipse developer in a number of places where everyone used IntelliJ. At least a couple of the places had switched from Eclipse after having been worn down by that one incessant IntelliJ guy. A few developers discreetly confided that they would rather have stayed on Eclipse, and some new people followed my lead. None of the places were 'IntelliJ shops' though, any more than I know of any 'Eclipse shops'. It would be rather poor form to hard tie your projects to an IDE, so it was always fairly doable to run with your IDE of choice.
> a jetbrains ide can do are just much better than what my custom setup could do
I get frustrated by people who insist on a complex vi/emacs setup for something Jetbrains IDEs do better out of the box. Or people who insist Sublime is good for editing their complex React project.
So nobody can give the opposing view point? I use both IDEs and Text Editors depending on the language. I use jetbrains for kotlin/java, and moved from vim to vscode for javascript and any other scripting language (also switched from VS to VSCode for .net)
I find developers who try to force their tools on others annoying. I'm much more productive on scripting languages with an editor. They just feel more responsive.
Of course you can disagree with that! I have written great amounts of all sorts of projects in text editors instead of an IDE. And yes, text editors come in different flavours. VS Code/Sublime Text isn’t the same as Notepad. That being said, the person I replied didn’t make a case of VS Code in any way. The OP asked what to use instead of a text editor like Sublime Text, and the reply was simply “Just use VS Code”. That’s not an argument in any way, that’s just a statement.
I mainly use vim and occasionally use Jetbrains. My setup in vim is super complex. I can tell you exactly how I feel about it:
Vim is a better text editor than anything else. By far. Unfortunately, vim is terrible at basically everything else.
The problem is, once you learn to use vim's text editing capabilities, then editing code using anything else feels like a pain. I'm not talking about variable lookups / etc. I'm talking the pure "move the cursor to a certain place and enter some text" aspect of it. If you don't know vim, then it's hard to understand how slow editing text feels without it - it's kind of like going from not knowing how to type properly to being a solid touch typer. (not that extreme, but that's what it feels like).
Unfortunately, because vim sucks at everything else, my setup has to be complex to actually get it to do the other things a good IDE does out of the box. If I could do it the other way around, I would - I'd love to be able to use vim-like editing inside of an IDE, but every vim-mode I've tried so far just doesn't work properly (except one - evil mode in Emacs - which is why I recently switched to Spacemacs, but that's another story).
The vim emulation for the IntelliJ tools worked very well for me. Used to use only vim with a complex setup. Have been using Goland, and IntelliJ for about a year now.
I actually haven't tried it (just started using PyCharm again very recently). But I gave it a go right after posting my comment.
And like almost every other emulation I've ever tried, within 1 minute, I found 5 things that didn't work correctly. And I'm not exaggerating here - I literally spent 1, maybe 2 minutes and found 5 things.
I'll have to use it for a while to find out whether it's just a few minor annoyances, or much worse than vim.
Can you briefly enumerate some of them here? I'm a casual vimmer and have plateau'd on the basic vim features that are good enough, so I'm curious what advanced commands are useful day-to-day.
Nothing really advanced, I think, although maybe one or two obscure things. Here's the problems I found and remember (I wasn't looking for anything, I was just trying some basic stuff). They all might seem trivial, but we're talking muscle memory heI'M.
1. First thing I did was to fold all the functions in the file - this is something vim does pretty badly, actually, because it doesn't know how to deal with Python syntax without lots of customization. But anyway, the command for "fold everything that can be folded, recursively" is zM. Then the command to open everything back up is zR...
Except that for some reason, this vim emulation doesn't open everything, it kept the imports at the top of the file closed.
Verdict: Probably not a big deal, just inconsistent (but maybe PyCharm's way is better?)
2. I then did a standard thing I like to do - if you want to delete a paragraph, you hit 'dip'. Works well. If you have a few lines of whitespace between paragrpahs, and you want to delete everything except one line, the command in vim is 'dvip'. This is actually somewhat obscure but I use this constantly to clean up code. Didn't work.
Verdict: obscure command that's rarely copied correctly, but I use it all the time. Annoying.
3. I then tried to change some text. Let's simplify and say that I did 'ci(' to change the contents of parenthesis. Worked well. However, I tried to undo the change. In vim, this is a single 'u' since the change command is atomic. However here, this required hitting 'u' three times.
Verdict: Ok this is really annoying. It's unpredictable and screws up my muscle memory, plus it's a very very used feature.
4. This might just be my fault - I tried to navigate my Python file using ']]' and '[['. The second one took me to the end of the file, the first did nothing - neither did what I want, which is to jump through various methods/functions. I also tried ']m' and ']d'. This one is not stock vim though (or not exactly), so it might be possible and I just don't know it.
--
I don't remember the other thing.
And btw, I totally don't mean to diss PyCharm, which is awesome in many ways. And I could be only nitpicking here - though again, finding 4/5 problems in 1 minute is not a good sign. But that's my point - emulating vim is, for whatever reason, either really hard, or not something that people spend a lot of effort on. That's why I have to rely on vim itself (or actually Spacemacs nowadays, which amazingly does have an almost completely working vim emulation.)
Agreed that it’s not perfect emulation. I took some time to find alternatives to everything it lacked for me and now I’m satisfied.
The biggest plus is when working with larger projects. The single-threaded autocomplete and jump-to-definition functionality was very slow in Vim, stalling the UI updates. Goland feels so much smoother in these cases.
Response Speed. Most emulations tend to fall behind my actual Vim command speeds, which really destroys the vim editing flow.
Occasionally emulators will not honor mode switches correctly or on the first try. So I would expect to be in insert mode after a complex set of commands but the emulator isn’t there. This is also likely due to speed issues, but maybe not.
Emulators do not do a good job of handling macros, and vim’s repeatability. The auto stuff they try to do (such as formatting, etc) precisely the reasons one would prefer an emulator, can mess up repeatability.
Many of them don’t handle certain basic commands. A lot of emulators, for example, do not handle commands like HML which shift the viewport, possibly because the IDEs do not really give them access to it, or maybe because they aren’t known well enough that they fall way down the priority list.
I wanted to say exactly that. I've never been a big fan of vim plugins in IDE's, even though I still prefer them over no vim bindings. The VS code or Eclipse vim bindings are 'not great' at best, for example. But CLion + vim plugin is actually very good: it uses my .vimrc, doesn't mess up undo/redo, supports things like block select in visual mode, etc. The only downside is that it interferes with some standard CLion keybindings (which is inevitable I guess), so you have to remap some things.
Out of curiosity is the plugin just called vim or what? I've been craving getting back to using vim style controls to edit text (and use CLion when working with Rust) so would be interested in at experimenting with this.
It also has two popular vim packages, surround and easymotion you can use too, which I really like.
I then customize all the IDE stuff to vim combos.... super nice.
only PITA is in some drop downs on a number of jetbrains products is that it doesn't play nice with auto hotkey, I have ALT-J and ALT-K bound to up and down arrow keys which makes for a much nicer vim experience when dealing with autocomplete drop downs ( or any drop down )
Was going to chime in to say the same, the VIM plugin in Intellij is hands-down the best vim emulation I've seen. It takes your vimrc as `.ideavimrc` and fucking works.
Been paying for Intellij for nearly a year now and I don't regret a day of it. Well okay, I do regret the one day EAP was totally broken by the VIM plugin, by besides that it has been brilliant.
> "move the cursor to a certain place and enter some text"
In vscode, I'm usually already looking at the call site of a function I want to edit. So I move the cursor into the function call and hit F12 which takes me to the function definition to edit it. Once I'm done, I hit Alt+LEFT to navigate back to where I was to continue on...
If I didn't start from a call site but I know the file I want to edit - I hit Ctrl+P, type the name of a file, hit ENTER - now I'm in the file, ready to edit it.
To jump to a function, I collapse all functions (Ctrl+K,Ctrl+0/1/2/3/4) and then scroll (or PAGE UP/DN) to find it...then use arrow keys or Ctrl+G to enter the line number. Now I'm ready to edit the function. I might have to hit Ctrl+Shift+] to expand the body of the function.
Alternatively, I Ctrl+F and type the name of the function I want to edit, pressing ENTER to find it...and I'm ready to edit the function.
Reading the parent comment (and being somewhat a vim user) - "move the cursor to a certain place and enter some text" - sounds mostly about the first thing you mentioned - "move the cursor".
Stock vim is mouseless, and without arrow-keys, which means relying on /? (searching) or other keys to achieve the function of arriving at text. CTRL-F never quite matches that (after you hit enter, the CTRL-F dialog is still open, and needs to be closed with ESC or by clicking away), and moving to the arrow keys/pgup/pgdown/mouse is slow.
Having said that - there are some plugins that match this behaviour - I particularly like the ones where a key (f in vimium) highlights each word with a character, allowing for one or two keypresses to jump anywhere on the screen.
>So I move the cursor...What do you do in vim that is far easier?
The part about moving the cursor. Vim users typically don't move the cursor with the mouse but rather with the keyboard. Having to move your hands off the keyboard to reach for the mouse then back is the part that starts to feel sluggish if you get used to not doing it.
Quite the opposite actually, by the time your hand even finds the mouse the vim user will already have jumped to the desired code block and have started editing it.
Having worked alongside longtime vim users, that's almost never the case. There's often more time spent on finding out/remembering the efficient way to get to a particular piece of code. And then there are the inevitable mistakes (oh, I counted give spaces/quotes/paragraphs, but there was one more/one less; oh, I failed to account for some minor thing in my macro etc.).
In a modern IDE you have a multitude of shortcuts and a mouse, and they complement each other.
> Having worked alongside longtime vim users, that's almost never the case. There's often more time spent on finding out/remembering the efficient way to get to a particular piece of code.
Longtime vim users who didn't know how to use vim? That's... interesting.
It's not so much the moving between the files - which vim is terrible at (one of the many things I had to extend in vim in order to get it to work like an IDE). But it's moving and editing within the file itself.
E.g., say you somehow got to a file, and it now has a bunch of functions in it, and you're literally looking at the line you want to edit. To get to that line, there's a bunch of different ways, but you can do this in like 3 key presses. Then, within the line, you can change anything in it really easily.
This sounds weird, so I'll try to give an example. Let's assume you have something like:
Func(self._something, self.something_else).validate, 'Validate exam foundation table')
And let's say you want to change the string that says 'Validate [...]' to say 'Change is good!!'.
To do that, once you've gotten to the line, I'd probably hit two key presses that mean "go to the first open quote in the line", then I'd hit the keys that mean "delete everything inside of the quote character", then I'd type what I want. All in all, I'd be typing these characters before actually writing what I want to write: f'ci' (so, 5 characters).
That probably looks either idiotic or daunting - but the idea of vim is that it's a language - you are literally thinking in your head "go to that quotation mark", then tell vim to do that and it does. Then you're thinking "delete everything inside of these quotations", and it does it. The distance between thinking what you want to do and doing it is almost zero - it's as close as you can get to literally telling someone exactly what to do.
If you're using a non-vim editor, you'd probably have your cursos in the begining of the line, and have to do "cmd+right" several times to skip over words in order to get to the first word of the string, then have to "shift+cmd+right" to get to the end of the string, then write what you want.
There might also be some small annoyances - the last shift+cmd+right might take you over the last quotation mark, and you'd end up selecting the closing paren as well. In vim - that doesn't happen, you're saying exactly what you want to have happen.
Or you might want to undo this change - in vim, it's always hitting "u" once, because in vim, changing the string to something else is an atomic motion. In another editor, you might have to undo a few words at a time, or maybe not - it's not always predictable. And since it's atomic in vim, it's also easy to re-apply the same action to another string - so changing another string to the same thing is a simple matter of hitting "." on it.
And of course, this is just a tiny example. It's easy to dismiss as trivial or unimportant - these are tiny savings of time, after all, and even if you add it up, I doubt the "time saved" in doing things more efficiently is worth much.
But once you know this language for telling an editor exactly what to do, then using an editor that doesn't speak that language just feels super slow - it feels like you are not able to communicate properly, and suddenly, what used to be zero gap between thinking and doing, takes a long time.
> If you're using a non-vim editor, you'd probably
Double-click the word to select it, and start typing right away.
> it's as close as you can get to literally telling someone exactly what to do.
I usually tell someone "Change the word 'validate' to 'something else'". SO i grab my mouse/trackpad, and get there in one click (or double-click).
> It's easy to dismiss as trivial or unimportant - these are tiny savings of time, after all
You should observe most of these "savings" in real life. There's rarely a time when I can't do stuff with code faster than a Vim user. Because by the time the vim user has typed the required sequence of letter, or counted which line/symbol/mark to go to, or wrote a macro correctly, I'll have finished all I needed to do using IDEs built-in capabilities and/or a mouse.
You're talking about how it's easy to move to a function or a file, and then you're "ready to edit", but edanm is talking about actually doing the editing.
For example: say I jump to this function and want to fix a bug (the `search` should strip off the first two characters here, not just one). So I need to change `regex.search(s[1:], ...)` to `regex.search(s[2:], ...)`:
def compile_hg_glob(line):
pat = glob_to_re(line)
# Mercurial ignore globs are quasi-rooted at directory boundaries or the
# beginning of the pattern.
pat = '(^|/)' + pat
# Mercurial globs also have to match to the end of the pattern.
pat = pat + '$'
try:
regex = re.compile(pat)
return lambda s: regex.search(s[1:] if s.startswith('./') else s)
except:
warn("could not parse hgignore pattern '%s'" % line)
return lambda s: True
If I've just used a fancy shortcut key to jump to this function, my cursor is probably on the function name. In Vim, I'd do `cinr2:<esc>`. Seven keystrokes. I could also do `/[<cr><ctrl-a>` which is only four keystrokes, but a little more awkward to reach. If I tried to do this editing with arrow keys and backspaces I'd need 12 down keystrokes just to get to the right line.
Or suppose I'm looking at this and want to add a `,` character to the end of each of the type entries, because I forgot Python likes its commas:
In Vim I'd press `j` to get to the first entry, then `A,<esc>` to append the `,` after the first one, then `j.` to move down and repeat the action. I then press `j.` a bunch more times (which is really easy to do rapidly with your index and ring finger on Qwerty) and in 2 seconds I'm done. Vim's `.` to repeat the last action is really powerful and can save you a ton of time for small ad-hoc edit repetitions that don't warrant doing a full macro with `q`.
These kinds of things happen constantly, and when you've got Vim burned into your fingers trying to edit text without it (actually edit text, not just jumping to something) feels like typing with oven mitts on.
2: select the first :, ctrl+d until all are selected, right arrow, comma
Doesn’t sound any more efficient? Plus, who writes code without an auto-formatter these days? Problem two would have been solved by the linter the moment you wrote that.
It's not just code and linting though - this kind of thing happens when you're editing YAML files, when you're editing pure text, when you're editing CSVs, when you're editing some obscure thing no one's heard of - once you have the primitives down, it's just so easy to apply it everywhere.
> In Vim I'd press `j` to get to the first entry, then `A,<esc>` to append the `,` after the first one, then `j.` to move down and repeat the action. I then press `j.` a bunch more times (which is really easy to do rapidly with your index and ring finger on Qwerty) and in 2 seconds I'm done. Vim's `.` to repeat the last action is really powerful and can save you a ton of time for small ad-hoc edit repetitions that don't warrant doing a full macro with `q`.
Eh. I'd probably do 'qqA,<esc>j0q', and then '8@q'.
That's also probably not the best example, since that's also trivial if you have an editor supporting multiple cursors.
That's hardcore, I would rarely use a macro for something like that :)
That said, I think multiple cursors are the greatest addition to text editing since, well, vim. I was an enthusiastic user of Sublime Text 1, right before I learned about vim.
Luckily, vim has multiple cursor support, which is... decent. Not great, but decent. I actually think that the only thing that makes multiple cursors more awesome, is being able to combine them with vim's commands, since multiple cursors rely on you being able to do precise things at each cursor, and vim gives you the language for it.
> That's also probably not the best example, since that's also trivial if you have an editor supporting multiple cursors.
Yeah, it's hard to come up with a decent example because I don't even think about it any more, it's just burned into my fingers. I just know how excruciating it feels to edit without Vim (I even wrote that last comment in Vim and then copied it into the browser because writing it in a text field is miserable).
I long ago created a special script (in Macos it's via something called Hammerspoon, I used to have a Windows version).
It basically gives vim-like keys anywhere you want, when holding down the caps lock key. So e.g. caps+h/j/k/l are movement keys.
It goes a lot farther than that: I have a key to delete a line, a key to select a word, a key to go up/down by 4 lines, a key to delete the last word, etc. I even mapped caps+f to jump forward 20 characters (to badly simulate using 'f [letter]' in vim).
This makes so it I never have to leave home position on the keyboard, because while holding caps I have all the movement keys I want at my disposal. It's a total lifesaver, and the only way I can effectively use a keyboard outside of vim :)
This is a bit frowned upon in HN, but may I just say I'm a fan. I'm not sure, but it's likely I got my way of speaking of vim as a language from you, and as you can see in my other comments, it's stuck with me :)
Or just use the mouse to point and click in the same time. With laptop mousepads it's just moving a finger. Most devs aren't writing that much code and all these Vim efficiencies are vastly overstated.
I've seen many Vim/Emacs-only devs being easily beaten in speed by others using modern IDEs that have tooling and functionality (auto formatting, refactoring, templating, etc) focused on actually getting things done.
I think where the IDE’s are really powerful is when refactoring. Need that one class renamed? File is automatically renamed too, and all references in every file that link to it (instantiations, calls, imports) are updated too.
Exactly, the code structure, navigation and intellisense features are far more useful and let you code at the same level of abstraction as the logic you're coding.
Moving a little bit faster through the text file to edit characters is rarely the issue and I certainly wouldn't give up IDE features for it.
Exactly this. I pick type, and I've never found that it feels too slow. I spend more time thinking about the change I want to make, and reading the code to plan that, than actually making the change most of the time. My typing speed wouldn't address the bottleneck. I think vim is the same. Sure you can edit the text faster, but that's not the bottleneck anyway.
Vim was never about typing efficiency. However, it is indeed the best way to navigate and edit text. This statement is very subjective because, just like any tool, it depends on the user. Chainsaw looks ugly, heavy, cumbersome and dangerous to someone who doesn't know how to use it. But with some practice it becomes an incredibly efficient tool. People make ice sculptures using chainsaws.
And I'm not talking about Vim the editor. I'm talking about Vim as an idea. Which is today implemented for pretty much every single [popular] editor and IDE in use. That fact alone is pretty illustrative of awesomeness of the idea of Vim.
And the comment about Emacs is quite disingenuous. I have never been inside a Formula One cockpit, but I can totally get "the job done" with my Camry, because it is totally more efficient for parallel parking.
I have used many IDEs, including InteliJ (which I used for about seven years). Emacs wins solely by its extensibility, no editor/IDE has ever matched its capabilities. For some people that is not an important factor, just like the efficient parallel parking might not be important for Formula One pilots. But when you can automate pretty much anything it feels very empowering and liberating.
Small example: when I'm about the create a new commit, an emacs-lisp script can figure out the current ticket I'm working on (based on currently clocked Org-mode task), generate a branch name based on the ticket description, generate part of the commit message (in the way that it is in compliance with git tool like gommit), I would just have to type the rest of the message.
That is not only more efficient, but also reduces frustration. Compare that with the workflow in any other editor and IDE - most of these steps will have to be manual. Then someone might say: oh there's actually a plugin for Editor X that does some of that stuff for Jira. But what if I join a different company that uses Pivotal Tracker instead? I can extend my emacs-lisp script. Whereas if that's an InteliJ plugin I would either have to go through daunting process of forking and modifying the plugin or submit a feature request and wait for something that may never happen.
Even something simple like reading code line by line (and of like me you like to move the cursor as you read the line), and your cursor reached the bottom of the screen, and you want reset the viewport where the line the cursor is on is at the middle of the viewport, is one keystroke ‘M’
I do all of the same in emacs (and vim), and because I use doom-emacs I get all this basically for free without much configuration on my end.
- Go-to-definition is `g d` (with the cursor over the function name in question)
- Project-wide file search is `SPC SPC`
- Jumping to a function is `SPC s i` and then just start typing to fuzzy-match the function name
I stick with this setup because it does pretty much everything I could want from IDEA, and does it without churning up most of the resources on my machine. And trust me, I've tried to switch to IDEA, but it's just too big and too slow, and too poor of an editor for me to actually make the switch.
The one related function that I would miss is using vimgrep and the QuickFix list to get a list of the locations where the function name appears which I can use e.g. to do a search and replace in those files (or a subset of them)
Everyone does, that's totally legit. However, even without editing anything, just "moving around the file" is much snappier with vim. Even when I'm reading code I'll move to certain parts of a line to better understand what's going on. Plus, you do eventually have to edit code.
If you really never did anything except read code, then I think vim wouldn't give much of an advantage. Then again, neither would any of the shortcuts that every IDE provides.
Of course. I don't even know if I'm actually more productive in editing text.
I just know that subjectively, going from speaking a language with powerful concepts, to using the super crude tools available in most editors, just feels sluggish.
I highly doubt it was actually a good investment time wise to master vim, but I salary really enjoy messing with editors so it was partially for fun.
I always wonder how good and productive people who claim this are in reality. Personally I consider typing as a strong bottleneck for my productivity. I type all the day, and the less time I waste on transfering my thoughts into commands, the more time I have for focusing on the important parts. Not all typing is for textediting, but editors like vim&emacs are not limited to textediting.
That or "VSCode". It does not compare to a proper IDE. And so far my attempts at meaningful discussion regarding it not being the right tool for anything except TS just ends up in "voodoo" arguments about how it can "debug anything", etc.
I use both emacs and Intellij, depending on the circumstances. There are some things for text editing that are just faster in emacs. For example,
- I can be somewhere, jump around to a bunch of files, copy something, and then jump back to whereever I was last actually editing quickly (the "jump back to last edit" is 2 strokes).
- I wrote a custom mode, with tabification and fontification for the query language used by the cms I work with. I expect I could do that in IntelliJ but it would take a lot more effort.
- Things like kill-rectangle and the like; some of which may have parallels in IntelliJ, but I don't know then... and decades of experience in emacs means I do know them (or how to find them) there.
I really like IntelliJ, but I also really like emacs. Which to use depends on what I'm doing.
I also really like _make_ and wrap my other commands (mvn, gradle, etc) in Makefiles. I get jokingly mocked a lot at work :)
I have the reverse opinion. I find jetbrain users are so eager to extract the dollar value from their IDE that they try to shoe-horn the use of every available feature into their workflow just because they exist, whereas with vim, the features I use are a laser focused toolset I have accumulated over the years based on the need to solve specific problems. Vim accommodates my desired workflow while many jetbrains users attempt to shift their workflow into webtstorm's feature-set.
I used PHPStorm for quite some time and was hyped that Android Studio would switch from Eclipse to a JetBrains solution, back in the days. I still don't understand how it could turn out as shitty as it is right now.
The new breed of garbage collectors may change this significantly for the better. They need to be explicitly enabled, but there is a GC (G1) that may be better suited for desktop applications (low latency pauses, relinquishes memory to the OS more frequently while idle, etc.) available in Java 11.
Thank Garbage Collected languages. I just checked the IDEA config and found its maximum heap is set to 750 MB by default. You typically wouldn't need 32GB to run it.
I changed the maximum heap for my IntelliJ IDEA instances to 2GB and haven't seen a slowdown since. 750M is too low if you're working on a large project imo. Adding a dependency to my pom and immediately debugging used to cause the IDE to chug while it scanned everything.
How great is the 32 GB of ram? I have a 2017 macbook pro. I don't ever develop on a desktop machine to be able to know what I'm missing out on by only having 16 GB.
I run on 16GB at work and 8 at home. At home I run into issues with large Factorio factories or if I have too many browser tabs open (tbh that's an issue with me, not with my system, but more RAM would be a workaround for it), but at work the amount feels quite luxurious. I never got close to running out even with multiple VMs running at the same time, so I don't really see the need for more than 16. Maybe specialized applications need it like machine learning or so? Though that would seem like something you'd do on a server instead of your local laptop.
Unless you're running close to full most of the time, I also don't think the extra disk caching more RAM allows for is generally worth it. I have a few GB free most of the time (both at home and at work) and that seems to suffice to cache whatever files I'm currently working with.
If you keep tabs open for days and don't open them, like me, you might want to try a tab suspending extension. There's noticable lag when I open a tab I haven't opened in hours, but my FF on Ubuntu is fine with ~100 open tabs.
I'm one of those recent converts. I picked up programming in my late 30's and the first tool I ended up paying for was Pycharm. I never went through the 'print statement' phase as their debugger is incredible.
I badly want to use intellij for Rust and other languages. But the issue I smash up against is that years of Vscode + my customizations has made using any other editor terribly clunky.
I can spend hours customizing the controls and UI but I still feel like someone handed me the keys to some old car made in a country that doesn't exist anymore.
This in part revealed to me the cost associated with all the editor customizations I make. Default settings are nice that way.
Oh boy. This is how I feel any time I touch a coworker's computer to try and peer program or help them out. I have so many shortcuts (Keyboard Maestro), workflows (Alfred 3), keybinding changes (Karabiner), and utility programs (Amethyst, Spectacle) on top of this IDE thing (I use intelliJ and coworkers use VSCode) that I immediately press a bunch of keys (out of muscle memory) and invariably something completely unexpected happens. It's super frustrating - but I doubt anything can be done about it other than sticking to my machine.
If you pair program a lot you could export your Intellij settings and switch to that profile when you're on their machine. But it sounds like that only handles some of the changes that you'd need (you could move any of your Intellij related key bindings from Karabiner into Intellij to get a little closer).
Not sure IntelliJ can handle key mapping the same way as Karabiner - for example, my right option key (only the right one, not the left) is mapped to command + space. Good tip nevertheless!
Ya, fair enough... I too have some Karabiner mappings that can't be done in IntelliJ. If you're serious about it, another option could be to get a programmable keyboard so many of the keybindings are right in the keyboard and you could just plug your keyboard in to the other person's computer.
i’m like 60% sure that this is why nixOS was born at all: some very dedicated emacs or vim user got so fed up with moving configs around that they built an entire package manager/distro/thing to solve their config issue for all time.
Except that Nix doesn't manage your home directory! (though some folks have put together some less-than-prime-time solutions).
That's actually something that's a major hole for me; it would be like twice as useful if it did. But yeah, my solution is just: https://github.com/zenhack/vim-config
Can anyone comment on the state of Vim emulation in Vscode? I'm in Android Studio largely because of its support for my .vimrc, without which I can not live. But I see[1] that there have been recent commits related to this in Vscode. How good is it? Other thoughtful comparisons between life in JetBrains world vs Vscode welcome as well.
Vim support is still pretty meh, though better than some others. The onivim guys are still plugging away at libvim [0], and I'm really hoping once it's stable, someone integrates it with vscode and other editors.
I use both and have contributed to the IntelliJ extension. I haven’t noticed any functional difference between the two extensions and they both fit all my use cases.
Update: Curious, I took Vscode for a spin again and installed the latest Vim plugin. Although .vimrc keybinding support is supposed to be there, I'm getting no love. So new ticket for the maintainers [1]. The thing is Vscode is SO snappy and slick, I'm going to switch anyway :)
over the years, i've learnt that learning to work with vanilla vim commands is the best way to go. any editing plugin feature is just an extra command character or two away if you know the basics very well. this means i am instantly productive in any ide that has a vim plugin.
in fact i'd extend that to bash as well. i only use very minimal configuration these days.
I worked at an automotive shop for a while. Let's go with an impact wrench for an example.
In the car shop world, impact wrenches are primarily used for the installation and removal of wheels on vehicles.
The impact wrench I started with had a single internal hammer- the thing that makes a click noise and applies torque. After a while of using it, I could hear when the wheel was seated correctly, and when it wasn't.
Later, that tool broke, and got replaced with a dual-hammer one- and all of a sudden, I couldn't hear-- feel-- when wheels were on right, and it took me a few vehicles to adjust to the new noise, weight, and feel of the tool. I got used to the new one eventually, but I still liked the noises that the original wrench made more.
Before I adjusted, I was unable to perform that part my job correctly because I didn't know exactly how to use the new thing that was identical in use-case to the old one.
My CAD program of choice doesn't have many keybinds stock- and so I've bound my own shortcuts to different things buried under various menus. I also have a Logitech G502, which has buttons on the sides of it, that I've also bound to some of the more-used, harder-to-get-to functions. It's much easier to open up the parameters table- which I use heavily to tweak designs I make. It's the way I like to do things, and that one bind on the side of my mouse saves me from rooting through menus all the time trying to find the same thing over and over again. I set up that bind almost two years ago, and I've been using it ever since.
When I got a new laptop recently, I had a hard time doing CAD until after I ported over all my keybinds and stuff.
Now to answer your question- because those of us who use powerful tools to build custom stuff also like to customize the tools we have for the task at hand. A developer who's used to their setup that they live with every day will undoubtedly have a hard time using the factory settings, and an even harder time working with someone else's bindings.
Why do people become so dependent on tools? Because we mold them to suit our desires, and they become an extension of who we are, and what we can do.
I've been using vim for roughly half my life at this point. What I've found is that actually using the editor is so thoroughly muscle memory at this point that using another editor, where I actually have to consciously think about how to do something, is incredibly distracting.
It's not like the difference in input speed is really meaningful; as you'll see someone point out in any discussion about this stuff, the bottleneck in programming is thinking.
But what I find will often happen is:
1. I settle on a course of action.
2. I go to actually do it.
3. The editor doesn't do what I expect, because it's not vim.
4. I am momentarily confused, and have to think for a minute about how to do what I want.
5. I lose my train of thought entirely.
6. Rinse, repeat.
So for me it's not so much about any specific thing the editor does to make me productive. I do have opinions about some things, but what's important is that it just fades into the background and lets me think about the problem I'm trying to solve.
Beyond just being "different," I tend to eschew IDEs for much the same reason -- while many of the advanced features seem useful, I find them too distracting to be worth the trouble. Just me and the code, please.
I have a pretty extensive .vimrc, and use VSCode as my primary editor. Since VSCode didn't have .vimrc support when I set it up, I ended up translating my .vimrc into VSCodeVim's settings.json. It took a bit to figure out how, but now I prefer using vim in VSCode to using it in the terminal.
are you really writing that much code where a 20% (actual, and I'm going to guess to you it's a 100% percieved) slow down is going to make you get fired?
Or think of it another way, why are you only able to work in optimal environments, and is that the real benefit you provide? Are you going to get laid off if you aren't fully optimal? If you switched keyboard layouts would you lose this speed too? Can you afford to make ANY changes at all if this is your criteria?
After having to code about 80 java file application on a data center pull out crappy laptop screen with a jacket with just notepad and javac over a few days I just use the defaults on everything or settings that are one change away (like eclipse mode in intellij which is a meta setting like vim mode). Other than that I just adapt and never customize. This lets me use other people's computers easily, use many different OSes (I write software that enables the rest of my company so I write for what they use on what they use), and editors with little issue. I can also setup a computer in about 20 minutes. I find that the majority of my time these days is deciding what we should be doing and how. The time to write the actual code is pretty minimal.
So I ask again are you optimizing for the right thing here? Unless you are constantly re-enacting the scene from Swordfish I don't think you are.
Former Emacs user here. I've been doing the same: stick with the defaults as much as possible and adapt. This brought nice additions to my workflow, like multi-cursor editing, which I didn't use in Emacs because doing regexes was my way of solving these problems.
PS: I'm pretty sure that Emacs must have a multi-cursor mode somewhere :)
You've found joy in the narrative of "I just adapt and never customize ... [I can function well in my org] with little issue". Someone with a different set of constraints and preferences won't find that narrative as enjoyable.
There's no need to be that aggressive, OP didn't say anything about getting fired or losing his job. What's optimal is subjective, and they seem to find comfort in what they do. Let's not get too used to tooting our own horn that we do it even on unrelated comment chains.
Apologies but I'm only reading the first sentence of your comment.
It's about how I enjoy coding. Its my job but I love it. It's fun. Part of what makes it so enjoyable is the ergonomics. Ask any craftsman about their tools.
Non-sarcastic question, how do you fare in situations where you are uncomfortable, like learning new skills; Where you are just BAD at a thing. New sport, new technology/language, etc?
I learned a while back that I had to lean into those things and just get through the awkward if you wanted to keep learning.
You raise a great point the more I think about it.
I thrive when learning new skills and being "uncomfortable" and out of my element.
It's probably because I'm picking at rust for fun in my personal time that I don't want to deal with the uncomfortable parts. In my own time I coast and comfortably stroll through new problem spaces rather than get to that "my brain hurts" part that's all too familiar.
If rust + intellij was a work requirement I probably would just pick it up and discover that my brain can handle perfectly, two sets of bindings the way people claim to be able to do qwerty and Dvorak interchangeably.
Personally I pick one new thing per personal project and leverage my skills on the rest. If I go too far into the new things then I get bored or flummoxed with say "buck build system" and "learn kotlin" in the same project, and never actually make progress.
I think this is why I bounced off of react 4 times before sticking, too many things to learn at once. Then again I bounced off of antlr 4 times and only really got it to stick because it was a work need, and antlr is the only new tool in that chain.
Forgive me but aren't they just identical apps? I swear I thought they were all the same base program with a different set of plug-ins. And you could basically make any of them behave like any of them.
I think that is a harmful generalization and feeds on itself (more distrust creates more security measures which creates more the feeling that you need to secure yourself against this threat).
They are very open about it and I don't see any problem with it. You could find some issues with them running a cloud software like that, but given that they primarily produce tools that are largely open source it is not a problem in my mind.
Here is an article about their operations in Prague (in czech), from what I understand they have most of developers in St petesburgh..
The guidelines also say: "Please respond to the strongest plausible interpretation of what someone says, not a weaker one that's easier to criticize. Assume good faith."
In this case, assuming good faith would be assuming that @ordx is stating a fact that they're aware of, not trying to stir up controversy. If you were interested in finding out how they knew that, you could politely ask them what their source of information was, without implying that they have ulterior motives.
I am a big fan of Intellij. But the single most feature I hate about their products is keyboard shortcuts. If they follow standard unix shortcuts along with standard browser shortcuts, it will be more productive.
I'm with you that the defaults aren't my favorite... but as a heavy Sublime user I was able to migrate the bindings over that made sense to me... Intellij products are insanely configurable.
Also - I would either use their cloud sync and/or VCS to back-up your customizations. It sucks switching to a new computer and losing a day re-configuring your IDE back to baseline =|
Is it easy to use VCS for that? Last time I checked it wasn't [1]. In fact, that is maybe the main thing keeping me from learning IntelliJ tools more: I'm not comfortable with programs that I know I will want to customize but can't just git add the customizations to the dotfiles repo.
I've done it in the past but I'll admit it's been years since I've used it. The cloud sync thing works just fine for me and fits well with the subscription model etc.
Looks like they may have gone off the deep-end with the configuration files - I remember the ability to export to a MUCH smaller file but this was probably 4 years ago at this point.
Give it two weeks. I agree the debugging F-keys are a bit strange, but a great thing is that you can do everything without touching the mouse once you know the keys. And for any shortcut you don't know, just use the Actions search.
Going to go out on a limb here and say that I think the IntelliJ keyboard shortcuts make more sense than any other IDE I've used.
Control+Alt+L for code lint & format makes a heck of a lot more sense than the two separate Control+K Control+J or whatever that Visual Studio demands. Same for optimize imports - Control+Alt+O(ptimize) instead of Control+K Control+I or whatever in VS.
I haven't used Eclipse in ages, but I remember those shortcuts being bad enough that I never bothered to learn them.
Switch to file by name? IntelliJ: Control+E + type name + enter. VS: Control+semicolon (??) + type name + enter (if you're lucky, or you might have to go double click it in the project pane).
Of course, this is all a matter of preference, and the bindings can be changed. Although if you prefer the "chorded" shortcuts of VS, I don't know if IntelliJ supports that :)
I can’t tell you how many times my use of very vanilla Emacs with zero jedi / autocomplete / search features has saved me in my career.
It’s so critical to use text editors for software development and extract all other functionality to separate shell tools.
If a mix of very simple vim or Emacs + grep / git grep / silver searcher + CLI tools for automatic linting, test cases, etc., isn’t efficient for you, and motivates you to bring all these things into one consolidated IDE, I urge you to consider that this is a type of bad code smell and bad workflow smell, the all-in-one IDE is not actually helping productivity but hurting it in the long run, and you should invest right away in the learning curve & barriers you perceive are blocking you from a purely shell command-line workflow that separates code management & search into isolated utilities in separate interfaces.
I do grant there are a very small number of use cases where the IDE approach is useful: helping students who are literally just starting out, helping developers with atypical accessibility constraints that can be assisted with the IDE, probably a few more.
But general code search, linter/test integration, and embedded features like autocomplete, pop-up signatures or docs, etc., are disastrously bad things hands down for regular development.
It’s such a shame that a whole generation of programmers are tricked into believing those things are good for them.
It reminds me of people tricked into becoming reliant on MATLAB or Jupyter notebooks, and then retroactively trying to defend those tools as productivity-enhancing when they are, from first principles, productivity destroyers.
> But general code search, linter/test integration, and embedded features like autocomplete, pop-up signatures or docs, etc., are disastrously bad things hands down for regular development.
Many years of experience leading software teams and watching these tools hold back younger engineers time and again. Random breakages, surprise integration quirks, facilitating confusion of the design principles in the underlying code they only see through the IDE, inability to do necessary work in environments that can’t support the IDE (like during an outage that requires access to a different environment for a change). It’s been one of the most common patterns of lost productivity I’ve seen in my career, across many companies and many cohorts of engineers that would control for virtually any confounders, leaving me only to believe it’s the principle of using IDE assistance for these things.
Comments like this were part of the reason I wasted a lot of time earlier in my career trying to use emacs or vim on large code bases instead of an IDE.
I suspect this is some tribal identity thing about being a “real” programmer that I fell victim too.
The IDEs are extremely powerful and much better out of the box for working in a large code base. They allow you to navigate a lot more easily and focus on the code itself rather than constantly having to deal with your setup.
Don’t let comments like the parent scare you away from them.
Use what works best, but Emacs is incredibly powerful, and certainly has the potential to make you more productive. I wish I had taken the time to learn Emacs earlier in my career, my task efficiency has increased significantly since converting my work flows.
It does take a long time to learn relative to plug and play solutions (especially for someone like me with decades of old habits), luckily I had a few months off from work for the transition. The investment has been well worth it, it helps if you like lisp :)
Disclaimer: I use and advocate for tools derided above: linter/test integration, embedded features like autocomplete, etc.
Yeah, that was the bit that got me. Emacs is in many ways the original IDE; insisting that people not use things like method signature hinting feels vaguely perverse.
Method signature hinting and other forms of autocomplete-like functionality are very actively harmful to productivity and prevent you from holding a mental model of the codebase. The larger the codebase, the worse this effect gets and the more critical it is to only approach writing code when you’ve got a sufficiently burned in mental model of the subsystem you’re dealing with, by searching and reading code with tools & interfaces wholly distinct from what you use for writing code.
It’s like the difference between someone who can navigate the highway system with interstate signs & atlases alone vs someone who is unable to navigate at all without a GPS system.
Even if the GPS system experiences no downtime, they still lack skills that make the driving lower quality, like anticipating changes or adjusting for weather.
Coders heavily reliant on IDE tools simply understand the ramifications of what they are writing less well, because they haven’t invested in the mental map of the code and mistakenly believe they can safely offload many parts of that cognitive requirement to an IDE.
Worst of all, they believe that code shipped this way is somehow reinforcing evidence that the IDE was a value additive tool, which is the wrong counterfactual for comparison. You have to consider the value lost from what better solution could otherwise have been shipped for lower cost using a different set of tools.
I know a couple of people holding the same opinion as OP. Can't say they are more productive.
The percentage of people that are hard to work with is higher in this group though.
And I know, what I'm talking about here. Started with a Commodore 64 in 1982, first Linux 1994. Did everything in emacs, calculated mode lines, Unix was my IDE, you name it.
I'm a very happy user of CLion and IntelliJ IDEA now. Wouldn't want to go back to the dark ages.
> “I know a couple of people holding the same opinion as OP. Can't say they are more productive.
The percentage of people that are hard to work with is higher in this group though.”
This seems more telling about your attitude towards this subject, and perhaps also lesser skill in assessing or understanding those productivity differences.
Indeed - and those investing in higher-level languages such as assembly or C (gasp!) are tricked into believing those things are good for them - when really, they should be investing in learning machine languages, the purest form of programming for general-purpose processing circuits. /s
Honestly, programming languages, IDEs, Jupyter notebooks, etc. are all tools to help individuals solve problems using general-purpose processors. If you feel equally productive without some of those tools, that's fine, but there's nothing wrong with using those tools if they help.
You are delusional and immature. I've seen experienced Vim/Emacs kiddies like you really struggle to keep up with my productivity levels in IDEA with JVM languages. Doing everything at the command line doesn't make you 1337 and superior. The actual typing and manipulation of text is the least complex side of development. Most of my time is spent thinking, analyzing, rather than monkeying with text. However I use Vim keybindings in IDEA and get the best of both worlds. Efficient text editing + advanced semantic parsing at a level that Vim and Emacs will never achieve.
If you actually read his comment, I think you'll agree this was an accurate and fair assessment. I've worked with those kids who believe they're super smart and others are simpletons purely based on tool preferences.
You don't have nearly enough information to draw that conclusion about someone from an internet comment. However, even if you're right, it misses the point. The point isn't that you owe $commenter better, it's that you owe the community better. Personal attacks poison the well and invite others to do worse. The community here is fragile. If you want to participate, you need to help preserve it, not help destroy it.
You're not just wrong, you're also rude, which is a sign of immaturity. Professionals try to avoid that kind of language.
If you never learned Vim to the sufficient level, you will never understand how incredibly empowering and powerful it is for navigating and editing text. And that IdeaVim is hopelessly lacking many of its features.
And if you never gotten in Emacs to the point of writing your own Emacs-lisp packages you will never learn true level of extensibility capabilities of Emacs. There's simply no other tool in existence that lets you do some borderline batshit crazy stuff.
When you don't know what you're talking about, at least have some respect for those who do. I personally used your beloved tools for about seven years (to the degree of above advanced level). I switched to Emacs (with Evil-mode), because I felt that I grew out of IntelliJ. Tell me about maturity.
I have used Emacs, Vim, CLI, and IDEA is much superior for code navigation. I still use Vim for text editing. It's a great text editor, but IDEA has semantic parsing, code generation, and refactoring capabilities that go far beyond what Vim or any other text editor will ever support. Do you not realize that IDEA has its own search and navigation features outside of the Vim plugin? Emacs can come close if you spend years writing customizations, and even then it will feel like a clumsy pile of hacks versus a modern, well designed professional tool, that just works flawlessly with 5 minutes of setup. Actually, writing plugins in IDEA can do things that Emacs could only dream of. Emacs Lisp is powerful, but JVM languages are arguably more powerful.
i was initially confused, why would you want to jump or even convert between the '<' and '>' signs? but from trying it out on that snippet, '%' actually jumps to the nearest bracket and selects(?) the matching one [0].
now, i'm not 100% sure on the exact behaviour, but e.g. even a cursory test in sublime shows it will highlight the start and end brackets if i'm inside the if-expression and you can "expand selection to brackets".
> But general code search, linter/test integration, and embedded features like autocomplete, pop-up signatures or docs, etc., are disastrously bad things hands down for regular development.
I honestly can’t tell if this is a spoof “ how hackernews can I make it?” comment or not. What, precisely, is bad about those things? Would there be some virtue in my knowing every method signature in the enormous code base I work on from memory?
If you are still a student at the end of the year, you just need to verify your student status again to get another one. Once you're not a student anymore, there's the discount offer.
I'll second detaro, when I was a student, I just had to re-verify and I think re-activate, though I believe the re-activation is automatic if activated with an account rather than a license key.
Agreed. I hate using Java apps on the desktop. It is OK if your target is java itself, but I wouldn't start a java app to develop Python or some other language.
I used to think the same, but I’ve literally never found an IDE as feature complete (both built in/first party plugins and via 3rd party plugins) as IDEA.
Those that come close are not “native” either. Trading the jvm for xul/scintilla (Komodo) or fucking electron, to get worse productivity and say “it isn’t jvm” is stupid IMO.
Have you ever used PyCharm? It's head and shoulders better than any other IDE for Python out there. A slight delay whenever you restart is worth the productivity improvements it grants the rest of the time.
I think with a program of that size and complexity, it will be memory hungry no matter what language it's written in. Visual Studio is a C++ application if I'm not mistaken, and it can be sluggish and slow for larger projects.
IDEA Ultimate can definitely be heavy on memory. It's currently using 3.5GB with one project/10 file tabs open. It's literally part of the reason I use a machine with 64GB of RAM (IDEA with a couple of projects open, plus 5-10 VMs = a metric fuck ton of memory used).
But how much of that is specifically because of the JVM and how much is just because of what it is, cannot be compared fairly IMO, because as I said in another sub-thread, theres literally nothing that has the same level of functionality across so many languages and platforms.
I love IntelliJ but I am constantly switching between PyCharm and WebStorm, which is quite annoying since I end up doing python and javascript in both. I wish they one modular product instead of many, many slightly different products.
Edit: I'm learning in the comments below that IntelliJ IDEA Ultimate gives you the capabilities of the other products all together. This sounds great! I'm going to try it.
If you use their flagship offering, IntelliJ, it includes language support for Python, Javascript, and many other languages either directly or via a plugin that replaces most of the respective functionality of Webstorm, Pycharm and Rubymine. Just some niche features (like a C debugger only found in CLion) are unique to the other IDEs IIRC
Not entirely sure what you mean by "multi-module", but I can do all sorts of stuff with PyCharm.
Multiple "sources-roots", multiple-projects in the same workspace. Also, you can install pip install external libs in source development mode and debug them, etc. Short of "project imports" that I miss from Eclipse, I'm not sure what you may be referring to.
Like multi-language projects where you're working with both Java and Python code in the same source tree (actually you can include arbitrary folders from anywhere), or using multiple Python versions (and virtualenvs) in for different modules/packages in the same project.
I write F# and Scala (among other various languages). Unfortunately I have to own Rider and Intellij to do all of those things in the JetBrains ecosystem :\",
I too have run into this recently at work. IntelliJ for Rust, Dart, JS/TS, PHP etc but I break out Rider for C#. Would be a dream if one day these were combined so IntelliJ would be a true polygot IDE
Are PyCharm and WebStorm different from the other JetBrains products? Usually the products are nothing more than a collection of IntelliJ Ultimate plugins that are packaged up and sold separately. In other words, what you want to buy is Ultimate.
> Usually the products are nothing more than a collection of IntelliJ Ultimate plugins
That's not really true. The experience you get from, e.g. PyCharm and GoLand is substantially better than what you get from IDEA + Python plugin or IDEA + Go plugin. Yes, the plugin will get you 85% of the way there, but it will feel more clumsy and hacky than just using the dedicated product.
That’s absolutely wrong. The only thing that you’ll notice in IDEA is that it makes certain assumptions about Java (e.g vocabulary and certain menu items are Java-related), but otherwise the functionality is the same.
Python support inside IDEA is not the same as Pycharm, please don't confuse people. If you want to do Python development, use PyCharm. For Java, use IDEA.
I have used IDEA for 4 years doing Python development. Now I am using PyCharm, where the only difference is that it doesn’t support multi-module projects.
Please specify the differences as I am seeing none.
The language specific apps also seem to get updated before the language plugins do.
I used to use IntelliJ Ultimate, and had to wait a while before getting new features announced for PhpStorm, for example.
I now just use PhpStorm for PHP and GoLand for Go, instead of attempting to use IntelliJ for all languages. I spend less time configuring IntelliJ for each language and get updates on release day.
JetBrains has an "everything" licence that I was able to migrate to from IntelliJ Ultimate.
PyCharm includes all of the features of WebStorm because it's so common for Python developers to also do JS work, so you probably should just be using PyCharm. That's what I do at my work. (It's also why PyCharm is more expensive than WebStorm.)
If you find that WebStorm works better, you probably need to install the node.js plugin in PyCharm (which is free). It's included by default in WebStorm but not in PyCharm.
> I love IntelliJ but I am constantly switching between PyCharm and WebStorm, which is quite annoying since I end up doing python and javascript in both. I wish they one modular product instead of many, many slightly different products.
That's IntelliJ IDEA.
Though it seems completely unnecessary, PyCharm (non-CE) should contain all the features of WebStorm (sometimes with a bit of lag).
IDEA has its annoyances though. E.g. you get a Go plugin that delivers almost everything that GoLand has, but you still have menu items here and there complaining that your project lacks a Java SDK...
I wish they had a way of building an IDE in a completely modular way. Then again, maybe it would end up as bad as Eclipse...
>Edit: I'm learning in the comments below that IntelliJ IDEA Ultimate gives you the capabilities of the other products all together. This sounds great! I'm going to try it.
Pycharm professional should have all the features of webstorm in it. The thing with IDEA is that the ecosystem is too huge and it assumes JVM centered development.
Nice, Intellij (avec GoPlugin) is the only dev tool I pay for out of pocket.
The vast majority of the company I'm at uses VSCode (for mostly GoLang & Typescript). So I don't want to make the case to have them pay for it. But 40hrs/w of my existance is spent in a IDE/editor and IMO its totally worth it to pay for the one I feel most productive with.
I have a tiny Go program that I very rarely touch and was quite happy with the go plugin ... until they launched their full blown Go IDE and disabled the plugin in their other IDEs.
Wut? The plugin is there. I installed it in IDEA without any problems just two weeks ago. Then again, I have an Ultimate subscription, I don't know if the free versions are held back.
Hmm, I can appreciate that free EAP download links would probably be a tad nontrivial to find by design, but after having a bit of a dig I'm still coming up stumped.
I'm absolutely pleased with these numbers. This gives confidence that JetBrains has products that are used by a market of paying customers who are developers from companies big and small. Not even raising capital is impressive since these days, we have news of startups / companies with zero profit raising cash every 6 months and on each funding round, they forfeit control of their companies.
With these numbers, this confirms that 'developers' are the new customers.
I think it's a generally frugal market even if some of us are flush with a bit of cash. There's a lot you can get done for free with various FOSS stacks, and outside of highly specialized tools that aren't easy to replicate in features/availability/guarantees, I think it's a hard market to get a foot in, because the power of NIH is so strong. Things like IDEs, or security services, that take either a very slow burn or a lot of programming/design power are possibly the exception, and even then you can spoil it. A lot of people on here got upset when JetBrains moved from permanent licenses to a subscription service -- but in hindsight, I think it was the right move and it probably paid off! Think about that: you have a tool that is used in-and-out, like bread and butter, every day, like 30 hours a week -- and maybe, if you're lucky, a developer who makes 6 figures will say "ok I'll pay $200 a year i guess" or whatever. It's kind of incredible! Of course corporate accounts do not bat an eye at this; in fact they like continuous support, renewals, and services. It keeps things regular.
It's very easy to look at JetBrains and say it can obviously work, just the same way people look at RedHat (or other outliers) and say it can work. They're a standout company in this space, and have high reputation, and it didn't come from nowhere. They almost make it look easy -- just sell a great product, boom! But it depends on a lot of factors like when they entered the market, how they grew over time, etc. It's possible they wouldn't be able to get off the ground today if they tried this whole thing again.
In fact I wouldn't be surprised if JetBrains existence, happening before the whole VC craze, has in fact influenced the market itself, today: even with millions of dollars of VC funny money, it would probably be very difficult to compete with them on their turf in 2019, when they have extremely high reputation and a big array of products, in a market that is a very "small world". They're the 900lb gorilla in the room, in a sense, but they did it on their own.
JetBrains products are amazing though, without a doubt, and they deserve their success. I wish them all the best.
> It's possible they wouldn't be able to get off the ground today if they tried this whole thing again.
I think that's unkind. The product they had when they started (IDEA) was so much better than the competition, that it felt like magic. Yes, they rode the Java wave, but there have been other waves since then (Ruby, Python...) and nobody really managed to replicate for those markets the same experience of productivity jump that JetBrains managed back then.
Meanwhile, JetBrains have done it again with PyCharm, which is the Python IDE and has been consistently ahead of the competition literally from day 1. They entered a market where others had been for more than a decade, and ran away with it. That's just skill, not timing. By the time Python exploded in popularity, they were the obvious choice already. The fact that they can even field competitive products in the Microsoft space, where the gold-standard of IDEs has existed for 25+ years, is testament to their talent.
They've also legitimized a subscription-based approach to software-development tools, which will make it much easier for anyone to compete with them. A "new JetBrains" would find it much easier to develop an IDE today and get paid for it, which wasn't the case 20 years ago. The problem is really that very few people seem to think they can deliver a jump in developer productivity of the sort we've seen with IDEA back then.
PyCharm’s success also has to do with the fact that they already had IntelliJ — both in terms of marketing and in terms of having lots of tech already in place.
One of my favourite dev tools, and a personal sweetheart company as well. The way they handled the subscription transition was very amicable and gave me a lot of respect for them. They could have easily gone the way of Adobe.
The software is worth every penny, and having tried many alternatives, I'm hoping I will never have to give it up. Even if they go out of business, so long as I have a matching JRE for my OS it should be useful to me until I no longer need or can write software.
Haven't used their IDEs for some time, but I really like DataGrip. While someone always knows of an open source alternative, it's the best full-featured cross-database tool I've found.
I really liked HeidiSQL when I was working on Windows, but after switching to Linux I struggled to find anything with similar UI and workflow. DataGrip was a really nice discovery, though I still haven't gotten fully comfortable with the UI, it's quite a bit more complex.
I'm certainly sympathetic to the frustration of having to support every previous version of your software. If upgrades cost money, then people are incentivized to stay on old versions and then complain about bugs that have been fixed since then, and you can't tell them "just upgrade" because they don't want to pay to upgrade. Web companies almost never need to support old versions of the website, for example, and that makes them much easier to manage from an engineering and customer support standpoint.
I use Pycharm and it's such a superior product that I'm happy to support them so they can continuing development. plus it's a pretty nominal fee from an enterprise development cost perspective so it's an easy budgetary sell.
As others said, the community edition is free and extremely capable, so I don't see a reason to complain. It's fantastic that I can use my professional job to support development that benefits free users.
You are downvoted but I kind of agree. I don't think their IDEs improved a lot / more since the subscriptions. Indexing is still a resource hog, RAM usage out of control etc.
I also dislike their insistence on copying the grey Adobe's UIs.
I think their model is pretty fair. You subscribe and then are entitled to use that version forever, even if you end your subscription. What you gain in the subscription is the right to use newer versions.
For the stuff I really rely on, I feel good knowing there's a reasonable business model behind it. The ultimate version is $500 / year or $149 / year for business and personal respectively. For a lot of use cases, it doesn't need to save you very much time to pay for itself.
I disagree, although when they first switched to this model (a good while back now), I had the same reaction as you.
On reflection, I think it's a fair model, and fair pricing. They even reduce the renewal price if you renew after the 1st and 2nd years (maybe even more, I don't recall exactly).
Fact is that I love JetBrains products, so I want them to stick around - I want to pay using a subscription model, because that will make it a whole lot more likely.
I want to like JetBrains and paid for an ultimate subscription for years, but this four-year-old bug renders their products pretty much unusable on macs with a 5k display: https://youtrack.jetbrains.com/issue/JBR-526 . Thus, I've canceled my subscription and moved to vscode for most development.
It's disappointing to see bugs slowly creep into their products and stay version over version. I have the All Products Pack and most versions are currently pinned to 2019.1.4 which has the most bearable balance of bugs and new features.
Really? I use IntelliJ on an external 4k display every day at work with a 2016 MBP. I seem to recall having some issues in early 2017 (when I started at $company), but nowadays it works fine.
EDIT: I'm quite sure I have scaled resolution but can't check.
Not surprising. Their ide suite is just that amazing. Been using them since I was offered an edu license (all products for free if you had an edu addy) some years ago and have since converted to a personal license.
They are a sponsor of PyCon and their booth is always a hub of activity. Last year they held mini tutorial sessions with prominent Python developers who demonstrated PyCharm with various programming examples (like Flask, virtual environments and Jupyter notebooks).
I was able to talk directly with the PyCharm developers to figure out a problem I was having when starting new projects. Their developers are friendly and very knowledgeable.
I have no hesitation renewing my PyCharm subscription knowing that these guys are building a great product that makes my work easier.
It’s hard for me to praise Jetbrains, every time I start using Idea I have amazing experience, I feel like it’s totally one of the best IDEs out there and then couple days and non-trivial plugins later I have noticeable lags when typing text. I immediately give up and switch back to my previous setup. Why can’t IDEs prioritize reducing typing latency? That’s like one of the most important parts of text editing.
Anybody else had similar experience?
Edit: not trying to rain on Jetbrains parade here, I’m genuinely happy they have a business model that works and products that sell well.
I'm working on a pretty heavy Java Spring/React project in IDEA and noticed some slowdowns recently when doing certain things. The IDE also complained that it was running low on memory when it happened.
I enabled the memory usage viewer and saw that by default the whole IDE has a ceiling of 750M for the Java VM. I upped this to 2GB because I have plenty of RAM so why not.
The slowdowns have completely stopped and it runs great again. You might be thinking 2GB thats a lot of memory to write code! Yeah, but IDEA is my all-in-one development interface, I write, inspect, debug, etc all from IDEA. 2GB is totally reasonable for what it provides me and my dev machine has plenty to spare anyway. 750M is too low of a default for a heavy Maven project with lot of dependencies.
I have a feeling JetBrains's products work well for most but not all types of projects.
Anecdotally, I suffer from performance issues on a very high performance desktop when doing data science. Indexing happens frequently and takes at least 30 minutes. Notebooks and scientific mode bug out frequently, even after a fresh install and in brand new environments. Judging by YouTrack, these issues are not isolated to just my machine and workflow.
I hope they figure them out soon because JetBrains's software is otherwise exceptional.
This finds JB editors to be good for typing latency, and mirrors my experience. I keep my number of plugins to a minimum, check if disabling your plugins improves the issue.
The only JetBrains IDE I've used is Rider, but AFAIK they are all based on IntelliJ - in 2-3 years of use, I don't recall ever experiencing lag when typing. I actually think it's one of the most performant and responsive IDEs I've ever used.
For reference, I primarily use it on Windows, with 64GB of RAM, but also use it on MacOS with 32GB of RAM and on another Windows machine with only 16GB of RAM.
I’ve found it to be generally pretty good for latency recently, though it did have serious issues on MacOS at least a few years back. Certainly far better than VS Code.
(On a 2016 15” work MBP and a 2016 13” home one)
One thing you may find useful if you have the memory is raising the max heap size a bit. The default is inadequate for very large projects IME.
JetBrains products are excellent, I have both personal and work subscriptions. I wish MPS would catch on, though; it’s really exciting technology that way too few people are using, for some reason.
I really like IntelliJ and recommend everyone try them even if my favorites are NetBeans, Eclipse and VS Code.
This seems to be just some weird preference that my brain has and since Jetbrains is such a nice company and has a sustainable funding model I'm happy to send people their way
FWIW I find IDEA more responsive (fewer random lags while typing) than my pretty minimal emacs setup. Text editors like vim, kakoune, or xi are snappy, are not IDEs.
They’ve gotten a lot better recently. If you haven’t tried in a while may be time to revisit. Particularly if you’re on MacOS, where they used to have serious issues.
I suppose I meant snappy and responsive relative to Eclipse. Early 2000's java development was dominated by eclipse and netbeans. I used Eclipse in college and the difference between Eclips & Intellij was night and day.
I'd been a Visual Studio user for I think over a decade, and was really, really sick of listening to my laptop fans whining the whole time, and frequent freeze-ups. Every new version promised better performance, and never delivered - VS's poor (and unreliable) performance is the main thing that made me try Rider, and what performance revelation it was!
I've used VS with ReSharper for many years, because ReSharper adds so much to it
That said, before I pulled the trigger and purchased a Rider license, I tried running VS without ReSharper. While it certainly was definitely faster, more responsive and used less memory, I still didn't find it as snappy as Rider. It also still had my laptop fans whining, and occasionaly became completely unresponsive.
It's a real shame - Visual Studio is without doubt an excellent IDE, but performance and reliability issues have plagued it since forever. I really wish a serious effort would be made to address these.
678 comments
[ 5.7 ms ] story [ 324 ms ] threadIt's easy for young developers to overlook the power of intellij IDES, and to use the "sexier" vscode. But clearly for any medium to large project, learning to master intellijs are one of the highest ROI that a developer can get.
Of course, it should be mixed with ideaVim.
Not too long ago I bought a "powerful" laptop (expensive!). It still chocked frequently when running multiple vm's, docker machines and/or multiple "auto-compile watchers".
Then I tried vscode remote editing. I just run the browser & vscode in the laptop, and everything else on the desktop. It makes for a much, much nicer experience overall.
JetBrains, if this somehow gets to you: please copy vscode's remoting abilities and I'll be back. Until then... I had a great time with you.
Every single HN post about either Emacs, IntelliJ, Vim, VSCode, or Atom always gets riddled with disingenuous comments of people who liked one thing more than other things. Things they either haven't tried or had some cursory experience with them.
These tools are very individual [just like toothbrushes], for someone Emacs offers something that IntelliJ or VSCode can't, for others - nothing is better than Vim.
To truly achieve mastery, one has to try and learn them all and choose a tool that works well for the situation or the one they like (for objective and subjective reasons). Some might say: "that's a waste of time", try saying that to musicians. Go tell James Hetfield of Metallica that he shouldn't be trying all sorts of different guitars because Gibson is hands-down the best.
0: https://www.jetbrains.com/student/
I would assume so as well. It sounds negative though, but I'm quite okay with this particular one.
I think this is different from student offerings where there is some sort of lock-in. Microsoft makes sure every student can try Microsoft Windows Server and Microsoft Office and get used to how it works, but with an editor from a company that just makes editors and doesn't want to tie you into their ecosystem, I think it's fine.
It's a good idea because, at least in our company, all of the young kids who are fresh out of school use VS Code while most of the seasoned people use IntelliJ (obviously there is one senior person using VIM as required by developer stereotypes).
I also like the way your renewal gets cheaper every year, as a kind of loyalty bonus.
I honestly had no idea they were making so much revenue - very pleased to see it though!
A while back JetBrains made Rider more themable (prior to that update, you could only really theme the editor, not the file explorer etc). After that update, it looks great with a dark theme enabled!
I'm on mobile now, but if I remember later I'll mention the name of the theme I'm using - it's pretty close to VS's dark theme.
That's just it for me. The tools have so many good features, remain stable, and keep all those features out of my way until I need them. Like Adam Savage's first order accessibility principle for his workshops, the tool I need from their IDEs is always often in arms reach, yet still out of the way.
It's based on 3 window panes: you get your code on the left, theirs on the right, and the result in the middle, along with tools for accepting changes from either side, and you can edit the result pane at will too.
I've never liked the git merge UIs in VS or VS code (or other IDEs I've tried over the years) - Rider's is perfect for me.
Personally, I prefer vscode/atom style merging, but to each his own
I always found the Edit and Continue function in Visual Studio to be flakey: often it would say it wasn't "allowed" with the type of project I was using, or it took minutes to apply changes when it did work, or it crashed while applying changes... Rider got Edit and Continue 1-2 years ago (I think), and it's been completely reliable in that time!
This isn't an issue with the language so much as it is with the build systems, includes, library paths, and tooling.
Compare to Java (set the classpath to exactly the artifacts you want and IntelliJ uses its own build system unless you explicitly tell it otherwise), Python (set up a virtualenv with exactly what you want and PyCharm handles its own builds, insofar as Python builds).
In C on Windows and Unix you have to figure out how to find and address includes and libraries in a cross platform way. CMake is probably the best bet. If they were in the position of, say, TurboC back in DOS days where they provided stdlib and you added everything else you wanted, they could do as good a job as for Java.
Exactly. #include "header.h". But where is it? Depends on compiler flags. Java has the same problem, but luckily has only ~2 build systems that are well-supported by IDEs.
VSCode with CMake, clangd, and C++ code filter seems to work for the little I've used it so far.
Havn't quite taken the leap of faith in VIM, clangd to see if that is suitable.
I guess you can switch all of that off of course, but that's what makes it an IDE and not an editor. I think the memory tradeoff is perfectly fine for this kind of application.
Anyway, I don't really see the point you trying to argue here. It appears you are principally opposed to software that uses more resources than what you consider necessary, which is fine and in the case of something like CLion or VS code justified to some extent, because they are far from lightweight. But if you remove these ideological objections from the discussion, none of this actually matters all that much considering typical workstation hardware. I honestly don't mind trading 4 or 8 of the 16 GB of RAM in my laptop for all the features I get from CLion compared to the alternatives. A full compile and run of the thing I'm building can easily get by with (much) less than 2 GB. And if I would be developing something that uses up 8+ GB by itself, I probably want a beefier workstation with 32 GB or more anyway. It's just not an issue, RAM is plentiful, and it's in there to be used.
A single ordinary, commodity CPU core can sort 100M of totally random ints in 5 seconds. The amount of work any editor legitimately needs to do to provide you editing support is trivial, in comparison, by any measure.
https://www.jetbrains.com/resources/eap/
Also if you take part in a prerelease EAP (before the product is 1.0) (and your feedback is constructive and valuable enough) Jetbrains might gift you a license. That's how I got my first year of PyCharm (well my first year after the EAP ended anyway).
JetBrains announces that IntelliJ is going Open Source.
I checkout the code, build it (~20ish minutes) inside of the downloaded bits, launch the newly compiled IDE, build the repo source again this time debugging IntelliJ from within itself. All in less than an hour, with no hiccups. Amazing.
I love JetBrains so damn much it hurts.
Firefox is absolutely the best browser IMO. Unlike Eclipse, which is acceptable but doesn’t hold a candle to JetBrains.
That's a nice way of saying it's a trash fire.
There are community versions of some of their IDEs, which are fully FLOSS, unlike Photoshop.
I remember there was a time when IBM really invested in it that it was miles better than anything in the Java editing space, or honestly any competitor at the time. For example, instantaneous compiling and error checking was so far ahead it took MS many years to catch up with it.
It used to be a matter of huge excitement when a new language or framework was supported by Eclipse.
But I moved away from Eclipse for a few years (I wasn’t programming then) and I’m back and suddenly it’s absolute terrible. Not just worse than browsers of the time, but possibly worse than what it was when I last used it.
Also if you transpile all your js into a big minified file, exclude that too, right click on it and there must be an option as mark as plain text.
The development process should not be tied to the IDE!
I get frustrated by people who insist on a complex vi/emacs setup for something Jetbrains IDEs do better out of the box. Or people who insist Sublime is good for editing their complex React project.
Most things can be solved with plugins though.
I find developers who try to force their tools on others annoying. I'm much more productive on scripting languages with an editor. They just feel more responsive.
Vim is a better text editor than anything else. By far. Unfortunately, vim is terrible at basically everything else.
The problem is, once you learn to use vim's text editing capabilities, then editing code using anything else feels like a pain. I'm not talking about variable lookups / etc. I'm talking the pure "move the cursor to a certain place and enter some text" aspect of it. If you don't know vim, then it's hard to understand how slow editing text feels without it - it's kind of like going from not knowing how to type properly to being a solid touch typer. (not that extreme, but that's what it feels like).
Unfortunately, because vim sucks at everything else, my setup has to be complex to actually get it to do the other things a good IDE does out of the box. If I could do it the other way around, I would - I'd love to be able to use vim-like editing inside of an IDE, but every vim-mode I've tried so far just doesn't work properly (except one - evil mode in Emacs - which is why I recently switched to Spacemacs, but that's another story).
And like almost every other emulation I've ever tried, within 1 minute, I found 5 things that didn't work correctly. And I'm not exaggerating here - I literally spent 1, maybe 2 minutes and found 5 things.
I'll have to use it for a while to find out whether it's just a few minor annoyances, or much worse than vim.
1. First thing I did was to fold all the functions in the file - this is something vim does pretty badly, actually, because it doesn't know how to deal with Python syntax without lots of customization. But anyway, the command for "fold everything that can be folded, recursively" is zM. Then the command to open everything back up is zR...
Except that for some reason, this vim emulation doesn't open everything, it kept the imports at the top of the file closed.
Verdict: Probably not a big deal, just inconsistent (but maybe PyCharm's way is better?)
2. I then did a standard thing I like to do - if you want to delete a paragraph, you hit 'dip'. Works well. If you have a few lines of whitespace between paragrpahs, and you want to delete everything except one line, the command in vim is 'dvip'. This is actually somewhat obscure but I use this constantly to clean up code. Didn't work.
Verdict: obscure command that's rarely copied correctly, but I use it all the time. Annoying.
3. I then tried to change some text. Let's simplify and say that I did 'ci(' to change the contents of parenthesis. Worked well. However, I tried to undo the change. In vim, this is a single 'u' since the change command is atomic. However here, this required hitting 'u' three times.
Verdict: Ok this is really annoying. It's unpredictable and screws up my muscle memory, plus it's a very very used feature.
4. This might just be my fault - I tried to navigate my Python file using ']]' and '[['. The second one took me to the end of the file, the first did nothing - neither did what I want, which is to jump through various methods/functions. I also tried ']m' and ']d'. This one is not stock vim though (or not exactly), so it might be possible and I just don't know it.
--
I don't remember the other thing.
And btw, I totally don't mean to diss PyCharm, which is awesome in many ways. And I could be only nitpicking here - though again, finding 4/5 problems in 1 minute is not a good sign. But that's my point - emulating vim is, for whatever reason, either really hard, or not something that people spend a lot of effort on. That's why I have to rely on vim itself (or actually Spacemacs nowadays, which amazingly does have an almost completely working vim emulation.)
The biggest plus is when working with larger projects. The single-threaded autocomplete and jump-to-definition functionality was very slow in Vim, stalling the UI updates. Goland feels so much smoother in these cases.
It would be useful to say what these 5 things are.
Response Speed. Most emulations tend to fall behind my actual Vim command speeds, which really destroys the vim editing flow.
Occasionally emulators will not honor mode switches correctly or on the first try. So I would expect to be in insert mode after a complex set of commands but the emulator isn’t there. This is also likely due to speed issues, but maybe not.
Emulators do not do a good job of handling macros, and vim’s repeatability. The auto stuff they try to do (such as formatting, etc) precisely the reasons one would prefer an emulator, can mess up repeatability.
Many of them don’t handle certain basic commands. A lot of emulators, for example, do not handle commands like HML which shift the viewport, possibly because the IDEs do not really give them access to it, or maybe because they aren’t known well enough that they fall way down the priority list.
It also has two popular vim packages, surround and easymotion you can use too, which I really like.
I then customize all the IDE stuff to vim combos.... super nice.
only PITA is in some drop downs on a number of jetbrains products is that it doesn't play nice with auto hotkey, I have ALT-J and ALT-K bound to up and down arrow keys which makes for a much nicer vim experience when dealing with autocomplete drop downs ( or any drop down )
Been paying for Intellij for nearly a year now and I don't regret a day of it. Well okay, I do regret the one day EAP was totally broken by the VIM plugin, by besides that it has been brilliant.
Its not perfect but its good enough for moving around and copy/paste.
I occationally go back to emacs to macro some data into different formats.
In vscode, I'm usually already looking at the call site of a function I want to edit. So I move the cursor into the function call and hit F12 which takes me to the function definition to edit it. Once I'm done, I hit Alt+LEFT to navigate back to where I was to continue on...
If I didn't start from a call site but I know the file I want to edit - I hit Ctrl+P, type the name of a file, hit ENTER - now I'm in the file, ready to edit it.
To jump to a function, I collapse all functions (Ctrl+K,Ctrl+0/1/2/3/4) and then scroll (or PAGE UP/DN) to find it...then use arrow keys or Ctrl+G to enter the line number. Now I'm ready to edit the function. I might have to hit Ctrl+Shift+] to expand the body of the function.
Alternatively, I Ctrl+F and type the name of the function I want to edit, pressing ENTER to find it...and I'm ready to edit the function.
What do you do in vim that is far easier?
Stock vim is mouseless, and without arrow-keys, which means relying on /? (searching) or other keys to achieve the function of arriving at text. CTRL-F never quite matches that (after you hit enter, the CTRL-F dialog is still open, and needs to be closed with ESC or by clicking away), and moving to the arrow keys/pgup/pgdown/mouse is slow.
Having said that - there are some plugins that match this behaviour - I particularly like the ones where a key (f in vimium) highlights each word with a character, allowing for one or two keypresses to jump anywhere on the screen.
The part about moving the cursor. Vim users typically don't move the cursor with the mouse but rather with the keyboard. Having to move your hands off the keyboard to reach for the mouse then back is the part that starts to feel sluggish if you get used to not doing it.
In a modern IDE you have a multitude of shortcuts and a mouse, and they complement each other.
Longtime vim users who didn't know how to use vim? That's... interesting.
E.g., say you somehow got to a file, and it now has a bunch of functions in it, and you're literally looking at the line you want to edit. To get to that line, there's a bunch of different ways, but you can do this in like 3 key presses. Then, within the line, you can change anything in it really easily.
This sounds weird, so I'll try to give an example. Let's assume you have something like:
Func(self._something, self.something_else).validate, 'Validate exam foundation table')
And let's say you want to change the string that says 'Validate [...]' to say 'Change is good!!'.
To do that, once you've gotten to the line, I'd probably hit two key presses that mean "go to the first open quote in the line", then I'd hit the keys that mean "delete everything inside of the quote character", then I'd type what I want. All in all, I'd be typing these characters before actually writing what I want to write: f'ci' (so, 5 characters).
That probably looks either idiotic or daunting - but the idea of vim is that it's a language - you are literally thinking in your head "go to that quotation mark", then tell vim to do that and it does. Then you're thinking "delete everything inside of these quotations", and it does it. The distance between thinking what you want to do and doing it is almost zero - it's as close as you can get to literally telling someone exactly what to do.
If you're using a non-vim editor, you'd probably have your cursos in the begining of the line, and have to do "cmd+right" several times to skip over words in order to get to the first word of the string, then have to "shift+cmd+right" to get to the end of the string, then write what you want.
There might also be some small annoyances - the last shift+cmd+right might take you over the last quotation mark, and you'd end up selecting the closing paren as well. In vim - that doesn't happen, you're saying exactly what you want to have happen.
Or you might want to undo this change - in vim, it's always hitting "u" once, because in vim, changing the string to something else is an atomic motion. In another editor, you might have to undo a few words at a time, or maybe not - it's not always predictable. And since it's atomic in vim, it's also easy to re-apply the same action to another string - so changing another string to the same thing is a simple matter of hitting "." on it.
And of course, this is just a tiny example. It's easy to dismiss as trivial or unimportant - these are tiny savings of time, after all, and even if you add it up, I doubt the "time saved" in doing things more efficiently is worth much.
But once you know this language for telling an editor exactly what to do, then using an editor that doesn't speak that language just feels super slow - it feels like you are not able to communicate properly, and suddenly, what used to be zero gap between thinking and doing, takes a long time.
Double-click the word to select it, and start typing right away.
> it's as close as you can get to literally telling someone exactly what to do.
I usually tell someone "Change the word 'validate' to 'something else'". SO i grab my mouse/trackpad, and get there in one click (or double-click).
> It's easy to dismiss as trivial or unimportant - these are tiny savings of time, after all
You should observe most of these "savings" in real life. There's rarely a time when I can't do stuff with code faster than a Vim user. Because by the time the vim user has typed the required sequence of letter, or counted which line/symbol/mark to go to, or wrote a macro correctly, I'll have finished all I needed to do using IDEs built-in capabilities and/or a mouse.
For example: say I jump to this function and want to fix a bug (the `search` should strip off the first two characters here, not just one). So I need to change `regex.search(s[1:], ...)` to `regex.search(s[2:], ...)`:
If I've just used a fancy shortcut key to jump to this function, my cursor is probably on the function name. In Vim, I'd do `cinr2:<esc>`. Seven keystrokes. I could also do `/[<cr><ctrl-a>` which is only four keystrokes, but a little more awkward to reach. If I tried to do this editing with arrow keys and backspaces I'd need 12 down keystrokes just to get to the right line.Or suppose I'm looking at this and want to add a `,` character to the end of each of the type entries, because I forgot Python likes its commas:
In Vim I'd press `j` to get to the first entry, then `A,<esc>` to append the `,` after the first one, then `j.` to move down and repeat the action. I then press `j.` a bunch more times (which is really easy to do rapidly with your index and ring finger on Qwerty) and in 2 seconds I'm done. Vim's `.` to repeat the last action is really powerful and can save you a ton of time for small ad-hoc edit repetitions that don't warrant doing a full macro with `q`.These kinds of things happen constantly, and when you've got Vim burned into your fingers trying to edit text without it (actually edit text, not just jumping to something) feels like typing with oven mitts on.
2: select the first :, ctrl+d until all are selected, right arrow, comma
Doesn’t sound any more efficient? Plus, who writes code without an auto-formatter these days? Problem two would have been solved by the linter the moment you wrote that.
Obviously the first part is language-neutral, and is exactly why I think multiple cursors is one of the greatest inventions in text editing! :)
Eh. I'd probably do 'qqA,<esc>j0q', and then '8@q'.
That's also probably not the best example, since that's also trivial if you have an editor supporting multiple cursors.
That said, I think multiple cursors are the greatest addition to text editing since, well, vim. I was an enthusiastic user of Sublime Text 1, right before I learned about vim.
Luckily, vim has multiple cursor support, which is... decent. Not great, but decent. I actually think that the only thing that makes multiple cursors more awesome, is being able to combine them with vim's commands, since multiple cursors rely on you being able to do precise things at each cursor, and vim gives you the language for it.
Yeah, it's hard to come up with a decent example because I don't even think about it any more, it's just burned into my fingers. I just know how excruciating it feels to edit without Vim (I even wrote that last comment in Vim and then copied it into the browser because writing it in a text field is miserable).
It basically gives vim-like keys anywhere you want, when holding down the caps lock key. So e.g. caps+h/j/k/l are movement keys.
It goes a lot farther than that: I have a key to delete a line, a key to select a word, a key to go up/down by 4 lines, a key to delete the last word, etc. I even mapped caps+f to jump forward 20 characters (to badly simulate using 'f [letter]' in vim).
This makes so it I never have to leave home position on the keyboard, because while holding caps I have all the movement keys I want at my disposal. It's a total lifesaver, and the only way I can effectively use a keyboard outside of vim :)
<c-v>8j$A,<esc>
I've seen many Vim/Emacs-only devs being easily beaten in speed by others using modern IDEs that have tooling and functionality (auto formatting, refactoring, templating, etc) focused on actually getting things done.
Moving a little bit faster through the text file to edit characters is rarely the issue and I certainly wouldn't give up IDE features for it.
And I'm not talking about Vim the editor. I'm talking about Vim as an idea. Which is today implemented for pretty much every single [popular] editor and IDE in use. That fact alone is pretty illustrative of awesomeness of the idea of Vim.
And the comment about Emacs is quite disingenuous. I have never been inside a Formula One cockpit, but I can totally get "the job done" with my Camry, because it is totally more efficient for parallel parking.
I have used many IDEs, including InteliJ (which I used for about seven years). Emacs wins solely by its extensibility, no editor/IDE has ever matched its capabilities. For some people that is not an important factor, just like the efficient parallel parking might not be important for Formula One pilots. But when you can automate pretty much anything it feels very empowering and liberating.
Small example: when I'm about the create a new commit, an emacs-lisp script can figure out the current ticket I'm working on (based on currently clocked Org-mode task), generate a branch name based on the ticket description, generate part of the commit message (in the way that it is in compliance with git tool like gommit), I would just have to type the rest of the message.
That is not only more efficient, but also reduces frustration. Compare that with the workflow in any other editor and IDE - most of these steps will have to be manual. Then someone might say: oh there's actually a plugin for Editor X that does some of that stuff for Jira. But what if I join a different company that uses Pivotal Tracker instead? I can extend my emacs-lisp script. Whereas if that's an InteliJ plugin I would either have to go through daunting process of forking and modifying the plugin or submit a feature request and wait for something that may never happen.
- Go-to-definition is `g d` (with the cursor over the function name in question)
- Project-wide file search is `SPC SPC`
- Jumping to a function is `SPC s i` and then just start typing to fuzzy-match the function name
I stick with this setup because it does pretty much everything I could want from IDEA, and does it without churning up most of the resources on my machine. And trust me, I've tried to switch to IDEA, but it's just too big and too slow, and too poor of an editor for me to actually make the switch.
The one related function that I would miss is using vimgrep and the QuickFix list to get a list of the locations where the function name appears which I can use e.g. to do a search and replace in those files (or a subset of them)
What if I told you I read way more code than I edit?
If you really never did anything except read code, then I think vim wouldn't give much of an advantage. Then again, neither would any of the shortcuts that every IDE provides.
you may be more productive editing code in vim but when it comes to engineering text editing is not the most important thing to be solving for
I just know that subjectively, going from speaking a language with powerful concepts, to using the super crude tools available in most editors, just feels sluggish.
I highly doubt it was actually a good investment time wise to master vim, but I salary really enjoy messing with editors so it was partially for fun.
The complexity is usually overstated and a sunk cost besides.
- I can be somewhere, jump around to a bunch of files, copy something, and then jump back to whereever I was last actually editing quickly (the "jump back to last edit" is 2 strokes). - I wrote a custom mode, with tabification and fontification for the query language used by the cms I work with. I expect I could do that in IntelliJ but it would take a lot more effort. - Things like kill-rectangle and the like; some of which may have parallels in IntelliJ, but I don't know then... and decades of experience in emacs means I do know them (or how to find them) there.
I really like IntelliJ, but I also really like emacs. Which to use depends on what I'm doing.
I also really like _make_ and wrap my other commands (mvn, gradle, etc) in Makefiles. I get jokingly mocked a lot at work :)
I do this as well. I put my scripts in a make file. E.g. to ssh into a machine X, I write a Makefile with .PHONY rule "X" so I simply run "make X".
[1] - https://github.com/JetBrains/ideavim
Unfortunately, the last time I used IntelliiJ it came with its own JDK8. Is that still the case, I wonder?
Unless you're running close to full most of the time, I also don't think the extra disk caching more RAM allows for is generally worth it. I have a few GB free most of the time (both at home and at work) and that seems to suffice to cache whatever files I'm currently working with.
I can spend hours customizing the controls and UI but I still feel like someone handed me the keys to some old car made in a country that doesn't exist anymore.
This in part revealed to me the cost associated with all the editor customizations I make. Default settings are nice that way.
live edit someone else's project on your computer with your editor/keybindings/etc.
or you could switch to vscode for the times when you want/need to assist them.
i’m like 60% sure that this is why nixOS was born at all: some very dedicated emacs or vim user got so fed up with moving configs around that they built an entire package manager/distro/thing to solve their config issue for all time.
That's actually something that's a major hole for me; it would be like twice as useful if it did. But yeah, my solution is just: https://github.com/zenhack/vim-config
[1] https://github.com/VSCodeVim/Vim/commit/3158194561fa2fba921b...
[0]: https://github.com/onivim/libvim
[1] https://github.com/VSCodeVim/Vim/issues/4384
in fact i'd extend that to bash as well. i only use very minimal configuration these days.
How did you become unable to do basic text editing without a specific editor setup? Why do people become so dependent on tools?
In the car shop world, impact wrenches are primarily used for the installation and removal of wheels on vehicles.
The impact wrench I started with had a single internal hammer- the thing that makes a click noise and applies torque. After a while of using it, I could hear when the wheel was seated correctly, and when it wasn't.
Later, that tool broke, and got replaced with a dual-hammer one- and all of a sudden, I couldn't hear-- feel-- when wheels were on right, and it took me a few vehicles to adjust to the new noise, weight, and feel of the tool. I got used to the new one eventually, but I still liked the noises that the original wrench made more.
Before I adjusted, I was unable to perform that part my job correctly because I didn't know exactly how to use the new thing that was identical in use-case to the old one.
My CAD program of choice doesn't have many keybinds stock- and so I've bound my own shortcuts to different things buried under various menus. I also have a Logitech G502, which has buttons on the sides of it, that I've also bound to some of the more-used, harder-to-get-to functions. It's much easier to open up the parameters table- which I use heavily to tweak designs I make. It's the way I like to do things, and that one bind on the side of my mouse saves me from rooting through menus all the time trying to find the same thing over and over again. I set up that bind almost two years ago, and I've been using it ever since.
When I got a new laptop recently, I had a hard time doing CAD until after I ported over all my keybinds and stuff.
Now to answer your question- because those of us who use powerful tools to build custom stuff also like to customize the tools we have for the task at hand. A developer who's used to their setup that they live with every day will undoubtedly have a hard time using the factory settings, and an even harder time working with someone else's bindings.
Why do people become so dependent on tools? Because we mold them to suit our desires, and they become an extension of who we are, and what we can do.
Relevant XKCD- https://xkcd.com/1205
It's not like the difference in input speed is really meaningful; as you'll see someone point out in any discussion about this stuff, the bottleneck in programming is thinking.
But what I find will often happen is:
1. I settle on a course of action. 2. I go to actually do it. 3. The editor doesn't do what I expect, because it's not vim. 4. I am momentarily confused, and have to think for a minute about how to do what I want. 5. I lose my train of thought entirely. 6. Rinse, repeat.
So for me it's not so much about any specific thing the editor does to make me productive. I do have opinions about some things, but what's important is that it just fades into the background and lets me think about the problem I'm trying to solve.
Beyond just being "different," I tend to eschew IDEs for much the same reason -- while many of the advanced features seem useful, I find them too distracting to be worth the trouble. Just me and the code, please.
Or think of it another way, why are you only able to work in optimal environments, and is that the real benefit you provide? Are you going to get laid off if you aren't fully optimal? If you switched keyboard layouts would you lose this speed too? Can you afford to make ANY changes at all if this is your criteria?
After having to code about 80 java file application on a data center pull out crappy laptop screen with a jacket with just notepad and javac over a few days I just use the defaults on everything or settings that are one change away (like eclipse mode in intellij which is a meta setting like vim mode). Other than that I just adapt and never customize. This lets me use other people's computers easily, use many different OSes (I write software that enables the rest of my company so I write for what they use on what they use), and editors with little issue. I can also setup a computer in about 20 minutes. I find that the majority of my time these days is deciding what we should be doing and how. The time to write the actual code is pretty minimal.
So I ask again are you optimizing for the right thing here? Unless you are constantly re-enacting the scene from Swordfish I don't think you are.
PS: I'm pretty sure that Emacs must have a multi-cursor mode somewhere :)
of course it does.
in action: https://www.youtube.com/watch?v=jNa3axo40qM
There isn't one loss function for all people.
You've found joy in the narrative of "I just adapt and never customize ... [I can function well in my org] with little issue". Someone with a different set of constraints and preferences won't find that narrative as enjoyable.
It's about how I enjoy coding. Its my job but I love it. It's fun. Part of what makes it so enjoyable is the ergonomics. Ask any craftsman about their tools.
I learned a while back that I had to lean into those things and just get through the awkward if you wanted to keep learning.
I thrive when learning new skills and being "uncomfortable" and out of my element.
It's probably because I'm picking at rust for fun in my personal time that I don't want to deal with the uncomfortable parts. In my own time I coast and comfortably stroll through new problem spaces rather than get to that "my brain hurts" part that's all too familiar.
If rust + intellij was a work requirement I probably would just pick it up and discover that my brain can handle perfectly, two sets of bindings the way people claim to be able to do qwerty and Dvorak interchangeably.
I think this is why I bounced off of react 4 times before sticking, too many things to learn at once. Then again I bounced off of antlr 4 times and only really got it to stick because it was a work need, and antlr is the only new tool in that chain.
Use CLion instead of IntelliJ. It has much better debugging support.
I've used both VSCode and CLion quite a bit for Rust, and I prefer CLion. It's got a much better understanding of the language.
IntelliJ also sucks for Ruby and Go compared to RubyMine and Goland. Even with the language plugins.
I feel this goes against a lot of the guidelines: https://news.ycombinator.com/newsguidelines.html
edit: my apologies for the assumptions and most likely breaking the guidelines myself
Here's a press release on their website:
> In 2019, two eight-story towers known as Space became the new home of JetBrains in Saint Petersburg.
> The largest of our company offices is located on the bank of the Neva River, with a panoramic view looking out over the Gulf of Finland.
> IntelliJ Labs Co. Ltd. Primorsky pr., 70/1 Saint Petersburg 197374, Russia
https://www.jetbrains.com/company/contacts/st-petersburg/
Here is an article about their operations in Prague (in czech), from what I understand they have most of developers in St petesburgh..
https://ekonom.ihned.cz/c1-65918420-rusti-it-gerojove-na-ces...
In this case, assuming good faith would be assuming that @ordx is stating a fact that they're aware of, not trying to stir up controversy. If you were interested in finding out how they knew that, you could politely ask them what their source of information was, without implying that they have ulterior motives.
Also - I would either use their cloud sync and/or VCS to back-up your customizations. It sucks switching to a new computer and losing a day re-configuring your IDE back to baseline =|
[1] https://stackoverflow.com/questions/37776684/which-intellij-...
Looks like they may have gone off the deep-end with the configuration files - I remember the ability to export to a MUCH smaller file but this was probably 4 years ago at this point.
Control+Alt+L for code lint & format makes a heck of a lot more sense than the two separate Control+K Control+J or whatever that Visual Studio demands. Same for optimize imports - Control+Alt+O(ptimize) instead of Control+K Control+I or whatever in VS.
I haven't used Eclipse in ages, but I remember those shortcuts being bad enough that I never bothered to learn them.
Switch to file by name? IntelliJ: Control+E + type name + enter. VS: Control+semicolon (??) + type name + enter (if you're lucky, or you might have to go double click it in the project pane).
Of course, this is all a matter of preference, and the bindings can be changed. Although if you prefer the "chorded" shortcuts of VS, I don't know if IntelliJ supports that :)
It’s so critical to use text editors for software development and extract all other functionality to separate shell tools.
If a mix of very simple vim or Emacs + grep / git grep / silver searcher + CLI tools for automatic linting, test cases, etc., isn’t efficient for you, and motivates you to bring all these things into one consolidated IDE, I urge you to consider that this is a type of bad code smell and bad workflow smell, the all-in-one IDE is not actually helping productivity but hurting it in the long run, and you should invest right away in the learning curve & barriers you perceive are blocking you from a purely shell command-line workflow that separates code management & search into isolated utilities in separate interfaces.
I do grant there are a very small number of use cases where the IDE approach is useful: helping students who are literally just starting out, helping developers with atypical accessibility constraints that can be assisted with the IDE, probably a few more.
But general code search, linter/test integration, and embedded features like autocomplete, pop-up signatures or docs, etc., are disastrously bad things hands down for regular development.
It’s such a shame that a whole generation of programmers are tricked into believing those things are good for them.
It reminds me of people tricked into becoming reliant on MATLAB or Jupyter notebooks, and then retroactively trying to defend those tools as productivity-enhancing when they are, from first principles, productivity destroyers.
Do you have any substantiation for that claim?
The language server protocol has been a game-changer, though. Now I'm back to 100% terminal and couldn't be happier.
I suspect this is some tribal identity thing about being a “real” programmer that I fell victim too.
The IDEs are extremely powerful and much better out of the box for working in a large code base. They allow you to navigate a lot more easily and focus on the code itself rather than constantly having to deal with your setup.
Don’t let comments like the parent scare you away from them.
It does take a long time to learn relative to plug and play solutions (especially for someone like me with decades of old habits), luckily I had a few months off from work for the transition. The investment has been well worth it, it helps if you like lisp :)
Disclaimer: I use and advocate for tools derided above: linter/test integration, embedded features like autocomplete, etc.
It’s like the difference between someone who can navigate the highway system with interstate signs & atlases alone vs someone who is unable to navigate at all without a GPS system.
Even if the GPS system experiences no downtime, they still lack skills that make the driving lower quality, like anticipating changes or adjusting for weather.
Coders heavily reliant on IDE tools simply understand the ramifications of what they are writing less well, because they haven’t invested in the mental map of the code and mistakenly believe they can safely offload many parts of that cognitive requirement to an IDE.
Worst of all, they believe that code shipped this way is somehow reinforcing evidence that the IDE was a value additive tool, which is the wrong counterfactual for comparison. You have to consider the value lost from what better solution could otherwise have been shipped for lower cost using a different set of tools.
The percentage of people that are hard to work with is higher in this group though.
And I know, what I'm talking about here. Started with a Commodore 64 in 1982, first Linux 1994. Did everything in emacs, calculated mode lines, Unix was my IDE, you name it.
I'm a very happy user of CLion and IntelliJ IDEA now. Wouldn't want to go back to the dark ages.
This seems more telling about your attitude towards this subject, and perhaps also lesser skill in assessing or understanding those productivity differences.
Honestly, programming languages, IDEs, Jupyter notebooks, etc. are all tools to help individuals solve problems using general-purpose processors. If you feel equally productive without some of those tools, that's fine, but there's nothing wrong with using those tools if they help.
https://news.ycombinator.com/newsguidelines.html
If you never learned Vim to the sufficient level, you will never understand how incredibly empowering and powerful it is for navigating and editing text. And that IdeaVim is hopelessly lacking many of its features.
And if you never gotten in Emacs to the point of writing your own Emacs-lisp packages you will never learn true level of extensibility capabilities of Emacs. There's simply no other tool in existence that lets you do some borderline batshit crazy stuff.
When you don't know what you're talking about, at least have some respect for those who do. I personally used your beloved tools for about seven years (to the degree of above advanced level). I switched to Emacs (with Evil-mode), because I felt that I grew out of IntelliJ. Tell me about maturity.
Vim is the javascript of text editors.
now, i'm not 100% sure on the exact behaviour, but e.g. even a cursory test in sublime shows it will highlight the start and end brackets if i'm inside the if-expression and you can "expand selection to brackets".
[0] https://hea-www.harvard.edu/~fine/Tech/vi.html
I honestly can’t tell if this is a spoof “ how hackernews can I make it?” comment or not. What, precisely, is bad about those things? Would there be some virtue in my knowing every method signature in the enormous code base I work on from memory?
Those that come close are not “native” either. Trading the jvm for xul/scintilla (Komodo) or fucking electron, to get worse productivity and say “it isn’t jvm” is stupid IMO.
Have you ever used PyCharm? It's head and shoulders better than any other IDE for Python out there. A slight delay whenever you restart is worth the productivity improvements it grants the rest of the time.
I doubt this is even remotely true. The JVM (and the CLR, and every modern runtime) is a very well-tuned machine that performs well.
Language services make heavy use of system resources. It's effectively compiling your code as a service whenever you need it, which is a lot.
But how much of that is specifically because of the JVM and how much is just because of what it is, cannot be compared fairly IMO, because as I said in another sub-thread, theres literally nothing that has the same level of functionality across so many languages and platforms.
Edit: I'm learning in the comments below that IntelliJ IDEA Ultimate gives you the capabilities of the other products all together. This sounds great! I'm going to try it.
Multiple "sources-roots", multiple-projects in the same workspace. Also, you can install pip install external libs in source development mode and debug them, etc. Short of "project imports" that I miss from Eclipse, I'm not sure what you may be referring to.
That's not really true. The experience you get from, e.g. PyCharm and GoLand is substantially better than what you get from IDEA + Python plugin or IDEA + Go plugin. Yes, the plugin will get you 85% of the way there, but it will feel more clumsy and hacky than just using the dedicated product.
Please specify the differences as I am seeing none.
I used to use IntelliJ Ultimate, and had to wait a while before getting new features announced for PhpStorm, for example.
I now just use PhpStorm for PHP and GoLand for Go, instead of attempting to use IntelliJ for all languages. I spend less time configuring IntelliJ for each language and get updates on release day.
JetBrains has an "everything" licence that I was able to migrate to from IntelliJ Ultimate.
I have used IDEA and PyCharm for enough time to say there’s 0 difference between the two.
There are indeed plenty of features that are specific to each IDE/Language that aren't in the IDEA-equivalent plugins.
If you find that WebStorm works better, you probably need to install the node.js plugin in PyCharm (which is free). It's included by default in WebStorm but not in PyCharm.
That's IntelliJ IDEA.
Though it seems completely unnecessary, PyCharm (non-CE) should contain all the features of WebStorm (sometimes with a bit of lag).
I wish they had a way of building an IDE in a completely modular way. Then again, maybe it would end up as bad as Eclipse...
Pycharm professional should have all the features of webstorm in it. The thing with IDEA is that the ecosystem is too huge and it assumes JVM centered development.
The vast majority of the company I'm at uses VSCode (for mostly GoLang & Typescript). So I don't want to make the case to have them pay for it. But 40hrs/w of my existance is spent in a IDE/editor and IMO its totally worth it to pay for the one I feel most productive with.
I understand why but I'm still a bit sour.
And that's how I finally tried VSCode.
Wut? The plugin is there. I installed it in IDEA without any problems just two weeks ago. Then again, I have an Ultimate subscription, I don't know if the free versions are held back.
Do I have to go through the Toolbox to get this?
With these numbers, this confirms that 'developers' are the new customers.
It's very easy to look at JetBrains and say it can obviously work, just the same way people look at RedHat (or other outliers) and say it can work. They're a standout company in this space, and have high reputation, and it didn't come from nowhere. They almost make it look easy -- just sell a great product, boom! But it depends on a lot of factors like when they entered the market, how they grew over time, etc. It's possible they wouldn't be able to get off the ground today if they tried this whole thing again.
In fact I wouldn't be surprised if JetBrains existence, happening before the whole VC craze, has in fact influenced the market itself, today: even with millions of dollars of VC funny money, it would probably be very difficult to compete with them on their turf in 2019, when they have extremely high reputation and a big array of products, in a market that is a very "small world". They're the 900lb gorilla in the room, in a sense, but they did it on their own.
JetBrains products are amazing though, without a doubt, and they deserve their success. I wish them all the best.
I think that's unkind. The product they had when they started (IDEA) was so much better than the competition, that it felt like magic. Yes, they rode the Java wave, but there have been other waves since then (Ruby, Python...) and nobody really managed to replicate for those markets the same experience of productivity jump that JetBrains managed back then.
Meanwhile, JetBrains have done it again with PyCharm, which is the Python IDE and has been consistently ahead of the competition literally from day 1. They entered a market where others had been for more than a decade, and ran away with it. That's just skill, not timing. By the time Python exploded in popularity, they were the obvious choice already. The fact that they can even field competitive products in the Microsoft space, where the gold-standard of IDEs has existed for 25+ years, is testament to their talent.
They've also legitimized a subscription-based approach to software-development tools, which will make it much easier for anyone to compete with them. A "new JetBrains" would find it much easier to develop an IDE today and get paid for it, which wasn't the case 20 years ago. The problem is really that very few people seem to think they can deliver a jump in developer productivity of the sort we've seen with IDEA back then.
The software is worth every penny, and having tried many alternatives, I'm hoping I will never have to give it up. Even if they go out of business, so long as I have a matching JRE for my OS it should be useful to me until I no longer need or can write software.
As others said, the community edition is free and extremely capable, so I don't see a reason to complain. It's fantastic that I can use my professional job to support development that benefits free users.
I also dislike their insistence on copying the grey Adobe's UIs.
For the stuff I really rely on, I feel good knowing there's a reasonable business model behind it. The ultimate version is $500 / year or $149 / year for business and personal respectively. For a lot of use cases, it doesn't need to save you very much time to pay for itself.
You always have a "perpetual fallback license" for the version you get from your subscription.
If you don't renew, you can still keep developing on whatever version you have. You just won't get the cool new stuff.
On reflection, I think it's a fair model, and fair pricing. They even reduce the renewal price if you renew after the 1st and 2nd years (maybe even more, I don't recall exactly).
Fact is that I love JetBrains products, so I want them to stick around - I want to pay using a subscription model, because that will make it a whole lot more likely.
EDIT: I'm quite sure I have scaled resolution but can't check.
I was able to talk directly with the PyCharm developers to figure out a problem I was having when starting new projects. Their developers are friendly and very knowledgeable.
I have no hesitation renewing my PyCharm subscription knowing that these guys are building a great product that makes my work easier.
Anybody else had similar experience?
Edit: not trying to rain on Jetbrains parade here, I’m genuinely happy they have a business model that works and products that sell well.
IDEA has done extra work on the "input handling subsystem" to the point where they are faster than most anything out there:
See: https://blog.jetbrains.com/idea/2015/08/experimental-zero-la...
And: https://blog.jetbrains.com/idea/2015/08/experimental-zero-la... (which is now standard)
https://pavelfatin.com/typing-with-pleasure/
I enabled the memory usage viewer and saw that by default the whole IDE has a ceiling of 750M for the Java VM. I upped this to 2GB because I have plenty of RAM so why not.
The slowdowns have completely stopped and it runs great again. You might be thinking 2GB thats a lot of memory to write code! Yeah, but IDEA is my all-in-one development interface, I write, inspect, debug, etc all from IDEA. 2GB is totally reasonable for what it provides me and my dev machine has plenty to spare anyway. 750M is too low of a default for a heavy Maven project with lot of dependencies.
Anecdotally, I suffer from performance issues on a very high performance desktop when doing data science. Indexing happens frequently and takes at least 30 minutes. Notebooks and scientific mode bug out frequently, even after a fresh install and in brand new environments. Judging by YouTrack, these issues are not isolated to just my machine and workflow.
I hope they figure them out soon because JetBrains's software is otherwise exceptional.
This finds JB editors to be good for typing latency, and mirrors my experience. I keep my number of plugins to a minimum, check if disabling your plugins improves the issue.
For reference, I primarily use it on Windows, with 64GB of RAM, but also use it on MacOS with 32GB of RAM and on another Windows machine with only 16GB of RAM.
(On a 2016 15” work MBP and a 2016 13” home one)
One thing you may find useful if you have the memory is raising the max heap size a bit. The default is inadequate for very large projects IME.
This seems to be just some weird preference that my brain has and since Jetbrains is such a nice company and has a sustainable funding model I'm happy to send people their way
1) Its a java app
2) Continuously running compilers/interpreters in the background
3) Running builds and tests can be bursty and its pretty good about not hanging when that happens.
I do think they have really good products, just a little ... slow.
VS 2019 is actually as fast or faster than Rider for me. But that is without Resharper, and without it, I miss way too much functionality.
That said, before I pulled the trigger and purchased a Rider license, I tried running VS without ReSharper. While it certainly was definitely faster, more responsive and used less memory, I still didn't find it as snappy as Rider. It also still had my laptop fans whining, and occasionaly became completely unresponsive.
It's a real shame - Visual Studio is without doubt an excellent IDE, but performance and reliability issues have plagued it since forever. I really wish a serious effort would be made to address these.