#CS teachers: I need help developing an inquiry task

I am trying to develop a task for my online ICS3C/3U Computer Programming/Science class, and I need the students to be deeply “engaged”.

I return again to my latest, favouritest definition for student engagement: “A student is engaged in learning when they feel a compulsion to pursue the learning apart from external motivations.” That is, not just for marks, and not just because Mr. G said they have to. I want them to want to learn.

So I want the students to pursue their own interests as much as possible. I believe giving students the freedom to choose will be a lot more likely to kindle that compulsion I want to see in them, and will result in deeper learning and, rather importantly, more fun for all of us.

My challenge is figuring out how to frame that task so that I give them

  • enough latitude to pursue whatever interests them (knowing that I can’t predict these things!)
  • enough guidance to help them formulate their plans (so they can learn from the experience)
  • enough restrictions to ensure that they are learning for this course (since I have to assess and evaluate them).

So I’m a little stuck. I’ve created an openly-editable Google Doc with their learning goals and my initial thoughts. I would be very, very pleased if you would take a look and add comments, ideas, criticisms… anything that can help me move forward with this. I’m trying to plan very carefully to minimize the chance that this wastes my students’ time and effort, and to minimize any unnecessary frustrations they experience.

Here’s the document; please share widely: Learning Computer Science Through Inquiry

Much thanks in advance, from me and from my students!

Advertisements

Teaching Computer Science online – the hard parts

This semester I am teaching my first e-Learning course (I’ve been supporting e-Learning for five years; time for me to walk the walk, eh?). It’s a split ICS3C/ICS3U course in Computer Science and Programming.

I’m using Java with NetBeans and we’re coding “desktop” applications (i.e. not mobile yet). We might later move to Android programming, but I think that’ll probably be enrichment for interested students. There isn’t really a requirement to write for mobile in the course, and it adds a lot of extra layers of complexity.

“The Range”

Complexity would be fine, except many of the students are first-time coders – zero experience with programming of any kind. That’s normal, since ICS3x doesn’t have a prerequisite, and many schools (especially in Northern Ontario, but elsewhere too I understand) can’t afford to offer ICS2O as a precursor.

Of course, many of the students do have a bunch of programming experience, some in Javascript or Visual Basic, others in HTML, and a couple in many languages.

So I have what I think is a typically wide range in starting points for learning computer science and computer programming.

Troubleshooting at a distance

Teaching online has special challenges for any course, but ICS has software requirements that are significant and unusual. You need a “computer” – no tablets, no Chromebooks*. You need an application installed and a development kit. If students are using computers owned by their school boards they may have to ask to have those items installed for them. I’m sure you can imagine how easy that is to accomplish.

Of course, many students are using their own computers. I prefer this, because they can install their own software (a useful skill in its own right) and they have a lot more coding time (evenings and weekends).

So what do you do when you get an email like this?

“Hi Mr Grasley, I can’t find Netbeans on the computer at school. I don’t know what to do.”

After several email messages, we got it all worked out. I’m sure the student was frustrated, and I felt a little helpless. The special software needs are tough up front in the course.

These aren’t Word documents

The e-Learning environment has a handy document renderer which nicely formats Word and other documents for me in the browser. It’s a fairly new feature, and it works really well.

It can’t handle a .zip file containing a Java project, of course.

So, I have to download the student submissions and import them into NetBeans or unzip them and open the .java files in a text editor. A little more onerous, but still manageable.

That’s it so far

See, I’m not complaining – it’s pretty good to have only a couple of issues that are special. I like teaching online, I get to reference xkcd in my course, and I’m looking forward to the rest of the semester.

*It is possible to use a cloud-based development environment, which would allow you to code using other kinds of devices. I’m not “supporting” that just yet, but I can see it down the road. I’m hoping some of my students try it out and report back.

Will I teach computer programming again?

How I learned to code

I started to learn programming on a Commodore VIC-20 (great online emulator at http://mdawson.net/vic20chrome/vic20.php), then on the Unisys ICON computers (also BASIC) when I was about 10. It was interesting, but I don’t feel like I was really ready for a lot of the concepts involved. Maybe things would be different today…

I dabbled in this and that (learned a tiny bit of assembler, more BASIC, some C) until Grade 10, when I took Computer Science with Mr. Boston at White Pines C&VS. That’s when I really started to take an interest. We worked in Turing, a procedural programming language, and I learned the basics pretty well there. In particular, I remember writing a program to draw a Mandelbrot set on the screen in black and magenta. Eventually I rewrote the program to make a more colourful version, but I can’t remember whether that was in Turing or something else.

Ahead to the University of Waterloo, where I started as a Pure Math student planning to get a minor in Computer Science. My first CS course used Turbo Pascal, a procedural programming language. This was not a course for CS majors (so I qualified).

Partway through my second year of school I was looking for a job for my Coop term. There were positions advertised for the Instructional Support Group (ISG) for tutors. I needed to stay in the Waterloo area (my wife was in North Bay at school and we couldn’t afford to keep up three apartments), but I wasn’t really qualified for any of the serious CS jobs at RIM or Sybase or anything. When I interviewed to be a tutor for CS120, a Turbo Pascal course, the interviewer informed me that they really had a need for Java tutors. I had no Java experience at all, but they hired me anyway (must have been my exceptional charm) and I had a couple of weeks to learn the language well enough to stay ahead of the students.

I started by trying to complete the first few assignments that students were going to have to complete. I started out okay, but then I found that whenever I tried to compile and run my programs I was getting errors like

Non-static method doSomething(int) cannot be referenced from static context

I didn’t know what that meant, really, and I wasn’t Googling then, so I just “fixed” it: I made everything static.

I didn’t understand how object-oriented programming (OOP) worked, and it wasn’t until I’d asked for help, fixed my programs, and saw the power of objects that I really understood what it was about.

I learned a lot about Java in several terms with the ISG, including some interesting work with JKarel, a virtual robot (based on Karel) used to teach OOP. I also learned some shell script (evidence here), bridge, and 5-handed bid euchre (thanks Phil).

I’ve since been disappointed in the security issues that Java has had in the past few years, and had thought my days of Java programming were possibly over.

But now…

This September I’m planning to return to classroom teaching, so I’m starting to think about what I’d like to do. My teachable subjects are Math and Computer Science, and I’ll be the Subject Area Head for Math. I’m expecting that CS won’t be on my timetable for the 2014-15 school year, but I think it would be nice. I haven’t had a chance to teach programming and programming concepts since I left the ISG 2003, and although I’ve dabbled on my own I’d like to jump in again with both feet.

About a week and a half ago I stumbled across and bought “Programming Android: Java Programming for the New Generation of Mobile Devices” on Kindle for $7.51 (I see that today it’s $19.66, which makes me feel unreasonably clever). I haven’t even cracked the virtual cover yet, apart from skimming the Table of Contents before buying it, but I’m kind of excited to revisit the world of software design. I didn’t realize that Android programming was based in Java (using a non-Oracle VM called Dalvik), and so hope rekindled. I don’t even have an Android device, but I’ll be able to code for free using the Android SDK and software emulators, as well as actually loading onto a device down the road.

I’m kind of excited

Programming in Turing helped to develop some useful, basic skills (like understanding loop structures, program logic, data types, etc.) but didn’t really leave me working in a “practical” language (one that is used in real life). Java is a language used in industry, and the prospect of writing Android apps has to be a least a little engaging for students, I hope. This seems like a good starting point for grade 10-12 students who want to learn something fun that will also be useful for them when they leave us. I hope I get the chance; I’m certainly going to ask for it.