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:
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.
Good discussion - you might be interested in the poll on to use a drag-and-drop designer
Its very surprising that the "code only" group have the upper hand!
We've used a command line first approach for ages. I still think it works well, in that it reduces the number of distractions and lets you focus on the algorithmic side of things. However, your comments have given me cause to think about this issue. One problem is that students get very hard to understand messages from the command line compiler when they do things wrong, at least an IDE would make it easier to target these mistakes. Perhaps next year I'll have a go at teaching IDE first and see what happens.
I used to use a slide rule, I now use a calculator. I used to start my motorcycle with a kick starter, I now have a button. I used to use command line, I now use an IDE. I used to chase women, I am now married. (I do not know how that fits in but is sounded good.)
As one who was taught programming and built my software engineering career in the Berkeley Unix and open source software environment, then Sun/Solaris, with Clearcase and eventually built releases for embedded systems, I had never used the Microsoft IDE or built software for Microsoft applications until I sat down to take an exam for my vocational programming teacher license. Since my students spend 3.5 years in my classroom and in our shop we have lots of time to teach them programming. Lots more than you can do in an elective course. For their first two years, 90 minutes out of their 6.5 hours in shop which is every other week, we spend time in a traditional classroom setting learning programming and web development. We rarely spend my class time doing projects on the computer. The remainder of their time in a day is spent sitting at the computer doing projects. The remaining two classes spend 90 minutes in my classroom in the week opposite their 6.5 hours a day in shop. It has taken me the last 2 and a half years to understand what is important to teach them and what is not. The second major realization was exactly what Alfred is writing about. I was teaching the kids in the way I was taught and with what I had learned. They do not need to know my history or my methods. They need to know how to use what will be placed in front of them by their employer. Students who are entering the work force have a major advantage over everyone else. By being newly taught their knowledge and familiarity with the IDE/GUI is current. They are certainly not veteran programmers but they know how to use the software they are likely to run into on the job. Prior to teaching, I spent 4 years trying to figure out how come I couldn't get a job as an software engineer. It wasn't only because of the economy. It wasn't about my age. Or my choice of self expression. It was mostly about the fact that I could not put on my resume and back it up with that I knew how to work with the software gui/ide a new employer was looking for. To them I was outdated and old. That's what my the skill set and software list on my resume said. Today I teach what the kids need to know about the concepts, logic and problem solving. After freshmen year, we spend very little time on how to use the GUI and focus on building up their programming know-how starting with logic, loops and then arrays. notice we did not go into writing sort algorithms or Order of n analysis of algorithm speed. Some day we may go into recursion, data structures and dynamic objects (creation, management and deletion) but today in object oriented programming that is not as necessary as a rich range of knowledge in various programming languages to allow them to distinguish between syntax differences and concepts. No kid today wants to sit in a room and learn what should be called Data Processing programming. That's our time, not today. Download Alice to teach them logic and structure without writing the code. They enjoy it because its about putting objects into a world, in which they are free to make up a story. While they are creating their story they are learning the logic and how to get the program to do what they want.
Load up the Adobe software so they can manipulate pictures, build flash things and do web pages. (or use web developer an expression). Buy a rooms worth of xbox 360 controllers (its a usb device), install XNA and watch a room of kids you have to yell at to keep their attention spend a whole day teaching themselves how to build a game. the reason this works is because you have reached them on their terms, in their world and their interest and focus comes from the relevancy they perceive in the knowledge you have exposed them to. command-line has no meaning to them, at best it is history. we do need to teach them what we know, but we need to make it relevant to them. If it's only history, it is just that. That's so yesterday. Our kids are learning today. They need a foundation of knowledge so they can teach themselves. That is our job today. It is their job tomorrow.
That's right-on, but while it is certainly useful for educators to talk about what existing tools to use given their requirements, let’s not stop there. We need to supplement the To IDE or Not To IDE choice with the myriad of immediate and differentiated choices that an intelligently scaffolded development environment can make. We are studying some of those choices in such a framework, and I hope to engage a conversation about that here: