CMPT 165: the revisening

September 28th, 2014, 3:15 pm PDT by Greg

I have recently been reviewing introductory web textbooks for CMPT 165. They seem to all show signs of having been written in 1999, and revised, and revised, and revised. This leads to weird anachronisms where things haven’t been revised exactly perfectly. I end up seeing a lot of things that would leave students confused about the “right” way to do things, how to approach designing a page, etc.

Then I look at my own CMPT 165 (Introduction to the Internet and WWW) materials. And I see the same things in a course that has been revised and updated several times since 1999.

So I have decided that it’s time. Time to start with a blank page and rebuild the course from scratch.

I have decided on a backbone that emphasizes the underlying structure of the web: HTML for content, CSS for appearance, and JavaScript for behaviour. For at least the HTML and CSS, I’m staying with a familiar formula: introduce structural markup and content/presentation separation without falling into the trap of explaining every tag/property.

On the programming part: (1) I want to start as soon as possible so students have as long as possible to get their heads around the idea of what programming is. (2) I want the JavaScript introduction to (as much as possible) have the flavour of real JavaScript client-side programming: most beginner tutorials are basically old-fashioned console I/O programming introductions shoehorned into the browser. I don’t think that’s compelling.

That lead me to a structure that involves introducing the Big Three (HTML, CSS, JS) as early as possible, and then building on the basic concepts of the three together. Also, it has to be a thirteen week course, accessible to people who have never opened a text editor before, teach some basic ideas of how computer science people see the world, hopefully contain a moderately-coherent chunk of material at the end: all the usual restrictions on such a course.

This is, of course, scary. You know that “fear of the blank page” thing? Imagine the fear of the blank textbook… that you have to fill… and you have already promised you’ll actually produce.

So to make it even scarier, I’m baring my soul and putting the whole thing on Github.

At this point, I’d be happy to get feedback on the course: what belongs, what’s important, how to actually do these things I have proposed? What is this “flavour of real JavaScript client-side programming” thing that I proposed to do a few paragraphs ago and how does it translate to a first-time programmer?

Restaurant Suggestions, and responsible instruction

April 4th, 2014, 12:39 am PDT by Greg

This semester in my CMPT 165 class, I was faced with a problem: it was a one/two hour split. A two hour lecture is too long to talk straight through, but too short to take a real break (since 200 people can’t go get a coffee and come back in 10 minutes). So, I decided to just take a “no learning” break in the middle of lecture.

For hard to understand reasons, I decided that the right thing to do was to give a restaurant suggestion every week (and then give them five minutes or so to talk amongst themselves). It had the take-a-mental-break feeling without having them all run out of the room.

My weekly restaurant recommendations were somewhat random: kind of whatever I felt like talking about that week. I recorded the recommendations on the class discussion forum, so I would remember (mostly for myself). Below is my discussion records, along with some editorial additions. I also tried to give a tip or two on what to order, since it can be intimidating to go into a place where you have no idea what’s going on.

