
Does Visual Studio Rot the Mind? (2005) - pcr910303
http://charlespetzold.com/etc/DoesVisualStudioRotTheMind.html
======
arsome
> In order to get IntelliSense to work correctly, bottom-up programming is
> best. IntelliSense wants every class, every method, every property, every
> field, every method parameter, every local variable properly defined before
> you refer to it. If that’s not the case, then IntelliSense will try to
> correct what you’re typing by using something that has been defined, and
> which is probably just plain wrong.

Maybe I'm spoiled by Resharper and similar, but I feel like this statement is
wrong now, given the buttons for "generate property", "generate class",
"generate method", etc. I often just start using a variable and then click
generate to make it exist.

Especially in the C++ world where it means editing a header file, rewriting
the type, duplicating the function prototype, etc this is a big time saver.

~~~
Matthias247
Keep in mind that this is 15 years old. Intellisense and the whole compiler
were quite different back then. And it often not possible to hold a ton of
things in memory - like modern IDEs do it with easy.

------
ivan_ah
Anecdote from this week: I've been working on a Python project that uses
several classes and subclasses, with code paths that move around a lot through
the class hierarchy. I was trying to add some functionality but kept getting
bogged down trying to make sure all the subclasses implement the same
interface, using Atom as the text editor.

Then I installed PyCharm and completed the task in just a few hours thanks to
the "find uses" and jump to definition functionality. I was also able to
refactor some less-than-good variables names. I've always hated IDEs for
personal projects (to avoid mind-rot), but now I'm starting to think for large
enough projects you just need an IDE.

The only drawback I see is a few millisecond lag on all actions. Every time
you scroll, or clock on something there is a lot of things going on in the
background, vs. Atom which feels near-instant.

~~~
apetresc
You definitely don't need to go to a full IDE just to get find-definition and
find-references. Those are basic features of any ctags-enabled editor, and
nowadays with the momentum behind LSPs you get carrier-grade versions of it
without even needing to generate a tag file. (In fact, Neovim's next version
will actually _ship_ with an LSP client, you won't even need an extension for
it).

I just bind 'gd' and 'gr' to go to definitions and references, respectively,
and I'm good to go in vim.

~~~
dleslie
Emacs has dumb-jump, which is just... Fantastic. Absolutely fantastic.

It doesn't perform any deep semantic analysis; it just abuses whatever
existing grep-like tools you have and a bare minimum understanding of the
language syntax to find likely correct definitions.

[https://github.com/jacktasia/dumb-jump](https://github.com/jacktasia/dumb-
jump)

~~~
TeMPOraL
Holy hell, it's the missing companion for Hippie Expand! For non-emacsers,
hippie-expand completes the word you're typing by throwing a bunch of
heuristics at it, most notable of which is "search this and every other opened
buffer for the last few things before the cursor, and see if this produces a
completion".

(A funny side effect of this heuristic is that it essentially behaves like a
Markov chain. If you have it bound to a key, say M-/, then you can type a
starting word and repeatedly press "M-/ Space", and it'll start generating
text based on what you have in your open buffers.)

