Saturday, February 20, 2010

The Short Answer

 When people ask me what the goals of a high school computer science department are, I have a supply of various answers that range from vague and obscure to complex and convoluted.  It's much easier to just distract them by walking them through a typical class and asking them to talk to the students one on one.  To learn computer science is to experience computer science, and explaining that to an outsider can be a challenge.

Ever notice how computer science has been applied to nearly every aspect of human life?  Even domains that are the most blatantly "human" in nature, like linguistics, have proven to be fertile ground for computer science.  Computers, ironically, seem to be crucial in our quest to fully understand what it means to be human.

Today I spent some time developing a simple pong application using Processing.  With each new version of the program, I decided to heavily comment my code and hopefully make it clear to my students why certain choices were made.  Basically it goes from a simple paddle and ball to a game with obstacles, a scoring system, and an evolving complexity that is typical for even the simplest programming projects.  

Little things like using variables rather than hard coding coordinates throughout the code are covered, but so is the much larger picture that can only be clarified by the application of Object Oriented Programming principles.  It didn't take long, really, and my simple little pong application was seriously crying out for better design.  

Having students learn that while actually programming their own creations is reason for celebration.  I have seen it many times since moving over to computer science from teaching math full time.  I spend a lot of time developing curriculum, but fully realize that those moments are simply not the result of a particular curriculum.  Rather, they result only after a lot of time is spent nurturing the student through the cold and impersonal early days, when syntax errors and debugging can really take their toll on a student.   I think I draw on my years of teaching middle school most when I am helping beginners learn programming.  You simply can not be the "expert at the front of the room," or you will lose them forever.  You have to deal every day with the fact that your actions will prevent the inevitable from happening: a small proportion of your class (often boys) will soon be seen as "having it", while all the rest will be forever defeated at the thought of exposing themselves to the humility of writing code from scratch.
How do I do this?  I visit with my students every day.  I try to find those that are the least likely to approach me, and I sit down next to them and talk to them while they program.  I look to pair up students as much as possible for support.  In short, I throw a lot of the old wisdom of teaching out the window, and focus much more on human feelings than on programming skills.  If students taste some early success on programs of their own choosing, the stage is set for the learning of computer science principles that will form a foundation for exponential growth that can be witnessed in few other domains of education.  It's hard to explain that to someone outside of the computer science education, but the same way a simple application like, say, pong can develop from a ball and a paddle to a major time-sucking, addictive game--well, you soon realize that same exponential growth in your students, as they threaten to leave you behind as they become more and more fluent in their command of a computer and computer languages.

So, that, blog reader, is the goal of our computer science department.  In time we will develop official standards that basically say the same thing, but for now, this will have to serve as the short answer to the question.

No comments:

Post a Comment