This post is a follow up discussion post to the Concrete Suggestions for Measuring Teaching Quality in Practice-Oriented Computer Science/Information Technology streams post.
A correspondent who is now doing a PhD in Computer Science in a US university wrote (slightly edited):
Interesting views from you on teaching lab courses, balance between lab and theory, and evaluating teaching techniques and teachers. If you are interested, here is how I have perceived teaching in the US. Note that this is just my view and I have taken only a few courses/classes and come to this conclusion by mere observation.
I firmly believe that teachers must be evaluated on an yearly basis. Here in the US, at the end of every semester the students go through an anonymous survey where they rate their instructors and the facilities in the lab. There is a "Best Teacher Award" every semester. There is also a "Best Researcher Award" too. In spite of all such measures in place, there are good and poor teachers here as well. I have come to understand that being a good teacher is a matter of attitude more than anything else. I have seen the busiest of professors spend inordinate amounts of time and effort to make themselves understood and convey the course content very effectively. On the other hand, I have seen/heard of professors who take their tenure-ship for granted and just breeze through the classes. These teachers get poor ratings in surveys but nothing seems to be done about it. While I believe that we need anonymous online evaluation of instructors and facilities, I also believe that the system can only do so much and inspirational/excellent teaching is a matter of teacher-attitude.
Regarding programming courses, let me go through how its done in the US. I have been a teaching assistant (TA) for basic Java, C++ and Assembly Language programming courses. There is proportional weight given to different aspects, like Exams, Assignments, Labs, Quiz(surprise tests in class). The instructor meets the students in class, twice a week for a total of 3 - 4 hours. He/She is also available for office hours during other times of the week. The instructor and TAs are available by email anytime during the semester. The introductory programming courses have one lab every week where the TA is there to help the students understand the lab. The instructor usually designs the lab and the students get all the help they need to complete the labs. The labs are evaluated, though very leniently. Every fortnight there is an assignment. And these are tough assignments that require at least a few hours to a couple of days to complete successfully. All of these are graded very objectively and there is always a check for plagiarism. One important aspect of the courses here - the instructor decides the syllabus and the evaluation criteria. This is a bit tricky to implement in India but seems to work in the US in most cases. A fifteen week course usually ends up having 8 assignments, 14 labs, 10 quizzes and 3 exams. There is also a website for the course where assignments, labs, lecture slides, solutions, reviews for exams and course material is regularly uploaded. I mentioned all of this to tell you the different aspects that go into making a programming course successful, here in the US. I am not certain that there is this much of rigour that goes into programming courses in most Engineering institutions in India. No wonder we have very different programmers in US compared to India.
I believe technology (course website, plagiarism checks, etc.) and resources (labs, TAs) are definitely needed to make a programming course successful. But the most important aspect is the instructors' attitude towards the course. With all of this technology and resources, we still have effective and ineffective instructors and that's just a matter of attitude.
The recently passed out M.Tech. (CS) student who gave the comments mentioned in the Concrete Suggestions for Measuring Teaching Quality in Practice-Oriented Computer Science/Information Technology streams post wrote (slightly edited):
Sir,
I went through your suggestions. I would like to propose a few other minor things which are as follows:
1) A programming lab. course should not just teach the syntax and features of a language but the endeavour should be to teach the small things, which make a big difference, such as indentations while writing code, writing easy to understand comments, choosing meaningful variable names and planning the modules before writing a piece of code. I think these programming aesthetics should be part of the evaluation process.
2) This one may not always be possible. However, with a little motivation from the teacher and some interest from the students it is not as humongous a task as it may apparently be. I am talking about including a small software development project as part of the course. This can be a group project. At the end of the course the students can be made to give a presentation about their software to external examiners. (I do not know if you remember but we had a similar component, although without external examination, in the Web Programming using ASP.NET and C# lab. course that you had conducted for us. Also, 5 of us had volunteered the same year to write an assembler for a hypothetical architecture that was used in our Systems Programming text book to explain the concepts of assemblers, linkers, loaders, etc. We wrote the bare bones of it in C and this has undergone evolution over the years in the hands of subsequent batches. Now, I believe all the features of an assembler that were discussed in the course have been implemented and the software can be used to demonstrate an assembler to students. However, I am not sure if it still has a GUI.)
A correspondent who is now doing a PhD in Computer Science in a US university wrote (slightly edited):
Interesting views from you on teaching lab courses, balance between lab and theory, and evaluating teaching techniques and teachers. If you are interested, here is how I have perceived teaching in the US. Note that this is just my view and I have taken only a few courses/classes and come to this conclusion by mere observation.
I firmly believe that teachers must be evaluated on an yearly basis. Here in the US, at the end of every semester the students go through an anonymous survey where they rate their instructors and the facilities in the lab. There is a "Best Teacher Award" every semester. There is also a "Best Researcher Award" too. In spite of all such measures in place, there are good and poor teachers here as well. I have come to understand that being a good teacher is a matter of attitude more than anything else. I have seen the busiest of professors spend inordinate amounts of time and effort to make themselves understood and convey the course content very effectively. On the other hand, I have seen/heard of professors who take their tenure-ship for granted and just breeze through the classes. These teachers get poor ratings in surveys but nothing seems to be done about it. While I believe that we need anonymous online evaluation of instructors and facilities, I also believe that the system can only do so much and inspirational/excellent teaching is a matter of teacher-attitude.
Regarding programming courses, let me go through how its done in the US. I have been a teaching assistant (TA) for basic Java, C++ and Assembly Language programming courses. There is proportional weight given to different aspects, like Exams, Assignments, Labs, Quiz(surprise tests in class). The instructor meets the students in class, twice a week for a total of 3 - 4 hours. He/She is also available for office hours during other times of the week. The instructor and TAs are available by email anytime during the semester. The introductory programming courses have one lab every week where the TA is there to help the students understand the lab. The instructor usually designs the lab and the students get all the help they need to complete the labs. The labs are evaluated, though very leniently. Every fortnight there is an assignment. And these are tough assignments that require at least a few hours to a couple of days to complete successfully. All of these are graded very objectively and there is always a check for plagiarism. One important aspect of the courses here - the instructor decides the syllabus and the evaluation criteria. This is a bit tricky to implement in India but seems to work in the US in most cases. A fifteen week course usually ends up having 8 assignments, 14 labs, 10 quizzes and 3 exams. There is also a website for the course where assignments, labs, lecture slides, solutions, reviews for exams and course material is regularly uploaded. I mentioned all of this to tell you the different aspects that go into making a programming course successful, here in the US. I am not certain that there is this much of rigour that goes into programming courses in most Engineering institutions in India. No wonder we have very different programmers in US compared to India.
I believe technology (course website, plagiarism checks, etc.) and resources (labs, TAs) are definitely needed to make a programming course successful. But the most important aspect is the instructors' attitude towards the course. With all of this technology and resources, we still have effective and ineffective instructors and that's just a matter of attitude.
I (Ravi) responded (slightly edited):
Thanks for the detailed info. and thoughtful comments. They are very useful.
Allowing teaching excellence to be an optional goal left to the attitude of the teacher, IMHO, is a disastrous management approach to quality education. A good management approach *must* reward excellent teaching and punish bad teaching. Such rewards and punishments will ensure that teachers will develop the right attitude towards their primary duty of teaching else they will be either left behind in their career or even asked to pursue another career option.
In my view, the key point here is that the academic administrative authorities in your US university have some measure of teaching quality (as viewed by the student-customers of the system). It may not be a perfect measure like academic research publication record is not a perfect measure of academic research contribution. This measure along with other informal assessments allows the academic administrative authorities to reward good teaching, not reward indifferent teaching, and punish bad teaching. Whether the academic administrative authorities in your US university are doing so or not, would be a confidential matter, and so not known to us. However, by the view you have that there are some ineffective instructors (bad teachers) in the system in your university, it seems that the academic administrative authorities are not acting effectively on the student feedback or are not in a position to do so.
In UGC/AICTE Indian educational institutions, for CS/IT lab. courses, there seems to be no proper measure available to academic administrative authorities to differentiate between good, indifferent and bad lab. course teachers. The course grades (given to students) seem to be given very leniently, so they are not a proper measure. This creates a situation where there is no incentive whatsoever for good teaching or any disincentive for bad teaching for CS/IT lab. courses. Is it any wonder then that most Indian CS/IT graduates are poor in software development skills/practice of software development?
The recently passed out M.Tech. (CS) student who gave the comments mentioned in the Concrete Suggestions for Measuring Teaching Quality in Practice-Oriented Computer Science/Information Technology streams post wrote (slightly edited):
Sir,
I went through your suggestions. I would like to propose a few other minor things which are as follows:
1) A programming lab. course should not just teach the syntax and features of a language but the endeavour should be to teach the small things, which make a big difference, such as indentations while writing code, writing easy to understand comments, choosing meaningful variable names and planning the modules before writing a piece of code. I think these programming aesthetics should be part of the evaluation process.
2) This one may not always be possible. However, with a little motivation from the teacher and some interest from the students it is not as humongous a task as it may apparently be. I am talking about including a small software development project as part of the course. This can be a group project. At the end of the course the students can be made to give a presentation about their software to external examiners. (I do not know if you remember but we had a similar component, although without external examination, in the Web Programming using ASP.NET and C# lab. course that you had conducted for us. Also, 5 of us had volunteered the same year to write an assembler for a hypothetical architecture that was used in our Systems Programming text book to explain the concepts of assemblers, linkers, loaders, etc. We wrote the bare bones of it in C and this has undergone evolution over the years in the hands of subsequent batches. Now, I believe all the features of an assembler that were discussed in the course have been implemented and the software can be used to demonstrate an assembler to students. However, I am not sure if it still has a GUI.)
I (Ravi) responded (slightly edited):
Thanks for your comments.
On point 1, I agree. But I feel this should be part of the two semester 'C' programming course that is taught at B.Sc. level, which is the first programming course lab. in the Department of Mathematics & Computer Science system (in that educational institution).
On point 2, useful input. I agree. The issue from a teacher's perspective is time. Sometimes there is a bare minimum of topics that must be covered in a lab. course, and that leaves no time for group projects in such lab. courses, especially in time-wise, very tight educational systems.
No comments:
Post a Comment