Knwo Thy IDE (And Actually Use It)
You might look at the programmers wizzing around, who use Vim or Emacs and think, “I must emulate the masters.” I’m a Student and Im better than you,
You are not Ken Thompson. You are not compiling code on a PDP-11 with 24KB of RAM. You are working on a machine with plenty of cores, and plenty of RAM, and on a deadline that doesnt exist.
Using a hammer when you have a nail gun doesn’t make you a better carpenter. It just makes you tired, slow, and expensive.
Stop fighting your tools. The goal of engineering is not to prove you can endure friction; the goal is to ship robust systems. To do that, you need to remove every barrier between your brain and the logic.
You need to use a damn IDE.
The Environment
Let’s talk about the “I” in IDE. Integrated.
Ive done this workflow. You have a terminal open for Neovim. You have another terminal tab for compiling. You have a third one for git commands. You have a browser open to read documentation. You are Alt-Tabbing while caffinated.
Every time you Alt-Tab, you pay a cognitive tax. It’s a micro context switch. You lose your place in the code to check the build error, then you have to visually reacquire your cursor position, then you have to remember what variable foo was supposed to hold.
An IDE is a cockpit. Everything you need to fly the plane is on the dashboard.
When I use Visual Studio (or CLion, or even a fully-decked-out VS Code), I don’t leave the window.
- The build system (CMake, MSBuild) is handled.
- The errors are underlined in the editor, in real time, before I even hit compile.
- Git blame is right there in the gutter.
- I can jump to a definition with a click, not a grep command.
“It takes 5 seconds to load!” so what? You end up spending 4 hours a week configuring your init.lua to get a slightly better color scheme not on better tooling.
I either spend those 4 hours making my NeoVim, open lazygit in editor, or codeformatting to workbetter, or I spend 5 seconds loading my IDE once a day, and then I have zero friction for the next 8 hours with either choice. Do the math.
The Debugger
If you take nothing else away from this rant, take this: If you are not using an interactive debugger, you are essentially guessing.
This is the single biggest skill gap Ive seen.
Printf debugging is a lie.
When you insert a print, you are changing the memory layout of your program. In systems programming, that alone can hide a race condition or move a segfault. More importantly, print only tells you what you thought was important enough to print. It confirms your bias.
A real debugger the kind integrated into an IDE is a scientific instrument. It allows you to freeze time and inspect the entire universe of your application.
The Call Stack is Your Map
When your code crashes, print tells you it crashed. The Call Stack tells you how you got there. In an IDE, you can click through the stack frames. You can see that Function A called Function B with a null pointer, which passed it to Function C which finally exploded. You solve the mystery in seconds, not hours.
Watch Windows and Conditionals
Stop stepping through loops hitting “Next” 1,000 times. IDEs allow Conditional Breakpoints.
“Pause execution ONLY when index == 499.”
Boom. You are exactly where the bug is.
Then, you look at the Watch Window. You don’t just see the variables; you can evaluate expressions. You can cast memory addresses to structures on the fly. You can see the graph of your objects.
The Register and Memory View
An IDE gives you a hex dump of the memory at any address. You think your struct is packed correctly? Look at the bytes. You think the compiler optimized out your variable? Look at the CPU registers (EAX, RBX, RIP).
I have solved bugs in 5 minutes using the Memory View in Visual Studio that other mates spent 3 days trying to fix with logging. I wasn’t smarter than them. I just had a microscope, and they were using a magnifying glass.
A debugger is not just a tool for fixing things that are broken. It is a tool for exploring how the machine executes your code. If you don’t know how to step through assembly instructions in your IDE, you don’t really know how your code works.
Real World Deliverables
Here is the hard truth: Nobody cares about your config.
Your boss does not care that you achieved 100% transparency in your terminal. The client does not care that you wrote the networking layer using only keyboard shortcuts. The user does not care that you use Arch Linux (btw).
They care about the binary. They care that it runs, that it doesn’t crash, and that it shipped on time.
Meanwhile, I’m next to them, using a default installation of Visual Studio with the light theme (the horror!), and have completed my tasks for the day.
Professionalism is about predictability. It’s about minimizing variance. Relying on a fragile, custom built development environment introduces variance. Using an industry standard IDE eliminates it. Its industry standard for a reason.
When you join a new team, if you can’t build the project because your custom environment lacks the specific dependencies the rest of the team uses, you are a liability. If you can’t debug a crash dump because you don’t know how to load symbols in the IDE the team uses, you are useless in a crisis.
In the Real World, all companies care about what value, you bring to them and if thats being unable to use the tools they provide you, your not staying very long.
Universality
This is the the most stupidest thing, I hear the most. “If I learn Visual Studio, I won’t be able to code on Linux!” or “If I use IntelliJ, I’ll forget how to write code!”
Nonsense.
The concepts are universal.
- A “Solution Explorer” in VS is a “Project View” in IntelliJ.
- “Step Over” (F10) and “Step Into” (F11) are the same concepts in GDB, LLDB, and WinDbg.
- A “Watch Window” is universal.
Once you learn the workflow of a heavy IDE, how to navigate code by symbol, how to refactor by reference, how to inspect memory you can switch tools in a weekend. I code in Visual Studio on Windows, CLion on Linux, and Xcode on macOS. I don’t struggle because I know what I’m looking for. I’m looking for the “Build” button and the “Debug” button.
If you know why you need a disassembly view, finding it in a new tool is just a matter of Googling “Disassembly view shortcut [IDE Name].”
Just Do It
- Pick a heavyweight IDE. Visual Studio (Community is free), Any Jetbrains IDE (free for Students), or even VS Code (If you configure 42 more plugins).
- Do not touch the configuration. Use the default font. Use the default colors. Use the default keybindings.
- Learn the debugger. Do not use
print. If you need to check a value, set a breakpoint. Learn the hotkey for “Step Over” and “Step Into” until it is muscle memory. - Configure. Now that your useful and can get workdone. Now you can configure to your hearts content.