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.