Let’s Talk about Computer Science
So this year I’ve been teaching a brand new class called AP Computer Science Principles – and, it looks like next year my entire teaching load will be computer science classes. And that’s awesome and exciting and totally up my alley. Let’s talk about all of that.
What’s Up With AP Computer Science Principles?
AP Computer Science Principles (AP CSP) is a brand new AP course intended as an introduction to different areas of computer science, most notably: the internet, programming, big data, and social issues in privacy and security. There are two things that make this course exciting for me: (1) the explicit goal of the course is to attract students to computer science, which means there are no pre-requisites or minimum-requirements to take the course – anyone with an interest and the student habits to support an AP class can take the course; and (2) unlike the AP Computer Science A exam which mandates that students learn Java, AP CSP lets the instructor choose a programming language, which means I can teach Python (I have some strong opinions about Python being an ideal introductory programming language). Here’s more info about the course:
- College Board Course Overview Page
- College Board Teacher Pages: Course Overview & Exam Info
- Programs that offer AP CSP-aligned curricula, resources, and PD: College Board and more info from apcsp.org
How Did You Choose A Curriculum?
Before I started teaching the course, I looked at programs that offered College Board supported resources – at the time, these were Code.org, uteachcs through the University of Texas, and Project Lead the Way (PLTW) (there are now two more programs that are now supported: Mobile CSP and the Joy and Beauty of Computing). My biggest concern was that I didn’t want to get locked into delivering lessons in a prescribed order with a prescribed programming language / tool / textbook without room to improvise or substitute some of my own resources. I also wanted to parse out the philosophy behind the curriculum – why are units presented in the order that they are? What are the guiding questions behind each section? Is this curriculum really an overview of computer science and aligned with the curriculum framework, or is it just another programming class masquerading as a CSP class without much depth in the internet or big data or the social issues inherent in the course. My last concern, which came from me doing this legwork myself, was I didn’t want programs that cost money – trying to find a grant to send me off to PD where I wasn’t exactly sure what I would get was not an appealing thought.
In the end, I decided to get involved with Code.org‘s program mostly because, at the time, their curriculum was completely available online for free under a Creative Commons license (it still is, and I’m a big fan of the sharing-resources, rising-tide-raises-all-ships philosophy) and, when I contacted one of the curriculum writers, I was told improvising with their curriculum was encouraged – that there was no mandate to use their resources exactly as given (which was not always true of the other programs when I inquired). As of writing this, the Joy and Beauty of Computing is also freely available under a Creative Commons license and parts of the MobileCSP curriculum are available too. It also helped that Code.org’s professional development options were free, including paid airfare and hotel stay, at a 5-day event called TeacherCon along with continued PD and support throughout the school year.
After the summer PD, I put together a syllabus and some recruitment resources and started the year.
- Here’s my Syllabus (this is the one I gave students – not the one I submitted to the college board)
- Here is the big AP CSP Framework (which includes the ‘standards’)
- Here’s Code.org’s curriculum
Who’s In The Class?
I started the year with 12 students (which is my fault – I didn’t recruit) – got up to 21 students – and I’m starting the second semester with 17 students. We restricted the class to sophomores and above who earned at least at least a C in Algebra I – next year, I’d like to push for students who earned at least a C in English (writing is a much bigger part of this course than I initially realized). The class is pretty evenly split between sophomore, juniors, and seniors. It’s also pretty well split between male and female, which is a good thing. I had several seniors join my class a few weeks into the semester because they discovered this was an AP-weighted class offered later in the day (most AP classes are earlier in the day at my school) and they thought it would look good on their college applications / boost their GPA – which is great, because I’m getting students enrolled in my class who otherwise may have never taken a computer science course.
How’s It Been Going?
I’ve mostly been following the Code.org curriculum, especially for the units on The Internet and Data – these are areas where I didn’t have a lot of material prepared and was looking to lean pretty heavily on other resources. I was skeptical at first as to why they wait so long to introduce programming, but I learned more about their philosophy at their summer PD – a big focus is on equity. If there’s any aspect of this course that students will have seen and explored before, it’s the programming – which is why, as soon as you introduce it into the class, this ‘gap’ appears: the students who ‘get it’ and are ‘fast’, and the students who ‘miss it’ and are ‘slow’. It’s pretty much the exact problem math teachers face at the start of every school year – if you decide to review the past year’s material, that gap appears and it just reinforces the positive or negative self-images that students have about themselves. So, waiting a while to introduce programming concepts is a conscious equity decision – letting students become familiar with things they’ve probably never studied before (like the TCP protocol stack) and gaining some confidence before letting the programming gap appear.
In the first semester, we talked about the Internet, How Data is Encoded, Organizing Big Data (although I skipped most of this chapter and condensed it to just the Excel manipulation stuff), and some Basic Graphics Programming. The Code.org widgets are pretty awesome and students responded well to them – very hands-on and engaging and, at times, hard to put down (especially the text compression and pixelation widgets). We also spent a few days with the Lightbot Hour of Code because there are surprisingly similar problems on the AP Exam. My school also has these half-days every other week, which I used to do rapid research on a particular topic – over the course of the semester, we looked at Virtual Reality, Internet Technologies, and Artificial Intelligence & Driverless Cars (have you seen this?!?!!). This gave students a chance to research and cite articles from reputable sources, then summarize and present arguments from them in preparation for the AP Explore task. This particular type of exercise culminated in the final exam for my class, which was based on the show Shark Tank: they had to research a technological innovation, write about why it’s important and the impact it’ll have, then present to a series of judges. It was pretty fun.
My biggest struggle has been with absences. There are lots of activities we’ll start in class in partners, but then the next day a student will be absent and their partner is left to fend for themselves. These aren’t activities where partnering up serves to reduce the work burden – these are activities that can only be done in pairs (like sending binary messages using IP Addresses) and are explicitly built into the course framework (the verb ‘collaborate’ shows up a lot). I’m also conscious of the fact that, even though this is a course about technology, I can’t assume students have access to technology at home – so, for longer projects, I tend to give in-class time to work on assignments and programs. But, if a student is absent, this basically guarantees they won’t be able to turn in the assignment because they missed the allotted time to work on it. And lastly, there’s just the content that students miss when they’re gone. There’s no textbook for my class – content is gained through collaborative experiences or demonstrations, which are hard to replicate independently. Thankfully, Code.org has some nice videos that usually summarize their lessons and I could show these to absent students – but, now that I’m starting to use my own materials, I’ve also started to record my own lessons (in a makeshift way – no judging) just to accommodate the inevitable absences I’ll have.
Another struggle has been finding structures to help guide student writing, which is a completely new area for me. A lot of the AP Performance Tasks are writing based, so I find myself needing to train students to read an article or analyze a piece of code, then write complete and descriptive responses to these artifacts. If I had time, I think I’d talk to the AP US History teachers and ask them how they prepare students to write about Document-Based Questions (DBQ’s). I also need to spend more time scaffolding the prompts I give students or being more intentional about the articles we read and how they should structure their responses – these are all things that I just don’t have in my teacher toolbox yet. We start this next semester with a unit on Data Security & Privacy, which will have lots of article reading and responding, so I’m hoping to get better at this as we move through this unit.
Some positives have been: students are really into the content – it’s relevant to them and also unlike anything else they’re learning about my school. We have really great discussions about how the mechanisms we’re learning about inform the devices they use in their daily lives (ie: how the internet works affecting how their data gets transmitted and recorded). A top-5 teaching moment was watching students figure out that the relationship between keys and their SHIFT counterparts (ie: 1 and !, 7 and &) has to do with the ASCII numerical representation. It’s also been great diving into multiple ways to solve problems – the curriculum encourages a lot of pair work, which leads to many solutions to a particular problem and the discussions that come out of those are really worth-while.
On Feedback w/Google Classroom & Repl.it
I’ve been using two websites pretty consistently to help collect assignments and give feedback to students: Google Classroom and the Repl.it Classroom. I think it’s completely changed the role of feedback in how I interact with students in a really positive way. I realize I only have 17 students, but I actually like ‘grading’ homework these days because it’s a chance to start a feedback-based conversation with students. Here’s what I mean:
I’ll have an assignment created as a template document in Google Classroom. I can tell google to make a copy of this assignment for each student, which they can then write in and submit. I can also include resources that go along with the assignment – handouts, links, etc. Some students have told me they like having everything on Google Classroom because they don’t have a ton of papers to manage or eventually lose. I make my assignments due a week from when they’re assigned – but, I tell students they can submit early and if they do, I will respond with feedback on their assignment and give them a chance to re-submit as many times as they want before the due date. With this system, about half of my students will submit at least once ahead of time, giving me a chance to see misconceptions and address them individually with each student. It also lets me give question-based feedback to prod students in the right direction of how to think about their answers (I think this post by Michael Pershan, or a similar one, has been bouncing in my head all year – the idea of feedback as reinforcing where they’re on the right track, then nudging them in the direction of where they need to be going). It’s been awesome – sometimes I’ll have actual conversation with students through this turn-in process: I make a comment, they comment on my comment asking a clarifying question, I answer the question, they adjust their answer and have learned something in the process. It’s one of the first times I’ve felt that the written feedback I give is being looked at and used productively.
Repl.it’s classroom has a similar model: I can assign programs, students can turn them in, and I can return them to students with feedback. The advantage here is: all of this is done via an online programming environment, which solves a lot of my equity issues: students don’t need to download and install any programs on their home computers – they just need to go somewhere with an internet connection and they have access to all of their files (and, unlike Cloud9, there’s no complicated development environment to setup). I also like that Repl.it seems to be actively investing in this program and is constantly updating it: I made a request that their teacher dashboard page have an ‘export to csv’ option so I could transfer grades to my gradebook, and two days later it was there.
Both Related and Unrelated: If I was still doing traditional math classes, I would jump all over the new Quizster app, which seems to be this same sort of feedback-cycle but for traditional math assignments.
We’ll see how the AP exam goes at the end of the year, but I’m confident my students will do well. Next year I’ll be teaching Computer Science Discoveries, another Code.org curriculum designed for middle-school, but we’ll be doing it at the freshman level. There are also mini-twitter discussions that happen every once in a while between me, Kaitie O’Brien (her blog name is great), and @reilly1041, so that’s pretty cool.
Thinking about the future, the only other thing I’m not sure about is how all of these new Computer Science courses relate to existing department progressions, specifically Math & CTE. Some states have said AP CSP should count as a math credit, but for others it takes more convincing (I’ve been looking into the process in Arizona and it takes some hoops to jump through). There’s also the place it has with existing Career and Technical Education (CTE) programs – my school already has a web design track through our CTE program, with the goal being to gain the skills needed to get a job straight out of high school doing web design. Many of the skills in that course overlap with mine, but AP CSP doesn’t exist as a stepping-stone to get an entry level job post-high school; this class exists as part of the bigger computer literacy movement and as a pathway to college. And yet, it’s tempting to make this course part of a CTE progression just because some of the skills seem to overlap with other CTE courses. I’m really curious to see where new schools thinking about offering this course decide to place it – is it a math class? a CTE class? or a regular elective class?
So… that’s been my year so far. In a nutshell.