Tag Archives: laptop

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.

Analog Development

Analog Development


by Richard White

I’m a minimalist.

Seems like I’ve been “going light” for most of my life, or at least since I got turned on to backpacking, and started eating everything from cereal to steak out of one of those little Sierra cups that were all the rage back in the 70s. I don’t carry any consumer debt, I don’t check a bag (even flying transcontinental)… and you can still occasionally catch me eating Lucky Charms out of that little cup.

The ultralight ethos only got reinforced when I began preparing live in France for an extended period of time. Books, music, photos, lesson plans… everything got moved onto a 15-inch Titanium PowerBook, and it seems like I’ve been living out of a laptop ever since.

I’ve had lots of reasons for expending the time and energy it takes to transfer old-school paper-based lessons and lesson-plans into digital form. Part of it has to do with the ease of transferring information from one year to the next. I look at some of those “Course Planners” that I used to plan the year with, and remember how I’d painstakingly transfer one year’s schedule into another planner for the following school year (writing in pencil, in anticipation of the inevitable changes that would necessitate last-minute adjustments). I had two large 3-inch binders, one for each semester, in which I’d keep detailed lesson plans, copies of handouts, lab activities, tests, test keys.

It’s all a bit overwhelming when I think back on it now.

I’m reminded, though, of how important those pen-and-paper, “analog” lessons were, now that I’m in the process of developing a new course. You can get all sorts of “planning in analog” advice, from everyone from Nancy Duarte to Garr Reynolds, and they’re right.

There are lots of reasons why it’s good to plan with a pencil and pen. Making diagrams and sketches is almost always easier on paper. Collaborators can easily add to your work (as long as they’re in the same room). Paper is easily transported, and multiple pieces of paper can be easily spread out for examination.

For me, it’s mostly a simple question of real estate. I’ve got a two different calendars that I’m working with, a lesson plan for the day, a textbook propped open—and yes, the laptop opened up—and that allows me to organize the disparate elements of the course and assemble them into something more-or-less cohesive, in a way that clicking back-and-forth among eleven open windows on the tiny screen simply doesn’t allow for.

Imagine me and the Sierra cup, a 10-oz steak flopping over the sides, and sauteed mushrooms dropping onto the ground while friend, fellow backpacker, and chef for the evening Brian laughs hysterically.

The final product for the course I’m working on (a computer science course) will include a website, the lessons (in PowerPoint form), a series of assessments, and a whole lot of code examples and programming assignments, and all of it will eventually live on the laptop.

For now, though, I’m enjoying the paper. The notes. The ballpoint pen. The mess.

It’s all part of the process.

Here comes Linux, part 2

Here comes Linux, part 2


by Richard White
Dell Inspiron Mini 10V
The laptop showed up today.

The little Dell Inspiron Mini 10V, pretty much the cheapest little computer that you can get these days, showed up at work in a package quite a bit smaller than I was expecting. I cracked the cardboard open, lifted the lid, and raised my eyebrows. “Wow. That thing is small.”

Kevin the receptionist looked interested, so I pulled it out of the box and handed it to him. “Wow! That is small! You knew it was going to be that small, right?”

I guess I did. I’m not sure I knew it was going to be that small, though. I opened it up to find that the screen was even smaller (still 10-inches diagonally, as expected), but that my hands rested comfortably on the 92%-of-full-size keyboard. The school day was over, but with the arrival of the new machine, I was anticipating that I’d be spending the next few days getting this machine set up.

On this particular evening, though, the task was simple: get Linux Mint installed on the machine.

If you’ve never installed Linux before, there are a number of ways to do it. The easiest by far is to take a CD for a particular distribution (Ubuntu, Knoppix, Linux Mint in my case), boot the machine using that CD, and then install from the CD. I’ve done that before on a number of different machines, and it’s a relatively straightforward process that involves (usually) answering a few questions so that the operating system can be configured to your needs.

For the Dell 10V, the process is somewhat complicated by the fact that it doesn’t have a CD drive. Welcome to the future. Blue-Ray to the contrary, some machines are already losing their optical drives, which allow machines to be small & lighter, or to use valuable space for solid-state drives or batteries. But… how am I going to install the new operating system then?

Enter the flash drive. Modern PCs are able to boot from a flash drive, so it’s a “simple” matter of putting Linux Mint onto the flash drive and making that drive bootable, which I’d been smart enough to do a few days before. The excellent instructions at pendrivelinux.com explained how to get Linux Mint 7.0 onto a flash drive, which goes something like this:

  1. Download the Linux Mint 7 ISO.
  2. Burn ISO to a CD
  3. Insert your Linux Mint7 CD into a PC and boot from it. You’ll be running Linux Mint at this point off the CD. You can use the CD to install Linux Mint on the PC if you wish, but what we’re really interested in doing is creating a bootable USB flash drive for the laptop.
  4. Insert the USB flash drive into the computer running Linux Mint.
  5. From the list of Applications, open Terminal and type:
    sudo su
    apt-get install usb-creator
  6. In USB Creator
    1. Select the USB disk
    2. Click the button “Make Startup Disk”
  7. IMPORTANT: Download a custom Linux Mint 7 syslinux.cfg file from pendrivelinux.com and copy it to the syslinux directory on your flash drive (overwriting the original).
  8. Eject the USB drive with Linux Mint on it.

