Teaching Webcraft / Compare your practices to IES report's recommendations

I'm taking an online course at the P2P University, on "How to teach webcraft and programming to free-range students" taught by Greg Wilson.

Looking at the initial comments on the course it's possible I misunderstood what "free-range students" means ; from the course description I took it to mean teaching in various non-traditional settings, but it might actually be specifically about online learning (?). It's fine, the general concepts of "what is good teaching", "how people learn" and how to encourage independent learning will be helpful anyway. :)

First task

Our first task is to take a look at the IES (Institution of Educational Sciences) report on "Organizing Instruction and Study to Improve Student Learning" (summarised in Greg's post here) and compare their recommendations to our own approach to teaching programming.

For the record, I teach sporadically in my own time, to small groups of 6 to 10 complete beginners, usually-but-not-always adults, in the local hackerspace.

Recommendation 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.

In a 5 or 6 weeks-long course, this can be difficult. However, most concepts do build on top on each other: once learnt, they will be used every week from then on. The later concepts could benefit from regular review, but by then the course is about finished unfortunately.

Recommendation 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.

From the 2nd session of the course, I start by showing a short, working program to the class and ask them to think about what it could be doing, (trying to) figure out as a group what could be its purpose. This sounds more like review though, as it reuses the previous concepts. The report also reads that alternating working examples + exercises is hugely important. "Worked example solutions" should go into much more details than what I've been doing as well (showing intermediate steps, rather than only the final solution).

Recommendation 3: Combine graphics with verbal descriptions.

Combine graphical presentations (e.g., graphs, figures) that illustrate key processes and procedures with verbal descriptions.

I can't say that I'm really doing this. I'm projecting code, sometimes working out solutions in front of the class but this isn't particularly graphical. I'm not sure how to do this either. It actually reminds me of the approach to learning that Sean O'Leary mentioned in his talk on differentiated learning at the Reimagining Learning conference, where he told us about adding visual cues to quizzes and concepts to help dyslexic learners and students with a more visual approach. Although useful, this doesn't exactly match the IES report recommendation which advocates making sure the graphical element is directly relevant to the concept being taught.

Recommendation 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.

The report explains that students gain an understanding faster when using concrete examples, but then don't know how to transfer the knowledge to new problems ; while students who learn the concept abstractly struggle more initially but are then more flexible with the knowledge. The report advocates mixing up both, which I'm not doing or not doing well as my students tend to have trouble reusing previous concepts to break down more intricate problems on their own.

Recommendation 5: Use quizzing to promote learning.

Use quizzing with active retrieval of information at all phases of the learning process to exploit the ability of retrieval directly to facilitate long-lasting memory traces.

5a. Use pre-questions to introduce a new topic. I don't do this. I wonder if "previewing" an unknown programming concept would help learning, or increase confusion. It'd definitely need to solve a concrete problem, ideally that we encountered in the previous session.

5b. Use quizzes to re-expose students to key content. I don't do this either. (Actually, reading on the report, presenting small programs and asking students to figure out what it does may be considered a quiz, as it encourages them to retrieve previously learnt material). It's interesting, and I wonder how to apply it to teaching practical programming while keeping the questions short and meaningful (maybe tiny programs with missing bits, with a multiple choice as to what to fill the blank with?)

Recommendation 6: Help students allocate study time efficiently.

Assist students in identifying what material they know well, and what needs further study, by teaching children how to judge what they have learned.

6a. Teach students how to use delayed judgements of learning to identify content that needs further study. I'm not doing this, except perhaps brutally when giving exercises that a student doesn't know how to solve.

6b. Use tests and quizzes to identify content that needs to be learned. This advises giving a quiz, written or oral, could be done as a game, right after presenting new material, so students can assess what they actually do remember. I don't do this. Considering most of my students don't make the time for homework or studying at home, I don't know if this would be very effective on its own. Or perhaps it would highlight that they do need to study outside of the class and encourage them to do so...

Recommendation 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.

I do a tiny bit of this when I introduce a new concept or explain what an existing program does, but not very deeply, nor involving the class enough (it can be tough generating discussion!). Some of the suggestions include having students think aloud, then comment and build on each other's understanding.

Leave a comment

Debugging udev rules under Debian

I've been playing with the Finch, however today I was unhappy to discover that the robot stopped working again for non-root users. The Finch documentation helpfully links to this blog post on how to write a udev rule, which is the script I was using in the first place.

SUBSYSTEM=="usb", SYSFS{idVendor}=="2354", SYSFS{idProduct}=="1111", MODE="0660", GROUP="plugdev"

Time to figure out how to debug udev rules! The debian wiki hints at a tool called udevtest, which doesn't exist on my system or in aptitude. Turns out nowadays one should use udevadm test instead. Here we go: thanks to lsusb I know that the Finch is on bus 001, device 007.

# udevadm test /dev/bus/001/007

In the output around the rules file for the finch, there is this:

add_rule: unknown key 'SYSFS{idVendor}' in /etc/udev/rules.d/55-finch.rules:1
add_rule: invalid rule '/etc/udev/rules.d/55-finch.rules:1'

Looking for documentation on how to write udev rules, one would find the following guide, which indicates that ATTR should be used instead of SYSFS. Let's rewrite the rule:

SUBSYSTEM=="usb", ATTR{idVendor}=="2354", ATTR{idProduct}=="1111", MODE="0660", GROUP="plugdev"

The error doesn't show in the udevadm test output anymore, and unplugging/replugging the Finch makes it usable by non-root users again. Victory!

Leave a comment

Teaching programming to beginners Latest roundup

An overdue post on the latest course I taught, which ended about 2 weeks ago. I taught a group of 9 people (8 adults, 1 teenager) of various backgrounds the basics of programming, using Python. It went well overall, and the class atmosphere was enjoyable.

For...

Unfortunately I still fail to explain some concepts clearly -- namely the dreaded for loop. I kept telling myself I needed to change the way I introduce it and finally did so, and wow. It went even worse than before. I could see in my student's eyes how they were trying to understand, until eventually shrugging it off when I couldn't find any different way to explain it. It may have come across a bit better eventually when we started working with files and used for loops to go through every line, but introducing the concept went very blergh. Definitely need to do it differently next time. I think I will try to introduce the for loop over 2 sessions: one where we only see and do exercises related to "for i in range(0, x)" and separately introduce "for item in my_list".

I don't know if I just forgot before, but failing to get a concept across is really, really depressing. I was bummed out for a while afterwards, wondering if I'm just making more damage than good and messing up my goal of making programming less intimidating.

...Yet another reason to do better next time!

Exercises

I should make sure to have at least one "Fill in the blanks" and "Change this existing program so that..." type of exercises for every concept. I think they encourage students to read and try to understand existing code -- an important skill to develop, and it also makes the first attempt at using a new structure more manageable.

In general, I'd really like if I could find a neat program that could be cut down into exercises relating to each concept, that'd build up to something cool and awesome as the course goes on. It would help get across that complex programs are really made up of simpler pieces ; if you can't figure out how to do something, break it down further. I haven't really figured out a program that fits the bill yet.

Overall, material-wise I'm getting there (except for For :|), it'd be worthwhile focusing on improving the exercises for the next course.

Homework

OMG some people actually did the exercises as homework this time :O Wow. I tip my hat to them, it's great and it paid dividends for them. Unfortunately it also meant they had nothing to do while the others were catching up, so... I should probably give away only a portion of the exercises as homework, and save a few for the actual session. (The idea with the exercises is that everybody should get at least 1 done before we move on ; having many gives the faster students something to do while others don't feel too rushed.)

