Update your Creative Process

In early 2001, in press releases and ads, Apple encouraged its customers to Rip. Mix. Burn. their music on an iMac.

It was an audacious advertising campaign given that the recording industry was in the midst of grappling with the rampaging growth of digitally copied media via Napster, LimeWire, and others. The Mac would soon leverage its position as a media hub with the release of the iPod later that same year. The process of assembling a “mix tape” of songs for a friend would never be the same again… although that process has since disappeared completely. Because everybody just streams now.

This post isn’t about that, though.

If taking prerecorded media and putting it together into a custom mix was the “old creativity,” it didn’t take much in the way of actual… you know, creativity. Assembling and ordering someone else’s music is fine, but… it’s a stretch to call it creative.

Welcome to the new creative. “Rip. Mix. Burn.” has evolved.

Fork. Commit. Push.

That’s right, I’m talking about using GitHub to fork a project, make changes that you commit to your fork, and then push those changes back to the master. If you know about GitHub, this all makes perfect sense, and is absolutely reflective of a creative process happening.

And if you don’t know about GitHub? Well… you need to get on it!

More to come…

Pair Programming

As a Science teacher I am well-acquainted with the idea of students working as partners in a lab setting. It’s a time-honored practice based on a variety of rationales, depending on the setting. Lab partners, or indeed partners in any academic setting, might be placed together for logistical reasons: there may be multiple responsibilities that need to be shared, there may be limited equipment, limited lab supplies, limited computers, or limited space. There may be pedagogical reasons as well: students can assist each other in learning material, or learning to work together may even be the goal of the lesson.

In computer programming classes, “pair programming” may be used, with one student typically “driving” (entering code on the computer), and another “navigating” (dictating code, catching typos, etc.) There are variations on the specific responsibilities of each role, but the general idea is that two heads are better than one, and that an ongoing conversation as the code is developed will produce a stronger product. Pair Programming isn’t just for classes–it’s actually used in the software industry by some organizations.

Regardless of the context, there are bound to be challenges when two people are asked to work together in a demanding situation. One common challenge is when two students have varying abilities or levels of success. Sometimes teachers will even pair students with this in mind, either placing students of similar level with each other, or pairing a successful student with a challenged student with the hope of fostering some impromptu peer tutoring. (I’d suggest that there are issues with both of these strategies, but we’ll leave that for another time.)

In my courses I’ve developed a Pairing Strategy that seems to be working well for my students based on the success I’ve seen in their assignments and their behaviors in the classroom. It works like this:

1. Introduce the idea of Paired Work.
Discuss the benefits and talk about the challenges. Mention the fact that there may be different roles to be played, and that those roles will likely change over the course of the experience.

2. Discuss behavior.
Point out that people need to be on their best behavior when working as a pair. Respect is an important part of this process, and that includes during that first moment when you learn who you’re going to be working with. A loud cry of “Oh, man, I got stuck with Christine??!” doesn’t get you off to a great start, and celebrating that you got paired with the person with the highest test average isn’t appropriate either.

Code.org’s video on Pair Programming, while a bit cheesy and clearly intended for a more Middle School audience, pretty much nails it.

3. Explain the Pairing process.
Very often I’ll use this computer program to pair students randomly. They’ve come to appreciate the excitement of finding out who they’re going to be working with.

In the case of Pair Programming, I’ll be very specific. Just before running the program so that students can see the results on the overhead projector, I’ll say that the partner listed on the left side of list will be the first “driver,” and that students will be using that person’s computer for the project. The person listed on the right side of the list will be the navigator, and will get up and move over to where the driver is sitting to get started.

#!/usr/bin/env python3

"""
random_partners.py
This program takes a list of students in the class and assigns them randomly
to a series of groups of a specified size.
@author Richard White
@version 2018-10-10
"""

import random,os

def main():
    all_students = ["Kareem","Lucas","Marcela","Dylan","Gwen","Ella","Adam","Carrie","Patty","Annie","Audrey","Aidin","Sinjin","Henry","Robby","Sean","Ms. Dunham"]
    students_present = ["Kareem","Lucas","Marcela","Dylan","Gwen","Ella","Adam","Carrie","Patty","Annie","Audrey","Aidin","Sinjin","Henry","Robby","Sean","Ms. Dunham"]
    os.system("clear")
    groupsize = eval(input("Enter # of people in a group: "))
    os.system("clear")
    i = 0
    print("PARTNERS:")
    while len(students_present) > 0:
        if i > 0 and i % groupsize != 0:        # Print commas after first one in group, 
            print(", ", end='')                 # but not if done with group
        random_student = random.choice(students_present)    # Pick random student
        print(random_student,end='')
        students_present.remove(random_student)             # Remove name from list
        i += 1
        if i % groupsize == 0:
            print()             # Space down at end of members
    print()

