That’s either a very utilitarian view of art or a very vain view of code. IMO both lead nowhere sensible.
IMO code usually serves a purpose and so is in the realm of craft or industry. Requires constant training and tool care nevertheless but as said to serve a purpose.
I have a quilt my mom made me. It’s a beautiful log cabin pattern with expertly pieced corners and a pleasing color scheme. It makes me feel happy and connected to a long artistic tradition of American quilt making whenever I walk by it. It also does an excellent job at its other purpose of keeping me warm. But it’s not a utilitarian object. The vast majority of the production effort went into the beautiful pattern on the top.
What you describe is art in the first place, don’t be shy to see your mom as an artist when making that piece.
Crafts are never art but art often requires craft.
You prbly had contact to hundreds of thousands if not millions of craft artifacts and a single one stands out as also being a piece of art to you. The same ratio I’d like to see applied to code as art. So generally it is just not.
Hmm, that’s a fair take. I missed the “usually” in your original comment. Most code is not art–the vast majority of code (probably) being glue in CRUD apps. But code can be art if an artistic intent is applied to it.
Another side of this: “is code art?” often is asking whether the code itself is art. But what about code used to create art – game engine code, generative art code, etc. Is the code art? It’s sort of like asking is Foundation piecing art – well, it can be used to create art. This line of argument seems to be quickly drifting into the semantic difference in English between “art” and “an art”, though :-) Maybe “coding is an art”, but usually “code is not art”.
I genuinely think code is art. It can beautifully designed and written, and I enjoy reading beautiful code. But I understand it’s an opinionated take on the matter.
That being said, yes code is here to serve a purpose. Like books and paintings :)
as said, there happens to be art in form of books (named e.g. literature) or paintings – but a huge volume isn’t art. Like manuals, school books, maps, civil engineering plans or white-washed walls. Even quite some entertainment writing doesn’t consider itself art.
IMO it speaks for the vanity of IT to compare themselves with Picasso, Dürer or Beuys.
The ancient greeks distinguised between philosophia and techne (τέχνη). Only the latter was intended to be of practical use and was a matter of slaves. Citizens didn’t do it.
On one hand, I fully support the idea of customizing your environment and nurturing your coding experience. My problem with the piece is the opposite of everyone else’s: it doesn’t go far enough! Between my shell, my vim, and my autohotkey configs, I’ve got 50+ custom functions that smooth over my development experience. Does it suck to switch machines? Yeah, it does. Is it worth it anyway? Hell yes.
Haha I love this comment! Yes I found out that I have to limit myself in terms of configuration, otherwise it becomes hard to maintain and hard to use. So over time I trim my dotfiles to only keep the best parts (for my usage).
Can you share your dotfiles? I would love to have a look.
I began with an empty configuration file and only added the bits I needed. My ~/.zshrc is 200 lines of code and loading 4 plugins.
I’m sorry … 200 freaking lines after cutting out the excess? Sorry, I’m not experienced with zsh – is it just completely useless without huge amounts of configuration?
Without seeing the 200 lines, I would assume that it’s for completions, prompts, and other niceties. After I dipped my toes into the zsh config world, I moved right over to fish where all those nice “modern” features were enabled by default.
But no. Zsh is perfectly usable with the defaults. I believe it’s the default on MacOS now.
I’m curious about this, because it’s the opposite of my experience. We’ve always been a bring-your-own-editor firm and there’s quite a variety of editors in use (Emacs, CLion, Vim, Notepad++). With just a couple of commands (nothing fancy, just some cmake and conan), everyone can start writing code.
Recently, we’ve had a couple of developers come on board who preferred VS. They lost significant amounts of time trying because VS could not produce a working build without significant levels of configuration. They’d have questions (e.g. how to make a debug build) and I could tell them the cmake flag to call, but neither of us knew how to get VS to do that. One developer eventually wrote a powershell script that configured VS Code to produce a working build. They’d have to blow the directory away once a month and run the script again after VS stopped producing builds.
The thing is, I want to understand VS Code. It’s obviously a different way of looking at development than anything else out there and I’ve never regretted learning a new way of thinking. I want to experience the efficiency that you are getting out of it. However, I’ve never really found a good explanation of the VS way of working. Every guide I’ve seen has been 99% about learning the concept of coding and not really about VS as an IDE. I’ve tried just using it as a text editor (open a file, edit the code, compile in the terminal), but this wasn’t any different that Notepad++. I know that it has so much more to offer, but I’ve just never found the key to unlocking it.
you say VS in some places and VS Code in other places…. they’re two entirely different products. (and i find them both pretty hard to use, though i do kinda like the VS debugger - i just drag exes into it and thus sidestep all the project configs etc).
VS is the full IDE. VS Code is a javascript scriptable editor that can host other pieces.
Zsh is completely usable with the default configuration, as is vim, tmux, etc. 200 lines sounds a lot but if you have a look at my conf it’s only a few aliases/functions, some zsh options and some plugins being loaded. It’s actually very “minimal” in comparison to some zsh frameworks.
Honestly a lot this is like the tech worker equivalent of a gamer pc. Maybe some of it helps, most of it is just looks, and some of it is demonstrably worse.
There’s also a not insignificant element of elitist bs that goes with it. You know the sort: “oh you use an IDE? That means you’re not a real programmer”, etc
To be clear I’m not saying “never customize anything”, just that I think it’s important to acknowledge that most of this stuff isn’t inherently superior to anything/everything else.
You use an IDE? Cool. They’re not for me. Why? A few reasons.
I’ve yet to find an IDE that will work with my code (or not outright crash in ten minutes). I’ve got stories going back 30+ years on this.
I’ve been using the same editor for nearly 30 years now, and it has largely disappeared into the background and I no longer have to consciously think about using it. Again, going by what I’ve seen of IDEs over the years, is that by the time an IDE has gone invisible, it’s obsolete and you have to basically start over with a new one.
I’ve yet to find an IDE that will work with my code (or not outright crash in ten minutes). I’ve got stories going back 30+ years on this.
Then I legitimately do not know what you’re doing, as I and clearly millions of others don’t have this problem.
I’ve been using the same editor for nearly 30 years now, and it has largely disappeared into the background and I no longer have to consciously think about using it.
And that’s fine, no one said it isn’t.
But let’s have some serious talk. I don’t know why you felt the need to respond to my comment like this, as I didn’t say anything that implied you had to use an IDE. What I said is that this behavior of denigrating people who do use IDEs is BS, and your comment here is skating awfully close to that line.
I also have difficulties with IDEs. Now you’ve heard of two people. Maybe there’s a third person somewhere out there.
In all seriousness, you chose IDEs as an example, and invited the response. By making IDEs about elitism, rather than about velocity and convenience, you’re suggesting that folks who have difficulties with IDEs are trying to make some sort of moral statement when an IDE doesn’t work for them.
No, I said, very clearly, that acting like you’re superior to other people for using an IDE is BS. At no point, at all, did I say that not using an IDE is bad.
I think you should be asking yourself why my saying simply that using an IDE doesn’t make you an inferior engineer has resulted in you claiming that I’ve said non-IDE users are inferior.
My reason for asking you to think about this is super hard to explain as the completely normal piece of human behavior that leads to this usually comes up in situations that are vastly more important and/or sensitive than something as trivial as IDE vs non-IDE, or similarly emacs vs vim, grey vs gray, etc
[tw: this behavior/response often comes up in relation to actually important things like racism, etc. I want to be clear that I don’t consider these remotely equivalent, but just providing a heads up]
The particular, again normal human, behavior is interpreting “treating someone else as equal” when you’ve internalized that person - for whatever reason, no matter how trivial - as being inferior is interpreted as favoritism or claiming the “inferior” person is superior.
Given that common response I hope you can see how I might see your response as being related: All I did was say
You know the sort: “oh you use an IDE? That means you’re not a real programmer”
and I even followed it with
To be clear I’m not saying “never customize anything”, just that I think it’s important to acknowledge that most of this stuff isn’t inherently superior to anything/everything else.
So again, I never said “Using an IDE makes you better than people who don’t”. I’ve now even had other people (including at least a couple I know use emacs or other Command-line editors) make sure I didn’t say anything that might imply it as these responses made me legitimately concerned.
Before this conversation went off the rails and turned into an argument, I’m pretty sure the only behaviour that olliej meant to criticize was “denigrating people for using an IDE”. Not not using an IDE. Everyone here thinks your continued use of vim or joe or notepad++ or whatever does not make you a bad person.
Code completion is rather cool, but not having it means you eventually read the docs from the top to bottom. That is sometimes a win for productivity as well.
Similar to how people rush into things instead of investigation the tools that might help them finish an order of magnitude faster. Same with carpentry, spreadsheets and software development.
I don’t necessarily agree here, for a few reasons. I’ll note that in the context of the “IDE vs non-IDE” argument code completion isn’t the only thing that they do - in fact it’s relatively recent. The first thing that was integrated in IDEs was debugging, where I would argue it is simply a superior experience to raw gdb/lldb with the actual code in a separate window. Many people use plugins/scripting to setup vim, emacs, etc as an IDE for that reason. Honestly I’d argue that the debugging is really the thing that makes something Integrated - certainly it predates more or less every other feature.
Code completion itself isn’t a feature solely of IDEs - plenty of code editors support it these days, especially with the introduction of LSP which means supporting a language no longer means “re-implement that language in each new editor”. As far as the learning the API, I think it’s 50/50 in helping vs not-helping knowledge. When I was a tutor/TA (in NZ tutor would mean a person who runs/supports labs, etc whereas TA means person who helps/does lectures) I definitely saw people who would write code by code completion. But even without inline completion I’ve also seen people code via compiler errors.
But I also think code completion helps in learning an API as it is fundamentally a contextually aware interface to the API, so a user can type in some approximation of what they think an API would be called, and the suggestions let them know which part of the API they should be searching for (rather than trying to search for “I want to do X” which these days especially will take you take a bunch of stack overflow questions with variable quality of answer - honestly it was easier back when the only place talking about “do X in MyLanguage” were the actual docs and so that was what google/webcrawler/lycos returned). These days it’s even common for code completion to directly include the documentation for the API so you can get contextually relevant documentation.
That is increasingly important, as I do think that your comment about “reading the documentation from top to bottom” is simply not feasible, let alone reasonable, for many modern APIs. Hell I know many people who work on and design library APIs who would need to check documentation for some uncommon parts. Obviously you need to learn the parts of the API you would use regularly (which even the coding through completion/compiler errors folk manage, albeit [very] slowly), but completion gives you convenience for what parts you do know, and access for parts you don’t.
There’s also a not insignificant element of elitist bs that goes with it.
Maybe that’s true for some people, but for the record I personally think it’s fine to use whatever you prefer. This post is more about getting to know better the stack you prefer to use.
Some good ideas in there, but some things I’ll disagree with.
I’ve seen many developers with super-tweaked shell configs take minutes to find a file because they didn’t know how to grep for things fruitfully. They are beat out soundly by a develop with a normal shell who knows how to search for things, and that person is beat out by somebody who knows the codebase.
I’ve seen developers who have spent who knows how many hours learning special keyboard configs for super fast typing on their high-end mechanical keyboards be unable to formulate clear, direct communications or simple code and get beaten out by an old businesswoman on a gross stock membrane keyboard in Office.
I’ve seen developers talk about how to get the most out of their compilers and package managers because their time is so precious when they’ll routinely sign up for extraneous meetings and cut up on calls costing untold hours of wasted time a month.
I suggest that the last thing anybody should do as a developer, until they’ve mastered basic communication and time/project management, are masturbatory exercises in advanced coding kung-fu or figuring out how to turn their development environment of choice into a jingle truck.
At the very least, I wish developers would stop claiming that such things are critical gains in the name of efficiency when they’re leaving so much obvious stuff on the table.
I experienced a lightbulb moment when I noticed geohot (the guy who hacked the iPhone) was (at the time) using stock terminal, some editor & a web browser on stock Ubuntu.
in my first team at google there was a really smart guy who used nano - he was used to it, it did everything he wanted out of an editor, and he saw no reason to switch to something else.
I also feels like it does a huge disservice to folks in the early-mid parts of their careers. I’ve met (and worked with) multiple people who diligently followed trends and riced out their terminals and editors only to somehow keep bumping up against other limitations that the snake oil from HN or Lobsters of the week couldn’t fix. We fail those developers every time we suggest that dressing in the trappings of competency is a substitute for it.
One case sticks in mind: dev had picked up one of those fancy-pants Spacemacs or vim (don’t recall the editor) configs that uses relative line numbers (you know, -3, -2, -1, ... , 1, 2, 3) on the gutter of the editor instead of absolute line numbers. Pairing with this person was super annoying because line numbers changed after every cursor reposition, and there was a visible lag on their end as they’d process “Okay, go to -3”. Several times I gently suggested they drop the fancier feature and go back to normal line numbers; alas, that never happened.
We do these people a disservice by continuing to promote a culture where your tooling and what amount to cute tricks are of such perceived great importance.
I’m one of those crazy people who prefers configuring (n)vim with relative line numbers, since I really like the assistance when jumping to a line visible in the buffer (e.g. 13k to jump up 13 lines.) but I have a binding that allows me to quickly toggle it off for situations like what you described.
I learned a lot by using cute tricks, and then figuring out how to work around any problems with them, so I think they are generally fine. Of course some folks won’t take the time to learn this, but this isn’t a new problem specific to programming… people have been misusing tools ever since humans have been making them.
I’ve turned my entire development environment into a jingle truck, but also spent a week studying Excel and way more time studying shell scripting. I think once you get a lot of the obvious stuff out of the way, then these things do actually become critical gains.
For me this is similar with desktop environments. They first seem like they have really nice gimmicks, but then you get to see all those distractions and time sinks. When I was a teenager I loved to play with making stuff look pretty, show all sorts of stats, etc. And I’d even say it was worthwhile from a creative and tinkering/educational side.
However, I eventually ended up going down the path of little distractions. One of the first such window managers other than fluxbox and openbox was pekwm, a really early version of it. At some later point LXDE was nice, because pekwm was too minimalistic at times and eventually I settled for i3, weirdly enough, even though I never got into using it effectively, I only use it because it gives me tray icons, a clock and prevents me from constantly manually resizing the browser window. Oh and I can still easily use the mouse, cause I can be really bad with keyboard shortcuts. Despite having used it for around ten years as the daily driver it still doesn’t feel like the optimum for me. It just happened to be what worked best and now despite trying out something else every one or two years and also having a system with XFCE I rarely use I have been too lazy to switch to anything else.
Where I wanted to had with this, I think the nice way with Unix-like operating systems is that things are out of the way, yet easily available when you need them. I also think the in the last 5-10 years software started to go into the opposite direction and software constantly makes you aware of itself. I don’t just means through notifications and things like that, but simply also by trying to be in control on a system. It doesn’t matter whether we talk about systemd and all its “parts” (init, timers, supervisor, socket management, system configuration tool, NTP client, etc.), the audio stack, service orchestra tors, like kubernetes, Docker, that feels like the new tar-command paired with a package manager sometimes, or even IDEs and editors that just keep getting in the way, and sometimes cause time and nerves on updates. Don’t even get me started on browsers, that make emacs go green with envy and probably should be what we call an operating system now. Thinks that used to be the thing that would just work, and even when actively developed wouldn’t break due to updates.
In other words, software even one you wouldn’t have imagined to ever have such problems ten or twenty years ago became really noisy. And now this more and more creeps into the developer’s world. Maybe it’s because it has been deemed a well-funded target group. So the classic “put LEDs on it, make it noisy and in bright colors” strategy that toy, show and hardware manufacturers to make your brand aware strategy crept into software for developers, when it mostly was an editor and a compiler or interpreter one cared about, maybe screen size. And all of them want to be or act like they are the sole purpose of running the device.
i believe the mistake this (and lots of similar articles) makes is stressing productivity rather than pleasantness. the time taken to identify and remove small, persistent annoyances or stumbling blocks might not necessarily make you more productive, but it will definitely improve your personal working experience.
Thanks for you comment. I actually agree with you, maybe I should have emphasized this more in my blog post. Optimizing / Getting to know one’s environment is only one the quality that (imo) should be developed, amongst many others. As others have mentioned some other skills are more important in the grand scheme of things.
Also that might be a bias I have: but for my experience the people that care and understand their stack are usually better engineers, because they also apply the same curiosity to their work (how many times do you meet people using interchangeably the words terminal, shell, prompt, etc?).
But seeing a bespoke setup is oftentimes a signal for talent
On the other side, given how much bespoke setups are frequently just copy-and-pasted (see also: oh my zsh or whatever usage with some Mac developers), I question this.
Then I suppose we can discuss whether using a vim/zsh/etc distribution is a bespoke setup. But I don’t want to find myself starting to argue about this :-)
You’re welcome! Thank you for the article that kicked off the lively discussion! :)
Please don’t mistake my disagreement as disparagement; I think you did a solid writeup and I applaud taking the time to both write it and also to post it here for discussion!
Is anyone on mac OS using Alacritty as their daily driver? I’m eager to get away from iTerm2 even if just because the increased sanity of my dotfiles because of the YAML configuration format instead of a constantly modified plist!
I recently switched to Terminal.app (the builtin terminal) from iTerm2 because it’s slow for no reason. I used none of the features of iTerm2 often enough to warrant using it. If you’re seriously considering Alacritty as an alternative, then switching to the default terminal would probably work for you too.
Been switching a few weeks ago, love it since then. Just note you would need a terminal multiplexer for some features (like tabs, split screen, etc). Also, you could miss the command+click facility to open a link (tracked here). Overall I still find the experience to be better than with the other terminals.
I did for a few months, using tmux. I like it for the most part (especially live-reloading of the config), but switched to kitty [1] about 2 weeks ago and haven’t regretted it. I switched because while Alacritty is (was?) faster than iTerm2, I would experience a lot of slow redraws in tmux, and some other things. I’ve found kitty to be faster. I honestly could probably just use Terminal.app at this point if I could set up some basic shortcuts correctly.
That’s either a very utilitarian view of art or a very vain view of code. IMO both lead nowhere sensible.
IMO code usually serves a purpose and so is in the realm of craft or industry. Requires constant training and tool care nevertheless but as said to serve a purpose.
That’s a very minimizing view of craft.
I have a quilt my mom made me. It’s a beautiful log cabin pattern with expertly pieced corners and a pleasing color scheme. It makes me feel happy and connected to a long artistic tradition of American quilt making whenever I walk by it. It also does an excellent job at its other purpose of keeping me warm. But it’s not a utilitarian object. The vast majority of the production effort went into the beautiful pattern on the top.
Coding is a craft, but crafts are often art.
What you describe is art in the first place, don’t be shy to see your mom as an artist when making that piece.
Crafts are never art but art often requires craft.
You prbly had contact to hundreds of thousands if not millions of craft artifacts and a single one stands out as also being a piece of art to you. The same ratio I’d like to see applied to code as art. So generally it is just not.
There is a line between design and art.
Hmm, that’s a fair take. I missed the “usually” in your original comment. Most code is not art–the vast majority of code (probably) being glue in CRUD apps. But code can be art if an artistic intent is applied to it.
Another side of this: “is code art?” often is asking whether the code itself is art. But what about code used to create art – game engine code, generative art code, etc. Is the code art? It’s sort of like asking is Foundation piecing art – well, it can be used to create art. This line of argument seems to be quickly drifting into the semantic difference in English between “art” and “an art”, though :-) Maybe “coding is an art”, but usually “code is not art”.
I genuinely think code is art. It can beautifully designed and written, and I enjoy reading beautiful code. But I understand it’s an opinionated take on the matter.
That being said, yes code is here to serve a purpose. Like books and paintings :)
as said, there happens to be art in form of books (named e.g. literature) or paintings – but a huge volume isn’t art. Like manuals, school books, maps, civil engineering plans or white-washed walls. Even quite some entertainment writing doesn’t consider itself art.
IMO it speaks for the vanity of IT to compare themselves with Picasso, Dürer or Beuys.
The ancient greeks distinguised between philosophia and techne (τέχνη). Only the latter was intended to be of practical use and was a matter of slaves. Citizens didn’t do it.
And that’s why the ancient Greeks didn’t have… aqueducts? But they did, and at least one fancy instance and a citizen designed it.
On one hand, I fully support the idea of customizing your environment and nurturing your coding experience. My problem with the piece is the opposite of everyone else’s: it doesn’t go far enough! Between my shell, my vim, and my autohotkey configs, I’ve got 50+ custom functions that smooth over my development experience. Does it suck to switch machines? Yeah, it does. Is it worth it anyway? Hell yes.
Haha I love this comment! Yes I found out that I have to limit myself in terms of configuration, otherwise it becomes hard to maintain and hard to use. So over time I trim my dotfiles to only keep the best parts (for my usage).
Can you share your dotfiles? I would love to have a look.
I’m on windows so I think only the neovim stuff will be useful to you, but i can dm you some highlights!
Yeah please do if you have a repository to share somehow.
I’m sorry … 200 freaking lines after cutting out the excess? Sorry, I’m not experienced with zsh – is it just completely useless without huge amounts of configuration?
Without seeing the 200 lines, I would assume that it’s for completions, prompts, and other niceties. After I dipped my toes into the zsh config world, I moved right over to fish where all those nice “modern” features were enabled by default.
But no. Zsh is perfectly usable with the defaults. I believe it’s the default on MacOS now.
This is what stops me from adopting anything but vscode. Endless configuration. At least vscode will sync my config
I’m curious about this, because it’s the opposite of my experience. We’ve always been a bring-your-own-editor firm and there’s quite a variety of editors in use (Emacs, CLion, Vim, Notepad++). With just a couple of commands (nothing fancy, just some cmake and conan), everyone can start writing code.
Recently, we’ve had a couple of developers come on board who preferred VS. They lost significant amounts of time trying because VS could not produce a working build without significant levels of configuration. They’d have questions (e.g. how to make a debug build) and I could tell them the cmake flag to call, but neither of us knew how to get VS to do that. One developer eventually wrote a powershell script that configured VS Code to produce a working build. They’d have to blow the directory away once a month and run the script again after VS stopped producing builds.
The thing is, I want to understand VS Code. It’s obviously a different way of looking at development than anything else out there and I’ve never regretted learning a new way of thinking. I want to experience the efficiency that you are getting out of it. However, I’ve never really found a good explanation of the VS way of working. Every guide I’ve seen has been 99% about learning the concept of coding and not really about VS as an IDE. I’ve tried just using it as a text editor (open a file, edit the code, compile in the terminal), but this wasn’t any different that Notepad++. I know that it has so much more to offer, but I’ve just never found the key to unlocking it.
you say VS in some places and VS Code in other places…. they’re two entirely different products. (and i find them both pretty hard to use, though i do kinda like the VS debugger - i just drag exes into it and thus sidestep all the project configs etc).
VS is the full IDE. VS Code is a javascript scriptable editor that can host other pieces.
We were using VS, not VS code. Thanks for catching that.
My vim config lives in ~/.config, which is a clone of a git repo, so setting it up on a new machine just requires a git clone.
Zsh is completely usable with the default configuration, as is vim, tmux, etc. 200 lines sounds a lot but if you have a look at my conf it’s only a few aliases/functions, some zsh options and some plugins being loaded. It’s actually very “minimal” in comparison to some zsh frameworks.
https://github.com/aymericbeaumet/dotfiles/blob/master/.zshrc
Honestly a lot this is like the tech worker equivalent of a gamer pc. Maybe some of it helps, most of it is just looks, and some of it is demonstrably worse.
There’s also a not insignificant element of elitist bs that goes with it. You know the sort: “oh you use an IDE? That means you’re not a real programmer”, etc
To be clear I’m not saying “never customize anything”, just that I think it’s important to acknowledge that most of this stuff isn’t inherently superior to anything/everything else.
You use an IDE? Cool. They’re not for me. Why? A few reasons.
I’ve yet to find an IDE that will work with my code (or not outright crash in ten minutes). I’ve got stories going back 30+ years on this.
I’ve been using the same editor for nearly 30 years now, and it has largely disappeared into the background and I no longer have to consciously think about using it. Again, going by what I’ve seen of IDEs over the years, is that by the time an IDE has gone invisible, it’s obsolete and you have to basically start over with a new one.
Then I legitimately do not know what you’re doing, as I and clearly millions of others don’t have this problem.
And that’s fine, no one said it isn’t.
But let’s have some serious talk. I don’t know why you felt the need to respond to my comment like this, as I didn’t say anything that implied you had to use an IDE. What I said is that this behavior of denigrating people who do use IDEs is BS, and your comment here is skating awfully close to that line.
I also have difficulties with IDEs. Now you’ve heard of two people. Maybe there’s a third person somewhere out there.
In all seriousness, you chose IDEs as an example, and invited the response. By making IDEs about elitism, rather than about velocity and convenience, you’re suggesting that folks who have difficulties with IDEs are trying to make some sort of moral statement when an IDE doesn’t work for them.
No, I said, very clearly, that acting like you’re superior to other people for using an IDE is BS. At no point, at all, did I say that not using an IDE is bad.
I think you should be asking yourself why my saying simply that using an IDE doesn’t make you an inferior engineer has resulted in you claiming that I’ve said non-IDE users are inferior.
My reason for asking you to think about this is super hard to explain as the completely normal piece of human behavior that leads to this usually comes up in situations that are vastly more important and/or sensitive than something as trivial as IDE vs non-IDE, or similarly emacs vs vim, grey vs gray, etc
[tw: this behavior/response often comes up in relation to actually important things like racism, etc. I want to be clear that I don’t consider these remotely equivalent, but just providing a heads up]
The particular, again normal human, behavior is interpreting “treating someone else as equal” when you’ve internalized that person - for whatever reason, no matter how trivial - as being inferior is interpreted as favoritism or claiming the “inferior” person is superior.
Given that common response I hope you can see how I might see your response as being related: All I did was say
and I even followed it with
So again, I never said “Using an IDE makes you better than people who don’t”. I’ve now even had other people (including at least a couple I know use emacs or other Command-line editors) make sure I didn’t say anything that might imply it as these responses made me legitimately concerned.
Before this conversation went off the rails and turned into an argument, I’m pretty sure the only behaviour that olliej meant to criticize was “denigrating people for using an IDE”. Not not using an IDE. Everyone here thinks your continued use of vim or joe or notepad++ or whatever does not make you a bad person.
Have you used any software released in the past ~8 years?
Have you heard of unixporn? https://old.reddit.com/r/unixporn/
Code completion is rather cool, but not having it means you eventually read the docs from the top to bottom. That is sometimes a win for productivity as well.
Similar to how people rush into things instead of investigation the tools that might help them finish an order of magnitude faster. Same with carpentry, spreadsheets and software development.
I don’t necessarily agree here, for a few reasons. I’ll note that in the context of the “IDE vs non-IDE” argument code completion isn’t the only thing that they do - in fact it’s relatively recent. The first thing that was integrated in IDEs was debugging, where I would argue it is simply a superior experience to raw gdb/lldb with the actual code in a separate window. Many people use plugins/scripting to setup vim, emacs, etc as an IDE for that reason. Honestly I’d argue that the debugging is really the thing that makes something Integrated - certainly it predates more or less every other feature.
Code completion itself isn’t a feature solely of IDEs - plenty of code editors support it these days, especially with the introduction of LSP which means supporting a language no longer means “re-implement that language in each new editor”. As far as the learning the API, I think it’s 50/50 in helping vs not-helping knowledge. When I was a tutor/TA (in NZ tutor would mean a person who runs/supports labs, etc whereas TA means person who helps/does lectures) I definitely saw people who would write code by code completion. But even without inline completion I’ve also seen people code via compiler errors.
But I also think code completion helps in learning an API as it is fundamentally a contextually aware interface to the API, so a user can type in some approximation of what they think an API would be called, and the suggestions let them know which part of the API they should be searching for (rather than trying to search for “I want to do X” which these days especially will take you take a bunch of stack overflow questions with variable quality of answer - honestly it was easier back when the only place talking about “do X in MyLanguage” were the actual docs and so that was what google/webcrawler/lycos returned). These days it’s even common for code completion to directly include the documentation for the API so you can get contextually relevant documentation.
That is increasingly important, as I do think that your comment about “reading the documentation from top to bottom” is simply not feasible, let alone reasonable, for many modern APIs. Hell I know many people who work on and design library APIs who would need to check documentation for some uncommon parts. Obviously you need to learn the parts of the API you would use regularly (which even the coding through completion/compiler errors folk manage, albeit [very] slowly), but completion gives you convenience for what parts you do know, and access for parts you don’t.
Maybe that’s true for some people, but for the record I personally think it’s fine to use whatever you prefer. This post is more about getting to know better the stack you prefer to use.
Some good ideas in there, but some things I’ll disagree with.
I’ve seen many developers with super-tweaked shell configs take minutes to find a file because they didn’t know how to grep for things fruitfully. They are beat out soundly by a develop with a normal shell who knows how to search for things, and that person is beat out by somebody who knows the codebase.
I’ve seen developers who have spent who knows how many hours learning special keyboard configs for super fast typing on their high-end mechanical keyboards be unable to formulate clear, direct communications or simple code and get beaten out by an old businesswoman on a gross stock membrane keyboard in Office.
I’ve seen developers talk about how to get the most out of their compilers and package managers because their time is so precious when they’ll routinely sign up for extraneous meetings and cut up on calls costing untold hours of wasted time a month.
I suggest that the last thing anybody should do as a developer, until they’ve mastered basic communication and time/project management, are masturbatory exercises in advanced coding kung-fu or figuring out how to turn their development environment of choice into a jingle truck.
At the very least, I wish developers would stop claiming that such things are critical gains in the name of efficiency when they’re leaving so much obvious stuff on the table.
I experienced a lightbulb moment when I noticed geohot (the guy who hacked the iPhone) was (at the time) using stock terminal, some editor & a web browser on stock Ubuntu.
Yeah, it’s almost like all that fancy stuff doesn’t really matter that much when compared against raw skill :)
in my first team at google there was a really smart guy who used nano - he was used to it, it did everything he wanted out of an editor, and he saw no reason to switch to something else.
An old colleague of mine always stressed that “coding is just 5% of the time, so it’s not worth optimizing”.
But we spend a lot more time than that reading code, and there’s plenty of ways to optimize that!
Actually what we want to optimize is communication because we’re trying to build cross-generational knowledge.
I also feels like it does a huge disservice to folks in the early-mid parts of their careers. I’ve met (and worked with) multiple people who diligently followed trends and riced out their terminals and editors only to somehow keep bumping up against other limitations that the snake oil from HN or Lobsters of the week couldn’t fix. We fail those developers every time we suggest that dressing in the trappings of competency is a substitute for it.
One case sticks in mind: dev had picked up one of those fancy-pants Spacemacs or vim (don’t recall the editor) configs that uses relative line numbers (you know,
-3, -2, -1, ... , 1, 2, 3
) on the gutter of the editor instead of absolute line numbers. Pairing with this person was super annoying because line numbers changed after every cursor reposition, and there was a visible lag on their end as they’d process “Okay, go to -3”. Several times I gently suggested they drop the fancier feature and go back to normal line numbers; alas, that never happened.We do these people a disservice by continuing to promote a culture where your tooling and what amount to cute tricks are of such perceived great importance.
I’m one of those crazy people who prefers configuring (n)vim with relative line numbers, since I really like the assistance when jumping to a line visible in the buffer (e.g.
13k
to jump up 13 lines.) but I have a binding that allows me to quickly toggle it off for situations like what you described.I learned a lot by using cute tricks, and then figuring out how to work around any problems with them, so I think they are generally fine. Of course some folks won’t take the time to learn this, but this isn’t a new problem specific to programming… people have been misusing tools ever since humans have been making them.
I’ve turned my entire development environment into a jingle truck, but also spent a week studying Excel and way more time studying shell scripting. I think once you get a lot of the obvious stuff out of the way, then these things do actually become critical gains.
For me this is similar with desktop environments. They first seem like they have really nice gimmicks, but then you get to see all those distractions and time sinks. When I was a teenager I loved to play with making stuff look pretty, show all sorts of stats, etc. And I’d even say it was worthwhile from a creative and tinkering/educational side.
However, I eventually ended up going down the path of little distractions. One of the first such window managers other than fluxbox and openbox was pekwm, a really early version of it. At some later point LXDE was nice, because pekwm was too minimalistic at times and eventually I settled for i3, weirdly enough, even though I never got into using it effectively, I only use it because it gives me tray icons, a clock and prevents me from constantly manually resizing the browser window. Oh and I can still easily use the mouse, cause I can be really bad with keyboard shortcuts. Despite having used it for around ten years as the daily driver it still doesn’t feel like the optimum for me. It just happened to be what worked best and now despite trying out something else every one or two years and also having a system with XFCE I rarely use I have been too lazy to switch to anything else.
Where I wanted to had with this, I think the nice way with Unix-like operating systems is that things are out of the way, yet easily available when you need them. I also think the in the last 5-10 years software started to go into the opposite direction and software constantly makes you aware of itself. I don’t just means through notifications and things like that, but simply also by trying to be in control on a system. It doesn’t matter whether we talk about systemd and all its “parts” (init, timers, supervisor, socket management, system configuration tool, NTP client, etc.), the audio stack, service orchestra tors, like kubernetes, Docker, that feels like the new tar-command paired with a package manager sometimes, or even IDEs and editors that just keep getting in the way, and sometimes cause time and nerves on updates. Don’t even get me started on browsers, that make emacs go green with envy and probably should be what we call an operating system now. Thinks that used to be the thing that would just work, and even when actively developed wouldn’t break due to updates.
In other words, software even one you wouldn’t have imagined to ever have such problems ten or twenty years ago became really noisy. And now this more and more creeps into the developer’s world. Maybe it’s because it has been deemed a well-funded target group. So the classic “put LEDs on it, make it noisy and in bright colors” strategy that toy, show and hardware manufacturers to make your brand aware strategy crept into software for developers, when it mostly was an editor and a compiler or interpreter one cared about, maybe screen size. And all of them want to be or act like they are the sole purpose of running the device.
i believe the mistake this (and lots of similar articles) makes is stressing productivity rather than pleasantness. the time taken to identify and remove small, persistent annoyances or stumbling blocks might not necessarily make you more productive, but it will definitely improve your personal working experience.
Thanks for you comment. I actually agree with you, maybe I should have emphasized this more in my blog post. Optimizing / Getting to know one’s environment is only one the quality that (imo) should be developed, amongst many others. As others have mentioned some other skills are more important in the grand scheme of things.
Also that might be a bias I have: but for my experience the people that care and understand their stack are usually better engineers, because they also apply the same curiosity to their work (how many times do you meet people using interchangeably the words terminal, shell, prompt, etc?).
This! That’s the main point of this debate for me. Not whether VS code is better than neovim. But rather, how curious are you? How much do you care?
Using a default IDE setup doesn’t mean you’re a subpar engineer. But seeing a bespoke setup is oftentimes a signal for talent
On the other side, given how much bespoke setups are frequently just copy-and-pasted (see also: oh my zsh or whatever usage with some Mac developers), I question this.
Then I suppose we can discuss whether using a vim/zsh/etc distribution is a bespoke setup. But I don’t want to find myself starting to argue about this :-)
You’re welcome! Thank you for the article that kicked off the lively discussion! :)
Please don’t mistake my disagreement as disparagement; I think you did a solid writeup and I applaud taking the time to both write it and also to post it here for discussion!
Is anyone on mac OS using Alacritty as their daily driver? I’m eager to get away from iTerm2 even if just because the increased sanity of my dotfiles because of the YAML configuration format instead of a constantly modified plist!
I recently switched to
Terminal.app
(the builtin terminal) fromiTerm2
because it’s slow for no reason. I used none of the features of iTerm2 often enough to warrant using it. If you’re seriously considering Alacritty as an alternative, then switching to the default terminal would probably work for you too.100% agree. I’ve gone from iTerm2 → Alacritty → Kitty, and as mentioned in my other comment, I could probably just use Terminal.app now.
Been switching a few weeks ago, love it since then. Just note you would need a terminal multiplexer for some features (like tabs, split screen, etc). Also, you could miss the command+click facility to
open
a link (tracked here). Overall I still find the experience to be better than with the other terminals.I did for a few months, using tmux. I like it for the most part (especially live-reloading of the config), but switched to kitty [1] about 2 weeks ago and haven’t regretted it. I switched because while Alacritty is (was?) faster than iTerm2, I would experience a lot of slow redraws in tmux, and some other things. I’ve found kitty to be faster. I honestly could probably just use Terminal.app at this point if I could set up some basic shortcuts correctly.
[1] https://sw.kovidgoyal.net/kitty/
I have been using iterm2 for years and never had to edit a plist file. What are you doing that requires that constantly?
I’m not editing it. Rather, it seems every time I exit it, something gets written to its plist file, which I’ve symlinked into my versioned dotfiles.