Thursday, August 31, 2017

Gamification and Teaching Computer Science

Gamification is a huge buzz word in education generally today. There are proponents and opponents of course. And both sides have good arguments behind their opinions. I’ve had mixed feelings about the whole topic for a while. This is largely because it is hard to re3ally know what it means and how it might work for me and my teaching style. A couple of recent events have me looking at it some more.

I had one group of students brainstorm using how to get students more involved and attentive in class. They seemed to really like Kahoot!.image I was hoping for something new and out of the box and I know a number of teachers who use Kahoot! (and some similar tools as well.) So I thought I would take a look at it again. It looks interesting. I am not sure I have enough time to set up sessions right now but apparently there is a huge library of questions from other teachers. I plan look through that when I have time. (Christmas break is coming.)

Time is a problem for some of these gamification tools.

imageThe other event was sending my students to a somewhat addictive Binary number practice game from @codeorg. My students wanted to play it for a while. I could never have gotten to convert Binary to decimal or decimal to Binary as many times as they did playing this game using a worksheet.

On one hand I can see where that looks like an old fashioned “drill and kill” sort of exercise. On the other the students had fun, got some great practice doing conversions, and they seem (how will I check? )to be a lot more comfortable with the idea of doing these conversions. So there is something there.

imageAn other tool I have used in the past that is along the lines of gamification is Code Hunt. It has coding puzzles available in C# and Java. A teacher can create their own or use the ones that are already there. I’ve had mixed success with this. Some students love it and some students struggle. Code Hunt involved writing code that works with test data that is generated and displayed with results. Some students are terrible at this and get frustrated. Other students just eat it up!

 Problets by Amruth N. Kumar are a somewhat similar tool. Problems for students to solve. Amruth describes Problets as “problem solving software assistants for learning, reinforcement and assessment of programming concepts.” All of the problets are available in C++, Java, and C#. Some are also available in Visual Basic. I may try problets this year. We’ll see. There is that whole time issue again.

I want learning to be fun. I don’t want to have students playing games just to be “the cool teacher.” Things that look like games have to have real value and promote actual learning and/or indicate that learning has taken place.If a game does that I’m ok with it. But I need to make sure it has value first.

Tuesday, August 15, 2017

Ideas for Computer Science Teachers from CS Teachers

For me one of the big benefits of social media is getting and sharing ideas from other computer science teachers. Blogs, Twitter, and Facebook are regular sources of good information. I’ve got several to share today.

It starts with Kimberly Laron’s Facebook post on a teaching aid for number systems.image I’m always looking for new aids for teaching binary and the like. Her Google Sheets tool is pretty cool.  I made my own version for Excel because I’m an Excel sort of guy.

Then there are the cool images that Jill Westerlund shares on her blog at Say it better with Boolean && binary. She has a bunch of them and both shows images of how she is using them and direct links so you can download copies of them for your own use. Check them out. I’ll be using several of them in my own lab.

Another favorite thing is new projects or new takes on older projects. Doug Peterson who had a recent birthday wrote about the Birthday Project. Maybe you’ve used on or maybe not. In either case Doug’s take on it is a great read. Plus he links to the Wikipedia article on the Birthday Project for more information.  But there are more links than just that one. Visit Doug’s post for more.

Thursday, August 10, 2017

#BUILTBYGIRLS Challenge - for teen girls with startup ideas

This looks interesting. Know a girl with entrepreneurship dreams and ideas?


#BUILTBYGIRLS is looking for the next wave of startup founders and change-makers. Are you building a mobile app, hardware device, robotics project, game, or something no one has invented yet? Does it have the potential to succeed in the real world?

Wow us with your product concept, designs and working prototype for the chance to win $10,000. Finalists will get the trip of a lifetime to San Francisco to pitch in front of expert girl judges, tech moguls and industry experts.

Are you ready to build the next big startup?

https://www.builtbygirls.com/programs/challenge

Eligibility

Girls 13-18 years old who can participate in SF from 9/14-20, 2017. Open to teams of up to 4.

Tuesday, August 08, 2017

How To Retain Computer Science Teachers

One of the big topics around computer science education is the shortage of teachers with enough CS knowledge to properly teach the subject. One fear is that anyone well enough versed in computer science to teach it is likely to leave teaching for industry. Mike Zamansky addressed this a bit recently with his post On Retaining Teachers. And earlier in Will we lose CS teachers to industry? This sort of discussion comes up a lot. The typical "answer" advanced is higher pay. Sounds great but not really practical.