if __name__ == "__main__":
    main()

4. Run the program
Here’s a sample run from running this program in my Introductory Computer Science course:

PARTNERS:
Robby, Adam
Kareem, Aidin
Ella, Annie
Henry, Patty
Gwen, Ms. Dunham
Lucas, Carrie
Dylan, Audrey
Sean, Sinjin
Marcela

5. At an opportune time, have students exchange roles.
During every assignment, assuming I’ve done a good job of building in an unexpected challenge or new idea, I’ll ask for attention: “Hands off the keyboard!” or something similar. I’ll pose a question regarding the work that they’ve done, or share some observations I’ve made, or ask if anyone has come across the difficulty that I’ll expect they’re going to have. After this brief interruption, I’ll ask them to change roles and continue their work.

Sometimes the process doesn’t work quite right the first time, or there may be mid-course corrections required if students get a little sloppy in their treatment of each other. That can happen in any classroom environment. The fact that students are truly randomly assigned, however, seems to keep them on their best behavior. They know that I don’t have any intentions in assigning them to a given partner–this is just who they’re going to be working with today.

Here’s a video clip of my students working on a programming assignment in a Paired environment.

Overall, I’ve been very pleased with how this process has worked with my students over time. Give it a try in your classroom and see what you think!

Expectation and Perfection

“It’s getting better all the time…”
– The Beatles

As the new school year begins my classes are filled again with students, all of them wanting to learn, to improve their understanding of the world, and to develop their skills in a wide variety of areas, from writing essays to shooting free throws to writing computer programs to understanding human history.

Some of them, as part of their desire to improve, also wish to be “the best”in one or more of these areas.

Just to be clear, that’s not something that you get to be, and it’s not healthy to have such a notion even on your radar.

Of course it is *technically* possible to be “the best” at some arbitrarily-defined objective, in some subset of the population. I might be the best physics person in my household, for example, or my friend might be the best miniature golf player.

Running

There is a student I have worked with who is the fastest cross-country runner our school has ever had, and he has certainly developed some of his skills in healthy competition with other students. He continues to develop as a runner in college now, but he doesn’t have any expectation that he’s going to someday be the fastest cross-country runner *in the world*. The pursuit of such a goal would be, for him, distracting from the other opportunities he has in his life, and ultimately fruitless.

Climbing

In an interesting subculture of rock-climbing called “bouldering,” short climbs of subjective difficulty on a natural crag of rock or in a climbing gym are attempted by climbers wishing to improve their skills. A rating system grades these climbs–these “problems”–by difficulty from VB (a very easy climb, equivalent to scaling a ladder almost) to V0, V1, V2, and so on, up to (currently) V15, a problem so challenging that only a very few are able to pull them off after repeated attempts.

One of the wonderful things about bouldering is that there is naturally a focus on improving one’s skill level–“I just succeeded on a V3, I wonder if I can do a V4?”–in a supportive environment, with other climbers offering words of encouragement and, in some cases, spotting the climber to offer safety in the event of a fall. If there’s any competition, it’s a friendly one, perhaps to be the first to accomplish a given problem. There’s not much room for the idea of being “the best” when there’s a problem one crag over that’s twice as hard as what you’ve just completed.

Musicians

The same goes for musicians learning a piece of music. Most of the musicians I know, especially the very good ones, are very humble. They work hard to improve their improvisation, or their performance of a piece of classical music… but “mastery” of performance isn’t possible. No one says “I’ve mastered Beethoven’s ‘Moonlight Sonata’.”

Physics

In my teaching I have the pleasure of teaching physics to very bright students, it’s my role to offer them a sequence of problems which present them with increasingly difficult challenges of their understanding of physics principles. Students who recognize that they have started along a path towards a greater comprehension are able to approach their learning with a more relaxed attitude, and seem to be more receptive to the inevitable setbacks that are a normal part of that process.

