Additional profile information on Alfred Thompson at Google+
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.
I’ve been wondering lately what it is about loops (in computer programs) that is so hard for students to get their heads around. A college professor was telling me (back a while ago but it stuck with me) that they had assigned a program to print out the words to The Twelve Days of Christmas and had explicitly asked student to use loops. And when you think about it this is a natural for loops because of all the repetition. A good number (or bad depending on point of view) had actually submitted solutions without loops. Some of these students had previously taken and passed Advanced Placement Computer Science in high school! What’s up with that?
Clearly it is not lazy. using loops is the way lazy people would do it. (Though I like to think that there is a fine line between lazy and efficient at times) No, students had used cut and paste and a lot of typing to do this all inline.
Now loops are something we do without thinking all the time. Climbing stairs is a while loop. Think about it – we repeat the same step motions until we get to the top or bottom of the stairs. We check, usually with our eyes, to see when we are there and then change our motions. We’ve all seen what happens when people don’t check haven’t we? Blind people climbing familiar steps memorize the number of steps and effectively execute a for/next loop to do the same thing. Eating is the same. We keep putting food in our mouth until either we are full or we run out of food which ever comes first.
And yet all too often students fail to see how programming syntax allows them to do the same things in a program. I don’t get it.
Loops of course are all the same in programming. Oh the syntax is different for different types of loops and in different programming languages but basically they have the same components.
In the middle somewhere useful work happens – giving the benefit of the doubt.
Here is a Small Basic example
For i = 1 To 10 ' Set initial conditions
t = t + i ' pretend this is useful
EndFor ' change the value of i and see if we are done
Here is a C# while loop
TwoWord = "ABC"; // Set an initial condition
TwoWord = Console.ReadLine(); // Change the condition
while (TwoWord.CompareTo("exit") == 1); // See if the ending condition is met
Something for the math teachers out there – Microsoft Math now at version 4.0
From the download page:
Microsoft Mathematics provides a graphing calculator that plots in 2D and 3D, step-by-step equation solving, and useful tools to help students with math and science studies. Microsoft Mathematics provides a set of mathematical tools that help students get school work done quickly and easily. With Microsoft Mathematics, students can learn to solve equations step-by-step while gaining a better understanding of fundamental concepts in pre-algebra, algebra, trigonometry, physics, chemistry, and calculus. Microsoft Mathematics includes a full-featured graphing calculator that’s designed to work just like a handheld calculator. Additional math tools help you evaluate triangles, convert from one system of units to another, and solve systems of equations.
Microsoft Mathematics provides a graphing calculator that plots in 2D and 3D, step-by-step equation solving, and useful tools to help students with math and science studies.
Microsoft Mathematics provides a set of mathematical tools that help students get school work done quickly and easily. With Microsoft Mathematics, students can learn to solve equations step-by-step while gaining a better understanding of fundamental concepts in pre-algebra, algebra, trigonometry, physics, chemistry, and calculus.
Microsoft Mathematics includes a full-featured graphing calculator that’s designed to work just like a handheld calculator. Additional math tools help you evaluate triangles, convert from one system of units to another, and solve systems of equations.
Students can use this to learn how to solve difficult math problems.
Its full features and large two-dimensional and enhanced three-dimensional color graphs can better illustrate problems and concepts.
Students will find more than 100 commonly used equations and formulae to help identify and apply equations.
This graphing tool explains triangles and their parts.
Students can use this handy tool to quickly and easily convert units of measure, including length, area, volume, weight, temperature, pressure, energy, power, velocity, and time.
And the Microsoft Mathematics Add-in for Word and OneNote:
With the Microsoft Mathematics Add-in for Word and OneNote, you can perform mathematical calculations and plot graphs in your Word documents and OneNote notebooks. The add-in also provides an extensive collection of mathematical symbols and structures to display clearly formatted mathematical expressions. You can also quickly insert commonly used expressions and math structures by using the Equation gallery. The Microsoft Mathematics Add-in can help you with the following tasks: