Tuesday, March 12, 2019

High School CS Education: Where Do We Start and Where Do We Go?

There are a number of sets of standards with most based on the CSTA standards (https://www.csteachers.org/general/custom.asp?page=standards) and the K-12 CS Framework (https://k12cs.org/). A lot of really smart people (and me in the case of the framework) worked on them but I've been thinking about creating my own set to use.

Why? Difficult to explain but in large part to get things clear in my own head. What do I see as the concepts and ideas I should be teaching in my high school? How do I want to express my thoughts – the same as the existing standard or will putting them in my own words help me understand them better? An open question.

Now one might think this is easy with the standards already written. But it is more complicated than that. High school is very much in the middle for computer science. We’re not yet college/university but we want students to be prepared for that level of education. At the same time, there is no standard of knowledge that universities are expecting all incoming students to have. That makes their lives difficult but they have been living with that as long as there have been CS courses. It’s leaves us in high school a little more free to determine our own output goals though.

On the other end, there is no standard set of CS knowledge that high schools can expect all students to have. That is especially true for a school like mine that takes in students from over a score of different middle schools and two different states. Like the universities, our curriculum has to start assuming no background at all. Oh sure students are somewhat tech savvy compared to many of their parents but I still spend time teaching how to move files from one folder to another. Being great with Instagram doesn’t translate to computer science knowledge.

We see some students who come in more advanced as well. They may have done a lot of programming in middle school. Many in an enrichment course, a summer program, or FIRST Lego League or some other opportunity. They may even be programming in higher level languages. Can they skip the first course? Sure, as long as we have something more advanced to help them continue to grow and learn. It would be a shame if they were effectively done before high school and spent 4 years forgetting things before university.

As I think about high school computer science curriculum holistically I think about the Computer Science Curricula 2013 (CS2013) document. One key take away for me there was the three levels for university curriculum. Basically it was things all CS departments should offer, a level that all departments should offer “all or almost all”  and electives. For high school I don’t know that I want three levels. Maybe two would be enough. Things that all high school curriculum should offer and electives. Earlier version of the CS Curricula had only two levels. I am not sure there is room in the schedule for three levels in high school. Electives should be offered in schools where there is more room.

I hesitate to specify standard or required or even recommended electives for high schools. Gradually CS, and other subjects, move down from universities but there is no clear vision for what will move down from universities to high schools in the near future.
An other idea I like from the CS 2013 document in the Knowledge Area breakdown of concepts. This sort of breakdown is also included in the CSTA Standards of course. Do I want to come up with my own breakdown or use the CSTA version? I’m undecided.

Seems like a big task and it is. But I really feel like I need an expression of my personal (well researched and thought out) ideas of what should be taught. Anyone else feel like this?

[Note: I was on the CS 2013 ACM/IEEE Task Force and the K12 CS Framework writing team. And I still think I need to think about this stuff.]


Tami Brass said...

I teach a required 6th grade computer science course in a K-12 independent school. Starting in K, each year our kids have a computer science unit in science, so by the time lifers come to my classroom, they have a similar minimum set of skills. However, an additional 20 or so students come to us from other schools at the start of 6th grade, and their experiences vary widely. We also have kids who do summer coding camps, FLL, and a variety of other enrichment outside of school. This means a huge range of skill in each class. When new students arrive in 7th grade, they're placed in the same CS7 course as their classmates, so the diverse skills base continues. We're hoping to add CS8 next year... Our next big entry point is 9th grade where another 20-30 students are enrolled.

Our solutions: In 6-8 - "low floor, high ceiling" projects so all skill levels are accommodated. We allow kids to work at their own pace as much as possible and encourage peer support. In 9-12 - We've increased our range of electives with clear prerequisites. Our dept chair (an awesome CS phd who's taught at the college level) is also looking at ways to assess student skill for placement. Our ultimate goal is for rising students to place out of the intro level course. I'm not sure what that will mean for kids as they enter college, but it's a question I never would have dreamt of asking 6 years ago when we were just starting to teach computer science in our school. I'm putting it on my list of nice problems to have.

Garth said...

Five or six years ago I made a big change in how I taught CS/programming. I used to very carefully check to be sure I was matching a set list of standards. In programming I was very methodical that I taught all the syntax and tested the students for syntax carefully. I then met some college CS instructors and discussed the problems they were seeing with incoming freshmen in CS/programming. It was not syntax, it was problem solving and being able to find solutions out of the classroom. Being willing to look for resources outside of the classroom/lecture was a killer. Their students were not able or willing to dig for answers, they wanted everything handed to them in lecture or the course reading. I now pretty much let the kids learn the syntax on their own. I focus on programming basics; loops, conditionals, sequence, etc and let them dig up the syntax for those. I try and focus on understanding the problem, not on building the code. My students are terrible at writing code from scratch but are great at looking at a problem and figuring out what code they will need to get a solution. They know how to get to stackoverflow and how to modify code snippets to get what they want.

There was some research done a few years ago in regards to programming leading to improved problem solving skills in other fields. The research indicated there was little transference. I took that to heart and try to teach problem solving with some coding thrown in as the best way to solve particular types of problems. My graduates seem to think the strategy works. They do well in college CS programs.