It's quite funny sometimes when you show someone modern functionality in a modern IDE and they have to accept that the people making IDEs are, basically, not all morons (which is a sort of hidden assumption for many of these attitudes).
It's quite funny sometimes when you show someone modern functionality in a modern IDE and they have to accept that the people making IDEs are, basically, not all morons (which is a sort of hidden assumption for many of these attitudes).
And it's easy to not notice productivity gains you've missed for years.
In my opinion Emacs/Vim:
- except for some specific roles: Emacs -> Lisp development, Vim -> to be honest, not sure what to say, what is Vim's strong suit? except for core editing commands
- and unless you put in a ton of hours into Emacs/Vim: a lot more than you need to put into mastering a powerful IDE
don't have as many features or don't reach the level of quality offered by modern, mainstream IDEs, for their respective languages. By this I mean that you need to bundle a ton of plugins into these editors and their plugin ecosystems are not as well integrated and as mature as the finished product provided by these IDE creators.
And for most devs who roll their own on top of Emacs and Vim, the balancing out between editor speed and IDE features is really, really hard. I think maybe 1% of the devs actually doing this are more productive, many of the others are fooling themselves, or as you said, haven't had the time to re-check the alternatives.
That being said, generic programmable editors like Emacs or Vim serve as nice catch-alls for those times when you don't have the proper "high-tech" tool. For example you're using a DSL, a niche language, etc.
A couple of things might take a bit more to configure (C++ smartness). But it is a free software program that has been around like 30 years. I am confident it is a tool I can invest in and it won't let me down. I can not say the same about proprietary IDE's and editors.
However, I have to point something out which proved to be an eye-opener for some people I've discussed the second point you bring up:
> But it is a free software program that has been around like 30 years. I am confident it is a tool I can invest in and it won't let me down. I can not say the same about proprietary IDE's and editors.
This argument is a bit dated, I think it harks back to the days of Borland IDEs and the Halloween Papers for Microsoft.
Why do I think it's a bit dated:
1. Quite a few of the commercial IDEs are not fully proprietary anymore, for example the core of the Jetbrains IDEs is Open Source; Visual Studio is proprietary but large parts of what it offered have been split into external components which are Open Source, more precisely Roslyn; I'll grant you XCode, but at that point you know you're locking yourself into the proprietary Apple ecosystem anyway; the other major IDEs are actually fully Open Source: Eclipse, Netbeans, Visual Studio Code, Atom
2. The Cathedral and the Bazaar predictions kind of failed ... Open Source didn't take over the world; it carved a segment in the market, a huge one, but still, a segment; proprietary software adjusted and now both coexist in various combinations in between Free Software and fully proprietary software. Both FOSS and commercial projects and products have to please their "clients". They do that, or they die. So the commercial side is in my opinion a lot more flexible than it used to be.
3. The software market is way more mature than it was when the GNU propaganda machine and later the Eric Raymond Open Source-hype machine were fully operational (with IBM backing it) - I'm only half joking about the FSF/Open Source propaganda, we have to acknowledge it for what it was and we aware of it , even if we consider its goals as noble; anyway, just because software vendors were dying like flies back in the 80's and 90's, it doesn't mean that mature software companies today will suffer the same fate. They might be somewhat fickle, and yes, even big companies can go bankrupt, but let's not discuss hypotheticals, let's discuss based on actual data:
* Visual Studio was launched in 1997, 21 (!) years ago; Visual Basic was launched in 1991, 27 (!) years ago; I know that Visual Basic didn't transition cleanly to Visual Studio, my point is that many principles from the Visual Basic IDE applied to Visual Studio
* Netbeans was launched in 1996, 22 years ago
* IntelliJ IDEA was launched in 2001, 17 years ago
* Eclipse was launched in 2001
My point is that was impressive to say "Emacs was launched 20 years ago" back in 1999, when the oldest mainstream IDE was 7-8 years old and you had common failures of companies selling IDEs (therefore losing support). However in 2018, as I said, this is a bit dated.
Many a Visual Studio developer have fed their family by using this tool from Microsoft over more than 2 decades. Same for Eclipse, Netbeans, IntelliJ. I suspect Visual Studio Code and maybe even Atom will follow this trajectory.
So let's stop this FUD, please. Looking at my arguments, I think you can agree with me that based on the data we have, a Visual Studio developer can probably retire successfully in 2040 while still using Visual Studio. And Visual Studio is "risky" because it's majority proprietary. But Eclipse, for example, is fully Open Source, backed by an organization, etc.
1. Very good IDEs — which may be proprietary — do exist and have existed for a while (the Visual Studio argument); and
2. Free Software IDEs do exist and have existed for a while (the Eclipse argument).
However, neither Visual Studio nor Eclipse on its own fulfills both arguments. I think your parent was trying to say that their customized install of Emacs does.
As for the point about people being able to make a living off of an IDE for two decades ... well, that's a low bar, isn't it? Lots of people make a living off of no IDEs (the Vim argument) for decades. The argument wasn't really about acceptably good IDEs for the general public, rather about IDEs sufficiently good to the parent's standards. Something they can invest in and reap rewards off of instead of merely using it, thus implying a higher standard than just "does the job".
But, and it’s a big but, that’s enough. As a vim user, I have the rest of the shell and browsers for the rest of my development environment. Version control: git. Building and testing tools: make (or similar). Debugging: gdb, pdb, the browsers debugger.
Lots of single purpose tools that operate cleanly and so integrate into my personal workflow easily. Every time I’ve picked up an ide, I’ve been disappointed by the compromises which were made to make it “integrated”.
I'm a bit sad that Emacs kind of failed as a commercial IDE. Note: commercial, not proprietary. Free Software can be commercial. I guess it's because GNU never got into the second wave of UX that popped up basically in the early 90's.
Emacs badly needed something like a successful Lucid: https://en.wikipedia.org/wiki/Lucid_Inc.
That Lucid company would have had to push for UX features for all kinds of programmers, for a set of blessed extensions that are tested together, for proper documentation with modern terminology, for sane, modern defaults, etc. You know, turn a software project into a software product. Imagine Sublime Text levels of polish, but with the power of Emacs.
Why I stick to emacs: light compared to most advanced editors. elisp.
If I ever need something I know I can, if someone didn't do it already, add it to emacs. When you crossed that line, it's very hard to feel stuck and unable to eval a few lines to improve your workflow.
Or look at macro support. IDEs still have either non-existent, or comparatively poor macro support, which I consider vital. The amount of times as a developer I have to do some repetitive task, or worse, some semi-repetitive but needs a bit of intelligence here and there task, which can be accomplished using a macro with a bit of logic, is insane.
Emacs really is like a superset of IDEs. It does a whole lot of things that IDEs just don't do as well, and then it also does a bunch of things that IDEs do as well.
That is not to say I don't use IDEs. If I have to do java, I'll do it in intellij. If I have to do nearly anything else, I'll do it in emacs. And luckily, most IDEs seem to come with a set of emacs keybindings and plugins so jumping back and forth isn't even that painful.
Regarding macros, I agree. However in the languages supported by the IDE, I rarely find that I need macros. I use refactorings, which are like macros on steroids, since they understand the actual language.
I really wish there was some modern Open Source editing environment which was extendable easily and also had commercial backing for the key parts. Visual Studio Code is remarkable close to what I want, it seems to have a solid architecture. The fact that it runs on Elecron is a kind of a drawback, but Microsoft really wants to make it competitive and I expect once WebAssembly hits the shelves things could take a very interesting turn.
is what makes Emacs so comfortable for me. In fact, that was a moment of revelation when I found that Emacs is not an editor as they said, but a platform to build your editor/IDE/environment. Probably, it is because my brain is trained to think in a programming way, it feels much more natural to tune everything by coding, then by knobs, and buttons. And, yes, it provides more extensibility. I mean, for real. That's why I, as many before me, started to do a lot of things unrelated to programming in Emacs - because I can make it to assist me better, in ways unachievable with other software, in spite of the fact that the latter could be specially developed for a purpose.
I don't proclaim Emacs is the panacea for everything, it has it's ugly sides too. I just want to say if you like to rule you working environment, not just learn how to live with it - Emacs can offer you something.
Now I can't imagine working without Visual Studio Code because all those seemingly little features add up and what do you mean I can seamlessly use Git to manage my code or easily rename variables and functions without breaking stuff WHAT
It lets you view a pull request's changes right there in a standard IDE window, so that you can get full code navigation features during code review, including stuff like peeking the docstring or implementation of any functions the code references. Or, if you notice something amiss while reviewing your changes before submitting a pull request, you can just make the change, re-run tests, and commit, without ever leaving the diff viewer. Or being able to just toggle gitblame annotations on and off right there in the editor.
It's nothing worth switching platforms or programming languages over, but, since switching away from .NET and seeing the gulf between the level of seamlessness you get out of Visual Studio and what's available in other IDEs, I can now see why they've come to have such a poor reputation. Visual Studio isn't exactly lightweight, but it manages to pack in enough cool tricks to justify itself.
(Until you install ReSharper. Then it becomes as memory-hungry and unstable as everyone else.)
You can say that again. These really polished software products such as Microsoft Office (don't laugh!), IntelliJ, Visual Studio Code, 7-Zip, Chrome, Firefox have tons of hidden features you can easily miss and that have tons of thought put into them.
For example I started using Visual Studio Code and I accidentally clicked things in the status bar. Did you know that the text there is actually buttons? They take you to the command bar, where they have a pre-filtered list of commands which set their respective options (!!!). That's power user UX Nirvana, embedding discoverability and teaching in a subtle way that doesn't interfere with your normal workflow.
You don't know what you're doing? You click the menus and your life is just fine. You read the Welcome page and maybe change some user settings, with full auto completion (!!!), or maybe you click around the app, and like a modern game with a physics engine, the app reacts to your action, doesn't just sit there like a slab of rock.
I'd chalk it down to Visual Studio only running on one operating system, not being particularly useful for developing apps that aren't targeted at that platform, and having a very high price tag.
(The last two have changed, but only recently.)
I'm a career-long .NET dev and I've wanted to step away and begin learning C++ on a non-Windows platform with VIM and my only attempts were met with so much frustration that I gave up. To be clear, I believe in the power of VIM, I just never got acclimated to it.
Maybe this year is the year I stop making excuses and just learn.
P.S. I see lots of arguments elsewhere about whether VIM is an IDE. Either way I think your first point stands in my case @oblio.
Use dotnet core on Windows, with Visual Studio.
Use dotnet core on Windows, with Visual Studio Code.
Use dotnet core on Linux, with Visual Studio Code, etc.
Then maybe try dotnet core on Linux, with Vim.
But don't believe the hype. I use Vim as an editor because I do a lot of scripting. I use it even on Windows. But I use it because I'm already used to most of its commands, I have a decent config file for it (somewhat lean, not that many plugins) and for my job I need to know it cause I often interact with various systems which use it.
Despite being a touch typist and knowing most of the commands, I'm still a Vim heathen. That is, I don't use numbered yank buffers, I just use the default one, I also remapped Ctrl-c, Ctrl-v to do visual block operations for when I'm too lazy to come up with fancy selections, etc.
Anyway, my point is, using Vim might not pay off fully. My brain just isn't wired to work in Vim commands. And I know and use w, W, b, B, f, t, folds, blah, blah. I definitely don't use it to "magician" level.
You know what? I think in the end it doesn't matter. The only time Vim's nature actually helps is when I pre-process some sort of text data dumps.
For the other moments I'm thinking way more than I'm writing or editing. So it's not the text editor that's the blocking point.
Damn blocking IO. Getting outputs from the brain is hard and slow!
Thank you for the advice!
I tend to want to learn how things "on the other side of the tracks" work mostly because I get tired of the heated debates around tooling and I'm determined to learn as much as I can so that I can be well-rounded (that and C++ has been the beast I never finished taming).
Do you have any recommendations for a distro of Linux that would be easy to switch to? Go gentle on me, I'm a Wandows kid by day!
EDIT: Seems I can't reply to you anymore. Thanks again for your recommendations. I think a VM is a good route too. I'm not too concerned with purity at this point as much as learning. I can find beauty in most systems regardless of ideology :)
Unixen are generally the same, but you won't figure that out at first, so you do want something a bit friendlier.
My personal opinion would be to go with the mainstream distributions, since you want support from fellow humans on chat, forums, etc. I'm more of an Ubuntu guy, but people seem to like and use Mint or Debian or Fedora.
Don't fall into an Arch or Slackware trap early on, I don't really see the benefit of going for "purity" at this stage. There's this curve, I find, where you first go for newbie friendly, then you go for hardcore, and then you find a balance. The mainstream distros can be user friendly and are balanced. If you want to learn a lot, IMO go all in and either go Linux From Scratch (LFS) one time, or Gentoo for a while. But since you're a professional, after getting a hang of things with some deep learning (see LFS or Gentoo), you probably want to stay close to corporate environments. Those generally are Red Hat/Cent OS (so Fedora is somewhat close) or Ubuntu/Debian (Mint is also close).
TL;DR: Make an Ubuntu VM, start using it full-screened as much as possible instead of your Windows host. See how far that takes you. Good luck and have fun! :)
It's a MinGW environment with very good factory configurations. It won't let you apt-get and run any old app, but it does get you all the goodness of a bash prompt and all the standard Unix command-line apps. All right there in Windows, without having to also learn and get comfortable in a new operating system.
Stack Exchange often makes the difference, but unfortunately many of both the questions and their answers are version-specific, but do not state the version they apply to.
There is a real art to making an IDE in which how to do all the common things is easy to find, and all the more esoteric features are discoverable. Maybe game designers could help?
I also like to play with the UI, they're generally quite configurable, you can move windows, panels, show/hide buttons, etc.
By using these two tricks I generally get the core stuff quickly and then I branch out.