Search This Blog

Showing posts with label first year. Show all posts
Showing posts with label first year. 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.

Saturday, August 27, 2011

Teaching 500+ Students - Part 2 (Conducting Labs)

This is to continue describing my experience of teaching a class of 500+ students. If you are interested, you can read the earlier post.

Last time, I had described my dealing with students who did not know adequate conversational English. This time, I am describing how we are conducting labs.

We have divided the batch into 5 groups, each of about 105 students. There is one lab of 3 hours per week for each group. For each lab, there are 8-9 persons (2-3 5th year dual-degree MTech students, and 6 1st year MTech students) to help students with any difficulties.

Normally, the first 3-4 weeks are hell for students who are looking at a computer screen for the first time. Too many questions, and too few people to help. So we requested all MTech students to do extra duties in the first 4 weeks. First two weeks, there were 6 extra MTech students in each lab, and for the next two weeks, there were 3 extra MTech students in each lab. The labs have gone extremely smoothly as a result, much better than what I could have imagined.

The first week was a bit of chaos. The MTech students themselves were new to campus, and trying to settle down, and understand the computing environment, find out where the labs are, and what they are supposed to do. In the past, instructors have not conducted labs in the first week for these reasons. But I was adamant. I was willing to not have a lab only on the first day of classes. From day 2, labs must start, and those who miss the lab of day 1 would have an extra lab on the weekend. I must say that the dual-degree students were huge help in this week and a couple of students went to lab on each of the five days. Without such dedicated students, I couldn't have managed this course. The first lab was to just remove their fears of the computers. They would learn how to send/receive email, attachments, searching for stuff through google, and a few other miscellaneous tasks, including playing computer games. A bit of linux commands too, and getting familiar with moodle. No programming, not even typing a given program. I didn't want to scare students.

The second week was to learn an editor, typing a program (which was given to them), knowing about the compiler, and running the program. Again, a very comfortable exercise, just to start the love affair between the students and the computer.

But the third week was different. The real labs started now. And the labs were very different from what their seniors had told them. We used to ask them to write 3-4 small programs (20-25 lines sort of stuff) in every lab. By the time they completed the course, they would be comfortable writing a 50-line program. This won't work for me. I would ask them to write at least a 50-60 line program in the lab, and the hope is that by the time they complete the course, they would have written at least one 150-200 line program.

Earlier labs would ask them to write some standard program from the end-of-chapter exercises. But now, they had to understand a more real-life situation and write a program for that. No rocket science. Just produce a telephone bill, or a shopping receipt, or project the train arrival time, or whatever, but a real-life context is important (not always, since I have to think of 5 problems of roughly equal difficulty, all of which can be done with the limited amount of programming that I would have taught till that week).

Since I can't expect students to write a 50-line program in a 3-hour lab, I would announce the lab problems at least 2 days in advance. So they can think about the flow chart, may be even try out some coding in their free time. But announcing the problem in advance has its own critics. Many students spend far too much time on them. Some students, after solving their own problems, even try to solve problems of other lab batches. Some have truly fallen in love with the machine, while others are just trying to catch up with those who already knew programming. Yet others find the air conditioned environment of Computer Center rather conducive to work (and sleep). But it is all my fault that they don't seem to be spending as much time in other courses.

Then the grading. Normally, the grading is the responsibility of the MTech student, who is as new to the system as the first year BTech student. And grading was done in the lab itself, with no record of program that was shown. And it was not surprising that the average of the class would invariably be a healthy 9 out of 10. This meant that almost all students wrote programs for all small exercises that were given in all labs, even though the students were not told about what program they have to write till the beginning of the lab hour, and within 3 hours, everyone had submitted, that too correctly, and had been graded. Something was not right.

I have insisted that all lab assignments must be uploaded on moodle. So if I want to check some submissions randomly, I should be able to do it. I would also give a very detailed grading policy every day - what to check, how many marks for what features including comments and use of proper variable names, etc. And grading should mostly be done offline (which is now possible since all assignments are uploaded), so that the TAs focus only on helping students in the lab. The lab average is a more realistic 6 out of 10 with a proper spread of marks on both sides. But students are not complaining. The amount of help they are getting, again thanks to all the graduate students, is something that they probably did not expect. Some of the TAs would be available even on weekends to help the students with their programs.

While we provide all the help to the weak students, one complaint that we keep hearing in IIT is that we don't do enough to encourage good students. Well, there is something for them too. We are starting the process to identify the best programmer in each section for each lab, and their names will be announced not just to that section, but to all the students. And soon, we will offer these students a chance to do a large project in lieu of the exam.

We tell our students one simple thing. We will work hard to provide all opportunities and support. But they should also work hard. Short cuts won't be tolerated. In other words, copying in a lab is a strict no-no. Some of them don't seem to understand this. Nowhere, the lab is taken seriously, I am told. We start using the services of MOSS server at Stanford today. Since this has been announced that we will use MOSS, and anyone copying will be failed in the course, I don't expect students to take chances.

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.