One of my students, after getting what she felt was a disappointing score on a physics test, went home to tell her father about it, hoping to get a little sympathy from him. His support, however, wasn’t what she expected. Upon hearing the news he just smiled, put an arm around her, and said, “Now you know you’re studying *real* physics!” He was an engineer, and all too familiar with the struggle that comes with making progress in any challenging endeavor.

Some students don’t yet understand

The whole idea of “life-long learning”—which every teacher I know has whole-heartedly acknowledged and embraced—is not something that some students have internalized yet. But it’s true, and it’s something that high-school students seem to sometimes struggle with, and the brighter the student, the greater the struggle. Accustomed to lapping up the easier challenges of the Lower and Middle School year, an Upper School student may be faced with something that is truly beyond their quick-and-easy mastery for the very first time. It’s a great opportunity for students to come face-to-face with the academic (and personal?) challenges that they will encounter throughout the rest of their lives.

Helping to manage their expectations at these moments is an important part of our teaching job.

“The Pressure”

I was experiencing some academic challenges of my own at one point in my education, and I’d decided to take a little time off from college. My parents, understanding and taking this as a teaching moment, gathered me and my three younger brothers around to make sure that we understood the situation. “We want you all to know,” my father said, “that we don’t necessarily expect that you’re all going to become doctors, or lawyers, or anything else. We just want you to do the best that you can do.”

The three oldest brothers all visible relaxed at this good news. The youngest, Stephen, however, looked grim. “‘The best that I can do?’,” he said to my father. “Boy, you guys really know how to put on the pressure!”

Just do the best that you can do.

No pressure.

Sherlocked!

Well, I suppose it had to happen sooner or later…

I’ve been Sherlocked.

If you’re not familiar with the term “sherlocked,” it comes to us courtesy of Apple, which back in the day offered a file search capability on its OS called “Sherlock.” The original feature set of that capability was expanded upon by a third-party developer who crated a software tool “Watson” that served as a companion to Sherlock, with the ability to search the Internet, perform calculations, look up references, etc. It was such a useful tool that Apple, in a subsequent release of the OS, incorporated almost all of those same features into their software. The developer was no longer able to make any money off the software he had developed–he had been “Sherlocked.”

This wan’t the first time that such a thing had happened. The first case of this happening that I’m aware of is back in the early Macintosh days (System 7), when Steve Christensen’s SuperClock! utility was written to allow the computer to display the time in the upper corner of the screen. This eminently useful feature was incorporated into System 7.5, along with a number of other features adapted / adopted/ stolen from other software developers. A lot of people view this as simply the cost of doing business with a large, powerful organization, but it seems like a bitter pill for a hard-working developer to have to swallow.

You can learn more about the process of being Sherlocked by Apple at:

What does this have to do with me?

A couple of days ago, I received an email from the College Board announcing some new features that were being added to the College Board website.

That “Question Bank” that supports students with 15,000 on-demand questions? That’s my idea! That’s exactly what the learnapphysics.com website has been doing for the last ten years.

Okay, to be fair, people have been publishing banks of test questions for years, and the SAT “Question of the Day” was a thing that I took as inspiration for my website, so… I can’t complain too loudly here. In fact, I’m not complaining at all. I’m glad that the College Board has caught on to the idea that there are lots of ways that they can support students taking their courses.

But if anybody asks, I’m going to come right out and say it: “Yeah. I got Sherlocked by the College Board.”

That Teacher with the Butcher Paper and Sharpies

I try to encourage my students to keep a paper-based notebook for their work in my computer science courses. I think there’s a benefit to taking notes by hand (when appropriate), and there are handouts, worksheets, paper copies of problems that I have them do by hand, and printouts of project specifications. Most of this is available on the website I keep for the students as well, but there’s something different about paper. You interact with it in a way that you can’t with a keyboard.

I’ve never really been into the idea of doing a lot of “crafting” in my classes, however. Paper, glue, tape, pencil sharpeners, colored markers, scissors, string… It all sounds very middle school (no offense to my colleagues there), and don’t even get my started on all those teacher meetings where we have to wander around the room, putting up stupid colored Post-Its everywhere.

I really hate that stuff.

Last year, though, a roll of butcher paper found its way into my possession, and I stuck a ring stand through it and set it off to the side in my computer science class. Recently I’d started to feel like there was a sizable number of students in my CS courses who were watching what I was doing on the board/screen, but they weren’t getting to write, to draw, to interact with the material the same way even that students in my AP Physics class work with ideas. I decided I’d find a good opportunity to see if I could change that.

