Friday, January 30, 2026

CS Teacher Improvement Through Observation

I remember the first time I was observed by a principal. Brilliant man with two masters degrees and ABD PhD. He told me that he didn't understand much of what I was teaching but the students seemed to be getting it and the class ran smoothly. Not much in there to help me improve.

I believe that teaching CS is different from teaching most subjects. But each subject probably has its own nuances. That's why I think that teachers need specific training in teaching their particular subject. I know that there are MS degree programs in teaching reading and, I think, math. Probably more than those as well

There is limited training in how to teach CS though. There are some degree and certificate programs in teaching CS. As states increasingly require certification to teach computer science there will be more I am sure. Most CS teachers have to figure it out on their own though.

I think we have a lot to learn about how to teach CS well. There are a few people doing research in CS education. A lot of it gets disseminated at SIGCSE which can be hard for K-12 CS teachers to attend. That is both because of cost and because it happens during the school year. A lot of teachers have very limited options for missing school days. If nothing else it is a lot of work to create good sub plans!

Many teachers are resistant to sessions that are research based. That is often because they have had too many professional development sessions that year after year replace the previous research based methods without giving any one method a fair chance. Or worse, having failed.

It would be nice is teachers had more opportunity to observe experience CS teachers teach. (Both Mark Guzdial and Mike Zamansky have blogged about that recently – blog post links below) BTW if you ever get a chance to hear Mark Guzdial present I recommend that you do. Especially if the topic is how to teach.

In an ideal world, CS teachers would get to observe teachers in the building where they teach. For a variety of reasons, not the least of which is that many K-12 CS teachers are the only CS teacher in the building, that is often not possible.

CS conferences are a mixed bag. Yes, there are some great presenters. Many of them do try to model good teaching practice. There are not a lot of talks on how to teach though. I gave one at CSTA Online six years ago. (How is it that long ago?) It was well received but we could use a lot more that talk about and modeled how to teach CS.

I think we could use more talk sessions on the conference “hallway track” that informal, unscheduled time when teachers find themselves sharing ideas with like minded people.

At the heart of the issue is that teachers have to be about constant improvement. There is a difference between five years of experience and one year of experience five times.

Anyway, please read the posts linked below. Smarter people than me.

Wednesday, January 28, 2026

Are AI Code Assistants Getting Better or Worse

A friend of mine sent me a link to an opinion piece in the IEEE Spectrum - AI Coding Assistants Are Getting Worse –> Newer models are more prone to silent but deadly failure modes

Are AI code generators getting worse? The tl;dr  in this article is “Yes” because companies are letting poor programmers train the AI. You should read the article though.

It’s not deliberate of course. It’s just the way the internet works. AI software is not checking to see if the information it is getting is good in absolute terms. It is just checking to see if the user is happy. In the user is happy because they don’t realize that what they have is bad how is the AI to know?

The term GIGO - Garbage In, Garbage Out may not be repeated as often as it used to be but it is still true! We have to be careful about who and how artificial intelligence is trained. Do an internet search for “Chatbot goes bad” sometime and you’ll find a large number of cases where AI chatbots have been trained badly. Sometimes trained maliciously. Sometimes just trained on poor data sets.

TO me this trend points out a couple of things that we need to teach beginners. In the words of Ronald Regan, “Trust but verify.” Students need to test their code. Students need to be able to read and understand code. Programmers have to be able to determine if AI it taking shortcuts like leaving out error handling, data validation, and other errors of omission.

We also need to prepare students to think about how AIs are being trained so that they learn how to train AIs well themselves. Even if coding is dead, as one of my former students claims, people will still have to train AI, ask AI good questions, and be able to understand if they are getting the value from AI that they want, need, and think they are getting.

Monday, January 26, 2026

RotWords–String Manipulation Project

BlueSky is the microblogging site for me these days. That is where I am getting ideas and information about teaching computer science among other things. I recently saw the following message.

It’s an obvious possible coding project in my eyes.

  1. Read a word from a wordlist
  2. Remove the last letter and place in in the front of the word
  3. Determine if the new string matches an actual word.
  4. Display both old and new word, if found
  5. Repeat

It’s probably easy coded by an AI of course though I suspect students might come up with interesting implementations on their own as well.

As was pointed out in replies on BlueSky things get more interesting if they lead to a discussion about the nature of words. For example, a lot of words that end in “S” and plurals of words. Is there a way to strip plurals from a data set programmatically? (I’ve been thinking about that for my Wordle solver program as Wordle doesn’t use plurals.)

And what is the usefulness of word lists if they have words that are not really words? Or that are not in common use?

We don’t tend to talk about data integrity, data validity/validation, normalization of data, or any kind of data checking all in K-12 CS classes. We probably should discuss it though. A project like this might be useful in getting that conversation going. Just a thought.

Saturday, January 24, 2026

Dice As a Design Problem

The other day I ran into an interesting programming exercise on BlueSky.

The project description is at 2D Dice Grid Scoring Algorithm - 101 Computing It’s a cool project. I decided to code up a solution myself. Now there is sample starter code at that link in Python. I do my fun programming in C# so I started from scratch.

