Archive for October, 2008

Why programming CAN be an Introduction to Computer Science

First, before I get spammed by oh so many people I want to point out the word ***CAN*** - not should, not is, but can. This post is for all the teachers out there who dont necessarily get to make decisions at the meta level and are told that CS1 _is_ a programming course.

One of the things that I have become a proponent for in the past year or so is that Introductory CS has learned nothing from its counterparts in other departments. (especially the humanities) Lets look at departments that match CS’s profile in terms of exposure prior to the standard “intro” course. Philosophy, psychology, etc. Even add some of the sciences here - intro to bio, intro to chem, etc.

These intro courses are survey courses. They are to help us understand not only the specific topics delineated in their syllabi, but also to give us an idea of what the field is about - whats the difference between cellular biology and marine biology? And also to let us know that these divisions exist. We (cs) are very bad at that.

A colleague recently asked me to share an example I did with my classes, and I realized it would be better written up as an assignment. I thought I would share it with all of you as well (and yes, I’m going to go put it in the CSTA repository as well). The assignment is about Blackjack. The creative part however is not about having the students code blackjack in any way shape or form. Instead, they need to use an array and develop a series of “weights” that tell a computer player whether to hit or stay from a given hand.

This is a very very small introduction to the concept of machine learning. We are generating random trials (and part of the assignment is to look at how the numbers change with different number of trials) and using them to “teach” a computer to play blackjack, thereby exposing a statistical truth that we all know about. (although machine learning often works with unknown truths) It even includes a link to an open machine learning problem that has a million dollar prize - for something the students use!! Netflix (http://www.netflixprize.com/)

I believe there are lots of great examples out there that allow us to (within a programming class) introduce the variety of fields related to computer science - and many of you are probably already doing it - lets just make it explicit for our students!

So here are the files: There is a word document describing the assignment here, and a zip file with code (completed) here.

Tuesday, October 28th, 2008

Life as a Professional Novice

So this morning I went to a lecture sponsored by the Pittsburgh Science of Learning Center. The person giving the talk was Richard Catrombone from Georgia Tech and he was talking about his experiences in doing task analysis as a part of interdisciplinary projects to improve curriculum in other subjects. (very interesting)

One of his slides impacted me the most - It was a summary of the process (or pre-process in this case) that he was recommending that one undertake before even thinking about doing an instructional design task for a given topic.

Richard’s recommendations were:
* Design teaching/training materials
- you want students to be able to start quickly.
- they should be able to solve novel problems/carry out new tasks
- you want students to be able to retain the information in the long term
* Do a task analysis
- identify a set of problems you want the students to be able to solve
- solve the problems
- make detailed notes on the “why” for steps
- use solutions and notes to create teaching materials
* *THEN* do systematic research on how to:
- present information
- design training exercises
- access knowledge

This outline is not nearly as powerful as the talk, but it is a good starting point.

For those of you who may not know what a task analysis is, you sit down with a subject (in Richard’s case an expert in the topic) and ask them to step through their process for you. The key to doing a good task analysis is to make sure that you really probe the subject for the deep meaning behind each action performed - asking lots of why along the way.

Tuesday, October 21st, 2008

A new kind of Rigor

The Association for Supervision and Curriculum Development published an article in Educational Leadership about rigor in the 21st century.

The author visited a large number of corporations and asked what skills they look for when hiring new people. Surprising to him, but not to all of us was that the employers didnt care about the specific skills that we are so intent on measuring in our high stakes testing, stating that “we can teach them the technical stuff”. Instead they wanted skills like asking good questions, critical thinking and problem solving, accessing and analyzing information, and many others (see the article). While some argue that many of these skills are inherent in a computer science curriculum, I would argue that our stance is as tenuous as math. Just like your average “poor” mathematics class, a computer science teacher can focus on recreating applications that already exist, memorization of algorithms, or even just focusing on recreating code that was presented in class.

In reading the list of 21st century skills I took each one ans adked how I was at encouraging the creativity and out of box thinking with my own students. Does asking each student to complete the same program assignment meet these goals? But that is a trade off with my ability to grade and monitor student’s progress as well. It is a balancing act, but I know that in my past I have been guilty of creating assignments that dont in any way meet these goals because I traded for ease of grading, or other instructional needs.

I encourage all teachers to read this list and ask, how do I foster these skills? I understand its a trade off, but how can I include a small portion of one of these into every assignment?

I’m going to print these out and put them on my wall and make sure that I refer to them constantly as I do any curriculum writing over the next couple of years.

Tuesday, October 7th, 2008

Computer Science and Theater: Learning by Engagement

In a recent Edutopia article “Stage Craft: Taking Cues from Theater Class to Help Make Math and Science Fun, Why can’t a classroom have the passion of drama or sports?” by Carl Engvall there are some great comparisons that can be made to sports and drama that computer science also embodies.

Carl gave six reasons why students get engaged in sports (he used football as an example) that he also believed motivated students to be interested in drama as well. The six reasons were:

* players are considered active participants rather than passive recipients.
* the unexpected happens all the time, so there’s no time to coast or be unfocused.
* a player can let the team down.
* there’s no such thing as “good enough”; we’re always asking players to excel.
* the adults who participate are genuinely interested.
* a public performance is expected.

I think that these six items are also key cornerstones of good computer science programs as well. The first two are definitely applicable to computer science. We give our students programming tasks to complete with real time feedback (compiler results and on screen results of running test data whether it be through unit tests or just through example cases). If that feedback tells you something is wrong, you are EXPECTED TO FIX IT!!! unlike other classes in school when you get back a paper (perhaps a few days after you turned it in) and you get something wrong, you just shrug, put it away and continue with that day’s activities. In computer science you need to fix things in your program that are wrong in order to complete the assignment.

Letting the team down - Whether you believe in pair programming or not, I love to give my students assignments where the part that they work on plugs into a larger piece and the whole thing needs to work.

The fourth statement - “there is no such thing as good enough”, I have been a strong proponent of that for a long time. I give assignments that are often not worth full credit without at 5-10 point “make it better” clause. This serves not only to drive students to think creatively and reflect on what they are working on, but also to tap into the higher levels of bloom’s taxonomy and encourage them to come up with additions that they can make that are relevant to the assignment as well as functional.

The adults are interested - Most computer science teachers (especially the good ones) are interested in the assignments they give. Contrary to some math classes (not all - I know of some exceptional math teachers) we as a discipline put our heart and soul into the assignments we create. Very rarely do students encounter a program assignment that teachers have the similar investment as a page of algebra problems.

Public Performances - While this doesnt occur with every program assignment I give, there are few where there is not this potential. Many times I do ask a student to share code with the class if they have a creative solution. I not only praise them personally but let them know their contributions are valuable because they thought about something in a different way. I used to have students post in a class discussion board the creative “make it better” solutions they thought of for 2 points as a part of the assignment as well. I think robots are also so popular among educators because of this as well.

Well, I encourage you to reflect on your own practices, how do you incorporate these 6 ideas into your classes? If you have one I didn’t mention please share with the group :) I am astonished at how the readership of this blog is growing, and I think that while I have things to say, by no means do I know it all.

