Saturday, March 07, 2020

Moving CS Education Online

Covid-19 is motivating schools all over the world to close. Many other schools are looking at options in case they have to close their facilities. My own school has been looking at options to try to continue teaching in the event the government askes us to close. This is far from a trivial decision. Sure there is a lot of online education going on. There are MOOCs and virtual schools and other on line options already. Moving an existing  program online in the middle of a semester is not the same as starting off online.

Doug Peterson took a good look at a lot of the issues on a blog post at It's not that simple. And there are plenty of things to consider. For one thing do all your students have broadband internet and a computer that can support the needs? And can the school’s networking infrastructure support all of the people accessing the system.

Beyond the problems common to all teaching there are problems particular to specific subjects. I don’t know how teachers will run art classes or physical education classes for example. Personally,, I’ve been thinking about how to teach computer science.

Lectures appear to be easy. Even demos are not bad. My school is looking at using Google Meet and that seems like it should work. Others have been suggesting Zoom which has both free and paid options. Paid looks like it would be required for most schools.  Microsoft is making Teams available to schools who need to close for free. I’ve recorded many of my presentations (PowerPoint is great for that) so I can use them as well. But lecture is a small part of my teaching.

My AP CS Principals course used code.org curriculum which is all online already. So that is fairly easy though a lot of the pair work will be harder without students being in the same room. I suspect that they can do some coordination via texts messages and other apps that teens are already using for peer to peer communication. Lynn Langit has written a fairly detailed blog post (Remote Pair Programming) on how she works with interns she is mentoring online. Looks interesting.

One option that I have played with a bit is  Live Share which is available with VSCode and Visual Studio. This would allow pair programming of a sort. It would allow me to look at student code and make suggestions. It’s not going to be as seamless as moving from student to student in the classroom though.

While the software is free making sure students have appropriate computers. VS Code runs on Mac and Linux as well as Windows so that’s good. I’ve been using Visual Studio though so getting students up to speed on VS Code will take some work. I can see some support issues coming up if the switch is made without serious preparation.

Everything is possible but a switch mid semester looks to be rough.  I hope it doesn’t come to that.

Tuesday, February 18, 2020

Working Through the Stages of Debugging

I found this Tweet by Katerina Borodina @ctrlshifti that claimed that the 5 stages of grief apply perfectly to debugging code

  1. Denial "The compiler is wrong" 
  2. Anger "Why the hell isn't it working?"
  3. Bargaining "If I use enough print statements I'll figure this out"
  4. Depression "I will never fix this bug"
  5. Acceptance "It's a feature"

We see students going through these stages al the time. Well, actually what we often see is them not making it all the way through. As teachers we need to help them through. Learning to deal with debugging is an important, if under acknowledged, part of the job.

Denial is where many students start to ask for help. After all if the compiler is wrong there is nothing they can do to fix it is there? Sometimes this is expressed as “my code is the same as [yours/theirs] but mine doesn’t work.” Of course the code is never the same but the student is not looking closely enough. At this point a teacher has to decide if they should point out the error or ask the student to keep looking. Or ask them to have another student look at it. We need to find that balance between promoting self sufficiency and letting frustration build up to far.

If we’re lucky they move on to anger. Yes, anger is not always bad. It can be motivating. We do have to keep an eye on it though and at some point help with some debugging suggestions so that they keep trying.

Bargaining is when a lot of learning goes on. We can show them how to use breakpoints in the IDE, make suggestions at where to look, and so on. Bargaining in this case is where the real effort comes into play.

Depression is where I think a teacher really needs to step in. In fact this is the point where I think automatized hint systems will never replace teachers. Students need encouragement. They need to know that they are not stupid and that many others have the same issues. They need to know that they just need practice and perhaps a bit more knowledge. And they need to know that they are not alone.

Deciding that it is a feature may, in rare occasions, be acceptable though it really is more of a standing joke than reality. I see acceptance as understanding that sometimes we all need help and that is ok. Helping students accept that programming can be a “team sport” is an important lesson. Getting the bug fixed is very satisfying. That leads to self acceptance which is where we really want our students to get.

Tuesday, February 11, 2020

Are Large Classes The Answer To a Computer Science Teacher Shortage?

Another teacher reported on Facebook that they were going teach AP CS Principles and that this was the first time they are teaching computer science and their students have no earlier CS class. I wanted to scream. Or cry. Or something. It’s happening a lot these days as we, those of us in the CS for All camp, continue to promote the need for more CS in schools. The shortage of qualified teachers in computer science is real. Catching up with demand is going to take a while.

But, hey, universities are running into the same problem. Can we learn from them? So far most universities seem to be coping by creating larger and larger classes. Listen (or read the transcripts) from interviews on the CS Ed Podcast (highly recommended) and learn about university CS classes with hundreds and even thousands of students. Whoa! And you thought 35 was bad.

Now my first hand experience with large classes is 48 years old when I took a one month intense world history course as an undergraduate. I credit reading the 1,200 page textbook twice with my A more than the lectures. While that seemed to work for me it was history and not computer science. I don’t think it would work for CS.

Now I believe that there are TAs and lab assistants who help university students outside of class but is this really a good way to teach computer science? I’m not so sure it is but even if it does work in university would it work in high school or middle school? I really doubt that. Our students are not quite that mature. And we’ll never get TAs and out of class lab time.

Amy Ko, University of Washington, expresses some concern about this scaling at the university level in a post called The false dichotomy of teaching and research. University administrators are interested in reducing costs and increasing tuition revenue so they probably like the large classes. And MOOCs.

I wonder what the difference is between a class of 2,000 students in a huge lecture hall is from a MOOC with 2,000 online students? I suspect not much beyond, perhaps, lab assistants and TAs in a campus computer lab. Seems like a lot of extra internal motivation is required in either case. I see a shortage of that in high school students especially in non-major courses.

So tl;dr I don’t think large classes or MOOCs are the answer. We really need to be preparing more teachers. And there are no shortcuts.

Tuesday, February 04, 2020

Iowa Caucus 2020–What Happens When Software Doesn’t Work?

It’s too early to tell exactly what went wrong with the Iowa caucus this year but I suspect it will wind up being a case study in several ways. Political Science will look at it for sure. So, I believe, will computer science and software engineering people. We’re hearing complaints that the app, used for collecting the results, didn’t work. As is often the case early on we don’t know exactly what “doesn’t work” means or where the fault lies.

The Iowa Democratic Committee made the counting more complicated for one thing. That may have driven the need or assumption of need for an app. Was that complexity part of the problem? It could be. If the app wasn’t intuitive (cue to HCI people) or the users were not trained well enough than complexity could be a problem.

Was the app itself faulty? Were the communications protocols not robust enough?  Was it the servers on the backend? Little about that is public yet. I guess we’ll find out eventually.

Eventually there will be results as there is a paper trail for all of the voting. Or so we are told. The biggest problem long term is trust. Trust in the Iowa Democrats to run a solid caucus process. Trust in the company who wrote the app to do a good job. And maybe even damage to trust in apps for reporting election results as a concept.

While some are content to make fun of the Iowa Democrats others are crying about conspiracy and about manipulating the vote. The political science people will have a field day with that I suspect. I tend to suspect incompetency over malice. Malice is hard to do in secret.

For us teaching computer science I think the lesson we need to take and to share is that there are big stakes in developing software. The consequences of the software working correctly are big but the consequences of the software not working can be even bigger. And harder to predict.

Monday, February 03, 2020

Check Out The CS Ed Podcast

I first heard about the CS Ed Podcast back when I wrote on debugging. Amy Ko of the university of Washington talked about teaching debugging in a recent interview. I listened to that interview, which I recommend, but did not take the time to dig into previous podcasts. Earlier today I read a post by Mark Guzdial which brought this resource back to my attention.

Welcome to The CS-Ed podcast, hosted by Dr. Kristin Stephens-Martinez at Duke University. This is a podcast where we talk about teaching computer science, with computer science educators, to learn how they teach and manage their classrooms. Find all of our episodes here, along with transcripts and helpful links!

So far there are four podcasts

I haven't been through all of these yet. So far just the Amy Ko and Dan Garcia ones. I read the transcripts for the most part and really appreciate that I can choose between reading and listening. Those of you who listen to podcasts may have a different preference. But I agree with Mark Guzdial's recommendation that these are valuable resources for anyone teaching computer science.

Friday, January 24, 2020

The System Knows Who You Are

True confession – give me an app that plays with interesting and personal data and I’ll play for a while. The amount of data available to us today is astounding and computer programming lets us do some really amazing things. Big data is all the rage. The US Social Security Administration has lots of data and it’s all more or less personal. So I guess is it not surprising that people do interesting things with it. For example, Guessing Names Based on What They Start With

