Will No One Rid Me Of This Turbulent GUI
All I am going to say is biased and opinionated. Everyone is free to shut up and disagree.
Graphical tools bring more harm than profit to the development process.
Don’t get me wrong, I started my professional career with Delphi32, meaning it was all RAD (a half-forgotten acronym, reincarnated as IDE years later.) When the developer is hugely unexperienced, unsure of themselves, having zero documentation on hand, and knowing nothing about anything—IDE is probably the only aide.
Experienced professional would be retarded by IDE in the same way as slow cooker helps a lone bachelor to get the stew an hour after a chef finishes a five course meal. Autotransmission is great to easier get the driver license, but F1 cars have a mechanical one.
On the long run the developer, using the console, and a basic editor providing syntax highlighting (like
vscode, or even
sublime) is more productive compared to the one struggling to produce a function without IDE. Below is the list of the most common arguments supporting IDE and my complains about.
Refactoring is Easier
It depends on what we are to call “refactoring.” All that “extract to class,” “produce accessors,” and similar stuff is not a refactoring. It’s renaming, relining, refiling, rebranding. It has nothing to do with refactoring, and IDE is absolutely impotent to help with a real refactoring, when all backward compatibility is preserved, modules are reorganized, and spaghetti gets untangled.
This is probably the only part of development process that requires intelligence, and no IDE has it. All they have is the ability to move a lump of spaghetti from one plate to another. Splitting it into context parts, setting boundaries, decoupling… All that requires understanding of the business logic, not the language syntax.
And yes, “rename function” is still easier to accomplish with a bit of
awk, or even
Autocomplete Obsoletes Docs
Bullshit. Docs are not about function signatures (that’s also why “types obsolete documentation” is bullshit either.) Docs are all about examples, best practices, howtos-and-donts, explanation of complex solutions.
Enum.sum(list) does not require docs, nor types, nor autocomplete.
Flow.emit_and_reduce/3 is something one wants to read about, and time required to understand what is the argument order is next to zero compared to what and how to pass there.
Intellisense Saves Time
If intellisense saves you a time, I’d suggest the following self-improvement techniques (from worst to best)
- learn touch typing
- memorize frequently used functions
- minimize a number of external libraries
- prefer think-then-code over code-then-see
If I were to measure the time I spend thinking vs reading docs vs typing the code, the ratio would have been 70-20-10. With this percentage, I tend to produce ten times less of unnecessary code, and intellisense might save me up to 10% of my working time, even if she was typing everything for me.
IDE Helps To Read The Code
Professional developers must be able to read the code from the paper printed in sans-serif. Monospaced font and soft syntax highlighting helps to parse it, it’s kinda typography hygiene of the code. Good code does not require the reader to jump back and forth. Shakespeare’s sonnets and novels written by Maugham do not need crosslinks, tooltips, collapse buttons and debug window to be pleasantly read. Neither does a good code.
A mediocre code would not be automagically enhanced by reading it through IDE. No way. Click-jump-click-expand-click-collapse-jump-damn-where-the-heck-am-I does not help much to understand what’s going on there. We still cannot hold many items in the short-term memory, while all these jumps and compiler output windows just add them to the table, instead of reducing complexity.
IDE Makes Working With Git A Charm
git is already a charm. GUI might to some extent help to decrease a pain needed to rebase on 142 commits, but oval wheels are not any better than squared ones, if the goal is to drive the vehicle. Small changes, decoupling, full backward compatibility, and call boundaries work. GUI does not.
Find yourself frequently running
git add -p on hunks instead of adding whole files? There is something wrong with your workflow. GUI would not help it. The effort on adding the content per hunk already smells. Dedicate a branch to one single thing, implement it, commit. Repeat.
So yeah, in all the cases when IDE seems to help the developer, she actually eliminates the consequences and not the cause. Robust code is easy to read from the phone, version-control with two plain
git commands without switches, and to type in
nano. Bad code longer stays somewhat maintainable through IDE, but sooner or later it’d inevitably blow up.
Using IDE, it’s much easier to miss that last turn to absolutely unmaintainable code. That’s why I suggest to avoid these touted luxury developers tools whenever possible.
You will have to use IDE to read the code written in IDE.
Let’s take some heavy-abstracted
Javacode as an example. IDE hides ridiculous complexity of automagic introduced by
Exactly: one reads the nifty piece of code and apparently there appears an illusion it works that simple way. It does not, unfortunately. The whole bunch of generated stuff that actually runs became totally hidden from the developer. It’s dangerous because we apparently lose control over what the code actually is.
Also there is annoying outcome of reliance on the IDE, one barely understands how to survive without it. I saw people struggling to use
SourceTreeor failing to compile the project without magic green-triangle-run button.
That means, that when one relies on GUI, they cannot automate the workflow, because a) they don’t know nuts and bolts, b) automation of GUI is much harder, and c) they think it is already solved by IDE in the best possible way.
So effectively we are comparing a supermarket (GUI) and a fishing pole (CLI). The problem is one day one will end up in the middle of the lake, with the closest supermarket in 50km. Guess, how many fishing rods would they have in their boat.
I could not agree more. Thanks :)