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.