Zookeeper

“Zookeeper” is a project in my AP Computer Science class that is designed to give students the opportunity to explore inheritance, creating an Animal superclass and a few subclasses that inherit from it. Object-oriented design asks one to consider data objects in terms of instance variables, and accessor and mutator methods. Every year I ask students to get together in small groups to consider their classes in some detail before jumping on to the keyboard. This year I asked them to draw diagrams of their classes on the butcher paper. It took a bit longer–I was surprised how much time it takes for someone to figure out how to tear off a piece of paper from a roll–and the result diagrams weren’t necessarily *artistic*, but that was beside the point. Being able to wrestle with the concept with paper and Sharpies resulted in projects that clearly demonstrated a greater facility with the concept of inheritance.

Binary Heaps

In the post-AP Advanced Topics class, we’ve just learned about binary heaps, a strategy for prioritizing items in what would otherwise be a standard First In-First Out queue. Here, optimized strategies for adding an item to the heap consist of placing it at the bottom and having it “percolate” up, while deleting an item from the top of the heap involves percolating down… and writing code to implement these strategies is hopeless without a solid qualitative understanding of the process.

Bring out the office supplies. Small groups of students each create their own heap structure on large pieces of butcher paper, then go through the process of inserting a value and percolating, or deleting a value and percolating. Cries of “Wait, what are we doing here?” intermixed with “Ohhhhhh! Now I get it…!” A few minutes later, armed with a clearer understanding of the mechanics, they’re ready to turn to their keyboards.

So, yeah, I’m that teacher now, the one with the butcher paper and the sharpies.

And I’ve got some post-its in the cupboard, too, but I’ve got to draw the line somewhere.

I Had a Pretty Good Day

Some days are better than others… and April 5 was a pretty good day for me at work.

The night before, it wasn’t looking like it. I’ve been behind in grading, in part because I’ve been working on developing some new assignments, and the one I’d been working on for my Advanced Topics class—The Elevator Project—hadn’t been coming together as quickly or as neatly as I’d hoped it would. After an hour or two wrestling with it, I crawled into bed with the idea that I’d have to rearrange the course calendar a bit…

Today was a Day 2, which means I get to see all of my students: AP Physics, and later on in the day AP Computer Science, followed by Advanced Topics.

AP Physics

It was already going to be a good day—a bit of lecture, followed by a fun lab activity—and just as I was getting going, I received a FaceTime call on my phone. I apologized to the students for the interruption, looked down to see who was calling, and didn’t recognize the 626 number. “Is one of you all pranking me?” I asked the class. I’d given my number out to all of them earlier in the week as an emergency contact for our field trip to Six Flags Magic Mountain.

I answered the call, and the face of Turner, a student in that class who was out sick for the day, appeared on the screen.

“Hi, Mr. White! Sorry to interrupt class. Did you get my email?”

“Uh… no. When did you send it?”

“Oh, about three minutes ago!”

“Yeah, I’m afraid I haven’t had a chance to read that yet. What’s up?”

“Would it be okay if I FaceTimed our class today so I don’t get behind on anything? If you could just prop your phone up there, I can see what’s going on…”

It was a good idea, and I applauded her initiative. “My phone is going to die if I FaceTime with you for the next hour,” I pointed out, “…but I’ll be happy to set up a GoToMeeting session with you. Look for an email from me with a link in it in two seconds.”

“Okay, thanks! Bye…”

I launched the app, got the screen pointed toward the board I was developing on, and a few minutes later Turner was following along from home, just as if this was something that we do every day.

Pretty cool.

Then it was time for our lab. Students were arranging magnets in various configurations, placing a clear piece of plastic over them, and sprinkling iron filings on the plastic in order to discover what the magnetic fields around those magnets looked like. One of the students in class, Nick, kindly volunteered to work with Turner, and for the next 30 minutes or so, there they were, looking at the magnetic field effects, making drawings, and discussing whether or not what they’d observed made sense, just as if she was in class.

When people talk about distance-learning, they’re often talking about a model in which a student watches a video lecture, and then maybe “interacts” with other students by leaving a few messages on an online discussion board. It doesn’t sound like a very robust way to teach/learn, and I think most people I know have a natural (and perhaps well-founded) distrust of the experience offered by taking an online class.

What I loved about my experience with Turner this morning was the natural way that the distance-experience occurred within the context of our regular class. And the fact that she was interacting with her teacher and peers in real-time was cool, too.

