Category Archives: Teaching

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

CS for All?

There was an interview last month with the governor of Rhode Island, Gina Raimondo, posted at http://freakonomics.com/podcast/modern-democrat-win/. The governor sounds like an eminently reasonable person (to my political sensibilities), and at one point in the conversation, to subject of Computer Science came up.

From the posted transcript:

DUBNER (Interviewer):
In terms of preparing the populace for the labor scenario that’s coming down the road, I know you’ve been pushing to have every student in Rhode Island take computer-programming classes. Is that a thing already?

RAIMONDO: It’s happening now. We set a goal, I think a year or so ago, that by the end of this year we would be teaching computer science in every district and every grade, starting in kindergarten. And we’re going to hit that goal this year.

DUBNER:
So, I hear about this kind of thinking a lot, and I certainly understand the appeal and the resonance. But I do also wonder if there’s a proven upside of having everyone learn computer science or programming. It strikes me a little bit like the equivalent of having every student in America during the boom of the internal combustion engine learn to take apart a carburetor. And then I think, if you look at the history of economics and progress, that one of the main strengths of economic progress is the division of labor and specialization, rather than everybody chasing after the latest trends. So I’m curious what the evidence was that inspired that move of yours.

RAIMONDO:
I think of it as access and exposure, and also just providing people with a basic level of essential skills. So, everyone has to take math. They may become a writer, they may become an actor, but they ought to have a certain basic level of math skills. First of all, because it’s an essential skill to function. And by the way, they might like math. I think digital skills are the same thing. No matter what job you have, you have to have some basic familiarity with computer skills and digital skills. And so it is as essential in this economy as any other skill that we teach. But also, we know — and there’s loads of data on this girls, people of color, and low-income folks are less likely to go into I.T. fields, which tend to be higher-paying. However, if they’re exposed to some computer training, they’re much more likely to go into the field and do well at it.

“Access and exposure.” That about sums it up. Without even weighing in on the question of whether or not students should be required to take computer science, how do we go about providing them with “access and exposure” to this subject?