Maybe this is a followup to my North Burnaby Food post, since I did have an “accessible from Burnaby campus” bias.

  • Week 1: didn’t have the rhythm of the semester down yet, so no recommendation.
  • Week 2: Indian Wok, especially the chili dumpling appetizer. [This is by far my favourite place to eat at the moment. Where has Indian-style Chinese been all my life? My usual description: “it’s like Chinese food, but a little bit better.”]
  • Week 3: Burgers Etc, especially the pattyless veggie burger. [I maintain that their off-menu pattyless veggie burger is the best vegetatian “burger” I can direct you to. Everything else on their menu is also pretty solid.]
  • Week 4: Alvin Garden or 湘緣湖南食府. Possibly order things from the “Xiang’s specials” page of the menu? I’m always a fan of Hand-Torn Cabbage (手撕包菜 or “Hunan style cabbage” on their menu), but I’m not sure it’s any better there than anywhere else you find it. Just spicier. [This was part one of my “annoyingly vague English names of Chinese restaurants” rant. “Alvin Garden” is meaningless. The Chinese name translates to something like “Xiang River Hunan Restaurant”, which is wonderfully meaningful.]
  • Week 5: Kulinarya, a Filipino place behind Coquitlam Centre. My suggestions: breakfast (Tapsilog or longsilog), crispy pata, lechon. [I really don’t think Filipino food gets the recognition it deserves. I blame the Filipino tendancy to assimilate. I claim that Filipinos are the best at breakfast: definitely in the Asian division, and likely worldwide to my tastes.]
  • Week 6: Cotto Enoteca in north Burnaby for some excellent Italian food. Nothing on the menu is bad. [Although I may admit that the food quality is slipping a little under the new owners/chef.]
  • Week 7: Hog Shack in Steveston. Again, no way to go wrong. The combo platters are a good start. [It’s a little out of the way for SFU students to get to, but there isn’t much good BBQ in Vancouver. It’s also a uniquely American cuisine, which hadn’t made the list so far.]
  • Week 8: midterm day.
  • Week 9: Perfect Taste Restaurant/老東北風味餐廳 in Crystal Mall in Burnaby. No useful ordering tips since I didn’t order there. There’s always the option of asking “what are the most famous dishes” or something. [This is part 2 of the “useless English names” rant. The Chinese name is “Old North-East Flavour Restaurant”: it’s the cuisine from around north-eastern China, around Liaoning and Harbin.]
  • Week 10: In honour of Nowruz, a Persian recommendation of Cazba in North Vancouver. One ordering tip: a lot of the dishes have a choice of rice or salad or a mix for $1 more: pay the extra dollar and get the mix. [I don’t have great depth of experience with Persian food, but this seems to be the one that gets recommended by the Persians in my life. I feel that given the size of the population, there should be more restaurants to choose from.]
  • Week 11: Coffee shops! Caffe Divano in the North Burnaby neighbourhood (and a couple of other locations); Prado Cafe on Commercial; Revolver in Gastown. See also an excellent list of Top 10 Independent Coffee Shops in Vancouver. [I feel like I have a whole blog post about coffee shops. For now, let’s say I haven’t found the exactly perfect drink, but Divano is close to both my house and a perfect drink. I feel like 49th Parallel also needs some exploration on my part.]
  • Week 12: Soho Tea Room on Cambie at 19th. Order the french toast (which isn’t much like french toast as I know it) or the Macau sawdust pudding, or any of the bubble teas, or any of the wacky variety of food. Other Taiwanese cafes: Corner 23, Copa Cafe. And there’s kind of a fuzzy line between those and bubble tea places like Dragon Ball Tea House and Bubble World. [I described the Taiwanese cafes as “it’s like the not-really-Chinese Chinese food that we get everywhere but Vancouver went back to China as “Canadian food”, but in reverse. Sandwiches and spaghetti went to Taiwan and Hong Kong, mutated, and have come back. With bubble tea.]
  • Week 13: are we slightly short this semester? I don’t have a Thursday lecture in week 13.

I left the discussion forum with this question, that I’ll also invite answers to here: imagine your grandma/grandpa/auntie/whatever was visiting Vancouver and you wanted to show him/her that “it’s okay, I can get real food here, just like back home.” Where would you take them to get the old fashioned food that they want (and where are you from)?

You will notice that I have a real bias to that kind of “grandma approved” food in the above list. Fusion and high-end food are fine, but not where my heart lies.

April Fools

April 1st, 2013, 12:18 am PDT by Greg

Having too much time on my hands here, and realizing that I teach both courses on April 1 this year, I decided I needed to do something about that.

I’m giving my lectures here differently than I always have at home. Here, I’m doing my notes as HTML, in decent point form, as I always have given lectures. I’m posting the notes for the class and basically using them as lecture slides. I just bump the font size up three or four notches, and scroll through them as I talk.

It’s working pretty well: they have something they can review later if they don’t catch the English of it all. It’s causing exactly the problem that kept me from this experiment at home: without having to write, I can say too much in one lecture. It’s very easy to cover material at an unreasonable pace.

I decided that for April Fools, I wanted to have the characters on screen move around, just subtly enough that they initially wouldn’t be sure if they really saw anything or not. After a little Javascripting, I had something I’m pretty happy with. You can see what I ended up with on a demo page. If you’re into Javascript code, I have posted that as well.

What you see in the demo is a character being animated every two seconds. I left it at every five seconds during lecture, so it was more subtle. They had plenty of time to look at it, after all.

I think it worked out pretty well in the discrete math course. I could see the occasional student do a double take. A couple of times, one fired near a part of the screen I was pointing at, and I had to ignore it. I let it run for the first half of the lecture and them told them what was going on: it seemed to be appreciated. There seemed to be a mix of “yeah I saw it” and “I thought I was going crazy at first”, which is about what I wanted.

Now to see how the web development course takes it…

Edit: The web course was probably more split. I think some of them noticed right away, but some never did. It’s also possible they’re just more expressive than the 8am group.

One Week and my Comfort Zone

March 4th, 2013, 6:25 am PST by Greg

