For my How to Teach Webcraft and Programming class, we are supposed to describe our students.  So, below are some of my descriptions of students present and past as well as myself as a student.  I’ve had a wide range of students, but interestingly, they do sort of fit into categories.

The Artist

Painted StreetsI’ve had/have a lot of students who have tremendous artistic talent. They often know their way around Photoshop or Illustrator and are looking to take their talents to the web or into graphics through programming.  Many of these, maybe most, are quite independent, perhaps because they have worked independently on their art. They are often the kind of student I can give some key Google terms to or hand them a book and they’ll come back having figured out something cool.  Past students have created fabulous flash videos or beautiful-looking web sites.  Not all, but some, get confused by the logic of scripting and get frustrated when scripting “messes up” their work.

The Over-Achiever

Sanna Science FairTo me, this is the classic CS student in many ways.  These are the kids who enter the science fair without being told to, who read a lot, who take an overload of courses, and, of course, who hack their own computers at the age of 5.  Interestingly, my students often do everything but that last one.  So, I get students with the smarts and drive to accomplish anything, but who avoid the innards of computers.  These students usually pick up things fast, but not always.  Sometimes they get frustrated when they don’t because usually everything comes pretty easy to them.  But I do find them to be persistent, though sometimes not as independent as the artist-types above.

The Reluctant Learner

Frustration (was: threesixtyfive | day 244)I get these when I teach required classes or required training sessions.  These students have run the gamut from adults tasked with maintaining a web site to young adults and kids required to take a “computer” class.  In the case of required training, the students often really need to understand what I’m teaching.  Maybe they need to keep their jobs or they want to get a new one.  Whatever it is, the stakes are often high.  And yet, they’re not necessarily motivated to learn.  Or they don’t have the prerequisite knowledge to learn what I’m now teaching them.  On the opposite end of the spectrum, I’ll have students who are required to take a class, but it’s not graded or doesn’t “count” or some such.  In other words, the stakes are really low.  Sometimes these actually turn out well, if I can find something that will tap into their interests.  However, if I can’t find a way to connect what I’m teaching with what these students want or need, then it’s often a lost cause.

Me

Laura Blankenship and laptopI’ve liked computers since I was about 12 when I got Pong.  I learned a little bit of BASIC in 7th grade, but mostly I play Haunted House (on a Tandy) and Lemonade Stand (on an Apple).  I took a CS class in college (BASIC again).  After years of pursuing an English degree, I landed in a tech job, having to learn most of what I needed to know on my own.  I’ve continued to move deeper into teaching computing and now teach CS.  I’ve run into people like myself teaching in K-12 schools.  We are what one might call tech gurus, but we were never formally trained programmers.  Some of us have worked as programmers or developers, but most of us have just learned from books or courses here and there.  I learn primarily through practice, trying to program nearly every day, often setting myself increasingly difficult tasks.  What I’m learning is that while those with full CS degrees can often tap into much of their past material, the field changes so quickly that everyone is almost always learning.

I’m participating in a P2PU course that examines teaching programming to “free-range” students vs. teaching programming in more formal settings.  I’ve long been fascinated by teaching methods, and, of course, focused on teaching in my dissertation.  But back in those days, technology and programming were in support of another subject rather than a subject unto themselves.  However, some of the same methods apply across subjects.  We were asked to read a post by Greg Wilson that reflects on the use (or not) of research-based methods within an informal online context.  The source of the research-based methods is an IES report that gives the following recommendations:

  1. Space learning over time. Arrange to review key elements of course content after a delay of several weeks to several months after initial presentation. (moderate)
  2. Interleave worked example solutions with problem-solving exercises.Have students alternate between reading already worked solutions and trying to solve problems on their own. (moderate)
  3. Combine graphics with verbal descriptions. Combine graphical presentations (e.g., graphs, figures) that illustrate key processes and procedures with verbal descriptions. (moderate)
  4. Connect and integrate abstract and concrete representations of concepts. Connect and integrate abstract representations of a concept with concrete representations of the same concept. (moderate)
  5. Use quizzing to promote learning.
    1. Use pre-questions to introduce a new topic. (minimal)
    2. Use quizzes to re-expose students to key content (strong)
  6. Help students allocate study time efficiently.
    1. Teach students how to use delayed judgments of learning to identify content that needs further study. (minimal)
    2. Use tests and quizzes to identify content that needs to be learned (minimal)
  7. Ask deep explanatory questions. Use instructional prompts that encourage students to pose and answer “deep-level” questions on course material. These questions enable students to respond with explanations and supports deep understanding of taught material. (strong)