Duration

I taught over 5 weeks this time (2h30 in the evening with a 20-30mins break), and I will do 6 weeks next time. For real beginners it's still reasonable and it will let me take more time on concepts like For, and maybe an opportunity to show at the end what else there is to programming, and give ideas on which direction they could go on from here (GUIs, web development, robots...).

Speaking of robots

At the last session I brought a Finch, which I still haven't had much time to play with :') But with the Jython bindings it was possible to show a 5 lines Python program that has an effect in the real world. The Finch was very popular!

I want to play with the robot more, and see if perhaps it would make sense to use it to teach the whole beginner course at some point in the future (which would bring its own set of issues, $$$-wise).

Student feedback

As usual I asked if students could fill in a feedback form.

Everybody agreed they learnt a lot. "Fun" and "interesting" were in about everyone's "3 words to describe the course", with"hard" and "challenging" occasionally thrown in there :) "Useful" came up in half the forms too, which makes me happy.

The projector wasn't great with yellow which unfortunately was the default colour for strings in the IDE. It would have been worthwhile spending the time on fixing that rather than let people squint (sorry :().

A couple of requests to link more clearly exercises with the real world. So very difficult when we're still introducing new concepts! But definitely something to strive for.

Someone suggested writing a sample program where every line is explained (e.g. if x:    <-- this will do...). I think it's a good idea, I will try for next time. It would be useful as a reference.


