There are times when I have wondered if we would not be better off going back to punch cards. Really I am somewhat serious. Back in the day I remember people really paying a lot of attention to their programs before they passed them to the computer. After all if you only get one chance a day to compile and lots of time between compiles it makes sense to desk check. And of course we had come amount of JCL we had to set up to make sure things compiled correctly. This leads right into the ongoing debate about using an IDE versus using a command line compiler that is going on at the MainFunction forums. There is a good “back to basics” argument about command line compilers.
The debate about command line v. IDE is, in some ways, a false comparison though. Compiling a program is only one of the things an IDE does. An IDE also does editing and debugging. I’ve read arguments against using a debugger when teaching programming. I completely disagree with those arguments. I think that a good debugger lets a student see a lot more about what is going on behind the scenes than any other method of debugging. And I really like the idea behind IntelliSense and strongly believe that it encourages experimentation. I’ve used all kinds of editors in my time from punching cards to line mode editors on paper printing ASR 33s to full blown, color coded, IntelliSense using Visual Studio. I think the IDE adds a lot to the process.
Getting back to compiling, is there value in students knowing about the switches and other options? Absolutely. The question in my mind is when they should learn about them. I tend to think that the first course in not the time. Perhaps not even the second one. We don’t start students with assembly language after all. I have heard the argument that we should BTW.
Back in the day when you had a large program (i.e. more than 16k of memory) you had to create overlay files for the linker. You actually had to tell the linker which modules needed to be in memory at the same time and which ones could be switched out of memory to make room for them. What an education in memory management and program organization that was. It forced programmers to organize their code and to be very cognizant about dependencies between modules.
But you know I am not so sure we want to go back to that. We are content to let compilers, linkers and the operating system worry about all of that today. I would assume that at some point students learn a lot of that stuff, perhaps in an operating system class, but it is less important for the average programmer today. Likewise compiler options are less important until you are ready to produce code with real performance requirements.
I can see a need to teach students about compiler options and what they mean. Is that easier to do with a command line compiler? I don’t know. I haven’t really tried to do that. It is an interesting question but first we have to get past the “when” to teach them.
– Alfred Thompson