Monthly Archives: April 2020

My CS classroom

Part of the impetus for my writing lately is reflecting on what kind of changes have happened to my teaching as I move to Distance Teaching. In order to better understand that, I want to begin with a look at what my teaching looked like before, when I was teaching in a standard classroom.

Then we can talk about what I’m doing now and then do a diff on those two descriptions to see what’s changed.

AP Computer Science students

My school is a Bring Your Own Device school, so all students bring their own laptops to school every day, to be used in all of their classes. The majority of students use Apple laptops, with 1-3 students using Windows machines in any given class. My class sizes for the CS classes range from 8 (very small even for my school) to 18 (the upper end for most classes). Class is held in a standard classroom, with students seated in rows of desks facing the front of the room. I teach from a long demonstration table at the front of the room, with my laptop on one side, and my screen projected (via LCD projector) onto the whiteboard at the front of the room.

Students whiteboarding an Object-oriented design project

What we do in the classroom varies. Some days I’m introducing a new topic. That typically includes me projecting something from our course website–the description of a new data structure, say, and an example of that structure in use. I’ll annotate that projected information using a whiteboard marker, and perhaps develop new examples to either side of the projected image, interactively with students. Once the new topic has been introduced, students are directed to the assignment for the day/evening, also available on the website. I’ll typically give them a few moments to get started, and wander around the room checking in with them individually before returning up to the front of the room to begin my own development of a solution to the problem. Informal interactions and conversations inform our progress, and anything that isn’t finished in class is typically assigned as homework.

Intro to CS students doing a paper-based Parsons problem

Upon completing an assignment, students upload the source code to our course server where I can collect it, run it, evaluate it, comment on it, assign points for completion, etc., depending on the assignment.

Other days I’ll spend more time developing a more complex idea, or spend a few moments describing our next project which might take a few days to complete. Some days are just work days, when students have the entire period to work on a project, on their own or with classmates.

Students competing in a Capture the Flag competition

Reflecting

One of the things I’ve done well in my teaching, I think, is to bring students into the Computer Science tent who might otherwise not have thought to join us. This year, for the first time, we have 50-50 gender parity in the AP Computer Science classes, and although that number is not something that I’ve specifically targeted, I have deliberately made specific efforts to be more inclusive in my teaching and my outreach to prospective students. We should talk about that sometime.

I’ve worked to include things in my CS courses that are a little outside the standard curriculum, perhaps, in the interest of giving students a deeper experience. All students learn to use the Terminal, and all students submit assignments to the course server, giving them an experience beyond that of simply writing code in a browser interface. The Intro class, most years, includes a quick unit on websites, HTML/CSS, and responsive design. I know, I know, it’s not “real” computer science, but it gives them insight into an aspect of our technology-mediated world that they wouldn’t otherwise see.

And they’re so proud of the websites they create!

I’ve got a few areas that I could really stand to improve on. Although I love some of the larger projects I give my students, I don’t have a really big end-of-year project that could act as a sort of capstone for them. I’ve got a pretty good excuse: our seniors are done with school immediately after AP exams in early May, so I don’t have any “free time” with them at the end of it all. Still, that’s a goal of mine, to set up a nice project for them to really dig into at some point during the school year.

A big weakness of mine is giving CS students feedback on their work. I’ll give myself good marks for giving them scores, both for their daily assignments and their projects, but I haven’t yet figured out a good way to give them feedback in the midst of it all.

For some programs I’ll provide testers, and that’s a great automated way of giving them some specific formative feedback as they’re working on an assignment. For larger projects I’ll sometimes carve out an evening when I can sit down, run each student’s code, and provide specific comments on their work. Those remarks are often included in their actual source code as comments, which I’ll then either copy into their directories on the server (where they’ll probably never look at it) or print out and hand back to them in class (where they deride me for wasting paper).

So I guess I have two questions for you.

  1. How do you give feedback to students on their programs?
  2. What efforts do you make to ensure “academic integrity” in your CS program? Are students allowed to work together? How do you catch “cheating” when students are working on relatively simple coding assignments? Does it matter?

Okay, I guess that’s more than two questions. Sorry.

Your website, in one form or another

You need a website.

…or at least someplace to store your stuff. Your content. Your links. Your learning materials for your students.

Let’s take a look at some of your options. These are in subjective order, from most preferred to least.

1. Domain of one’s own

You can call it a “vanity domain” if you like, but it’s my firm belief that every educator should have their own domain, a place where they can hang their educational hat.