The first thing I had to do was to think about a Die class. I’ve written classes for dice projects many times before. It was a favorite item for me to use when teaching students about designing classes. Just about everyone is familiar with dice. I also brought in some samples to use as visual aids. I had some binary dice with only ones and zeros and some role playing dice in a variety of shapes and numbers of sides.

Students generally come up with the idea that they need to have a face value for the die. They generally also easily come up with the need to display that value and methods to change it to a random value. What they don’t always remember right away is that no all dice have six sides. Some dice have many more than six sides. Eventually they come up with two sided dice which we sometimes call coins.

I had a couple of example Die classes from other projects but I decided I wanted to be a bit more visual. So I created an object with the ability to display images. For this particular project I also added an extra method. I added a method to return if the face value was even – a Boolean value – true for even, false for odd. You know, just to make things interesting. Right now it is a method but I want to change it to a property to avoid unneeded parentheses.  I am not a fan of parentheses.

I did cheat a little. I had Copilot create some of the initial work on the code. Copilot, like my students, assumed a six sided die with values from one to six. I didn’t specify much so that’s understandable. It’s not really satisfying for me though so I will be putting some extra work into things to make the class more flexible. I will add constructors that let a program use different images and numbers of images. After all, just as not all die have six sides not all die have numbers or pips on them.

What would/do you add to die objects to make them more interesting or useful?

My project looks like this BTW.

Monday, January 19, 2026

Funding for CS Educational Tools

Mark Guzdial posted a link to an interview with Jens Mönig. Jens is the main person behind Snap! which developed out of Scratch (which Jens worked on). It’s a great interview and I recommend it. The story of Snap! is an interesting one. I think it is great that SAP is funding the team behind it. This blog post, which sort of rambles a bit (sorry) was inspired by that interview.

There are basically two and a half ways that software for teaching programming and computer science are funded. One is research funding. Usually by universities but sometimes by research groups that are part of major companies. The later is the half I refer to. The other is commercial products. I.e.. products that actually make money for companies.

The problem with commercial products is that they are really designed for professional software developers. That means a number of things that are great for professionals but harder for beginners. Complexity is one of those issues. Visual Studio, which I use for my own development and used for years in the classroom, using a number of different files for every project for example. That’s just the beginning. Development on professional tools adds features for professionals but often subtracts features that are helpful for beginners. I first ran into this when Visual Basic became Visual Basic .NET and arrays of controls when from intuitive to complex with extra code necessary.

Commercial software often has free versions which is the only way schools can generally afford to use them. Simple versions that work on a school’s limited resources tend to go away over time though. They don’t pay for themselves.

I have seen other cool tools from commercial tools, or tools commercial companies provided for free, disappear over the years. Corporate research projects generally last while the principle investigator remains interested and can keep getting funding. If the research doesn’t wind up in a commercial product that doesn’t help with funding.

App Inventor is an exception. Originally developed at Google, App Inventor had an academic sponsor (It resides at MIT these day) and Google provided some seed money to get the open source version started. It phased easily from corporate research to university research.

MakeCode (largely a Microsoft Research project)  is still going strong. It appears that industry/ academic cooperation is helping keep that going. That combination seems to be key in keeping some projects going.

University research projects tend to last longer than corporate research projects. As long as someone can get grants, usually tied to graduate students coming up with good research topics involving the tool, they keep going. I wonder how well some these will continue when the principle academics lose interest, retire, or pass away. Some projects have depth of involvement which is helpful.

 Alice out of Carnegie Mellon has been going strong for 30 years even though it’s originator, the great Randy Pausch passed away in 2008.  External funding, required for most academic tools has stayed strong for Alice. That takes a lot of work to maintain of course.

Most of the long lasting tools have some level of corporate sponsorship. Oracle helping with Greenfoot and BlueJ are other examples.  There used to be a lot of NSF (US National Science Foundation) money around. Somehow I suspect there is a lot less of it these days. It’s risky to depend on it as well given the rapidly shifting state of US Federal funding.

And then there is Artificial Intelligence to think about. That’s sort of the elephant in the living room these days. If funding agencies (government, non-profit, industry) decide that coding is dead because of AI what happens to funding for the tools educators are using today?

I don’t believe that coding is dead but I know that some people have decided that  it either is or soon will be. Computer science education is going through a change caused by the winds of AI. Industry seems to think that they don’t need inexperienced software developers. Development of developers has to start somewhere though. One can’t go from zero to experiences expert without starting somewhere.

I believe we need good teaching software. I hope we can keep seeing good things supported and developed in the future. We live in interesting times.

Note that Mike Zamansky wrote a riff on this post. Recommended at Funding for CS Educational tools - C’est la Z

Friday, January 09, 2026

Binary Math–Subtracting by Adding

Some of my readers who have been teaching Advanced Placement Computer Science (APCS) will remember the BigInt case study. It was a case study involving mathematics using large (very large) integers. As released by the College Board it supported adding, subtracting, and multiplying large integers. You will notice that division was not included. In fact, asking students to implement division was part of the exam.

BigInt introduced the idea that multiplication was actually multiple addition. By extension, students were to figure out that division is multiple subtraction.

