« Happy Holidays | Main | The Take Two Approach »

Down and Dirty Programming

I read John Harrison's recent blog asking the question whether students are good problem solvers or mimics and it made me consider my latest school experiment.

Each term our principal polls the faculty to ask for elective offerings for the upcoming term. Since it is meant to be more relaxed than an academic period for students, I decided to offer an elective I called Down and Dirty Programming, specifically to prepare students to compete in programming contests. I am often unable to field a junior team because I use Scheme in my class and most contests are limited to Java, C++, and VB. I know there is much debate on the pros and cons of programming competitions themselves, however, my belief is that my students love to compete and going to an event that promotes CS and gets them pumped up is a good thing. But that's a topic for another blog.

I warned the five students (four males and one female) who signed up that the course would work very differently from my normal CS class. All good programming practices would go out the window. They grinned at the thought: no documentation needed, no design recipe! They wouldn't learn OOP, they would focus on solving problems quickly, and might get dirty doing it. I warned that it would be largely self-directed. I would give minimal instruction of basic programming concepts, enough to get them going on some practice problems, and later we would work on competition strategies.

I was curious to compare how learning occurred in the elective and in my regular Computer Science class. All five students are in my regular class too, as all juniors are required to take CS. Three of the five students had never programmed before, other than the few weeks of Scheme they have had so far this year. I gave them very brief introductions to conditionals, looping, and arrays and a short set of problems on each. The other two students had some Java experience so I set them off to do practice problems on the USACO training website.

How are students solving problems? There is an immense amount of googling for sample code and copying/pasting of code snippets to accomplish minor tasks like opening and closing a file. So, is that mimicking or is it problem solving? Since competition problems are often so unique, complex, and unrelated to real life, students have never come across problems quite like these and they must apply several different concepts to solve them. They are not mimicking, they are gathering from a set of tools to put together a solution. They must come up with the algorithm that solves the problem.

The class is incredibly collaborative, with the more seasoned programmers eagerly helping the others. The newbies compete to see who solves a problem first. However, I don't think there is necessarily a higher level of collaboration than in the regular class. The atmosphere is more relaxed than in the regular class. There is no stress on what the grade will be or whether they will complete the problem by the end of class. They are just enjoying the learning process.

The big difference between the elective and the regular CS class is the lack of directed guidance. Labs in the regular CS class are directed, methodically leading students through each concept, building upon each skill. The learning in the elective is very ad hoc, depending on what the student needs to know to accomplish a given problem. Which is the better method? Which method applies more to real-life and to how the students are going to learn new skills in the future? I am still questioning this myself and wondering what others think. I am also reflecting upon what I may bring back to my regular classes from this experience.

Karen Lang
CSTA Board of Directors


I love this idea, Karen. I always encouraged my students into taking part in an all day (Saturday!) competition held around our country - and it seemed to be the catalyst for greater engagement. Even if the students didn't do so well, they seemed to enjoy actually applying themselves for an extended period of time to solve problems.

And even if there is copying and pasting of googled code in the preparation phase, it probably won't directly solve the problem - so all the code has to be understood... so more good CS learning is happening.

I am a real fan of competitions and I suspect there is a great research project in discovering the effect of allowing "down and dirty" options on the uptake of CS.

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)