Here’s mine. And this one. And the one you’re reading, maybe.

This solution is intimidating for some people, and it’s true, getting a website set up requires some small degree of technology know-how. Purchasing a domain, finding a host, picking a server-style, setting up DNS… and that’s just to get the server running! Then you have to create HTML/CSS documents and upload them to the server… It’s no wonder people just decide to set up a WordPress blog and call it a day.

Still, if you are interested in learning how to manage a server, this is the best solution around.

2. GitHub

If you’re a CS teacher and you know about GitHub, hosting a site on GitHub may be a great option for you. GitHub, now owned by Microsoft, is a relatively stable organization and offers a nice free tier, as long as you don’t mind all your files/pages/materials being publicly available. Of course if you’re posting stuff on the Internet it’s probably all public anyway, so… You can pay them a little money if you want to keep some of your stuff private. (Or, you can just not post it in the first place, right?)

The obvious downside to hosting a website at GitHub is that you (probably) need to know about GitHub a little. Reading about repositories and commits and pushing is a little off-putting for most people, so I’m not sure how practical this solution is for mere mortals. Still, take a look at pages.github.com and see if any of that makes sense to you. It could be just the solution you need.

3. sites.google.com

Google’s venerable website platform hasn’t been yanked yet, but you never know. (Anyone hear remember Google’s Wave project? Reader? The Picasa photo platform? Google+?) Google is well known for killing off projects, so who knows how long sites.google.com will be around, but if you’re willing to take a chance, it’s hard to beat the simplicity of their tools there.

4. Google Doc page

Well, I guess this beats the simplicity of a Google site: a simple page, with links you create to other sites, or other Google Doc pages that you create. This really is about as simple as it gets, as long as you are comfortable navigating Google’s perplexing Drive structure. Make your page public and share the link with whomever you wish. It’s not an actual website, of course, but it’s gosh-darned close. Look at you! You’re on the Internet!

Why now?

There are a variety of other solutions out there as well: WordPress, SquareSpace, and the like. The point is, you really need one place to keep all your educational materials online, both so you can keep it organized and so you can make it publicly available to your students (and their parents?) as needed.

The reason we’re having this conversation now is not that you’ve secretly always wanted to be a webmaster. No, the real reason is that now, in April 2020, we’ve all become distance teachers, and we’re desperately trying to find ways to help out students become better distance learners. Having an online presence gives you a solid way of addressing that need.

It won’t all happen at once. But it needs to start happening now.

Don’t you think?!

My CS classes post-Distance Learning

Full marks to my school for giving great guidance going into distance-learning mode. I was part of a small committee in the Upper School that talked about some contingency plans, and a week before Spring Break was going to happen, our school site closed. Students had Monday of that week off while teachers met in the library, our last time in one room together, and the remainder of the week teachers worked from home, following our regular school schedule.

The biggest change for many of our teachers was an increased emphasis on providing clear, easy-to-follow, communication online that would be used by students and their parents to guide and manage student work. The website that I use for my own classes was already set up to do that, so the only adjustment I needed to make involved a lot of copy-pasting information from my website to the school’s.

Teachers were not required to meet synchronously with students on a daily basis–there’s only so much Zooming a person can stand, and the administration certainly had some sense of this. But daily check-ins of one sort or another were a must: a meeting, an email, a Google form that a student could fill out… whatever. That was left to teachers to manage, which I appreciated. The Monday of that week, teachers had also been given a brief introduction to Screencastify, so that those who wished could record video lessons for asynchronous lessons.

We coasted into Spring Break, had a couple of weeks off (my trips to Colorado and Mexico were both cancelled), and then picked things up again in early April. Our first day “back” was again a professional development day, with additional guidance from the admins on some modifications that they’d made to our plan, and then we were right back into it, providing a combination of synchronous and asynchronous lessons as teachers felt was appropriate for their courses.

I couldn’t have asked for a better response to this crisis from our administration.

What about my classes?

“How have your classes changed in the new distance-teaching environment?” The short answer to that question for my CS classes is, “not much.”

The biggest caveat to this response is the fact that we’re only a few weeks away from AP exams, so my AP Computer A classes are mostly in review mode. Those classes at my school have a surprisingly diverse collection of students, from your classic “computer geek” who loves everything we do, to students who have been academically successful in other areas and who thought it might be good to learn a little CS, to some students who mostly look to this class to be a relatively easy AP to add to their transcript. (It’s true, this curriculum is easier than AP US History or AP Bio, the two other junior AP electives that students can choose from.) I love working with all of these students, and with that diversity comes the need for extra support occasionally.

