Sunday, November 22, 2020

The Making of a Computer Science Teacher

There is quite the conversation going on in the private Computer Science Educators group on Facebook about teacher preparation for CS educators. This is a very interesting group for CS educators BTW. Join if you are on Facebook. I link to some specific articles at the end.

It’s a lot more complicated question than it might appear. There is the argument about what CS educators need to know to teach CS effectively. Is something better than nothing or is not enough going to mean poorly prepared students? Given all the complaints I have heard from university people about high school students being taught CS wrong (what ever that means) I tend to believe that CS educators should have a lot more depth of knowledge than the courses they are teaching. Definitely more depth than their students will get from the course. We expect this from teachers of other subjects (for the most part – see highly qualified teacher).

As to preparation, and its close cousin – certification – we are dealing wtih three main types of people who need preparation to teach CS.

  • Teachers of other subjects
  • CS experienced people moving into teaching
  • Career beginners who are not previously teachers or CS people

They all need something different. I have heard people say that a good teacher can teach any subject after learning some content knowledge. I would argue that teaching CS is different from teaching most other subjects. A teacher needs to know how to teach computer science. We've been fortunate over the last decade or two that some serious research in how to teach CS has been done. CS teachers need to know what has been learned about HOW to teach.

Teachers of other subjects also need some solid content knowledge. Topping out at the content involved in AP CS Principles and AP CS A (the top high school cs courses) is not enough. Well, not for high school CS teachers. Students are going to ask deeper questions than what is required and you can only get by with “well, let’s look that up” so often before people start to wonder if you know what you are doing.

How much do you need? And this goes for people new to teaching as well as just new to teaching CS. That’s a struggle. I don’t think you can get it in two one semester courses let alone a couple of weeks worth of summer workshops. Two semesters of programming is probably the minimum for that aspect. In the first one a person learns a programming language and a start of how to solve problems. It takes a second course to really become a programmer. Of course there is a lot more to computer science than programming. Vocabulary, networking, algorithms, security, CS ethics, and well, if your have taught AP CS Principles you get the rest. So three or four semesters of real CS.

Everyone who teaches CS including those new to teaching and those career changes needs a course or two (or three) if pedagogy. A focus on teaching CS for sure but also some work on test development and evaluation and classroom management. Do they teach classroom management in regular education programs? CS has some interesting complications involving students playing on the internet and messing with lab computers.

I also think that CS teachers, especially now when there are seldom multiple CS teachers in a building, need to learn about external resources. Social media, CSTA, summer workshops and conferences, StackOverflow, and generally how to build a network to support your growth as a CS teacher.

To prepare to be a great CS teacher is going to take a lot of work. Yes, people do figure it out on their own I know people, I am one, who came to industry without training in teaching and did a pretty good job. Enthusiasm and great students will get you pretty far. That’s not the ideal I look back and wonder how much better my students would have been if I had known what I know about teaching CS back then. I don’t think I messed anyone up too much but could I have taken them further? I like to think so.

If CS is going to take its place with other core subjects we have to learn to teach it well. We have to have more than just enthusiasm for the subject.. We have to set high standards for teachers as well as students.

Facebook Conversations

Mike Zamansky’s post of the subject

Monday, November 16, 2020

Tiny Book of Simple Cryptography

I've been playing with simple cryptography. Mostly stuff that was solid before computers. Just for fun mostly but some of it may make for interesting projects for students. I've written a little bit about the things I have been playing with.

This is not a big book and it is intended more to spark interest and not to be a real reference book. There are footnotes linking to Wikipedia articles that would be a good next step for learning more.

I have a couple of substitution ciphers and a couple of  transposition ciphers.

Comments and gentle criticism welcome. I have coded solutions in C# that are ok. Some of them even have comments.

Thursday, October 29, 2020

TileCode–Creating games on and for handheld devices

People are Microsoft always seem to be working on interesting and unexpected (to me anyway) things.  My most recent discovery is TileCode. From the website:

Microsoft TileCode is an app for designing, coding, and playing video games directly on low-cost MakeCode Arcade gaming handhelds, as well as in the web browser. With TileCode, we are using the medium of video games to explore the combination of
  • Natural language for informally specifying games goals, rules, and mechanics;
  • Physical computational models that foreground concepts such as data parallelism, pattern matching, and conflict resolution;
  • Testing and debugging of programs to establish confidence in their behavior and to refine specifications;
  • Machine learning to help bridge the gap between natural language and programs, as well as to generate non-player character behavior in games.

Our ultimate goal is to provide a sandbox in which students can express and refine their game ideas, while learning about computation, programming, and machine learning, supported by software engineering practices.

It's a pretty interesting idea. I wonder how it might work in classrooms. There is a webinar about their research later in November that I hope to sit in on.

TileCode builds on a lot of previous work and not just from Microsoft. It builds on Kodu and MakeCode but they reference a lot of other block based tools in their paper - TileCode: Creation of Video Games on Gaming Handhelds

I'm really fascinated by the work I am seeing in domain specific tools lately. While games are a popular topic I'm been following Mark Guzdial's work with domain specific languages for Social Studies with interest. I tend to think that rather than see artificial intelligence take over the job of programming that we’ll see more and more domain specific languages (should we call them tools?) that people will use.  I’m not convinced that AI and machine learning will know when rules are really guidelines.

Wednesday, October 14, 2020

What If We Asked Students To Write Textbooks?

