Thursday, June 21, 2018

Autonomy, Motivation, and Teaching Computer Science

Of the several courses I teach, my favorite course is call Honors Programming. Its a one semester course that is the first real programing course for my students. Its my favorite course because it is the one I have the most autonomy teaching and because I am very prepared to teach it. I extend this autonomy to my students as much as possible. I find that the end of year semester wrap up project is the best learning experience of the course. In large part that is because the students select their own projects and seem very motivated to learn what ever they need (and somehow missed during the semester) to get their projects to work.

My biggest frustration with the course is that students get a solid base, do one pretty interesting proj3ect and then they are done. At least for a while. Many take Advanced Placement CS (some AP CS A and some AP CS Principles) but both of those courses tend to be pretty constrained. They don't really allow for really big projects that as self selected.

What I really want to do is teach a follow on course that is purely project based. I want students to pick a major project that they are really interested in and commit to learning, on their own, the things they need to know to complete it. Yes, I want a whole classroom full of students learning different things and working on different projects. I've seen amazing projects come out of classrooms run this way over the years. I am tired of grading simple easy to create programs that are only mildly challenging.

I'm working on a proposal for this sort of course. My friend Doug Bergman runs some serious project based courses and is partly the inspiration for this. As are a couple of other teachers I have learned from over the years. It seems that students really get motivated to work on big projects, even scary projects, when those projects are meaningful to them. A motivated student will really put in a lot of work. They also pay attention when a teacher points them in a direction.

One plus about Doug is that he has written the book on this sort of thing. I'm learning a lot from Computer Science K-12: Imagining the possibilities!: Bringing creative and innovative Computer Science to your school  It really has me excited. (I recommend Doug's book BTW for anyone looking to create or expand a computer science program. Lots of good stuff there.

I'm looking for more ideas as well. Grading is a concern especially for administrators and parents. Doug has some stuff on that in his book but I'm always open to more ideas. I know that giving students too much autonomy scares some people. Keeping them on task and making steady progress can be an issue. Students often think they can goof off now or change priorities for what they think will be temporary needs and still get everything done at the end. They often guess incorrectly so keeping track is important.

In the long run, I think that this sort of opportunity with motivated and interested students can result in a lot of learning. It can also help build interest in computer science, help students learn to learn, and result in benefits for all concerned.

BTW, earlier today I heard an interesting, and I think related, report on NPR. A Lost Secret: How To Get Kids To Pay Attention

One key quote.

“Many studies have shown that when teachers foster autonomy, it stimulates kids' motivation to learn, tackle challenges and pay attention, Deci says. “

That’s what I am talking about!

Saturday, June 16, 2018

Congressional App Challenge 2018

One of my students won for her district last year. She found it a very valuable experience. I highly support this challenge. Share it with high school students you know.

What is the Congressional App Challenge?

The Congressional App Challenge (CAC) is a congressional effort to encourage high school students to learn how to code. Last year, 200+ Members of U.S. Congress in 42 states conducted an App Challenge in their respective districts. Nationally, the contest inspired 4,956 students to code in 2017, and over 8,800 students cumulative in past 3 years.

Students (in teams of up to 4) code applications for the chance to:

  • get recognition from their Member of Congress,
  • win prizes,
  • display their app in the Capitol Building in Washington, DC.

How can your students get in on it?

Here's a 3-minute "explainer" video:

We would love to see a diverse range of students shine on the national stage!


In the first 3 years of the Congressional App Challenge, the program has yielded 605 App Challenges across 42 states. Over 2,400 apps have been created by nearly 9,000 students, and participant demographics surpass all industry diversity metrics, with young women representing 30% of all competitors. This year, the CAC initiative aims to reach even more constituents.

Tuesday, June 12, 2018

Reflections on Programming and Teaching

Mark Guzdial has an interesting post called Reflections of a CS Professor and an End-User Programmer in which he compares end-user programming and professional programming and how.if/what we teach for the two. I started a comment but decided it didn’t really fit there.

I'm pretty much in the same boat Mark is in. While I have been a professional programmer, these days I mostly write code to use as examples or to solve my own little problems.

I like to think that I bring some of what I learned and did as a professional into my little projects but it's hard sometimes. I was talking to another teacher today about a program that he wrote that we both use to track our course schedules. He gave me a new version and said to let him know if I  found anything weird because he was so used to it that he probably subconsciously ignores some things. That is why a lot of end user programs are only usable by the programmer. I know that some of my projects are the same -  not usable by anyone but me.

I'm starting to think that is a problem. But do I really want to spend the time to make them usable by others when the problems they solve are so personal and individual? Perhaps the best I can hope for is that they don't embarrass me too much if someone else sees the code.

I teach beginners. Real beginners who usually have no prior programming experience. I am not turning out professional developers. Oh sure some of them go on to internships with what they learn in my classes but I would not call them profession ready. I can’t teach them all that in a semester or even three semesters of high school. That doesn’t mean I can afford to teach them to be sloppy.

The basics I can deal with. Good naming, planning ahead, top down design, breaking down problems into small, manageable chunks, and some good error handling. I’m pretty careful about the code I show them. Some of my personal code I wouldn’t show them while others I would. I remember showing a game I was working on to some students once. One of the students remarked to the other “look at that! He’s already coding preparation for expansion.” That I can teach.

So where do I come down on this? Well, I think I can lead by example if I am careful. And maybe I should take my own code more seriously.

Monday, June 11, 2018

School Year is Over, Time to Get Ready for Next Year

It is teacher wrap up day at Bishop Guertin. The warning bell for homeroom just rang but of course the students were done on Friday so there are no students coming into my room. It feels a bit off.

I started planning for next year already. Over the weekend I got about half way through creating my day by day schedule for Advanced Placement computer science principles. Oh who am I kidding. I got a lot of it done but probably not half way. And I'll spend a lot more time reading through all the lesson plans and will probably make more adjustments. I learned so much teaching it this past year.

I've got to do the same for Mobile Application Programming and I have less to start with there. At least I have last year’s experience to build on. I didn’t really have that last summer.

Honors Programming is probably the easiest to plan for but I have work there. I have already organized a lot of that but want to write some new things. This is my favorite course to teach so I may leave working on it as my reward for finishing the others.

I feel like I have plans better laid for my summer organization than ever before. We'll see if I can follow the plan. I really want next year to be the best year of teaching ever.

Friday, June 08, 2018

Thoughts on Textbooks in Progress

My first published book, Microsoft Visual Basic FUNdamentals, came out 18 years ago. It was for Visual Basic version 6 and what I did was to take what and how I taught and turn it into a textbook. It was a good book. It didn’t sell a ton of books but I was able to take my wife out to dinner a couple of times.

I wrote several others after that. Both of them were new editions of a book someone else first wrote. But they were good books and I am proud of that work. Honestly though I haven’t used textbooks in class for a number of years now. They just don’t fit my style of teaching. What I have done is supply students with  copies of my PowerPoints (with speaker notes) and some short one or two page documents on various language features. Plus the occasional video presentation.

I've been working on a couple of reference books to use in my programming classes since the first of the year. They're getting close to done. I decided to bring home a real C# textbook to look at as I work.

There are 17 chapters and over 700 pages. I cover things from about 9 of them in my one semester course. This might be a good book if I were teaching university students. Maybe. For high school and the limited time I have no way.

Obviously it has a lot of depth and that is great. The problem is that I really need to make projects interesting to hold student attention. So I teach things like simple file handling, timers, adding images dynamically, collision detection (essential for a lot of games), and a few other things that are in my books under "Fun Stuff." I find very little of that in the real textbook. What I do find is hard to find and it is not obvious how they lead to fun stuff.

And then there is that whole 700 pages thing. Your average high school student is going to put that in their locker and never look at it unless you assign questions from the book.

Well forget that! Homework sucks! Besides I can come up with my own quizzes, projects, tests, and other evaluative instruments and they will be far more tailored to the needs of my course.

My VB book is currently at 76 pages including table of contents and index. My C# book at 80 pages. They're not going to get much longer either. They've got everything I cover in class and more for the real go getters. Short and to the point and things are explained in context and directed at high school kids.

They're designed to be a reference, a study guide, and something like advanced notes. That is really all most students really need. They should not have to dig though 700 pages to get what they need in a very first programming course.

Students seemed to get real value from the drafts I gave them this year. I don't know if they'll work for anyone else. The work is worth it if it helps my students.

