Friday, September 21, 2018

What Makes A Great High School Computer Science Program

Not long ago someone asked on Facebook for great HS CS programs to visit. Three schools came up quickly and repeatedly. Two are large magnet high schools and one was an impressive private high school. I know something about all three schools and they are doing really good things. They all have an edge though. Some selectivity in students for one thing. The public schools are large with multiple computer science teachers. These are not always things that are possible. Many schools are small, underfunded, take anyone, and have other limitations. So what is the hope for them?

What is a great computer science program? How do we define it?  Can it exist in a smaller school?  Does it require lots of courses and lots of students? Is Advanced Placement a requirement for a great HS CS program? It all boils down, in my thinking, to what result does a great HS CS program show.
Perhaps I should start with my idea of what great outputs are. I think the best programs turn out students who a) really want to study more computer science and b) are well prepared for learn with a solid base of understanding.

Not that all students go on to take more CS. No, I don’t want everyone to take CS. There are a lot of other interesting and important things to study. But if some students decide to take more CS that’s a great thing. If we give them a head start with knowledge that is probably the difference between an adequate CS program and a good CS program.

Great? Hum, what more is there? Perhaps a great program give students the opportunity to learn and produce outside the box if the standard curriculum.

How do you get there? The more I think about it the more I think that the difference between adequate and good and on to great is the teacher. What is a great CS teacher? I think there are several factors. I think domain expertise is very important. I think teachers who are great teachers can get very good results without great subject matter expertise but I’m not sure they can have a really great program. Not until they learn more themselves. Yes, this is a problem. But a workable one.

I think great teachers are willing to admit that they don’t know everything. I know that seems contradictory with the last paragraph but it is not. Computer Science is too big for one person to know it all. A poor teacher, confronted with a question they can’t answer, says “we’re not going to get into that.” A good teacher says “let’s learn about that together.” or “Here are some resources. Come back and teach me.”

A good teacher may teach the same, solid way every year or every semester.  A very good teacher changes what they are doing constantly. Seeing what works and refining it and tossing what doesn’t work. And they don’t count on just their own expertise. They seek out professional development, they read blogs and research papers, and they participate in the larger CS education community.

What about curriculum? I have mixed feelings about the Advanced Placement curriculum. Some days I love the range of topics in AP CS Principles. Other days I wish I could go far deeper into specific areas.  AP CS A, well, let’s just say I am not a fan. At the same time I am realist enough to know that the AP designation plays well with parents, students, and administrators. It is the only way some schools will ever get an advanced CS course.

Can an AP course be part of a great HS CS program? Probably. A lot of people define at great HS CS program as one where a lot of students get 4s or 5s on the AP exams. I find this a narrow definition but I also think that teachers can do some creative things even with the nature of the AP program. It’s just harder.

Career Technical schools often don’t offer AP courses. On the other hand they also have students for 2 or even three solid years with the flexibility to cover things their own ways. Students come out of these programs ready for, if not jobs, paid internships. They also have good preparation for the CS part of higher education and strong motivation. Like the magnet schools I wrote about above they are largely self-selecting though. I think teachers in comprehensive schools can learn from these programs though.

At Career/Technical schools there is a clear purpose, a practical purpose, for what students learn – a job. We don’t often “sell” the reasons for what we teach in CS in comprehensive schools. “It will help you in college” is a bit abstract sometimes.

A great HS CS program helps students find their own motivations. This means projects that are meaningful to students. Students have some agency in selecting their projects, the concepts they are learning, and the tools for that learning. This too takes some courage on the part of teachers. I think it also takes some willingness on the part of administrators to allow for some courses that are atypical. Perhaps even dropping AP CS! Great CS programs will know about the boxes but be willing to move outside of the boxes when it is appropriate. Or to expand the size of the boxes they live in.

How do you define a great HS CS program? Are you part of a great CS program? If you are part of a program that is good or just OK, what do you think you need to make the program great?

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!

Monday, September 17, 2018

The Multiple Natures of Computer Science Education

There was a lot of good CS education activity on Twitter this past weekend. I know I missed a lot of it but some things did stand out for me. One of these was this Tweet from Hadi Partovi, co-founder and show runner at Code.Org:


This is not really new of course. But it does highlight the fact that we can’t look at CS as all analytical and miss out of the creativity inherent in it. If everyone in the class turns in a project that looks identical do we really know if they understand the concepts or are they just good at following directions? Does everyone come up with the same solution? Or do you, the educator, see solutions that are different from what you would come up with? Letting students getting creative makes things more interesting and motivating.

Likewise CS is not just for the college bound or for the career bound. Comprehensive high schools and vocational high schools do tend to look at CS education very differently. We have to be careful that we achieve some balance here. We can’t ignore the tools completely and keep it all theoretical. Nor can we get so deep into the tools that we ignore the concepts that drive the tools.

We have to avoid being the blind men judging the elephant only one what is in reach. We have to share more of the elephant with our students so they become whole people and not limited by too much focus.

