Search This Blog

Showing posts with label teaching. Show all posts
Showing posts with label teaching. Show all posts

Saturday, September 10, 2011

Teaching 500+ Students - Part 3 (Excuses for Copying)

Continuing with my experience of teaching the first year programming course to 525 students, I am today writing just a short note. I wanted to share some of the excuses students have been giving me when we catch them using unfair means in labs and/or quizzes. And, believe me, I am not making them up.

  1. (This is about a quiz, where we had multiple versions of the paper, and this student had written the answers which were correct for a different version of the quiz paper.) His explanation was that he was writing random characters and random numbers. There is a small but finite probability that it will result in the answers that will exactly match the answers given by the neighboring student. I should offer him stronger evidence of copying than just that his answers don't make sense for his questions, but are answers for questions given to his neighbor.

  2. What I have done is not copying. This can be called cheating in an exam, but not copying. And you have always been saying that copying will result in an "F" grade. You have been silent about cheating. Since I have done cheating and not copying, I should be given a lighter punishment.

  3. My program has been written by a senior, who is not even doing this course. This is not copying, but just taking help from friends. If someone who is doing this course had written the code, that would be wrong.

  4. I did not copy from any classmate, but searched on google, found the code for the problem, and submitted it. What is wrong in that.

  5. I have only seen function definition, variable declaration, for loop, while loop, if conditions, and few other things that I did not understand. But, believe me, I did not copy 100%. (Yeah sure, there was indeed a one line difference between the two submissions.)

  6. Sir, moss (the software developed by Stanford University) is saying that 96% of the lines are same. It is obviously wrong. See, I changed all the variable names, and deleted all comments. So, there is hardly any line which is same. You are using a buggy software.

  7. We are so used to copying in other courses. Even previous instructors of this course ignored copying. It is difficult to remember to do things differently in just one course. (The implication being that I should change, not him/her. And remember, these are students who have just joined IIT less than 2 months ago.)

  8. And this is from a faculty member (thankfully, not from IITK). When everyone is making 1000s of crores, you are trying to teach honesty. You are spoiling their careers. They should become more practical and a better fit in today's society.

I don't want to give an impression that everyone is cheating. In fact, that is a small minority. But the excuses and arguments that they come up with are truly remarkable, and I just wanted to share some of the gems.

Monday, August 15, 2011

Teaching 500+ Students - Part 1 (Language Issues)

In an earlier post in the summer, I had mentioned that I will be teaching the first year programming course to 500+ students, and I wanted advice from my readers on how to handle such a beast. First of all, I thank all those who responded. Your suggestions really helped me. This is the first time I am teaching such a large class. The last time I taught a large class was 17 years ago, when I taught Pascal to about 200 students.

525 is a very different beast. I thought I was well prepared. With 1 lakh lines of code under my belt, I was confident of knowing C language much better than Pascal that I taught 17 years ago. I had sat with several weak students last year and tried to understand what problems weak students face in this course. I went through videos of the first programming course at MIT and Stanford. I went through example lab assignments at several other universities, and the entire archives of this course at IIT Kanpur, for the last 6 semesters - all PPTs, lab assignments, and the works.

But when it started, I did not know what had hit me, and I still haven't recovered. Blogging was the first casualty. Google+ came at the wrong time. I have joined but don't follow anything. My active social life has come to a screeching halt. I guess this is my destiny for the remaining part of the semester. Today, after having spent the good part of the day in the office, I decided enough is enough. I got to blog.

At least point out the issues that I face, and hopefully the collective wisdom of the readers will help me sail through. The biggest issue is the language. No, I am not talking about 'C'. A fairly large number of students, in the initial survey said that they don't understand spoken English. This number is more than 15 percent, almost 100 students. They claim to follow the powerpoint slides. My natural way of teaching would have meant that while there are slides being projected on a screen, I would use blackboard to explain the finer points. This revelation meant that a lot more would have to be put up on the powerpoint, even though I may still use the blackboard on the side.

About 50 students said that they would like to be tutored in Hindi. And what came to me as a shock, some students do not follow even written English.

And this caused a debate in the department. I decided that I will request a graduate student to provide extra help to those who are weak in English. So he holds a session on Sunday for an hour in which he speaks in Hindi. I also encourage students to come to my office and ask me questions in Hindi.

Am I doing the right thing. Some faculty members don't think so. They point out that English is the official language of instruction at IITs, and therefore, it is the responsibility of the student to make sure that s/he learns sufficient English prior to coming to IIT Kanpur. By agreeing to offer help in Hindi, I am discouraging them from learning English. Second, it will increase expectation of students that in other courses too, the faculty would explain in Hindi, and a majority of faculty members are not from Hindi belt. So that would cause problems. Third, this is discriminatory with respect to non-Hindi speaking students who are also poor in English.

My take is different. The collective wisdom of the leadership of all IITs and indeed this country (because such decisions are taken at the cabinet minister level) has decided that students cannot be tested even on basic language skills. That we can't even specify that they must take English as a language in 10th or 12th class. This leadership has also decided that JEE will happen after 12th class, and not earlier, and that the schedule will be such that admissions will be offered only a few days before the semester starts. So, there is no scope for running a remedial course prior to the semester. With such decisions, one must expect that there will be students who would be weak in English.

What am I supposed to do. Ignore 100 students in the class. I do respect the fact that the same leadership has decided English to be the official language of instruction at IITs. I do not speak even one sentence in Hindi during my lectures and tutorials. I do not have any course related information on the official website of the course in Hindi. All assignments, quizzes, and exams are in English, and no translation is provided to anyone. But it is difficult to digest that even informally, I should do nothing about such a large set of students, who have worked really hard to reach where they have reached. I believe that a bit of compassion and support at this stage will make a huge difference to their learning experience. And I think not understanding the course content for several weeks till they learn more of English would be an insurmountable hurdle in doing well in this course.

Will this put pressure on all other faculty members to offer some support in Hindi. Will this discourage these students from learning English quickly enough. I don't know. Till I am officially told to do otherwise, I cannot refuse if someone asks me informal help in Hindi.

Wednesday, June 15, 2011

Need Help in Teaching Programming to First Year Students

This is not the usual blog article. I am not giving my opinions and ideas, nor I am forwarding others' ideas/opinions that I find interesting. I am seeking YOUR ideas and opinions.

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.