I have now officially completed one week of teaching: the discrete math course last Thursday and Monday morning. Web development Monday night.

The discrete math course is going fine. It’s material that should be near and dear to my heart: my undergrad was math and computer science after all. The problem is that it just isn’t. I have moved on and prefer my CS with computers in it now. Not that this is a serious problem, it’s just hard to get excited about discrete math at 8:00 am.

I’m just back from my first web development course. Having not taught the material for 6 months (or started the course for 10), I had started to forget the feeling. Teaching web stuff (or programming languages: CMPT 470 or 383 in the SFU lingo) feels good. It was like a old sweater (old boots? custom-tailored clothing? What’s the expression?). Finally, something that was right bang in the middle of my comfort zone.

After all the (good) weirdness of the trip, then adjusting to China, then to ZJU, then to discrete math, it was such a contrast. I could have stayed up there and talked about web development until I dropped from exhaustion.

My big worry about this class was their English level. The math course is DDP students, so they have taken extra English courses, but I wasn’t so sure about this group. Judging by my internal engagement meter, they seem just fine. That’s a load off.

At some point during the class, I asked (begged) if someone could get the campus VPN craziness to work under Linux. [I have been working in Windows, which is also not comfortable.] After class, about 10 kids came up and assured me that it was easy. In five minutes, my laptop connected to the VPN under Ubuntu. [To be fair, it was easy: if you already knew how, and were on the cc98 message board, and could read Chinese.] That’s one more big step into my comfort zone.

When I got home, I had a rum and diet coke, using the Tanduay we got in the Manila airport (for $2$4, double the in-town price). It isn’t much to sip straight, but mixed with coke, it’s a damn serviceable rum. More comfort. [Mom and Dad: you’ll be pleased to know that I still often give a thought to Glen when I have a rum and coke.]

So there you go: web development, Linux, and rum. That’s apparently my comfort zone.

The Life Of A Student

October 2nd, 2012, 11:34 pm PDT by Greg

For reasons that are better left to another blog post, I am not teaching this semester. I have some project students, and am supervising a distance ed course.

Rather than have free time (like a normal person would opt for), I decided to prepare for my semester in exile by taking a Mandarin course.

Being on the other side of the lectern is weird.

And not just any Mandarin course, naturally. I’m taking the intensive course that our DDP students take. It’s basically the regular SFU Mandarin course at double-pace. This means that I’m going to learn a decent amount before I go, but it’s a little like drinking from a firehose.

The instructor has done a really good job of organizing the course to make it all bearable, but there is just a mountain of vocabulary to deal with.

Surprise #1: the written language doesn’t bother me so much—I’m actually pretty good at remembering characters, which I did not expect.

Surprise #2: I’m being a much more kinesthetic learner than I would have ever expected in my learning. The characters are less a picture than a series of motions to draw them. I often remember the tones of words with a motion in my head.

Surprise #3: I recently got a Chinese name (吴君睿/Wu Junrui) and a Renren account (the Chinese facebook equivalent). Using social media with only Google translate and conventions to guide you is a challenge. Doing the CAPTCHA to open the account took me like 20 minutes.

Current mood: cautious optimism.

Life of a Journeyman

August 10th, 2012, 9:09 am PDT by Greg

We were watching some No Reservations the other night, and Tony referred to himself as “essentially a journeyman chef”.

For some reason, the word “journeyman” stuck in my brain as one of those words that I don’t really know what it means but probably should. As usual, Wikipedia has an excellent description:

someone who has completed an apprenticeship and is fully educated in a trade or craft, but not yet a master. To become a master, a journeyman has to submit a master work….

And from Merriam-Webster:

an experienced reliable worker, athlete, or performer especially as distinguished from one who is brilliant or colorful

Now the idea was really stuck in my head, because it so perfectly fits a problem I have been having. Occasionally a student says something like “thanks, that course was great”. I have an uneasiness about the word “great” for a reason I can now articulate.

I see myself as a journeyman lecturer.

My courses are those of someone who is fully educated in his craft: they are fairly well designed and executed. But, they fundamentally present the obvious material in the obvious way and aren’t exactly mind altering. Basically, experienced and reliable, not “brilliant or colourful”. None of them are anything I would consider calling a “master work”.

This is exciting, because it means there may be a master work out there somewhere in my future, and I don’t know what it is yet. Note to self: find master work.

So I continued to read the Wikipedia article:

spending time as a wandering journeyman (Wandergeselle), moving from one town to another to gain experience of different workshops, was an important part of the training of an aspirant master

