Tuesday, September 05, 2017

Curriculum is Hard

Generally speaking I am a roll my own sort of teacher when it comes to curriculum. This year that is a bit overwhelming because I am teaching four different courses. Now two of them are easy. I have been teaching our freshmen Explorations in CS course for about four years now. It’s well set up. I’m not the only teacher teaching it and between us it’s all laid out pretty well. Sure we tweak it a bit every time we teach it but mostly it is good to go. Honors Programming (mostly sophomores and juniors) is also pretty solid. The other two courses not so much.

My Mobile Application Programming course is a total redo this year. I was not happy with how it went last year so I have switched to App Inventor. I’m putting things together from resources that are available from others (see http://appinventor.mit.edu/explore/) So a bit of mix and match with some ideas of my own. Still largely my own design in my eyes. It’s a one semester course and I know what I want to cover pretty well.

Advanced Placement Computer Science Principles is a whole different matter though. For one thing it is a full year. All my other courses are a single semester. It’s also more high stakes. My students will be taking the AP exam and like it or not we (them and me) will be judged a bit more seriously on the results. It’s not like the other courses in other ways as well. There are performance tasks to accomplish for example. In a sense they are just big project and I use projects all the time. But in an other they are different in that I am not designing my own rubric. I need students prepared properly so they can be graded by others. I want to get this right for my students.

imageSo for AP CS P I am using a pre-written curriculum. There are several great ones out there. There is The Beauty and Joy of Computing out of US Berkley for example. It looks really good but I didn’t want to use Snap!. Not that Snap! isn’t pretty cool but I wanted something different from what I was using in Mobile App Programming and AppInventor and Snap! are very similar.

imageMobile CSP also looks great but it uses AppInventor which, again, I wanted to avoid since I was already using it in another class. 

Yes I know that some people think using the same language over and over again is a great thing. Even a preferred thing. Miles Berry makes the case for One Language at a Time in a recent article. I disagree and I may elaborate on that in a future post.

So what did I go with? I went with the AP CS Principles curriculum from code.org. For programming it uses their app lab which uses both block and JavaScript. We’ll be moving into the JavaScript as much as possible when we get to the programming. JavaScript is a growing language and I see learning that as a good thing for my university bound students. They all know some Visual Basic and C# and a good number are also fairly fluent in Java.

But AP CS P is more than just programming which is one reason I am enjoying teaching it. Code.org has a lot of good resources for teaching that. Videos (short and interesting) and collaborative exercises. Right now students are using an internet simulator to create and use their own communications protocols. It seems to be going well so far. We’re only two weeks in of course but so far I think this is going to work well for me.

I’m still going to tweak things a bit as we go along. And next year, once I’m comfortable with the course and the curriculum I am sure I will tweak it more. Overall though I’m glad I am taking this route. Your mileage may vary of course.

What are you using and why? I’m especially interested in opinions on AP CS Principles curriculum.


Chad said...

While my new school is not offering AP CS P this year, I went through a similar process last year of reviewing the available curricula for AP CS Principles and also decided on Code.org. I had one section with 25 students (mostly juniors and seniors). Twenty of the students chose to take the AP exam and 19 of them got 3 or above (17, 4 or above). I was overall pleased with the Code.org stuff, though I did supplement quite a bit of AP exam specific prep material towards the end (the students found Albert.io to be very helpful). I also enjoyed teaching AP CS P because it was different from a traditional computer science course. Of course with breadth comes the potential for a lack of focus. However, with the full year length, I felt like my students left with a pretty solid foundation in Computer Science and those who chose to pursue it as college students will be in a pretty good place. The biggest downside for me with the Code.org curriculum was that the programs the students wrote required AppLab. I kind of like students knowing how to fire up a good old fashioned text editor and a command prompt and being able to compile/run their programs. This is one of the reasons I'm avoiding other similar online curricula this year.

This year, I'm teaching CS 1, Pre-AP CS, and AP CS A. In CS 1 and Pre-AP CS I am using Think Python, and in AP CS A, I am using Think Java (by Allen Downey and Chris Mayfield). I chose them because they are freely and easily available online. They also seem pretty approachable (though some of the exercises require a higher level of math than some of my students will be comfortable with). While the books have a decent selection of problems, I will be doing a fair amount supplementing using different online resources and heck I might even create a few things myself.

In addition, I was able to get my school to purchase the A+ Computer Science curriculum materials that I plan to use for some of the students' more advanced projects. I chose this on the advice of an AP teacher at a summer institute I attended this year. It's relatively cheap but seems pretty extensive, including material for Java, Jeroo, Scratch, and Python (and maybe a few others).

Garth said...

I use the Think Python book also. It is a great book and free is frosting on the cake. I do a lot of editing to the course every year just to keep from getting bored. I do not do any AP CS courses because I can offer dual-credit courses. The kids register through the local university and then the class I teach is good for college credit. No massive exam at the end, just the usual class work. Much nicer than AP.

I need to look through the code.org stuff. I am not a big fan of on-line courses. I like having a paper format I can edit and make comments in as I teach. If I do not like something I can easily change it. There are just some situations where pencil and paper work better. I also find some on-line courses are very poorly written. I used codecademy.com for a Python professional development course last summer. Pitiful. Full of errors and inconsistencies.

Building courses form scratch is just too time consuming for most teachers. I just never have the time to do as much building as I would like to do. Being able to use code.org can be a life saver if written well.

Jeff Yearout said...

Officially, I use PLTW's CSP curriculum. But, because I did some of the PLTW CSP curriculum last year (we chose to not have students do the AP exams and called the class "PreAP") I am having to do some different things this year to start out. I chose to give my 12 students various options to do work in, such as Mobile CSP, BJC, CSP Python from Runestone, and a few who are really going off the path and looking at interacting and using APIs. They will do this self-selected work for about 80% of this first quarter, at which point it will be about the right time to get back into the PLTW curriculum that we did not get to last year.

I am grateful to see some of the items listed above, like the Think Python book. I am always happy to add more resources to my ever growing list!

BTW, my "Noobie" blog is available at: https://k12csteaching.blogspot.com/

While I am a 25 year teaching veteran, teaching CS is a venture born in January 2015. I'm very much a noobie compared to you wily veterans!

Unknown said...

I am also a proponent of "roll your own". I know my students and can tailor my lessons to their ability level and interests. Plus, as I am able to start the students on coding younger, they come into the later classes with some coding background already which changes the pace at which I can teach my lessons. On a side note, I make a lot of short videos for the topics I teach - it is beneficial for the students to hear my voice explaining how to do something, especially for ESL students who are used to may way of speaking.

I have settled on Python as my language of choice - it is beginner-friendly, flexible, and cross-platform. With Python I can do console apps, GUI apps, and video games, all with what comes included.

We have some students each year who are interested in taking the Java AP Exam. We have found a company called Edhesive which has a really good online self-study program. I mentor the students, but they do all the work online by watching videos, completing coding challenges, and answering review quizzes. Interestingly, I have found that the topics in my main Python course track quite well - so the students get to see the same concept (loop, function, class, etc) in two different languages.

I have a number of tutorials available on my blog: http://www.christianthompson.com

Regarding Garth's comment above - you really need an LMS - I constantly tweak my course as I learn more and the students change from year to year. An LMS (we use Moodle) makes your life way easier. On a related note, I am happy to share my entire course with anyone who has Moodle - I can export a copy of the course and send it to you. If interested, email me at christian.thompson@issh.ac.jp