Teaching Goals for Spring 2020

The start of the spring semester is looming all too close (about 60 hours left to go), and the pressure is exacerbated by having spent the past two weeks in intensive committee service (it is, apparently, possible for five people to sit in the same room for six hours multiple days in a row and churn out productive work, but it is exhausting and your evenings are not productive) and having a new course launching this spring. I’m trying desperately to get my ducks in a row (note to self: perhaps duck sorting would be a good programming exercise…) but also to take the time to step back and keep in mind what my high level goals are for the term. Because once classes start, it’s going to be all trees all the time (though not literally, data structures isn’t until next semester).

So, high level goals….

  1. For my programming course, I’m adjusting how I provide feedback on their code, to focus more on providing the type of feedback that helps them find and diagnose their issues rather than pointing out problems in specific lines of code. So, do more suggesting a test case they need to look at again or pointing out a portion of the specification they need to re-read and see how they aren’t lining up with it. There will be times when I know I’ll still point out an issue on a specific line, but I want to press myself harder to do that only when it’s the best way to provide the feedback in question. I feel like my mix of the two types of comments has strayed too far towards the specific line-by-line feedback and I am going to work on doing that less.
  2. For my artificial intelligence course, my goal is to keep careful notes on what works and what needs to be revised the next time around. I know that my first stab at AI for both majors and non-majors with no pre-requisites (no programming or math assumed) is going to have some rough patches. I already plan to go in being honest about this with the students and giving them space to let me know where we need to adjust as we go along. But I’m also going to be diligent of keeping track of the ups and downs. I’ve never been good at this type of note-keeping about my courses, instead telling myself I’ll remember for the next time. I intend to keep better track for this course.

Finally, I always start each semester reminding myself to be present for my students. I can’t let research or committees or other parts of my work follow me into the classroom. The tires that need to be replaced or the roofer that has to be called will still be there in an hour. If they’re working in groups on something, I will do anything except check email while waiting to start walking around and talking to them.

Personal Memories of the 2010s

Wrapping these series of posts up about the past decade, I looked through my various calendars and journals and thought about the major events and accomplishments of the past ten years.

Professionally, this decade will be hard to top. I received tenure and then was promoted to the rank of Professor. I ramped up my rate of publishing and received an NSF grant. I developed new courses in game design, eye tracking methods, gender and technology, and artificial intelligence. I supervised student research projects in nine different areas, including sentiment analysis, biometric identification, the accuracy of fitness tracking devices, and eye tracking to understand cross-racial face perception. I co-edited a book with amazing colleagues and contributors. And I got to lead curriculum revision projects at both the department and college-wide level.

This decade, I tried to push myself outside my comfort zone and say yes to opportunities. I joined the Pittsburgh Knit the Bridge group and helped create the world’s biggest yarn bombing. I got more involved in the SIGCSE community. I joined a gym and learned to do proper push-ups. I ran a Game Jam and coached a programming competition team.

This decade, I accepted my age. I started watching my diet. I got bifocals. I decided that however much grey hair starts coming in, I’m not going to dye it. I still stay up too late playing video games sometimes.

This decade, I helped my grandmother celebrate her 100th birthday. A couple of years later, I sat with her as she passed away.

This decade, I attended the defense of my first undergraduate advisee to go on to receive a PhD in computer science. I attended weddings of former students and congratulated them on their new babies. I celebrated their professional accomplishments with them.

At the opening of this decade, I found myself the only one of my siblings in the Pittsburgh area after my post-graduate school return and their subsequent departures. As the decade draws to a close, they have moved back and I find myself living near my entire immediate family for while I am endlessly thankful.

Favorite Books of the 2010s

I’ve wandered in and out of various on-line solutions for keeping track of the books I am reading, but thankfully I’ve never fallen out of the habit of logging all of the books I read in a paper journal that dates back to the fall I started graduate school.

Flipping through what I read in the 2010s, here are some favorites and other observations…