So coming back from Spring Break, students had a “Spring Decathlon” assignment, a series of assignments designed to review everything we’d covered up to that point in the year. In some cases they were required to write their own testers, but in most cases I provided testers that they could use to assess their own work.

And now we’re going over a variety of problems from years past, either together in a Zoom session (sometimes with breakout rooms so that students can work together), or sometimes in a prepared lesson that students can interact with online at their own pace. (See, for example, this lesson on the Gizmo problem, a practice problem from the Course Description.)

Even if students aren’t learning much new material at this point, in this online-version of my classes they are doing the same thing that we were doing before: engaging with me as I introduce new material, looking at a problem or project that has been posted on the website, and working–by themselves, with other students, or with me–to develop a solution to that problem. We check in with each other as work is being done, solutions are submitted to the course server for evaluation… and then we’re on to the next topic, the next project, the next conversation.

Two concerns

There are two things that bother me at this point. One is that Zoom, or Meet, or BlueJeans, or whatever live videoconference solution one employs, does not provide for a fully interactive experience, at least not the kind that most classroom teachers use. The spontaneous exchange between people is lost to a combination of poor sound, poor video, network lag, glitches, and software-based signal-switching as the platform desperately tries to identify whose voice should get priority in the channel. Conversation is stilted, so it’s a good thing that these students already know me. They still appreciate a solicitous “good morning” from me when we log on, and they still politely snicker at an occasional dad-joke from their instructor.

But it’s not the same as the classroom. As our Upper School director pointed out, acknowledging the challenges of distance-learning, “This is not why any of us chose to go into teaching.”

Related to that, then, is my other concern. What will it look like to begin a school year teaching like this? Nobody at my school has declared that we won’t be returning to classes on-site in the Fall, but of course, it’s not certain that we will, either. Some consideration of future contingency plans is warranted. Just ask San Jose State University. And so I wonder/worry what that might look like, for my students and for me.

It may very well be that there will be substantive changes to my course if that happens. I can envision, for example, a possible reduction in the amount of work assigned, an accommodation for the logistical challenges involved with distance-learning. It’s hard to tell at this point.

For my friends and colleagues who are working with a more sizable at-risk population, perhaps at a public school, things are much more serious. This spring, attendance has already dropped off in catastrophic ways for the very students who stand to benefit from school the most.

Summer plans

In the summer I work with a local public-private school program, Partnership for Success!, and it isn’t known at this time whether or not we’ll be meeting on-site this year. Teaching online, to students I haven’t met face-to-face before, many of them first-generation, will be an important test, both of my ability to develop new strategies for online teaching, and for them to develop new strategies in managing their own education.

As an example of how curriculum might change in a distance-learning context, last year PFS! students learned Computer Science using a text editor, locally installed Python3, and the Processing graphics platform, also locally installed.

This year, if the class meets at all, they’ll be learning CS using JavaScript, written and run in-browser using the repl.it platform.

Things change.

My CS classes before distance teaching happened

I want to talk a little about CS distance-teaching, and I realize that this is kind of a niche topic given that teaching CS at all is a niche endeavor. I teach other classes–I’ve been a high school science teacher for much of my career–but teaching CS is what makes up most of my day now, so I suppose this is a good place to start.

I’ll talk about teaching Physics classes online in another post soon.

Conflated with the question of “what are some great ways of distance-teaching computer science?” is the deeper, darker question that haunts each of us: “Can you just help me identify some great ways of teaching CS under any circumstances, even those not involving a pandemic?” Because I don’t think we’ve really got that figured out yet, either.

There is some great research being done out there, and a lot of it gets presented at the annual SIGCSE convention each year. You need to go. There are other conventions as well, but SIGCSE is arguably the best, and you’ll get some great ideas, meet some great people, and have the chance to reflect more deeply on what we do–teaching CS–and how we might go about doing it better.

For today, I’ll just tell you what I’ve been doing for the past few years in teaching my own CS classes, and after that, we can talk about what changed when I had to start distance-teaching.

For context, after a long career teaching in public schools, I have taught at an independent school in southern California for the last 15 years. I have an incredibly supportive administration that has supported the growth of the school’s CS “program” (three classes) even when that sometimes results in class sizes that are quite small. Just as importantly, I work with an amazing IT director who has provided so much for our program, from hardware to servers to off-campus network access for students. Some key elements of our program wouldn’t be possible without support from higher-ups at my school, and without that, my teaching strategies, and even parts of the curriculum, would look very different.

