Tuesday, September 18, 2018

Deciding What To Include in High School Computer Science

The more I talk to people about what should be included in high school computer science the more I thing of the Indian story of the blind men and the elephant.

blind men and the elephant

I attended an industry advisory meeting for a local career technical school last night. I attend several of these at several schools every year. I hope I provide some value to them from my time in industry and my education experience. I know for sure I get a lot out of these meetings. Industry attendees always have suggestions of what should be included in the curriculum. Usually their suggestions relate to their particular business needs. Hence the elephant story. Computer science is huge as a discipline but the parts we interact with regularly are the parts we think of as important.

When it comes to high school computer science curriculum we do have some standards. The CSTA Standards are really good. In a way though I see them as the floor - the minimum. Even the AP CS courses are not far beyond these standards. They practically read as the AP CS Principles curriculum though one could meet them without the AP CSP course. But what if you want to do more?

The standards are also about concepts and not implementation. That is also great. That is how it should be. It leaves us open to the question of how to implement the teaching of these concepts. This is where the things industry wants us to teach, which is often more about tools than concepts, can be influential. If we want it to be. We don't always want to take those suggestions too far as our students are not ready for everything industry would like us to teach.

What I have been thinking about lately from conversations with industry people are four things:

  • Cloud computing
  • Virtual Reality/Augmented Reality
  • Artificial intelligence
  • Internet of Things

Whoa! That's a lot. And they are all more and more intertwined. It is hard to implement IoT without cloud computing. AI is an important part of VR/AR and the cloud is where a lot of AI is executed. AI, Cloud Computing, and IoT combine for a lot of image recognition. I could go on but if you are a regular reader of this blog you probably know a lot of this.

Which of these is the most important? I think we could get arguments for any of the four as well as various combinations. And while we might like to think we can include a little of each, let’s face it, any of these could be a year long course by itself with bits and pieces of the others to support the main emphasis. So what is a teacher to do? Personally I have totally decided. Actually, just about every day I totally decide on a different one of those four things. Not helpful. Sigh.

Cloud computing looks pretty exciting. Amazon Web Services (AWS) and Microsoft’s Azure both have programs for educators. AWS Educate from Amazon and free Student Azure accounts from Microsoft. Which to choose? I need to spend some serious time looking into both of them I guess. Anyone using either of them in high school want to help me out?

Virtual reality/augmented reality is quite “sexy” and I can see it attracting lots of student interest. David Renton is having his students program VR which is cool. But at $200 a head set funding a classroom set seems daunting.  Still it is cool. And one can teach a lot of concepts to students who are highly motivated to create something awesome.

Where do I start with artificial intelligence?   Microsoft AI School looks like a good place to start learning and using some of their AI tools. OK I’m overwhelmed. I need a face to face course. Somethings are just too much for my old brain.

Internet of Things may be the item that interests me the most. It is a mix of hardware and software and my gut tells me that is as much key to the future of computing as anything. Mix in a little cloud computing for hosting. Perhaps an existing AI took for analysis. Maybe even a little visualization. Not quite VR/AR but interesting non the less. That could be a great course. Now all I need is curriculum or a year of free time to learn it on my own enough to develop curriculum. Sigh (again)

What I’d really like to do is have a class where the students figure all these things out themselves. Have them design and build a major project involving one or more of these technologies while doing the research, experimentation, and learning while I coach. Perhaps connect them with people and documents and videos and the like. Then they can teach me. Now wouldn’t that be great!


Garth said...

I have gone for sexy, but cheap sexy. Unity and Google Cardboard with student owned Android phones. The 4 points do look good but getting from an intro course to those topics takes how many years of preliminary courses? I probably do this wrong but I have never looked at where I want to go with my CS curriculum, I have always looked first at where I am starting. The variability with students that stay with CS has always been so extreme that I can never plan on kids taking an upper level course. There is also the amount of work on my part to design an upper level course. Over the years this has become less and less. Writing a course for one or two students is hard to justify when there is limited time even though those one or two students would benefit from the course. For many of us "on-the-job" trained CS teachers the needed experience and background to teach the upper level stuff is not there. If I have to teach an upper level math course I can do it, I have taken upper level math and can vaguely remember how to do it. AI, IoT, VR/AR, cloud all have to be learned from scratch by many of us. Doable but the sleep and eat things get in the way. If I only have one or two students interested I am going with eat and sleep.

I would like to introduce topics like those in beginner courses but what has to be lost to get those topics at a beginner level into the course? Another fun issue.

This is one of the really hard parts about teaching CS, it evolves fast. There is always a new and relevant topic to teach. Five years ago VR was totally out of the reach of the high school classroom. Now I can do it basically for free. (OK, maybe $10 for a Cardboard.) Keeping up with the latest and greatest, even if they are important, is simply impossible. But it is fun to try.

Kaustav Mitra said...

Great blog as usual Alfred. Two topics that come to mind would be Security as a concept, and Blockchain as an area of application. It is difficult to think of any application of CS that would not benefit from an awareness of security of data in storage, access, and transit. Some of the fundamental ideas are not difficult. Blockchain is just cool and given how new it is, one can easily imagine students coming up with some very innovative ways to use it.

Alfred Thompson said...

Security should probably have made my list. I do try to include something about it in every course but a focus would not be a bad idea at all. BlockChain is interesting for sure. I'm not sure we really know where it is going. That may be more a reason to include it than exclude it I guess.

Brian Sea said...

I agree that trying to pick topics is pretty hard, so I try to have students choose as much as I can. Students can take up to four years of Computer Science with me.

I start out pretty standard, but the context is student chosen:
1. Intro Class -- either Web-based or Mobile-based
2. Data Structures
3. Advanced Topics (up to two years)

I pick the topics and order for the first two courses, and the first topic of Advanced Topics. For the rest of Advanced Topics, the students do a ranked, weighted vote where Senior votes count for 1.5 or 2 depending on the number of Juniors in the class. I have them read the Wiki page on Computer Science, come to class and discuss topics they'd like to do, and try to persuade people to their side. We also talk about what projects *might* occur. After they vote, I pick the winners, order them, and (try to) teach an introductory version of the topics.

This year's winners: Block Chain and Machine Learning. Block Chain requires cryptography, networks, and databases. So that's what we're (trying) to do the first semester. Machine Learning requires compiler design (NLP) or image processing (Computer Vision).

Last year was Security -- Network security, high-level networks, and local security (hardware). The year before was Encryption and Digital Hardware...

I rely pretty heavily on MIT/Stanford online lectures (2x speed) and on-line resources. This course is easily my biggest workload, but it's fun learning the newer concepts. Students know that I'm learning the concepts along with them, and they're (usually) pretty forgiving when I mess up. Plus, it's a good model for them to life-long learning.

-- Brian

Anonymous said...

Brian, I love your method. I teach in a very small district and my administration has only recently agreed to offer Computer Science courses. I have just started having students want a sequence of courses. I teach Web Design and Apps Development as semester courses and Intro to Programming and APCSA as full year courses. I plan to propose APCSP for next year.
I have 5 students in the Intro course who took APCSA last year but wanted more. I moved them to the back row and they are using edX.org to learn Python. The remaining students are learning basic programming concepts using Java. 2 of the repeat students are juniors so I can potentially have them again next year and I’m thrilled about that.
I may propose an Advanced topics course too.