If I had to recommend a single set of books I read, it would be Connie Willis’s Doomsday Book and then Blackout and All Clear. They’re a blend between science fiction and historical fiction, with a grounding premise that time travel is possible, is controlled by academics, and is used for research purposes.

The books in my list that most caught my eye as “oh, that was fun, I should re-read that” were Cline’s Ready Player One, Cornell’s London Falling, Stephenson’s Anathem, Weir’s The Martian. So I read some good sci fi this decade.

I read a lot of mystery novels, but the standout is probably Laurie King’s Mary Russell series. My enjoyment of that series has led me to read a pretty wide range of Sherlock Holmes spin-offs this decade. I also read my way through almost the entire collection of Agatha Christie novels.

On the non-fiction side, I spent the first half of the decade mostly on technology topics, including some classics I’m surprised I only read this recently like Norman’s The Design of Everyday Things, and Margolis and Fisher’s Unlocking the Clubhouse. Of the many video game texts I read, Bogost’s How to do Things with Videogames and Koster’s A Theory of Fun are standouts. More recently I’ve been reading non-fiction about higher ed; I quite liked Roth’s Beyond the University: Why Liberal Education Matters and Felton et al’s The Undergraduate Experience: Focusing Institutions on What Matters Most.

The most random books I read are probably Extra Virginity: The Sublime and Scandalous World of Olive Oil by Mueller and The Phone Book: The Curious History of the Book that Everyone Uses but On One Reads by Shea.

Finally, I’m not sure how this summarizes the 2010s, but the first book I read in January 2010 was Pride and Prejudice and Zombies by Austen and Grahame-Smith. The last book I finished in December 2019 was Cheating Lessons: Learning from Academic Dishonesty by Lang.

Best Cooking of the 2010s

I keep a moderately updated Pinterest board of recipes that I’ve made or want to make. Some of my memorable cooking of the decade is there, but a fair bit isn’t.

For example, I got a smoker this decade, and now smoking our Thanksgiving turkey is an annual tradition that, if I believe what they say, my whole family looks forward to. Homemade smoked salmon, slow-smoked brisket, and even the half dozen extra chicken breasts I throw on the smoker whenever I use it and then freeze for later – this is my absolute favorite way to cook meat, though I do it less than I’d like because of the time investment.

Each summer, I now also make at least one batch of homemade salsa from the jalapenos and tomatoes that seem to be the only things my garden reliably yields (supplemented with grocery store onion and cilantro). I’ve had one yummy success with jalapeno jelly as well and have almost eaten through the whole batch, so that’s probably on the to-do list for next summer again.

And, I’ve been learning to brew beer in the 2010s. So far just from kits or recipes so I can master my technique. I’m thinking that the 2020s may be the decade where I start branching out and designing my own recipes.

For day to day meal prep, there are also some go-to recipes that I have kept coming back to. A reasonable number of them are from Smitten Kitchen – definitely my favorite recipe weblog. Looking through what’s made it into my recipe box, I’d heartily recommend the following:

Sheet Pan Meatballs with Crispy Tumeric Chickpeas

Farmer’s Market Shepherd’s Pie (vegan)

Khoresh Karafs (Persian Celery Stew)

Chiarello Chicken and White Bean Chili with Veggies

Charred and Raw Corn with Chile and Cheese

Summer Squash Gratin with Salsa Verde

Blue Cheese, Apricot, and Pecan Boule

Chocolate Toffee Cookies

Elodie’s Chocolate Cake

Chai-Spiced Brown Butter Pumpkin Walnut Loaf Cake

Favorite Places of the 2010s

I’m not a big traveler, but I’ve found some places I’ve enjoyed spending time this past decade, some closer to home than others.

As far as exciting destinations go, I visited Hawaii for the first time this decade. This is the only place I’ve visited off the North American continent, and I expected it to be nice but not up to the raptures one hears about it. I’m now part of the rapture contingent. I spent a week and a half on Oahu, mostly on the north shore. I was shocked how easy it was to find secluded spots to enjoy just sitting with the scenery. I don’t think I’ve hiked as many miles each day as in Hawaii because I couldn’t resist going out and seeing more.