Greg finds that meeting these recommendations within the online context is fairly difficult, given that there’s no clear way to assess student knowledge.  Others, in comments, and elsewhere on the web, have suggested that tools exist to provide some of that capability, but whether that would work with “free-range” students is unknown.  When learning is voluntary, how to you coerce students into doing things that you know would help them learn but which might turn them off?  No idea.

So here’s my assessment of my own teaching and a little about my own learning, which I’ve done on my own for years.

1. Spread learning out over time.  I try to do this in my classes.  We basically are covering 3-4 main concepts, which were introduced within the first few weeks.  I keep returning to things I said 6 weeks ago, trying to remind students of the basics.  I could certainly do more assessments that aren’t the actual writing of programs.  As it is, they will be assessed on the midterm and though they’ve been using these concepts in their programs, it’s a different thing to have to define them or otherwise discuss them.  So, I think I do this informally, but perhaps students could benefit from a more formalized way of doing this.

Online/free-range students could easily be required to return to older material.  I’ve never experienced this myself, though I’ve done it myself, redoing exercises and “relearning” concepts that I’ve already “learned”.  It helps to re-do these things.

2. Interleave worked example solutions with problem-solving exercises.  I probably don’t do this enough.  There are examples in our book and we go over them and/or work through them together.  I also code up my own examples and show them in class.  I definitely think I need to do more with this as I think students would get a better sense of how to break down a problem.  At the very least, I think we should go through early worked examples more slowly.   I see some potential for students to present to the class, going through an example for the class.  This could be done in class or online via a blog or class forum.  I might try that.

As a student myself, I know I skim these too quickly and then when I’m trying to do similar problems, I don’t remember anything about how the problem was done.

3. Combine graphics with verbal descriptions.  Mostly, I put a program up on the projector and then I talk students through it, so I guess I’m doing something okay.  Other than programs, though, I don’t use many other graphics.  I guess I could use flow charts or something.

I’ve never gotten verbal descriptions as a student myself.  I’ve either learned from books or online and none of the online courses I’ve taken in programming have ever had lectures or audio.  It’s all been reading about concepts, looking at sample programs, and then writing them yourself.

4. Connect and integrate abstract and concrete representations of concepts.  Usually, we define a concept abstractly and then apply it.  According to the research, students learning in this way should be able to apply the concept in different contexts.  I’m not seeing that happen consistently.  So perhaps I need to think about different ways to present concepts.  Some CS Unplugged materials might help concretize some of what we’re doing.  Perhaps the issue is that we’re too abstract.  Definitely something to think about.

5. Use quizzing to promote learning.  As I said above, I use no quizzes.  I think it would be worthwhile to incorporate more.  We do reading for the class, and I think quizzing at that point would be good as well as quizzing later to reinforce concepts would also be good.

6. Help students allocate study time efficiently.  I’ve done this a little.  When I return projects, I go over the concepts that people struggled with, in the hopes that students will go back over those concepts.

7. Ask deep explanatory questions.  Coming from a humanities background, I think I do pretty well on this one.  In class, I often ask students to explain what they’re doing and/or I ask them how they might solve something.  For example, we were talking about how the cute little keepon robot works, and I got them thinking about how the very simple things they were doing right now could be expanded in that application.  It was an aha moment for them.

Greg suggests the possibility of crowdsourcing/peer assessment.  I’ve seen that work in my classes.  And I’ve contributed to that in an online context.  I think it’s about creating an environment where that’s encouraged.  In formal settings, you can require it.  Informally, I think it takes a moderator/teacher to model a peer-learning environment.

In general, keeping the research in mind as you plan and teach a course is probably a good idea, but I’m not sure I could incorporate all of these into my course.  And I’m curious about how to meet these recommendations in project-based learning, which is my primary way of teaching.