Carmack on not being a power editor user
twitter.com
twitter.com
I think the reason programmers love to tinker with their vim or emacs configs is because it's simply satisfying. Just like a blacksmith has their very own set of valued tools, there's something extremely rewarding about configuring your setup just the way you want it. You work your entire life with it, so you might just as well make it your own, I think that's what people get out of it, just a subjective sense of making things fit right.
It's like my barber who has some cool vintage scissors he got from someone. Could he cut my hair with some high grade scissors he bought on the internet? Sure, but he likes his ones better. At the end of the day programming is more like a craft than a science and it shows when it comes to topics like this.
It's not about typing speed at all (for me). It's about having a clean and orderly working environment where the number of frustrations have been minimized.
Therefore I'm tempted to look at this problem not from a technical but rather from a social perspective: I consider this preoccupation with editors as a kind of fixation and way of exercising power in a straightforward way as a part of an increasingly complex and unfriendly environment. We can't customize the stupid Scrum processes guiding our lives, can't customize the management which often is rather clueless about what we're doing, can't avoid that most software projects are ultimately pointless even if they claim they're changing the world and empowering users. But we can certainly customize our editors.
And then there's the social pressure from the typical hacker circles which would happily dictate what programming languages, tools and paradigms are good and which are bad. Of course this scaffolding all comes crashing down when one looks at the results and there's no discernible difference between the quality or success of projects where various editors or processes or languages are used. So the focus moves to personal benefits, personal preferences and programming as craft and so on.
But it's all just a game programmers play, isn't it?
That's not even half of it. TUI programs are designed to be keyboard driven from the start, not as an afterthought. All the IDEs I'm aware of are hopelessly outclassed here. There's also things like registers, column editing, and the buffer abstraction which make common tasks less cumbersome. The list continues.
It's not that one tool can be used for a task that the other can't; rather it's just better at it from my perspective (given my particular workflow and toolchain). For me, there's a significant ergonomic difference which makes for a more pleasant process overall.
Is keeping a clean and orderly workspace "just a game"? What about using the best (from your perspective) tool for the job? I imagine different people will care about these things to different degrees.
As you point out, perhaps for some there's primarily another motive (exercise control, irritate a coworker, maintain an appearance, ...). That's not mutually exclusive though and it's hardly unique to programming.
I spent a ton (no, really a metric ton) of time tweaking my vim and emacs configs, and have thousands of lines of code in each, but I haven't touched either in years, and I'm pretty happy with that.
Yes, tweaking editor configs is fun, but I have other interests too, and those other interests have taken priority for a long time now.
Incidentally, I consider all that time tweaking my configs very well spent -- not because it was fun, but because my editors are enormously useful to me now, and I wouldn't dream of ever going back to more primitive editor.
I think there’s more to it than that. Yes, it can be very satisfying to tinker with one’s tools rather than getting work done. But that doesn’t explain someone like me who took the time to learn vi (not vim) rather than using a basic text editor like nano or Notepad or TextEdit.
So why would I take the time to learn vi? I don’t tinker with it (beyond adjusting a few basic settings like autoindent, line numbers, incremental search, etc). It certainly took me a long time to get very proficient with vi. It’s also the case that any editing task I can do with vi can be done in any other text editor (they’re all “text equivalent”).
The answer is that vi, more than any other editing method, removes friction from the editing process. Having used it for a long time, I’ve built up muscle memory that allows me to rapidly jump around files and make precise edits. It also lets me easily automate repetitive editing tasks with its ex commands, macros, and of course the humble ‘.’ command. In the case of more elaborate tasks such as paragraph formatting, table formatting, or inserting line numbers into the text, vi lets me easily pipe motions, ranges, or buffers through shell commands.
So why doesn’t everyone use vi? Well that’s specific to personal taste. Some people don’t get as frustrated by friction in the editing process as I do. Maybe John Carmack doesn’t mind reaching over to grab the mouse in order to move the editing cursor somewhere else, or to select text for copy and paste. I don’t know what his editing environment and workflow look like. Perhaps he uses some other editor like vi but with the default configuration.
I guess there’s one more piece to clear up and that’s the question of whether or not I qualify as a “power editor user”. I think I do. I don’t tinker with my editor to the incredible extent that some others do, for sure. I used to tinker and found it a deep rabbit hole of distraction which inevitably led me to a slow and complicated environment (highly customized vim) that really didn’t do anything fundamentally faster/better than I could already do in plain vi. Having said that, I think my experience with vi (including having purchased and read O’Reilly’s book on the topic [1]) has helped me to master its commands far more thoroughly than a typical vim user. So I think that qualifies me as a power editor user. Others may disagree.
[1] https://www.oreilly.com/library/view/learning-the-vi/1565924...
You get immediate feedback on every change. It feels like you’re doing something.
For much of my self-taught coding ability, I’ve been tinkering with configuration files that don’t seem to move the needle.
The time I spent on my editor was the distraction.
> Yes, it can be very impressive watching people using the power tools to maximum advantage, and sometimes is can be a dramatic win, but I usually think that it adds up to... a few minutes saved a day?
I think measuring the gains of text editing features in terms of time is a distraction. Expressive editing features take something tedious and make it effortless. It makes it easy to do something that I'd normally put off.
But the reason text editing features end up not being that important is that if the task is mission critical, you'll end up just soldiering through, even if it's tedious. Therefore it's an incremental benefit not a revolutionary one.
I like text editing features because I personally like being organized, not because I feel like it makes me a more effective programmer. It lets me indulge myself in keeping code organized without that becoming a time sink.
However, for those 1-2 hour focused coding sessions, it is easer for me to enter and stay in flow when I feel a better connection to my tools. Since I do perhaps a dozen of those a week, I am able to accomplish more and do it more enjoyably, even if I only spend 20% of my work time in one of those sessions.
I am not sure exactly how much the productivity increase is because I haven't tested it rigorously (honestly not sure how to even measure that), but I'd guess it's still only 5% at most. The benefits to my happiness and fulfillment when coding are definitely noticeable though, and I think it is because I am able to spend more time in flow.
Edit: and for what it's worth, there are things that arguably have much greater impact on my ability to stay in flow than just the text editor: how good the debugger/REPL is, my familiarity with the language and libraries related to what I'm doing, etc.
* would argue that a lot of people who write things like 'it only saves a few minutes a day' have never actually tracked how much time it actually saves
* one good thing worth doing is to get a tool that tracks how much time you spend on different applications and websites during your work day
it will TRANSFORM your understanding of how you use your time
Every single IDE and text editor for programmers can do this stuff, and they are often the only features that 90% of users learn.
Having quick access to options is paramount - like vscode F1.
Besides, huge majority of IDE users do not use keyboard shortcuts but browser trough its GUIs, even if the feature exists. Its the IDE mindset (personal experience).
There are Ace Jump [0] plugins for most IDEs. imo, easier to use and more powerful than stock vi navigation commands.
> huge majority of IDE users do not use keyboard shortcuts but browser trough its GUIs
Does it count if you "browse the GUI" without ever touching the mouse?
I use the "search everywhere" [1] dialog in JetBrains by pressing double-shift all the time. When I used emacs, I would M-x tab-complete commands all the time. Same thing.
Which requires more effort: pressing 4-ish keys to spell out an editor command you use only a few times a day or trying to memorize every arcane key combination?
Also, does tabbing in the emacs command buffer count as "browsing the GUI?" I think so.
I say it all the time, but I think a lot of power vi/emacs users have not touched a modern IDE in a long time. Everything is keyboard accessible nowadays, and I would argue vastly more discoverable compared to vi/emacs.
I also think that there is a strange magical thinking-esque hang-up against any UI that can't be drawn in a terminal.
[0] https://github.com/acejump/AceJump
[1] https://www.jetbrains.com/help/idea/searching-everywhere.htm...
Yeah, modern IDEs got some stuff from modern editors for sure. One of the primary pain points for me is that installation/setup of IDE is much more lengthy, they are pricey too - I can setup vim/code in minutes on empty machine. Just downloading/installing VS takes a bunch of time. This however has nothing to do with efficiency but counts overall.
> There are Ace Jump [0] plugins for most IDEs. imo, easier to use and more powerful than stock vi navigation commands.
The page you posted lists InteliJ Platform. Vim doesn't have such plugin OTB FYI.
> Also, does tabbing in the emacs command buffer count as "browsing the GUI?" I think so.
If tabbing is done via mouse, yes.
> Does it count if you "browse the GUI" without ever touching the mouse?
Ofc not, I prefer to have a GUI, I just don't think analog controller like mouse is good way to interact with it.
> I also think that there is a strange magical thinking-esque hang-up against any UI that can't be drawn in a terminal.
That might have been a real thing when people did things on servers directly etc. Today there is almost 0 need to do so.
There's nothing magical about it.
I prefer text based interfaces whenever available as they are generally more responsive, light on resources, use less network bandwidth, and are inherently compatible with SSH. They also tend to be very minimal, having far fewer extraneous features (ie fiddly distractions) due to the inherent design constraints.
If one isn't available though then I'm happy to use a modern GUI (my web browser is an example). In fact, GUIs consistently seem to be more newbie friendly so if it's a one off I might actually avoid a text based interface just to save time.
Watch as my eyes roll out of my head, onto the floor, and then out the door.
Why is it that you believe the only reason why a vi/emacs user could believe those environments are faster to edit in is because they don't use IDE's?
The worst part is that most vi/emacs users actually DO have experience in both environments, whereas most of the people who want to claim vi/emacs isn't any faster don't. Yet they want to present themselves as an authority.
And I'm one of the people who refuse to use vim emulators in IDE's because they're never quite right (and never integrate well with the IDE).
Anecdotal, personal experience, including seeing constant outright incorrect claims about graphical IDEs in threads like these.
The claims usually take the form of: "I use vi/emacs because I can do xyz using only the keyboard" - where xyz is something that most IDEs maybe couldn't do 15+ years ago, but which they all can do today.
It's not generally that people are saying it's impossible to do in an IDE, just that it's slower to do, and generally more awkward.
Just the other day on reddit I was having this "discussion" with someone, in which they claimed that because they have "find in files" in their IDE it's equivalent to vim `grep -iRl whatever`.
In reality I'm going to do what you're trying to do in a fraction of the time. IDE's have their advantages, but speed is not one of them.
I am a long-time Emacs user. Occasionally, editing/macros/etc can save a LOT of time, and makes it much easier to make some changes which I might not decide to do.
What I find more important however is the effective window/buffer management. Being able to manage my screen real-estate is killer; being able to do everything within one "world" is really valuable. One of the things I find most valuable is that I run my shell within Emacs. This lets me keep my flow going instead of switching context and perhaps getting distracted. I can watch the output of tests etc in one corner of my screen and edit files etc in the other ones. And because its quick to switch buffers, I can more easily reference various files for what I am doing.
Basically, the literal time it takes to type is not the big benefit, but that it allows me to reduce my cognitive overhead of doing everyday, boring things like resizing windows, looking up symbols/finding definitions etc. This makes it easier to focus on my task at hand and not get distracted by all of the mundane tasks I would need to do otherwise.
Yes! I cannot imagine how my life looked before `C-x b` (switch buffers in helm).
However, I still have an actual terminal emulator open the entire time for serious stuff. Eshell is not compatible with a lot of programs, term/ansiterm are ok but not quite as good as a dedicated terminal.
I get around having to context switch by using virtual desktops (KDE). I have Shift-F1 bound to the desktop with only emacs, and Shift-F3 to my terminal. Works beautifully.
Rather than try to use a terminal in emacs I've found it more useful to use an solution designed for emacs, i.e git vs magit.
I do keep a terminal open for a variety of reasons (and some curses apps don’t work perfectly in emacs) but I probably only use it every other work day.
For full screen apps that absolutely have no Emacs equivalent (quite rare), I have a term buffer that I occasionally use.
You should check out a list of eshell features, its much more powerful than even zsh.
Also I use company-mode for command and file completion, which is a lot nicer than zsh 's completion method, for example. Once you get used eshell, it's hard to go back.
I think you should be able to use eshell+Emacs for almost everything, and for me at least, I find the experience quite nice.
i don't know about emacs, but out of the box switching buffers is easier/faster in tmux than in vim (maybe i need to learn more vim).
That’s fine. I would probably argue that it’s easier to get there with emacs, and having one language is a lot nicer than having to learn vimscript, whatever tmux uses, etc, though neovim makes that a totally different discussion because iiuc you can script with many different languages, and emacs lisp, while pretty decent, isn’t great.
Probably the biggest issue facing these environments at this point is that need stronger types to scale better. Doom emacs helps with this because it locks packages down, but for example spacemacs was always broken for me. So eventually I switched.
Anyway if you want to try it I’d recommend doom emacs. It uses vim style bindings so your muscle memory won’t atrophy
Somehow I never hear anybody say that.
As a long time user of both vim and emacs, I find it intensely painful to watch some seasoned programmers tediously mouse their way through mountains of text.
I often think to myself, "ok, you've just taken half an hour to do what I could have done in less than a minute."
Honestly, I have better things to do with my time than edit text, and when I do edit text I want to get the maximum accomplished in the minimum amount of time so I can get on to the thousands of other things I want to do with my life.
Using a crippled editor or not taking advantage of editor features that could save you massive amounts of time, errors, and headaches runs directly contrary to that intention.
It's great that Carmack is satisfied with his own setup but in my case you'd have to pry my vim and emacs from my cold, dead fingers.
Slowdowns are ALWAYS programming related, never text editor related.
I'm no John Carmack, though.
honestly, i have better things to do with my time than to configure my apps.
i would sooner switch to apps with better defaults than take the effort to configure one i have.
editing text or code is the bulk of my work. i don't have better things to do than editing text, so that better be efficient. but if the default setup of an editor doesn't already provide that efficiency then i am not really interested.
this doesn't mean i am not willing to learn shortcuts that already exist, but i won't create new shortcuts. i don't use shell aliases or functions either (unless a task is complex enough to write a script)
As a power user myself, this feels like a major exaggeration and mostly like a brag. A good IDE is way more powerful than any basic editor set up is going to ever be for productivity with regards to changing and understanding code. For working on an actually interesting problem no amount of editing prowess is going to matter at all.
So while it can certainly be impressive to watch someone who has mastered their editor, I always secretly kind of doubt that it's really much of a productivity win for this reason.
I think there are huge wins for getting proficient with your editor (refactoring commands, debugger, etc. as John Carmack mentions), but sharply diminishing returns beyond that.
> So while it can certainly be impressive to watch someone who has mastered their editor
I'd say anyone who spends a significant amount of time tweaking their editor while they should be working, outside of (infrequent) setup periods, has not mastered their editor (or is just slacking off). The entire point of setting this up is to make you more efficient.
Same thing goes with having a pipeline of transforming data from one format to another. Do you use a simple ad-hoc method where you just use features in the tools (Text filtering + Import to Excel + Manually creating graphs), or do you write scripts to automate part or all of the process?
When should you stop doing things manually and automate them instead?
When your best estimate is that spending the time to automate it will be a net benefit in the long run. (https://xkcd.com/1205/) This is hardly unique to configuring an editor or IDE though.
If someone is repeatedly and consistently spending "half their day" configuring their editor then either they don't really know how to use it, or they're slacking off, or they consistently make bad time estimates (https://xkcd.com/1319/), or you don't actually understand what it is they're doing and why.
Just one of reasons is the ease of code navigation, such as bringing some parts of code into view while keeping other parts visible, or not visible. I have it rigged up so well in Emacs that it doesn't distract me from my thinking of the actual problem.
A somewhat relevant story: One time, I was sitting on a park bench in my neighborhood, with a battered old laptop, doing some heavy semi-mechanical high-volume editing that didn't require much thinking. I was throwing a lot of rapid Emacs window management, isearch, ad hoc keyboard macros, etc. at it, and the task didn't require much second-guessing, which I suppose resulted in a lot of almost Hollywood-like "programming/hacking" rapidly changing windows of computer-y text on my screen, extend highlights flashing, syntax coloring updating, etc. At some point, some of the people who were arriving for a pickup soccer game in the park gathered round, and were just watching, and when I got to a stopping point, were kinda cheering and congratulating me (I think I didn't speak any of their languages), and one gave me a high-five. That brief moment of being nerdy-cool totally wouldn't have happened in notepad.exe, and, also, my task wouldn't have been tractable in that. (If I was using a lesser editor, I would've died of dehydration, as it took 10x to 1,000x as long, or blown out my hands from stupid mouse&keyboard RSI.)
(BTW, finding certain tools much more productive isn't due to an unwillingness to try new tools. I try new tools recreationally, and am also doing a complicated startup in which I have to do All The Things. But there are some tools I end up keeping going back to, after trying other things, because they really do seem to pay off in productivity.)
That said, apparently, the way Carmack personally uses editors, and what he gets from them, any old editor will work about as well as any other. And I'm not a snob about what works for me: I'd still hire Carmack, even if I saw him hunt&peck typing one-handed into notepad.exe in the interview. :) I'd guess there are other classes of tools in which he finds big wins in the details. Also, I know Carmack experiments with other tools, since he was even working with Racket/Scheme on Oculus for a while.
Ya think?
I used to have a pretty nice emacs setup but this year I have been coding python in gedit (notepad.exe of Linux) and I've done just fine.
I found every debugger-editor integration to be terrible, at least compared to Visual Studio on Windows. gdb is very powerful, but its UI is primitive, and that includes tui. And most integration basically just assigns shortcuts to commands and show you the current line in the source file. Something as simple as stepping inside a function and watching local variables change can be a problem. Also, no "edit and continue". Someone will probably tell me that I am doing it wrong but if you do, please tell me what I can do to get a Visual Studio 6 level of experience.
Of course, I can get around it, the answer fits in one word: "printf". But I don't want it to be like that, it doesn't have to be, most good IDEs do it right. Note that I use gdb, but for me, it is the big gun, when other weapons have failed. Even for crashes, I tend to go with valgrind first if I can.
(2) + C/C++ extension for VSCode from Microsoft (installed separately);
(3) + sudo apt-get install clang-format.
You may want to adjust some settings e.g. set C_Cpp.default.cppStandard to C++17.It's easy to get lost in fancy editing techniques that get you a win of minutes per day (as Carmack mentions), while learning to come up with a better design will save you weeks in overall development time. Learning more editor shortcuts is much easier and more flashy, of course.
I knows a famous movie composer who plays the piano with his two index fingers.
Past a certain point the returns are rapidly diminishing and you burn a lot of time and effort on very marginal gains that would be much better invested on bigger picture, higher impact stuff - namely, the actual thing you're building. I wrote a blog post on this that you may enjoy [0]. I like your F1 analogy, I used tennis :-)
(Of course, most are at least competent at it, due to plenty of practice.)
By a couple orders of magnitude, what’s going on in your head is a lot more important than what your fingers are doing.
I would say speed of typing and amount of code produced have no relationship to the quality of the programmer. Of cause there might be exceptions if people was trying to type with one finger at a time and other wierd things but above basic typing skills I cant see how it matters.
That seems like the most any modern developer/*nix user should need to concern themselves with vim and wholly for the reason I mention above: it's the most likely text editor to be there on unix-like systems.
And even if I only saved a few minutes a day, over several years that is a lot of time saved, without much investment. It's really easy to get started with vim, get comfortable with the basics in an hour or two, and then just get better by using it every day. Then you can slowly introduce features that save you time. Just setting up fzf and ag has probably saved me several minutes a day vs. using vscode search.
Is there an IDE that does not have this feature?
It's a point that a lot of IDE users miss. I have grep and awk at my fingertips, you don't.
In my experience; they DO come in handy! Some programming languages or file formats get very arsey about formatting and line endings. Sometimes you need to compare files in hexadecimal. Sometimes you need to mass find/replace. Maybe not everyday but it's good to have these tools on demand with the know-how to operate them.
One other BIG benefit of editors like vim and emacs or even notepad++ is that they start immediately, never lag and don't gobble all the ram. It has significantly improved my coding performance now that I can just open it on a whim without having to factor in if it'll slow my system to a crawl with the other current running programs.
So why is it so hard to believe that other shortcut keys are useful?
I have deep respect for Carmack. If he would rather spin his cycles to solve difficult problems, I respect that. To say that learning time saving shortcuts doesn't save time is shortsighted. If a woodworker chooses to work only with chisels, it doesn't make him less of an artist. However, to say using power tools doesn't make you more efficient is a tad disingenuous.
The actual thresholds and sets of shortcuts are different for everyone. That's why discussions like this never end.
Going from normal text editor to vi is like going from assembly to Python. Or using `find -exec` to delete files using a pattern vs deleting files one by one. You are that much more productive when editing text in vi.
We're staring at a monitor for 8+ hours a day folks and there's no art or craft in staring at things, thinking or drawing diagrams. Yes, there's a whole invisible universe unfolding in the depths of the machine and the mental models can be incredibly complex and maybe one can even admit that there's a certain beauty to some designs or pieces of code. But programming remains very different form any kind of art known by man or the crafts which typically result in the creation of a physical object.
That being said, Carmack's making fellow developers aware that they're investing a lot of time only to get diminishing returns. That's a difficult problem, because we're incredibly obstinate about our sacred cows.
I think I get your point but I respectfully disagree. The same could be said of a writer staring at a piece of paper (or a computer screen) and good literature is uncontroversially considered art. I believe this is more a consequence of newer technology initially perceived as less valuable (photography vs painting, computer rendered vs manual processes, etc) in art, which seems a romantic view of how art should be created.
One of the best programmers in his generation, yet he is always sharing what he’s learned, struggled with and is not particularly good at.
Using something like "ci(" to blank the parentheses under my cursor and immediately start typing a replacement saves me, like... a couple of seconds. But it gives me a little dopamine hit that I think helps with job satisfaction.
Yeah, same. I recently realized that I use vim‘s normal mode features even in situations where I’d certainly be faster just typing things out manually, just because it feels good to “work smart”. Even if it’s not really.
Another downside: using (and watching people use) editors without vim features becomes painful.
That said, I'm not fiddling much with my configs, it's usually just vim and a lot of snippets like try<tab> -> try { } catch (error) { }, <F3> on an identifier for log.debug("varname:", varname) on the next line, gr for grepping it with default excludes, v%<action> to comment/copy/move a block, ma mA markers to not spoil my stm with file:lines and so on and so on + basic movement and regex. Nothing fancy or christmas like in these vscode plugins these days.
Well not until HN introduced me to dotfiles...
Carmack spends more time in algorithmic and less in churning code.
I personally spend a lot of time reviewing code and looking for bugs, and I wouldn’t be able to live without a feature to click through function definition. When I use Xcode to review objective C I feel like have super powers due to their caller hierarchy feature (which lets you quickly go through any of the callers up the stack). When I review other code with other IDE I feel disabled. Unfortunately I spent very little time using Xcode in my career.
(rust-analyzer is working towards one[1], but it never worked for me)
[1] https://github.com/rust-analyzer/rust-analyzer/pull/2698
After a while, I started noticing how sluggish IDE’s and electron-based editors are.
I’m now a vim user, but my most used features are «intellisense», go to definition, find references and ctrl-p. I guess these are the things Carmack refers to being of value? I also appriciate spending less time moving my right hand between my keyboard and trackpad for ergonomic reasons.
In addition, I have a more snappy editor than most of my colleagues.
What I don’t have is a good integrated debugger or refactoring support. The latter i never made much use of anyway and the former i’ve never minded being a seperate tool.
Honestly if someone showed up with a keyboard driven GUI that completely lacked mouse input and had a modal paradigm I might actually use it over vim.
I feel this way about version control systems. More trouble than they are worth to me, even when working in the same tree with many others. If I make a branch, it's only because that's the only way to submit a PR. Merge conflict? I'll look at my diff and apply it manually to the other side. Merkle trees are great, but the only useful history to me is a straight line!
In other words his mastery greatly reduces his dependence on IDE/editor features so this makes perfect sense.
Watching Carmack live coding, he types with conviction and gets things done:
https://www.youtube.com/watch?v=ydyztGZnbNs
Sitting down with OpenBSD during a cabin retreat:
https://www.phoronix.com/scan.php?page=news_item&px=Carmack-...
He says he still uses intellisense type features to aid discovery and memory. Just not the advanced stuff for editing.
The basics will certainly double your speed and I say this as I train a junior person. Quick tab switching, all the copy and paste stuff, etc. The rest in my opinion of over engineering half the time and preparing for moments that might not even happen. Certainly evaluate any movement or motion you do all day and look into optimizing. I mostly learned vim And vim keys for sublime because I wanted to be more enjoyable to be watched when I code and not have so many staggering mouse moments. I’ll probably forget everything in 3 years and go back to the the basics and a mouse.
But I think there are people whose job involves cranking out code all the time and I can see why it matters to them.
I've used multiple cursors for many purposes, initially as a dev it worked very well as a poor man's ETL - take a spreadsheet and perform a bunch of transformations (reverse first name and last name, trim these fields, add leading zeros to this field, concatenate these fields, delete this field, use some sublime plugins to generate incrementing IDs, etc.), wrap it in a SQL insert statement, etc. etc. I used it a ridiculous amount and at times it made me look far more efficient than I really am.
I'm on the business side now but even today I found myself cleaning some data with multiple cursors, sorting alphabetically, and then using a 'count duplicates' command I found on GitHub to remove duplicates and prefix each line with the number of times it was duplicated. I could have done it in excel, but it took me literally 20 seconds to do it in Sublime.
I am not that old, but I am old enough to remember a time when I was really into those power features. Over time you get burned by having to change platforms during career evolution, you get other things taking up your spare bandwidth, and you get slower.
Now learning the power user features just doesn’t have the same appeal
Rather, I use Emacs because of a combination of pain points that it simply handles better than other editors, that add up to a significant advantage:
* Emacs does electric indent "right". Other editors will attempt to indent automatically, but the tab key always means "insert tab", not "indent this line to its computed indent level". This alone makes it more pleasant to use than most "modern" code editors.
* By default, Emacs will help you match paired delimiters (parens, brackets, quotes, etc.) but will not insert closing delimiters. This saves me that awkward experience of typing out a code block, parameter list, or string constant, only to find that I now have mismatched delimiters because I didn't realize I was supposed to cursor over the closing delimiter my editor oh-so-helpfully provided rather than type it myself. Except some editors just cursor over the closing delimiter if it senses that you're typing the delimiter at point. Some don't, though, and it's hard to remember which is which!
* I work a lot in Lisp, and Emacs is better suited to handling Lisp code than most other editors.
* Emacs is an immensely useful programming environment. There are applications like Magit and Org-mode built on top of Emacs that are just stupid useful workflow grease. On top of that, if there are pain points in my workflow, coding something up in Emacs Lisp to handle them is incredibly easy and straightforward, and I can evaluate and test my code right in my running Emacs session. Contrary to popular belief, Emacs integrates well with Unix tooling; Unix tools can be easily plumbed together with Emacs buffers, enabling you to use Emacs as a kind of "super-shell" to capture, move, examine, and massage data.
I’d like to kick back on my couch and code for an hour using my iPad and Apple Pencil.
I’m anxiously awaiting for someone to image a better mobile experience rather than attaching a hardware keyboard.
I can't seem to see it without enabling javascript.
https://nitter.net/id_aa_carmack/status/1302651878065475584
There are browser extensions to automate this too but I haven't tried any yet.
and
"I am talking about generic text editing features; I definitely find language/IDE features like intellisense very valuable, and, as someone else mentioned, a good integrated debugger is among the most important things. "
> I have never been a power editor user; typing just never felt like a bottleneck worth fighting over (unlike exploration). It is interesting watching my kids get excited as they discover various Sublime Text features that I never use.
For me, Termdebug is the killer feature. There's something about being able to debug things faster than the other IDE-using folks, who are usually just waiting for the spin-up of their IDE into debug mode to stop by the time I've already stepped through the code in focus ..
I think a lot of people would be in the vim camp if they could just master the 5 basic operations they'd need to use vim. Its pretty interesting to discover the whole world of stuff in help.txt that I just never, ever touch, for whatever reason ..
https://www.dannyadam.com/blog/2019/05/debugging-in-vim/
If that is accurate (it looks like it is), why is termdebug faster than keeping open a second window and using gdb there?
But, even though I bring vim keybindings to all my local editors, my day to day is still a mix of vim + mouse navigation (and cmd+t obviously). I have never felt hindered by not being all vim.
I do touch type though, and have known programmers who hunt and peck with their index fingers. Not being able to type nowadays always seemed odd to me since, I just assumed people would learn to type better by being at the computer all day.
I've noticed that with doctors. Maybe it's just where I live, but most doctors I've met hunt and peck. It's painful to watch them struggling to type their prescriptions. Considering how valuable their time is, it's a shame they don't spend time learning this skill.
If you have broad shoulders and long arms, finding a good posture is even more difficult.
The point being, you could easily type this many lines per day using Morse code.
That said, I think Carmack is being overly dismissive here. Sometimes you end up in a situation where not knowing (or having) certain editor features results in a ton of tedious manual editing. I know a few tricks to avoid those situations in my work, and have a few bookmarks to help with the rest. I think this is the right balance to have - do know features which you find use for at least once a month, even if they are obscure, and know where to find the rest.
The reason why being blindingly fast in tmux/emacs/vim/shell/etc. is a difference in kind rather than degree is because it lowers the activation energy on trying radically different things. If you can move massive amounts of code around quickly and accurately you can try a different design on a whim, and throw it all away without a second thought if it doesn’t work out.
When manipulating code is time consuming there is a tendency to “make it work” with the design you’ve got. So much code looks like someone “made it work”.