It had some trouble with my name because even in the decade I was born in my name was not that common. As I added letters it was able to get it – not that surprising. Although for the decade my grandson was born it never did get it – Alfredo is a lot more common than Alfred. A sign of changing demographics which makes for an interesting topic of its own.

I’ve toyed with the idea of making this into a project for my students but I’m not sure I have the time. Basically because I would probably want to aggregate the raw data myself first and while I could write some code to do that I am not sure I want to. It still makes an interesting demo and I will probably use it that way when we talk about big data in my AP CS It’s a good example of how a system can make some assumptions based on limited information.

We like to think that we are pretty unique and in fact we really are. The fact that this name app can identify us is not really contrary to that. Yes, we have similarities with many people but we also have differences. This app made me think of an app I had students program a couple of times that uses demographic information from the school’s student information system (anonymized). I wrote about that a couple of years ago at Programming Projects Should Be Personal

That project took sex, birthday and zip code information to report on how many individuals in the school had that birthday and lived in that zip code? Could we combine the age guess and the name guess code to identify which student we were looking at? Maybe. Is that good or bad? Maybe. I can see this being a good discussion topic.

Increasingly companies collect more and more personal data about us. And they share this data with other companies. These app give a clue as to how identifiable we are even when we think we are not identifiable. It’s only going to get – is it getting better or worse? A lot depends on how it is used. Students need to understand the possibilities if they are going to understand the world around them. Let’s talk about it with them.

Thursday, January 23, 2020

Should We Use the Technology in the Classroom?

I confess that I would love some augmented reality device that showed me the name of the student I was looking at. I am horrible with names. I like to think that something like this would help me a) learn student names faster and b) establish better connections earlier. On the other hand there is some technology that I worry would hurt relationships more than help them.

For example, an AI and cameras that would tell a teacher who was and was not paying attention. Are Your Students Bored? This AI Could Tell You I can see where having an indication of where you start losing student attention could be helpful. On the other hand, maybe as a teacher I should be paying attention to the people in front of me. That is not impossible in a small classroom like a normal high school room. Maybe it is a lot in a large lecture room but that is an example of not building connections in the first place.

Or tracking students using their phones? Colleges are turning students’ phones into surveillance machines, tracking the locations of hundreds of thousands Sure I hate taking attendance and having the computer do it is tempting. Is that really the sort of intrusion that we want to get students used to though? I’m not so sure it is.

As with so much of technology, the question is one of balance. Do the down sides overshadow the up sides or not? This is not an easy question and I think wide open to debate. As technology grows our students are going to have to decide more of them as time goes along. The question is not “can we do it” but “should we do it?” Making those decisions requires understanding of the technology for sure. It also requires a solid ethical foundation and a willingness to question and discuss. Are these “soft skills?” Perhaps but they are becoming more essential rather than less.

Wednesday, January 22, 2020

Thinking and Teaching about Technology Policy Issues

What are the top technology issues for the 2020s? Brad Smith, Microsoft President, wrote an interesting post about a month ago called Dawn of a Decade: The Top Ten Tech Policy Issues for the 2020s

His list is:

  1. Sustainability - Tech’s role in the race to address climate change

  2. Defending Democracy - International threats and internal challenges

  3. Journalism - Technology needs to give the news business a boost

  4. Privacy in an AI Era - From the second wave to the third

  5. Data and National Sovereignty - Economics meet geopolitics

  6. Digital Safety - The need to constantly battle evolving threats

  7. Internet Inequality - A world of haves and have-nots

  8. A Tech Cold War - Will we see a digital iron curtain down the Pacific?

  9. Ethics for Artificial Intelligence - Humanity needs to govern machines

  10. Jobs and Income Inequality in an AI Economy - How will the world manage a disruptive decade?

I see a lot to agree with and a lot that requires some serious and deep thought. I wonder, for example,  how to square the concerns in 2, 4,8, and 9 with Microsoft’s businesses in China. It’s a topic well worth discussing.

OF course any of these issues, alone or in conjunction with others, are great topics for discussion in a class. Artificial Intelligence factors in with many, maybe most, of these issues. Are we preparing students for thinking about the reality of a world with AI is a major force in technology and eventually our daily lives?

Any way, I recommend the post.  It is long but worth the read. Maybe read it more than once. I plan to.

Monday, January 13, 2020

Having Fun With Computer Science

There is no question that there are a lot of ways to have fun with computer science. Some of them are inexpensive. Some of them cost a lot of money. You can do a lot for a little bit of money. But some interesting things cost more money for computer hardware (especially graphics cards and CPUs), for special software (not everyone offers free versions for schools) or special hardware (A Micro:Bit is pretty inexpensive but an Oculus Quest is serious money).

So what is a teacher to do? Well, there are grants out these. Often very competitive though. There is Donors Choose which is not an option if you are at a private school with a budget that makes public schools look rich. There is teacher spending their own money. Or there is just offering what your school can afford even is that is old hardware and free software.

Now you can do a lot on the cheap. No question. But what I wonder about, as with many things CS education related, is access. Who gets access to the state of the art, bleeding edge stuff and who gets to see “where we were 10 years ago?”

Who gets to program virtual reality stuff and who gets to program the next Pong? When we look at costs for computer science we tend to think mostly about teacher costs or finding room in the building or the schedule. Computers come next but someone who spends their who life on their phone or a web browser may not appreciate why students need a computer with a lot of memory, a fast CPU, and a late model graphics card. Maybe when today’s students become school administrators or school board members that will change but right now getting more money for hardware can be a tough sell.

We’re used to vocational students needing state of the art resources. Computers for reading diagnostics for the automotive students. The latest silkscreen equipment for the graphic artists. The latest medical learning tools (have you see the CPR training dummies lately?) for the medical prep students. But somehow we don’t always see the need for the latest for computer science students. Especially in comprehensive high schools. Some serious CS students might be better off in a career/technical high school for CS. Seriously, some of them are really good at getting the latest stuff for learning CS.

Which brings me back to access. CS is more than vocational. A lot more. How do we show students the real potential if they only have access to what is cheap?

Note: This post inspired in part by Garth Flint’s blog post (Computer Science on the Cheap does not always work), a comment on that post, and things David Renton is doing with his students and Virtual Reality.

Friday, January 10, 2020

How Do Teachers Without CS Experience Debug Student Code

My Programming Honors students are wrapping up their semester projects today. Actually they should all have been handed in by now but I’ll give them until the end of the day. In any case, my students have come up with some interesting and difficult to solve bugs. One involved a png file that had an unexpected transparent  section. The other was more confusing and I’m not sure I could have solved it without a good bit of CS knowledge. Even then it was not obvious. (Long story short – passing addresses can be tricky )

I wonder how less experienced teachers handle the really hard debugging tasks. I’ve been writing code since 1972 and teaching beginners for about 15 years. I have seem a lot of errors. A LOT! Often I can debug code without even looking at it. Some errors are that common. And of course I have developed a lot of ideas about debugging. The debugger in Visual Studio is very familiar to me as is how to use it to narrow things down. Students are very good at finding new ways to mess things up though.

I saw a Facebook post from a teacher who has been assigned to teach AP CS A but who has no coding or CS experience. No, really, I’m not making this up. How in the world will they be able to help debug code? And forget about teaching/modeling debugging practices.

Over the years I have had a number of teachers ask me to help with debugging student code. I saw a very interesting recursion problem once. Doing a stack trace was key to that one.

Debugging may be the single biggest reason to say that one week crash courses are not enough for professional development of new CS teachers. A full semester course would be a good start but without experience a new teacher is going to be just barely staying ahead of their students.

But how to you teach debugging? Have you ever had a course or even just a class on debugging? I haven’t.  How would such a course run? Anyone know of a syllabus for a course like that?  I’ll have to think about that one. In the long run though they is no substitute for experience.

Tuesday, January 07, 2020

What does “doesn’t work” mean?

Every computer science teacher has heard it “My program doesn’t work. What is wrong with it?” Sometimes they will show you the code without any more explanation than “it doesn’t work.”  One generally replies with something like “define ‘doesn’t work.’” Or you are told the program is giving an error. When you ask “what error?” you get a blank stare. The student has shut the error message away without reading it. Somehow you, the teacher, are supposed to know the answer without really knowing the question.

Debugging seems to be the hardest thing to teach students. To be fair, debugging is hard. One quote on my bulletin board is:

“Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.”

- Brian Kernighan

There are a few good, and easy, places to start though. One of them is actually reading the error message. For some reason that doesn’t seem to occur to many students. Of course they often don’t read the directions either so I probably shouldn’t be surprised.

Giving some serious thought to the error message is often enough. To be fair, I like to be fair, some error messages are less than helpful. Helping students to understand the error message is better in the long term than just telling the student what they did wrong. Why do you think the computer doesn’t think that variable exists? Did you spell it right? Did you declare it in the wrong place? Remember when we talked about scope?

