To IDE or Not To IDE

One of the controversial issues that keeps coming up in computer science education is the role of the IDE – Integrated Development Environment. Some people believe that students should learn using command line instructions so that they become more aware of the roles of compiling and linking. I’m going to jump right in and say that insisting on command lines in a first course makes about as much sense as requiring that new car drivers start their cars with a hand crank.

Now I’m not saying that compiling is not an important concept – it is. And so is linking. But in this day and age it doesn’t have the importance it did back in the old days when we often had to manually determine how and when the different parts of a program were loaded into memory at run time. You don’t need that in a first course. In fact I am not sure where it does fit into the curriculum.

The first course of programming or computer science should be about success and for building a foundation for the future. I understand the argument that compiling and linking is part of that foundation and 20 years ago that was true. I don’t think that it is true today. Today we have so many varied ways of building software and integrating it into something that the computer understands and can present to users that focusing on just one doesn’t make as much sense early on. We have web pages, Internet APIs, mobile devices, PCs, and more. It’s all a little bit different.

Returning to the success part of a first course. An IDE helps make beginners successful by making things they don’t need right away invisible and allows students to focus on logic, problem solving and the specifics of the first programming languages. IDEs also support powerful debugging tools which makes fixing problems faster and easier. Yes I know you can get a listing of errors and print it all out from a command line tool. In fact it can be a whole lot like back in the punch card days! Oh yeah that will excite students.

So other than hiding compiling and linking what are the knocks against IDEs? Well one is that they are too GUI focused and this focus takes away from the focus on algorithms, problems solving and programming basics. This is an easy argument to make because students, especially youngers ones in high school and earlier, do often get caught up in the GUI. I see this as a problem as much of the instructor as the tool though. By providing templates or pre-built GUI code an instructor can help keep the focus away from the GUI. At the same time today’s students are used to a real GUI program rather than white letters on a black “console” background. I would also argue that I/O is easier in many ways with, say, Windows Forms objects than parsing input  and output strings on a command line program. This makes processing more data more easy which leads to better testing and prevents a lot of the early problems with I/O that beset many beginners.

The other big complaint about IDEs, especially professional ones like Visual Studio and Eclipse, is that they are too complicated. I taught HS CS for a number of years using professional IDEs – some for C/C++ from Borland but mostly Visual Studio for C++, J++ (a Java replacement), C# and of course Visual basic. Students generally adapted to the complexity very quickly and easily. With Visual Studio the similarities to other Microsoft products like Office made this even easier. But I’ll accept that it may be a bit complicated from many high school students (and their instructors) but please don’t insult college students by saying it is too complex for them Seriously? What sort of people are you recruiting?

Of course there are simplified IDEs to use if you really find Visual Studio too complex. Take Small Basic for example. Are there really command line compilers that are most simple then this:

sb

There are also some strong advantages to IDEs such are powerful built-in debugging tools. I have used these in Visual Studio to show how recursion looks, how variables change, and how decision statements are not always what they seem (think = vs. == in C++). IntelliSense or other auto completion technologies (as seen in Visual Studio and Small Basic) allow for almost unlimited exploration of language and library options.

If you want to program in Visual Studio, C# or other dot net languages there are command line compilers available. They come standard with the .NET Framework and your Windows computer probably already has then installed. But are they really the way to go? Not for me. Give Visual Studio and/or Small Basic a try and see how they work for you.