Monday, January 30, 2017

The Complex Question of Complexity in Programming

I spent most of last week grading semester projects written by my students. Reading through the code of beginners is really interesting. It’s interesting in part because of the solutions they come up with. You see in my first course we really only have a few weeks to cover programming. It is part of a full semester course and we do a lot of other things. So the tools that students have are quite limited. We don’t get to arrays for example. And the event handlers we deal with are pretty basic as are the objects they learn about.

One of the programs my beginners often select to program is the game “lights out.” This is how we describe it for students. When a student asks “is this hard?” I am tempted to answer “for you or for me?”

Lights Out – The game starts with 25 red buttons arranged in 5x5 grid. Each button pressed toggles itself and the four buttons around it (above, below, to the right, and to the left) between green and red. The object of the game is to get all 25 buttons green.

imageA typical board would look something like the image to the right. Most students wind up writing one event handler for each square on the board. Each event handler has between three (corners) and five if statements to determine color changes. I typically see something like a 14 page print out.

Creating this is at once simple and complicated. Simple because all of the language tools are very basic. Complicated because tracking all the squares that need to be checked is tedious and error prone.

My solution involves invisible boarder boxes and a single event handler that handles all cases simply and easily. Keeping track of what boxes to check is trivial. The print out is about 2 pages long and includes more features than the typical student project. This is also in some ways both simple and complicated. Simple for me because I have done this sort of thing many times before. Complicated because of the use of a two dimensional array (which my students haven't learned yet)  and because some students have trouble grasping why the invisible boarder makes the code easier and not harder.

Complexity seems to depend on a number of things. One is of course the “tools in the toolbox.” The more tools one has the more options one has. That’s pretty obvious. It seems like one of the biggest developments in programming in my time is the arrival of extensive libraries and functionality that is built into to programming languages. Anyone ever have to write code to subtract, multiply or divide? I remember doing that for a PDP-8 program I wrote in college. Everything was built on adding. I’m really class I don’t have to do that anymore.  Of course there is a lot more to learn as well.

The other thing is experience. The more code one has written and read (especially read) the more design options on knows and understands. After a while one naturally sees patterns that are not always obvious to beginners.

Teaching the basic syntax still seems like the easy part of learning to program. Understanding how those building blocks can be assembled is the hard part. There is still a lot of “reinventing the wheel” on the part of students as they “solve” well understood problems. That is part of the learning experience in many disciplines but I often wish we could move that part along faster. And less painfully.

Wednesday, January 25, 2017

Computer Science Education at SxSWEdu 2017

sxswedu logoSxSWedu is one big conference I have never been to. Seeing how it is tied to the big South By SouthWest Interactive and Music conferences it has always fascinated me though. Attending doesn’t easily fit with my travel budget these days and in the past I haven’t seen specific CS Ed content  to justify spending other people’s money either. This year looks very different. Pat Yongpradit of code.org has put together a Google Doc with all of the computer science education related sessions at SxSWEdu. It’s an impressive list. Note that this list has been updated since my original post.
There are some 15 or 16 sessions on Pat’s list. While in some quarters SxSWEdu has a reputation about being all about companies trying to sell educational technology to schools these CS sessions are different. Almost all of the presenters are faculty or researchers at some level. Plus many of my favorite CS education activists are involved. People I’d go out of my way to listen to!
There is one industry panel that looks particularly interesting though – “Why Tech is Investing in Teaching Tech Early” People from Google, Microsoft and Tynker are part of the panel. With a lot of concern about the influence of tech companies on education I think it will be interesting to see how these people talk about their companies’ motivations.
If you are thinking about attending SxSWEdu this year and definitely if you are planning on attending check out Pat’s list of CS education related SxSWedu sessions.

Wednesday, January 18, 2017

What I Learned in College

For various reasons my thoughts lately have been on my college experience. Now I graduated in 1975 which was a few years ago. A lot has changed in computing and computer science in that time. But those four years were quite foundational to my whole career. In fact without those four years I would probably never have gotten into computing in the first place. As I said it was a different time.

In the 1970s there were few computer science departments in universities. My college, Taylor University, had a computer science department of sorts but no computer science major. I took my first CS course to meet a general education credit. A professor who make it interesting, gave lots of projects, and was a really great person gave me the opportunity to get hooked. I patterned my own teaching in part after his. I like to think I have gotten a few others hooked over the years. So things started there.

Taylor was, and is, a smaller school. While my wife at a large public university saw her school’s computer at a distance I had hands on experience. My last couple of years I had my own key to the science building and computer lab. This was not the sort of thing that was common back when a university would have one computer lab to hold the one computer. At smaller schools though it was an option for serious students. I left with a lot of hands on experiences that my peers from big name schools did not have. Better than that I got to try a lot of things and learn a lot of things that we not taught in class. This was a big boost in my early career.

Two other, and related things, I learned in college were debugging and grading. Related? Oh yes. You can’t grade unless you can tell what is working and what isn’t. I some experience in these things in two ways.

Without graduate students, we undergraduate students worked in the computer labs as lab assistants. A lot of this time was spent helping students debug their programs. As a result of that experience I (and the other lab assistants) get to see a lot more errors and learn a lot more about finding and fixing bugs. Learning from other people’s mistakes is a true gift for which I am grateful.

We also spent some time making a first pass of student projects before the professor graded them. We learned to deal with rubrics, spot missing features and attributes, and basically learn to tell good code from bad. I review my students projects in many of the same ways today. Some things do not change.

But that debugging stuff. Wow! That is hard to teach in a class. In fact I doubt anyone teaches a dedicated course in debugging. People are left to figure that out themselves and yet for many people it is the most valuable thing they can learn.

The key thing I take from my reminiscing is that my learning combined classroom and practical out of class opportunities. Would I have had the later if I’d lived off campus or if I’d viewed learning as just something to do in class and partied a lot? Probably not.  University is a lot about what you make of it. If you view it as parties interrupted by classes you’ll probably not get a lot out of it. If you think you can max out on learning by just taking a lot of formal classes you’ll probably miss opportunities.  If on the other hand you view “school” as a holistic learning experience with classes as framework and out of class interactions and involvement as important and valuable you can get a lot out of it. I don’t think college is dead. I think it just needs to be down right. And that is still a possible thing.

Monday, January 09, 2017

How Important Are Number Bases for pre-University Computer Science?

Do high school or younger computer science students really need to understand number-base conversion and binary, decimal, and hexadecimal number systems? Obviously most students are comfortable using decimal numbers. How important though is them knowing Binary? Or hexadecimal ? Especially hexadecimal?

Now in my career there have been times when I used Binary, hexadecimal, and even octal (very useful in machines with 12 bit words.)  But do we need to teach these to secondary school CS students? If so why?

Do we have students reading hex dumps or looking at data in hexadecimal format? I can’t remember the last time I asked students to do something like that. So why hexadecimal?

Now ok Binary comes in handy for understanding things like why character variables are between –128 and +127 when expressed as integers. ASCII (and other formats) are available in decimal as often as Binary, Octal, or hexadecimal. So we really need students to know that a space is 20 in hexadecimal and 32 in decimal? Isn’t the decimal enough?

Binary is useful in other ways of course. Setting and reading flag bits for example can be very efficient and useful. And it is helpful in some cases to get a deeper understanding of data storage.

Now I do think understanding number systems is important. Just as learning a new natural language often helps people understand their native language, learning about number systems/bases can help students understand decimal better. But is the a math requirement or a computer science requirement?

OK let’s discuss.

Sunday, January 01, 2017

Computer Science Education Things I’m Watching in 2017

What is going to be big in 2017? It’s always hard to tell but there are several things I think I need to keep an eye on this year. (Note: Last year’s things to watch is here.) Some of the things are repeats from last year. They are still developing. Others are things I’ve seem more of last year with indications that they are moving forward. What will you be watching this year?

Computer Science for Everyone - This moved along very well in 2016 with huge support from the White House. Will the new president be supportive? I don’t think anyone knows. Fortunately there is a lot of movement in the states and Congress seems to see CS education as a bipartisan issue. I am hopeful that progress will continue but it is something those of how care about need to be active in making happen.

Advanced Placement Computer Science Principles – This really took off in 2016. What I am most interested in seeing is how well the various big name curricula do in terms of test results. The other thing I am watching for is teachers who get really innovative on their own in teaching this course. I’ll probably be teaching it for the first time in the fall of 2017 so I’m hard at work figuring out how I will teach it. Lots to watch.

Expanding CS Education Before High School – I’m seeing more and more interest in K-8 computer science. Code.org has been instrumental in promoting this with training and curriculum materials. Bootstrap has been growing in middle school (BTW if I were a middle school principal or math teacher I would really be looking at Bootstrap – seriously – math and computing is a way that works and is fun? ) The #CSk8 twitter chat is growing by leaps and bounds. All of the new state standards are looking at K-8 as well as high school.  We’re on a roll here. I can’t wait to see how it continues to develop in 2017.

Making and CS – I have been trying to figure out how to categorize this topic. Initially I was going to call it Internet of Things. IoT for short. That was a big surprise this year. Several professional development events I attended had session labeled Internet of Things. They were all over subscribed. What is IoT? That definition seems to be fuzzy. I tend to think of it as smart devices that are  internet connected. Things like the web enabled cameras I use to keep an eye on my family’s vacation home. They are smart enough to let me know when they see people rather than just motion. Or programmable thermostats like Nest sells.

What I am seeing at workshops makes me think more of what I associate with Makerspaces though. Smart devices but not necessarily internet connected.

How ever you see IoT I see a lot of interest in using or making smart devices. People are interested in programming things other than pixels on a screen. And they don’t just mean robots, though those are still popular.

So I think we’ll see people taking advantage of cheap computers, simple sensors, and basic communication tools to make and program interesting things. I’m not sure how much this will penetrate the school day though. So far a lot of the activity seems to be afternoon and weekend “extra” programs and special events. I can see this fitting into AP CS Principles for one thing. And it has the potential for cross curricula projects. I’d love to see CS classes build things for science classes for example.

All in all I see great potential for making computing more interesting to new groups of students.

So what are you expecting to see and learn in 2017?