Sunday, October 5th, 2008

The “Smartness” of a generation

A recent article in Education Week, “Are the ‘Millennials’ the Smartest or Dumbest Generation?” by Andrew Trotter made me think not only about the skills that students are coming into my classroom with, but also about what my expectations for them are.

Last year I read a great book “Everything Bad is Good For You” by Steven Johnson. (I recommend you add it to your reading queue if you have not yet read it and you are a CS teacher) It talked about how TV, Video Games and the media are actually working to increase peoples IQ and working memory through training them to deal with complex situations on a daily basis. Now just because I thought the book was great doesn’t mean I agree with all of the author’s premisis - lets just get that out in the open, but I thought it made me think as I was reading it and that in itself is a vote for good :)

So, why does that affect me as a computer science teacher? Well, I have certain expectations of my students not only when I meet them at the beginning of the year, but also throughout. No these are not based on their prior CS knowledge or computing skills, but instead based on their logical reasoning and ability to decompose problems. Maybe I subscribe too much to the theories that Johnson and Trotter are highlighting.

Do I make explicit for my students how to decompose a complex situation into the sub parts or tasks? Do I make assumptions about their inherant ability to think digitally? I dont know. What makes a person smart? and how does that affect the learning outcomes of my course and my intrinsic learner profile?

And what do I want EVERY student who graduates from the 8th grade to know? From the 12th grade? And what is my role in that larger picture? And it may be as small as making my CS program accessible to all who want to take it and at least visible and understandable from the outside to those who choose another course. Where do you stand?

Wednesday, October 1st, 2008