Union rules in most public school systems prohibit paying premiums for different subject teachers. Where rules don't often custom or a systemic view of fairness (all teachers do the same job regardless of subject) prevent different salaries. If that is out, how does a school or school system retain teachers.

Mike Zamansky in his posts suggests non financial benefits for teachers. New electives for example. Letting teachers teach courses they enjoy is a good incentive. In the case of computer science teachers I can think of other incentives. Of course everyone is different and is motivated in different ways. So what seems good to me may not make everyone happy enough to stay. But I think they'll appeal to many.

Really things boil down to treating computer science teachers with trust and respect as well as giving them the tools to do their job better. For example, do computer science teachers have administrative privileges on the computers in their lab? If not, why not? One would expect that a well prepared CS teacher should be able to safely handle that responsibility. In fact it is often necessary for them to experiment with new tools and teaching techniques. Keeping administrative access from them shows a lack of respect and trust. That will make anyone feel less valued.

How about keeping teaching labs up to date? Yes it costs money but if you want students to be current then the equipment they learn on should be current. Plus making CS teachers find work around and hacks to deal with inadequate computers leads to frustration and discouragement. And by the way, the CS teachers should be consulted on decisions about computers and software for their labs. Believe it or not stories of teachers returning from summer break to find that PCs have been replaced by Apple Macs or Google Chromebooks are far to common. This is incredibly disruptive and makes for serious stress and aggravation for teachers.

Professional development is another area where CS teachers can use some support. While most systems have some money for professional development but teachers are not always encouraged to apply for it. With CS constantly moving regular PD is really necessary. Unfortunately it is not always close or inexpensive. Conferences like CSTA are wonderful but often districts are unwilling to pay the full cost (transportation and housing are the big costs.) These events are great for teachers but not all teacher can afford to pick up the slack on their own. Not on a teacher salary. Schools need to invest in CS teachers.

Related to both professional development and new electives (there are huge opportunities for CS electives that appeal to teachers and students alike) is some funding for new equipment for teaching. Not just the previously mentioned lab computers but things like Micro:bits, robots, quadcopters, and other electronics that can make CS more interesting and even more cross curricula. Different teachers have different interests and encouraging them to follow those interests and bring them to their teaching can be very motivating. And help with retention.

So that's my bit of brainstorming on the subject. What do you think? If you teach CS what sorts of thing motivate you to stay teaching and stay are your present school? What sorts of things make you want to leave? Maybe we can help our administrators out with some ideas.





Monday, August 07, 2017

Twitter Chats for Computer Science Teachers

With the isolation that many computer science teachers feel social media can be an important part of both building community and professional development. Recently I have focused on blogs (Five Must Read Blogs for Computer Science Teachers ) and an online forum ( An Online Forum for Computer Science Educators ). Today I'd like to list a few useful Twitter chats.

  • #csk8 5pm-6pm Pacific Time every other Wednesday during the school year. This is a must attend chat for CS teachers in pre-secondary education. I get a lot out of it myself FWIW.
  • #ethicalCS 5pm PT/8pm ET Wednesdays during the summer. I'm hoping it continues as discussions so have have been fascinating.
  • #caschat 8-9 pm London time, during term time.Hosted by Computing At School in the United Kingdom. Lots of value for those of us in other parts of the world as well.
  • #PiChatUSA Thursdays 8:30-9pm Eastern Time, if you use Raspberry Pi. in class you'll want to join this one
  • #InfyEdChat 5 PM PT / 8 PM ET Mondays. Each chat is hosted by a different person and very well run. I hosted one myself back in July 2017 Always interesting chats.
  • #TynkerChat Mondays at 4pm PT / 7pm PT for a 1/2 hour. very useful for people who use Tynker in their classroom.

The Exploring Computer Science people are running their first Twitter chat tonight at 5PM Pacific time. Follow at #ECSeduECS Chat

Personally I really like Twitter chats. I've really found a bunch of people to learn from through these events. And of course learned a lot from them.

BTW I recommend checking those hash tags from time to time when there are not formal chats going on. People often use them to signel information of value to others who participate in these chats regularly.

Tuesday, August 01, 2017

Cybersecurity–This Summer's Computer Science Education Buzzword