Another helpful technique is to explain what the program is supposed to do, how it is going wrong, and how you think the code is executing. Many teachers use the rubber duck scheme and ask students to explain all of this to the duck. This works for some people and some errors. I don’t have a classroom set of ducks but do have students explain that to peers. Sometimes that is enough. Sometimes it is not.

When they explain things to me I often prompt with questions. Often students are wrong in their explanations. I remember one student telling me that of course the code did something because here it was in the comments. There was no code to execute what the comment described but the student thought the compiler actually read the comments. Sigh.

In all cases it starts with knowing what should be happening and what is or is not happening. The more detailed one can explain that the easier debugging becomes.

Thursday, January 02, 2020

A Brief Career Memoir

Blame Mike Zamansky for this one. In my last post I mentioned that I am planning on retiring from the classroom this spring. Mike wondered how my perspectives have changed over the years and through different aspects of my career. Now my career (so far) has four main parts. I worked in the computer industry, mostly developing software, for about 18 years. After a big layoff I went into teaching for about 9 years. Microsoft hired me away to work with educators. My job was to promote Microsoft products for teaching computer science. I spent 9 years there. Seven of them awesome. Management and priorities changed and I found myself leaving Microsoft and after a brief hiatus returning to the classroom seven years ago. It’s been a ride for sure.

During my first 18 years I didn’t see computer science as something for everyone. Education was important and I was involved. I was on the board of a private Catholic K-8 school for 6 years. I was twice elected to 3 year terms on the local public school system’s budget committee. I mostly saw computers and something students needed to be literate in. That meant applications. I believed, and still do, that computer applications can be powerful learning and teaching tools. I saw computer science mostly as vocational. It was, after all, my vocation.

After a layoff, the school I had been on the school board for hired me “while I thought about what I wanted to do” as a part time computer teacher. For the most part, in K-8, that meant typing and computer literacy. I picked up another part time role at a K-6 school and worked at those two schools for a year. My son was in a private Catholic high school and one night at parent teacher conferences I had a long talk with their computer science teacher. I started teaching there the next school year. I stayed for eight really goods year.

I was hired to teach HS CS in 1995 and it was rare for a high school to have one computer science teacher let alone two. But the administration believed that computers and computing was important. It was important to parents as well and we developed a good program. We still taught a lot of computer literacy and applications use but we were having some fun teaching real computer science as well. I still saw it mostly as an elective though.

We moved from a mini-computer (PDP-11 running RSTS/e) to PCs during my first few years there. I posted about many of the changes were were making to curriculum and tools to social media (mostly email lists of course) and caught the eye of someone at Microsoft. We were using Visual Basic for programming and Office for applications. This lead to some side gigs with Microsoft as I helped other teachers learn about teaching CS with Microsoft tools. I got a lot of training and previews of software during that time. Microsoft was developing the .NET Platform and the C# language both of which I adopted for my own use. In my eyes, C# fixed the things I didn’t like about Java.

Microsoft was forming a new group of what they called Academic Developer Evangelists whos job was to promote Microsoft platforms and tools to university professors.  Eventually they hired me on. Note that I joined Microsoft because I believed that Microsoft tools were good teaching tools.  My combination of technical knowledge and education experience was a natural fit for one of these rolls. Over time I expanded my portfolio from New England Universities (I joked that my territory was from Dartmouth to Yale) into high schools.

Computer science was growing in high schools and I really wanted to help make that happen. In my role at Microsoft I was able to give away a lot of software and help create free curriculum resources. I also met with teachers all over the country. The big lesson that I tried to bring back to corporate was that teachers wanted to teach concepts not tools. Curriculum had to be content and concept based not product based.  Sure you need to know the tools and I did a lot of workshops on using them. Using the tools to teach concepts was more important to me, and still is, than the tools themselves. I like to think that the resources we created and gave away were help in teaching more than the tools themselves.

During this time people were starting to talk about computer science as being more than vocational. Not so much at companies but by educators. Microsoft saw computer science as the environment that they lived and did business in. They saw promoting computer science education as not to provide them with more workers, they could get all they wanted, but to help their customers and prospective customers get trained people for their businesses. Still pretty vocational of course.

Others, ACM and the fledgling CSTA were starting to promote CS education as being more about understanding the world around them. I really wanted to be involved in CSTA and I was. I was lucky enough to serve on the conference committee for a couple of years. I have no doubt that my being at Microsoft was at least responsible for that but I didn’t care. I was involved. The conference was and is important.

When I left Microsoft I ran for and was elected to the CSTA Board. That was awesome!

Microsoft moved on in priorities but happily  they gave a lot of support to Kevin Wang and the TEALS program he created. My perception is that Microsoft’s support for K12 CS has moved from product based to supporting CS education more broadly. MS Philanthropies made a huge contribution to CSTA not long ago. I still wish they had someone in my old role but that’s life.

But I digress. 

Leaving Microsoft  and returning to the classroom was interesting. Over the previous years I had met, talked to, learned from, and made friends with CS educators all over the US. I was anxious to bring what I had learned from them into my own classroom.  I was also starting to see the need to computer science to move from the vocational to the core of a good liberal arts education. My years at Microsoft had let me see how teachers were doing more cross curricula learning. Bootstrap, perhaps being the best example – learning math and programming/computer science as mutually supportive. Emmanuel Schanzer is one of my heroes for his work at Bootstrap. So how do we make computer science relevant for everyone? And how do we get schools to make the learning happen?

Over the last decade I have been privileged to work on a couple of curriculum initiatives. The ACM/IEEE CS 2013 Task force which gave me great insights into higher education curriculum and the broad field that Computer Science has become. The  K12 Computer Science Framework which really opened my eyes to the possibilities of computer science before high school. I was also a part of committees who put together CS Teacher certification and K-12 standards for the state of New Hampshire.

It’s been a journey but I see computer science as a lot more than a vocational track in schools. With things like artificial intelligence, Machine Learning , virtual and augmented realty, big data, cloud computing, and the Internet of Things growing in importance in our daily lives I see understanding CS as being as important as understanding some basic physics, chemistry, biology, and yes, even math.

Wednesday, January 01, 2020

A 2020 Vision

Sorry. You may be as tired of the 2020 jokes and puns about the new year as I am. I’ll try to avoid them in the future. This is the time of year I look at the last year and think about what I should try to do in the new year. This year is a bit different. I am planning on retiring from the classroom in the spring. I’m not sure exactly how I will be filling my time after that. Part of me wants to find some other type of job. At the least I want to stay current with computer science education and help teachers and student where, when, and how I can. So this blog will continue.

I’m also presenting at this summer’s CSTA Annual Conference. I’m looking forward to that. The conference itself as well as my presentation. Looking at the program, I think I will be looking at different sessions than in the past though. Usually I would focus on sessions that have the most applicability to the courses I would be teaching in the next school year. This time it will be all about my personal interests without concern about specific courses. I have to keep learning.

Monday I go back to school. One more semester of teaching. I’m going to do my best to make it the best year yet. After that? Well, a lot of possibilities. Should be fun.  

Monday, December 30, 2019

Looking Back on Blogging