I should be teaching this course again around March. Any pointers to beginner exercises, general comments, teaching advice, teaching programming tips all very much welcome!

Leave a comment | 3 so far

Playing Last.fm from emacs

I enjoy listening to Last.fm and recently decided it would be handier to control it from within my emacs session. Getting it to work didn't take too long but wasn't as straightforward as I hoped, mostly because it's easier to find documentation for older versions of emms (including on the official website) and the last.fm parts have been entirely rewritten recently. Anyhow! If you're in a rush, the short version is: find the latest version of the code and follow the documentation from the source itself!

What to install

From your package manager, using Debian here:

aptitude install emms mplayer2

Note, that installing mplayer instead worked fine on an Ubuntu machine.

Getting an API key

Search the documentation linked above to get more details. Basically, using the latest version of the Last.fm API requires a secret API key, which isn't a concept that works well with GPL software. To work around this, we request a personal API key, which we will add to our .emacs config file.

Request a key at Last.fm. The keys will be displayed on screen rather than sent to you, therefore write them down now. As far as I can tell the "app description" will only be seen by yourself, when you allow emms-lastfm-client to access your Last.fm account so don't worry too much about the description.

.emacs

Add the following to your config file:

(require 'emms-setup)
(emms-all)
(emms-default-players)
(setq emms-lastfm-client-username "myusername")
(setq emms-lastfm-client-api-key "myapikey")
(setq emms-lastfm-client-api-secret-key "mysecretkey")

Setting up emms-lastfm-client

Now, within emacs (taken straight from the docs!):

  1. M-x emms-lastfm-client-user-authorization - this will open a web page, asking if you want to grant access to the app (with the name and description you gave it when requesting the API key)
  2. M-x emms-lastfm-client-get-session - this is to store the authorisation key so you don't have to go through the authorisation process every time. If it doesn't work you might need to first create ~/.emacs.d/emms manually.

You're set! M-x emms-lastfm-client-play-similar-artists to select who to listen to :)

Useful tips

To stop the music: M-x emms-stop.

To remove the url display/track information:  M-x emms-mode-line-toggle (or -disable) and to remove the playing time information: M-x emms-playing-time-disable-display (they push the org messages too far out right!)

Other error messages

Some messages you may encounter along the way...

Contacting host: ws.audioscrobbler.com:80
progn: missing variables to generate handshake call

The documentation seems to suggest that setting a username is optional, but it's not. Make sure your .emacs contains your username in addition to the API key and secret key.

f: Don't know how to play track: (*track* (type . url) (name . "http://play.last.fm/user/1234567890abcdef0.mp3") (metadata))

emms uses an external program to play music, which is why you need to install mplayer or vlc.

Leave a comment | 3 so far

Teaching, take 4

As mentioned before, I'm teaching programming again, to a group of beginners :) (Although as usual, even in a group of complete beginners there are variations in people's levels and comfort with the subject.)

Initial advertising

I'm really happy with how the PR worked out this time. The first time I taught this course in Tog, I made the mistake of putting "Python" in the name of the course and ended up wasting a lot of time screening out people who wouldn't be a good fit. This time I only mentioned it in passing, and the amount and type of answers I got was much more manageable and appropriate. We still managed to fill up the course and to have a waiting list (hope to see you next time!), so it's a success. I'm pasting the announcement here for future reference:

Class: Introduction to Programming

Are you curious about programming? Ever wished you could write your own scripts to automate repetitive tasks, or for fun? Or been interested in understanding how an application works (and why there are always bugs in the software you use??). Tog is running a new class on learning how to program, for complete beginners with no previous programming knowledge.

The course will cover basic programming skills, which will also give you a better understanding of how computers work. We will be using Python, an excellent learning language because it is simple yet powerful, and extremely readable. At the end of the course you will know how to write simple programs, and you should have enough understanding of the basics to move on to either more complex programming tasks in Python or learn another language if you wish to.

The course will begin on October 20th and will run for 5 weeks every Thursday from 7.00pm to 9.30pm. The cost is €40 for non-members, and free for members. The class size is limited to about 8 people, for a relaxed atmosphere conducive to learning.

If you are interested in attending, or have any question about the course, please use the form below or leave a comment — we’re happy to answer any query! You must sign up if you want to attend, space is limited.

Please note that this is a course for complete beginners, who are not yet familiar with the usual syntax for programming. If you’re a programmer interested in picking up Python, you should keep an eye out for our crash courses!

A fair percentage of the students heard about the course from Twitter even though I'm not on it, which is interesting. I should explore how to use the tool better. As I mostly hang out with fellow nerds, reaching out to interested beginners is always tough, so anything that can help...