Computer science really requires understanding how mathematics works at a deep level. It becomes obvious (one would hope) when trying to understand how Binary, Octal, and Hexadecimal work. We don’t often spend much if any time trying to understand subtraction though.

Recently, on BlueSky I can across a message by Andrew Virnuls linking to a blog post titled Two's Complement and Negative Binary Numbers that explains subtracting by adding negative numbers.

Let me draw the two previous notes in this post together with some history of mine. Back in my university days I worked on a course connecting some test hardware to a computer. The computer was a Digital Equipment PDP-8. Now the 8 was an interesting machine. It didn’t have a hard drive and it was programmed in assembly language entered in Binary. Where as most computers we use today use hexadecimal representation (base 16) the PDP-8 used Octal (base 8). The word size was 12 bits. Not 64, 32, or even 16 – 12.

This word size places some limits and one of those limits was the number of machine language/ Assembly language instructions. There was no multiply, divide or even subtraction instruction. We had to write code to do those things similar to how code was written in BigInt for those operations. We also had to write code to do subtraction. There was an instruction to create the two’s compliment of a number though. That was handy. So we wrote code to find and use the two’s compliment of a number in order to do subtraction.

We used the subtraction routine to implement division. Though to be honest, we tried to avoid having to do multiplication or division in our project to keep performance reasonable.

I think we’re all glad that today’s computers have a lot more layers of abstraction than the PDP-8 had! Of course, and a lot of students do not realize this, most powerful assembly language instructions are actually the result of what is called microcode that works transparently behind the scenes.

We keep moving up the path of abstraction. Hal Berenson addressed this recently in a post called 98% of Developers can’t program a computer which is actually a bit of a success story including how artificial intelligence is helping with higher levels of abstraction.

Saturday, December 27, 2025

AI Written Code and Making Assumptions

I’ve been writing some code for my own amusement the last few days. I have happily using Microsoft CoPilot to help me out. One really has to be careful with prompts though. CoPilot loves to make assumptions about what the developer desires. Often, it assumes correctly. Often enough, it assumes incorrectly.

I spent a good bit of time trying to figure how where it was doing some things I didn’t want done at all and other places where it got my intentions backwards. For example, we both had different ideas about what a variable called _defaultColor should refer to. That took me a bit.

I could have tried to ask CoPilot to fix the problem for me but if I had a better idea of how to express what I wanted it would probably have gotten things right, for my definition of right, the first time. So I fixed it myself.

I also made some assumptions about what certain methods were doing. I mostly assumed correctly but mostly is not really good enough when dealing with code. I really should have spent more time reading the code and making sure I understood it before trying to modify it. Yes, I said it before knowing how to read code is more important than ever.

Reading code on a screen can be painful though. One tends to get a sort of tunnel vision looking at little bits of code at a time. Many years ago I worked with a developer who had a terminal that was originally developed to typesetting at newspapers. It was tall and could hold a lot of lines of code. It was great for reading code. I don’t have anything like that. For me, the answer is printing listings out on paper. Maybe its just me but that is what has worked well for me for over 50 years of writing code.

I have more modifications I want to make to my program. I’ll spend some serious time reviewing the generated code before I try to make those modifications.

Related read: "Source code is the literature of computer scientists." https://www.cs.uni.edu/~wallingf/blog/archives/monthly/2025-12.html#e2025-12-26T18_28_37.htm A post by Eugene Wallingford

One other note, CoPilot added a lot of helpful error handling code to what I asked. That’s awesome in a lot of ways. I think that spotting a lot of error handling code may be something that tips off an educator that a student used artificial intelligence to write their code. Keep a look out and be sure to ask the student to explain it all.

Thursday, December 11, 2025

Computer Science Education Week Greeting Cards

Seems like several years now I have joked or perhaps half joked that there are no Computer Science Education Week greeting cards. Have any of my readers seen any? It turns out that someone on Etsy offers some. I wasn’t impressed but at least someone else was thinking about it. Having students create cards might be a fun project.

What would they look like? What sort of message might they have? The most obvious might be some sort of thankyou to CS educators. That’s what the Etsy ones look like. It’s not a bad idea really.

Perhaps some sort of message encouraging students to try An Hour of Code (or An Hour of AI) might be a good idea.

Perhaps something related to Grace Hopper as the week her birthday falls in is the week selected for CS Education Week.

I have to give this some more though. I am looking for suggestions. I will have to remember to bring this idea up earlier next year.

Monday, December 08, 2025

How Much Debugging Knowledge Do CS Teachers Need

Mark Guzdial's blog is number one on my “must read” blog list. If you are a computer science educator it should be on your list as well. Mark had another particularly interesting post recently.

Dr. Tamara Nelson-Fromm defends her dissertation: What Debugging Looks like in Alternative Endpoints | Computing Ed Research - Guzdial's Take

In it, Mark talks about some of the work by his student, Tamara Nelson-Fromm. interesting stuff and I hope to read her papers when they come out next year. One question from Mark’s post really hit me:

“[W]hat does a K-12 teacher need to know about debugging?”

