I have run into Tonya Edmonds at a few computer science teachers’ conference over the past two years. Tonya has a mater’s degree in computer science and is now teaching at the Pittsburgh Science & Technology Academy, an urban magnet school. When we met last year, I was juggling adapting to the teacher lifestyle while creating curriculum for three new courses. Meanwhile, though Tonya was, like me, a first-year computer science teacher, she was not teaching any courses and was instead primarily focused on curriculum development. What an inspiration! She had both great ideas and the time to think through them to ensure their success when implemented.
Tonya has now paved the way for expansion of SciTech’s computer science program and they are hiring a second computing instructor to teach AP CS and a game programming course using Scratch. I think the job listing makes for a very interesting read. There’s a lot of general information about the school and its philosophical grounding. I don’t necessarily love everything in there but it’s incredibly informative and gives a good sense of what the school is about. Page 11 has a tentative schedule for the instructor which is the inspiring part. The entire first semester of this teacher’s time is to be dedicated to curriculum development. Second semester also includes an extra planning period for curriculum development and the second semesters of both the second and third teaching year include an extra planning period for curriculum revisions!
I haven’t seen many schools that offer their instructors dedicated time for creating curriculum and am curious to know how wide-spread that is. I wonder whether SciTech intends to continue this practice over time or if it’s something that they are doing to get their programs started. Regardless, it’s a terrific idea and I hope they find someone skilled and enthusiastic to take advantage of this opportunity.
Every Monday at lunch, a group of girls get together in my room to discuss various computing-related topics. Appropriately, we call it the ‘Girls’ Technology Discussion Group.’ We have a mailing list and every week, someone different sends out an article or question to discuss. We’ve covered a broad range of ideas in the last few months from Egypt’s Internet shutdown to the power of Kickstarter for funding new ideas to the effect of ubiquitous digital media on teenagers’ attention span. I always learn a lot from talking with the group and I look forward to our meetings every week.
Last week, one of the girls shared an article on Cubelets, a set of sensor and output blocks that when put together form simple robots. We talked about several interesting things — academic ideas becoming products, other interactive digital toys like Siftables and the effect of toys on kids who play with them. The girl who brought in the article mentioned that she thought having access to this sort of toy as a kid might have given her an earlier interest in computing and technology pursuits. We went into a conversation about toys and games we enjoyed as kids and it was interesting to see what we shared. All of us enjoyed playing with building games like K’Nex or Legos and we could all remember specific puzzle-type games that had fascinated us. One of the girls, a star programmer who was surprised by her ability and interest in CS, remembered a game-making program kind of like Scratch that she used as a kid — somehow she had forgotten about that experience until then.
We wondered about how long something like Cubelets would be entertaining for. How many different configurations are there? Is this something that would be a long-lasting toy or a novelty that is quickly discarded? This led us to talking about highly structured versus open-ended play. One girl who is very interested in mechanical pursuits mentioned that though she enjoyed Legos a lot as a kid, she never wanted to mix up the different kits’ parts and wanted to follow the instructions in the little booklets exactly. She wondered whether this reluctance then affects her design abilities now. To this day, I have Legos neurotically organized in bins by kit origin, and I also wonder why I was so obsessive about following instructions and didn’t make many designs of my own. Did that affect the way I operate now?
I wrote a while ago about some of the non-programming experiences that primed me for interest and success in computer science but I don’t think I went far back enough in my childhood or thought broadly enough about activities that may have affected me. I’m sure there’s a lot of research on the impact of childhood play on later pursuits but it was a fascinating conversation to have with young women I know and have great respect for. I’m looking forward to Monday’s discussion!
The Association for Computing Machinery has a Special Interest Group in Computer Science Education that convenes once a year for a conference. There are always many fascinating speakers and subjects but for me the highlight is the nifty assignments session. That hour and a half is an opportunity to get several directly usable project ideas for CS1 and CS2 classes and a chance to see some of the nation’s top computer science instructors doing what they do best. Most of what my students do in both AP Computer Science and Creative Computing (intro Python course) is directly influenced by the nifty sessions I’ve attended over the years (though all materials are available online, I’m more likely to use projects I’ve seen in person).
Stanford’s Nick Parlante, who has been organizing this session for a decade, opened with a neat demo of the infrastructure he built to run small code snippets in the browser. I had the opportunity to talk to him about the CS0 class he’s been running at Stanford and I’m really looking forward to “borrowing” lots of what he does!
It was interesting to see two projects, a scrolling game and a fish/shark population simulation, that would fit very nicely with GridWorld, the AP computer science case study. In fact, the starter code for the population simulation does use GridWorld and the author of the scrolling game has offered to port it over if there’s interest.
I was most impressed by Evil Hangman, a hangman game that gives the illusion of being legitimate but in fact cheats by dodging the user’s guesses! This was presented by Keith Schwarz, an incredibly energetic lecturer from Stanford. The demo is very compelling: as the audience guesses vowel after vowel that doesn’t appear to be in the word, frustration sets in. After the first run, when the word ends up being something relatively mundane like “lull,” the natural instinct is to want to play again — certainly we just had bad luck? At SIGCSE, 150 computer science educators were practically begging Keith to play again and again so we could better observe the game’s behavior. Keith did not indulge us and instead gave compelling reasons to give the assignment from a pedagogical standpoint: it gives students practice using simple data structures like maps and requires several data transformations, something students generally need practice with.
I didn’t just like the assignment, I liked the way it was presented. Keith drew us into it as he would students and I’m guessing I was not the only one who put together a solution on the plane home (80 lines of Python). There were some great hooks. First, what is it doing? Oh, it’s cheating. But how is it cheating? Wait, that’s enough to make it nearly impossible to beat? How hard is it really? How many guesses do I have to give myself to win? I want to make sure that as many of my assignments as possible inspire curiosity in this way.
I also am likely to use University of Toronto’s book recommendation project. The assignment was first given while the Netflix Prize contest was still open. Though it’s a little less timely now, it’s still a great opportunity to discuss uses of computer science that students are very familiar with and to demystify how it’s done. Michelle Craig says, “after reading a pre-collected set of ratings for a list of books, the program makes recommendations for a particular reader based on a small set of sample ratings from that reader and the preferences of other readers in the community. The assignment was inspired by current machine learning research and provides the opportunity to talk about many other CS ideas including weighted averages, comparing non-trivial objects, designing distance measures between objects and writing comparators, and sparse data.” I think this is another one that could easily be presented in a way that hooks students and makes them want to have the program.
The question of whether or not to reuse assignments between course offerings came up in a few informal conversations and I think that it’s interesting to note that most of the nifty assignments presented were shared after years of tweaking. Getting an assignment to the point where it emphasizes the right skills, challenges students without frustrating them and provides truly compelling output is not an immediate process. I love assignment reuse and really appreciate the availability of polished, student-tested projects. I’m looking forward to many more nifty assignments from future SIGCSEs!
I enjoyed presenting about Scratch at this year’s Northwest Council for Computer Education conference in Portland. My slides and materials for the 3-hour workshop can be found here.
The opportunity to share ideas with motivated, forward-thinking educators is always inspiring. I learned a lot from them about the challenges that they face, different kinds of technology courses being offered and ways that they thought Scratch might end up being used in their curricula. The group was composed primarily of middle school teachers and educational technology specialists which I found really exciting — getting students working with computing at that early level is very important. Several of them were interested in emphasizing computer science vocabulary and sharing with students connections between Scratch and more common programming languages — yes!
Some of the teachers seemed overwhelmed by the end saying that they had a hard time seeing how they could meaningfully teach the material with just the taste I had given them in three hours. I can’t blame them — anyone would find it a bit silly to send someone off to teach a biology course after a mere three-hour introduction. In fact, even though we all get several chances to interact with biology material in K-12, getting a biology teaching position generally requires years of post-secondary study in the field. Is it reasonable to treat computing any differently?
Short-term, I’m so excited that a few more instructors will now be getting their students to program using Scratch. Long-term, I hope I can find ways to provide more training than a too-short 3-hour workshop!
I know a lot of people who are interested in being involved in high school computer science. People who leave their desk for an hour in the middle of the day to go help out in a classroom. People who mentor teenage interns. People who call me from across the country to ask how I got into teaching. People who are truly brilliant teachers. And people who have training as well as experience. What can we do to better harness that energy?
One of the things that each of us already teaching (in larger districts) can do is to work with our districts to replicate our programs in other local schools. The presence of one successful CS program can have a snowball effect if the right people are brought to the table. In Washington state, Career and Technical Education directors and pathway leaders can be incredibly powerful allies since they establish district-wide vision for CTE courses and allocate some funding accordingly. They know all the schools and principals and can make suggestions as to where a CS program might fit. In Seattle Public Schools, we already have another excellent, dedicated computer science instructor in place and are hoping to keep expanding to more schools.
I think there already does exist a very powerful system for giving computer science students a love of teaching and for providing them with the very targeted skills necessary to successfully teach computer science material — teaching assistant programs. Most of the high school CS teachers I know were TAs at some point and I was greatly influenced by my time in UW’s undergraduate TA program which involves a teaching seminar that covers grading strategies, addressing difficult students, teaching particularly difficult topics and so on. Stanford has a class with over 80 students learning to teach computer science. I’m sure that every year, several graduates of those kinds of programs seriously think about going into high school teaching but the lack of obvious mentors and clear positions scares them away. This is something I don’t know how to address — how can we make it easier for those kinds of students to find high school teacher mentors and help them navigate the certification and job-finding process in their particular area? For me, connections through the UW computer science department’s outreach program were critical. I also ended up cold-calling several people at the district and various schools. I’d be curious to know how other computer science teachers found their positions and figured out the certification process.
In Seattle, we have well-trained computer scientists with teaching certificates ready to step into the classroom. Our ability to expand is dictated by district and school budgets — right now, in order to create a CS position, something else has to go. I think part of the trick to address this involves creating student demand. As students hear about interesting things their friends at other schools are working on, they may start talking to their parents about wanting to take CS classes and PTAs are another critical ally able to sway school offerings.
Obviously, not everyone interested in CS education wants to make it into their full-time job. I’ve had the opportunity to play matchmaker and help friends find computer science classrooms to volunteer in but I wonder what kind of response a formalized system for matching high school CS teachers with speakers and volunteers might get. Of course, relying on existing social networks has the benefit of providing a vetting process but it would be interesting to see how many people would like to be involved with youth learning computer science but just don’t know how to get started. Maybe if companies saw several of their employees getting involved in high school education they would be more willing to take a page out of Microsoft’s book and mentor high school interns.
There’s a lot of existing energy around high school computer science education and I think those of us in that field have a responsibility to harness and augment it. What else should we be doing?
The New York Times had an article a while back titled “Rethinking Advanced Placement.” The article describes ballooning topic lists that encourage teachers to lecture endlessly and leave students burned out after hours and hours of homework and memorization. Particular offenders are biology and U.S. history, both courses and exams that I took as a high school junior. I’ll agree that both had a lot of breadth without much depth and that they could benefit from some paring down with greater focus on applications rather than straight memorization. At the same time, a strong factual base is very important for application so I hope that won’t be entirely lost.
I think computer science needs to be careful in its own rethinking of AP courses not to go in exactly the opposite direction that these courses are going in. The current AP Computer Science A exam has a very tight focus around programming and allows teachers time to cover each concept in depth. Students leave the class with deep problem-solving skills and many hands-on projects to show off. After all, the only way to learn programming is by doing it. While there is memorization around the peculiarities of the Java OO model, APCS is a skill-oriented exam that gives students an opportunity to show off their algorithmic thinking abilities.
As we move away from a programming focus, there are thousands of different computer science related directions to go in. Both for students’ and teachers’ sakes, I hope we can avoid the breadth trap APUSHistory and APBio fell in.
In Washington state, career and technical education instructors are highly encouraged to have students participate in approved leadership activities. These are provided by various recognized institutions including DECA, Future Farmers of America, Future Business Leaders of America, SkillsUSA and a few others. In an attempt to figure out whether my students should be part of one of these, I bought the SkillsUSA Computer Programming Championships Technical Standards. The only free information I was able to find about the SkillsUSA programming competition is a blueprint outlining the standards covered in the competition and a scoring rubric for this year’s competition. Is no one discussing this competition online?
If you’re thinking of buying the technical standards as a way to glean information about the competition, I would encourage you to save your money. It’s generic rules (piercings must not pose a safety hazard), the scoring rubric linked above, and a problem statement from last year. Things I did get from the document:
- Students must be SkillsUSA members to participate
- Students must wear official SkillsUSA clothing
- Students must submit a resume
- Students will take a “Leadership and Professional Skills Knowledge Test.” My favorite question from a sample:
Which of the following is a good behavior to show during an interview?
a) Chewing gum
b) Wearing unusual, memorable clothing
c) Smiling
d) All of the above - There’s no real algorithmic interest to the problems posed
- GUIs are heavily emphasized
I would be very curious to learn more about who participates in this competition and what their reactions are. I wonder whether the computer science education community is looking at some of these kinds of organizations as possible partners. SkillsUSA has a lot of reach and visibility — over 10,000 chapters across the nation — and seems to have partnerships with may state education departments. Perhaps computer science is too academic to be within the scope of what they cover? Looking over this document makes me feel out of place in the career and technical education world! For now, I’ll continue to encourage my students to participate in local programming competitions.
Happy holidays! I’m spending my off-time in France and am currently in beautiful Nancy.
Unfortunately, the trip hasn’t been entirely relaxing. Coming onto the continent, I ended up in Paris around 9pm though my original plan was to land in Lyon at noon. And even then, I’m pretty lucky — my parents have been 6 days without their luggage and I expect tens of thousands of passengers are spending the holidays in airports or alternate destinations.
One of my goals in teaching computing courses at the high school level is to give students a new lens to look at daily problems through. I don’t want all of my students to go into computer science but I do want them all to be able to consider computing-based solutions in their lives and careers. believe that part of the way we can overcome some of the big problems we are facing these days — from global warming to endless political quagmire — is by having more people with a clear sense of how computing can be leveraged. In this case, plenty of strange things are going on with air transit and it’s such a complex system I can’t even begin to understand all the constraints but I do know just enough to imagine ways computing could help. What if every traveler, TSA employee and flight attendant also had some of these intuitions?
I’ll start with, in my mind, the most obvious opportunity to leverage computing to ease tension in the system. My parents’ luggage was lost in Frankfurt when their plane was cancelled and they were put on a train to Paris instead. The lost luggage report they filed was also lost. The fax we sent re-reporting the lost luggage was also lost. We talked on the phone with at least 5 different people at Lufthansa baggage services and none could even enter in information to report the lost luggage — they needed that paper form, as most airlines do.
We ended up having to go to the airport in person to fill out a paper form. Luckily, the information was entered but unfortunately, there’s a typo in our address so we’ll see how things turn out. Finding a fax machine, repeatedly calling the airline, going to the airport wasted a tremendous amount of our time but it also was a significant waste for Lufthansa since at least two employee-hours have gone to our case alone and ultimately the information is erroneous. It’s unacceptable that the information isn’t directly recorded in the database. At the airport, why can’t an airport employee scan the baggage tag and passport instead of needing a new piece of paper? Offering a web form would be a huge improvement over needing a fax for self-service.
I’ve dug around a little bit and it turns out that a company with over 4,500 employees worldwide, SITA, specializes in software for airport and airline logistics worldwide. Interestingly, it’s owned and governed by its members including airlines and air carriers like UPS who see it as a way to centralize services to lower costs. This sounds like an absolutely wonderful idea allowing seamless integration of systems and communication between carriers.
It appears that many airlines use a SITA service called WorldTracer to track lost luggage. The client-facing interface is awful — it only displays cryptic information such as “recovery process begun” and doesn’t allow for data correction. But the real problem seems to be with the agent-facing interface. I suspect that the reason people we talked to at Lufthansa were unable to tell us anything at all about our luggage is that they had read-only access to the WorldTracer database which didn’t have a record under our name since the lost baggage report had been lost. Given the information required to create a lost baggage report, it seems that the tracking system is entirely separate from the flight booking system. This seems like a real problem to me. It should be possible for an agent to quickly transfer all registered luggage information from a canceled flight into a baggage tracking system so that passengers can follow their bags from the minute they are re-routed using their claim tags. Clearly, bags are scanned periodically so the information exists somewhere. This seems like a data cross-referencing and dissemination problem. It’s not trivial but it seems like SITA is very well-positioned to address it. Their existing system seems like a step in the right direction but it’s in serious need of maintenance and update.
I also suffered from some absurdities that I think could partially be addressed by better software. I had a layover in Amsterdam and missed my connection by about 10 minutes because I had to go through security which took over an hour. This seems to be a common occurrence when going through security for a connecting flight. I think the true solution involves connecting terminals so that never happens but one could alternately imagine passengers scanning their tickets when entering a security line and getting priority if they are about to miss a connecting flight, for example.
When I tried to rebook a ticket on a later flight, the agent did not find any flights to Lyon that day. The agent next to him, overhearing my complaints, suggested some codes to enter to see more flights and sure enough, one showed up. All available flights should have been clearly visible. Why are agents using command-line interfaces? In a lot of cases, I find command-line more efficient than GUIs, but this is an example where I can’t believe it’s so. Imagine being able to work with 10 passenger requests at a time or do a side-by-side comparison of different options. How much of an efficiency change can be triggered by a change in interface for re-booking agents in airports? Is there HCI research on this?
I had the opportunity to watch several agents re-book passengers during the day I spent at Schiphol and it is a tremendously inefficient process involving selecting a flight to see its details, etc. I understand that flight booking is not in any way a trivial process. There are race conditions, tiered pricing, status considerations (Gold, Platinum, etc), overbooking, etc, and that’s exactly why an agent shouldn’t have to balance all of these things for each customer independently. On average, it looked like it took about 7 minutes to re-book each individual passenger. No wonder there were 8-hour lines at Schiphol. During that wait time, airlines have no idea of true demand and are having to re-invent the same solutions for passenger after passenger. Moreover, the lack of system encourages truly antisocial behavior! The only reason I got rebooked that day is that I elbowed my way to the front of a line and demanded to be put on a flight to Paris. I’m not really proud of it, but…
A cancelled flight should result in an attempt to automatically re-assign passengers. Priority should be automatically determined — by last name, by value to the airline, whatever, but not by pushiness. Passengers should immediately be told where to sit and how long to expect to wait.
I’m a big fan of ITA Software, which Google would like to acquire. Their products power most popular airline booking systems including Kayak and FareCast and have provided incredibly rich information about flight popularities and so on. I poked around a bit and found the screenshot at left which nearly made me weep with joy (taken from their baggage management brochure). This is exactly what I had in mind, only better. Another screenshot shows all passengers from a flight and automatically-suggested alternate accommodations. Why don’t agents use this? It may be expensive software, but I just can’t believe that it would be any more expensive than tens of thousands of passengers having to wait for hours in line, lose their luggage and be put in hotels.
Perhaps most alarming is that at one point, we were told the plane we were supposed to get on was 10 minutes away. Half an hour later, we were told that the plane had, for some unknown reason, landed in Stuttgart instead of Amsterdam. The gate agents truly had no idea where the plane was and when/if we had any chance of leaving. I imagine KLM probably has a general idea of where its planes are most of the time. Why is that information not available to gate agents and customers?
Air travel involves complex logistics which means software could have a significant streamlining effect in that domain. Though there clearly is already great software running behind the scenes (after all, most planes land in the right country at the right time with the right bags), some systems leave a lot to be desired. I think that if both passengers and employees were more aware of how software works and what it enables, we would see accelerated systemic improvement. For example, gate agents certainly don’t enjoy spending 7 minutes each with angry passengers to try to accommodate them and if they understood that there were alternatives, they might be able to put pressure on their employers.
If my students can be similarly thoughtful about areas where software can make a difference, then I feel like I’m doing my job. Maybe this is the elusive ‘computational thinking’ that we want all educated members of society to be capable of?
My mind has gone blank
Now as void as a method
that does not return
I like to give my students a creative 1-point extra-credit question on bigger assessments. It buys me a bit of goodwill while balancing out small mistakes students make when they are rushing, unclear questions and the like. I also get a glimpse of students’ true feelings for programming as well as some information about how deeply they’ve internalized concepts. For example, the author of the poem above clearly has a good understanding of returns and the meaning of void.
I just gave my AP CS students a quiz and encouraged haikus for the extra credit. The results were stunning.
Will a char suffice?
no, you must use a string. Why?
for it has methods
As most good ideas, this one comes from UW CSE.
There’s snow in Seattle which means that I can see a half dozen emergency vehicles and accidents from my window and school is closed. For a change, I’ll actually have time to think tomorrow instead of madly scrambling through the day. I don’t think it makes sense to expect consistently thoughtful, quality teaching from people in front of a classroom 5 hours a day, every day. But never mind that.
I just had an excellent discussion with Mark Engelberg about the Space Needle assignment I referred to in my previous post. He had a lot of great things to say. First he noted that without the scaling, it’s definitely a “bad” assignment because the results could be obtained with a big print statement. He also points out that it’s not really “about something” — it doesn’t provide insight into any interesting domain. Yes, I think that’s mostly true. And part of my point is that I don’t believe that matters so much at first. Lots and lots of people completely disagree with me, though, and I think they have fine arguments, though I don’t agree with all of them. For example, I think that the act of programming itself is pleasurable, even when solving totally contrived problems. Also, my (lofty) goal is to quickly scaffold students to a point where they can apply skills to domains they are interested in. I’m willing to sacrifice real context in early assignments to get there.
One thing I noted is that this assignment has, in my experience, provided insight into who will breeze through the course and who will struggle. That’s very important information to have early on. I think it’s a nice predictor because it requires a reasonable mental model of state and an ability to find patterns. Really, it’s an algebra problem more than anything else: it requires writing an equation representing the number of each character type and using that as a loop bound.
I think I forgot something important about “good” early programming assignments: they are a proxy measure for specific, intangible mental models. I wish I could dissect students’ brains and see how they’ve conceptualized memory allocation but that would probably violate some laws. Instead, both test questions and assignments have to give me information on what misconceptions, if any, students have so that I can correct them. Perhaps more importantly, students also need to be given ample opportunity for targeted practice to build mental models over time.
I think this is again an example of Stuart Reges’ influence on me. He wrote an excellent SIGCSE paper a couple of years ago called “The Mystery of b := (b = false)” (PDF) which has colored the way I look at practice and assessment in my programming classes. The paper talks about an interesting question from the 1988 Advanced Placement computer science exam. The test was then given in Pascal; the question in Java would be:
If b is a boolean variable, then the statement b = (b == false); has what effect?
(a) It causes a compile-time error message
(b) It causes a run-time error message
(c) It causes b to have value false regardless of its value just before the statement was executed.
(d) It always changes the value of b
(e) It changes the value of b if and only if b has value true just before the statement was executed
What Stuart found is that this question was relatively strongly correlated to others on the test. He goes on to identify 4 other questions that also are good predictors of students’ success on the rest of the exam. One of Stuart’s conclusions is that these types of questions make for good practice questions because they target specific mental models and allow students to “debug” their reasoning. I think that’s a strength of the Space Needle assignment and others I like to use.
In my last post, I said that it was most important that assignments gave students a sense of ownership. After thinking about it more and discussing with Mark, I changed my mind. So here’s my ordered list of the most important characteristics for an (early) introductory programming assignment:
- Targets specific skills to develop
- Gives students a sense of ownership/pride
- Has clear requirements and expected outcome (does not cause unnecessary frustration)
- Provides a proxy measure of specific computational mental models

RSS
LinkedIn
Facebook