Cybersecurity seems to be all the rage these days. It was a big topic of conversation at this summer's CSTA conference, I've had a number of parents ask me if we teach it at my school, and it is been big on the CS ed social media scene. The NSA even came to talk to teachers at the CSTA conference! It's a big deal! But what does it really mean? Well to quote the great philosopher:

"When I use a word," Humpty Dumpty said, in rather a scornful tone, "it means just what I choose it to mean—neither more nor less."

Or perhaps the story of the blind men studying the elephant is even better? In short, every seems to have a different idea or no idea at all of what cybersecurity means or how it should be taught in schools.

I've been asking around for people's thoughts on this lately. One of the people I asked is a former student who does security work at a local university. Some of his thoughts are below with some edits of my own.

There are two 'tracks' in education that I've seen as a result of this. 

1. Security IT people.  These people think at a business-process level at best, and simply IT service provisioning at worse.  They clean viruses, install operating systems, evaluate products, establish procedures, write policy, inspect network traffic etc.  Security for these people is either strategic or tactical.  They are concerned about 'doing the right thing' as far as security goes, even though they are usually not a technical nerds as one might generally like.

When I've seen people do this at a college level, they do blue-team/red-team hacking and defending either as a class or in clubs.  I personally _hate_ this approach, but I get why people do it. 

A. its fun,

B. its sexy

C. it can be competitive and cooperative and

D. it give something much closer to real world experience.

its also E. Not what _most_ people spend any serious time doing.  That pen-testing stuff gets outsourced to whatever place can do it the cheapest.  Its usually done as part of audits and other really-boring activities and the burnout rate for new people in those professions is 2-5 years.  In my experience, students that do it need lots of oversight so they don't go hacking things they shouldn't and sometimes people need to make a 'safe' lab environment so they don't affect anything else.  That can translate to a lot of time and resources. 

A better approach would be to do a IT modeling course of some reasonable kind.  At one university, there was an course on networking at the grad level, and while they didn't do much actual networking, they would work in teams to design IT technology layouts.  The students learned a lot about modern IT systems, servers, desktops, networking, software management, firewall, IDS/IPS tools, etc.  The Big Project was, given a somewhat real-world-ish scenario (a courthouse, a college, a city, etc) design an IT system from the ground up.  There was a presentation to a small panel and the winners won a prize. 

2. The other track, secure programming.

This is an extremely useful skill too, but its absolutely not sexy.  These people design good algorithms, write solid encryption, read and debug code, do proper QA and acceptance testing, etc.  The lower-level code, the better.  I'm not sure how useful this is though to the average programmer.... never-mind a high school student.... given the fact that if you are using reasonable libraries and sticking to a high-level language, you are usually fine for most development.

A similar approach that might have less direct programming, would be to look at a book like 'Threat Modeling' by Adam Shostack.  He's a Microsoft guy and has done a lot of work thinking about applications of a threat model to different situations.  You would have to do a little 'translation' of the book to high-school programming skills, but in it he talks about software design and thinking through potential security use-cases using a standard model.  Being able to read and debug code someone else wrote, thinking about things in psuedo-code before writing something ('Ready', 'Fire', 'Aim'? ;-), and understanding Information Security goals of Security, Integrity, and Availability without getting all theoretical about it. 

The first category, Security IT, seems like the natural thing for high schools. It fits in very well with network management type courses. And there are all those CTF (Capture the Flag) contests that many students seem to like. Plus is plays into a desire that seems to be prevalent to learn hacking.  It's not for everyone though and for some it doesn't feel like "real computer science." A term that is hard to define for many as well.

The second category, secure programming, is more interesting to me personally. I spent some time doing operating system development where among other things I was responsible for maintaining the code that allowed users to log on and off. Plus we made major security changes to the OS while I was part of the team so threat analysis and design for security was a big part of what we were doing.

It's not so glamorous as "hacking into computers" or even preventing malicious users fro breaking into your network for many students though. But it is oh so important.

I'm still quite a way from deciding what a cybersecurity course might look like at my high school. I can easily think of a couple of ways it could work at the higher education level but fitting it into the high school curriculum seems harder.

What I have decided is that I need to include some discussion of various cybersecurity issues in several existing courses. We talk about some security issues already, good passwords and their use for example. We could do more though. And in my programming courses we could talk about secure programming more. Most of all we could be including discussion of various cybersecurity issues in Advanced Placement Computer Science Principles. For the time being that is my plan. But I'm going to keep working on the idea of a dedicated computer security course. Let me know if you have suggestions or know of good existing cybersecurity courses at the secondary school level.