This isn’t something that can scale. This isn’t an experience that anybody is going to be able to monetize in any real way (I don’t think).

But it was awesome, and a great way to start my teaching day!

AP Computer Science

The AP Computer Science this year is overfilled, and the difference in the ability level of students varies pretty widely. The “Goldilocks” experience in there that’s just right for most students will be too easy for the more capable students, and require significant support for the students who are still coming along.

Today, as students were still struggling to recover from ten days off for Spring Break, I was trying to bring to a close our conversations around Sorting algorithms, recursion, Big-O notation. The Merge Sort was the topic for the day… and I wasn’t looking forward to it.

In the past I’d given them a template for this algorithm and had them try to fill in the missing pieces, or in tough years I’d forego this particular algorithm altogether. Today, I was having none of that. Today, I’d decided, I was going to develop it with them in class, step-by-painful step.

As I considered the lesson and how I wanted to run it, I realized that the timing was actually just about right for developing this moderately-challenging sort. One part of it consisted of keeping track of three separate pointers, one for each of three separate lists, and if I could do a good job of managing our development, it might be a solid introduction to some of the challenges they would face on the typical AP problem… and the test is coming up in just four weeks or so. I made some brief notes on what I wanted to do, and headed down to the classroom…

It worked fantastically. After a few moments settling into class—one student wanted to show me the new Tiger Woods video and update me on the current scores in the Masters—I grabbed a marker and took them through a quick review of the Merge Sort process itself. And then I was writing a bit of code for the first part of the sorting process. I targeted specific students with specific questions, and everybody was keeping up, more or less. I left the room at one point to let them work on their own for a bit, typing what we’d developed by hand into the computer. I came back to develop the tail end of that sort process… and then we were in to the business: the merge method that would pull each pair of recursive arrays back together.

And that, too, worked. They were on it, with insightful questions, and understanding nods when I explained how the thing they’d been thinking about was a good idea but wouldn’t work in this case because…

They were on it!

For just a moment there, I felt like a real teacher.

Advanced Topics in Computer Science

And following directly on the heels of that was the class for which I’d attempted to flesh out the Elevator Project, and more or less failed. I’d decided earlier in the day to re-frame it as an open-ended project. A few days before I’d had students fill out a Course Evaluation form and the results of that, while generally positive, also suggested that there was room to push the students a bit more. An open-ended project that gave students a bit more latitude to explore, fall down, and ultimately (one hopes) succeed might be just the thing.

I had typed up a brief two-page handout with a general description of the project: they needed to write a class-based simulation of a Hotel with a single Elevator that would move up and down between floors, picking up each Passenger from their current floor and delivering them to a requested floor. I passed out the blue photocopy of the assignment while explaining the general idea, and pointed out that this was a classic introductory Computer Science assignment and that I’d be working on my own version of the project at the same time they were.

“And… I don’t know about you, but whenever I’m about to write a simulation, I like to spend a little time with the actual thing so I can better understand some of the details of what I’m going to have to code. So…”—I started edging toward the classroom exit—”I’m going to ride the elevator for a little while.”

“Ummm… what?”

“Wait! I’m coming, too!”

“Come on you guys, let’s go…!”

And next thing you know, there is me along with thirteen Advanced Topics students crammed into the three-story elevator of the Poly building, traveling up and down.

Teacher: “So, are we going to write a Button class for the elevator buttons, or can we leave those out?”

Student 1 (with worried look on face): “What about the ‘Open Door’ and ‘Close Door’ buttons? Do we need to model those?”

Teacher: “You can if you want. I think I’m leaving those out of mine.”

Student 1 (relieved): “Oh. Okay. Me, too.”

Student 2: “Wait, let me off at floor 1. I’m going to run upstairs and hit the buttons for ‘Up’ and ‘Down’ at the same time. Don’t go yet! Wait for me to get there!”

Student 3 (in the corner, fists clenched in excitement): “This is so much fun!

Ah, my little Computer Geeks.

We got off the elevator a few minutes later and returned to the classroom, armed with ideas on how we might put together a solution to this problem. For the rest of the period, there wasn’t much beyond the sound of typing as people began working their way into the challenge.

Yup. It was a Pretty Good Day.

The Growth of CS Education at My School

by Richard White

2018-04-22