So then I waited a few days until the Dell Mini showed up, and didn’t even really bother to boot into Windows XP, although I suppose I could have done that. But I’m a working man, and I don’t want to have to mess about with malware, viruses, and such, so I just decided to jump in and install Linux Mint on the entire thing:

  1. Insert the USB drive into the Dell Mini 10V while it’s turned off.
  2. Startup the 10V, and tap the F2 key a few times just as soon as the Dell logo appears in the startup process. This will get you into the BIOS and allow you to choose the USB drive as the startup disk.
  3. Use the right arrow key to select “Boot” in the top menu. Arrow down to select “USB Storage”. Use the F6 key to move “USB Storage” to the top of the boot list. Now, when the computer starts up, it’ll check the flash drive for a bootable device, which will allow your Linux Mint USB drive to start up the computer.
  4. F10 to Save & Exit the BIOS, and the computer should boot up off the flash drive.
  5. Follow the on-screen instructions to install Linux Mint 7 on your Dell Inspiron Mini 10V.

Linux Mint 7 homescreen

Stay tuned for additional information: additional software installs, strategies, etc.

Here comes Linux, part 1

Here comes Linux, part 1

by Richard White


“Are you kidding me???” Dee shouted in disbelief.

I’d just told her that I–a faithful Mac user for the last twenty years–had ordered a Dell Mini 10v.

“Are you KIDDING ME??? she shouted again, thinking perhaps that I hadn’t heard her the first time.

“Yeah, I know…” I went on to explain that I’m not giving up the MacbookPro. And I’m definitely not using Windows (no offense). I’ve been looking for a decent portable on which to install Linux Mint, and after passing on the idea of a Lenovo ThinkPad (high quality, but a little higher-priced especially for a second machine), I fell for the “$100 off, free shipping” email that I’d gotten for the Dell.

This is more than just Black Friday extravagance. I’ve been intrigued by the idea of working with Linux on a laptop for a number of years now, ever since Mark Pilgrim famously made his own switch from the Mac three years ago. His reasons included Apple’s proprietary file-formatting and Digital Rights Management (DRM) lockdowns that make playing by their rules occasionally difficult. The hardware, although of high-quality, is known for being expensive, placing it out-of-reach for many students, and a number of teachers. The question became, is it reasonable for me, as an educational technologist to run most, if not all, of my digital life using Free / Open Source Software?

In addition to other topics being discussed here, I’ll be covering the journey here once the new machine arrives in a couple of weeks. For now, though, I’m anticipating using the following software:

Mac Linux
Operating System OS 10.6.2 Linux Mint 8
Browser Safari, Firefox Firefox (pre-installed w/LinuxMint)
Mail client Apple’s Mail.app Mozilla’s Thunderbird (pre-installed w/LinuxMint)
Chat client iChat, Adium, Skype Pidgin (pre-installed w/LinuxMint)
Web development client Panic’s Coda Quanta Plus?
Calendar program iCal Mozilla’s Lightning?
Text editor emacs, BBEdit emacs (must be installed using apt-get), gedit (pre-installed w/LinuxMint)
Office apps Word, Excel, PowerPoint Open Office? (pre-installed w/LinuxMint)
Music playing iTunes Pick one
Music editing Garage Band, Amadeus, Audacity Audacity
Image Processing iPhoto, Photoshop Elements, Acorn, Graphic Converter GIMP

Any suggestions out there? Let me know!

Digital Transition on a Sunday Morning

Digital Transition on a Sunday Morning

Richard White


True Story:

A few years ago, my good friend Brian travelled to spend the weekend with some friends of his in San Diego. He had an online business at the time, so he took his laptop with him, knowing that there would almost certainly be some spare time on the trip in which he could get a little work done.

He had a great time on Friday and Saturday, as one does when visiting friends. On Sunday morning, the three of them were slowly waking up at the breakfast table, sipping coffee, chatting. It occurred to Brian that he’d like to quickly check his email, but he didn’t want to be rude, so he left his laptop in its case.



One of his hosts piped up. “Say, you guys wanna hear something funny? There was this great op-ed piece in the New York Times yesterday…” The guy pulled out his laptop, cracked it open, clicked through to the website, and read the op-ed piece aloud as the others sipped their coffees and listened.

Now it was the second host’s turn. “Yeah, but there was a response to that in that guy’s blog. What was his name? I forget. Hang on…” A second laptop is produced, and Google is searched for the appropriate reference.

“Well, hell, if you guys are going online, you won’t mind if I check my email real quickly, do you?” The hosts just laugh, and soon, Brian has dealt with his email, and is on to flipping through his own online newspapers.

And that’s how it went. Three guys, three laptops. Coffee cups are refilled, and they chat merrily late into the morning, reading to each other from their respective “newspapers”–online newspapers, of course–and enjoying each other’s lazy Sunday morning company.

It’s a true story. Technology growth and networking change the media with which we interact, but they don’t change the fundamental nature of that interaction. The kid with the string-and-tin-cans became the kid sharing his parents’ phone line, who became the kid with his own fixed line, who became the kid with a cellphone, who became the kid who can send a text message like he can breathe. But they’re all just kids, trying to hang out with their friends. And there really isn’t anything surprising about that, is there?

Say it with me: “We’re going to continue to transition technologically, and we’re all going to be okay!”