I spent Friday and Saturday being part of a panel convened for the National Assessment Governing Board (NAGB). They run the National Assessment of Educational Progress (NAEP) which is also known as “the Nation’s Report Card.” This was a 15 member panel made up of business people brought together to discuss guidelines for reading preparedness of 12 grade students. It was an interesting couple of days and I sure do think I learned a lot about the assessment program and how it is run.
But there were other interesting things that came up besides reading. All of the business people, and there were people from very large companies to companies with 100 or fewer employees, kept bringing up a couple of things they really looked for when hiring people. Two of those things were the ability to work in teams and solve problems. Everyone wants to hire people who can work in a team. This is seen as a critical need and yet one that schools do not seem to work on. Solving problems or critical thinking is also huge. People who can solve problems as part of a team effort are, not surprisingly, highly valued by companies.
Teaching teamwork is difficult in schools. Schools tend to prize individual effort above all. If nothing else it is easier to grade. Most teamwork that students learn they do so as part of athletics. That leaves out a lot of students though. If I look at some teams at all levels I see that teamwork, even in sports teams, often leaves a lot to be desired lately.
I strongly believe that we need to add more team projects in high school Computer Science courses. Yes it is harder to grade. Yes there are always issues when one or more members of the team do not pull their own weight. But those problems exist in the workplace as well. It seems to me that it would be better for all of us if students started to learn how to deal with those situations before they entered the workforce.
Pairs programming, sometimes as a form of extreme programming, has crept into the teaching environment already. I think that is a good thing and a good teaching tool but it is not the same thing as a team project. Team projects should include three or more students working on a program that is large enough to break up into components. Students should learn to discuss and design the modules, classes, and data structures of the program as a team. They should learn to design and specify the way those objects interact (interface if you will) with each other and they should create a schedule. Students should hold each other accountable for completing their tasks to the schedule.
Sure not all students will have equal abilities but people working in a team are seldom balanced. Managers (formal or informal) learn to delegate tasks based on who can do what and have it ready when. Students who learn these skills early will have a leg up on their peers. I think that in some ways Computer Science is uniquely set up for group projects. We should take advantage of it to better prepare all students.
As for grading, in the real world teams sink or swim as well as their weakest link. Good teams work with this balance and bring up the weak links and make good use of the strong ones. Is giving the whole group one grade fair if some people do more or less than the others? Do you have both team and individual grades? Should team members grade each other? Can/should the teacher watch close enough to hand out subjective grades? How do you grade individuals on a team project objectively and individually? Those are real debatable issues and one I take them seriously. But do we really want to give up on an important teaching tool because we get hung up in the grading? What is the focus of education – learning or grading?