Traditionally, a journeyman well… journeys. A journeyman tradesman would put on the traditional costume and go out, hoping to make enough money working for a master to make his way to the next town. [Important point: the guys in that picture are not historical reenactors. There are still tradesmen in Germany who do this.]

Perhaps there is some professional journey I could take. Let’s come back to that.

[Forgive the gender-loaded vocabulary, but “journeyperson” just isn’t a word and wouldn’t have the same ring to it if it was.]

Need a CMPT 470 instructor

August 25th, 2011, 3:20 pm PDT by Greg

As many of you know, I’m the most frequent instructor for CMPT 470, Web-based information systems, at SFU. I love teaching the course, but it’s just not possible to do it every semester. In particular, it’s not possible for me to teach it in the spring (Jan-Apr 2012).

So, it will likely be posted as a sessional (contract) instructor position. We have had sessionals do the course in the past, but I reckon I can make things a little more interesting: there’s a good web development community in Vancouver, and there a lot of people who would do a good job with the course. There is also an increasingly-large group of CMPT 470 alumni who have been out there in the world for a few years getting some experience: some of them would be good at this too.

I just have to find somebody and get them to actually apply. So, I’m putting the call out: anybody interested or know anybody who’d be good?

The course (as I approach it) is a survey of web development topics: markup and style, HTTP, server-side programming, client-side programming, architecture/speed/backend stuff, and whatever else I feel like talking about that semester. The big piece of work for the students is a group-based project which makes up a big chunk of their final mark.

Officially the appointment requires a masters degree, but a case can be made for somebody with industrial (and even better, teaching) experience. The course is scheduled in the evenings (Mondays 5:30-8:30) on the Burnaby campus, so shouldn’t interfere too directly with a day job. Pay is around $8500 plus benefits.

Of course, anybody teaching the course is welcome to my lecture notes, assignments, web materials, and anything else I have that would be useful. There’s no official posting yet, but I figure it’s a good time for people to start thinking about it. I’m happy to talk to anybody about the course.

Edit: I should point out that I’m not the one making the hiring decisions. I’m just an interested third party.

Version Control conundrum

June 4th, 2011, 12:27 am PDT by Greg

As most of you know, the School’s new course management system is my baby. It keeps track of many things, but what I care about right now is (1) who is in a course, and (2) what groups have been formed for assignments/projects/whatever.

Given those things, I have had this idea: It would make perfectly good sense for each of those things (every student in a course; every group in a course) to have a version control repository automatically created for them. The instructor and TAs would also have access, but wouldn’t have to set anything up. Students could use the repositories even in courses where the instructor doesn’t know what technology is.

I have used Subversion repositories for the project groups in CMPT 470 for years. The benefits from my point of view:

  1. Groups can collaborate in that way that version control systems allow.
  2. Students can work on code (even individually) in multiple locations and with versions kept.
  3. All of their code is safely backed-up on a server that we kind of trust.
  4. I can review what members of the group contributed what code.
  5. It’s a nice and easy way to submit code: just give me the SVN URL.

When contemplating technologies to implement my scheme, I went first to GIT (or possibly some other distributed version control system, since they’re all the rage). GIT also has a pile of nice management tools like gitolite that make creating thousands of repositories surprisingly easy.

But while experimenting, I realized that GIT inherently trusted the user-provided information about who they are. If I claim to be “Barack Obama <president>” in my commits, then GIT lets me push those commits just fine, no matter who I have authenticated as at the central server. So, I pretty much lose benefit (4) in the worst cases (which are the cases I’m usually concerned with), which is pretty much a deal-breaker by itself.

The “distributed” nature of any DVCS gets me this problem one way or another—anybody could push the whole group’s work since they could be working for weeks without touching the central server. And having made that realization, I have to admit that (3) also disappears: they don’t have to push to the server very often, so a crash on their end could lose a lot of work.

Finally, knowing students the way I do, (5) is gone too. I’d give a lot to not have this conversation five times a semester: “I got a zero.” “You didn’t submit any code.” “Yes, I committed it.” “You committed it, but did you push it to the server?” “Yes, I pushed it.” “You typed the command ‘git push’?” “No, I use ‘git commit’. That puts the code on the server.” “No it doesn’t. You didn’t put any code on the server where I can get it.” “Yes I did… I committed it.”

Also, it’s my understanding that it’s not possible to give a URL to a subtree of a GIT repository: the only URL is to the project itself. That makes submitting with GIT much harder.

So, I’m left with this: distributed version control is at least as good for developers, but it’s very bad for instructors.