[https://www.emacswiki.org/emacs/HippieExpand](https://www.emacswiki.org/emacs/HippieExpand)

------
MarkSweep
While some of his complaints now have solutions[1], when WPF (previously known
as Avalon) is used with care, the resulting XAML is much more diff-able and
code-review-able. The CodeDOM serialization method is dense and small changes
can cause huge code diffs.

On the other hand, WPF is a lot more complex than WinForms. There are a lot of
different ways to use, many of which involve data binding that is not
evaluated till runtime. There are ways to make some databinding type-checked
at compile time, but it is not built in. WinForms data binding is pretty
limited, so generally it is easier to track down what piece of code is causing
something to display on the screen.

WinForms (and the Win32 resource scripts that can before it) are more limited
in what they can easily express. So the resulting UIs tend to be a bit
visually and behaviorly similar. This is nice for devs because you have a
design already laid out for you. It's also nice for users since the apps are
more consistent and predictable. WPF gives you a big blank canvas where it is
hard to make something look decent. And enables making your app look
completely different than anything else.

So in conclusion, I agree that WPF enables more understandable code to be
created by people who care. Unfortunately it is often to used to add a bunch
of needless complexity.

[1]: For example, the GenerateMember option in the WinForms design can be used
to suppress generating fields for controls.

~~~
tonyedgecombe
Every couple of years I take another look at WPF but it always feels like
wading through treacle for me. I'm so much more productive in WinForms.
Perhaps if I dedicated a year to it I might come out the other side a
productive WPF programmer but I have my doubts.

~~~
zubspace
I'm in the same boat as you. The windows forms designer is such a joy to use.
But as soon as you need to add special behavior to some controls it can get
quite hairy. I've never encountered a complete roadblock, but we have a ton of
code for windows forms controls which look more like workarounds or cheap
hacks. But hey, it works.

I also like the consistency of windows forms. This is awesome for
administrative and business users, who just want to get their work done. There
are no UI surprises. But your tool will look like an ugly duck, if it is used
in an environment with shiny Web and WPF applications.

For this reason alone, we had to make a split between forms and WPF
applications. Windows Forms for administrative UI, WPF for end users. (By the
way: I recommend outsourcing the design part to another company specialized in
WPF design. Designing nice WPF UI is a black art.)

There's also the fact that Microsoft calls forms legacy tech, but I'm not yet
too concerned. I would be more concerned to rewrite all WPF application with
the next shiny framework coming around...

~~~
wayneftw
Have you ever tried any of the Metro styled WinForms component kits?

[https://www.google.com/search?hl=en&q=metro+styling+for+winf...](https://www.google.com/search?hl=en&q=metro+styling+for+winforms)

Styling WinForms to look the way you want is certainly possible, but I would
agree that it's even more of a black art than designing a WPF UI.

------
sytelus
_" Twenty years ago, in November 1985, Windows 1.0 debuted with approximately
400 documented function calls.5 Ten years later, Windows 95 had well over a
thousand.6

Today we are ready for the official release of the .NET Framework 2.0.
Tabulating only MSCORLIB.DLL and those assemblies that begin with word System,
we have over 5,000 public classes that include over 45,000 public methods and
15,000 public properties..."_

This is our constant struggle in the modern world where the complexity is
simply outstripping the capacity of the human brain. It's happening in
physics, biology, genetics... Some authors question why we need all this
complexity? Isn't complexity bad? I'm forming a view that the complexity is in
fact necessary and we try out best to minimize it but beyond a certain level,
it's simply isn't possible to get rid of it. This is only accelerating.
Classic physics was easy to understand but all the advances have made physics
(and other fields) slowly inaccessible to a larger and larger population
without going through intense add-on multi-year narrowly scoped learning. It
seems we are at the point that to comprehend the latest in quantum mechanics
you need yet another 16 years of learning after you already had 16 years of
high school+college. In other words, time to climb the knowledge pyramid
doubles approximately every 100 years. By that speculation, in year 2100 the
knowledge pyramid might have grown so big that to reach top might need 48
years! At this juncture, it might become apparent that the human life span is
simply not enough to climb the knowledge pyramid starting from the basic
arithmetic to the latest and greatest in physics anymore. We reach tipping
point where biological limitation of life spans, memory capacity, recalls and
search become truly limiting. I think this is where AI would be super
important. From that point onward, we will need to rely on machines to tell us
the simplified, intuitive but inaccurate version of the truth that we can sort
of comprehend with our limited hardware, like automated machine-generated
1000+ steps proofs. That would be an interesting world.

~~~
GuiA
No. Reaching the top of the knowledge pyramid in your subfield over time has
remained constant (typically in your early to mid 20s, as you complete your
PhD).

We have more sub fields, but that’s not particularly a problem - once you’re
an effective researcher, jumping branches - and even trunks - is far from
impossible. A few months surrounded with talented people and dedication is
typically enough - eg my grad school advisor, a CS HCI professor, got into
genomics when meeting his wife and went on to publish, as first author,
genomics papers in nature.

See also the recent rise of machine learning - many of the top contributors to
that field were not doing machine learning research 10 years ago.

Similarly, motivated high schoolers now learn things that you needed a PhD to
tackle 100 years ago.

Knowledge is weird and non linear, and as humans we have many super powers: we
stand on the shoulders of our predecessors, we build better ways to preserve
knowledge, to share it, better ways to teach, better ways to test our
theories, etc.

It took thousands and thousands of years of man hours of work to get us to
basic calculus, something that a motivated high schooler can get very
comfortable with in a few weeks at most. The most educated Roman citizen would
take a bit of time to compute something as straightforward as (8238*2949),
which is now something you expect elementary school students to compute in
minutes at most.

If we could jump in time 100 years in the future and see what 18 year olds
know and can do then, we’d probably be blown away.

~~~
anthk
>See also the recent rise of machine learning - many of the top contributors
to that field were not doing machine learning research 10 years ago.

Machine learning is older than you think.

~~~
pure-awesome
The previous commenter was not saying that machine learning didn't exist 10
years ago. They were saying that "many of the TOP CONTRIBUTORS TO THAT FIELD
were not doing machine learning research 10 years ago."

There are also people who were doing machine learning 30 years ago and are
still doing so. But there are people who were doing, say, fluid dynamics
simulations 10 years ago who self-taught machine learning, and are now making
significant contributions to machine learning, by transferring their knowledge
of programming, optimization, calculus, etc.

------
rafaelvasco
On the contrary. For me, good intellisense just makes coding flow better. If
you're just getting your feet wet with the API, auto complete greatly helps
you discovering the API. If you're already a veteran, coding just flows at
lightning speed as long as intellisense correctly predicts what you want,
which is the case "most" of the time.

~~~
irishcoffee
It’s been a few years, but for c++ on a large codebase I vastly prefer
qtcreator. Intelligence regularly hung while doing some background rescan. It
was infuriating.

~~~
rafaelvasco
Yeah, Visual Studio is more of a C# IDE than a C++ IDE I think; I don't code
in C++ but if I did I'd never pick VS; Of course C++ is a vastly harder
language to parse compared to C#;

------
EvanAnderson
I enjoyed the article, but I _really_ want to hear the 1991 talk that he gave
at the Boston Computer Society meeting re: early Windows development, OS/2,
and the Microsoft/IBM split. I'm sure it's lost to the mists of time, sadly. I
had no luck finding it doing some quick searching.

~~~
hootibles
His email address is on his website... Maybe you should drop him a line. He
might still have slides or notes.

~~~
duncans
Slides back then were acetates on an overhead projector ;)

~~~
julienfr112
You mean actual slide ?

------
taneq
> You must define all variables before you use them. No more skipping around
> in your code.

I skip around all over the place, but I almost always throw in a definition
for a variable at the point where I first decide to use it. Maybe that's why
Intellisense never annoyed me.

As for the question of whether power tools like Intellisense rot the mind: No.
What rots the mind is staying within your comfort zone instead of trying new
things and challenging your capabilities. Power tools just let you tackle
bigger challenges faster.

------
kasperset
Very nice flowing article. I think this quote feels ever prescient, "What the
Internet seems to do best is make commonly available enormously vast resources
of mis-information that we never knew existed."

------
blobs
> I’m prevented from ever achieving a fluid coding style because the coding is
> not coming entirely from my head. My coding has become a constant dialog
> with IntelliSense.

This.

Code should live in your head. You shouldn't need intellisense to see that a
property doesn't exist in an object. I hate code completion, most of the time
it gets in the way of your thought process. Even if it can gain you a little
speed increase, it still is better to write things down for your 'codebase
memory'.

That's why I despise the current web development stack. You need Typescript,
otherwise you might make a mistake with types? Never had that problem in the
past. And just like typo's I make mistakes a once in a while, but that's OK
because it helps me to learn the codebase better. You need a linter? Same
story, it's always in the way as if it is more capable than me writing code.
Prettier? It automatically formats your code, so the codebase doesn't resemble
the one in your head anymore.

I know it does work for some people and I can totally imagine that for a
beginner developer it can make the difference, but for me it doesn't. In the
current/modern web stack I feel like having brick walls everywhere around me
and my code is definitely not getting better from it, I'm just constantly
struggling with all those 'handy' and 'necessary' tools while my code memory
deteriorates. Even worse is that on almost any project I professionally work
on requires all those tools, not using them makes me an amateur, even in the
eyes of junior dev's.

I believe in writing every character of my code and testing it thoroughly, I
wrote many bug free codebases with it, that's my experience.

~~~
stinos
_You shouldn 't need intellisense to see that a property doesn't exist in an
object._

So what do you do instead? Not just for intellisense but all other possible
code completion solutions? Does that mean you always manually open a source
file and look for the name of the function/member/whatever you need, then
either copy/paste or manually type it? And try to remember all of them to
avoid having to do that process again? I've done that from time to time and
still do but it's just slower than intellisense and the likes, always.

~~~
danielbarla
Clearly, you just memorise / know everything. Jokes aside, there is a balance
to be had between having to look up trivial, everyday things via intellisense,
and expecting people to know every single method on a massive set of
libraries. I'm always surprised by people who claim that the latter approach
is a good investment of their time and mental capacity. At some scale, it
simply cannot be optimal.

~~~
vsareto
>At some scale, it simply cannot be optimal.

Time spent memorizing APIs is time that could be spent learning new problem
solving techniques or interesting algorithms.

These folks have bad opportunity cost assessments. There's always some piece
of knowledge more useful for memorization than an API function.

------
jstewartmobile
Charles wrote probably one of the best explain-the-computer-to-grandma books
ever:

[https://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_C...](https://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_Computer_Hardware_and_Software)

~~~
retsibsi
One reason it's so good is that while it would (I think) work for the
stereotypical grandma or curious youngster, it's also really interesting for
readers who aren't complete novices. It assumes no pre-existing knowledge, and
it starts quite slowly, but by the end I reckon anyone who isn't a CS grad
will have deepened or solidified their understanding.

------
muststopmyths
Petzold's books on Windows GUI programming were pretty much the Bibles if you
wanted to understand how stuff worked under the covers of Visual Studio's
designers/codegen.

Great author from the perspective of someone how needs to know the innards,
not just churn out code.

~~~
charlieflowers
His book "Code" is an amazing exploration of how computers work. One of the
best books I've ever read.

~~~
retsibsi
Seconded. He did an amazing job of combining accessibility and depth. The book
opens with, iirc, the scenario of two neighbouring kids who want to
communicate with each other from a distance -- how can they encode and
transmit their messages? And it builds gradually and logically from there to
an explanation of how the incredibly complex behaviour of computers can arise
from truly simple building blocks.

(Another approach to the same topic, and also excellent, is Nisan and
Shocken's _The Elements of Computing Systems_. That was the first one to
properly demystify computers for me -- until then, they were basically magic.
I imagine _Code_ would have done the same if I'd read it first.)

------
jodrellblank
> I don’t know what rule you go by, but for me it’s always been simple: “Three
> or more: Use a for.” This is why we have loops. This is why we are
> programmers

Walking away from stage, he probably thought “I should have said, ‘programmers
count 1, 2, 3, _for_ ’”

~~~
retsibsi
L'esprit d'escalier by proxy, 15 years after the fact... I like it :)

------
moomin
I think the thing with this article is that it was right, but also that
Microsoft finally accepted it was right. There’s no fixing WinForms, but more
modern Microsoft technologies no longer work “designer first”. My VS plus
Resharper can happily be used to develop from top-down or middle-out.

Basically, VS didn’t make programmers dumber, but it definitely made their
code worse. And Microsoft eventually started paying attention to the people
who were telling them that (probably because some of them were also saying
they were switching to Java).

And no, I’m not smarter in environments where I don’t have IntelliSense. I
just have more tabs open.

------
helsinkiandrew
This kind of mind rotting is everywhere - lists for a few shopping items,
using GPS for a simple route you should be able to remember after looking at a
map, reminders for important dates, using a calculator for a simple sum.

I'm sure humanities over reliance on mental aids will increase Alzheimers like
mental deficiencies as we age.

~~~
GarvielLoken
Until the Butlerian Jihad my friend

~~~
tartoran
Whats the Butlerian Jihad?

~~~
GarvielLoken
It was an event in the Dune timeline where humans overthrew their machine
overlords and vowed to never build machines in the lines of the human mind and
never become dependent on machines or mechanical thinking again.

------
markus_zhang
On my side I refuse to work if auto complete doea not work in a SQL editor. Am
I supposed to remember every column? Of course his focus was on languages like
C++ but I still think Intellisense is indeed the best thing for coding
productivity. However coding is different from programming so that's a
different story.

~~~
LandR
> However coding is different from programming so that's a different story.

Exactly this, coding is just typing. I've already solved the problem and now I
need to write the code to implement it. At that point I want all the help /
typing assistance I can get.

------
dang
A thread from 2008:
[https://news.ycombinator.com/item?id=387495](https://news.ycombinator.com/item?id=387495)

------
ak39
This was prescient back then. Because the Visual Studio mindset was all about
patterns and conforming to patterns, the IDE behaved as though you were only a
patterns-based programmer. It wants to force you to follow _their_ patterns.
And in that, the VS juggernaut of code-generation has enlarged so colossally
that you need only start a new REST API project to see the mind-numbing
amounts of DTO objects and code required for layer after layer of
interfaces/controllers etc for a single dataset.

If a single dataset from a single table in your SQL Server database requires
so much code, isn't it time we rethought the _concept_ behind the _need_ for
code-generation - especially in the IDE?

------
jmnicolas
> But Avalon is currently missing some amenities we take for granted, such as
> standard File Open, File Close, and Font dialogs, a split panel, and it has
> nothing approaching the new and totally astonishing DataGridView control in
> Windows Forms 2.0.

15 years later we still don't have a decent directory chooser, no DataGridView
and a nice default theme.

If you these things (and more), you have to buy a set of components from a
third party that costs about $1000, which is not possible in my company.

------
Rainymood
I started on Vim, then moved to Spacemacs, then Emacs with Vim bindings, now
on VScode with Vim bindings... honestly, a good IDE does a lot of things for
developer productivity.

We have to remember that, while we are defined by our tools, we are all still
building the same thing: code. What your employer/boss/client cares about is
/what/ code you produce and what business value it generates. They don't
really care about /how/ you do it.

~~~
nsomaru
I eventually moved away from vscode vim to nvim + lsp because the bindings
weren’t good enough.

Small things added up enough to just jar me enough that it wasn’t worth it.
Maybe I’ll jump in there again when I need to refactor something in a big way
but for me nvim+plugins are where it’s at.

------
patrickvmm
I've also noticed how intellisense affects design. It dictates bottum-up
design and shapes your thoughts. You don't memorize what's in your classes
anymore but get lazy and press . and scroll through the properties.

New vs versions allow to disable the auto popup and allow to only display
intellisense when called through C-Space. I've been using that and found that
it improved my reasoning.

------
gerikson
Well it's been 15 years, so any instances of brain rot should have surfaced by
now.

------
zelly
IDEs are not going away. The next generation programming languages will have
to be IDE-first. The syntax would have to be designed specifically to be
amenable to autocompletion by ML language models.

One day code will not even be authored in a text format. It will be a binary
format that is manipulated by some kind of visual graph editor. Who knows what
it will look like. With brain-computer interfaces you may not even be typing
or using your hands anymore.

Don't get married to plain text.

~~~
clownpenis_fart
code is written once, modified 10 times, and read 100 times

coding productivity is absolutely not about how fast you type the text into
the computer

it is very much about how readable the code is though, and ide fancy
autocompletion aren't helping with that

text has proven for millenias to be an effective way to represent ideas, so do
get married to it

------
GarvielLoken
Sounds like a guy who would really hate Smalltalk :D

------
dvfjsdhgfv
A wonderful read. I love how he basically mocks the product everybody in the
room is using. "While I’m on the subject of variable names, I should say
something good about Visual Studio." \- that's basically the only time where
he says something good about it.

------
FeepingCreature
For the record, my mobile phone has made me significantly happier and more
satisfied. Ironically, maybe the main factor is that I go outside more.
(Because I can no longer get lost, and because I can listen to music when I
get bored.)

------
oblio
Does the flying shuttle decrease your fitness?

Possibly, but look where it (and all the inventions that were triggered by its
creation) got us...

------
32gbsd
Write lots of OOPs so editors can parse it and give it back to you so you can
write more OOP.

------
unixhero
Can someone explain the concept of mindrot?

~~~
waynesonfire
it's like trying to navigate around town after you've turned the GPS off.

------
rkagerer
I like it, just wish it were faster.

------
cwyers
> And I sincerely hope that in five or ten years from now, we’re not still
> watching reruns of Friends.

I have bad news for Charles.

~~~
Brave-Steak
What does he have against Friends?

~~~
jacobush
It's pretty cheap and simple entertainment, but I think it accidentally proved
to be greater than we _could_ know then. See my previous comment.

------
toyg
From 2005

~~~
dang
Added. Thanks!

------
jcmontx
Short answer: Yes

Long answer: No

~~~
smitty1e
Intermediate answer: maybe, if you use Visual Studio to maintain a framework.

I guess the classic "Why I Hate Framewoks" rant was Benji Smith and not Joel
Spolsky?

[https://medium.com/@johnfliu/why-i-hate-
frameworks-6af8cbadb...](https://medium.com/@johnfliu/why-i-hate-
frameworks-6af8cbadba42)