There’s some degree of irony in all of this given that most of us who are computer scientists now never had anything close to the degree of “access and exposure” students have available to them now. My “first computer” was a teletype with a modem link to a PDP-11 at the local hospital, and we were lucky to have it. (Cue the obligatory reference to Monty Python’s “Four Yorkshiremen” sketch, at https://youtu.be/26ZDB9h7BLY.) Today, students have access to smartphones, inexpensive laptops, even Raspberry Pis, and more YouTube tutorials that you could hope to watch explaining how to program, how to develop, how to download…

It seems to me that students do have access, but the exposure is what’s missing at this point.

And that’s where CS teachers can be most valuable.

For those of you who teach at the high school level, does your school require a Computer Science class for graduation? What do you think of the idea of requiring Computer Science for graduation–yea or nay?

Volunteering: YouTube comments as community service

Volunteering: YouTube comments as community service
===================================================

2017-07-14
———-

by Richard White
—————-

My school has a “Community Service” component to the graduation requirement for students. They must volunteer for a given number of hours in service to the community, and there are a variety of ways they can do this. Some opportunities are described by the school, but it’s certainly possible to develop your own community service opportunity and have that count towards your requirements.

Is it possible that commenting on YouTube might count towards Community Service?

I think of this possibility as I consider my own activity on my YouTube channel (https://www.youtube.com/rwhite5279), where I post videos occasionally, most of them related to computer science and computational thinking. I’ve built up a small following since I began posting 9 years ago: nearly 750,000 total views, and nearly 3000 subscribers as I write this. Increasingly, viewers of some of the computer science tutorials have begun leaving questions in the comments section.

This one, for example, on a tutorial on how to use object-oriented programming in Python to simulate a Magic-8 Ball toy that predicts the future (at https://www.youtube.com/watch?v=6drqLGdXHQA ) :

You can see the question there, followed by a response from me. Here’s another example, a question and response for the same Magic-8 Ball tutorial:

I have a number of friends, teachers or no, who volunteer time in their local community: serving food at the local soup kitchen, visiting people in nursing homes, tutoring students after school. I occasionally get the question “What are you doing on the computer there?” and sometimes find myself answering “I’m responding to a question someone left for me on YouTube.”

Isn’t this a form of Community Service? Isn’t this a form of Volunteering?

Another introduction to object-oriented programming (at https://www.youtube.com/watch?v=wYYzteRKU7U ) prompted this selection of comments (and accompanying responses):

I’m well aware of the fact that online comments—”where nobody knows you’re a dog”—can be challenging: to respond to, to clean up (in cases of misuse or spam), to moderate. Some “discussions” become downright toxic, to the extent that some communities with a broad appeal have had to shut down the comments sections on their sites: if the conversation can’t be civil, there’ll be no conversation at all. In those cases, that strategy is probably the only one that makes sense.

In my little corner of the Internet, however, things are just fine, for the moment anyway. There’s not much fun to be had trolling computer science tutorials, and maybe that has helped to keep things a little more in-focus and on-topic.

Now, if you’ll excuse me, I have to get back to answering more questions. There is volunteering to be done, and I’m just the guy to do it. :)

Writing in Computer Science Classes

WRITING IN CS CLASSES
=====================

by Richard White
—————-

2017-06-06
———-

In the new *Advanced Topics in Computer Science* course that I developed this year, I had the opportunity to introduce a new type of Computer Science assignment (at least new to me): a written report.

I stole the idea of a written report in Computer Science from Michael Lew, an AP Computer Science A instructor whose summer institute I attended last year, and it solved a problem that I’d seen in my CS teaching: computer science students tend to enjoy coding, often to the exclusion of other important aspects of the subject. Coding is fun, of course: give my students a few challenging CodingBat problems and they’ll happily ignore me for hours.

Once problems become larger in scope, however, it becomes important to sandwich the coding in-between two other important aspects of any significant project:

  1. planning/design at the beginning, with consideration given to how the project is going to proceed, and
  2. a culminating conclusion to the assignment, possibly in the form of evaluation of the product (by the student or teacher), reflection on the process, a presentation of the project, etc.

Both of these aspects of a larger-scale project require time, either in class or at home, and that is certainly one of the challenges in implementation. In my own teaching, I feel like I’ve developed the ability to build in time for project-planning in the course calendar. The culminating experience, however, is something I’ve often been weak on.

This year, in the *Advanced Topics* class, we were studying the performance of various sorting algorithms, the simplest ones of which are all O(n2). After a brief introduction to SelectionSort, Bubblesort, and InsertionSort, students were semi-randomly assigned a sorting algorithm from among the MergeSort, ShellSort, and QuickSort.

The first challenge for students consisted of simply getting a working algorithm running. Depending on the level of the student and the difficulty of the algorithm, this might have been the easiest or the hardest part of the assignment.

The second challenge was doing determining the performance of the algorithm, both empirically (by collecting time data for data sets of different sizes), and possible analytically (by counting the number of statements the algorithm would execute under different conditions).

Finally there was the writing of the report itself, something that students who are good in math and computer science don’t ordinarily have the opportunity to try. In this particular assignment, I gave them a concrete example of my expectations by briefly showing them in class a report that I’d written myself for one of the algorithms. (I didn’t want them to copy the format too closely, so I didn’t make it available for study online.)

By the end of the assignment, there were a number of goals that had been accomplished:

  1. Students each had a solid understanding of at least one of the sorting algorithms assigned.
  2. Students had a strong understanding of how algorithm performance, expressed in Big-Oh notation, is related to an algorithm.
  3. Students had a concrete document demonstrating their understanding of this material, suitable for presentation or inclusion in a portfolio.
  4. Colleagues had a better appreciation for some of the work we’re doing in the course. This was an unintended consequence, but a welcome one: with students turning in this assignment in a more traditional format, my fellow teachers were able to see evidence of the work my students do.

I only offered this assignment in my most advanced course this year, but I’ll be expanding it to my other computer science courses next year. (Download a PDF version of the assignment.)

What traditional assignments do you find translate well to non-traditional courses? Do students appreciate being able to leverage their familiarity with the format of a traditional assignment, or do they find it annoying?

Implementing a Post-AP Computer Science Course

Implementing a Post-AP Computer Science Course

by Richard White

2017–06–06

This past semester I began teaching an “Advanced Topics in Computer Science” elective that I’d developed for my school. It’s an interesting class for a number of reasons.

  1. Although it was a new class for me, the topics covered in the course aren’t new to longtime high-school teachers who taught the College Board’s old AP Computer Science AB course back in the day. The “B” part of that course included discussions of some of the topics covered in this elective, including various types of more complex data structures and algorithm analysis. The “B” part of the course was discontinued in 2009 in an effort to “focus resources on efforts that will provide a much greater degree of support for AP Computer Science teachers than ever before.” [1] (Yes, I don’t quite follow the logic there either.)

  2. The class was offered as a “post-AP” course. In the context of my school, there are a wide number of students who are interested in learning some computer science, and who are more-than-happy to earn some AP credit for it. Most of them are not going on to study CS, however, so this class filled a need for those students. The impetus to develop the class came mostly from me, informed by some encouraging prodding from alumni.

  3. Although the standard AP Computer Science A course uses Java (currently), I wanted students in this elective to focus on the data structures themselves, without having to muck about with Java infrastructure. I elected to offer the course in Python, and this had a number of implications.

    1. For students who really were taking this after the AP CS course, they needed to learn Python, and fast. A year of Java had given them a solid grounding in object-oriented strategies, but the Python syntax and quirks like dynamic typing took some getting used to. The Advanced Topics class, then, began with a Python-based Boot Camp to bring everybody up to speed.

    2. There were a couple of students who chose to take this class after completing a single-semester Python class. This required a bit of a stretch on their part: although they were well-versed in Python syntax, they had been learning CS for a shorter period of time, and weren’t as well-grounded in object-oriented thinking. The Boot Camp strategy attempted to bring them up to speed, but was no substitute for the more extensive curriculum in the AP Computer Science A course.

  4. The class was initially developed as a way of returning to the curriculum that was originally offered by the College Board program, and can be viewed as supporting that model. I have since had a number of conversations with teachers and administrators who see this course as a potential model of what a rigorous class might look like as part of a non-AP program. That wasn’t my intention in creating this course–I actually appreciate the idea of a national-standard curriculum against which my students can gauge their mastery–but this course can certainly serve different needs, depending on context.

  5. As we worked our way through the curriculum, I tried to be sensitive to the experience of the students. Developing Python implementations of stacks, queues, trees, and graphs isn’t everybody’s idea of a good time, so I worked to include offshoot activities that built on the skills they were learning. This can be especially challenging the first time a course is offered (and I was teaching this class as an overload), so I expect next year is going to be a much more satisfying experience for the students. Abstract structures may be developed with visual representation, for example, bringing a more graphic appreciation of the structures.

I wasn’t too unhappy with how things worked out this first time through, but I’m looking forward to refining some aspects of the course and smoothing out some of the rough edges in anticipation of offering it again next year. In the meantime, you can see the webpage for the course at Advanced Topics in Computer Science.

I’ll be writing a bit more about this course in the next month or so. Stay tuned.

Three Lines of Code

Three Lines of Code

2017-04-29

by Richard White

Earlier this week I was walking through a school hallway when one of my students called out to me. “Mr. White! I’ve got a program that calculates primes in only three lines of code!”

I laughed, and asked him to bring it to me later in the day so that we could look at it.

“It’s just three lines!” he exulted, as if I might not have heard it the first time, “and one of those is a print statement!

Jack had taken an introductory Python course from me during the first semester of the school year, and from there had decided that he wanted to take the post-AP “Advanced Topics in Computer Science” course, a more abstract computer science curriculum that focuses on various types of data structures. Enrolling in this course requires my approval, and I had some initial concerns about how Jack might do in the course: He just had a few months of experience, and the curriculum would be a significant step up for him. While I didn’t want to set him up for failure, I didn’t want to dampen his enthusiasm for the subject either. In these situations, I try to err on the side of saying ‘yes.’

This semester Jack has had occasional struggles in the course, but so have most of the students, a fact that one could easily chalk that up to this being the first time I’ve taught the class. In any event, he’s making fine progress, and this prime-finder activity that he’d taken on for himself wasn’t the first time I’d seen him take something from outside the class and turn it into a piece of code.

Jack tracked me down again after school, laptop already open, ready to show his code. And sure enough, there it was, a tiny little Python program of just three lines. And it worked!

“What kind of algorithm is this?” I asked. It wasn’t the standard introductory comp sci treatment of primes I used in my teaching.

“This is ‘Wilson’s Theorem,'” he explained. “I learned about it on YouTube. It’s not very good for large prime numbers because it requires calculating factorials, but still… three lines of code!”

I thought about it for a moment.

“I bet we could get it down to one!”

“How?”

“Do you remember Python’s ‘list comprehension’ syntax? I bet we can use that to make this a one line program that calculates primes!”

And so we did.


Last login: Sat Apr 29 09:05:01 on ttys000
rwhite@MotteRouge$ python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> [x for x in range(2,1001) if (math.factorial(x-1) + 1) % x == 0]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
>>>

Just about every teacher I know would have his or her own lesson to be learned from this anecdote. It could point to the need for more free time in school so that students can find their passion. It could be a call for more open access to teachers before and after school. It might be a testimony to more open access to advanced classes, or an encouragement to allow more students to take academic risks. A math teacher might read it as a need for us to teach more computer science in our math classes, and a computer science teacher might claim that this demonstrates the utility of Python as an educational programming language.

There’s some truth in all of those, I think. Every educator would like to find more ways to empower our students to find and follow the interests that inspire them. Some students find their passion more quickly or easily then others, but every parent knows the secret to helping kids flourish and grow: throw stuff at them and see what sticks. Comic books. T-ball. Educational television. Piano lessons. Board games. AYSO soccer. Summertime concerts. Bedtime reading. Camping trips. Scissors, tape, and construction paper. Play dates. Museum visits. An allowance and an introduction to budgeting. An electric guitar. A woodworking class. Batteries and wire. Dance lessons…

Give students time, space, exposure to new ideas, and the tools to build on those ideas, and they’ll find something that inspires them.

Differentiated Instruction, Part 2

DIFFERENTIATION, part 2

2017-03-11

by Richard White

I was recently asked by our IT director John Yen how I handle differentiated instruction in the classroom: what strategies do I employ to try to ensure that students of widely varying abilities and skill levels are all appropriately challenged in my courses?

It’s a question that public school teachers face all the time, and independent school teachers arguably somewhat less. Technology teachers at both types of institutions have the biggest challenge here, because:

  1. there isn’t (yet?) a standardized curriculum path that has been developed and accepted around computational thinking and computer science, and
  2. there is a large, and perhaps growing, “digital divide” between those students who have nearly unlimited access to technology and training (even informal training via YouTube videos and the internet) and those who don’t.

My reply to John’s question took a little while to narrow down to a response to his questions, but here are my remarks, lightly edited for clarity.

=====Beginning of Email=====

  • That’s one of the million-dollar questions right now: How do I bring students with widely-varying experience into the curriculum?
  • The 2-million dollar question is: What CS curriculum do we want to offer/require? This varies depending on the school population, the goal of the curriculum (CS for managers? Coding for vocation?), the instructors available, the budgeting, salaries…
  • The 3-million dollar question is: Who is going to teach this curriculum? At this point, that is going to have an overwhelming influence on the other questions. CS people don’t do much with game design, and Game Designers don’t know a lot about Linux, and software engineers may or may not know about networking or control systems…

In Computer Science courses, I’ve found that I often have to provide up to five different kinds of differentiation, given at different times according to the idealized schedule given here.

Steps in Assigning/Conducting a Computer Science activity or project

  1. I prepare the assignment, preferably on paper or online so I can check that the idea and the process are fully articulated. NOTE: When looking through some online references a few years ago I stumbled upon an assignment format used by professors at Michigan State University, and I’ve adopted it for many of my CS courses. An example is attached here.
  2. During the preparation of the assignment, I try to prepare 1-3 Extension activities that are more complex or require application of the project to a new context. This is the first differentiation that I’ll use with some of my more advanced students who would otherwise complete the assignment too quickly. On the assignment I also often include a section called “Questions for you to consider (not hand in)” which ask the students to think about other aspects of the subject that may not be directly related to the assignment. These can be a nice jumping-off point for a conversation with more advanced students.
  3. Also for the assignment, I prepare a few “Notes on Getting Started” that are included with the instructions. These notes include suggested work strategies and/or questions that might help clarify the direction their problem-solving process should take. This is the second differentiation.
  4. Deliver the assignment (paper or online) in class, with whatever introductory remarks are appropriate. Students begin working.
  5. After students have been working on the assignment for some length of time, I’ll usually check in with them to see how things are proceeding so far. If there’s a stumbling block in the assignment that I’m aware of, I may bring it up at that time, and ask them what they think about it. I’ll usually write some amount of code on the board here, developing ideas with those students who have become stuck. This is the third differentiation strategy. ( Example: This video (narrated) of me working with students in class: https://www.youtube.com/watch?v=ZJ3z51n1Ndo )

    If I notice that a number of students are having difficulties with a concept or problem, I may prepare a small video for them going over the issue in more detail. I’ll post the video and send the link to them so they can take another crack at it. This is the fourth differentiation strategy. ( Example: This video, covering the topic of website permissions for some students’ websites: https://www.youtube.com/watch?v=sEES_N3ZQHk )

  6. Ultimately some students will need more individualized attention, sometimes down to the point of sitting down with them individually and picking through their code line by line. This is the most challenging and time-intensive differentiation strategy, and not something that I’m able to do with every student every time. Fortunately, if I’m doing my job well, I don’t need to do it very often.

=====End of Email=====

What strategies do you have for providing differentiated instruction for your students? What evidence do you have that those strategies are successful (or not?)

Is the Digital Divide something that needs to be addressed by CS teachers? If so, what steps do you take towards ameliorating that problem?

Presentation Mode

Presentation Mode
=================

2016-12-07

by Richard White

It’s Computer Science Education Week, and for the fourth year in a row I’ve conducted presentations at our Lower and Middle Schools for an Hour of Code with 5th and 7th graders.

I’ve got a bit more on my plate than usual this year, so I tried to minimize time spent emailing/calling/coordinating with various administrators, tech coordinators, and teachers. I work with a great group of people who helped make some of that happen—our Middle School Tech Coordinator was instrumental in navigating some of that, and my Upper School director committed early to giving me time off from my classes to go conduct those sessions. Also, our Lower School Technology Integration Specialist took on some of the heavy lifting for the first time this year, identifying activities that might be well-suited for the 5th graders.

I’d been a little smart about things too: the Hour of Code webpages that I’d set up previously were still live, and a handy reference for those who wishe it. The presentation materials that I’ve developed over the years were pretty much ready to go as well, with some minor modification and editing. I’ve been switching from PowerPoint to LibreOffice, and my software on the laptop was good to go.

Now, how about that hardware?

Every presenter has their list of hardware that they need to be sure to bring along to a presentation, particularly if you’re going to be away from your home base for the day/week. What to bring with?

  • Laptop
  • Camera/cellphone for documenting event
  • Charger and charger adapter
  • Logitech wireless presenter (R400)
  • Lightning port-to-HDMI cable (spare)
  • Lightning port-to-VGA dongle (backup)
  • USB key with presentation materials (backup)

I’d been to one of the rooms I would be presenting in, and knew that it was probably already stocked with the various power supplies and cables that I’d need, but you never know. Most of the items on that list there are simply backups or replacements for items that I expect will already be there.

img_9764

I got to the room, got things set up, checked out the projector to make sure it was working, double-checked the video that I’d be running in the presentation for sound… I was good to go!

I went to grab a marker to write my name on the whiteboard… no markers? Oh, there’s one. An old low-odor marker for which someone has left the cap off. I tried to write my name, and it left a half-visible mark on the board. I went to erase it and… no eraser.

Who has whiteboards with no working pens or erasers?

I scrambled around a bit and managed to scare some up just in time for the presentation.

It just goes to show you…

Looks like I have a couple of additional items for my hardware list. :)

Teaching CS: Am I doing it right?

Teaching CS: Am I doing it right?
=================================

by Richard White

2016-11-10

I’ve been teaching Computer Science in one way or another for a decent part of my teaching career, from courses using BASIC and Pascal on standalone PCs (pre-Internet!) back in the 80s to courses using Python and Java currently. I’d like to think I mostly know what I’m doing by this point.

It’s interesting to note, however, that there is a wide variation on how teachers work with students in a computer science classroom. From the AP Computer Science teaching community, I’ve heard of teachers who:

* have their students use Linux workstations exclusively
* have their students learn Java exclusively through graphics programming (Processing language)
* have their student use web-based Java compilers/interpreters
* have their students learn how to interact with a server
* have their students turn in all assignments on paper only
* have their students retrieve lessons and submit assignments using GitHub
* teach Java by having their student write mobile apps

It’s a stunning variety of strategies given that we’re all teaching the exact same course with the exact same curriculum.

And maybe that’s a strength of computer science, that there are lots of ways to make it happen. Whether you use Linux or OS X or Windows, whether you program using a terminal or an IDE, whether your programs interfaces are text-based or graphical… we’re all teaching computer science.

If there’s a downside to this variety, it’s that we may be tempted to feel that some of the other strategies–old ones that we haven’t had time to consider, or new ones that have just been recommended to us–might be better (more interesting? more effective? more appealing to students?) than what we’re currently doing. And so we feel compelled to give these new strategies some consideration.

In the last few years there has been an explosion of interest in Coding (which is not quite the same thing as Computer Science, but we’ll take what we can get, eh?). Hadi Partovi’s Hour of Code, MIT’s block-based Scratch language, the Raspberry Pi, the Arduino, the College Board’s new AP Computer Science Principles curriculum… and these are just the most popular of the recent technology and CS-based innovations that might merit some consideration by me, with an eye toward possibly incorporating some of them into my teaching toolbox.

How much should I stay the course and stick with what I think works best? How much of my limited professional time should I invest in consider these other possibilities?

More than teachers in any other subject area, we teachers of Computer Science need to wrestle with these questions. It’s a de facto part of our job description.

What is your specialty in teaching CS/technology? What topics do you add to your courses, because those topics work, or they’re part of your pre-existing skill set? Do you feel pressure to always be looking at The Next Big Thing?

For related reading: http://blog.acthompson.net/2016/11/too-many-cs-teaching-resources.html