Computer Science Teacher as Unicorn

imageThe t-shirt image here showed up on my Facebook feed the other day.  My first thought was “Yes, computer teachers are the coolest.” Of course I know a lot of teachers who teach other subjects who are every bit as exciting as any computer science teacher but there is another thought here.

Unicorns are both magical and rare. I would argue that all good teachers have a bit of magic to them. Computer science teachers are more rare though. And frankly, computer science feels a lot like magic to a lot of people.

Today is the last day with students at my school and what I’m thinking about is “did I make magic this year?” and “how can I make more magic next year?” Maybe being the unicorn is the goal.

Wednesday, June 06, 2018

Looking Back At APCS Principles–My First Year

During a conversation with my dean, he said it takes about three years to really get teaching an Advanced Placement course down pat. I don't know if that is the right number but it is surely more than one. This past school year I taught APCS Principles using the curriculum from Code.Org. It was a life saver. I had four preps this year and two of them were first time for me. Well one of them wasn't completely first time but I was doing a complete starting from zero rewrite of it. So there was a lot of work to do.

The tools supplied online were really quite good. The simulators were amazing and let me do some things I could not have done without them. Code's videos, some of which I used in other courses as well, are just outstanding. High production values, outstanding and diverse presenters, and just the right length to not lose kids. In all honesty, a properly motivated students could probably use it as a self-passed course. They would not get as much out of it as being part of a class but they would do ok.

We had some great discussions in class which I think were very valuable. I had three students from China which made talking about issues like censorship and government control of the internet, among other things, extra interesting.

There are a few things I know I need to do differently next year though. The performance tasks are a big part of what I need to do differently. I gave the Explore task in the start of the second semester. That has to get moved to first semester. That will give me some more flexibility in the second part of the year.

Like a lot of people I made the Create task due at the official “drop dead” date set by the College Board. Huge mistake as panic set in and only an extension owing to system glitches on the College Board site made it possible for all the students to submit. Next year, we’re doing it earlier. No midnight deadlines on a system that will be overloaded.

I also need to work on making sure the students understand the requirements on the performance tasks better. Now I had to be teaching to the test and that is what I’d be doing. At the same time they REALLY need to learn to read and follow requirements. That is an important lesson. That makes me feel better about it.

My students all come in with previous programming experience but what I found this year was that was somewhat uneven. I have to be more aware of the students who are not as into coding as others. APCSP is about a lot more than programming but I don’t want students to miss out on that piece. I may reorder some things in the course around that as well. I need to get more programming in before I assign the Create Task I think.

I still have a bunch of processing to do and I hope to talk to other teachers at the CSTA Conference next month. I figure that knowing I have to do things differently is half the battle though. If you taught APCSP, with the curriculum or with something else, I hope you’ll share what you learned about teaching it in the comments. 

Tuesday, June 05, 2018

Programming Projects–The good, the bad, and the ugly