According to Wikipedia’s comparison of revision control software, the only open source, “actively-developed”, “client-server” VCS is Subversion. So it looks like I’m back to the totally-uncool and old-fashioned SVN?

Does anybody want to refute any of that?

Ten Years

November 29th, 2010, 12:44 am PST by Greg

As of the end of August 2010, I have been employed as a lecturer at SFU for ten years.

On the basis of Peter Norvig’s excellent essay “Teach Yourself Programming in Ten Years“, I extrapolate that in the past ten years, I must have learned how to do this thing that I claim to be my profession.

Because I like Norvig’s examples, I will add my own: Queen formed in 1971, and played the Queen Rock Montreal show in 1981. Just look at that performance, just look at it! I’m convinced Freedie was an alien from the planet of excellent stage performers and was exiled for making everyone else look bad.

While I’m not Freddie Mercury, I think I’m doing okay. I have felt my lecturing style change, even within the last year. It’s somehow just easier; more comfortable. I’m more likely to leave a lecture and think “anybody that thinks they could have done that any better can go fuck themselves,” usually on days when I have coffee, which does funny things to my brain.

I still think of myself as a better course designer than actual “lecturer”, but that’s another story.

By the numbers: (all values as close as I can figure without really looking that hard)

  • Students taught on campus: 4900
  • Students supervised in distance sections: 2200
  • Time spent lecturing: 1600 hours, or two straight months
  • Time spent watching exams: 220 hours, or one icepick lobotomy
  • Sections of CMPT 120: 4
  • Sections of CMPT 165: 14 on campus, 17 distance
  • Sections of CMPT 470: 13, with 153 project groups
  • Projects supervised: 9 (capstone, directed studies, etc.)
  • TAs supervised: 125
  • Emails sent and received: 150,000 (wild guess)

Okay… I’m tired just looking at that. Must be getting old.

CMPT 470: feedback wanted

August 26th, 2010, 4:21 pm PDT by Greg

Along with my first offering of CMPT 383, I just finished my 13th offering (!) of CMPT 470. I haven’t changed the backbone of the course much in that time: it mostly feels good to me, and other than moving with shifting web technologies, I haven’t felt the need to change the course style.

But now I’m taking a good hard look at the course. I still like the overall flow, but there are some things I want to change.

I did a survey of the current students to get some feedback, but they lack perspective, having just finished the course. I figure I can get some eyeballs from course alumni here and am looking for some more meaningful feedback.

Question 1: Weekly Exercises and Grading Scheme

When I did CMPT 383, I gave weekly exercises, thinking that they might feel a little bit hand-holdey for an upper-division course. Much to my surprise, they worked better there than they do in 120 and 165: more-senior students are in a much better position to appreciate the micro-lessons that the exercises encapsulate and better understand why they are helpful. It’s also a chance to give problems on everything, not just a few things in major assignments.

I have realized that I want to do weekly exercises in CMPT 470, replacing the three assignments. The problem is: the assignments are worth 30% of the course. The weekly exercises would receive minimal marking and feedback (likely marking scheme: 2=most/everything correct, 1=some stuff done, 0=little/nothing done). With that little “grading”, 30% is too much to give to them: 20% is more reasonable.

So, I have 10% of the final grade to reallocate somewhere. Any suggestions about where an extra 10% of weight should be distributed? (The old grading scheme is online.)

[To give you an idea, I’m imagining that some of the exercises will be like “learn these three important CSS techniques and use each to style this sample page”; “find security holes in this sample mini-app I have created for you”; “pick Rails/Django/whatever and do the tutorial on their site”; “deploy your tutorial code on your group’s web server”; “do something with jQuery”]

Question 2: Content

I have certainly done my best to keep with the times, and talk about new web-related topics as they have become relevant. But like I said before: the overall backbone of the course has remained the same.

Are there things that I should have spent more lecture time on than I did? Things that took up too much time?

I definitely want to move JavaScript stuff a little earlier in the course: it deserves to be at least a little more front-and-centre than it has been.

Question 3: Other Stuff?

I have a few other smaller tweaks in mind, and am open to other feedback.

In particular, I plan to (explicitly) open the technology evaluation to a wider array of technologies: JavaScript frameworks, databases. This past semester, I started to realize that the server-side frameworks (Django, Rails, Cake, …) are all fundamentally the same (at the depth that’s possible in the techeval). There are other pieces of technology that are more interesting choices at this point, and they might as well evaluate those.

I’m happy to take any half-baked thoughts on any of this here, or by email.

« Previous Entries