I’ve worked at four different high schools in my career as an educator, and taught computer science courses at two of them. I was the lone CS teacher at those schools, as are many of us. It gives us a lot of freedom in some ways, but it also makes teaching CS a bit lonely sometimes: as a science teacher, I enjoy lunchtime conversations with colleagues in that department, and benefit from having a colleague who teaches the same course I do (AP Physics C).

Computer Science is different. It’s not what many teachers consider a “core competency,” I don’t have a department chair to advocate for me, and having a single teacher of that subject implies that the classes offered by the school are limited to subjects with which I have some familiarity: I am comfortable offering an Intro to Computer Science course in Python, an AP Computer Science A course, and an Advanced Topics in CS (data structures) class, but I don’t offer classes in mobile application development, networking, or game development.

After several years of encouraging the school to increase the number of sections of CS offered, I am so excited that we made the decision to hire someone for a Math/CS position, and that I’ll soon have a colleague with whom I’ll be sharing CS teaching duties.

It’s a time of transition for the school, and for me as well. I’ve never had a CS colleague before! The courses currently offered at the school have all been designed by me, and taught by me for so long that I suppose I might be forgiven for being a little possessive of them. And yet (at this point, anyway) I don’t feel too worried about that.

It may help that I’ve seen our new hire teaching a CS class and I appreciated the way he worked with the students. Or maybe I’m just looking forward to having conversations with a colleague with whom I can discuss curriculum ideas, teaching strategies, projects, etc.

This new hire is relatively young, and although he has a decent amount of experience programming in a variety of languages, this will be his first experience formally teaching CS.

At this point, the challenge facing me is this: how do I share what I’ve done with these classes with the new teacher?

  • Course description? (of course)
  • Course syllabus?
  • Course calendar from last year?
  • Lesson plans?
  • Activities and projects?
  • Assessments (tests, quizzes)?
  • Teaching strategies?

I’m happy to share some/all of these things, but it’s also important for a teacher to be able to develop their own materials, and find their own way of teaching a class. I’ve worked with student teachers in the past, and giving them the freedom to find their own pedagogical identity is one of my favorite parts of that experience.

We’ll see how it all works out! In the meantime, I’m just so pleased that my school–a relatively small, independent institution–recognizes that providing CS experiences for as many students as possible is increasingly important.

No Textbooks for my Courses Next Year

tl;dr

I will not be using traditional, bound, textbooks for my classes next year. Instead, students will be using a combination of reading materials provided by the instructor, reference materials available online, and open source publications.

Complete text

Teachers have been asked to turn in a list of textbooks that will be used in their courses next year. This will be the first year in my 32-year teaching career that I will not be working from a traditional textbook in any of my classes.

This isn’t as big a step as it might sound, and it may be that I am in a somewhat unique position to be able to do this. For the past two years I have taught four different courses, and it is for those courses that I am making this decision.

Course-by-course analysis

AP Physics C: Mechanics, and Electricity & Magnetism

Textbooks for this course have, for a while now, been problematic. I’ve been very pleased with the textbook we use, but it’s large, heavy, and cost $411 on Follett last year. The homework problems that Craig and I assign have to be adjusted every time a new edition comes out–an increasingly frequent event–and the solutions that we provide to students have to be redone as well.

The topics of “classical” physics have not changed to warrant this kind cyclical upheaval. The cynical/realistic view of the race to release new editions is that publishers benefit when a course’s new textbook can’t be replaced by the old editions that students resell or pass on. Digital version of the book are almost as expensive and have a limited life-span: access to the digital version expires at the end of the course, and even for physical textbooks, publishers remove access to the textbook and its ancillaries once some number of years have passed–students and instructor can no longer access online materials for our 2010 8th edition of Serway & Jewett’s Physics for Scientists and Engineers.

Somewhat related to the expense issue is the question of how useful students found the text. Although I have provided references to the appropriate sections of the textbook that students can refer to as a supplement to classroom discussion, student evaluations of the textbook suggest that most students use the text primarily as a reference for homework problems–they don’t use the textbook as much for learning the content itself.

(Note: A quick glance at the Cengage website reveals that prices have come down on the 10th edition of this text. This helps to address one of my concerns, but not the others.)

I should also mention that there has been a black market version of this text, a PDF version that students have shared among themselves. While I applaud their resourcefulness, I can’t condone that strategy, and certainly can’t distribute the PDF myself, nor suggest that this is how they should acquire learning materials for our course.

