GUIs are bloatware. I’ve said it before. However, rather than just complaining about IDEs I’d like to provide an understandable guide to a much better alternative: the terminal.
IDE stands for Integrated Development Environment. This might be an accurate term, but when it comes to a real integrated development environment, the terminal is a lot better.
In this post, I’ll walk you through everything you need to start making your terminal a complete development environment: how to edit text efficiently, configure its appearance, run and combine a myriad of programs, and dynamically create, resize and close tabs and windows.
I don’t agree with the initial premise, but an interesting article nonetheless.
As a developer, the only GUI program I usually use is a text editor because I like using the mouse for selecting text and tabs. But even then, I’m intentionally not picky about my text editor. I usually use Geany, but Kate is fine. On Windows I usually use the Programmer’s Notepad, but Notepad++ is fine too. On Haiku, PE is pretty nice.
I also turn off syntax highlighting pretty often, and sometimes use languages like Mercury which have pretty limited syntax highlighting support (choosing erlang or prolog highlighting would kind of work).
I find that IDEs don’t really increase my productivity, and at worst they make you very tolerant of crappy code. If you need to use Intellisense to remember function names or argument orders, then you have a serious consistency problem, or a serious naming issue. If you can’t remember what directories or libraries things live in, then you probably should sort it out so that it has a logical structure.
FlyingJester,
It’s more about never relying on memory. Memory is fallible, regardless of how consistent an API is. We’re not in university any more. We shouldn’t place value on being able to remember minutae if we don’t have to.
Or, sometimes you just want to jump to a file directly without having to go through your perfect directory structure.
> It’s more about never relying on memory. Memory is fallible, regardless of how consistent an API is. We’re not in university any more. We shouldn’t place value on being able to remember minutae if we don’t have to
For API’s you aren’t constantly using and/or core language functionality, yes, that’s a reasonable argument. However, I’ve run into developers before who are _so_ dependent on auto-completion and hinting from the IDE that they couldn’t even write trivialities like a ‘Hello World!’ program in their preferred language without either the IDE or the core language documentation. At that point, the IDE is a problem, because it’s limiting their ability to understand the code correctly.
Note that I’m not saying it’s entirely a bad thing to have the help, _once_ you actually understand the language properly. It’s not unusual at most of the top universities for computer science here in the US for undergraduates to be using an IDE _from day one_ in the class, which leads to potential issues like the above mentioned case down the road. The first coding class I took in college, almost two thirds of the class failed the first written test because instead of writing out the full code required for the problems, they wrote out the auto-completion shorthand used to produce the required code in the IDE the instructor was using for teaching.
I think something like intellisense for an API you are trying to connect to is probably useful other than that, never had much use for it.
ahferroin7,
That to me is more an indictment on the method of assessment. Just like bad job interviews. No one writes code with pen/marker on paper/whiteboard. Those tests show nothing about ability or understanding.
On top of that, typically, one works on code that somebody else has written/maintained originally…
zima,
I’m currently working with a mixed C and C++ codebase where namespaces are not allowed, and so all C functions have prefixes upon prefixes upon prefixes. Not even the people who’ve worked on it for a few more years than I have know much about the C code base, it’s that big.
Intellisense is great in that I can type the actual function name and the engine can fill in the prefix for me. On top of that, the engine also does relaxed matching so I don’t have to even type in the full words.
I’ve been using CDE on linux since it was possible to build it. I haven’t found a better Desktop Window Manager. It runs fast on my Lenovo x220 and I also use it on my Dell 7730 (12 cores with 64GB ECC ram) workstation not for performance (obviously) but because it is so nice to use.
My 2c.
I can totally understand the authors perspective, if I was working very narrowly focused like real time OS or intrinsically safe development I’d be acting in this manner as well. But now I’m not sure there is a right way, the ecosystem is diverse and it’s clear one size does not fit all!
It’s interesting as more traditional OS platforms become IoT platforms I wondering if this attitude will persist. So much is cross discipline and diversity that many spend little time learning or developing on just one platform for one platform or the other. Things move too fast, you’re possible redundant before you have finished just trying to keep up. I suppose that is an argument for and against GUI, it seems ironic.
Are IDEs still ubiquitous or are they becoming so diverse it seems futile to try and make one size fits all. Even so do we really need to manage our efficiencies to such a degree, or can we just get on with designing first and worry about implementation efficiency later? So many small fragments now I’d probably take the IDEs for rapid development early, then employee someone like the author to fine tune specific features and functions later. This is a huge change for my older colleagues, those who still like to do it all on a single traditional platform.
Termux on Android rocks. Especially when all the additons on an rooted device.
Anyone that says this must not in any way, shape or form know or care about human computer interaction, ease of use or accessibility.
These are all very important aspects of computing, especially since a lot of computing that is not for automation (or dare I say all of it?) require a GUI and windowing system, which also requires a GUI.
@Poseidon, yes I agree.
Also what about all those sensor and report developers that get involved with a lot of short term applications and projects, Projects that have probably expired by the time the efficient terminal / cli equivalent is debugged and running. It’s not always about beauty, efficiency and thrift, sometimes the priorities of the purpose are elsewhere.
It sort of reminds me of the Compiz bling debate and arguments about the futility of cubes, is art superfluous? Such things seem to frequently address major PEBKAC issues that no command line can!
What is the CLI equivalent of the train drivers dead man switch?
Yup …and even https://9p.io/wiki/plan9/mouse_vs._keyboard/index.html
I am not entirely sure I am going to trust the opinion of someone who uses an alternate capitalization scheme for Vim
I don’t think the author’s opinion is invalid or untrustworthy, but I do think it is very narrowly focused. I never understand those who rally against variety, or those who call for greater standardization.
If we had only one Terminal we’d be in even bigger trouble than if we had only one GUI IDE, I suppose we are heading that way with Chrome, coincidentally also discussed in a recent article.
Is variety both immunity and survival?
I wonder, is forcing yourself into the neutrality of a CLI the equivalent of reading an eBook using Sans Forgetica?
Having a Mac, only using it for terminal stuff and complaining about GUI bloat is a special kind of irony..
That, and what’s with the weird capitalization of Vim? He’s stylizing it “vIM”, putting emphasis on the IM, but the root is the VI as it’s based on “vi”. On vim.org it is stylized “Vim” and they would be the authority.
Still it’s a good tutorial for setting up a terminal based development environment.
The author is a hypocrit that also seems to confuse GUI and IDE. A few examples:
* He says you shouldn’t rely on IDE’s because they might not be installed on every system and then immediately continues by describing the programs that you should install, and how to configure them, in your terminal starter pack.
* He mentions that you should avoid plugins unless you need them and then starts listing a whole bunch that are nice for him, but not needed or even a silly Chuck Norris quote plugin
* He also clearly uses at least a browser (with a GUI) continuously for researching how things work
I agree with many of his ideas about the benefits of a terminal, piping commands from tool to tool and having a good understanding of what is actually going on on the machine. But I also greatly appreciate a GUI/IDE for most tasks. They allow you to work more free-flowing instead of the forced structures of a terminal. File Management with Total Commander is far more efficient to me than via the terminal for example. Just use the right tool for the job
How do you know that he uses a browser with GUI?
That is logically infered from this article where he talks about IE6 being greatly improved when tabs got added and by other articles/talks* from him that do mention the “do one thing and do it well” philosopy but don’t mention terminals at all. He seems quite heavily focussed on front-end development and that requires testing in a GUI browser
* https://www.lucasfcosta.com/2017/07/17/The-Ultimate-Guide-to-JavaScript-Fatigue.html
The first link is broken, it needs to point to; https://www.lucasfcosta.com/2018/08/05/In-Praise-of-Plaintext.html
It is also broken on the author’s own site (at least when I checked), so I think that error just got propagated here
I like using the terminal. I have even used the Linux tty for while, probably a few weeks or months (I do not remember). But the tty does not support Unicode and web browsing with Elinks is a bit limited in today’s JavaScript-dependent web. However I could still watch Youtube and read PDFs and view images thanks to framebuffer applications when using the tty.
However besides web browsers, llpp, mpv and Calibre I still use the terminal for almost everything. And even when I use graphical applications I almost exclusively use the keyboard. I use Vim Vixen for Firefox and access Calibre via Firefox and the command line.
This is about gesture vs text interfaces. I was a hard core user of spreadsheets when they switched from text to GUI. The text interface was far more productive. Voice control is a text interface, so it may come back in that way. Alexa, Cortana, Siri and OK Google are basically text terminals. Google is not going to be very cooperative as text adds won’t be as lucrative. Amazon is in good shape for this world.
The only problem with your comparison is that a CLI always responds the same way when the identical command is entered. With these voice interfaces, it’s even odds on whether they’ll do what I said or whether they’ll try to infer what I want, fail to get it right, and claim they don’t understand me instead. Not nearly as reliable as the CLI.
I agree. They give new meaning to the term “dumb terminal”, especially Siri!
The author lost me when he suggested disabling the arrow keys. Usually when I’m in vi[m] the letter keys for navigation instead of arrows. After all my hands are in the home position. But he doesn’t state why he disables them. I don’t see having them enabled as being a problem – more like a plus…
The problem is, looking at his screenshots, I see a very organized interface using split screens and tabs, with an editor window and a process monitor, and I’m thinking… how is this not a graphical user interface? It may not be using GTK or QT, but it’s almost certainly using curses, or something like it.
All he’s really doing is compressing his work into a single terminal window, and making his life more difficult to achieve it.
When I’m developing, I tend to have a terminal window (usually more than one– one for code testing, one for file viewing), an emacs window (because vim is nice, but all that work to make vim do what emacs does naturally is just mental), and a browser page for reference on the other screen. I usually navigate with the keyboard.
Yes, I could do everything within a single terminal window… I could also do development with vi on a decwriter hooked up to a PDP-11, but why would I limit myself? Use the right tool for the right job, and quit being pretentious.
The author claims IDEs hide the details that are essential in understanding problems and doesn’t like that they use plugins to achieve tight integration. The author then makes it abundantly clear that he doesn’t know how to use IDEs and then follows with a list of his favorite terminal plugins, almost all of which bring it closer to the operation of a GUI/IDE but get him only about 10% of the way there.
Working on automotive industry. Every microcontroller (MCU) vendor usually provides their own development tools which again most of the time are Eclipse based. However Eclipse is unfortunately not great tool for C development. On Windows 10, the indexing functionality drives me insane. Every time I hit “save” the re-indexing of the whole project is started. Indexing cannot be turned off as you then will lose all code references and the whole project turns red.
Ultimately abandoned Eclipse and switched to Vim and haven’t looked back.
What I lost with that move, was the ability to have interactive debugging session as the MCU vendor has included Eclipse plugins that can talk to MCU for step-by-step code debugging. Some MCU-s offer also alternative ways but others don’t. Fortunately the code I am working with is reliable and I don’t need to step through the code to debug it. In fact in certain cases you even cannot debug the code as that would stop the microcontroller and would leave the hardware in a state where it could be destroyed in a very short amount of time (we are talking about the fraction of the seconds here).
So I’ve developed a workflow where I use Vim to code,, then CMake to build and use vendor tools to flash the program onto hardware and then use oscilloscope to ensure all the signals are as needed.
Guide to terminal…. I was like “Why on earth use an old terminal, hooked up to a server through the network”. And then I realised that he meant using a terminal program on a GUI, wich he said that he was not using, because GUI are a bad thing. This article is so confusing and contradicting in it’s own twisted and bizarre way.
I like a mix of both, I use an IDE with syntax highlighting etc. and I always have a terminal open for quickly getting various things done.
From the author: “In an IDE you can only use plugins made specifically for it, in a terminal you can use any program. An IDE limits you to the extent of what their creators envisioned you would want to do.”
And then they continue to extend their text editor into an IDE.
I honestly don’t care what editing environment anyone chooses to use. You can use Eclipse if you feel it makes you write better code. And while the whole “Editor war” between vim and emacs is often presented as a joke, I often wonder if everyone really sees it in that way. I’ve never seen anyone adamantly declare emacs to be superior to anything, but I commonly see people spouting vim as the One True Editor. They act like if you can’t use vim, you are a lesser being. Take, for instance, how the author insists that you *absolutely must* disable the arrow keys. I can’t for the life of me understand how people think moving your hands to the arrow keys is any less distracting than constantly having to switch out of editing modes with the escape key.