I did find my favorite National Park this decade: Joshua Tree National Park. Perhaps I was just in the right mindset for it when I visited, but I think it has the best hikes through the most interesting landscape that I’ve ever seen – I remember one great hike that starts off through fairly even desert and then winds through rockier terrain and ends with a climb down into a ravine filled with cacti and trees that was a bit more challenging than I planned on but well worth it.

Close to home, I got a bicycle in the 2010s – I did have one as a kid but I never really got the hang of riding it back then. That’s led me to explore much of the Rails to Trails paths in the Western PA region and I love both the Montour and the Panhandle trails. As much of my summers as possible are spent out on them.

2010s in Review

The timing of the holidays this year and my various work responsibilities makes the ending of the decade align with a week where I’ve been able to set aside time to step away from work and catch my breath. It’s inspired me to, in addition to just resting and catching up on reading and maybe even getting some fresh air, spend the next week reflecting a bit on the past decade. Not from any deep philosophical stance. But I’ve been reading through the various “decade in review” posts and articles that are cropping up and a few ideas caught my fancy – thinking about places I’ve been, books I’ve read, and things I’ve accomplished.

So, expect that here over the next few days. I’m hoping that it might also kick start me into returning to regular weblogging in the 2020s. Or at least set me up for another good round of posts in late 2029…

Education at the Bauhaus

I started exploring the Bauhaus: Building the New Artist online exhibit (companion to a current live exhibit at the Getty Center) out of curiosity to learn more about the design principles that the interactive modules present. From the blurb I read promoting it I didn’t realize there would also be significant content about the educational vision of the Bauhaus. There were elements of how the exhibit discusses the blending of fine arts and applied arts that resonated with conversations I’ve had with colleagues about the goals of education – including outside the domain of the arts.

In fact, I’m frequently struck by how often the educational considerations of artists and of computer scientists can be highly similar once you dig below the most surface level of the content. Two quotes from the Bauhaus exhibit echo this to me. Describing the painter Lyonel Feininger’s illustration of a cathedral as a representation of the school’s philosophy:

A preindustrial building form, the cathedral promised the possibility of realizing the Gesamtkunstwerk, or the total work of art, in which designers, artists, and artisans worked together toward a single, spiritual goal.

And in an excerpt from the school’s 1919 program:

This world of mere drawing and painting of pattern-designers and applied artists must at long last become a world that builds. If the young person who senses within himself a passion for creative practice begins his career, as in the past, by learning a trade, then the unproductive ‘artist’ will no longer be condemned to imperfect artistry because his skill will be preserved in craftsmanship, where he may achieve excellence.

While I know I am abstracting away some of the deeper underlying sentiment of this philosophy, there is a thread here of balancing learning with doing and with engaging in doing that grapples with the entire breadth of a messy problem embedded in the real world rather than an academically constructed puzzle. From a computer science perspective, there is a similar balance between theory and practice within education, and an ongoing tension in ensuring individual students engage with both sides of the spectrum.

The whole online exhibit, including the interactive exercises, is worth checking out. The content about the specific design principles being taught is interesting and also continue to echo the above themes in describing how they were taught, particularly in the section on Body and Spirit. I think it would be a fun read for any educator, regardless of discipline.

How we think about coding and computing literacy

I’ve been meaning to write about Annette Vee’s Coding Literacy: How Computer Programming is Changing Writing for a while now. The book looks at the current interest in “coding literacy” from the perspective of literacy studies. I picked up the book because I was interested in this outside perspective, and two quotes in the introduction immediately told me I was going to enjoy this book:

Programming as defined by computer science of software engineering is bound to echo the values of those contexts. But the concept of coding literacy suggests programming is a literacy practice with many applications beyond a profession defined by a limited set of values. The webmaster, game maker, tinkerer, scientist, and citizen activist can benefit from coding as a means to achieve their goals.

