Code Completion Considered Harmful
At least, for me.
Here’s why:
I’m working on a project to interact with a complex COM-based Windows DLL. There is some decent (not great) documentation of the deeply-nested object model used by this DLL. So, to get started, I decided to prototype in VB.Net. I figured that the IntelliSense in the Visual Studio IDE would help me get the nested properties right.
A few hours into it, I realize I’m not thinking anymore. I’m not even trying. Instead, I’m typing something that might be close, then scrolling through the list of properties. I pick one, type a dot (.), then repeat. It’s “programming by poking around.” And it’s wasting my time. (Sigh.)
Here’s the truth: I don’t really know what I’m doing with this DLL’s object model (yet). I have a vague idea, but rather than read the documentation, I jumped into it. “Git ‘er done!” After all, “it’s just a prototype,” right?
Wrong. It’s a learning experience. And the best way to learn to ride a bike is to throw away the training wheels.
Four years ago, I was forced to throw away my statically-typed security blanket and code-completion training wheels. I kicked and screamed like a baby. But, I started to mature as a programmer. I became better, by using tools that were worse*. It might stand to reason that I’m better now in VB.Net after learning Python…if I didn’t have to constantly fight the warm, cozy lull of the IDE as it tries to put my brain to sleep.
Finally, a question, esp. for Managers. Which would you rather have: better tools or better programmers? (Hint: the latter will save you a lot of money in the long run.)
*Incidentally, this works with music, too. Get good on a piece-of-junk guitar, then trade up for a Strat.
A friend commented on another venue:
I hear you, my friend. I used to love IntelliSense and the Microsoft Visual Studio IDE. I really did. They do still help me with the extremely verbose syntax that is necessary with deeply-nested object models and meaningful-but-long type and variable names.
It was despite my deep emotional attachment to code completion that I was forced to learn Python. I complained until my boss bought me Wing IDE, which has the best code completion for Python, IMHO. But after a while I realized I could write better code without code completion. So I don’t even use Wing IDE much anymore.
And, as always, thanks for your honest feedback.