Programming for fun (sort of)

One of the things I promised myself was that I was going to try to practice programming every day.  One of the funny things about teaching is that you often don’t get to practice what you teach.  When I taught writing, I always felt weird when I was teaching something I myself didn’t have time to do much of.  This is even harder never having had a job where programming was something I did every day.  I did some here and there over the last ten years, but not every day.

I’ve been pretty good about this.  Last week I missed a day or two–okay maybe three–as I was getting back into the routine.  But this weekend, I’ve spent a good chunk of each day programming.  First, I worked on some puzzles I found online. Mr. Geeky and I were competing against each other.  For one puzzle, he came up with one way of doing it, and I did it the “right” way.  I looked up some information and used it.  He hacked it because he didn’t want to look stuff up.  This is the secret, of course, to any programming.  There’s no way to remember every possible function or method.

Next I started a new project related to one I started over the summer.  Both have to do with food.  I’m making much better progress with the second, as it’s a little less complex than the first.  I basically worked on it all day.  I’m sure something like both of them exist, but it’s important to me to do the work myself.  Another project I tackled was analyzing Obama’s speech from this week and graphing it by word frequency.  The graphing was a little challenging as I ended up drawing it programmatically rather than using one of many built-in libraries to do the graphing.  I never quite got the graph to look perfect, but it was good enough.

As I work, I also think about the students’ perspective.  How would I help them through a project like this?  What tools have I used for support?  How did I structure the problem to begin with? How did I break it down?  I do a lot of this in my head, because what I’m doing is not huge, but I will require my students to write it out, so they have a clearer vision of how things work.  It’s fun learning new things, but it’s hard figuring out how to turn around and teach them effectively (okay, that’s kind of fun, too.).

Technology, Computer Science, More thoughts

There are quite a few conversations among computer science teachers and professors happening right now about the state of computer science in high schools.  I just finished a draft of my own syllabus for Intro to CS and in doing so, I spent a lot of time looking at other people’s syllabi, asking current teachers what they taught and why, and reading up on issues regarding teaching CS in high school. So this issue is in the forefront of my mind.  Not being in this role for very long, my thoughts about what to teach, whether to require CS in high school, among other things are not fully formed.  I wrote a little about this a while back, and I still hold that there’s a difference between being tech/computer savvy and being a computer scientist, I’m not entirely sure that we should privilege one over the other at the high school level.

So, let me present some other people’s thoughts before I present my own.  First, Douglas Rushkoff has a book out, called Program, or Be Programmed and wrote a brief piece for the Huffington Post about how he thinks programming should be required.  I’m in the middle of reading the, and so far, it has very little to do with programming and more to do with a more general understanding of how technology works.  For example, he talks about how Facebook is not really interested in helping you build a community of friends, but in using your information and your connections to make money.  Most of the changes they’ve made to the site over the last few months have been designed specifically to facilitate their ability to make money.

Alfred Thompson responded to Rushkoff’s ideas in this post, which has some really interesting comments, with some people who think it’s silly to suggest that we should teach programming in high school, some who think we should stick to teaching applications like Excel, and some who think we should definitely teach programming to every student.

And then, today, the CSTA issued a report, which I have only skimmed I admit, called Running on Empty: The Failure to Teach K-12 Computer Science in the Digital Age.  It’s main argument is that the skills kids need to succeed in the 21st century are CS skills and those skills are not being taught in many schools and only required in 8 states.  So, we need to work toward requiring schools to teach those skills.  Now, the CSTA curriculum for CS, which I’ve spent a lot of time with isn’t just programming.  There are lots of other computer skills in there like web design, binary, ascii code, ethics, networking, etc., so unlike Rushkoff, they’re not necessarily advocating every learn to program in high school.

Okay, so here’s my thinking.  I think everyone should know the difference between an operating system, an application, and a web browser.  I think everyone should know several different operating systems, not inside out, but at least know that there are different ones, that there are similarities between them, etc.  I think everyone should understand file structures.  Where does that file go when I save it?  I think everyone should be able to type in a web address and know what a url is.  So many hours of people’s lives are wasted searching for Google on Bing or vice versa.  I think people should know how to find out how to use applications.  Note, I did not say people should know how to use Word or Excel.  Applications change.  You should be able to feel your way around, use the help feature, or use a search engine to figure it out.

But those are not really computer science skills; however, I think it’s hard to go to the CS skills if you don’t have at least this groundwork laid.  I articulate them because I’ve spent a lot of time helping 6-8 graders and teachers alike figure out some of these things.  When someone opens up Word to find their Google Doc, something is wrong.

On the other hand, I’ve figured out a lot of what I know about using computers and doing some pretty darn complicated stuff with them without having any formal training in CS.  But why did I learn those things? Why did I figure out HTML, CSS, Flash, & PHP? Why do I know what a C: drive is, what DOS is, and how to FTP?  In part, because I was curious and I just wanted to know.  But also because the computer, back when I first started using one, was a clunky thing, and didn’t hide everything.  No, I couldn’t open up the uncompiled code, but I could see the computer’s structure by listing directories. Often to run a program, you had to type a complicated series of backslashes and directory names.  Back when I started working on the web, you could easily see the HTML and eventually, the CSS.  And back when I got email, there was no “You’ve Got Mail” sound or envelope icon to double-click.  You had to log in to a server, know the server’s name, i.e. lblanken@dev.iu.edu.  So, computers were more transparent and I wanted to learn more about how they worked because I could see some of that just in my basic interactions with the machine.

That interest did not translate into my learning programming at first.  I was quite content just knowing my way around a computer and its (already made for me) programs.  It got me good-paying work along the way and got me into the growing field of educational technology.  I’m leary of applying my own experience to the present day.  For one, today’s technology environment is very different from the late 80s one I grew up in. Knowing how to use a word processor or basic database program does not garner the amazement it did in 1989.  Had I been in the right place at the right time, I might have ended up at Microsoft or Google, but we didn’t have CS courses in college, much less high school.  Today, it’s still true that a student with the right CS skills could end up at a start-up (or starting their own) or at Google or Microsoft or any other company that needs programming/HCI/data analysis (almost all).  But it’s more likely now.  It’s more likely that a student will have access to a computer very early.  I didn’t even see one until I was 12 and then there were only three in our whole school.  There were none in our high school.  In college, we had VAX machines.  I took a CS class on PCs my junior year and the next year, we finally got a mac lab.  So younger students are exposed to the equipment, but what they see is a slick operating system that looks more like a tv than a computer (and sometimes it is).  How many will want to dig around on their own?  And how much more do they need to know to be able to do so?  Computers are more complicated than they were.  And the Internet has exploded and we have tiny little devices that are tiny little computers.

So I say it’s not an either/or kind of question.  Yes, we should teach people how to use their computers and the applications on them, but I believe in doing so at an abstract level as much as possible.  And yes, I think we should teach programming.  Will everyone become a programmer? No, but if we give them the opportunity, we might end up with more of them, and more women and more minorities in IT and CS fields as a result.  If we wait till college, we’ve already lost a lot of people.

I have more specifics to say about the CSTA and other curricula, but I’ll leave that for another day.

Enhanced by Zemanta