End of the semester project time for me. All of my programming students have been finishing up[ their self-selected projects and I have been grading. It’s always an interesting ex3ercise. None of the students have much experience designing and writing programs. One thing that is clear is that they don’t always spend enough time planning before they start.

Students often seem to think in small steps without thinking about what steps will follow. Sometimes this results in user interfaces that look great and are fairly sophisticated. Unfortunately, they often haven’t thought about how to implement more of the code behind the user interface. Other times they do think further but not far enough. In either case they run into road blocks because the initial design is just not complete. As ugly as these designs can get it is interesting and challenging to try to develop workaround for them. I’ve learned a few tricks over the years. I only wish we had time to restart from scratch and redesign the programs.

Some of the mort popular projects are easy enough to design and code but can be tedious with the limited background in programming the students have. These designs require a lot of code. That takes time to write and to debug but is usually manageable. What concerns me this year is the number of my advanced students who don’t use language or features that they have taught and should know to use that they don’t use.

No matter how many times I tell students that a list of variables that are differentiated only by a number should probably be an array some students take what they think is a short cut. They are almost always wrong about that. I’ve got  to work on that next year.

On the plus side, some of my students take it upon themselves to learn features, methods, and functions that we don’t have time to cover in class. this year students found a couple I didn’t know about. Modern programming libraries have far too many features for anyone to know all of them. Some of these features will get covered next year as they are more efficient than what I have been using. Others I have to think about how or if I cover them. Sometimes features make things easier for programming but harder for a teacher to instill an understanding of concepts.

Students seems to learn a lot from this end of semester projects. That is great. It’s a real plus when I can learn things from them as well.

Friday, June 01, 2018

Micro:Bits and Teaching Networking

This year i taught advanced Placement Computer Science Principles with a mix of high school juniors and seniors. Because of the schedule I had the juniors for several days after the seniors were done. The challenge was to come up with something useful and interesting to keep them busy and learning.  I looked at the classroom set of BBC Micro:bits and thought – networking! Obvious right? OK maybe not but I had been thinking about the ability of these little devices to communicate using radio signs and this seemed like a good opportunity for some experimentation.

I broke the students in to groups of two and three and asked them to create an app that used communication between two of the devices. Other than pointing them to the MakeCode for Micro:bit app for Windows (in beta - requires Windows 10 though there are also iOS and Android versions) and the MakeCode web site I didn’t give them more instructions. Hey, it’s an AP course!

A few students decided to use the Python editor from the Micro:bit web site but most used MakeCode. The MakeCode students used a mix of the block editing and the JavaScript editing. I think having options was a plus as students worked with what they were most comfortable using.

On one hand the students didn’t quite get to the level of application I had hoped for. I wasn’t any help there so I think I need to dig deeper into this myself over the summer. Time was an issue as well since the end of the year brings a lot of interruptions.

On the other hand, they did learn a lot. Several students told me they learned more sending between actual devices than using a software simulator. The APCS P resources I used have an outstanding simulator which the students did use. The devices made it more real, dare I say solid, to the students. One student suggested starting with the simulator and moving on to the devices for deeper learning.

As I listened to them talk about their projects under development they discussed things like throughput and bandwidth as well as how to encode information. These are all topics we had discussed during the year of course. Here though was a practical application and visuals that really brought things home. There is something about pressing buttons and seeing lights on another device light up that brings extra meaning.

My thinking now is that I will be bringing these little devices out earlier next year. We’ll do some networking with them for sure. Maybe some other projects as well. They seem motivating and interesting. Finding thinks that students want to use, want to learn more about, and which reinforce concepts is a wonderful thing.

Monday, May 28, 2018

Assumptions, Misunderstandings, and Programming Decisions

My beginning students have big problems with writing decision statements. Boolean expressions are a real problem. Most of the time it is because they expect the syntax of a programming language to be close to how they express things in English.

For example, in English one can say “give me a number between one and 10” and it is pretty clear. When they try to say the same thing in programming language they write something like:

if index >= 1 and <= 10 then
if index = 1 - 10 then

Of course neither of the work as students expect. The first gives a syntax error and the second compares index to -9 with is probably never going to happen. Try as I might, there are always some students who get this wrong. It just isn't logical in their minds. They are used to making certain assumptions and filling in some blanks or ambiguities and they expect the computer to do the same. I'm running out of ideas on how to get this across.

The opposite end of the spectrum is when students think something is necessary when it is not. For example, if there are only two options than a simple if/else will work. You do not need and if/else if. I see all sorts of unnecessary comparisons from beginners. Many students get this right away. A few, more than I would like, struggle with this. Generally this sort of code does actually work so it is hard to get students to realize that here is a better way. "But it works!" is all that matters. For someone like me who worked in a time when programmers counted comparisons and had a ready handle on instruction speeds for optimization of memory and performance this is a painful observation.

In some of my classes I have enough time to get into the nitty gritty of this. With my freshmen for whom programming is only part of a quarter it is harder. One of my goals for this summer as I review all of my curriculum is to try to find some more/better/different ways to work on these misconceptions. Parsons Problems may be part of the answer. I have experimented a little with them this year and they seem to help. Maybe some animations will work if I can figure out have to make them. I've already written more specifically about these issues in the book I have been writing for my classes.

I could still use ideas. Surely someone out there has solutions to this issue. Any suggestions?

Friday, May 25, 2018

Can We Get there (#CSforAll) From Here?

When I was in high school (I graduated in 1971 so this was a while ago) there was a computer in the building. If you got an A in Calculous as a junior you could take the computer class as a senior. With 5,000 students in the school and only one computer teaching computer science to everyone was not an option. We’ve come a long way since then and lack of computers is seldom the problem. And yet, not every high school student takes or even has the option to take computer science. The obstacles today are different.

Some of the problems are the old chicken and egg problem. Not enough teachers so we can’t offer the courses. Not enough courses so there is no incentive to prepare teachers to teach it.

Some of the problems are perceptual. Administrators don’t see the need or the demand. Other people see a need for other things first. Or don’t see the need at all. There are assumptions that may or may not be correct about “room in the schedule” or “it costs too much.” We see all of those things debated over and over again. Sometimes the path to getting computer science education for everyone feels like this:


We as a computer science education community are taking several paths. Cities like New York City are moving to put CS education as an option in all schools. Not quite the same as everyone taking it but access is an important first step. It is coming with in-service professional development as well. It’s all great.

Several states are moving in the same direction at the state level. Kudos to Arkansas which is doing outstanding work for example.

The questions then include two important ones: What is the step from CS for many to CS for all? What is the sustainability path?

There are a lot of ideas out there. One is that if we get more universities to require CS for there students CS will move down to more high schools the way things like calculous have in the past. That could help a lot.

The teachers who are being trained now as in-service will be retiring. Some soon, some not so soon. Those teachers will have to be replaced and there is no guarantee that the funding we as seeing today will be around in the future. Perhaps legislatures will declare victory and move on to other things. Clearly we need pre-service education for teachers to be the CS educators of tomorrow.

We’re starting to see some interest in actually doing pre-service CS education but we’ve got a long way to go. And don’t forget the shortage of schools who want/need to hire CS educators. Is there enough pull from schools or push from requirements that schools offer CS to make this preparation worth the interest of schools of education? I hope so but you never know.

Let’s not forget the looming teacher shortage in general either. While teachers in many states are actively pushing for better compensation and other changes to make teaching a better (for various definitions of better) experience the field has a bad rap in many quarters. There is a lot to be said for taking ones CS knowledge and going into industry.

I’m still optimistic. Some days VERY optimistic. My own state of New Hampshire is slowly but surely moving in the right direction. We’ll get to CS for many in the next few years. CS for all is still going to be a big step.

Thursday, May 24, 2018

Why Don’t Universities Require Computer Science?

We talk a lot about requiring computer science as a high school graduation requirement. It is an issue that is not without controversy. (Should Palo Alto students be required to study computer science?) While discussing that article in a Facebook group Mark Guzdial asked an interesting question.

Why are we talking about making CS a high school grad requirement when it’s not yet an undergrad requirement at most schools. Why is it so important at the high school level but not at all at the undergrad level?

It’s a fair question. Shouldn’t colleges and universities require some computer science as part of their general education requirements? If it is important for all high school students, and I think it is, isn’t it even more important for university students? At the university level, students should be able to learn even more and go deeper as well.

This might also have a side benefit of driving more K-12 computer science as school work to prepare students for something they know they have to study in post secondary education.

Wednesday, May 23, 2018

Teaching Through Stories

This time of year I think a lot about how I teach. There is something about the end of the year and evaluating how much my students have (or have not) learned that causes me to think about how much of what they learn (or don’t) is my responsibility. I look at the projects I assigned, the quizzes I gave, the lectures I presented, and every other aspect of teaching. The last few days have been about the stories I tell.

Brett Becker wrote Computing history in the classroom: The cereal box toy that was an early hacking device, and nuclear weapons systems that depend on floppy disks In part, this made me think of my own post on teaching computer history but it also make me think deeper about the how we teach history. History is not taught well as a mere recitation of facts and dates and names. It is better taught as stories. The authors of “Made to Stick: Why Some Ideas Survive and Others Die” write convincingly about the importance of stores for getting information that "sticks" in people's minds.

Teaching computer science is a lot more than just history though. If we want to teach concepts and have them stick shouldn’t we also be finding stories to explore the concepts? I think so. This can be harder than it seems though. The best and most convincing stories involve projects that are harder and more complex than the ones we can assign in a first programming course.

When we talk about avoiding hard coded “magic numbers” and replacing them with concepts I have a good story. Picture a team of four people working for a year on a software package that will spread across 16 computers. They use the number 15 in hundreds of places among thousands of lines of code. One day their boss tells them they need to account for 32 systems not 16. Hilarity ensues. OK hilarity is not the right word. A month or two of editing and testing ensues. This time the team gets smart and uses a defined constant rather than a magic number. Six months later when they are told that 32 is no longer the number but 128 is they change a single line of code and everything works fine.

I think that is a story that works. Well, as much as anything does with high school students.

I use smaller stories all the time but lately I have been wondering if there are longer more meaningful stories I can use for other concepts. They don’t always just come to me spontaneously though. One of the things I’d like to do is collect other stores. After all the smart people learn from other people’s mistakes and not only their own. Wouldn't a collection of teaching stores be a wonderful aid to teachers?

What stories do you tell to make concepts real to students?

Monday, May 21, 2018

Teaching the History of Computing

History is important. We’ve all heard, if not quoted, the adage that “those who do not learn from history are doomed to repeat it.” Mark Guzdial has a blog post (Computer science education is far bigger than maker education) that is almost as much a history lesson as it is an argument for the maker movement as covering only a subset of computer science. In his post, he talks about the big ideas developed by Alan Turing , Ada Byron, Lady Lovelace, and Grace Hopper.
“What Lovelace and Hopper did mattered, and we demonstrate that it mattered by teaching it and explaining why it’s important.”
One of the things we talk about in the course we teach freshmen at my school is the history of computing. Names like Turing , Lovelace, and Hopper come up along with many others. That is good as far as it goes but lately I have been thinking we need to talk history in more courses. How did we get to where we are and how and why?

Erik Meijer, the Dutch computer scientist, told me once that if I wanted to know what the next big thing in computing is going to be I should look at what  was the big thing in computing 20 years in the past. It’s true. Things in computing do move in cycles. I look at the way we do screen/form design now and see ideas I first saw in the Trax operating system in 1978. Cloud based computing is similar to the days when we had remote terminals connected to large mainframes. The whole idea of client/server applications keeps getting reinvented and redeveloped.

The past is a good place to look for new ideas and we forget that are our peril. My students once asked me how I “learned all this stuff” after a history lesson. I replied that I didn’t learn it – I lived it. A lot has happened in the 45 years since my first computer science class as a university student. I’ve gotten to meet and talk to some important people in the development of CS over those years.

But what about new teachers? How will they learn the history of computing? Is it taught in university? I suspect not much of it is being taught. What ideas will be missed because of a lack of historical knowledge and perspective? Am I the only one worried about this?

[Now get off my grass.]

Thursday, May 17, 2018

Can I Plan For Next Year Yet?

My school has a couple of weeks left but it’s getting close. My Advanced Placement Computer Science Principles students have taken their AP exam. My own exam for them is next week. My underclassmen have a bit more to do and I still have some topics to teach them. Soon the underclassmen will be starting their semester summative projects. So other than grading my workload is lessening. Not gone but at least I have some time to think. Thank about what?

While things are still fresh in my mind I am starting to plan for next year. This was my first time teaching APCS Principles so I learned a lot about pacing and scheduling. I need to modify my plan for next year. I want to move the explore task into the first semester I think. The Create Task should be earlier in the second semester because it was much too stressful to have it due right at the “drop dead” deadline with the College Board. I’ve got some work to figure out how to make that happen. I’d like to incorporate some small device programming as well. I want to explore the possibility of teaching networking using Micro:bit which can communicate with each other. I need some time to work on that.

My mobile app development course went well using AppInventor but it was also the first year teaching that course with that tool. I’ve got to clean up the pacing for that as well as thinking about more or better projects for students.  If they release a version that supports iPhones I have to borrow my wife’s iPhone and test it out.

My Honors Programming course has gone very well and I am really pleased with pacing and projects. My collection of resources is a mess though so I need to organize that. I’ve already been filtering through duplicated PowerPoint presentations and trying to build the perfect ones. No doubt I will continue to modify each one after every time I use them but at least I will not have to search through to find the current ones. I want to organize all of my resources by topic unit. If I have time, I want to record short videos on most topics as well.

I wrote a reference guide to C# in the middle of the year and gave it to my students. Now I need to fix all the problems that they found and modify explanations based on what confused students this time around.

Our freshmen course is taught by two other teachers so the pacing and much of the rest is determined as a team. It’s in good shape but I still want to look at organizing the materials a little. And we teach Visual Basic there so I am created a reference book for that using as well. That draft needs review and corrections.

It’s going to be a busy summer. And that is not even including attending the CSTA Conference in July. (Hope to see some of you there.)

Sunday, May 13, 2018

Does It Matter What Programming Languages We Teach in High School

I’m tempted to just leave this post blank and see what sort of comments it gets. But I am incapable of that. Sorry.

Assuming we are preparing high school students for university and other advanced education and not for jobs right out of high school, what difference does it make what languages we teach? After all, concepts are what really matters. It is hard to pick what languages our students will be expected to learn when they get to higher education.

Universities are using C++, Java, Python, Scheme, and who knows what else as their first programming language.Can we teach them all? Not hardly. Often we only have students for a semester or two. If we’re lucky three or four semesters. A few students in a few schools will have more. But still there is an awful lot we could and probably should be teaching them. Overloading the languages is not likely to be helpful.

There is some indication that the second programming language is the hardest to learn so maybe we try to teach two and not worry too much about which two. At least they will be well situated to learn what ever their university professors throw at them.

On the other hand some would argue that with limited time we should go all in on just one. One or two the question becomes which one or two? Does it matter as long as the basic concepts are taught?

Friday, May 11, 2018

Academically rigorous is incomplete without computer science

Mark Guzdial linked to this post on his blog - Feeling disadvantaged in CS courses at University of XXX – Original post at Minimal exposure

Interesting line from the original post: "Although my high school was academically rigorous, we didn’t have any computer science courses."

Maybe we need to decide that calling a high school “academically rigorous” is incompatible with saying there are no computer science courses?

Wednesday, May 09, 2018

Programming is easy. Debugging is hard.

I may be in a minority in this but in some ways the most fun part of my job is debugging student code. Students are very clever at wring code that doesn’t work in obscure ways. Some how they manage to create errors that look like they are in one place but are really in a completely different place.

The end of the year involves a lot of debugging. Students know more ways to do things wrong than every before. It’s a lot of fun. No, really it is.

Now I know that letting students struggle with logic errors is sometimes (often? mostly?) a good thing. On the other hand they usually lack the experience to see the possibilities. In general I find that struggling students are focused on the wrong part of their code. At some point a teacher has to step in and help out a little.

Today I had a student working on a Pong program and it was not recognizing when the ball hit a paddle. He was looking at the speed of the ball, the arrangement of the code, the working of the if statements and generally focused on a lot of different code. The problem could not be with the IntersectsWith method of the rectangle class. That is part of the system library so it must work. Right?

Maybe we are not updating the location of the rectangle in the right place and time? Maybe we’re checking in the wrong place in the code? Maybe it is a timing problem?

In the end it turns out that all of the code was correct EXCEPT that he was updating the height and width when he should have been updating the width and height. Yes, the order of the parameters matters. I’m kicking myself that I didn’t check that first but at least I did think of it eventually. Next time I will check that first.

And to think I posted a somewhat related post last week (My Code is the Same as Yours But Mine Doesn’t work ) Sigh! I should have known better.

Tuesday, May 08, 2018

Visual Studio Live Share–Something CS Teachers Can Use?

Microsoft is having their big MS Build event this week. I don’t have time to watch it live but I have been seeing hints of things via social media. Most of what they are talking about it for professional developers and is far more advanced than what I have time to get to with my students. But sometimes there are things I can really use. Visual Studio Live Share looks to be one of those things.

With Visual Studio Live Share two people can actually look at and work on the same code at the same time. Merge that with a Skype call and it is like being there. Think Google Docs for Visual Studio. (Someone will object to that characterization for sure.)

So far I have just tried it locally (two computers next to each other with me operating both) but I can see some educational uses. For one thing I can see sharing code with students and having them work on code I have on the screen from their own desks. I can also see easier pair/team working in rooms that don’t lend themselves to a lot of student movement. My tables don’t move and things can get crowded if people mover around too much.

I can also see using it to help students with their own work. Now in the classroom it may still make more sense to walk over to where the student is working. On the other hand if a student is working from home we now have a great way to work together.

I’ve been thinking about using it to watch students as they code (with their permission and their controlling the share) from time to time. That may give me some insights without being quite as intimidating as literally looking over their shoulder. For those students who pretend to be working this may be just the thing.

There are likely to be more ideas that others come up with. Time will tell. At least for now I have a few ideas worth trying out. What do you think? Do you see some educational potential?

Thursday, May 03, 2018

My Code is the Same as Yours But Mine Doesn’t work

Image for Twins the movie

We're all heard it from students "My code is the same as yours but mine doesn't work." The implication is clear – it is the computer's fault that the program doesn't work. Of course something is always different.

Often times it is a small difference. A student confused and lowercase l for a 1 perhaps. Or the is an extra or a missing semi colon. Sometimes the problem is in related code that the student hasn’t though to check. One thing I see a lot of is students referencing form objects (a button or a textbox) that they didn’t name the same way I did. Trying to reference txtName.Next as my code does will not work correctly if their textbox is still named textBox1.

Computers are picky that way. Names matter, semi colons matter, and many other little details that our minds easily fill in for us are not obvious at all to the compiler. Nor are they obvious to students. Students rush. They take shortcuts. They are used to things working out. Computers don’t work that way. Sometimes I think the hardest thing about learning to program is to understand that details matter and that sometimes you have to look in less obvious places.

Students are used to quick fixes though. The TV  murder is solved in 60 minutes (45 minutes plus commercials). The family crises is solved in 30 minutes on TV. Real life is not like that and programming is real life. I hear over and over again that research doesn’t support the idea that teaching programming automatically teaches problem solving. I have to wonder though if at some point debugging doesn’t click into the idea that details matter and that you need to look beyond the obvious answers.

Monday, April 30, 2018

Are You In On the Social Media Conversation around CS Education?

Today is the absolute deadline for my students in Advanced Placement Computer Science Principles to upload their Create Performance Task to the Digital Portfolio. One of my top students was having trouble getting a file to upload. When he told me that I remembered that some teachers had talked about similar problems in the Facebook AP CS Principles group. A quick look (fortunately my school does not block Facebook) and I had the solution. Apparently short filenames work best. Problem solved. Student work submitted. I’ve seen a lot of problems solved for teachers via conversations in various Facebook groups.

Besides the group for AP CS Principles teachers there is a group for AP CS A teachers, one for Computer Science Education: Researchers & Practitioners, a general Computer Science Educators group, and don’t forget the CSTA group. I’m sure there are other groups that are useful. I know that several CSTA Chapters have their own groups. Are you a member of one?

There is more than Facebook though. There are frequently interesting conversations going on with CS education blogs. Sometimes these conversations take place in the comments. Sometimes through posts in one blog that reference posts in a second. Or more. Some of  the best take place in blogs by:
I’ve seen posts in several of these that refer to posts by others either directly or indirectly. For example, a recent post by Mark Guzdial wrote Lack of funding leads to lack of teachers leads to lack of CS classes: We may need to change our strategy. Mike Zamansky made a case that time and money are not as big a problem as prioritization and will in a post called Is there room for CS for All. Garth Flint addressed some of the cost factor in a post called CS on the Cheap. Garth also referred to a book and a video that Doug Bergman blogged about. You’ll find comments on most of these posts as well.

Are you following these blogs? Maybe you want to add to the conversations either in the comments or by firing up your own blog?

csk8Don’t forget Twitter either. If you are a K-8 CS teacher you will want to follow the #csk8 chat. This week it is about Scratch.

No matter how you do it there is a lot to learn by sharing with your peers via social media. Jump on in the water is fine.

Edit: Note that my full Computer Science Education blog roll is at

Thursday, April 26, 2018

Computer Science K-12: Imagining the possibilities!

My friend Doug Bergman has a new book out called Computer Science K-12: Imagining the possibilities!

I reviewed drafts of the book while it was being written and I can tell you there is a lot of good stuff in it.

Doug BookFor teachers new to Computer Science who have been charged with starting a new class at your school, and just don't know where to start. I'll walk you through what you need to be considering such as which technologies, what type of curriculum, student recruitment, professional development, connecting with other CS teachers, and pedagogy.

For school leaders, board members, and decision makers who need to know what Computer Science really is, what it looks like in the real world, and what it can look like in education-- this book will guide you through many of those early questions as you consider if, how, and where Computer Science fits in your schools: What are the attributes of successful CS teachers? Where can I hire teachers? Do I need "experts" in CS? How do I evaluate a project-based class? Standards? Training for new teachers? What successful programs can I look at for ideas?

For those experienced CS teachers who are just not seeing the energy and engagement in your classes, this book will be a wealth of innovative ideas and strategies to help you engage differently with your students.
Technology today is interactive, engaging, and dynamic; Computer Science classes should have that same feel. You'll see how to create a student-centered classroom where students lead their own learning.

Wednesday, April 18, 2018

Arrays, Loops, and Racing Horses

One of the things I like about using Visual Studio and C# (and Visual Basic for that matter) is the ability to easily create some fun graphical projects. I’ve been using variations of the horse race program for years now. I though it might be fun to share my latest use.


Students sometimes have trouble seeing the benefits of arrays because they are used to small projects that can get by without them. I want them to see how the combination of loops and arrays make expanding programs easier.

My students were given a mostly empty project with the objects you see in the image above already part of the project. I don’t want them to get lost in setting up the GUI. There is a “Race” button, a “Reset” button, four picture boxes, and the finish line (a nicely formatted label.) No code though. We’ll create that as a class.

The first thing we do is allocate an array of three picture boxes. Next we assign the value of the existing picture boxes to the array. We talk about how the picture boxes now have two names or two ways of addressing them. This is related to people’s names – formal name, nickname, etc.

public Form1()
     Horses[0] = picHorse0;
     Horses[1] = picHorse1;
     Horses[2] = picHorse2


The naming I use (I hope) drives home how identifiers that differ only by a number at the end leads one naturally to thinking about arrays.

We write code to move the “horses” random distances each time a timer fires. Using timers is not absolutely necessary and I have used while loops but timers open some ideas for interesting projects. The “Race” button enables the timer and the horses start moving by changing the Left properties by random numbers of pixels..

for (int index = 0; index < Horses.Length; index++)
     Horses[index].Left += r.Next(3, 8);

Next we add the code to check to see if the Left property plus the width of the box crosses past the left property of the finish line.

Students are asked to figure out the Reset button on their own and most do so easily. At this point we’ve had a lot of discussion about the code we’ve written so far. Next I ask them to add more horses to the problem. They soon discover that this is a fairly trivial task because of the way we have designed the program.

Since we get to work with interesting arrays and see how setting up loops we cover some important topics. Best of all, students seem to like this project.

There is room for student creativity as well. Some add only a few horses, some add many. Some get fancy with reporting winners. Some explore other images from what I provide. Others decided they wanted that last place horse to disappear before the next race. That involved a lot more work then they expected but they were motivated to try things. But no one, including me, get bored.

Tuesday, April 17, 2018

Training The Next Generation of Computer Science Teachers

The biggest problem in computer science education is training the teachers we need. That seems to be the big thing on my social media in the last few days.

This past week was a major document release in New York of "Priming the Computer Science Teacher Pump: Integrating CS Education into Schools of Ed”. Mark Guzdial wrote about it here. You can also download the actual report here.  Mark also shared the slide deck from the event on Slideshare here. If you don’t have time for the whole report the slides make interesting reading as a sort of summary.

It has been clear to many of us in CS education for a while that we really need schools of education to step up and prepare CS teachers. This report addresses what is needed with some solid recommendations. This being computer science education, others are tossing in their opinions.

Mike Zamansky, who was at the release event, gave some of his thoughts on his blog at - Math For Math Teachers - watering down CS Ed before we even start. Mike comes from a heavy CS background and many years teaching at a highly rated, entrance exam, public high school in New York City. That gives him a particular perspective.

Garth Flint, who teaches as a smaller private Catholic K-12 school in Montana, wrote a blog post on the subject - CS Ed – to water or not to water, that is the question which really covered the situation for a lot of teachers especially those in rural areas and other smaller schools. 

It’s a different perspective from Mike’s. One is not better than another – they’re just different. In a sense those two posts show some of the diversity of educational environments we’re seeing in computer science education.

Preparing teachers for this wide range of needs is definitely going to be part of the challenge. I can’t see a one size fits all CS teacher preparation scheme working. There is really going to have to be some local variation as well as consideration as to different age level preparation. I’m not sure one can easily prepare for the full range of Kindergarten though Advanced Placement Computer Science. Content is one thing but the how to teach is another.

OK, now there is something of a roadmap. Will schools of education move into this space the way we need them to do? We’ll see I guess but I hope so.

Friday, April 13, 2018

Teachers For Now or Teachers Forever?

One really can get a lot out of following Twitter hashtags from conferences and other events. Today I saw the following Tweet:


This in a nutshell is the concern with a lot of current efforts to prepare computer science teachers in a hurry. Yes, you can teach a teacher to teach a specific course and you can give them a lot of scaffolding and tools to get by. They may even see great results. But what happens when things change?

My school has something like 20 different courses in the Math department. Can you imagine hiring a teacher who could only teach one of them? Even one that is a soft of default course? Seems like a long shot. We want our Math teachers to be able to teach a range of courses. We want that not just so they can be moved around as needs change or to give them diversity during the day but because we want teachers who know where their course fits into the whole curriculum stream.

Shouldn’t we want that for computer science teachers. The #Home4CS event, from what I can tell from Twitter, was about preparing pre-service computer science teachers in university schools of education. One can easily find Masters degree programs in teaching English or teaching Math or teaching other sciences. A MS is Teaching Computer Science? That’s a bit harder to find. That’s really going to be essential if computer science education is going to grow and mature the way we really need it to develop.

Content knowledge is absolutely critical for teachers to be able to continue as computer science changes. It’s necessary but not sufficient though. Teachers need to know how to teach computer science. It’s not the same as other subjects. Yes, people with deep content knowledge can learn to be good teachers. And teachers can pick up content knowledge and develop into good CS teachers. Learning content AND how to deliver it before starting in the classroom would be a huge advantage. It would be better for teacher and students alike.

It is not going to happen until schools of education start making a home for computer science educators.

Thursday, April 12, 2018

Can We Afford a Digitally Illiterate Congress?

Like many people I found the Zuckerberg Congressional Hearings disturbing on several levels. Yes, there are some serious issues with Facebook and other Internet services with regards to privacy, security, and social impact. We clearly need to deal with them. That is probably a topic for more discussion and blog posts. The lack of understanding of how technology and the Internet works on the part of people who can and likely will pass laws about them was also deeply concerning.

Doug Bergman talked about this at length in his post “The Elephant in the Room.” That’s a great read and I recommend it highly. But I have to stick in my own two cents.

Someone asked me if we required deep aviation knowledge in the members of Congress who questioned Howard Hughes. I think their point was that we don’t expect our Congress people to be deeply technical on all subjects that come before them. That’s a valid point  but at the same time we would hope that they would consult with experts before making decisions. And frankly some of the questions should have been general knowledge and were not deeply technical.

A lot of people who disturbed when Senator Hatch asked how Facebook could maintain a business model where its users didn’t pay for the service. I know I was. Advertising support is a model that predates the internet. It’s a model that allows us free radio and TV for example. To not know that this is how Facebook supports itself is worrying to me.

That and other questions could have been and should have been explained during staff preparation of the Congress people while they prepared their questions.  They are pretty basic.

These hearings were one of the best arguments that everyone needs some computer science knowledge. Not just the computer people. Not just the STEM people. Everyone! And just maybe, with the way things are going,  its particularly important for those planning on a career in politics.

It also seemed that several people had trouble understanding the answers even though Zuckerberg tried to make them simple. It seemed like one Congress person had no real understanding of what an encrypted message was about. That’s not just a Facebook or even internet thing. Though we do often discuss it in digitally literacy units (I know I do.)

Monday, April 09, 2018

Why Programmers Need To Ask Questions

I keep seeing suggestions that people don’t need to learn programming because computers will do it better. I am skeptical. In part I am a skeptic because I have been hearing this sot of thing for scores of years and I don’t think we’re getting close to this that quickly. But more importantly I worry that it will take language processing a long time to get good enough at understanding people and language.

For example you may have seen this old joke:

A wife asks her husband, a software engineer "Could you please go shopping for me and buy one carton of milk, and if they have eggs, get 6!" A short time later the husband comes back with 6 cartons of milk. The wife asks him, "Why the hell did you buy 6 cartons of milk?" He replied, "They had eggs."

I like to share that with my students to help them understand ambiguity in language. Today I saw this somewhat macabre version.

write letters

I’m still not 100% sure I want to use this one in class but it does highlight the risks of unclear speech.

One of the things I learned developing applications early in my career was that users use language that works for them and for people in their field but which may not be clear to others. It is important to understand their vocabulary, their understanding of the tasks, and how they work. Without a common set of assumptions trouble is an unavoidable result.

In the first joke above there is no clear connection between eggs and milk and bad assumptions are made. I’ve learned to question my wife closely about the shopping lists she gives me. Things that are totally clear in her head may be totally opaque to me.

Will computers be able to know how to ask the right questions? Or will they make assumptions of their own? I’m guessing this will take a while to work out. In the mean time we, people, are going to have to be very careful about how we instruct computers.

Friday, April 06, 2018

Idealism and Computer Science

Idealism is a good thing. Well, mostly it is. This morning I heard Facebook COO Sheryl Sandberg say that Facebook was too idealistic about somethings and that lead to the current Cambridge Analytica scandal. In another interview she said that Facebook was told by Cambridge Analytica that they had deleted their data which turned out not to be true. But Facebook trusted them.

When people have good intentions they tend to assume that others also have good intentions. The very early computers and Internet had very little in the way of security. Most people had only good intentions and assumed that everyone else had them as well. Why secure things if you are sure that no one will misuse them?

One of the things I learned early in my career is that any program of any size and complexity can be used in ways that the people who created it never intended. We’d all like to assume that no one would using things in bad ways. Alas, this is not the case.

These days we teach a lot about being safe with computers and protecting data. It’s a complex problem and one that I think students don’t always absorb as well as they should. Idealism is strong in the young even though there is evidence of people acting badly all around them.

Many of us get into the field of computing as a way to make the world a better place. Facebook wants to connect everyone in the world to build community. Google wants to index all the world’s information to make it accessible and available for everyone to learn.  Most companies at their core have some ideal of “good” as their mission. This is especially true of many companies, like Google and Facebook, that are founded by young idealistic people.

Somehow we have to get people to understand that there are people who will misuse data and we have to find ways to minimize the negative aspects while enabling the positive. And we need to start with the young so that they can continue their idealism and ideals and at the same time protect the people they are trying to help.

Thursday, April 05, 2018

Thoughts on where CS education tools come from

TouchDevelop is being retired. It’s not the first tool with educational use to be retired by Microsoft. Or from other companies either. While I have used TouchDevelop with my students I was getting ready to move to MakeCode anyway so it is not a fatal move for me by any stretch. I know other teachers who have been using it more extensively who are going to feel some pain though.

I tend to divide CS educational tool sources into four categories.

Professional tools that are useful in education. In this category we see things like Eclipse, Visual Studio, and other development tools that are being used to create real products. These tools are not going anywhere anytime soon. Companies, both those that use them and those who create them, have a vested interest in supporting and improving them.

University developed tools. This includes things like Alice and Scratch but also BlueJ and Snap! and, well, far too many to mention. These are also likely to stay around for quite a while. People tend to build careers around them and use them to attract graduate students who use them, enhance them, and generally want them to be around.

Education companies. Companies like Tynker and Birdbrain are included in this group. As long as these companies can make enough money to keep going their tools will be around.

Industry Research Projects This is often the most state of the art and cool new things. On the other hand they are the least to be around for a long time. AppInventor was originally one such. Fortunately for educators who adopted it, when Google was done with it they were able to hand it off to a major university where it continues. TouchDevelop is another. Hear though, when the researchers moved on to new ideas there was no similar handoff. Both the Touch Develop web app and cloud backend are open source under the MIT license:

There is no indication that anyone is going to take it on though. I always assumed this day would come to be honest. Industry research groups have changing priorities and in some ways that is a good thing. I could argue it is a very good thing in terms of advancing the state of the art in computer science. It’s sad for us in education who aren’t always as quick to adjust as industry is.

As one tool fades another grows. MakeCode is pretty cool and there is a lot there learned from TouchDevelop, the Micro:Bit and educational uses of them both in there. Microsoft is developing a sprite-based game engine for MakeCode and a new course on game programming, in the spirit of CCGA (an interesting curriculum based on TouchDevelop.). One hopes it will be available in some form for teachers to learn it this summer.

I’m not sure where the materials developed by fit into my classifications though. They are a non-profit with industry funding but they are neither industry or academia.  They have some great stuff though. I am using their CS Principles program for example. Chances are I’ll retire before they “go out of business” so I can probably depend on them plenty long enough.

Nothing lasts for ever though and change is the most constant thing in computer science. So we have to learn to adjust and change our tools and our curriculum, probably, a lot more often than educators in other disciplines. At least we’re not going to get bored.

Wednesday, April 04, 2018

Phillips Academy Capture the Flag 2018

Those of you with interests in working on cybersecurity with your high school students this Capture the Flag event will find this to be of interest.

PACTF is back! PACTF 2018 begins Monday, April 16. Like last year, PACTF will work around your schedule and have a challenge for you, whether you’re a seasoned CTF veteran or just beginning. This year, we are proud to offer over $20,000 worth of prizes to the top 150 teams.

Short for Phillips Academy Capture the Flag, PACTF is a computer science and cybersecurity competition for high-schoolers. PACTF is brought to you by Amazon, DigitalOcean, and JPMorgan.

There will be two week-long rounds: from April 16 to April 23, and from April 23rd to April 30, 2017. During each round, you can pick any 48-hour span to compete with your team.

Registration is open — sign up now!

Happy hacking,
The PACTF Team

How To Teach Computer Science

How can I do a better job of teaching computer science? It’s a question I ask myself just about every day. There have been two big influences on my teaching style. The first was my first computer science teacher – Wally Roth of Taylor University. One thing we know is that most teachers tend to teach the way they were taught and using  what worked for them. That doesn’t work for everyone and worse still it ignore changes in knowledge of pedagogy and culture. During my first round of teaching I knew that I was not doing the best job possible. The best I could do with what I knew sure. But I knew I didn’t know enough. Nine years at Microsoft traveling around the country and meeting with other teachers taught me a lot. Much of it I use regularly today.

More recently I have been influenced a great deal by Mark Guzdial. Mark actually researches how to teach computer science. Not just “hey I think this is cool so teach this way” but actual scientific, peer-reviewed research. I use ideas from him all the time. His blog is a must read for me. 

Recently he gave a talk (viewable here on a lot of what he has studied. A couple of highlights are:

  • Teaching in context
  • Asking students to make predictions during demos
  • Sub goal labeling
  • Using examples and Parson’s Problems

As I learn more about how to use these techniques and figure out how to fit them into how I teach I am using them more and more. I recommend the video as there is a lot of good information in about 45 minutes of talk.

Tuesday, April 03, 2018

Digital Thinkers?

This message from Brian Aspinall was floating around in my social media the other day and it really resonates with me.

problem solvers

I’ve long said that we don’t need to teach computer science to create more computer programmers (coders). Now teaching computer science or programming does not automatically make people better problem solvers even if we want to really believe it does. But at least it adds another tool to the tool box.

I’m not sure I know what a “digital thinker” is but I am sure we need people who understand computer science. We are depending on computer science to help us solve an awful lot of problems these days. Leaders of the future are going to be in bad shape if they don’t have some understanding of the power and the risks of computer technology.

Monday, April 02, 2018

Is Computer Science Hard to Learn?

It’s been close to 45 years since I took my first computer science course. I really struggled with the first program. OK someone mostly wrote it for me. The third program we worked on together and the third I mostly wrote for the other person. People do seem to learn computer science at different rates. By now a lot of it seems easy. Programming in particular seems pretty easy.

It doesn’t seem to be so easy for students though.  Is it harder now or do I just not remember how hard it was when I started?  Does it take special motivation?

That’s just one thing I started thinking about while listening to Don Wettrick’s podcast with Doug Bergman and his students.

Doug Bergman: The Case for Computer Science in School’

Lots of good stuff in this podcast. Well worth the listen.

Thursday, March 29, 2018

But I Digress

Students sure are good at distracting teachers from the main topic. Especially if they have a teacher who likes to talk. I confess that I am someone who likes to talk (ok stop laughing those of you who know me.) I tend to think that some digressions are a good thing though. Sure it is not very helpful if students get me talking about my wife or grandson (or my son the principal for that matter.) On the other hand sometimes the best lessons come from a little digression.

Yesterday we were talking about validating data – specifically people’s names which are more complicated than many students realize. That alone can take on far afield. From there we moved on to validating credit cards and from there to validating passports. Yep, we got into check digits which I actually think is an important computer science topic. A few minutes to get students  thinking about that is a good thing.

Some years ago a discussion on loops lead to an unplanned set of examples of loops coded in multiple programming languages including Assembly language. A year later a student returning from university told me he thought that was the most valuable lesson of the course. I guess that worked out well.

Sometimes we as educators get a little too attached to our lesson plans. We MUST cover what we have planned for that day in just the way we have planned. We only have so many class minutes and a lot of stuff to cover. Over the years I have concluded that, at least for me, sometimes it is not just ok but very beneficial to digress a bit from the plan. Spending some time on something that students are actually interested in and curious about seems to help the rest of the material to go down better. Serendipity (a word I learned by chance when I was in high school) is a good thing.

As educators we have to be open to taking advantage of serendipity when it aids learning. Given just how much there is in computer science and how much more of it is then we can possibly teach in the time allowed this serendipitous learning may be the most important learning of all.

Wednesday, March 21, 2018

The Problems With Small Programming Projects

Most programming projects for beginners are small ones. They are focused on a specific concept that is under discussion. They are often forced in the sense that a professional programmer would seldom write them they way students are asked to write. They are concept examples or exercises. Often they are also boring. Mike Zamansky wrote a nice post about teaching refactoring  in which he says “Beginners work on small "toy" which don't lend themselves to good software development practices and later on, there's so much other material like algorithms, data structures etc. to teach and learn …”. And he is so right about that.

One of my favorite courses to teach is called Honors Programming which is only a semester long. I have some fun projects but most of them are small ones. Just when we get enough of t he basics to make really interesting projects the semester ends. In one of the Indiana Jones movies, Professor Henry Jones says  “You left just when you were becoming interesting.” How appropriate for my single semester course. I often wish I had a second semester to just take on a couple maybe two, maybe only one, that would really let us get into someone big.

I’d really love to dig into concepts like refactoring, real top down design, user written classes that have serious meaning and importance, code reuse, unit testing, and of course real planning. Multi-person projects would be great as well. I do some of that with smaller projects but there is so much more than can be done with a project of real size.

The existence of the AP CS courses makes a course like this hard to fit into the schedule. Yet another reason I am not a fan of AP CS. Heavy sigh.

What’s it like at your school? Do you feel the need for large scale projects or do you get to do them? Or do you think small projects are enough for now (high school?) and they’ll get to large projects later? Hint: Small projects are a thing in most higher ed programs as well.

Tuesday, March 20, 2018

Should We Do More With Spreadsheets in CS Education?

The Microsoft Research podcast has some very interesting interviews. One of them is How Programming Languages Quietly Run the World with Dr. Ben Zorn There are many fascinating things in this interview. Internet of things, security, software verification, and this interesting line:

So, by numbers, spreadsheets actually are the most important programming language in the world.

You really should listen to the whole podcast or read the transcript get get all of the value from it. I was fascinated, especially by the Internet of Things and security discussion. But the talk of spreadsheets is what I want to think about today.

I think many of us who teach computer science under estimate the importance and value of spreadsheets. They are ubiquitous today and are at the core of many things in business, industry, and even in our daily lives. At my school we teach them for a few days in our freshmen course. We don’t get very deep into them though. About the most computer science like thing we cover is if statements and conditional formatting. It’s a start but we are really only scratching the surface of what spreadsheets can do.

Given how many more of our students will be using spreadsheets later in life compared to how many of them will be serious programmers (using things other than spreadsheets anyway) should we be teaching them more? Or teaching them how computer science and programming are useful in spreadsheets?

I don’t know where this all fits in, or should fit in, to computer science curriculum. Should it be something that is taught by other departments with domain specific examples and issues? That would probably be nice as it would seem more relevant to more students. Teaching things in the abstract seldom “grabs” as many students as teaching in context does. But are teachers in those domains prepared to teach these things? At the university level, probably, especially with adjuncts with industry experience. At the high school and younger levels I am less confident.

So I have some thinking to do. I hope you’ll do some thinking about this and leave some thoughts in the comments. Let’s work on this idea together.

Monday, March 19, 2018

Advanced Placement Computer Science is a necessary evil for #CSforAll

Two controversial assertions in that title. That APCS is necessary and that it is evil.  I thought about leaving this post at that and seeing what sort of conversation started but that didn’t work on Facebook so I figured it would not work here either.

To start things off I should say that I am not a fan of the AP CS program. It’s too limiting. It is too tied to an end of the year test for me. The AP CS Principles course has more freedom than the AP CS A course does but still depends on an end of year test (and two performance tasks). Those performance tasks take up a lot of class time. I really like project based learning and I would love to have more time for larger projects. APCS courses suck the air out of the environment for other, more interesting to me, long term (year long) courses. I think there are better ways to prepare students for later CS education and careers. That’s the evil part.

On the other hand, the Advanced Placement brand carries a lot of weight with school administrators, school boards, parents, and other interested parties. It’s often an easy sale to these people as an argument for a new CS course.  If  we want to see “CS for All” APCS can be very helpful. But is is still necessary?

We have some well accepted starter courses in high school CS. Exploring Computer Science for one. Code.Org’s CS Discoveries is gaining some fans as well. They’re both good starters. In some ways I think they may ultimately lead to more high school Computer Science than AP CS will. But we’ll always want an advanced course to be the capstone of sorts. Should AP CS be that course(s) or should we have something more open-ended and less constrained by an exam?

What would you like to see at the top of the high school CS curriculum? Is AP CS the right answer? Is it a necessary course?

Friday, March 16, 2018

Impressive High School Computer Science Students–Made or Born?

ACM and the Computer Science Teachers Association (CSTA) announced the winners of the 2017-2018 Cutler-Bell Prize in High School Computing recently. Five students from four schools were given this award this year. One of the students was from a public school. The rest from independent schools. The public school has magnet programs but I don't know if the winner is part of those programs.

What does that mean? My best guess is that independent schools allow more flexibility for projects like this. Not just independent schools of course, schools like the Bergen County Academies and schools like Thomas Jefferson in Virginia clearly have a lot of flexibility, extra resources, and are open to encourage things like this. TJ had an awardee in both of the first two years of the award for example. But they are exceptional schools in more ways than one. They are not your typical public school. Looking back on the first three years of awards almost all of the awardees have been from either independent schools or public magnet schools.

It’s not just computer science though. Take a look at the schools who have had the most awardees in the Westinghouse-Siemens research competition. You'll see some familiar school names there. Most of them magnet schools.

My friend Mike Zamansky (blog Twitter) ways these awards say more about the students than the schools. I’m sure that is the case to some extent. But why so many of these students from magnet or independent schools? I think environment is important. If it were all about the student we would not see these clusters of schools that produce an outsized number of awardees.

I don’t know if the motivated students choose these school or the schools themselves develop this motivation. What I do think is that these schools have the flexibility to enable and support these students.  They also have a history of producing “winners” and a culture that sets high expectations but also provides help for students to meet those expectations.

Sure students from “regular” comprehensive high schools can and do earn these awards. That is not the way to bet though. The question in my mind is how to we add the flexibility and support to more students at more schools?

Thursday, March 15, 2018

ACM and CSTA Announce 2017-2018 Cutler-Bell Prize Student Winners

Some cool projects which you can read about here.

For more information about ACM/CSTA Cutler-Bell Prize in High School Computing, visit or

ACM and the Computer Science Teachers Association (CSTA) have announced the winners of the 2017-2018 Cutler-Bell Prize in High School Computing. Five high school students were selected from among a pool of graduating high school seniors throughout the US who applied for the award by submitting a project or artifact that engages modern technology and computer science. A panel of judges selected the recipients based on the ingenuity, complexity, relevancy and originality of their projects.

The Cutler-Bell Prize promotes the field of computer science and empowers students to pursue computing challenges beyond the traditional classroom environment. In 2015, David Cutler and Gordon Bell established the award. Cutler is a software engineer, designer, and developer of several operating systems at Digital Equipment Corporation. Bell, an electrical engineer, is researcher emeritus at Microsoft Research.

The winners are Sreya Guha, Castilleja School, Palo Alto, California; Amir Helmy, Eastside High School, Gainesville, Florida; Amy Jin, The Harker School, San Jose, California; and Benjamin Spector and Michael Truell, Horace Mann School, Bronx, New York. The winning projects illustrate the diverse applications being developed by the next generation of computer scientists.

More at

Tuesday, March 06, 2018

Learning By Coding

Throughout my career I have increased my knowledge by working on projects. As a teacher who teaches mostly beginners I don’t see a lot of complicated code. No I take that back beginners write lots of overly complicated code. What I don’t often see, because I don’t often need, are new language features, library routines, or good new ways of doing things.

Now sometimes I have students show me new things. Sometimes they stumble upon them. Sometimes they  go on the internet looking for ways to do things. And sometimes they learn them from parents in industry. These are all good things but sometimes I still feel like I am stagnating. That I am not learning enough. Perhaps even falling behind.

This last week was school vacation. That means time to think ahead and to look at things differently. I did a bunch of reading. Mostly I read papers from SIGCSE. Yes, I pay money for the privilege but its worth it to me. I also wrote some code.

I’ve got to grade Explore Performance Tasks from my AP CS Principles students. Since feedback is important I decided to write a program to help me generate that feedback. What was involved isn’t really that important. In fact I suspect that writing the code isn’t going to save me as much time as it took to write the program.

What is important, to me at least, was that I explored some new things. A new Windows Forms object (CheckedListBox for the curious) for one thing. I also got in some practice with ForEach. That’s not new to me of course but I did think about it in some new (to me) ways. It probably doesn’t seem like a big deal. It’s not going to get me a raise or a new job or even add something new to what I teach in my current classes. On the other hand it is the sort of thing that helps keep programming fresh, interesting, and fun for me.

It may turn out that some student will come to me with a problem that needs just the sort of things I played with last week. That would be great. But even if not, continuous learning is a good thing.

Monday, March 05, 2018

Let The Computer Grade the Projects

It seems like a great idea – have the computer automatically grade student projects. Save all that boring work. Looking at all those projects is a pain. Why not have the computer grade them? It’s what happens in a lot of courses. Harvard’s CS50x online version does it so it must be great. In fact  a lot of huge courses in major universities use automatic grading software. What could be wrong about all of that? I confess that its a very tempting idea at times.

I’ve played a little with software looking at projects with some simple HTML projects. For rote stuff like making sure all tags are present and that open tags have matching closing tags is pretty straight forward. I still want to open the pages in a web browser to see what they look like.

Programming projects? I’m not so sure about automated testing for students. Mike Zamansky blogged recently about a session at SIGCSE (Sigcse2018 - Malloc Lab) where a professor had to deal with students gaming the grading system. This is one of my biggest concerns with automatic grading software. It is easily “game able.”

Getting to the destination is only part of the story. It’s pretty important to understand how students get the results they get. We, as educators, only learn so much by seeing the results of a program. We really need to understand how the programs process inputs and generate outputs. When we read student code we learn a lot about our students. We learn what they know and don’t know.  We learn how they implement algorithms. We also see what they understand and don’t understand. In fact we also get to know our students better. We learn their coding the way English teachers learn student's writing

Students benefit as well. We can give them a lot more feedback than automatic grading routines can give. We can also modify how and what we teach based on what we learn from reading their code. So for now I think I will put up with the extra work. The extra benefits are worth it.

Thursday, March 01, 2018

Registration Now Open for Computer Science Teachers Association’s 2018 Annual Conference

The Computer Science Teachers Association’s 2018 Annual Conference will take place July 7-10, 2018 in Omaha, NE. Don’t miss out on this world-class professional development opportunity, and the ability to network with peers in the computer science education community. Register today at:

I’ve taken a look at the conference program ( and it looks amazing.

Monday, February 26, 2018

Cyber Security or Just Good Program Design?

People continue to share things that they learned at SIGCSE online. Recently Ria Galanos, from Thomas Jefferson HS, shared Cybersecurity Modules: Security Injections|Cyber4All @Towson These ae a bunch of modules for teaching about various security issues like integer errors, Input Validation, and buffer overflow. Examples are in a number of languages including C++, Java, and Python. Looks like great stuff really.

From what I understand the majority of security vulnerabilities in software are a result of one of these three types of errors. Clearly they are important concepts but we don’t spend a lot of time talking about them in beginner classes. That probably needs to change.

It seems like we keep adding things to what we should be teaching beginners. Ethics, Accessibility, Security, and let's not forget the stuff for the AP Exam. How do we fit it all in?

Ultimately we have to do things in parallel. I think we have to think about ethical computing, safe programs, and accessible software as all part of good, solid program design. I think it is a mistake to think about all of these things as separate units to be taught in isolation. Projects can be created that integrate security, accessibility, and more by defining them all as good design. Not something special to do just for security or just for accessibility but for sound design.

Now to go look at my projects and see how to do all of that.

Friday, February 23, 2018

Accessibility and Computer Science

I’ve been following, as much as one can, the SIGCSE conference via Twitter this week. One of the comments I read talked about how many places don’t teach accessibility because they don’t see it as part of computer science. I can see that – sort of. On the other hand, accessibility is really an important part of human computer interaction and few fail to see that as an important part of computer science. Human-Computer Interaction is one of the 18 Knowledge Areas discussed in the CS 2013 Final Report

These days are we increasingly recognize diversity as important in teaching computer science I think it is important to realize that accessibility is essential for improving diversity in all areas. That means it should be included in any discussion of Human-Computer Interaction.

Speaking of HCI, the video below is a fun and useful look into what HCI and good design means. It was shown at SIGCSE by Tim Bell of Computer Science Unplugged.

Thursday, February 22, 2018

Modeling Good Coding Practice

Facebook showed me this cartoon this morning.

Programming alone

Teaching computer science means you are often programming while someone watches. I confess that I have been known to write something “quick and dirty” but that is not really an option for anything that students might ever see. Or really anyone else might see. “Do as I say not as I do” really doesn’t work for anything.

Generally I’m pretty careful about how I write code while I am doing a demo or creating a scaffold project for students. It requires a few extra minutes but I think it is important to model good practices. I think I have to make a point of explaining why I am taking those extra steps as they are not obvious to beginners.

Sure it seems unnecessary to rename a label box when there is only one label box on the form. Or to change the text property of the form. Or any one of a number of things that appear to be cosmetic and that don’t keep the program from working. But habits are important.

I remember once asking my father why we had to have perfect table manners at home where no one could see us. My father explained that by developing the good habits at home we would be less likely to mess up in public. It’s a lesson that stayed with me. It is why,even in the small simple code, using good coding practice is important. That way you don’t have to think about it when the coding gets public.

Wednesday, February 21, 2018

Open Letter to People at #SIGCSE2018

The Annual SIGCSE Technical Symposium is taking place in Baltimore this week.  Some of the best minds in computer science education are sharing ideas in sessions, panels, birds of a feather, and hallway conversations. At the same time most of the people who really need that information – classroom teachers, adjunct faculty, and others teaching computer science – are not there to hear it. It’s reality. We can’t all be there. We are starving to hear about what people learn at SIGCSE though.
Now some of us who are members of ACM and SIGCSE will get the papers later but that only goes so far. My request to the people at SIGCSE is that they find ways to share some of the things that don’t make it into the printed papers. Things like the keynotes. What an amazing lineup of keynotes this year it is too!

And the birds of a feather and the hallway conversations and the rest of the stuff that is just so hard to capture.

How should you do it? Well lots of ways. For one thing live tweet the event. Use the official hashtag - #SIGCSE2018. There are people at home watching. We may even ask you questions.

Share things on Facebook. There are a couple of good groups there that would probably welcome SIGCSE posts. I can think of Computer Science Education: Researchers & Practitioners and Computer Science Educators as examples. Or post them as public on your own account so people can share them.

For another write posts on your blog. Don’t have a blog? I tell you what – I will post guest posts from SIGCSE attendees here on my blog. Send them to me at with your attribution information and I’ll post as many as come in.

Consider offering to talk about SIGCSE at a future local CSTA chapter meeting. You’re probably going to share information at your home institution but there are lots of others who would love to hear about what you learned at SIGCSE.