This quarter, I’m lucky enough to be facilitating a seminar called K-12 Computing Education. We have a website, a blog and 26 undergraduate and graduate students involved! My goal is that the experience will inspire and empower participants to contribute meaningfully to K-12 computing education no matter where their careers take them. The blog is well worth checking out — it’s exciting to read how thoughtful these students are about our discussions and their volunteering experiences.
All seminar participants must contribute at least 2 hours of volunteering with K-12 students over the course of the quarter. Some of them have opted to participate in a service learning option for which they complete 2.5 – 10 hours a week of volunteering in schools every week. We are working with several local computer science teachers in high schools and one middle school. Having our students volunteering for credit will hopefully ensure that they are regularly committed and can establish relationships with their host teachers and the K-12 students. One of the teachers helped me establish volunteer norms to ensure that our students are as fulfilled in their mentoring as they can be while reducing (not increasing!) their host teacher’s workload.
We meet once a week to discuss our personal experiences with K-12 computing education along with various readings. My goals for the readings are that they provide context for K-12 CS education, present specific, well-structured curriculum and teaching methods and highlight successful projects. So far, we have read the following:
- The CSTA’s Running on Empty report
- Jeannette Wing’s Computational Thinking
- Valerie Barr and Chris Stephenson’s Bringing Computational Thinking to K-12
I’ve got lots of other ideas for things I want us to read and discuss ranging from Colleen Lewis’ Is Pair Programming More Effective than Other Forms of Collaboration for Young Students? to Guillaume Marceau’s Mind Your Language: On Novices’ Interactions with Error Messages. I’m sure I’ve forgotten many great articles and papers, though. Help me out — what should we be discussing?
I was recently reading Polya’s How to Solve It and came across this gem:
Good problems and mushrooms of certain kinds have something in common; they grow in clusters.
I guess I’ve always known that good problem writers recognize abstract qualities of problems and re-use them but this nice way Polya puts it has helped me take the time to recognize and exploit promising problem clusters. It has greatly improved my assessment-writing process and as a bonus, when I come up with or find a problem I like, I get a craving for chanterelles.
A local public middle school recently started requiring a computing course that goes beyond learning to use basic software for all of its 6th graders and is hoping to offer several computing electives for 7th and 8th graders. They have two dedicated instructors for the program and have been using the CSTA K-12 computer science standards as a guide.
To me, there are two major reasons to care about K-9 computing offerings. First, pre-high school kids are in a mode of intense discovery and what they are exposed to then determines many of their life-long passions. Second, it’s the right time for basic computing skill-building. I think it’s hard to convince high schoolers who have been using computers all their lives that they need computing courses even if they do in fact know nothing about the mechanics of the Internet, the components of a computer, etc. Middle schoolers are likely more open. Removing basic-skills courses from high school then frees up time for more in-depth and satisfying classes (programming, building processors, robotics…).
Last week, I had the chance to briefly visit two of the new middle school classes and see students working on final projects using Scratch, a visual programming language. I had never attended a middle school CS course before and was very interested in getting a taste of how teaching at that level might be different from teaching high school.
One of the classes I briefly observed was working on individual Scratch projects after having completed several previous projects in groups. All students were absorbed in their work and completely silent. The instructor told students that they were welcome to ask each other for help but that they had to get up and use a centrally-located computer or desk to talk. This seems like a very clever strategy to me: students thought carefully about what to seek help on, chose which peer to approach with care (instead of just turning to their neighbors) and had meaningful conversations. The lab I saw was a large, inviting room with a ring of computers around the outside and desks for everyone in the middle. The central computer used for collaboration could also project to a screen.
One of the teachers has this fun manipulative for practicing binary numbers:
Unfortunately I can’t seem to find anything like it for sale but it seems like it would be easy enough to build (here’s the 1966 patent with technical drawings). It would be a nice addition to binary number activities like the one in CS Unplugged. I can also imagine partnering with an engineering teacher to have students design improvements on the basic idea and build them.
As I chatted with one of the teachers, she raised some interesting concerns unique to middle school:
- Working with incoming students’ varying previous computing instruction (many high schools get the majority of their students from one middle school but middle schools get students from a wide variety of elementary schools)
- Establishing courses that students could take many times and still benefit from (this doesn’t happen much in high school but seems to happen more for middle school electives)
- Not undermining high school courses (very interesting to me — there isn’t that much clarity on what should be middle vs. high school content though the CSTA curriculum provides some suggestions)
- Attracting more girls (relevant to everyone but the strategies are likely different for middle school)
A couple of weeks ago (time flies), I got to spend a few days in Portland for the Grace Hopper K-12 Teachers Workshop. I’ve found this event to be a great opportunity to connect with some of the most energetic and innovative computing instructors in the country. Each year, the Computer Science Teachers Association provides scholarships for instructors to attend and I highly recommend that any K-12 computing instructor apply for one.
This year, I went with a different perspective. I was primarily on the lookout for ideas of projects universities could take on to support computing education in middle and high schools. I was also looking for inspiration on how to effect state-level change in the way K-12 computing is viewed and on how to attract and retain more women in our computing courses. Of course, I came home with plenty of ideas and am now looking for opportunities and time to put them into action.
I also had the opportunity to give a talk titled “Online Presence For Professional Development, Community Engagement and Student Support” (ppt slides). I tried to frame it as a call to arms for those who care about computing education to share more of what they do online. I emphasized several of the benefits of a vibrant online community: reduced isolation, greater variety of resources to choose from, more opportunities for inspiration and learning. I made specific recommendations on running a course website and encouraged everyone to comment on the Computer Science Teachers Association blog and to become active members in communities such as ScratchEd or the AP CS Listserv. I pointed to some ways that educators of other subjects have built community including Classroom2.0 and math instructor-turned-ed-grad-student Dan Meyer’s blog where Dan periodically gets his readers to help him refine lessons. We had the beginning of a great discussion on reasons CS educators may not be sharing much now and ways to improve on the online gathering places that already exist. This continued between sessions and hopefully will result in an ongoing conversation about improving our collective online presence.
One of the best parts of this event was meeting Ben Chun in person for the first time. Ben provided me with a great example of why computing educators should consider blogging — though we had never met, we had been carrying on a very valuable online dialog for the past three years through our respective blogs. I have learned an incredible amount from his introspective posts on teaching and his inspirational side projects such as ilearnedtoprogram.com and the Kickstarter-funded ctillustrated.com. Our online relationship led me to send some volunteers his way who spent a significant amount of time working with his students. Blogging can truly open doors.
I really enjoyed being a part of this year’s Grace Hopper K-12 Teachers Workshop. I found many things to be inspired about and many ideas I would like to implement. I hope that my presentation left some instructors with the tools and inspiration to share more of what they do online.
Note: Andy kindly reminded me in the comments to at least mention LightBot 2.0. 2.0 has more levels, deliberately organizes them into categories such as ‘recursion’ and ‘conditionals,’ makes the turning direction a little more obvious and highlights the current execution step. I like that 1.0 is a little simpler but 2.0 really does have several good improvements.
LightBot is a programming-like Flash-based puzzle game. Players have access to several commands they organize in sequence to move a robot over certain tiles. I mentioned it a while ago in a post about creating computer scientists but I’ve noticed that though a lot of computer science teachers have seen it and liked it, they’ve shied away from using it in the classroom. I’ve enjoyed using it in with high schoolers in both an introductory breadth course and the AP Computer Science course. See UW’s CS Principles pilot blog for a nice narrative on how it was used in a college context.
It’s the basis for several good activities in the first few days of class — timely for many of us!
One logistical hurdle for teachers has been that the game is hosted on sites that are typically blocked by school districts. It’s possible to download the swf file (File -> Save As) and distribute it to students either locally or through a web or local file server. I hosted it on my course website. Please get in touch if you want to use it but can’t figure out how.
A teacher needs to know within a few days of a new course starting what knowledge, skills and misconceptions students are coming in with. I like to give a quick survey in which students self-report their comfort and enjoyment in different areas. Unsurprisingly, students who self-report success in algebra tend to more easily pick up programming but it’s not a perfect correlation.
I’ve found that watching students play LightBot has given me a really good sense of which students will pick up programming with ease and those who will struggle. I admit doing this with a bit of discomfort: I reject Knuth’s notion that only 2% of the population is comfortable thinking programmatically (Don Knuth, one of the ‘fathers’ of computer science, has been frequently quoted saying things like “[programming] takes a peculiar thought process, which I believe about one in every 50 people have, that makes them resonate with the computer,” found here). I don’t believe that programming ability is somehow an innate gift but I do recognize that certain students come in better prepared to think this way than others.
I tell students that I want to give them a taste of the kind of thinking that computer programmers use and I challenge them to complete as many levels as they can. Meanwhile, I walk around and observe how students interact with it. I immediately spot students who are not used to completing work on their own and turn to their neighbor as soon as they get stuck. I notice students who are very competitive. I see which students work through trial and error and which want to work out a full solution before trying it out. I’m always impressed to see students who take out a piece of paper to draw out a solution and I make sure to praise them for this practice when we debrief. Perhaps the biggest surprise for me has been seeing how many students have very poor spatial reasoning skills.
Discussing the experience
A teacher looking for the right things will get a lot of value out of exposing their students to LightBot. I think that whether the students get value from it will depend a lot on the debriefing period. Here are some of the questions I’ve discussed with students:
- Did you enjoy playing the game? Why/why not? Most students seem to like it. Those who don’t like it find it frustrating and they’re the ones who will need the most support when learning to program. Many say they like it because it’s challenging. That’s a key thing to bring back when programming projects get tough.
- What strategies helped you make progress? Trial and error to find out what each command does. Many say they write out a few steps and then verify that it works — they know that incremental development works. Many report putting themselves in place of the robot. This is a very useful debugging strategy. Some break down the problem on paper and work out a solution before turning to the computer, especially for the complicated later levels. These students will likely be scary good programmers.
- What can you say about the language used by LightBot? It’s very limited, there’s no opportunity for ambiguity, sometimes the semantics weren’t immediately obvious (jump goes forward by 1 tile), functions are used to create new complex commands…
- What are functions for? Reusing sets of steps that are needed multiple times, making command sets easier to read…
Coming back to it
A teacher can come back to students’ LightBot experience when formally introducing several tricky programming concepts including procedural decomposition and recursion. Again, read some of the UW’s CS Principles blog to see how they did this. I’ve found it a really powerful shared experience to draw from.
A lot of teachers use visual languages to make the transition into programming a little more gentle. I would recommend LightBot over Scratch, Alice or the like for that purpose because its more constrained nature lets us hone in on a few targeted skills. In fact, I’ve used it as a precursor to Scratch.
Similar game-like introductions to programming that I really like include Manufactoria and Picobot. I’ve tended to use these as supplements for more advanced students or as introductions to state machines since they don’t relate as closely to procedural programming.
Some of my students invited me to their internship presentations at Microsoft tonight and I was blown away by the quality of what I saw. Microsoft’s high school internship program is second to none and I commend the company for giving students opportunities to get a taste of high tech careers at such a young age. Hiring high schoolers is not without risk or cost and it is very impressive that Microsoft devotes significant time to mentoring their interns as they work on real problems. I hope that more companies will consider replicating their program — it’s a great way to recruit the best students early and could really help change the image of computing careers.
This summer, Microsoft had 17 high school interns in the Puget Sound. Four Garfield students worked on projects at Microsoft Research. One worked on a system to translate English task descriptions into short PowerShell scripts, another explored using voice commands in Kinect-based games and simulations, the third worked on translating TED talks from Chinese to English and the last worked on TouchDevelop, an on-phone programming tool for Windows Phone 7 (see his demo video here). They learned to perform user studies, glue existing software tools together, use new development environments, give presentations, and countless other skills that will put them ahead no matter what they choose to do next.
Last month, I attended CSTA’s CS/IT for the third year and was pleased to see that it continues to attract great people from the K-12 and college computer science teaching community. This year saw the addition of a day of 3-hour workshops and the feedback on those seemed overwhelmingly positive.
I was particularly struck by the opening and closing speakers and I thought that they nicely, if inadvertently, illustrated some of the tensions in the introductory CS teaching world.
Doug Rushkoff, who recently published a short booked titled Program or be Programmed, kicked things off. The best way I’ve seen him described is as a “media theorist” — he has been tracking disruptive information technology innovations since the early 90s and gained notoriety as one of the first people writing about the Internet as a socially relevant phenomenon. To me, what made him a very interesting pick as an opening speaker is that he is not himself a technology creator though he certainly seems to leverage technological tools with great ease.
Doug is a charismatic and energetic speaker who clearly had the crowd bought into the title of his talk which promised to be about the importance of programming. He is the kind of person who likes to make emotional appeals to his audience — the alarmist title of his book set the tone for the talk. Though he was very entertaining, he made my head spin. He jumped from anecdotes about the effect of written text in Israel to deploring that kids don’t understand that Facebook doesn’t exist for them to make friends but rather to make money off their data to arguments that machines are programming us to use them better. At some point in the talk, I started wishing that he had slides so that I could have some sort of thematic anchor point for all the energy he was throwing my way. He quickly addressed his dislike of digital presentations — he feels it detracts from the “full-spectrum communication” that occurs between live human beings.
I think his main point was that we should all be more aware of how social media tools and devices affect us socially and be wary of being over-connected. Fair enough but I didn’t really understand where the programming came into play.
On the other hand, our closing speaker, Ken Perlin, put programming front and center. Ken directs the NYU Games for Learning Institute and seems to derive great pleasure from putting together little games and animations which he blogs about. He didn’t go into deep analysis of why learning to program is important but instead showed us a bunch of things he has worked on. He showed us a simple animated creature that kids could learn to program, a tool to make collaborative music and a Kinect drawing program. I found myself wanting to play with the ideas he was presenting and was really charmed by his enthusiasm. I can see myself showing his experiments to students to motivate and excite them. What I got out of this talk is that programming is a great tool through which to learn about various domains including cognition, music and emotion. All I really wanted at the end of the talk was a keyboard and some fun APIs to play with.
Again, those two talks told a very neat little story about the difficulties that we face when trying to decide on what introductory CS curriculum looks like. For some people, ethics, responsible technology use and surface understanding of ideas like DNS are most important. To others, algorithm elaboration and analysis take precedent. To some, the need for CS courses is all about the threat of Chinese economic overpowering or of autonomous machines taking over. To others, it’s about exploring the boundaries of the currently possible and rolling up one’s sleeves to build things. And of course, different CS education proponents lie everywhere in between those different extremes. I wish I could witness these two designing a high school CS course together!
I know I should have posted this earlier and especially before the by the numbers post but it’s been hard to find the words.
I will be lecturing for the introductory computer science courses at UW in the fall. The wonderful Earl Bergquist, after years of experience at Amazon, will be continuing to build the Garfield computer science program. I will be providing as much support as I can to local teachers and hope to be back at Garfield frequently as a volunteer.
I’ve had the opportunity to work with some incredible students at Garfield: students who not only embrace learning about complex new ideas but also have incredible personalities and diverse interests. I can’t wait to see what they end up doing and hope that my short stint with them will have had some positive impact on their lives. I learned so much with them and from them.
I came into high school teaching thinking I’d do it for a long time. For one, I love teaching, and working with that age group is particularly appealing — the students are finding themselves, they’re full of energy and there are so many opportunities to get to know them well. On top of that, I was determined to demonstrate that young, energetic people with a computer science background were the right teachers to get to build K-12 computer science programs. Leaving after only two years is made particularly difficult by that desire. I tell myself that I’ll still be having an impact in high school CS and that the UW opportunity was too good to pass up but I do feel guilty.
I wish I could say that I was entirely happy teaching at a public high school but it certainly had its challenges. Everyone knows that public funds have been tight in the past few years but I’m not sure how many understand how that has affected many teachers’ lives. So much uncertainty around budgets and personnel has caused a lot of anxiety and grimness. I felt like many people in the system were way too busy putting out fires and fighting for their little piece of turf to look at the big picture, celebrate successes or encourage innovation. It’s hard to consistently be putting in >60-hour weeks with very little guidance or oversight. Freedom is certainly nice but encouragement and mentoring are important, too, and especially in the creation of something new.
Perhaps the hardest part of the gig was the isolation. I was lucky to be in a school with several incredibly bright and inspirational instructors. Unfortunately, they are spread across other departments and located far away in the building so I rarely got to see them and never worked with them. I really hope that in my new role I can help computer science teachers from across the district be in productive and frequent collaboration.
Though the transition is bittersweet, I look forward to continuing to share my excitement for computer science and programming.
Students taking computer science courses before 2009-2010: 0
Students taking AP computer science 2009-2010: 25
Students taking the AP exam 2010: 17
Students taking introductory CS courses 2009-2010: 200
Students with technical summer internships 2010: 5
Students taking AP computer science 2010-2011: 72
Students taking the AP exam 2011: 62
Students taking introductory CS courses 2010-2011: 100
Students with technical summer internships 2011: 5
Women in AP computer science 2011: 37% (32% including APCS++)
When I told my students I was going to be grading AP tests this year, they responded with “you’re leaving us for a week to sit in a room and grade all day?!” I was getting ready to leave just as students were putting finishing touches on their incredible final projects and by then I was sure I’d made a terrible mistake. How could flying across country to spend 8 hours a day grading possibly be anything but exhausting and mind-numbing?
Luckily, what I had heard from other teachers is true — the AP reading is an opportunity to get to know like-minded people, get new teaching ideas and learn a ton about the AP test. It was exhausting and at times mind-numbing but it was worth it. The week-long event brings together high school and college instructors who are so passionate about what they do and want to discuss it. Being around them was energizing and gave me hope. Though the days were grading-filled, we had time in the evenings to learn a lot from each other.
I graded question 3 which involved working with several objects and writing ArrayList algorithms. Each free response has a few question leaders in charge of creating a grading rubric for it and making sure that scoring is done consistently across the dozens of teachers assigned to the question. I was very impressed by both the question leaders and table leaders — the rubric was thorough and easy to understand and our training was robust.
Over the 7 days we were there, we graded over 22,000 exams. Grading on that scale really emphasized the importance of a well-designed rubric that accounts for a broad range of student (non-)solutions. In my own teaching, I’ve found APCS-style rubrics (example here) very useful in providing students with feedback they can immediately use. It leaves all guesswork out of figuring out what went wrong and students can make sure to avoid making similar mistakes in the future. I have no doubt that the fact that I grade both assignments and exams this way has increased student preparedness while also ensuring grading consistency.
Looking at thousands of responses to one question was eye-opening. Most notably, I was blown away by just how many students turned in solutions that were either blank or worth no points. I already knew this happened from reading student performance Q&A written by the chief reader every year — for example, in 2010 over a third of students got no points on the GridWorld question — but I wasn’t quite ready for just what that looks like. My second day, I happened to have a pack of 25 in which only six or eight had any points at all and that was really demoralizing. Many of those students left the entire test blank and several wrote long passages explaining that they didn’t know any computer science for various reasons. Why do they take the test? Do their schools make them? Why do they take the class? Does the AP designation mean more than actual learning? Why do teachers accept this? Do they know programming themselves? Whatever the cause is, I don’t think it’s very healthy to have so many students with no clue.
I was also particularly struck by how difficult it seems to be for students to understand which classes contain which methods and which class they are writing methods for. This certainly reinforced the notion that object-oriented programming is conceptually challenging and that it needs to be approached very deliberately.
Those who had been grading for years were able to put some of these kinds of thoughts in perspective and it was very interesting to hear their stories. Connections to these wiser, more experienced instructors are invaluable and I look forward to continuing to learn from them.