A partial answer given is “maybe it’s enough to just have checklists.” of things to check. Now “maybe” is a big word. I wonder how far it goes? That is to say, how often is a checklist enough? What happens when it isn’t enough?

I’m reminded of Kernighan's Law:

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?

Students write code that is as clever as they know how. If a teacher is more experienced and more knowledgeable than their students they maybe able to handle any problems the students have. The word “maybe” comes to play again. Over the years I have had a number of teachers approach me with a student program they could not debug. I’ve had to get help myself from time to time. Debugging is hard.

[As an aside, I love debugging code. It may be more fun for me than writing original code. I may also be weird.]

Experience helps of course. I have debugged student code without looking at the code. Lots of teachers have done the same. We do see a lot of students making the same errors year after year. Students are good at coming up with unique bugs though. They’re clever that way. (See Kernighan's Law) That’s where checklists are likely to come up short.

Why is this a problem? After all, students do, generally, fix the problem. Sometimes on their own and sometimes with help. For different definitions of “fix the problem” of course. There are always workarounds. That is especially true of the type of projects assigned to beginners.

My concerns start frustration levels. The cognitive load of learning to program is high already. Spending a lot of time on a bug can be very frustrating and that can be a turnoff for students. A demotivator. Worse, if the teacher can’t solve the problem what chance does the student have? Maybe programming is too hard!

Circling back to the teacher, if they don’t have a good plan for debugging than they are not likely to be able to teach students how to debug. Sure they can share checklists and that’s not a bad thing. Like most things, students will learn more by watching a teacher model debugging than from reading about it.

Now when we are teaching, most of us try to avoid making mistakes or creating code with bugs. Generally, we practice demos multiple times to make sure we can demo the code error free. Yay us, looking like we are amazing. The occasional error, planned or otherwise, is a teaching opportunity that should be welcomed however!

Circling back to the question asked earlier, how much should a k-12 CS teacher know about debugging? It’s hard to come up with a definitive answer. Probably more than is covered in most professional development though. Arguably, it should start with technical knowledge a good bit beyond staying a chapter ahead of the students. So more than a lot of teachers who have been voluntold to teach computer science have.

They should also have some solid experience reading code. Now a few years of teaching will give you some good experience reading code. It will give one a lot of experience seeing errors as well. That’s not much help for a beginner teacher though.

I’m not sure what the answer is and finding time in the already far to limited time for training that new teachers have now is a struggle as well. I am uncomfortable with the idea that “it’s enough to just have checklists.” though.

Wednesday, December 03, 2025

Are We Really Teaching Artificial Intelligence

According to Code.ORG

The Hour of Code is now the Hour of AI

The Hour of AI makes teaching AI literacy easy, engaging, and fun. Empower your students to become the next generation of innovators with AI.

Of course the web site has a lot of activities that are still labeled “Hour of Code” but it raises the question: What does it mean to teach artificial intelligence?

In a conversation, a very smart friend talked about how there was a time when we taught Office applications (Word processing, spreadsheets, and the like) and called those classes computer science classes. That’s not real computer science and the CS education community has fought that characterization for years. With some success!

My friend made the comment that much of what is called teaching AI today is the AI equivalent of teaching the Office application of AI and not the science of AI. For example, is teaching AI teaching how to use an existing AI tool and having students train it to recognize some type of object. Is that the same as teaching how the AI works or what sorts of algorithms are behind the training? Of course not.

Likewise, teaching students how to write good prompts to a LLM is not the same as teaching how a LLM works. In fact, I would argue, its not any different from teaching students to write good instructions to another person.

Now I am not saying that learning how to write a prompt or train a machine learning tool is not valuable. Clearly it is. Arguably it is even necessary. But is that really teaching Artificial Intelligence in the same way that a course like AP CS is teaching computer science? Or is it more like teaching applications without teaching how it works?

I have heard the argument that students are not ready to learn how AI works or that the algorithms are too complicated. I would agree that students may not be ready to create an AI at the level of ChatGPT but that doesn’t mean they cannot handle the concepts behind that sort of software.

The truth is that a lot of what AI, especially machine learning and Large Language Models are doing is not really that new. What is new is that we have lots more data for AI to work with and we have processing speed that is a lot faster than what we used to have. Machine learning is heuristics on steroids. LLMs are data analysis with lots more data and faster CPUs.

We had software learning by asking questions and trying different options 50 years ago. Now we have the software asking itself the questions and finding new paths based on data. We had rule based software for decades but now we have better algorithms to evaluate data against rules. We’ve been studying text looking for hidden meanings throughout history. Now we have more text for algorithms to analyze and the ability to analyze in more ways in less time. We can start with simple data sets and basic concepts that teach the roots of AI. Students can deal with it. They do that sort of thing with human intelligence all the time.

If we are serious about preparing students for the future of AI we really need to get serious about teaching some depth of concepts. Let’s not stick with the Office applications equivalent and lets move on to the real science.

Saturday, November 29, 2025

Teaching Reading Code–More Important Than Ever

Thanks to Facebook memories and a link that was almost a dead link I reread a post on my old blog – How To Read Code. It got me thinking about Artificial intelligence writing code. What? Let me explain.

If students are going to use AI to write code they are going to have to know how to read and understand it. There are several reasons for this. One is that AI almost never write 100% of the code necessary for a project. Without being able to read and understand the generated code students will be unlikely to be able to take the project to the finish.

Reading code for understanding can also be helpful to learning more about computer science. Not just coding but computer science. Code is the language of CS but there is a lot more to understanding computer science than just writing code.

AI systems have been trained on a wide variety of code samples from a wide variety of developers with a wide variety of coding styles. That means that students reading AI generated code, potentially, have exposure to more styles and techniques than their instructors are likely to show them.

Having students read explain the code they read can be a powerful tool for their learning and for teachers to use for evaluation. Keeping students from asking the AI to write the explanation is probably a good idea though.

All of this makes me think about code reviews (Archived blog post on that - The Art of the Code Review)  Organizing code reviews may also be a good teaching tool. Reviewing student code, AI generated code, or perhaps publicly available code examples on the internet. If AI can train on other people’s code why not students?

I am wondering what having an AI explain student code would look like. Would it help students understand their own code better? It might. I have seen a lot of students tossing different code snippets into a project hoping it would work but not really understanding what the code was doing. Would it also help them understand the process of reading code? Interesting idea I think.

Wednesday, November 26, 2025

Monty Hall Problem and the Problem of Artificial Intelligence

I’m always looking for interesting projects. The other day I ran into the story of the Monty Hall Problem. The brief version of this logic/probability problem is based on a famous game show. In the hypothetical, a player is trying to win a car. Behind two doors are goats with a car behind the third. The player picks one of the doors. Before opening the door the show host opens a door, a different door, and shows that there is a goat behind it.

The player is then given a choice – stay with their first guess or switch to the different door. What’s the best option? The answer from Marilyn vos Savant who has the highest recorded IQ was that the player should change their guess.

This answer was highly controversial with many experts in probability and math saying she was wrong. Computer simulations showed that she was right though. There is an explanation for this in the Wikipedia article linked to at the top of this post.

If you know me at all, you can probably guess that I had to write a simulation myself. Trust but verify! I think it makes a good project to assign students as well.

There is a little fly in the ointment for me though. I crated a project with the name “Monty Hall” and with almost no other hint than that and Copilot in Visual Studio started writing code for the simulation!  Well, that was a surprise.  I have mixed feelings about the help. It made writing the simulation easier for me but it kind of took some of the fun away from it as well.

Copilot’s code assumed form objects that I had not created as well. It didn’t create those objects automatically. Fortunately for me, I know enough about Visual Studio and Windows Forms that I could add them easily enough. I am also experienced enough that I added other code and objects to make the project more me.

Also, as an experienced programmer, I was able to easily understand the generated code. The code generated is a little different than what I would have generated. Better? Worse? Really, just different. No big deal for an experienced programmer.

What about students? As teachers, we probably don’t want students having AI write 90% of their code for them. Copilot can be turned off and doing so is a very good idea in classroom and school lab situations.

Will students understand the generated code? In many cases, probably not. In this case, the generated code used the the ternary conditional operator. This is a perfectly valid operator in C#, Java, C++, and several other languages. It’s not often taught to beginners however. It also used a break statement which a lot of software purists do not approve of and strongly teach against.

So determining if a student used AI to write their code may, in some cases, be easy to determine. Not something you want to bet on though.

Circling back to the assumptions that Copilot makes – like objects and variables not defined automatically – students may struggle with adding the missing pieces. I would expect that in some cases trying to add what AI leaves out may be more problematic than writing code on ones own. Frustration is a common problem for students already. Artificial Intelligence may, in some cases, exacerbate the problem.

As I have noted in several blog posts, AI often creates solutions different from how I would code them. That has been a learning experience for me. I love seeing different solutions, different language features, or features used differently.

It is potentially a learning experience for students as well. My concern is that without a solid knowledge base will students be able to really understand and learn from AI generated code? Some will. Many will not.

We’re all trying to figure out what artificial intelligence means for software development and especially for teaching software development. It’s going to be a wild ride for a while.

Tuesday, November 18, 2025

CS Education Researchers On Regrets

Pay Yongpradit recently posted (LinkedIn post) about asking a number of computer science education leaders and researchers “about their biggest regret in their respective research areas.” The answers were interesting to say the least. I think they are important as well.

Natalie Rusk -  Research Scientist and OctoStudio Team Lead at MIT Media Lab

That education has focused on Scratch as a tool, where students “learn Scratch” rather than the ideas/mindsets it was designed to develop, and for only a short time (e.g., a 3-week module), rather than as an experience that can be revisited constantly and grow with students.

It does seem like Scratch is often used as a sort of quick introduction to programming. It's big with An Hour of Code and that is fine as far as it goes but Scratch, and similar block based programming tools, can be so much more. It could be incorporated into other subjects, used as way to help students think and explore.

Sue Sentance - Research Professor, University of Cambridge

That the UK didn't fund scaled, organized teacher PD when they rolled out their national computing program in 2014. They had a bottom-up approach with their network of master teachers, but it wasn't enough to train teachers at the scale and quality they needed. Also that the UK hasn't emphasized the importance of CS Ed research when introducing CS in schools, especially for the youngest kids.

Professional Development for computer science educators and for educators who use computer science but don't always see themselves as CS educators is woefully inadequate. A week or three is not enough time. Worse still is that most PD is skill based rather than pedagogic. Most PD is "here is a neat tool and now we are going to teach you how to use it." That's different from "here is how to teach using this tool." It's even more different, and less than, "here is how we use this tool to teach this concept." That later is what teachers really need. We are also not seeing enough research in how to teach computer science. Teachers are often reluctant to incorporate the learning from that research as well. A lot of what is sold as research based has had a short shelf live over the years.

That doesn't encourage teachers as they have seen too many "research based" ideas last a year or two and then be replaced with something new. I think that sometimes these new ideas come from people with something to sell rather than from people who have done reproducible research. That's a problem and a reason that we need rigorous research with reproducible results. That requires funding.

Tim Bell - Professor at University of Canterbury

That CS Unplugged has been viewed as a replacement for programming, not as an entree, to the extent that in some places, CS Unplugged has been used as an excuse for not investing in devices and comprehensive programming education.

I love CS Unplugged activities and when I use them I use them to lead into programming. I think that a lot of people use them as a filler for times when they don’t have equipment to use with students. That’s a shame. I think some of this is because there isn’t any real PD in how to use these tools as integrated into introducing programming concepts. PD and education research play into all of this.

I think the messages from all three of these wonderful people tie together and show the need for research into pedagogy and education for teachers. Education into how to teach concepts!

Monday, November 03, 2025

Flag on the Play AI Let Me Down

My latest coding involves an attempt to memorize nautical signal flags. I’ve played with this idea in the past but never had the time to really dig into it. I’ve had images of the flags for years. I’d even started created a class to hold the data.

Image _flag;
String _mnemonic;
String _shortName;
String _morseCode;

Yes, at some point I want to learn Morse Code as well. Always plan for additions. Semaphore is in my thinking as well.

Once again, Copilot, the AI in Visual Studio, has jumped in to help. Or to try to help. It was pretty helpful with some tedious coding. Specifically, with a couple of lines entered it figured out how I wanted to add images and what not to the individual flag objects I wanted to create. Hitting tab and return was pretty easy compared to typing whole lines in.

A = new Flag(Flag_Host.Resource1.alpha, "Alpha", "A", ".-");

I had already added the image files to the project of course. Copilot was not always so helpful though. I created a couple of additional forms for the project and wanted to pass the array for flags objects to the new forms. Copilot struggled to code that properly and there were several false starts.  I used to do that sort of thing regularly but it’s been a few years. I guess my memory isn’t what it used to be. I finally figured it out. Honestly, this should have been easy for Copilot and for me.

I have heard from a number of teachers about how Copilot is showing up in their classes. One teacher uses MonoGame and tells me that Copilot is so unreliable with MonoGame that his students turn it off. My suspicion is that there is not enough good MonoGame code loose on the internet to properly train Copilot.

That leads to a major concern I have about using AI for coding. It’s usability and reliability depends on the quality and quantity of the code used to train it. Programmers love to reinvent the wheel so there is a lot of code available for doing common things in coding. I would expect AI to handle most common data structures pretty well. Some things that are not as common may not have as much code to study. I wonder how well AI will handle new programming languages?

I also wonder how well AI will handle new and unique problems. Will the AI be dependent on very detailed prompts from user developers? I think that is likely. I also think that some person is going to have to do a lot of verification of said code. We are still going to need people who can read and write code.

In a related note, several times while writing this post, I have dipped into raw HTML because I didn’t like how the program I use, Windows Live Writer, was formatting the text.

Friday, October 31, 2025

Unexpected Help With Coding Projects

Fair warning, this is a post in two parts. First a project idea and second musings on the tools I used to create it.

I really do like to write code for fun. Nothing complicated (been there, done that, got the T-shirt - literally) but just little things to "scratch an itch" as they say.

Lately as I played Wordle I was wondering which letters appeared most in each place in the five letter words in my word list. A couple of nights ago, I wrote some code to find out. I had my code output a comma delimited file so I could use Excel to look at the results. That’s what the image to the side shows.

Now this sort of thing is highly dependent on the word list of course. But for my list, S is the most common letter in the first and fifth location. Not surprising as S is used to make plurals. Wordle doesn’t use plurals so I note that the second most common fifth letter is E with Y a close second.

The letter A is the most common second and third letter. The letter E is the most common fourth letter.

If I were ambitious, I could probably use this information to make a smarter Wordle solver. I’m not quite that ambitious though. I am toying with gathering some other statistics though.

I develop using Visual Studio – the full blown version. That means that Copilot jumps in to help. That’s not something I anticipated when I started but I confess that I found it surprisingly helpful. I did specifically ask Copilot to write one specific method – generate a string array of two character combinations – but it jumped in on its own with a couple of small bits of code. I was surprised at how well it anticipated what I wanted.

The implications for teaching programming are something to think about. On one hand it’s scary that AI tools can so easily write coding solutions to simple programming assignments. That turns our process of evaluating learning on its head a bit. At the same time, I am not ready to blindly trust AI generated code. I do not want students to blindly trust it either. So asking students to test generated code seems like a reasonable thing to assign. Yes, I suppose some students will ask AI to generate test cases but if we can’t trust AI to write the code in the first place we can’t trust the generated test cases.

We could ask students to explain the test and related tests. Could be quite a recursive rat hole.

We can also ask students to explain the generated code. We should probably ask them to do that either verbally or by writing manual in class so they can’t ask AI to do it for them.

What I keep coming back to in my own thinking is a focus on abstraction and top down design. Can we ask students to break the problem down to component parts and have them prompt the AI to implement various methods and code pieces. A focus on design rather than writing code. We could have students submit the design document and the various prompts that they use. Add to that some serious examination of testing and verification.

Students are going to have to work with artificial intelligence. They can’t let it do all the work for them because AI is not I enough yet. I don’t think it ever will be either.

Sunday, October 26, 2025

User Interfaces and Microwaves and Artificial Intelligence

It seems like just about everything has a user interface these days. It is sometimes hard for me to question them. What sort of decisions go into their design? Microwaves are one such thing that I keep thinking about. My current microwave defaults to pushing a number button running that many minutes. That’s great when you want it to run in whole numbers of minutes. What about fractions of minutes?

For fractions of minutes there is a button that is pressed first to let the microwave know you want to enter the number of seconds. So far so good. It can get complicated though if you don’t have the default whole minutes option.

My previous microwave did not default to whole minutes. If you enter 100 is that one hundred seconds or 100% of a minute? i.e 60 seconds? How is the decision made on something like that? What is intuitive to the user? Actually, I don’t know what my current microwave would do if I asked to seconds and entered 100. I think it would do 100 seconds as 90 does run for a minute and a half. I should try it I suppose.

It’s a computer related question of course because there is a little microprocessor in there somewhere and someone has had to program answers to these questions. I wonder how artificial intelligence would make UI decisions about things like this. It largely depends on the instructions or prompts given to the AI. People are going to have to have some input there. Right?

Will AIs have access to research on things like that? Will they be able to design and run human factors research? Will they think research is necessary or even desirable or just assume they know what is best for us?

Thursday, September 04, 2025

An Interesting School Year in Computer Science Education

Mike Zamansky is Looking at the start of school for 2025 on his blog C’est la Z He’s thinking about phone bans and AI in schools. I have been thinking about both of those as well. I spent some time recently with the teacher who is now teaching in my old computer lab. He’s also a former student of mine. We had a great conversation.

We talked a little about the cell phone ban in schools that was passed into law in New Hampshire among other places over the summer. It is not clear how it will be enforced and what sorts of consequences will be in place for violations.  For a while, I taught with AppInventor which meant that phones were an active and essential part of the class. I wonder what these bans will mean for all the many teachers and students using AppInventor and similar tools.

Phones were a distraction but teaching in a computer lab with computers in front of every students means the Internet is still going to be a distraction. Classroom management is hard enough without computers and cell phones.

Artificial Intelligence is going to be even more interesting this year. How much to allow? How to check for its use? What to teach about it? All interesting questions that teachers and schools will struggle with this year.

My son, a school administrator, find AI tools very useful. So do many others both in and out of education. Clearly, students need to be taught about AI. That debate is, I hope, over, What and how to teach it are still largely to be determined.

Students are going to use AI to write code for them. It would be foolish to deny that. They still need to understand the code that AI is writing for them. Talking to my teacher friend I used the example of HTML. I write these blog posts using Open Live Writer which builds the HTML that gets posted. It does a great job but I still find myself jumping into the HTML to do some fine toning. In this post, for example. I went into HTML to edit the text for the link to Mike’s blog. A small example but knowing what to do saved me a small amount of time.

To be honest though, students using AI to write their code is not my most serious concern. Ethical concerns around AI use is my biggest concern. There are all sorts of issues around copyright for example. The use of books and art to train AIs to create without giving credit to original creators is an important discussion topic. Taking credit for AI output is another. I want students to think about these sorts of things. There is a lot more and more issues will be showing up.The old question is not so much what can we do but what should be do.

So, yes, we want to teach students how to prompt AI. We want them to be able to evaluate to AI product as well. There is a real risk of AI having a negative effect on people actually thinking. Teachers need to find ways to encourage students to think about what AI is, how it can be used, and most importantly how it should be used.

This year is going to be an important one in the future of AI in education.

Sunday, August 24, 2025

Tiny Book of Simple Cryptography

For the last several years, I have been playing around with simple cryptography. I have made some of results of this available as a free PDF download as a book I call Tiny Book of Simple Cryptography. (TinyCrypto.pdf) I recently put some additional work into it and the latest version is available at the link above.

There are currently a baker’s dozen cryptographic methods described in the book. (List at the bottom of this post) Each write up includes a section on:

  • Introduction
  • Encrypting
  • Decrypting
  • Cryptography Issues
  • Project Suggestions

If a PDF is not to your liking and you would like an actual book, I have created a book you can order through Amazon.com. Maybe for a classroom or school library? Or maybe because you find books easier to browse through. It’s there. There is also a Kindle version available here.

 

Methods covered

  • Caesar Cipher
  • Vigenère cipher
  • Wheel Cipher
  • One Time Pad
  • Polybius Square
  • PigPen Cipher
  • Columnar Transposition Cipher
  • Keyword Columnar Transposition Cipher
  • Random Block Transposition Cipher
  • Steganography
  • Bacon’s Cipher
  • Book Ciphers
  • Playfair cipher

Friday, August 15, 2025

Has Computer Science Education Become Too Vocational?

That’s the question Mark Guzdial asked in a recent post on the CS Education Facebook group. He references an article (Labor Market Outcomes of College Graduates by Major) that shows the unemployment rate for computer science graduates is twice that of philosophy majors. Now there is a lot to unpack in those numbers. The employment market for CS majors is complicated to say the least.

There is the perceived higher cost of American employees, H1B Visas, the hype over artificial intelligence, and more. It may be that the vocational focus in CS education is a big part of the problem though. It may be that CS education has become so narrow that the only job path for to many CS majors is software development..

As my friend Neil Plotnick points out in a recent YouTube short “Computer work is not just programming or web design” but that is a lot of the focus in much of CS education. Especially in K-12

So what do CS educators need to work on teaching their majors? I think that Ed Lazowska had some good ideas in a recent interview. (After 48 years at UW, Ed Lazowska reflects on computer science, education, AI, and what’s next) Key quote:

“Design is not dead, working in teams is not dead, figuring out what problems need to be solved — and what the right approach is to tackling those problems — is not dead, and understanding how humans are going to use and be influenced by digital technology is not dead.”

I will be attending my 50th university reunion in October. Back then there were few computer science majors. We did not have a CS major where I went to school. We did have a major in Systems. Yes, there was a lot of computer science as part of the program but there was a lot more. We learned about the people part of systems including how organizations work, how they use math and computer science, and what sort of impact computers were already having. Frankly, it was those other courses that helped me have as eclectic a career as I wound up having.

I was prepared for a lot of jobs in a lot of different types of companies. Yes, I spent a lot of time developing software, especially in my early career, but it was understanding systems of which software was only a part that make me a good hire. It was knowing how to work as part of a team, to figure out what the problems were, and how to design solutions with the system in mind.

Those are not necessarily easy things to teach and they may be easier to teach at the university level than in the K-12 level. That being said, if we are serious about the idea that CS education is not just vocational and that CS is not just programming we have to made an effort.

We can start with more group projects. [I can hear some of your groaning] Not the easiest projects to create or grade but necessary. We can start by requiring design before coding begins. We can start by having students actually think, talk, and even write about the impacts of technology in society.

We also have to support the liberal arts. We require a lot of subjects that are not CS in K-12 and that is great. We also need to help students see the value in those courses at the college and university level. Well rounded people have more job opportunities than narrow focused people. They are also better problem solvers, better designers, and more interesting to be around. We need good people not just good computer scientists.

Thursday, August 14, 2025

Reading Code For Fun and Learning

For some time I have been writing up information about some historic, and simple compared to modern, cryptonymic algorithms. They are collected in book form (a PDF actually – new release coming soon) that I have made available on my website. One algorithm that I have struggled with has been the Playfair Cipher. I don’t know why but for some reason I’ve had trouble with the algorithm. Mostly, I have struggled with how to code it up. Recently, I decided that I should work on that.

First step was to use something called Notebook LM. More on that in a future post. It’s pretty amazing. In any case, that tool helped me find a coded implementation of the Playfair Cipher. Great! Maybe I can learn from that. It turns out that I can.

The code was in Python and I am not very experienced with Python. Still with well over a dozen languages under my belt, figuring out the code was not hard. After reading the code I feel like I have a better handle on things.

I also learned more than I expected about how Python does things. So double the win. I do believe that reading code is a great way to better understand a programming language. It’s especially valuable if it helps you learn the idiom of the language.

So I now had a console application that worked and that I could play with. Now to me, a console application is so late 20th century that my next step was to convert to C# so I could use Windows Forms. Since I was already using “artificial intelligence” (that’s in quotes because I don’t completely buy that these tools are actually intelligent.) I asked Copilot to convert the Python code into C#. It did so quickly and easily. It wasn’t the way I am used to doing things though. Maybe that is why I was struggling with my own code? It’s a possibility.

The old joke is/was that a good FORTRAN programmer can write a good FORTRAN program in any programming language. Apparently, Copilot can write a good Python program in C#. Yes, the code looked a lot more like the Python code than I had expected. More than I really wanted as well. But along the way I learned that C# could do some things in some ways that I didn’t realize. There have been a lot of changes and updates in the language and I have clearly not kept up with all of them. Well, more learning is a good thing I guess.

Once I had the converted code I built a nice Windows application and have had some fun with it.

I am toying with messing with the C# code to make it look more like what I am comfortable with but that may not be the best use of my time. I might be better off experimenting with the new (to me) features of the language. Either way, learning is a good thing.