Pace

The pace of the course is manageable as well -- which doesn't mean preparing and teaching isn't time-consuming still! But I felt quite burnt out last time after the pace at which I taught the PhD students (mostly through my own fault), so it's refreshing to come back to teaching pure beginners and not go crazy from week 2.

Surprisingly enough and to my utter delight, a huge portion of the students took on the exercises as homework! I'm so happy when I get questions about the exercises or lessons via email, to see people interested enough to poke at problems outside of the classroom. If we keep it up we should be able to cover more as well, which will be interesting for everyone.

As for feedback, I found a couple of positive tweets after the first session, which is always encouraging. Woohoo \o/

Leave a comment

Learning Japanese or, what to after the Michel Thomas Method

Since listening to the Michel Thomas Foundation Course, I've been intensifying my learning of Japanese. I'm not sure if I'm learning in a sustainable way, but I'm enjoying the journey and will ride the wave of motivation while it lasts :) In case I inadvertently take a break and later want to come back to it, I'm going to write down a few words on what I'm doing at the moment. Perhaps it'll be useful to someone else too. 

Audio

I just finished the Michel Thomas Advanced Course, listening to one lesson in the bus every morning for the last while. When I initially picked up the Foundation Course, I was hoping to learn some conversational Japanese without worrying about the writing system ; however I really enjoyed the Advanced Course, which taught me lots of things I either never learnt or more likely completely forgot about since my initial stint at Japanese 10 years ago.

The Michel Thomas Method is wonderful to build confidence, and the Advanced course introduces you to many interesting grammar structures using the -て and -た forms. I'm looking at Japanese Pod 101 to get my audio fix now -- their content seems very good, despite the spammy feel of their sign-up process. They actually offer a lot more than audio.

Grammar

To get back to writing, a text book seemed appropriate to start learning "proper." I'm using the kana version of Japanese for Busy People, mainly because I was eager to begin learning and it was available at my local bookshop, and the Amazon reviews are good. Don't use the romaji version. I'm enjoying it, there are plenty of exercises and they try to use pictures as often as possible to help with retention, there's a CD included with the book and some of exercises are audio (listen then answer the questions in the book). It doesn't expand on grammar rules a lot though, so one should make sure to go back to the grammar pages regularly. For those not in a rush and with the money to spare, the Genki series looks to be fairly good.

Kanji & Vocabulary

One of the things I'm determined not to be discouraged by this time is kanji. I got myself the very nice and sturdy White Rabbit flash cards...

...Unfortunately after 40 or 50 kanji the ideograms, readings and meanings stopped sticking into my head. It was time for context. See below! The cards are still good to have around for recall, just not as a single learning source.

For vocabulary, I'm also testing Iknow.jp, for which I luckily obtained a 4 month free subscription. It doesn't focus on kanji as much as I'd like, but you learn to recognise words and sentences with both audio and text, which is quite good. They have several courses that together teach thousands of words of vocabulary.

In general, to guide my learning of kanji I'm using the kanji list recommendations for the Japanese Proficiency Level Test. Weakest level is N5 and requires about 100 kanjis (reading a newspaper requires about 2000!). I'm also curious at the TextFugu approach of teaching the radicals first, which seems to make more sense to me and is another avenue to explore.

Kanji in context

I tried a bilingual manga, which was a mistake (the English sticks out more prominently than the Japanese, and probably doesn't encourage focusing as hard on recognising kanjis). What I will warmly recommend are the wonderful Japanese Graded Level Reader book series. I'm going through Volume 0 at the moment (300 words/story, about 300 words of vocabulary overall) which read like simple children stories and I find them as confidence building for reading as the Michel Thomas method was for listening. Each volume contains 6 booklets entirely in Japanese, in which new concepts and words are repeated a lot so that between the repetition and the pictures, the reader can figure out the meaning of most of the story. It's very cute, and you learn about Japanese culture as well. Very much recommended. There are many volumes for different levels.

After I read one of the aforementioned "Reader" booklets, I add the kanji and grammar expressions I don't yet know to a set of Anki flashcards, with the help of jisho.org and Tae Kim's guide to Japanese grammar if needed. Anki's a wonderful piece of software! You can synchronise for free between different machines to make sure the Spaced Repetition algorithm keeps up no matter where you go through the cards, and it has a Maemo port (ankiqt900), among many other platforms. I'm still figuring out how best to make cards ; sometimes having the kanji on its own, other times including context.

Finally, I bought the first volume of a manga I'm interested in that has furigana, and I'm still exploring what's the best way to read, and learn, and create flash cards out of it without ruining the flow, losing interest or having to make 20 flashcards out of every bubble... (ahem!) I don't expect the process to be fast in any case :)

