I read Charles Petzold's article titled Does Visual Studio Rot the Mind? a while back and I thought it was interesting, but I was too busy to really think deeply about many of his points.
Then, this weekend I attended the excellent Jacksonville Code Camp 2006. Three-hundred people registered for this! Jim Wooley gave a very interesting presentation on LINQ (Language enhancements in VB 9 and C# 3, The Search for the missing LINQ). Jim is a great presenter. Check him out if you have the opportunity.
When I last used C# 3.0, it did not have Intellisense. The latest CTP now offers nearly complete support for Intellisense. Jim gave some code examples and I was surprised to see the extent to which Intellisense is dictating the way languages are designed! Petzold was more right than I had imagined. Not only is Intellisense dictating the way we program, it is dictating the way Anders Hejlsberg is crafting new versions of C#.
Let me quote a couple short paragraphs from Charles Petzold's article to set the stage for my take on how Intellisense has infiltrated some of the world's most creative brains.
And yet, IntelliSense is also dictating the way we program.
For example, for many years programmers have debated whether it’s best to code in a top-down manner, where you basically start with the overall structure of the program and then eventually code the more detailed routines at the bottom; or, alternatively, the bottom-up approach, where you start with the low-level functions and then proceed upwards. [...]
Well, the debate is now over. In order to get IntelliSense to work correctly, bottom-up programming is best. [...]
But the implication here is staggering. To get IntelliSense to work right, not only must you code in a bottom-up structure, but within each method or property, you must also write you code linearly from beginning to end — just as if you were using that old DOS line editor, EDLIN. You must define all variables before you use them. No more skipping around in your code.
It’s not that IntelliSense is teaching us to program like a machine; it’s just that IntelliSense would be much happier if we did. [...]
And I think it’s making us dumber. [...]
So I don’t think IntelliSense is helping us become better programmers. The real objective is for us to become faster programmers, which also means that it’s cheapening our labor. [...]
Near the conclusion of his section on Intellisense, Charles says, "Of course, I could always just turn it off." He also admits that turning it off is not easy to do (because Intellisense is addictive). I enjoyed Charles' article, but I never even thought about turning Intellisense off. However, deep down I knew Charles' points had validity and therefore, I never completely forgot about them even though I continued to happily rely upon Intellisense every day.
However, Jim's presentation at the Jacksonville Code Camp 2006 made all this take on a new urgency for me.Take a look at this VB code from one of Jim's examples. Select-from-where has become from-where-select now!
Dim results = From c In System.Enum.GetNames(GetType(ConsoleColor)) _
Where c.StartsWith("Dark") _
Select c
Following this example, Jim mentioned that because the new CLR languages will use a from-where-select syntax, he would like to see T-SQL modified to use this same syntax. He had some good reasons for his suggestion, but I was floored to see the extent to which Intellisense could be shaping the future of all languages, even those not closely tied to the CLR.
In VB 9 and C#3.0 it will no longer be possible to turn off the influence of Intellisense. The new CLR languages themselves are addicted to Intellisense. They are shaped by Intellisense. We cannot escape from Intellisense and if Charles is right, that means we have lost some of our freedom, power and creativity as developers.
What is the counter point to this? Are there other aspects of programming in .NET that more than offset the dumbing-down effect Charles describes?
Are we .NET developers becoming a separate class of citizens from other developers? I have a friend who works at LLNL on a project where he writes and optimizes parallel processing code for the world's fastest supercomputer. We had lunch together a couple weeks ago and we discussed working on a C# project together. He doesn't understand much about Visual Studio or .NET yet. At the time of the conversation, I remarked on how different our programming worlds were. I was thinking he would somehow be better off if he knew Visual Studio and C#. Now, as I reflect on where C# and Intellisense are taking me, I'm wondering if it is the direction I want to go.