and, more pointedly,

My approach suggests that because programming is so infrastructural to everything we say and do now, leaving it to computer science is like leaving writing to English or other language departments.

There is a lot more to Vee’s book than these introductory thoughts on who codes and how they learn to code. She has great content about the history of literacy, connections between how reading and writing literacy movements relate to coding literacy movements, and how literacy, education, and power are connected. But a thread through all of it that connects to the ideas above is that what is expected in order to be “literate” shifts over time and the types of writing/coding that is considered literate evolves. This suggests that if we do achieve coding literacy, we will also see computer scientists having less ownership over defining coding literacy. Which – as Vee indicates – would be a good thing.

At the same time, I’ve been doing a lot of reading in the computing education research literature over the past month and some themes there brought me back to thinking about Vee’s book. It’s generally accepted that teaching programming is hard and we’re still learning how to do it well. This suggests that computer scientists could give our colleagues in other disciplines a leg up by sharing some of what we have figured out so far. For example – there’s a lot of evidence that collaborative learning really helps and there are some established pair programming practices for the CS classroom that could be adopted regardless of who is doing the coding.

At the same time, CS educators might consider if the goals of coding literacy allow for a broader definition of “success at programming” than we’ve been willing to consider. Can thinking about coding literacy help us refocus on the most essential first outcomes. I just read a paper from SIGCSE ’19 by Pollock, Mouza, Guidry and Pusecker titled “Infusing Computational Thinking across Disciplines: Reflections and Lessons Learned” (ACM Digital Library: https://dl.acm.org/citation.cfm?id=3287469) and while they are writing from the perspective of mentoring faculty in other disciplines to integrate computational thinking in their courses (which they have some really interesting ideas around) I thought their draft of a Computational Thinking Rubric that could be used across disciplines was also a useful reflective tool for me as a computer scientist considering what I hope to achieve in a first course that both encourages students to consider further study in my discipline but also serves students well who may not take any more courses in my program. I think there are connections to what Guzdial has been blogging about recently related to task-specific programming as well, and the “powerful ideas of computer science” identified in an essay he linked to by Marina Umaschi Bers, What Kids Can Learn Through Coding, such as using logic to order a sequence of complex behaviors.

So I’m seeing a lot of connections in various writing I’m encountering about coding literacy (under this or a variety of other labels). Turning back to Vee then, I think this quote from her conclusion is a helpful way to think about how to continue to move forward on these projects:

Studying textual literacy in international contexts, Brian Street advises understanding first what the context for literacy is, and what people want to use it for, and then afterward establishing a curriculum to support and respect those uses. Following this advice from literacy researchers, then, would mean that computational literacy campaigns can aim for certain outcomes, but they must also solicit and respond to the aspirations, ideas, and established practices of their audiences.

To-do list from SIGCSE 2019

The timing of SIGCSE (the technical symposium for ACM’s special interest group on computer science education) as midway through the Spring semester is a nice lead-in for course revisions that might happen over the summer for the next year, but the trick is to actually remember those intended revisions. There’s also so much one can take away from SIGCSE that I’ve committed to, each time I attend, identifying three manageable things I can do to follow up from the conference in the coming year.

Top of the list is a revision to my OO programming course inspired by Prather et al’s paper “First Things First: Providing Metacognitive Scaffolding for Interpreting Problem Prompts” (ACM Digital Library: https://dl.acm.org/citation.cfm?id=3287374). They demonstrated how working test cases before beginning to program can help with successful program completion (and, tangentially, that re-reading the problem prompt does not have a similar positive effect). I already instruct students to work through a few given test-cases by hand for most of the assignments I give, and I also give daily “preparation quizzes” due before class through our CMS. This fall, I’m going to try having the quiz for the next class session after an assignment is distributed require students to work through a test case for the assignment by hand. I particularly like how this takes things I’m already doing and makes them work together to hopefully get real benefit for my students without much additional work on my part beyond what I’m already doing.

My prior Screenshot entry was about the importance of students being open to learning from their failures or missteps, so the “Rethinking Debugging as Productive Failure for CS Education” panel (ACM Digital Library: https://dl.acm.org/citation.cfm?id=3287333) resonated with so much of what I’ve been thinking about and discussing with colleagues in my department. There were a lot of good suggestions, but one that I want to try out next year (and part of this will be figuring out the right place for this) is asking students to journal about their goals around debugging and their personal process of debugging. I’m leaning towards introducing this in my CS0-style game design course to get students reflecting on how they respond to programming errors early.

Finally, I had some great conversations with many of the people who’ve been involved in the SIGCSE Committee on Computing Education in Liberal Arts Colleges. Our final report should be appearing soon, but I’m looking forward to continuing to work with this group over the coming year and hopefully help organize a session/workshop for SIGCSE 2020 that will start addressing some of the needs of the liberal arts computing education community that the report identifies.

Making a note to myself to check in on how I’ve done with these projects before heading off to Portland next March!

Just silliness

I always enjoy the updates to Math with Bad Drawings that reflect on the process of teaching math. The recent entry The Serious Truth About Silly Mistakes rang particularly true for me, especially when I think about teaching programming.

Orlin writes about how students do sometimes make careless mistakes – what I might think of as “typos” or “silliness” as he calls it – but that students (or, in his case, their parents) can struggle to distinguish an actual careless slip and an instance of “silliness” that reveals a lack of underlying understanding. He suggests the following for why mathematics may be particularly prone to this phenomenon:

“To some, mathematics feels like the successful performance of prescribed steps. In that case, the whole subject is mechanical and straightforward. All mistakes, in this light, are “silly” misfires.”

This description can easily apply to programming as well. The early tasks you do in a programming class can help create this mindset – you’re just getting started so a certain amount of the focus is on learning the structure and syntax of the language. If you’re focusing on reasoning out the right arguments to a method or what to set as your loop condition, it’s easy to omit a parenthesis or a comma or some other bit of syntax.

On the other hand, small bits of syntax can also have deeper meaning. You forgot that you have to call your method through an object? You didn’t declare your variable and just started using it? You have the order of your assignment statement backwards? Understandable mistakes – especially if you’ve programmed before in a language that operates differently – but also potentially reflective of, as Orlin says, your mental models still needing some development.

Orlin labels this as appeals to “silliness”; I experience this as the use of the word “just”. Many times when I work with students to help resolve a problem they are having with a program, once I’ve helped them understand the issue, they’ll declare “so I just forgot to _____”. And sometimes, it is “just” a thing they forgot to do – the carelessly omitted bit of syntax or typo they didn’t spot because they were focusing on whether their design choices and understanding of the concepts and problem had led them astray.

But I’ve started to push back on the word “just” when it seems to be softening the importance of the underlying concept that has been missed. It is a totally understandable instinct, but as Orlin says:

“Easier to admit occasional clumsiness than real confusion. But it’s the deep mistakes that signal the greatest opportunities to learn.”

If “just” gets in the way of realizing that an error reflects an insufficient understanding and the subsequent work to deepen that understanding, that “just” is a barrier to learning. I suspect it aligns with a mindset that the goal of a programming exercise is to produce a working program that meets the specification. But a more productive mindset for learning is that the goal of a programming exercise is to successfully work through the process of producing that program (I, as the instructor, already have a perfectly nice working version of the program and do not need several more), including all of the missteps that might occur along the way.

If I have done my job well as an instructor, I’ll have provided exercises that are likely to expose weaknesses in students’ mental models. But then we have to spend time in resolving the underlying misunderstanding. “Just” can be useful in defusing the tension and even self-doubt inherent in getting stuck on an exercise and create the space to be open to improving. But some care needs to be taken to make sure that it doesn’t just become the end of the process.