Both Doug Peterson (https://dougpete.wordpress.com/2019/12/30/10-years-ago-2/) and Mike Zamansky (https://cestlaz.github.io/post/10-years-blogging/) posted to their blogs about blogs from ten years ago. It was pretty interesting. Mike did some analysis of his blogging rates over the months and years. I took a look at my blog posts from ten years ago. I was posting on two sites back then. One a Microsoft owned platform which was my main blogging site at the time. I was cross posting some things to this site as well. Ten years ago this time of year I was posting about projects involving random variables, talking about Monte Carlo simulations, and roulette and slot machines.

Rather than look at ten years ago or do some sort of data analysis of the last ten years (complicated by two blogging sites) I thought I would look at this time as far back as I could. So 14 years ago at the MSDN site I posted a rather aspirational look at The Future of K-12 Blogging I wasn’t even close in terms of prediction.

I think more teachers and administrators are blogging. We’re not seeing anything like the expansion of computer science teacher blogs I was hoping for. I like to think I made a good case for it and that it is still a good case.


Every computer science teacher should have a regularly updated blog. Actually I would like to see every teacher have a blog but for the short term I will settle for computer science teachers blogging. There are several reasons for this.

  1. We need to build a community of practice in CS education. We need computer science teachers, who are generally alone in their building, communicating with their peers, sharing ideas, and supporting each other.
  2. The technology aware teachers need to set an example for the rest of the teachers. If they don’t use technology why should a social studies teacher?
  3. Most importantly, blogging is a wonderful way to share information with your students and their parents. Post links to extra resources along with a recap of a recent lecture. Give students an opportunity to comment on a current assignment or a recent test question. Expand the discussion and the learning outside the bell delimitated world of the classroom. Teach!

I'm really grateful to the CS educators who are blogging though. Mike Zamansky, Garth Flint, Doug Bergman, and Mark Guzdial have been particularly helpful to me learning and thinking. There are others listed at my Computer Science Education blog roll.

Friday, December 27, 2019

Looking Back on Computer Science Education 2019

Christmas break for me until 6 January 2020 and with Christmas over I have some time to think. 2019 was an intere3sting year in CS education. States continue to adopt more CS in K12. Teachers are still in short supply but so to are schools looking to hire them. Schools or perhaps school administrations and school boards, are slow to roll out more CS education. It looks like more schools are offering it which is great. But they are net requiring it so while they meet to checklist of offering CS it is still not for everyone. It’s going to take a while.

AP CS Principles continues to grow in enrollment. I try to get excited about that but it’s hard. AP courses attract too small a subset of the over all population. While there is much to like about AP CS Principles I can’t help but believe we need some more interesting CS courses. Something with depth and an interesting and motivating outcome. The Create task is not that.

Every year I think that the Internet of Things will take off in CS education. The mix of bytes and atoms seems like a natural to me. That didn’t happen in 2019. Perhaps because there is no one promoting it.  I plan on retiring from the classroom in the spring. Maybe after that I will have to time to really dig into it. Who knows, maybe I’ll come up with some good project ideas.

Cloud computing grew a bit in interest in 2019. Amazon Web Services has done some great work on this. Uptake has been slow but at some point it may take off. The problem with cloud computing, and perhaps IoT, is fitting it into the curriculum. It doesn’t fit easily in either AP CS course and too many teachers are working and teaching too many preps to adopt major new topics.

Artificial Intelligence took a jump in interest that surprised me a bit. There was a huge birds of a feature on the topic at last summer’s CSTA conference. AI for K12 has its own website, mailing list, and lots of people interested. See AI4K12.org for more on that.

What sort of Artificial Intelligence can you teach in K-12? Mostly how it is used, how to use existing AI tool and machine learning training systems. Developing real AI takes a lot of math that not many K-12 students have yet. Still, it is very important that students learn this much. The need to know what AI/ML is, how it is used, and discuss the ethnical considerations involved.

As always,the new year is full of potential. K12 CS is on a growing path that seems to have some momentum behind it.  I can’t wait to see what it brings.

Thursday, December 12, 2019

Explain This Confusing Code

My major task today has been finishing off the semester exam for my Advanced Placement Computer Science Principles students. They’re not happy about having an exam but that’s life. Writing a good exam is difficult. Fortunately I have some previous exams to work with. Some I wrote, some other AP CS P teachers wrote. I’m getting close to done. I want to have AP exam style questions to help my students prepare for the actual AP exam in the spring but of course the main purpose is to put a grade in the grade book. OK I’m half kidding. I seriously want to get a handle on what information they have learned and what I should review before we move on.

Coincidently someone posted a question for the AP CS A question bank on Facebook asking for help with explaining it.

How does this evaluate for Java: x / 10 % 2 ?

This is exactly the sort of question that had one of my APCS A students some years ago say there were a lot of examples of poor coding practice in the AP Exam. And this, in my opinion, is a terrible coding practice. I can understand why the question may be attractive to some. The whole order of operations thing. Students should understand it. But good coding practice is to avoid ambiguity and this code is loaded with ambiguity.

Is this integer division? 10 looks like an integer to me. Making it 10.0 would make it look like a floating point number of course. How do you make “x” look like a specific data type? This is not FORTRAN IV where it would be a double since it doesn’t start with a letter from “i” through “n.” And remembering the order of precedence between modulus and division? Who has room in their brain for that to be top of mind?

This makes a great discussion question. A great question to emphasis the need to use parentheses to remove ambiguity. There is no way it would pass code review in a professional development environment though. At least not a review I want to be part of.

Well, I should go finish writing my test and trying to avoid writing horrible questions.

Monday, December 09, 2019

Coding Without a Net

My Programming Honors students are struggling with creating classes in C#. They really wanted me to code up a project live (again) and have them follow along. But I’ve used my usual examples and samples and projects already. First message is that I need more but I had to come up with one for today. And I had writers block. About a half hour before class, with a bit of panic setting in, the other computer teacher suggested a reindeer class. For Santa’s sled. For data use a name, their position on the sled, and if they have a red or black nose. Ok a bit of a goof perhaps but simple and seasonal. Why not?

Now I don’t know about you, but I prefer to write demo code several times before writing it again live in front of an audience. Not an option today but how hard can it be? I’ve written classes many times before and my content knowledge is solid.

I honestly hoped I would make some mistakes. Hopefully the students would catch them. Great learning experience. And yes, I did make a couple of mistakes. I forgot to make the class data private right off the bat. I called for a string parameter in the constructor that should have been an integer. A student caught that one. Winning!

The hardest part for me is that I had only thought through writing the class but now how to test it. I had thought about the constructor (and prepared a data file with 8 normal reindeer and Rudolph) and using ToString (overridden of course) for testing purposes. I had to make up a test for various other properties on the fly. At least that meant students got to see/hear my design thoughts as they happened.

  I’ve also been thinking about a Santa’s sled class that would have an array of reindeer objects. That might be fun if I figure it all out.

Things went pretty well actually. I got a lot of ideas which doing the demo and I’ll be more prepared in the next semester. I need to come up with something seasonal for the spring though. A prom dress class perhaps?So many ideas.

Wednesday, December 04, 2019

Coding for Fun and Advent of Code

My friend Mike Zamansky is a big proponent of the Advent of Code – 25 days of coding problems leading up the Christmas. Since I have been thinking I want to write more code for my personal enjoyment I started in on it myself. Day 1 and Day 2 were interesting (to me) problems and I enjoyed doing them. Day 3 didn’t appeal to me. It looked like something I would want to be paid to write so I didn’t do it. Day 4 looks interesting so I plan on taking it one some time today. After all, it is not coding for fun if it isn’t fun. I’m not looking to prove anything to myself or anyone else at this point in my life. Mike has been blogging about the problems he has been doing from a teacher’s perspective. I highly recommend his commentary https://cestlaz.github.io/

The Day 2 problem was particularly interesting to me though. It is a very simplified computer simulator. Only 3 instructions – 1 for add, 2 for multiply, and 99 for halt. with each of the first two operators having three parameters – location of the two numbers to operate on and the location to save the result. It is potentially self modifying code if any of the addresses points to an operator later in the list of instructions.

The obvious enhancement is to add more operators – division and subtraction for sure. Having a set number of parameters makes things easy so having variable numbers of parameters adds some complication. The more I thought about expansion the more I found myself contemplating a more complete “assembly language” especially as I found myself thinking about literal data and pointers as different types of parameters. Maybe I spent too much of my career writing in various assembly languages. In any case, as a thought exercise I found myself going far beyond what I would want to assign to a beginning programmer.

So I am pulling back a bit. I’m thinking about several smaller pieces. The easy part of a simulator with a few more operators. But maybe, also, what would a compiler look like that would create input for such a simulator? How would it load data into appropriate places? That’s a more advanced project but maybe something for me  to write to make it easier to create input for the simulator?

If nothing else, looking at Advent of Code is giving me ideas for both students and myself. Now that is fun.

Monday, November 25, 2019

What’s In A Name?

Naming things seems to be a continual problem with programming students. I’ve written about this before (two years ago A Rose By Any Other Name Gives An Error ). I can’t seem to get a handle on it with students. I think part of the problem is that students are good with ambiguity and inference. If you call a student by the wrong name or a diminutive they don't’ use themselves you may get a correction (think warning in computer speak) but they know who you are talking to/about. Compilers are a lot more fussy.

Case-sensitive languages differentiate between “question” and “question.”  Forget about adding extra letters or misspelling a name.

Somehow students have trouble looking that closely at words. I’m not sure if that is because they are too used to filling in the blanks of misspelled words or something else? I do notice that I see a lot of typos and spelling errors in other written work they do. Even though there are spell checking tools built into editors.

Part of the problem may be error messages. Well, that students don’t always read the error messages is part one. But even when they do the messages are not always helpful enough. “Variable does not exist in current context” is pretty meaningful for an experienced programmer. We understand things like scope for one thing. We also know to look for spelling differences. Students sometimes have trouble parsing that all out though. It is something that comes with experience.

Unclear error messages have long been a problem. I think that maybe it is because the people who write the messages have too much knowledge and so assume too much knowledge on the part of programmers. Then again most development tools are designed for experienced programmers and not beginners.

I wonder if smart IDEs will one day help beginners. Perhaps artificial intelligence modules will look at code and ask “Did you mean ‘Question’ and not "’question?” or “did you forget to declare this variable?” Or even “this variable is outside the scope of where it was declared.” This is the sort of hint that teachers give now.

All in all I think the answer is to make the tools more relatable to the people who use them. Teaching computers, which can be very difficult, seems, some days, to be a lot easier than teaching high school students.

Friday, November 22, 2019

Coding For Fun

As with so many things, it started with Doug Peterson. Doug recently posted about something called 100 days of code. This got me started about the need I feel (some times) to do more coding for fun. Or at least coding projects for my own interest and not for “work” purposes. Next up was Mike Zamansky (yet another good idea fairy whose blog I follow) Mike posted about some text based projects he was introducing to teachers during some professional development he has been running. Links below.

Now I love messing around with textual data. Love it. And I’d been thinking about that already and posted about one project recently. Mike’s most recent post reminded me of something I did “back in the day” when we used markup languages to feed into word processing systems (i.e. before WYSIWYG editors) I created my own concordance of the Bible. It was pretty cool to be able to do something like that. I may have to look for tools to do something similar. Maybe with HTML? We’ll see.

I also have a number of “things” that can be programmed sitting around at home.

The trouble is time. Well, honestly, not so much time as prioritization. There are other things to do. School stuff for example. Grading, lesson planning, and all that. And home stuff like the tables I want to build and the hydroponics system I have the materials for but haven’t built yet. And books to read. I need to be exercising more. And, well, you get the picture.

I suppose I could be coding and not writing this blog post as well. Sigh. I wonder if I wrote a scheduling app to help me out?

How about you? Do you code for fun or for learning (which is fun too) or is coding not part of your definition of fun? IF you do like to code how do you prioritize it? Does 100 days of code appeal to you?

Related Blog posts:

Thursday, November 21, 2019

Teachers Helping Teachers For Free

I understand the appeal of sites like Teachers Pay Teachers. Really I do. Some teachers are awesome at creating resources and the idea of getting paid to share them is attractive to underpaid and over worked teachers. Even Amazon, never one to miss a chance to make money, is getting in the business of supporting this idea (Amazon Starts Marketplace for Teachers to Sell Online Educational Resources) . For some reason the idea of asking poor under paid and under resourced teachers to pay for stuff that I have developed for my own use just doesn’t feel right.

I have no problem with teachers who decide to ask other teachers to pay for resources. I have no problem with people who make creating and selling resources in order to make a living. It’s a free country. I hope they have no problem with me giving stuff away for free.

I made a comment to this effect on Twitter and Mike Zamansky replied with “When I was starting out I only survived by the good graces of more senior teachers who mentored and just as importantly SHARED materials (free of charge). This shows the disconnect between capitalists and educators.”

I think that has been the experience for many of us. We survived and continue to survive because others share resources with us.

I’ve been pretty lucky myself. The first real resource I shared online was a pair of project books for Visual Basic and Visual C#. I got paid to write the first editions. By Microsoft not by other teachers. Teachers got them for free. I subsequently updated and expanded them several times as the software was updated but while the books were still free I no longer got paid to write them. I was and am ok with that. I got plenty of use from those projects myself. The feeling of helping other teachers is a reward in itself.

In full disclosure, I have a couple of self-published books on Amazon now. Mostly because creating hard copy books to give away is more than I can spend. But I haven’t turned down teachers who request PDF versions.

I have also benefited from resources shared by others. PowerPoint presentations, video demonstrations, project ideas, and a host of other resources that people have shared over the years have greatly benefited my teaching and learning.  I am very grateful for those who have generously shared those resources.

One day maybe teachers will not be under resourced and under paid. For now though far too many are. That’s why I think we should do as much as we can to support each other.

Wednesday, November 13, 2019

Not Too Easy and Not Too Hard

We’re covering Classes and Objects in my Programming Honors course this week. Specifically we are learning how to program classes in C# and use them in programs.  The struggle for me is to come up with classes that are interesting to students, practical for them to use, and not overly complicated. This is not Advanced Placement computer science A and we don’t have a whole year for the course.

I start with a simple Dice class. Easy enough as an introduction . I also live coded a Coin class. The difference being that I added images to the coin class to show them that more interesting objects can be used in classes. So what next?

Things I have used in the past include a playing card class. Interestingly enough this has had cultural implications. I have international students who are not always as familiar with American playing cards. But it works. There are a lot of pieces to playing cards and you can do them simply (face value and suit) or complicated (Face value, suit, nominal value – face cards are 10, front and back images, suit color, text names, etc) Methods and constructors can get interesting to say the least. So can creating programs to use the “cards.”

I tried a Pez dispenser class once. I do have a 12 inch Pez dispenser on my desk after all. I’ve done it the simple way with just a capacity value and a current count value. What I would really like to do is use a stack in the Pez dispenser class and have candy objects to put in it. If I were teaching APCS A and had time to cover stacks I would do this for sure. But I don’t.

I’ve thought about revisiting some of the class projects from prior AP courses. Anyone remember BigInt? I kind of liked that one. I did more with the Marine Biology Case Student but my students never really liked it. They called it the DAF – Dumb Ass Fish case study. Both may be a bit much for the time I have though.

I had some fun with a quiz question class last year. Data included the question, an array of possible answers, and an index of the correct answer. I liked that for showing how flexible array parameters could be. A true/false question is just a question with two possible answers. The next design question is of course do you have a simple array of questions or do you design a quiz class? If a quiz class, what does that even look like? Might be fun the have students try that design.

I’m still playing with more ideas. I’ll have to use something tomorrow but maybe the good idea fairy will hit before Monday. Suggestions anyone?

Friday, November 08, 2019

Define Better

Someone posted an interesting question on Facebook.

Is using ++i(pre-increment) better than i++(post-increment) ?

My reply was to ask for a definition of “better.” The Facebook posts have a lot of answers from people who appear to not have written a compiler themselves and who making a lot of assumptions. But the point of this post is not to discuss which option is better for some nebulous definition of “better.” Rather is is to think about asking the question of what do we mean by “better?”

There are a lot of what I call religious arguments in computing. Tabs or spaces, curly braces in columns or have the open on the end of a line, what is the best programming language, and on and on. Most of them stem from differing definitions of “better.”

Sometimes things matter very much at one point in time but not at all later and yet the bias from early days remains. There was a time with memory was so tight that a single character variable name was much preferred to a longer more descriptive name because of the space used. Most of my readers probably don’t remember those days but I do. Fortunately I recognized when the change happened. Not everyone did so quickly.  This is possibly at the heart of some of the tabs vs spaces argument for at least some old timers.

Other issues have become moot or mostly moot because we have so much smarter compilers and interpreters these days. We have long been at the point where compilers write better low level code from high level code than even the best assembly language coders. I seriously doubt that there is a difference between the code generated for ++i or i++ as the incrementor in a for loop these days. Compilers are too smart for that. Compiler writers think long and hard about those sorts of things.

How doubly dimensioned arrays are declared used to make a bigger difference than it does today. I can remember thinking long and hard about how to declare and iterate through two dimensioned arrays. You pretty much had to know how the compiler would allocate memory and what cache would look like to get optimal performance. I don’t think many people think about that today except for the most performance critical applications. Applications we don’t give to beginners anyway. Compilers do a lot of optimization on this sort of process so we don’t have to think much about it. Artificial Intelligence and machine learning (see also AI-assisted Programming) are probably going to make compilers even better than they are today.

Today I think “better” in terms of programming should mean “easier for programmers.” Easier to write, easier to understand, easier to modify, and to allow programmers to think about the end result and not the assembly/machine language generated.  Let the software do what software is good at and people do what people are good at.

Thursday, November 07, 2019

AI-assisted Programming

As I said in yesterday’s blog post,Microsoft has been running their big MSIgnite event this week and making all sorts of announcements. One interesting announcement what improvements to what they call Visual Studio IntelliCode.  The idea is that they are using machine learning to help programmers with writing code. In the latest update are whole line completions and refactoring. Interesting.

I haven’t seen IntelliCode in use before and it is probably because it is not turned on by default. I did some searching and found that it can be turned on as an Extension (I had to search a bit under the Manage Extentions option) and then you can customize aspects of it from Tools –> Options –> IntelliCode. Oh, and you need Visual Studio or VS Code 2019 for this. I am using Visual Studio 2019 Community Edition which is free.

SO far I am not seeing obvious help from it but it may be that I have to do something more complicated in my code or write more code first. It does apparently take context into account for its suggestions and I may not have given it enough yet. But I’ll keep playing. And maybe I should look for some video demos online.

There are other things to think about though regardless of if it has been useful already. What is the training like? The write up I have seen says that it learns from examples on GitHub. Initially that scared me as literally anyone can upload to GitHub. One reference I found said  something about the 500 best repositories on GitHub. What ever that means. And what was the criteria for “500 best?”  What sort of standards will this learning suggest?

Some of the documentation talks about options for using other databases of code to train the system so that businesses can train the AI with their code and standards. As a teacher I wonder if there could be a training set for AP Computer Science A? I think Java is supported with IntelliCode in Visual Studio Code.

No doubt some will complain that it is “too much help” for beginners but I’m not sure about that. You still have to know enough to take or reject suggestions for one thing. And having the computer tell a beginner something like “you should make a method to reduce this redundant code” might be better received than the same comment from a human teacher.

Will this help students learn more or dumb down the process? I’m an optimist and think it will be a good thing. What are your thoughts and concerns?

Wednesday, November 06, 2019

Visual Studio Online–Possibilities for Education?

Microsoft has been running their big MSIgnite event this week and making all sorts of announcements.  One of them was a cloud-based development environment called Visual Studio Online.

OK, that looks interesting and I will probably try it out soon. It may be an answer for people pushed to Chromebooks,  others who are at one to one bring your own device schools, or just want students to wrote programs from home. I wonder how it works on otherwise underpowered older computers?  There is some concern about costs and that is something I need to understand.

Maybe I can find someone with an education focus at Microsoft to explain how it might work cost effectively for schools and students.  Or maybe I can figure it out through all the marketing hype. We’ll see but it sure does look worth looking into in more detail.

Question added later: I wonder if this will let me develop iPhone apps without buying a Mac? Anyone know?

Monday, November 04, 2019

CSTA at 15 #CSTAat15

The Computer Science Teachers Association is now 15 years old. I’ve been a member from the start and I have to say that in some ways it feels like it has always been there but in other ways it feels like it just started.  There was a K-12 computer science education community before CSTA. But it was small and one could easily feel alone. CSTA brought a new sense of community and togetherness. Most of all, perhaps, it brought us organization and a stronger sense of belonging.

There was the CS & IT Conference (now called the CSTA Annual Conference)  before CSTA as well but it didn’t have the same feeling of permanence and sustainability that CSTA brought to it. CSTA brought growth and strength to the conference. It’s been the annual highlight of my professional development for years now. Presenting at several of these conferences has been a huge privilege and honor. And added to my learning as well.

After I left industry some years ago I ran for and won a seat on the CSTA Board. What a wonderful experience those four years were. Hectic as we changed Executive Directors during that time. It was a real time of transition. That wasn’t as smooth as many of us would have liked and I think we experienced some growing pains during those years. We’re on our third ED now but things seem to be well on track. Kudos to the Board (after me) who lead the way through the last couple of years and another ED transition. We have an amazing board at CSTA who work very hard for the membership.

The growth of chapters has been a big part of the CSTA story.  Fairly early on, CSTA developed programs to train and prepare chapter leaders and that has paid off in spades. There are more and stronger chapters than ever before. CSTA is both national AND local and that is important.

CSTA has helped train advocates among teachers and support them locally. CSTA members have advocated, lobbied, pushed, and otherwise promoted CS in their states, counties, school districts, and yes even nationally. Some of the companies and other groups get a lot of credit for the growth in computer science education in the US but the real heroes are individual teachers who alone or with other CSTA members did the ground work to make things happen.

From conferences to board membership to involvement with committees and connections with life long friends CSTA has been an important part of my life. I can’t wait to see what the next fifteen years bring.

Friday, November 01, 2019

Magic 8 Ball and Projects From Real Life

There has been a 12 inch tall Pez dispenser on my desk for a couple of years now. It’s a great visual aid for talking about stacks. Today I got a Magic 8 Ball as well. It turns out that a lot of my students were unfamiliar with this staple toy of my youth. Since I really like using the Magic 8 ball program as a demonstration I decided I really had to get a physical ball.

At this point in the semester we have covered loops and arrays and it is time to make programs more interesting by adding more data. I want to use something that makes sense and is not just a demo without meaning or purpose. Having code you can have some fun with is always a plus as well.

I went to Wikipedia and found the classic 8 ball answers and placed them in a text file. My demo reads the file into an array when the program loads. Once the array is built clicking a button displays a random answer. It’s pretty simple to code and we code it together as a class. Students love asking it questions when we’re done.

Usually I have students add their own answers to the text file and then modify the program to handle the new set of answers. We also talk about different ways this could be coded. What if we didn’t know how many answers/lines were in the file? Would be use a different loop and/or a different array type like an arrrylist? What options (methods or functions) should we use to provide the most flexibility?

This also provides students with some sample code to look at when I assign larger projects and expect them to do much more on their own. Is this a good project? Magic 8 ball says “Yes definitely.”

Friday, October 25, 2019

A Loop By Any Other Name

My first programming language was FORTRAN IV. As I recall we had Do loops. They worked pretty much the same as what we call For loops in most languages today. We didn’t have while loops but we did the same sorts of things with line numbers, if statements, and the powerful but “evil” Go To statement. As time went on I learned more ways of specifying looping constructs including recursion. Recursion took me some time to wrap my head around. Possibly because I used some languages that didn’t even support it back in the day.

These days there are all sorts of iteration loops of various complexity and power. For a software developer that is wonderful. For a teacher? Well, it means you have to make decisions about what to teach. For a one semester, first programming course I like to keep things simple. A C-family For loop has all sorts of possibilities from the simple to some pretty complex structures. Eventually students will learn many of them but I could probably spend half a quarter just on For loops if I tried to get everything possible in and understood. The cognitive load on some possibilities feels like it would be too much for many students.

Mostly I try to focus on the base concepts. A loop has a set up piece. Variables are set to a known starting state. A loop has some sort of comparison it see if it is finished. A counter it checked, a flag is checked, or maybe an interrupt happens. But something has to stop the loop sometime. usually but we can get into those times when an infinite look is useful later. And of course something has to happen that changes the values or states that the loop is checking.

Understanding these concepts will, I sure hope, prepare students for what ever syntax or iteration style they run into over time.

When we teach students for a career rather than just for a job the concepts are much more important than the programming language or the IDE. Concepts – what a concept!

Tuesday, October 22, 2019

How Many Words in That Text?

One of the projects I have used for years is a letter counter program. The idea is to count the occurrences of each individual letter. It’s a nice project that includes arrays, loops, and some string manipulation. This is the sort of thing that does have some real world utility. Cryptography uses word counts to try to crack substitution cyphers. Linguists use it to study languages. And that is just two of what comes to mind.

The next logical (to me anyway) step is to count words. I’ve been thinking about adding this in for a while. It is actually something I was assigned as a project many years ago when I was an undergraduate. It’s not as simple as counting letters. The most obvious method involved counting spaces. What happens if someone is old school and places two spaces after every period? Well, that is something to take into consideration. And what about other white space like tabs or line feeds? Or special characters?

Doug Peterson related in a recent post (About words) that two different programs gave him two different word counts for the same piece of text. The counts were off by 3 on a text of about 486 words. Not a huge percentage but on a book length text that could make a difference. Some articles in magazines are paid by the word. That means getting the count right means money.

Now people can count words with greater accuracy though I don’t want to do it myself. At some point someone is going to feed a lot of data into some artificial intelligence. Long sections of text that have accurate (human counted perhaps) word counts will be fed in and the AI will learn what words are and how to count them. It’s not going to happen until someone decides that developing this is worth the time and money. I wonder if it will be an academic or an industry researcher?

For the time being I think this will make an interesting conversation in class. Maybe we’ll have a contest to see  who can come up with the most accurate algorithm?

Friday, October 11, 2019

What Time Is 30 Minutes From Now?

Got the proctor guide for the PSAT that I have to proctor next week. There is a chart to help proctors determine stop times that are 25, 35, 50, and 60 minutes from a time after the start time hour.

Wait! What? Someone needs a chart to tell them that if the start time is 5 minutes after the hour that 60 minutes later will be 5 minutes after the hour? Apparently someone does. Or someone thinks some one does.

Some of my students, when being told to return to class in a half hour, ask me what time that will be. I blame the analog clock. That and laziness.

So obviously I am wondering, should there be an app for that? Yep, I found a new coding project. Now I just have to decide which class to use it in.

Thursday, October 10, 2019

Michael Backus Alaska Middle School Computer Science Teacher

Every so often I run into a computer science teacher’s work online and ask myself “how have I never heard of this person before?” This week I listened to a podcast by Vicki Davis with a middle school CS teacher from Alaska by the name of Michael Bachus. (How to Make Programming Easier) This guy is doing some cool stuff with middle school students. Robots, artificial intelligence, hardware  and software, and helping a lot of teachers do the same.

Michael Backus teaches computer literacy and computer science at Teeland Middle School in Wasilla, Alaska. As the creator of the http://www.akrobotnerd.com, he has shared many projects that he has developed over the years, the most famous being his Artificial Intelligence with Arduinos curriculum.

Vicki Davis has a lot of great interviews as part of her daily 10 Minute Teacher podcast. She’s had me on a couple of times as well.

In any case, listen to this podcase and check out Michael Backus’ resources. Curriculum, videos, projects, and it looks like a lot more.

Someone needs to get him to CSTA to present some time.

Wednesday, October 02, 2019

ACM/CSTA 2020 Cutler-Bell Prize in High School Computing

Applications for the ACM/CSTA 2020 Cutler-Bell Prize in High School Computing are now open. The deadline is 12 January 2020.


The Award

The ACM/CSTA Cutler-Bell Prize in High School Computing is a prize designed to recognize talented high school students intending to continue their higher education in the areas of computer science or technology. The program seeks to promote and encourage the field of computer science, as well as to empower young and aspiring learners to pursue computing challenges outside of the traditional classroom environment. The prize is a made available through a $1 million endowment established by David Cutler and Gordon Bell. Dr. Cutler is a software engineer, designer and developer of several operating systems including Windows NT at Microsoft and RSX-11M, VMS and VAXELN at Digital Equipment Corporation. He is Senior Technical Fellow at Microsoft. Dr. Bell is an electrical engineer and an early employee of Digital Equipment Corporation where he led the development of VAX. He is now a researcher emeritus at Microsoft Research. Up to four winners will be selected annually and each will be awarded a $10,000 prize which will be administered through the financial aid department at the university the student will attend.

Eligibility

To apply for the Cutler-Bell Prize, you must be a graduating high school senior residing and attending school in the U.S. Challenges for the award will focus on developing an artifact that engages modern computing technology and computer science. Judges will look for submissions that demonstrate ingenuity, complexity, relevancy, originality, and a desire to further computer science as a discipline.

Tuesday, October 01, 2019

2019 Champions of Computer Science Awards

Know a student or teacher or administrator who has achieved something this year to increase access and quality of CS education. I can think of a number of people who should be nominated. Maybe you can think of someone as well? Don’t assume they will nominate themselves! Deadline is midnight Pacific Time October 21, 2019.

2019 Champions of Computer Science Awards

The Award

Tell us about a student, educator, administrator, or organization that has achieved something in computer science this past year for the opportunity to be recognized as a 2019 Champion of Computer Science. These awards are a collaboration between CSTA and Code.org.

The Champions of Computer Science Awards identify and promote students, teachers, administrators, and organizations who have made a significant impact to improve access to and the quality of CS education.

Eligibility

Any K-12 student, teacher, or administrator may be nominated for the Champions of CS Awards. Organizations that work directly to improve access to and the quality of CS education may also be nominated (examples: afterschool coding clubs, local CSTA chapters, regional or national nonprofits, etc.).

Nominations

Award winners and a guest of choice will receive an all-expenses paid trip (travel and hotel) to attend the CSEdWeek event on December 9th (location to be confirmed). This opportunity is only available for US submissions.

This form closes Monday, October 21, 2019 at midnight PT. Email awards@csteachers.org if you have questions.






Monday, September 30, 2019

The Problem Of Cheating on Programming Projects

This seems to be the year a lot of people are really getting concerned about cheating on computer science programming projects. There has been some discussion of the issue on one of the mailing lists I am on. Garth Flint blogged about it at Finding cool projects for programming classes. And I caught a student searching for exercise solutions for Code.Org’s AP CS Principles course work.

Of course cheating on programming projects is nothing new. I know that people shared punch cards back in the early days. Yeah, I’ve been around a while. I have also caught students sharing code via Google Docs. With the tools we have today, cheating has never been easier. Solutions to popular coding projects are easily available on the Internet and found using search engines.

It’s amazing that students don’t think teachers can recognize and then find solutions that a student copied from the network. We can and we do.

One common refrain I hear is that professionals get code off the Internet. And they do. GitHub is all about sharing and reusing code. StackOverflow and sites like it are were professional and amateurs find solutions to their problems and use them. It is considered good practice to use these tools. But school is different.

School is about learning and projects are assigned both to provide practice and to evaluate what students have learned. Students have a tendency to grab code they don’t understand and try to shoehorn it into a project. Or to copy a while project and turn it in as their own. Interviews can usually determine is a student understands what they used or not.

Ideally though, students would only hand in their own individual work. That is better than catching them and docking them points. Today’s students have more pressure to get good grades and (apparently) less understanding of the correlation between knowledge of the material and those good grades.

Garth wrote in his blog about trying to come up with unique projects that don’t have solutions on the Internet already. That’s hard. It seems like a lot of us teachers think of the same projects. Or we get them from third party curriculum and textbooks. Once a project is in wide use solutions will appear on the Internet pretty quickly.  Even if a teacher does come up with a project that can’t be found on the Internet, if you have one really bright student who is willing to share their solution you can have cheating.

The only thing I can think of is making the issue part of a discussion of ethics and the meaning of school. Using code from the Internet correctly requires that students actually understand what they are using.  Students who cheat their way through are going to find themselves in a bind eventually. If not in post secondary school than in their careers.  Somehow we need to make them understand that.

Wednesday, September 25, 2019

If Statement Programming Projects

Over the years I have used a number of projects to give students practice using if statements – especially those that involved nesting or checking lots of values. Currently I am using:

  • Hurricanes – user enters a wind speed and the program reports the storm category
  • Voting – User enters an age, and checks boxes to indicate citizenship and registration
  • Pizza pricing – Base pizza prices plus add-ons for veggies, meats, or different cheeses.
  • Movie theatre pricing – a bit easy as there is only ages to check but ranges require some thought.
  • Ski tickets – prizes based on age and whether or not they are staying at the resort. I could add holiday/weekend of midweek as well.
  • Jumanji – If the random number generator “rolls” two dice whose totals are a 5 or and 8 let the player out of the jungle.

These all work fairly well. Students relate to most of those. Voting gets kids thinking about their future so that is a plus. Obviously decision structures show up in other projects all semester long but these have that as a special focus.

I’m trying to think of some new ones. Projects that are relatable and that are complicated enough to make students think but not so hard that they get frustrated easily. What are you using? What works well with your students?

Tuesday, September 17, 2019

Book Review: "Tools and Weapons"

"Tools and Weapons" by Brad Smith and Carol Ann Browne is a look at some important computing issues through a Microsoft lens. It is a pretty revealing look as the authors write seriously about the thinking behind Microsoft’s dealing with issues like the Snowden leaks, suits against the government about over reaching subpoenas, protection of users data, transparency, cyber security, and more.

I really like this line from the introduction "When your technology changes the world, you have a responsibility to help address the world you helped create."

There were several threads moving through the book. One was the need for building guiding principles for looking at technology and its uses. An other was the need for diversity among people developing technology and the guiding principles. There is frank talk about embedded bias in algorithms and how diversity is essential to fixing that problem. Responsibility for what technology does is another key thread. Without using these words, the book suggests that “should we” is as important if not more so than “can we.”

The chapters on Artificial Intelligence and facial recognition are the best look at the pros and cons I have read so far. Many people seem to have a doomsday view of AI but Smith and Browne have a more nuanced look; one that is not apocalyptic but more practical and near term. There is a lot to think about in these chapters but the picture painted is more about how we need to think about issues going forward than that we should either panic or be unconcerned.

I found the chapter on China very interesting. It was clearly written carefully to outline cultural and political differences without appearing to attack anyone. I might have preferred a stronger stance but I’m not the president of a global company.

One clear takeaway for me is that today’s Microsoft is not the same Microsoft as it was under Ballmer or Gates. Satya Nadella is a different sort of leader altogether and ethics and principles of a company are set at the top. Where Gates was naïve in some ways and Ballmer was focused on the bottom line Nadella, while not losing sight of the bottom line and still naïve in some ways (remember his gaffs about women getting ahead) looks at things differently, listens better, and is interested in the better good.

His decision to release Windows XP patches for the WannaCry virus for free is one I have to wonder if Ballmer would have made the same way. Maybe he would have but that I have to wonder is telling.

The book is not a difficult read. The language is non technical and technology is explained in layman’s terms. That is not to say that the book is only for non-technical people. I think technical people should read it. So should policy makers in both government and the private sector. It would make a great supplemental reading for an ethics course, especially for an ethics course for technical people.

One last interesting thought from the book. No one graduates from a US military academy without taking an ethics course but many people graduate with technical degrees without taking an ethics course. Maybe that should change.

Friday, September 06, 2019

Password Checking Tools

Neil Plotnick shared some Password Checking Tools on Facebook recently. I’ve used some of these in the past and find them useful and instructive.

The more security aware of my students always ask me how safe it is to use these websites. I tell them to use things they think are good passwords but not ones they actually use. Some of the sites make the same recommendation.

The first two sites above give an estimate for how long it would take a computer to brute force crack the password. The estimates don’t always agree. This is not surprising as they are probably based on some slightly different assumptions. The time scale is more important than the actual number though.

The third site explains why a password it strong or weak which is very useful. One thing that is interesting is the impact of special characters. I have run into a number of sites that don’t allow special characters in passwords. I find that surprising and wonder why that is. I’d rather require their inclusion.

Having students in a programming class write their own password checker is a great exercise by the way. It helps reinforce string manipulation, general parsing concepts, and password safety all at the same time.

Thursday, September 05, 2019

NCWIT Award for Aspirations in Computing

This is a great program for high school girls interested in technology. I have had several students get awards at the state level and they all say it has been a good thing for them.


Hello Educators! Applications for the NCWIT Award for Aspirations in Computing are now open! The deadline is November 5th, 2019. As an educator, you play a pivotal role in supporting the next generation of technologists. When 2018 AiC Award recipients were surveyed about their motivation to apply for the award, 65% of respondents named outside encouragement to apply. When asked about who most influenced the award recipient to apply, 62% of respondents named Teachers/Educators. Encourage your students to apply and spread the word!

When you endorse a student’s application, you are eligible and encouraged to apply for the NCWIT Educator Award. Applications are due December 2nd, 2019!

https://www.aspirations.org/participate/high-school

Wednesday, September 04, 2019

The Scratch Course For Teachers

This looks like a valuable free professional development course for teachers interested in incorporating Scratch into their curriculum.


"The Scratch Course" is a free, six week, online workshop style course for teachers interested in learning more about programming with Scratch. Originally created through funds from Google's CS4HS program, this course has served over 1000 teachers from around the world in the last five years. We are preparing to offer our fall 2019 section of the course starting on Monday, September 16. For more information about the course and to pre-register, visit: https://csed.uni.edu/scratch-intro/

Monday, August 26, 2019

Updating and Expanding Programming Projects

I’m always looking for new projects. I found an interesting example in the book “The Creativity Code” (Creativity Code review here). It was a poem generator that took random adjectives, adverbs, verbs, and nouns and fit them in “missing” spots in a template. It looked like fun but as I thought about it, it was really just a different version of a MadLibs type of game. It’s also similar in some ways to the Shakespearian insult project (have you seen the Shakespeare Insult Kit at MIT?)

What I would like to do is expand a project. That is to say I would like to take an existing project, like the Shakespeare Insult project and add something to it. Projects that grow and build as new knowledge is learned can be highly motivating.They mean students don’t have to start a project from scratch. This also reinforces the idea that programs can, and often are, modified and enhanced.

Currently my Shakespeare project teaches about parallel arrays. What I have been playing with is adding a class to this project later. An object of this class would store  array lists of strings and have a method to return a random string when asked. Retro fitting the new class should be fairly easy for most students. They will see how this simplifies code

insults.Next()

being easier than

insults[r.Next(0, 50), 0]

While simple at first I have realized that there are multiple constructors that should be created for this new class. An empty list and an object initialized with an array (or other list) at a minimum. Similarly there should be an Add method which would have several overlays – individual strings and an array of strings are two obvious examples. I am sure that student will think of others as we go along.

I’m optimistic that this idea will lead to some useful discussions about thinking ahead about how a class might be used and how it could be written to be useful in a number of different design cases. At the very least I had fun reviewing ArrayList as I wrote some code as a thought exercise.

Thursday, August 22, 2019

What I Want from Computer Science Education Professional Development

The CSTA 2020 Call for Proposals is out and as usual it has me thinking.   Two questions come to mind. One is, what can/should I propose to present? The other question is what do I want to learn? I think I have been to every CSTA conference (since it was the CS & IT conference) so I have attended a lot of sessions. I’ve presented quite a few times as well. So I have a lot of history to think about.

I don’t currently have any sessions or workshops I want to present. I keep asking myself is that is because I am not working hard enough to innovate or create new ideas. I suspect that a lot of people doubt if they are doing anything special enough to present. Some of those people are right but a lot of them are wrong. So I need to think about that.

I’m thinking more about birds of a feather sessions to propose and looking at my projects to see if I have something really nifty for the nifty project session. Birds of a Feather (BoF) sessions are very interactive and are great for refining ideas. And nifty projects are, well, they’re nifty.

What do I want to see presented? That’s actually hard these days. Why? Because my brain is already full of more ideas than I could learn or teach in a lifetime. Artificial Intelligence, cloud computing, Internet of Things, game development, virtual reality and on and on. Content! There is a lot of possible content out there.

What I really want to learn is how to teach better. I’m doing some reading (Computer Science Education is my current read) and I’ve been learning a lot from Mark Guzdial’s blog for a while. If you ever get a chance to hear Mark talk about how to teach computer science GO HEAR HIM! There are a number of his talks on YouTube BTW.

Lots of people want to promote a new tool (software or hardware) as a silver bullet for teaching. I’ve heard enough of them. Given a few myself. The more I teach though the more I think there is more to becoming a better teacher than a cool new robot, a fancy new IDE, a great new “educational toy.” or what ever.

Teaching is ultimately about establishing a relationship between teacher and student. It is about communicating well and sharing passion. That’s what I want to learn how to do better. And if you have research to back up what you are teaching about how to teach I really want to hear from you.

Wednesday, August 21, 2019

Vicki Davis Interviews Alfred Thompson

Over the summer Vicki Davis interviewed me for her Ten Minute Podcast. Vicki and I have been friends for a number of years and it is always a pleasure to talk with her. We talked about a number of things including Project-based learning. Passion-based learning. Problem-based learning.


Sunday, August 18, 2019

And So It Begins–School year 2019 2020

Tomorrow (Monday) I will meet the new freshmen in my study hall. And I’ll finish getting my room ready for the new school year. First day of real classes is Tuesday. And I am not as ready as I would like.

I have a day by day plan for every day of the semester (even the year for my AP CS Principles class). Lesson plans last until they run into actual students so there will be adjustments. There always are. It’s my 5th or is it 6th year teaching honors programming so that is more settled than anything else. I still make changes as I go along because not every class in the same as any other. And who wants to do the same thing year after year anyway.

It’s my third year teaching AP CS Principles and I am making big adjustments in the schedule over last year. I am hopeful that I’m going to get it better this year but who really knows.

My third year for teaching Mobile Application Programming and I am switching from AppInventor to Thunkable. AppInventor has given me a lot of issues with the emulator and most of my students have iPhones and Apple is dragging their feet on allowing AppInventors iPhone software. Thunkable already works with iPhones, though without support for some features I would really like. Plus it seems to connect to phones more reliably. We’ll see how it goes. I’m adapting project ideas as I go along. That’s not completely new but it is not without risk.

At least I only have three preps. Last fall I had four. I also have more free periods as I am teaching a reduced load (at my request) and that should help a lot.

Are you ready? Have you begun already? Let’s do this thing!

Wednesday, August 07, 2019

Book Review: The Creativity Code

I’ve been reading a lot about Artificial Intelligence (AI) this year. Several of them have been pretty scary. It was recommended that I take a look at “The Creativity Code: Art and Innovation in the Age of AI” by Marcus DuSautoy. It was a good recommendation. This book is different from the others I have read. Or tried to read. It’s focus is not on business or about intelligent weapons. The focused as the title suggests is on creativity.

The book discusses how computers, or rather AI software, is creating art, music, and new ideas in mathematics. The author is a renowned  mathematician so the sections on using AI in math, developing proofs for example are especially well done. One unexpected benefit of the book for me was a new appreciation for what mathematicians actually do and why they find some year joy in the field.

The author shares some concerns about how AI might make mathematicians like himself obsolete. In the long run though he sees a place for human creativity in the world. AI routines are still being trained by people. They do go beyond what they are specifically trained but have to start with that training. Well, usually anyway. Will that change? Let’s just say that there are still a lot of unknowns. AI has moved in ways we haven’t expected already so there is that.

If you are interested in learning about AI in art (computers creating works in the style of famous artists for example, music (using existing styles or creating new ones), writing (fiction or non-fiction), mathematics, and several other fields we don’t usually associate with AI this is a good book for you.

It’s an interesting and usually easy read (I confess some of the math was a little deep for me). It an in interesting look at AI. Recommended.

Thursday, August 01, 2019

What Programming Concept Do I Use?

I’ve been programming a long time. I wrote my first computer program in 1972. I think the parents of some of my students were not even born yet. So it’s hard to remember what it is like to be a beginner. Late last school year it finally occurred to me that a lot of my students understood concepts in theory but were having trouble knowing which concept to use to solve problems. Honestly this was having trouble sinking it with me because this stuff is so obvious to me.

Lauren Margulieux helped me out here with her recent blog post I’ve been a Computing Education Researcher for 8 Years and just took my First Programming Course: Here are 5 Things I Learned. This is a must read post for anyone who teaches beginners. One of her five things was “Deciding which programming concept to use was harder” Just what I had been thinking about lately. I think her experience, background, and ability to self-analyze her own learning helped her to see  what I think are common beginner issues that I have had trouble seeing myself. Maybe other teachers have trouble seeing these things as well. Or maybe just me.

Suffice it to say, I have to really think about how to help students over these hurtles.  Helping students to see when to use various concepts is my first priority. Stories maybe the answer. Can I tell stories about the sorts of things various concepts are good for. I do some of that already but maybe more examples will help. It’s worth a try.