A professor friend on Facebook posted that a student emailed him to say that they textbook the were using was “crap.” I suggested in jest that he asked the student to write a better one. That’s pretty tough since how do you write a textbook about something you are learning as you go? (Can be done. Is painful. Don’t ask how I know this.)

The exchange got me thinking though. Supposed we asked students to write a chapter for a mock textbook? Or perhaps asked them to write step by step instructions for completing an exercise assignment. After it was covered in class but perhaps in lieu of a test.

I think it would be interesting to see how students explain concepts. Have they write to explain things to people their own age. How would they explain things? What words would they use? What examples would they give?

They say that to really understand something you have to be able to explain it to others. 

Somehow I don’t think most students would like this exercise though. Of course we already ask students to do things they don’t like – taking tests being one of them.  I do think that it would give us insights into what they do understand and how they understand it. Or misunderstand it as the case maybe.

Anyone want to try it?

Monday, October 12, 2020

Thinking About the Algorithms in Our Lives

My wife and I use these fitness trackers, ours are made by Garmin, to keep track of our activity during the day. Each day the devices give us a goal for how many steps we should take that day.  The goal goes up or down depending on how many steps we did on the previous day. I think. Maybe.

Being the computer guy that I am I keep thinking about how the algorithm actually works. Is it a simple algorithm based on some sort of average or does it have some amount of smarts? Does it take several days activity into account or just the previous days? Like so many things in our lives the algorithm is completely opaque to users.

Google Page Rank, the algorithms that run on the computers controlling our cars, and the software John Deere uses to control the equipment they make. (see article linked below for way this opacity is a problem for some) are all secret. Why?

Well, various companies have various reasons for keeping their algorithms secret. Competitive advantage is the reason for some. For many it is to keep people from “gaming the system.” Google, and other search engines, don’t want people to find ways to get unfairly high placement in searches. I suspect some of that is involved in my Garmin’s secrecy. For others, it is about keeping control of the how the systems them make are run – often for the sake of safety. That’s why many companies don’t want their software “messed with.”

How good or bad this is for the consumer is quite up for debate. There are solid arguments on both side. Arguably, the right thing depends on the situation in many (perhaps most) cases. These are issues we need to think about going forward. People who write software and create algorithms have a responsibility to make the right decisions about secrecy or openness. The decisions have to be about more than just money as well.

Do you discuss these issues with students? I think we need to do so.

Farmers Fight John Deere Over Who Gets to Fix an $800,000 Tractor

Sunday, October 04, 2020

Artificial Intelligence, Humor, and Appreciation of Beauty

Last night I started re-reading Heinlein’s The Moon Is A Harsh Mistress.  It’s an old book, written in the mid 1960s, so there are some old ideas about computers and computing in it for sure. There is some hand waving about how AI is done and how the computer, Mike or Mycroft Holmes, becomes self aware. It is fiction after all. The computer is trying to understand humor and a human friend is trying to help. One way he is helping is to get lists of jokes and report back on which jokes are funny, which are funny once, and which ones are always funny. That sounds a bit like machine learning we see today I think.

In any case, even is the computer does understand humor at some level and is able to create jokes that people find funny does that mean it has a real sense of humor? Will it be able to laugh at jokes that are not in its system? I wonder.

This makes me wonder about other things. We know that AI has been able to write music that people enjoy and create art that looks like it was done by master artists. Is creating art or music the same as enjoying art and music? Maybe not. Now human artists “hear” music in their heads before they write it down or play it. Beethoven write music while he was deaf and so could not hear it being played.

I’ve been to a number of wine tastings. I don’t like wine. No matter how many times I taste it I just don’t enjoy the taste. Listening to wine experts talk about wine and tasting it myself I think (could be wrong) I could learn to identify the wines that wine lovers like. I don’t see me enjoying the process very much though. Understanding is not the same as enjoying. Is it the same for computers and AI? I think so.Recognizing beauty or humor or music is not the same as enjoying it.

The difference between humans and AI is that humans enjoy their creations. And they enjoy the creations of others. If we think about creating beauty as enough to  being human-like  I think we have a narrow view of humans. What do you think?

Thursday, October 01, 2020

MicroBlocks For IoT and other Physical Computing

Well, there is a new tool in town for programming micro devices like the Micro:bit and the AdaFruit Circuit Playground Express and many more! It's called MicroBlocks and was created by a rock star team with experience with creation of such tools as Scratch and Snap!. It’s pretty exciting for a number of reasons. One of them is the wide variety of devices it works with. Another is the Natural Languages it supports.

Live Coding is another interesting feature.

MicroBlocks is a live environment. Click on a block and it runs immediately, right on the board. Try out commands. See and graph sensor values in real time. No more waiting for code to compile and download.

And Multi Tasking.

Want to display an animation while controlling a motor? No problem! MicroBlocks lets you write separate scripts for each task and run them at the same time. Your code is simpler to write and easier to understand

I played with it a bit and it looks pretty intuitive especially for those with previous block programming experience. I made the mistake of trying it without having a device to use with it handy. I have several at home and so I’ll be trying them next week. But I wanted to get the word out so that if people want to try it over the weekend (yeah, I know you don’t have as much free time as you want) or have some students try it out you could.

Sometime next week I want to do a side by side comparison with MakeCode which supports several of the same devices. Some obvious differences are that MicroBlocks supports running the exact same app on different types of devices and that MakeCode has emulators. Since most people only use one type at a time and have physical devices the impact of those differences will be different in different environments.

We are living in exciting times!