The Role of the IDE in Programming Languages

by Jose Mojica

I was teaching Visual Basic .NET last week and I jokingly made the following statement about intellisense: “I believe that without intellisense .NET programming would not be possible.” I said that after typing something in the order of System.Runtime.Serialization.Formatters.Binary.BinaryFormatter, which caused a few students to chuckle and say, “There is no way I will ever remember that.” I told them that the only way I remembered that was because of intellisense. I had memorized System.Runtime and intellisense helped me remember Serialization, then Formatters, then Binary, etc.



I was joking at the time but then I started thinking about the statement. How successful would a class hierarchy in which classes are buried five namespaces deep be without features like intellisense and the object browser? Don’t take me wrong, I love the way the classes are grouped in .NET and namespaces are definitely a good thing, but would we be able to be productive without features like intellisense, the object browser, and even dynamic help to a certain extent?



Let’s go back to the days of the win32 programming. How did we know back then the name of the right API to use? I think in those days I relied heavily on the sample code and the help files, and just text searches. I remember opening header files and searching for anything that had a keyword remotely similar to what I was looking for. But being able to find the correct function to use in those days, using only the index in the help and text searches, was only successful because the function names described the purpose of the function in one phrase. Take for example a fictional function like SerializeWithBinaryFormatter. I might have been able to find such a function if I had searched the header files for the key words Serialize and Binary. With object-oriented class hierarchies functions are often named more simply like Serialize. However, a quick search through the object browser reveals that there are at least 40 versions of “Serialize” and that is not taking into consideration functions that use Serialize as part of a bigger name. Take a word like Open. If I did a search in the object browser for anything that contained the word Open I would probably find hundreds of entries with that word. How could I find the class name that contained the particular Open I wanted?



This train of thought made me think about the role of the features in the IDE, not only in relation to productivity but as things that make the language itself successful. Take for example Visual Basic. I would say that the IDE played a tremendous role in the success of the language. The form designer made it possible for us not to have to remember fifty or so API functions. So the form designer was a good thing because it enabled a developer to represent API functions graphically, but is the form designer part of the language or is it a feature of the IDE? Could VB have been successful without it? Suppose that the form designer had been a wizard instead that generated source code for creating a window. I remember back in the old days, Quick C for Windows. Quick C had a wizard that enabled you to design some aspects of a Window and would then generate some source code to replicate the Window. Now this was, as far as I remember, one-directional. Once you generated the code, if you modified it, there was no way to get back a visual representation. As great as the Wizard was I never used it much because it was only good at the beginning of the app and only really for learning purposes. In the very least the wizard needed to be bi-directional. The form designer in .NET is primarily a code generator, but it is bi-directional. If you change the code, the changes are reflected visually. But it is the code that really creates the form, not the visual picture. In fact it is possible for a developer not to use the visual designer at all to create forms. The question is, is this the same as the form designer in previous versions of VB in which the only way to construct the form was visually? How many developers are going to create rich forms without a visual designer and is having the code available really an advantage? Let’s take another small feature. In VB 4 through 6 if you wanted to create a class, you asked the IDE to add a Class Module to your project. The IDE would open a window for you to type in your code. The IDE window represented the class itself. One IDE window was equal to one class. Now in VB.NET you can write as many classes as you would like in a single file. The question is, is this a good thing being able to write many classes in a single file? I think that we do not understand the relationship that the IDE and the language have at times and we focus on the written language as though that is the primary source of productivity and consider IDE features as merely frosting on the cake. What do you think?


Do you think the IDE is really that important?


4 Comments

mharges
2002-07-16 15:20:09
Multiple classes in a single file
There are definite situations where I want to have multiple classes in a single file. One example is a pair of tightly linked classes (a node class and a linked list class, not the best example but one that comes quickly to mind) where you consider both classes part of a larger whole.


Another situation where I've really wanted this capability is when writing Model/View/Controller classes to control complex interactions of the controls on a form. I've had cases where a single form had a dozen or more MVC classes and the project outline was huge.


Of course, you can stray too far to the other extreme and combine too many items into a single file - a common occurance is for my beginning students to turn in a single large file filled with classes. Getting them to think about how best to logically separate things is one of the things that I focus on.


Mike Harges

simon_hibbs
2002-07-17 04:36:11
Look to the open source comunity.
There's a growing C# community that doesn't use
Visual Studio, and it's more than just the open
source .NET porting groups such as the Mono
project. Community projects such as Sharp Develop
allow anyone with the freely downloadable .NET
SDK to be a C# developer, and although they have
an IDE with some nice formating features, it
doesn't have intellisense.


Although I'm just beginning to learn C# and do
have access to Visual Studio .NET, I'm finding
that by writing code using simple text editors
I'm getting a much better feel for the language
than I would just using VS.NET.


In your language courses, do you spend much, or
any time showing students how to use the command
line compilers, or discuss alternative development
methods and platforms?


Simon Hibbs

schuyler
2002-07-17 09:43:59
Maybe for "visual" languages...
I've been using perl for 6 years and never once haad anything remotely like an IDE, unless you count vim's syntax highlighting, which I rarely use. I'd say the lack of an IDE had absolutely nothing to do with perl's considerable success. So, I think when we talk about the "role of the IDE in programming languages", we need to keep the frame of reference in perspective. Some languages obviously need them. Others seem to have done fine in the world without.
anonymous2
2002-10-04 10:38:27
Thoughts
As VB programmer with a university background (and early projects in C and Lisp) I found (find) the biggest problem with one class per file in VB6 is that you don't use classes as much as you should. The linked list example is a good one.


And lots of people are using VB.NET and C# without intellesense because you can download the complete SDK for free. The HTMLHelp v2.0 documentation system lets you find classes you need, irrespective of how deep they are. And you can find them by searching for the functionality you're seeking, by typing in the class name, or by drilling down from a namespace.


Not quite as convenient as VS.NET, but with a command prompt, notepad and explorer window open at the development folder, you're fairly productive.