Another important factor in all of this is the students’ access to technology. The Upper School in which I teach is a Bring Your Own Device (BYOD) school that requires students to have their own Apple or Windows laptop on campus with them every day. Having students work on their own machines, and then take them home where they can continue working, goes a long way toward facilitating the work we’re able to do. Without a BYOD program, I’d be working with a roomful of computers and having students either carry data back and forth on flash drives or interact with data directly on our server. We’d make it work, but it would change some of what we can do.

Some notes on infrastructure

As classroom teachers we know very well that the curriculum for a course is supported by all sort of infrastructure, what a textbook publisher would call ancillary materials.

For my courses, I post the vast majority of the materials I present to materials on a website that is available to them throughout the course. New material is presented in class using an LCD projector displayed on a whiteboard at the front of the room, supplemented with comments and lots of drawing with whiteboard markers. Live-coding demonstrations of syntax and coding strategies, or public decoding of students’ programs, likewise happens using the LCD projector.

Speaking of textbooks, after struggles with availability of a seemingly endless series of editions of Horstmann’s excellent Java Concepts: Early Objects, I chose to move to a free, open-source textbook that seemed to satisfy most of the needs for that course… and subsequently shifted to free, open-source textbooks for the other classes as well.

I include appropriate sections for reading in the course calendar, but most students seem to rely more heavily on the online materials I’ve prepared for presentations anyway.

Intro to Computer Science, AP Computer Science A

These courses are both taught at the introductory level, and both cover approximately the same curriculum. The year-long AP course uses Java, and introduces objects near the beginning of the course and covers object-oriented design principles and algorithms in much greater depth than the Intro class, and students are formally tested along the way. The single-semester Intro to CS class uses Python and blitzes along quite quickly, with an occasional quiz to help keep students honest.

For both courses, programming problems are assigned on a daily basis, and students use the Terminal on their own computers to upload assignments to a server maintained by me. I can run auto-graders on their assignments and/or look at their code as desired.

An important preface to each course is an introductory unit that includes lessons on computational thinking, the filesystem on their computers (mostly Apple, some Windows, an occasional Linux), the and Terminal. As more students come into the course with little experience using local files (music and movies are streamed! Google Docs are in the cloud!), it’s critical for me to give them experience thinking about files and directories for them to be able to manage these courses.

Here then, are the topics covered in both courses, approximately in chronological order.

  1. Introduction
    1. Computer Science vs. Computer Programming
    2. Intro to Computational Thinking
    3. Encapsulation, Binary numbers
    4. The filesystem, using GUI to navigate the system, organizing files in directories
    5. The Terminal
      1. Navigating the local (client) computer
      2. Logging on to a server
      3. Navigating the server
    6. Text editors
    7. Integrated Development Environments (AP course)
  2. Computer Programming Principles
    1. Output
    2. Input
    3. Data Types
    4. Math operations
    5. Implementing classes (AP course only)
    6. Functions (Static methods for AP course)
    7. Conditionals
    8. Loops
      1. while
      2. for
    9. Graphics (using Processing.org)
    10. Object-oriented design principles (AP course only)
    11. String functions
    12. Lists (Arrays, ArrayLists)
    13. Algorithms
      1. Recursion
      2. Sorting
      3. Searching
    14. Objects (for Python course)
    15. Graphical programs (Graphics-based game)

Advanced Topics in Computer Science

This course picks up where either of the other two leaves off. After (re-)acquainting students with Python and object-oriented programming, it covers:

  1. Algorithm analysis; Big-O notation
  2. Recursion
  3. Linear Data Structures
    1. Stacks
    2. Queues
    3. Deques
    4. Linked lists
  4. Algorithms
    1. Sorting
    2. Searching
    3. Hashes (Map or Dictionary)
  5. Trees
    1. Binary Trees
    2. Heaps
    3. Binary Search Trees
  6. Graphs (introduced)

A note on providing a course website

I consider the website for each of my courses to be the logistical hub for what I do–it’s not uncommon for me to begin class by calling up the course calendar from the site and asking out loud, “So, what are we going to be doing today?”

I’m no genius in website design, and at least one of my students will attest to that: in a classroom presentation, he used one of my course websites as an example of “an okay site that could be so much better.”

Thanks for that, Ikenna. :)

And you may not be a rockstar at writing HTML/CSS/JavaScript code, but there are ways of making a website happen.

A course website will have a profound effect on how easily you can transition to distance-teaching.

