Teaching programming / management the Harvard way
Here’s a crazy idea: instead of trying to teach people by drowning them in books and materials, lets put them in the situations they’ll experience after college, while they’re in college. Crazy you say? Well Business schools have been doing this for a long time: it’s called the case method. Harvard Business school claims to be the originators of the idea, although I’ve come across the concept in various books on learning theory and teaching.
The challenge is that case or situational based learning requires different skills from professors and teachers. The teacher dominant model (think of your favorite grade school horror story), where there is one path of learning that the teacher defines, is easier to manage. But it’s controlled to the point where students contribute little to their own learning. And since it’s all tightly scripted, teachers are quickly bored by their own lesson plans.
CASE based teaching demands an interactive style, where discussion, interpretation and improvisation are primary to the experience. The teacher has to be able to intense classroom discussion of opinions and ideas, a skill many teachers don’t have (or are afraid to try and learn). It also demands a sense of incision and a point of view: something everyone has but many teachers are afraid to express.
Programming, design and management all benefit greatly from CASE based teaching, but it’s rare to see, even from professional trainers and consultants. And as far as colleges, many curriculums disapoint: even the senior projects rarely expose students to the challenges they’ll face after they leave school, and even fewer do it in a format worthy of their time.
Anyone have examples of CASE or situation based courses for managers, designers and programmers? Undegraduate or graduate?
The standard comeback for this is that university is a place where you learn the first principals, the building blocks that you’ll use in the real world. For many teachers, working directly with real world case studies in an open tutorial format is seen as a bit, well, below them.
In Australia we have TAFEs (Technical and Further Education), which principally teach pratical and real world skills like plumbing or welding (to name but two). University level lecturers I’ve talked to about this have often directly come back with “well, Univeristy is not TAFE” – the implication being that you’d here to embark on erudite and lofty theory that’s well above the grimy real world.
However I think most decent comp sci courses have a tutorial or project component that is modelled as closely as possible off real world examples. The problem is that they’re often ludicrously simple. Gone are the days where you might write a compiler in C in first year Uni. Now, a final year project for comp sci might be a PHP page with a database backend. “Real world” to be sure, but shouldn’t you have a bit more to show after three or four years at Uni?
The challenge, IMHO, is that if you confront students with hard scenarios they’ll face in the real world, your course will gain a reputation as being very difficult and nobody will take it up. That means fewer graduates and fewer fees collected by the Uni.
The vast majority of 18 year old kids head to Uni/college because they know they need that “piece of paper” to succeed in life – not because they have a burning desire to hone their intellects to a fine point.
And the ones who *are* keen to learn are soon bored to death. I was, and in 2nd year I ran away and joined a dot-com, and haven’t looked back since. If Uni was a bit more hard core and a bit more real world, I’m sure I would have stayed.
Good points – I’m aware of the challenge universities face and that different kinds of schools have different goals.
I suppose the point I didn’t make clearly enough is that any class, with any set of goals, can use the case method. Even to learn first principles it helps to put students into situations and guide them in interpreting them, rather that teaching them through memorization or reading of large boring texts.
Even to learn plumbing or PHP, it’s to the students advantage to be given situations that force them to respond and take an opinion, rather than being given a prescriptive way to do things. I’m not saying you can do this 90% of the time, but 10 to 30% of the time is certainly possible.
In my own experience it was only in my last two years of college that class sizes were small enough that case and situation based teaching was even possible – one thing the Harvard folks don’t mention is how to do Case based teaching with 100 or 200 students at a time.
Okay, first off I am a seven year IT industry veteran. And I also happen to still be working on my IT degree at UTS, Sydney.
UTS has a group subject or two where the students are asked to develop a system from ground up in small groups which is supposed to simulate the real world. It doesn’t, of course. You can’t get someone fired for being an incompetent twit, for starters.
But the bit about freshly graduated programmers is that they are almost invariably useless for maintenance coding, which is most of what needs to be done. They are cowboys, willing to charge in and make large changes, which invariably destabilises the code base and leads to dropping team morale.
My course-i-want-to-see-done-at-university is to throw the whole class onto a large mature code base, say mozilla, or linux, or tomcat, and then mark them on the number of lines of code that get accepted into the original code base.
This would of course require an understanding project – they are about to get innundated with stupid questions, and arrogant sons of bitches demanding to know why their unmaintainable code is being rejected. But it could be somewhat controlled by having a full standalone build environment with a constant build server et al.
But the real advantage of this style of subject is that it would subject students to 10k+ loc codebases, and the inherent detail overload that involves. And that would be an incredibly useful thing, really.
While I was completing my undergrad at Rutgers & NJIT (the degree came from both schools), my senior project was easily the most beneficial course I’ve ever taken. The professor turned the classroom into a micro-economy by inviting businesses and R&D departments at NJIT to present projects to the class /that they actually needed/. The students were then given the chance to apply to be project managers (I was one) and form their project teams (DBA, programmers, analysts, etc.) based on the skills necessary to complete the work. The scope of each project was determined by the business partner, but within guidelines given by NJIT to make them relatively managable within 16 weeks.
During that semester, we needed to attend class, get a crash-course in project management, assemble teams, meet with the business partner, write specs, build the software and deploy it. Especially from the standpoint of being a PM, it was the most challenging 16 weeks of my undergrad, and I think I’m all the better for it. It was definitely a sink-or-swim environment, but nothing could have taught me better how to do the relationship-end of software development as well as this class did. I wish I could say the same for my other classes!
Ken: Good story and points – thanks.
I think some of the reason is economics: I bet that senior project class had fewer people in it that your freshman classes did. It simply costs more to have a professor in a room with 15 students at a time instead of 30: you need more professors. I think many programs do senior projects, it’s only then that the class sizes become managable enough to make it happen.
But as Luke pointed out, some of it is about the purpose of the degree. If every class were a project class from day one, would students know enough to complete real world projects? Probably not. There is a role for lecture and basic skill based instruction.
I guess I’d like to know if:
1) anyone’s tried teaching even basic skills with a case and situation based approach.
2) There is a way to scale case, situation or project based learning to large class sizes. (Typically grading and interaction become problems as size scales, thus the role of TA’s, reading groups and discussion sessions).
Scott, when I teach project management or management–whether in a workshop or a half-day tutorial at a conference–I always include simulations, which may be different from cases. I’m teaching project management at the graduate level this semester, so maybe I’ll blog about that so readers can see the difference between the case method (where there is frequently a small set of Right Answers) and a simulation where the participants gather their own insights.