Sunday, September 16, 2018

Preparing Students to Ask Questions

I drove behind a Google Maps Street view car for a couple of miles today. Things I wondered about:

  • Will my car show up on Street View?
  • What is it like to be one of those drivers?
  • What sort of meta data are they collecting?

That last question is key. I thought of that because I know something about computer science. I also know that there has be controversy about this in the past. I think I would have wondered about the meta data anyway though.

What is the meta data? What is it used for? Who has access to the data? Lots of questions of the sort we, society, need people to ask. Not just computer scientists but all sorts of people. How are they going to know to ask if they don’t understand what meta data is or how it can be used?

Getting people a basis of knowledge so that they know to ask questions is every bit as important as the “answers” we make them show on exams and quizzes. This is why we need computer science for everyone.

Monday, September 10, 2018

Do We Really Need CS Focused High Schools?

Last week Bill Gates visited the Academy for Software Engineering, a computer science focused high school in New York City. and wrote about his visit. At first reading I was thinking the visit was a good thing. I still think it is – for the most part. Mike Zamansky had an interesting take on the visit (That Time Bill Gates Visited AFSE) that got me thinking.  Basically I like what AFSE is doing but after reading what Mike wrote, I wonder if we really need CS focused schools or could we just do all that stuff at “regular” high schools?

The design class that Gates writes about is a lot like the one my wife teaches at a small, semi-rural high school in New Hampshire. It’s not a CS focused school at all. In fact, their CS offerings in general are pretty limited. But that doesn’t mean that CS concepts can’t be included in other courses or introduced in middle school exploratory courses.  What is takes is administrative support and a trained and motivated teacher. And CS is growing there!

Also last week, Porter-Gaud, a private school in South Carolina, released a video about their two high school CS teachers (Doug Bergman and David Renton – both friends of mine who I admire greatly) and some of that they are doing with their students. Among other things they have their seniors writing software for virtual reality headsets. (Do check out the video of The CS Dymanic Duo )

Porter-Gaud is a college preparatory school not a CS focused school. And yet they have an absolutely amazing computer science program. Again, what they have that many other schools do not have is an administration that is willing to support teachers who are creative, motivated, and willing to learn on their own or (even better) with their students.

We know from several recent surveys that parents want more computer science education.  It is tempting to think that specialized schools are the answer. A lot of people think that CS is not for everyone. Wrongly as evidence strongly suggests. We are also faced with a shortage of teachers with the background to teach more advanced CS and that makes sending them to specialized schools attractive.

If we focus too much on special schools I worry that we perpetuate the idea that not everyone is cut out for CS or that not everyone needs to learn CS. A school like AFSE is trying a lot of things to merge CS into other subjects. That’s a great thing but it will be even greater and more influential if the things they learn about integrated curriculum is shared with comprehensive high schools.

In the long run we as a society will benefit more from things learned in CS focused schools migrating to the wider population of schools than we ever will from the small number of students who pass through these schools.

Wednesday, September 05, 2018

NCWIT Award for Aspirations in Computing–Recognize Girls in Tech

Recipients of the NCWIT Award for Aspirations in Computing receive engraved awards, scholarship and internship opportunities, entry to a peer-network of technical women in the NCWIT AiC Community, various prizes, and more. // Share this status with women in grades 9-12 who should apply!

Several of the girls in my school have received this award in the past and it has been impactful for them. Highly recommended.


Tuesday, September 04, 2018

Why Teach Binary in Computer Science Classes

Sometime when I was around age 11 or 12 I learned about different number systems. I was fascinated with the concepts involved. I literally spent hours experimenting with them. This stood me well when I started studying computer science. We were using Binary, Octal, and Hexadecimal. Octal and Hex are useful for grouping Binary into groups of three (octal) of 4 (hexadecimal). I worked on computers back when one could, and did, toggle code in Binary using switches on the front of the computer. It was awesome.

I’m still fascinated with these systems. I have a Binary clock on my desk and six sided Binary dice in my desk drawer. And of course I try to teach Binary in particular and number systems in general. I’m still surprised that students don’t enter high school knowing this stuff but I guess priorities in education change.

In any case, if you do an internet search for “teaching Binary” you will find a lot of resources and discussions about the how to teach. (My own list is at Resources For Teaching Binary Numbers FWIW) What I don’t find a lot, at least not easily, is justification for why we should teach Binary numbers. It’s obvious to us old-timers. It’s in the curriculum and standards for new teachers. That’s good enough for most of us. For students? Well, students want to know why it is important to learn something.

I asked teachers on Twitter what they said to justify teaching binary. I got some good answers.






There are more reasons as well. Binary explains the limits around the values different data types can hold. That is a key one to me.

Now I want to organize my thoughts and figure out how to present things to my students when I next cover Binary and number systems. Letting students know the importance and having context is bound to help students see the value to what  I am teaching.

So, how do you explain the importance of learning Binary in computer science?