News:

Welcome to the new (and now only) Fora!

Main Menu

Teaching coding to variety of skill levels

Started by pedanticromantic, October 29, 2019, 12:30:18 PM

Previous topic - Next topic

pedanticromantic

I've been struggling with this one for years. Some of the stuff I teach involves some programming. About 10% of the classes are actually enrolled in a CS major.
Some of them come in already having done this stuff in high school. Some come in from CS. Some have NO skills whatsoever when it comes to computing.

How have others approached the issue of teaching programming to such a variety of skill levels?  I don't want to bore the old pros, but I also don't want to leave students behind.

Up to now I've mostly done a flipped classroom and had them learn the stuff outside of class on Lynda.com or Youtube or wherever, but I did a quick pop quiz and 20% of the class hadn't grasped even the basics.  I don't want to just "let them fail"... they need this particular skill for their other courses.

marshwiggle

Quote from: pedanticromantic on October 29, 2019, 12:30:18 PM
I've been struggling with this one for years. Some of the stuff I teach involves some programming. About 10% of the classes are actually enrolled in a CS major.
Some of them come in already having done this stuff in high school. Some come in from CS. Some have NO skills whatsoever when it comes to computing.

How have others approached the issue of teaching programming to such a variety of skill levels?  I don't want to bore the old pros, but I also don't want to leave students behind.

Up to now I've mostly done a flipped classroom and had them learn the stuff outside of class on Lynda.com or Youtube or wherever, but I did a quick pop quiz and 20% of the class hadn't grasped even the basics.  I don't want to just "let them fail"... they need this particular skill for their other courses.

The real issue is what "some programming" entails. If it's the kind of thing that could be done in a spreadsheet, would that be a reasonable alternative? If it's too complex for that, then the amount of programming instruction that will be needed by the complete novices is probably non-trivial.
It takes so little to be above average.

Liquidambar

I haven't posted in a few weeks, but I have plenty to say on this topic!  I do a lot of this in my classes.  Hardly anyone is a CS major.

To handle the variety of skill levels, I have in-class exercises that they begin during class time.  (I allocate about 15-25 minutes of class time per exercise.)  Advanced students often finish in class and might leave a few minutes early.  Novice programmers can continue to work on it at home and bring it to my office hours.  It's due a week after they started, so they can spend as much time as they need.  While everyone is working, I go around and help with urgent questions, but I also encourage them to talk to each other about questions.

I usually have the in-class computer exercises count toward their participation grade.  Students who miss class can get the exercise from me later and still submit it by the deadline, so I don't have a big problem with handling absences.  I grade them on a check-plus, check, check-minus scale, so they're pretty quick to grade.  Sometimes I have a grader who can grade them.

If students have to install a compiler or other software, I start warning them on day 1.  I try to know where to refer them if they have trouble with installation.  (For example, we have a site license for Matlab, and I can refer them to IT with Matlab problems.)  The first day that they're supposed to bring laptops to class running the software, I expect that some of them won't have installed it and/or know little about where files download on their computer.  Therefore, my first in-class assignment is running a simulation I wrote and answering some questions about the output.  If they don't have the software yet, they can look over someone else's shoulder and still answer the questions.

Now that they have the software and I've sold them on the idea that they can simulate cool stuff, Exercise 2 is a basic introduction to the language.  I have them work through a tutorial and then modify some code to do a simple problem.  It's easier for them to modify existing code than write new code from scratch.

I've written tutorials and exercises for the languages we use in my classes.  This is time consuming, but I haven't found existing stuff on the internet that gets to our advanced topics without covering way too many extraneous simple topics.  It's important to think carefully about what they need to know.  Do they really need if/then and loops, for example?  I cringed the first time I didn't teach those, but honestly there's a lot of useful data analysis stuff you can do in R without loops (and the built-in stuff runs faster than anything I'd write myself with a loop).  The materials we use in my classes have about the bare minimum they need to know.  Most of the exercises involve our class topic, so they're learning class content while improving their coding skills.  Each exercise adds a small number of new coding skills.  I also try to train them on debugging and finding new info online, but that's harder.

Partway through the semester, I start putting problems on their homework that involve some coding.  These aren't started in class, so students are working more independently.  The ones who need help are encouraged to come talk to me, though.

Working in my favor, these classes are small (15-20 students), and I don't have a set amount of content I need to cover.  I've had some great successes.  For example, I've had biology majors who never coded before learn enough that they could write a simulation to do novel research for their end-of-semester project.  I've had some failures too, of course, but the grading is structured such that you can probably get a B even if you bomb all the coding assignments.
Let us think the unthinkable, let us do the undoable, let us prepare to grapple with the ineffable itself, and see if we may not eff it after all. ~ Dirk Gently

pedanticromantic

@Marshwiggle: it is not trivial like excel stuff.

@liquidambar This is very useful, thank you. My classes are larger, but it sounds like we have similar populations of students. If you think of anything else please add it!

marshwiggle

Quote from: pedanticromantic on October 29, 2019, 03:24:26 PM
@Marshwiggle: it is not trivial like excel stuff.

@liquidambar This is very useful, thank you. My classes are larger, but it sounds like we have similar populations of students. If you think of anything else please add it!

I think the tutorial sounds like a good idea. If this is important for the students to learn, teach it properly and don't worry about those who may have seen it before. (And even if they have the context may be different enough that you will still touch on some things that they hadn't seen.) In another thread I've indicated that I'm a big fan of teaching real skills explicitly, even if that takes away time from "content", so that students are aware of something that they have learned that will potentially be useful long after they're done with this specific course.

It takes so little to be above average.