I'm starting my fourth week, teaching at the University of Brasilia. And, of necessity, I've evolved a way of teaching which is highly social.
My problem is that my Portugues is still fairly weak. So I'm trying to minimize the amount of direct talking I do to the students. I prepare hand-outs, and devote something like half to two thirds of the class to exercices. I also encourage the students to talk to each other, figuring that together they can triangulate on what I'm trying to say.
Last week I even held the first exam (who's result actually counts towards the students' final marks) under similar conditions. Each student had to produce their own final paper, but could ask others in the room for help or advice. Unsurprisingly (perhaps) from the first glance, most of them seem to have understood most of the stuff. Though I have to be careful of completely dumb copying.
Nevertheless, I think this approach works. And it's realistic. Programming is a social profession. Increasingly, the practical wisdom of programming involves knowing how to use online resources and communities. Knowing where to look for advice or example code, or FreeSoftware projects you can build on.
Today, I found this support from TeleDyn :
Nice article, "Google-Is-Your-Friend" pretty much sums it up: where would be without google to put us in touch with others who've had the same problems (hanging on the end of technical support line, ugh). Perhaps it's also a bit like the JIT school of knowledge-management: don't fill me up, in class, with a multitude of facts I don't need (or which don't make sense because I don't yet see the need), but give me a need to go look for those facts (the itch has to exist before we want to scratch it, or visually there's the "can you fly this helicopter/not-yet" rooftop quote from The Matrix). If a student is motivated to go look it sounds more powerful (and intrinsically worthwhile) than just doing it to get a grade on a piece of paper.
In a sense, it's like trying to manage a swarm or mob of individual learners. And encouraging the interaction for them to help lead each other to the food sources.
PairProgramming maybe? there's loads written about the idea of using pair-programming to teach programming. some pros and cons. the skills in pair-programming are worth teaching, since they are industry standard at this point (i know BMW uses it)... and it also highlights the social skills needed in programming. but there may also be bennies to having people work together as they learn. as i said, there's loads on it, and you'd find more with access to journals through your college; but i scraped this one up- which is less enthusiastic, i think. http://www.cse.ucsc.edu/~charlie/pubs/sigcse2002.pdf alas! – HeatherJames
Also: The Effects of Pair-Programming on Performance in an Introductory Programming Course
The purpose of this study was to investigate the effects of pair-programming on student performance in an introductory programming class. Data was collected from approximately 600 students who either completed programming assignments with a partner or programmed independently. Students who programmed in pairs produced better programs, completed the course at higher rates, and performed about as well on the final exam as students who programmed independently. Our findings suggest that collaboration is an effective pedagogical tool for teaching introductory programming.
- Charlie McDowell , Brian Hanks , Linda Werner, Experimenting with pair programming in the classroom, ACM SIGCSE Bulletin, v.35 n.3, September 2003 no online link :(
- Williams, L. A. and Kessler, R. R. Experiments with Industry's "Pair–Programming" Model in the Computer Science Classroom. Computer Science Education, 11 (1). 7–20; http://pairprogramming.com/csed.pdf
hmm, nice one Heather, what about breaking the familiar classroom mold further - combine pair programming not just with two students but two students from different years, i.e. more technically experienced master mentoring novice - the master learns some more social skills (how to ask prompting questions, not show off technical skills), perhaps even withholding key information for which novice has to discover via their own questions, novice learns to appreciate working-with rather than against (competing for grades). then as a wider team reflect on difficulties, learnings, patterns of success and failure (the technical and social antipatterns) etc. – kk
in my experience training people in the use of computers and various software, i've found it's MUCH better to pair people up (and this was before i knew about pair programming). they move through much quicker- and pick up additional tricks (like ways to navigate, keyboard shortcuts, etc). next week i'll be starting on a course for newbies on various creative multimedia software. i'm definitely pairing them up for the tutorials. i like what you're saying about mixing abilities- and also focusing on the benefits for the advanced user. i have a group of mixed abilities and educational backgrounds, so i know people are going to go through at wildly different paces. i read [that http://www.hacknot.info/hacknot/action/showEntry?eid=22 that article on the con's of pair programming] (linked on the ExtremeProgramming page, which i found after writing this) and i know the anxiety that builds knowing someone is watching you... but i think the benefits outweigh that occasional irritation. it's just a matter of making sure the more advanced user knows what they are 'getting' out of it. – HeatherJames