勉強しましょう。(<- let's begin testing the unicode resilience of this lil' blog!)

Leave a comment

Electro-sewing workshop in Tog

Cheryl will be teaching the first electro-sewing workshop in Tog, on October 21st! Have a look at the Tog post to learn more, including how to sign up. This will likely be followed by more electro-fashion workshops in the future, keep an eye out for them. I'm really looking forward to it, combining technology with artistic fields is bound to result in wonderful projects.

Come along and sign up to the workshop, learn how to use conductive thread and create a small circuit to make your very own LED flower :)

~ ~ ~

Do you work on something cool, in open-source or open culture or general tech? Would you like to teach a workshop about it, give people a taste of why it is cool and interesting? Please get in touch!

Leave a comment

PyCon Ireland 2011 Another successful event!

Congratulations to Python Ireland and the PyCon Ireland committee for the successful 2nd edition of the conference! If you weren't there, you should feel sad. I would be.

Lots of interesting talks and just like last year, a whole bunch of very friendly and knowledgeable attendees to talk to and share a meal with (or a drink, for lucky people who won several raffles... :o)) (hehe) (I did!)

I sadly missed the first keynote, which I look forward to catching up on on video. I was busy helping out at the registration desk, and discovered I really enjoyed welcoming attendees to the conference. A new hobby!

I don't know how productive in general Sunday was, sprint-wise and code-output wise. The open space format seemed to work well on the other hand! I attended the RSI talk and the buildout tutorial (must look more into Buildout) and spent the rest of the day PRing for Tog, distributing Berocca and talking shop. On Sunday afternoon, together with a fellow Tog member we stealthily stole away a dozen attendees to go and visit the hackerspace, conveniently located right behind the venue. Delegates were returned to the conference unharmed and inspired (I hope!).

And because one cannot ever have enough Python, the usual monthly meetup is on this Wednesday!

Leave a comment | 2 so far

PyCon Ireland 2011: BEGIN!

PyCon Ireland 2011 starts tomorrow! If you haven't got your ticket yet, that's tough because we sold out a few days ago! Congratulations, organisers, for what promises to be a fantastic event.

I also seem to have inherited a yellow staff tee-shirt so... Feel free to find me and say hi if you're lost (or not!). I'll hand wave and do my best to be helpful. :)

Leave a comment

Book review: The Name of the Wind, by Patrick Rothfuss

I started reading the Fantasy and Science Fiction Magazine free digest recently. Very enjoyable, including the book reviews, particularly when I read Michelle West's review of the sequel to the Name of the Wind (no spoilers for either book here):

PATRICK Rothfuss's first novel, The Name of the Wind, was possibly my favorite novel of the last decade. It brought me back to a time when books were the best way to travel to distant places. It burned away the ennui that had troubled my reading for longer than I care to remember. The Wise Man's Fear is the sequel, the second book in the Kingkiller Chronicles. It is not short. It is a worthy follow-up?

Yes. Very much yes.

But if I'm being honest, that was never a concern.

Books are a little like people to me. There are some that impress me with the clean, clear edges of their thought; there are some that I find both fascinating and repelling; there are some that I grow to love over the passage of pages; there are some that try too hard to impress. I name no names here because books are also personal, and my categorizations will not map onto anyone else's with any degree of accuracy.

There are some books that I'm drawn to instantly; there is something about them that feels real, true, and compelling for reasons that are not immediately clear to me. Often those reasons take form and shape only after I close the covers and sort out thoughts. I don't doubt these books when I pick them up; I don't doubt them when I open them. I don't second-guess them; I'm willing—even grateful—to take what's offered, suspending judgment but offering wonder, awe, outrage, and respect in turn.

Rothfuss writes such books. Wise Man's Fear is the longest book I'll read this year, and I didn't want to leave it. If Neal Stephenson wrote fantasy, the resulting books would have some of this texture and weight.

Picking up the threads of Kvothe's story from The Name of the Wind, [...]

The rest of the review does contain spoilers, I assume -- I stopped right there and went to buy the Name of the Wind, which proved to be quite a wonderful and addictive read indeed. Warmly recommended! The writing style is quite original and the story and world grip you in straight from the beginning.

I'm holding on -- with great difficulty -- getting the sequel, to try to space the books out while waiting for the final volume of the trilogy to be out. We'll see how long that lasts...

Leave a comment

<~ Older posts


Archives