A recent report on the quality of teacher training has stirred up a lot of discussion about how teachers should be prepared. With the ongoing shortage of qualified computer science teachers (putting aside the discussion of what being a qualified computer science teacher actually is) this has some relevance for CS education. I was struck by one set of comments by Arthur Levine in Inside Higher Ed.
“We don’t know how to prepare teachers,” said Arthur Levine, former president of Teachers College at Columbia University and author of a scathing critique of teacher preparation. “We can’t decide whether it’s a craft or a profession. Do you need a lot of education as you would in a profession, or do you need a little bit and then learn on the job, like a craft? I don’t know of any other profession that’s so uncertain about how to educate their professionals.”
I know another profession that is that uncertain about how to education their professionals – software development! We get hit with a double whammy. On on hand we don’t really know how to train our teachers and on the other we don’t really know how to educate our future professional developers. It’s a mess.
The debate over software being a profession or a craft (or an art to really mess things up) is one of long standing. I’ve been hearing it throughout my almost 40 year career. Google reports (In Head-Hunting, Big Data May Not Be Such a Big Deal) that something around 14% of their engineers are not college graduates. Google is pretty fussy about who they hire so that means something. Any discussion of development of software professionals will include loud voices declaring that formal education is somewhere between useless and downright harmful.
I lean closer to the craft idea both for teaching and for software development. Now software development is not all or even most of computer science. I think there is a lot of science and profession in CS. Developing software though remains something of a craft. It is something that is best taught through mentorship (think apprenticeship) rather than just rote learning. As someone who entered teaching though non-traditional path I think the same about teaching BTW.
Now be aware that most modern apprenticeship programs include a pretty fair amount of classroom teaching. It is not all on the job. I like that mix. I think that computer science and software development can benefit from a mix of classroom and apprenticeship theory. This is why I am a huge fan of project based learning.
Projects open the doors to out of the textbook thinking. They allow students to move in their own directions while at the same time taking clues from an organized and well thought out plan for learning. My problem with purely self teaching is that with pure self teaching the student has an unprepared teacher. There is a tendency to narrow ones focus on the particular project that one has taken as a learning platform.
A good teacher expands options rather than limits them. I see this as especially important in K-12 computer science. Our goals should be to help students expand the range of possibilities. Let them get focused later. Point them in directions they are not aware of themselves. Give them projects that both get them excited and motivated but that also force them to learn how to learn and move in different directions. It has been said that education is not about filling a bucket but starting a fire. Projects are fire starters.