So, here is the issue. I am the instructor for the first year programming course at IIT Kanpur in the coming semester. It is called, "Principles of Computing" and the focus is to learn how to use computation in problem solving. So algorithmic thinking is what we want to inculcate. Since some programming language has to be used as a vehicle for this purpose, the Institute has decided on "C" language. So, the language is not negotiable at this time, even though I know that there are strong views of people on this. Also, the labs are going to be Linux (some recent fedora distribution most probably, that too is not negotiable). The last time I taught this course was 16 years ago. "Pascal" was the language used at that time. And there were less than 200 students.
I want your ideas on improving learning in this course.
To begin with, a bit more detail about the course structure. We will have three one-hour lectures a week for about 525 students (roughly 60 percent of the students who take admission this year). There will be one one-hour tutorial in small groups of 35 students each. And there will be one 3-hour lab for all students. Every day, 3 sections will have lab, so about 105-110 students will have a lab every day. Besides the instructor, there is one tutor and two teaching assistants for each section of 35 students. Tutors take care of tutorials, while tutors and TAs jointly take care of the labs. Tutors are normally either faculty members or PhD students, while TAs are normally MTech students, though some tutors will also be MTech students.
Now the questions.
First, is there some diagnostic test or some other mechanism to figure out the background of each student. I am expecting that a quarter of the students would have never done any programming. The second group would be good at algorithmic thinking, but would have done programming in a language other than 'C'. The third group would have done programming in 'C' but still no algorithmic thinking. One wishes they hadn't learnt programming. And finally the group which does not need this course. It is easy to identify the first group - just ask - but how do you identify the other three groups so that there can be appropriate pedagogical interventions for each group.
Second, What are the good books as textbooks. I have gone through many 'C' books but not very happy with any of them. I am looking for something that focuses on "algorithmic thinking." It should develop the habit of making flow charts and writing pseudo code, before worrying about syntax of any computer language. If there is no 'C' book which has good enough focus on "algorithmic thinking" then I don't mind having two books.
Third, what interventions can be there for different groups - particularly the first group and the last group. Having additional labs/tutorials for the first group in the first couple of weeks - is this good enough, or should we plan to do this throughout the semester. Would you suggest some material which is specifically targeted at novice users. I am thinking of offering projects to the 4th group to keep them engaged. Can something else be done.
Fourth, I am looking for interesting videos of 5-10 minutes which explain some aspect of problem solving (algorithms), which I could use once in a while in the class just to give a different perspective, to make lectures more interesting, to ensure that students don't sleep in the class, etc. But they could also be linked from the course website (moodle) so that people can watch it on their own. Similarly any longer duration videos (but they will only be linked from course website, not played during the lecture). Any links would be deeply appreciated.
Fifth, I am planning to setup moodle, and use that as LMS for this course. How can I use blogging and wiki to improve learning. Is there a role that social networking can play in improving learning.
Sixth, how do I detect copying in the labs. Is there some software that can go through all the 110 odd submissions, and tell me whether the two programs are too close for comfort. Similarly, is there some software that can go through the program and comment on its quality - tell me if the student is using one letter variable names, or not writing any comments, etc.
Seventh, what is a good debugger environment for first time users. gdb is an overkill. Remember, we will use Linux environment. So the debugger has to run in Linux, and should be free.
Eighth, anything else that your experience can help me with.
If you feel more comfortable giving me advise on email, my address is: sanghi[AT]gmail.com
Thanks much in advance.