The solution that I have promoted to our physics teachers is an open source one: the OpenStax organization, a non-profit based at Rice University, has published free, downloadable, textbooks (in PDF form) that students can install onto their computers. Student solution guides (PDF) are available for these textbooks as well. Printed versions of the textbook are available for a reasonable price ($48.50). These textbooks and the ancillary materials are being released under a Creative Commons license that allows for free distribution of this resource.

This solution checks all the boxes for us: free, easy-to-use (as a PDF on BYOD devices), distributable by us, and non-expiring. It’s a solid, long-term solution to a long-term problem.

Advanced Topics in Computer Science

This is the third year we’re offering the Advanced Topics in Computer Science course. The book we use for this class–Problem Solving with Algorithms and Data Structures, at $45, isn’t expensive as textbooks go, but the author and publisher have been kind enough to make available a free online version of the text as well. There are minor differences in the two texts, so this year, I began using the online version for class exclusively.

Although the printed version of this text is released under a traditional copyright, the online version has been made available as an open source document: “Problem Solving with Algorithms and Data Structures using Python by Bradley N. Miller, David L. Ranum is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.” This license explicitly allows for one to “copy and redistribute the material in any medium or format.”

What does this mean for students? I have made a copy of the online (HTML, browser-based) version of this text, and am free to make it available to students as a resource for this course. (They may use the online version as well.)

A copy of the Miller & Ranum text displayed locally in-browser

AP Computer Science A

This is perhaps the most challenging text to replace. As with physics textbooks, there are plenty of Java textbooks available, but not all of them focus on the AP Computer Science subset of material, and the ones that do exist tend to suffer from the same, multiple-editions, “re-publish early, republish-often” challenge.

In the past we’ve used the most recent version of Cay Horstmann’s excellent Big Java: Early Objects, Interactive Edition, 6th Edition, but Follet for the past two years has stated that supplies of that textbook are endangered. The Introduction to Computer Science using Java by Bradley Kjell is an online reference, updated in 2017 and released under a Creative Commons Attribution-NonCommercial 4.0 International License. While this reference doesn’t (to my reading) have the narrative flow of Horstmann’s work, it does have the benefit of being available, free, and electronic.

As an instructor with growing experience in this course, I’ve been doing what many teachers do after a few years under their belt: I’ve started to use more and more of my own materials in the course. The BankAccount class that Horstmann favors is one I find students don’t understand as well, perhaps, as the Car class that I created for them the first year I started teaching it. Exercises, activities, projects, and review activities are increasingly my own, and this is the year that we’re going to walk away from the Horstmann textbook.

Intro to Computer Science

The *Introduction to Computer Science* course was the first Computer Science course (in recent history) that I began teaching at Poly, and the one for which the curriculum is most my work. This elective course has used another Franklin Beedle offering by John Zelle, the excellent Python Programming: An introduction to computer science. At $45 it’s another reasonably-priced offering.

It’s another book, however, that students don’t seem to spend much time reading. It’s an occasional reference, perhaps, but many of the materials used in the course now are materials drawn from my own experiences teaching that course over the years. As with all the classes, I post online materials that we develop during discussions—indeed, those materials are what is displayed on the board as I present in class—so this textbook, perhaps, is the easiest one to walk away from.

Online lecture notes written by Richard White for the Intro to Computer Science course

I’m a special snowflake