If you don’t currently have a website that you use as a focal point for your teaching, you might not feel like now is the time to take that on. That makes sense. And yet…

We’ll talk about this more in the next post.

Hardware for Distance-Teaching

This is perhaps the least sexy part of an extended conversation about distance teaching. Hardware is just stuff you can buy, so it doesn’t demand anything special from a teacher aside from money, either your school district’s or your own.

One of the great things about hardware is that you can almost always get by with less, as dictated by constraints. The barebones minimum that you need is simply that which you almost certainly already have: a laptop with wifi, webcam, and microphone.

Most of us benefit from having access to a bit more hardware. In order of subjective importance, then–most important first, niceties last–is my list of things that I’m currently using in my online teacher. (This list assumes that your base working computer is a laptop.)

  1. external backup drive
    There’s no way I’m going to do anything data related without a backup of my computer. A former colleague of mine, just yesterday, dumped coffee into her MacBook Air. Of course it was an accident; nobody does these things on purpose.
    Backups before all else.
  2. external monitor (and cable, dongle)
    One of the best things you can do to help manage your newfound digital teaching is to give yourself some extra screen-based real estate. It’s possible to simultaneously manage windows with your calendar, website, word-processor, email, and Zoom meeting all on your laptop’s screen, like an animal, but who would want to? If at all possible, finding a spot where you can set up an extra monitor will empower you to better juggle everything. A top priority.
  3. graphics tablet
    This isn’t something that would have been very high on my list before I started teaching from home, but it turns out to be pretty important now. From highlighting written documents during a Zoom session to actually writing out things, doing math, or drawing arrows to emphasize relationships, a small tablet has made a huge difference in what I can communicate on the computer.
  4. ear buds/headphones
    Most video-conferencing software–Skype, FaceTime,Meet, Zoom, etc–benefits from keeping the audio output from your speakers away from the audio input of your microphone. Most software does a remarkably good job of managing feedback loops so that you may not need ear buds or headphones, but it’s a nice thing to have access to, especially if you’re trying to be kind to a partner or worker within earshot of your teaching.
  5. mouse (blue-tooth)
    For most people, an external mouse makes everything better. Logitech makes some very nice ones.
  6. external keyboard and laptop stand
    The ergonomics of using a laptop are famously disastrous: if placed in your literal lap, the keyboard is in the right position but the screen is to low for proper posture, and if propped up at some height in line with your vision, you can reach the keyboard. Placed on a desk, both your neck and hands are forced into unhealthy positions.

    The best solution is to place the laptop at a height where you can easily see it–mine is currently propped up using books, and my partner’s is sitting atop a pile of shoeboxes–and use an external keyboard at an appropriate height lower down. A well-designed stand can dress up your workspace nicely.

    You didn’t get into teaching to spend hours each day at a computer, but this is where we are now. The least we can do is take care of ourselves.
  7. comfy chair and awesome desk
    These, too, can make your new life as a desk jockey much better and more healthy for you. Not all of us have the luxury of a dedicated work space, or that holy grail, a home office. Bu the more you’re able to carve out a literal or figurative “room of your own” in which to work, the better it will be.
  8. external microphone
    Your machine may have an adequate microphone, but an external microphone is almost always better. If you’re meeting with students or recording videos for them, improving your sound quality is a big bonus for them.

My partner needs less hardware than I do, so she’s got her “home office” piled onto a card-table in the living room. I’m fortunate to have a 5-foot wide desk from Ikea that I can spread everything out on. It’s a bit of a mess, but hey, we’re all suffering a little bit here. I’m consider myself lucky to be well-equipped, at least as far as my hardware situation is concerned.

Thank you, Apple, for the dongles.

A return, of sorts

This is my “professional” blog, and it has been just about a year since I’ve written. That’s not to say that my career has been on hold. Quite the opposite, and of course, that busy-ness is partly to blame for my lack of posting here.

There is slightly more room in my schedule now, thanks to a certain pandemic, so I expect there will be a bit more content here going forward. Likewise, some of the very fine computer science teachers I follow online have encouraged others of us to take up pen and paper keyboard and blog… et voila.

Here I am again!

What’s next? Over the course of the next few weeks I’ll be sharing lots of stuff, most of it having to do with some variation on “distance learning during a pandemic.” Teaching with technology has always been a thing I’ve done, and I feel fortunate at this point to have some background there.

Still, this is a challenging time for teachers and students everywhere. I’m looking forward to setting down here a little bit of what I’ve learned.

Stay tuned!