When I taught an intro to programmer course, I finally realized the value of exams: they're direct feedback on what students understand.
Yes, projects are more important, but it's possible for students to squeak by on projects while still having fundamental misconceptions. For example, I discovered that many of my students could not read code, and imagine how it would flow at runtime. These same students could write code with loops, but if I gave them code with a loop in it, they wouldn't "see" the runtime behavior. This was fundamental, and I spent time in class teaching them how to read code.
At the same time, everyone got some more abstract things (like what are the appropriate data types for modeling real-world things) that I figured were harder. I stopped stressing that in lecture because no one seemed to have a problem with it.
If it was feasible to give students a sit-down assessment that was not graded and could give me this kind of feedback, I would probably be in favor of it. But, if you don't grade something, students aren't going to put their full effort into it. Hence, exams.
> But, if you don't grade something, students aren't going to put their full effort into it. Hence, exams.
I'm now in college, but when I went to high school my physics teacher would give us weekly quizes that covered the material we were learning. This quizes weren't graded but were used to assess what we had learned well and what we needed more work on. Everyone seemed to give these quizes a decent effort for pride reasons, they were still graded and handed back by our teacher but the grades were not recorded.
Now part of the success of this approach may have been the quality of the students I went to school with, I attended a selective private school, but I would think you have similarly disciplined and focused students in the CS departments at most universities, so I don't see why this approach wouldn't work there as well.
I was teaching all non-CS majors, and it was a summer course. Most of my students either had jobs or were taking other classes. I have no data to back it up, but my intuition is that if the exam had not been graded, they would have, rationally, not put their full effort into it.
"I discovered that many of my students could not read code, and imagine how it would flow at runtime."
In what language, and what sort of code? I cannot really blame a novice C++ or Java programmer for not being able to see what some snippet of code will do at runtime. Some languages are just less amenable to being run by a human brain than others.
"These same students could write code with loops, but if I gave them code with a loop in it, they wouldn't "see" the runtime behavior"
That is because loops are not very informative about program behavior, except in the simplest cases.
Simple loops in C++, such as computing an average. "Blame" isn't the point. I was very surprised that students could not read the same kind of code they could write, and I spent time teaching them how to do so because of this realization. Had I relied solely on projects, I would not have learned this and adapted my teaching.
Comments
When I taught an intro to programmer course, I finally realized the value of exams: they're direct feedback on what students understand.
Yes, projects are more important, but it's possible for students to squeak by on projects while still having fundamental misconceptions. For example, I discovered that many of my students could not read code, and imagine how it would flow at runtime. These same students could write code with loops, but if I gave them code with a loop in it, they wouldn't "see" the runtime behavior. This was fundamental, and I spent time in class teaching them how to read code.
At the same time, everyone got some more abstract things (like what are the appropriate data types for modeling real-world things) that I figured were harder. I stopped stressing that in lecture because no one seemed to have a problem with it.
If it was feasible to give students a sit-down assessment that was not graded and could give me this kind of feedback, I would probably be in favor of it. But, if you don't grade something, students aren't going to put their full effort into it. Hence, exams.
I'm not sure that your last statement is true:
> But, if you don't grade something, students aren't going to put their full effort into it. Hence, exams.
I'm now in college, but when I went to high school my physics teacher would give us weekly quizes that covered the material we were learning. This quizes weren't graded but were used to assess what we had learned well and what we needed more work on. Everyone seemed to give these quizes a decent effort for pride reasons, they were still graded and handed back by our teacher but the grades were not recorded.
Now part of the success of this approach may have been the quality of the students I went to school with, I attended a selective private school, but I would think you have similarly disciplined and focused students in the CS departments at most universities, so I don't see why this approach wouldn't work there as well.
I was teaching all non-CS majors, and it was a summer course. Most of my students either had jobs or were taking other classes. I have no data to back it up, but my intuition is that if the exam had not been graded, they would have, rationally, not put their full effort into it.
"I discovered that many of my students could not read code, and imagine how it would flow at runtime."
In what language, and what sort of code? I cannot really blame a novice C++ or Java programmer for not being able to see what some snippet of code will do at runtime. Some languages are just less amenable to being run by a human brain than others.
"These same students could write code with loops, but if I gave them code with a loop in it, they wouldn't "see" the runtime behavior"
That is because loops are not very informative about program behavior, except in the simplest cases.
Simple loops in C++, such as computing an average. "Blame" isn't the point. I was very surprised that students could not read the same kind of code they could write, and I spent time teaching them how to do so because of this realization. Had I relied solely on projects, I would not have learned this and adapted my teaching.