The fact that I’m able to consider dropping traditional textbooks at all is due in large part to a nearly unique set of circumstances:

  1. I have a personal history of posting materials online

    My Masters in Education included an educational technology component, and since that time I’ve made it a point to put as many of my educational resources online as possible. Whether coding a website by hand or using a Content Management System (WordPress is great), I think teachers should put as many of their materials online as possible. The fact that I’ve been developing materials for my own courses for such a long time as part of that process has placed me in a better position to continue that online-publishing process.
  2. Science and technology books are appearing online
    Where I am not using content developed by myself, I am using online versions of textbooks that have been made available by others. Different fields and subject areas are putting Free and Open Source (FOSS/FLOSS) materials online at varying rates, with Science and Technology leading the way. Without ready access to those resources, this would be a much more difficult process.
  3. Open source movement
    In turn, the idea of making materials available online is thanks in large part to the [open source movement](https://en.wikipedia.org/wiki/Open-source_model). From Richard M Stallman’s GNU Project to Lawrence Lessig’s Creative Commons organization, people are starting to formalize the processes that teachers have used for years: sharing materials developed for their own students with other teachers. I also got a big kickstart in thinking about this possibility by Red Hat’s Tom Callaway who gave a powerful presentation on Education and Open Source at the 2016 Southern California Linux Expo.

What happens next?

Materials for my courses will be available online at crashwhite.com, and the process documented at hybridclassroom.com.

The demise of Pretty Good Physics

This is my fifth year teaching AP Computer Science A. More than most high school teachers, CS teachers are sometimes seen as loners: often, they are the sole teacher in their subject area at their school. The College Board has an online discussion community that displays some signs of life, fortunately, and there is a Facebook group that a number of teachers use as a resource as well.

Facebook? I know. I don’t understand that either.

This is my 20th year teaching AP Physics C. The College Board’s discussion community for that subject sees quite a bit more action than the Comp Sci one, but the real resource for that class is the Pretty Good Physics site hosted at Wikispaces. The venerable Gardner Friedlander manages that site, a section of which is password-protected so that only teachers with appropriate credentials have access. It’s a fantastic resource, perhaps unique in the College Board’s collection of communities, and the vast majority of requests for resources on the AP Physics Discussion Board conclude with a reference to Pretty Good Physics.

I’ll have to convert the paragraph above to past tense soon. Pretty Good Physics has a goodbye screen posted on their website now:

This isn’t due to any neglect or mismanagement on the part of Friedlander or anyone else. No, the entire Wikispaces platform is being shut down.

To be fair, Wikispaces is shutting down for perfectly good reasons, and in the best possible way. From the webpage:

Wikispaces was founded in 2005 and has since been used by educators, companies and individuals across the globe.
Unfortunately, the time has come where we have had to make the difficult business decision to end the Wikispaces service.

Why is Wikispaces closing?

Over the last twelve months we have been carrying out a complete technical review of the infrastructure and software we use to serve Wikispaces users. As part of the review, it has become apparent that the required investment to bring the infrastructure and code in line with modern standards is very substantial. We have explored all possible options for keeping Wikispaces running but have had to conclude that it is no longer viable to continue to run the service in the long term. So, it is with no small degree of nostalgia, that we will begin to close down later this year.

When is Wikispaces closing?

To enable us to offer maximum support to customers off-boarding from Wikispaces we will be undertaking a phased shutdown approach. This will help us regulate the system load on the export tool as users depart from Wikispaces

Scheduled Closure dates:

Classroom and Free Wikis end of service, 31st July 2018
Plus and Super Wikis end of service, 30th September 2018
Private Label Wikis end of service, 31st January 2019

There was an initial panic from people in the AP Physics community, but the site has been archived, mirrored, downloaded, and backed up by a large number of people who know very well the value of the site. I’m pretty sure that the site will arise again someday soon. There is a strong support community, and it’s too good a resource to lose.

But the loss of PGP specifically and Wikispaces in general does bring to mind a couple of questions:

  1. Was Wikispaces a poor choice for building the PGP resource? Are there better choices for building and maintaining an online academic community such as this?
  2. Does AP Computer Science have a similar, off-College Board community maintained by someone?

I’d suggest that Wikispaces turned out to be a perfectly reasonable choice for an online community given its 13-year history, a surprisingly long run in technology time. The only thing that would have been more robust would be hosting it on a private site, and that has issues associated with it as well.

And if AP Computer Science has a similar community, I’m unaware of it. Gary and Maria Litvin have built a nice following around the work that they do at Skylight Publishing, and they regularly reply to questions on the College Board Discussion board. The Facebook group at https://www.facebook.com/groups/APComputerScienceTeachers/ (login required) is… hosted at Facebook, a decision that I reject for a whole set of Facebook-related reasons.

I’ve seen other non-AP Comp Sci efforts to gather materials and references for people, including Awesome Python in Education, hosted at github—perhaps that Open Source platform is the new, best choice for something like this. For the moment, however, Computer Science in general doesn’t seem to have settled in on a focal point that is clearly identifiable.

Is this due to the nature of our subject? Is it because we tend toward the Lone Wolf end of the spectrum?

While we’re figuring this all out, perhaps the best strategy for providing ongoing access to content is to Own Your Own Domain.

DIY for the win!

References
http://doug-johnson.squarespace.com/blue-skunk-blog/2018/2/26/so-long-wikispaces-youve-been-a-great-tool.html