Week 10: The Finish Line

It was the last week of the quarter, the end of CSE120 and an extremely fun week. Because of the 42nd SIGCSE conference in Dallas, I missed Friday as did Susan, and so the final class was canceled by a vote of the students.

Narrative on Week’s Goals

Monday’s Encryption and Steganography lecture was one of the high points of the term, a big finish.

Calendar Entries for the Tenth Week

Lec 7 March: The lecture introduces encryption, briefly touching on the Caesar cipher, Private Key Encryption and an overview of Public Key Encryption, and then moves on to Steganography. Motivated by an example mentioned by Owen Astrachan, the material is taught by example wherein a photo, the guest is embedded into a host photograph to hide it. Because it is a way to ship pictures under the noses of repressive governments, I use a photo of a jubilant crowd in Cairo’s Tahrir Square as a guest photo,

and a tranquil photo of two men fishing on a foggy morning

as a host. After the process is explained, it is implemented and embedded picture is compared with the original. Then the class lines up for a class photo, which becomes the guest for another embedding.

Lab 8 March: Lab 08 is a simple XML styling exercise using XSL. The point is to solidify the ideas of using XSL as a styling agent for XML in order to support the final assignment. One student came to office hours afterwards to get help, but generally they had no difficulty with it, and most finished quickly.

Lec 9 March: This is not a lecture, but rather a walkthrough review of the second half of the term in preparation for the final.

Lab 10 March: No formal lab exercise is planned, but Brandon is on hand to help with the assignment.

Lec 11 March: Canceled due to the teaching staff attending the SIGCSE’s Symposium on Computer Science Education.

And How Did It Turn Out?

Monday’s encryption/steganography lecture was a terrific success. Students were skeptical when I said I would hide a photo in another. The idea of first restricting the photo to two bits per color per pixel worked well, leading to a discussion of the differences. Then, after the embedding the two images were compared – there is no apparent difference. But, because the original used jpeg representation, but and the embedded copy used png representation (to avoid the lossy compresson) there seemed to be a slight shading difference. I’m guessing that the difference tricked one student into claiming that there was a visible difference. This made the tineye.com searches for the host and the embedded photo, which come out the same, a compelling experiment to do. There was a reluctance to come up for a class photo (everyone’s wearing their “finals week” sweats), but in the photo the class is smiling, so I assume it wasn’t too “elementary school”. We embedded the class photo, and extracted it! With a little bit of time left, I passed out the student evaluation forms for them to critique the class.

After class I sent everyone the embedded class photo and told them how to extract it.

Tuesday’s lab apparently achieved its goals, because on Wednesday the students clearly understood the task.

Wednesday’s review, like its counterpart at the end of the first half, left the class in a grim frame of mind. It’s been a long time since I’ve had to explicitly take a test, but this seems odd. I would think it would be positive, because I mentioned lots of stuff that wouldn’t be on the exam, but apparently, I left too much stuff on the list that might be on it.

Thursday’s lab time turned into office hours for Brandon and a few students sought help.

Friday was a free day, though they still had to do the AIS.

The class ended with a bang rather than a whimper. Steganography being so impressive, it was a good way to remind them that they had learned a lot, and that the magic of computers and networks had been revealed, only to be replaced with a more fundamental kind of magic. The public doesn’t even know about recursion or steganography, but they do. Perhaps they seem magical to them, too.


This was the week of notation. There was no Processing programming. A couple of students mentioned that they appreciated the change of pace, and given that the goal is not to produce accomplished programmers, it is reasonable to lay off of Processing. And, this is important content.

Narrative on Week’s Goals

The week started with a bang with a guest lecture from CSE professor Zoran Popovic.

Calendar Entries for the Ninth Week

Lec 28 Feb: Zoran’s lecture starts with a quick review of graphics from his lab that are presently used in video game systems. But then he asks the class what problems to work on to make the world better. His list (the students mention them too) includes disease and poverty. He explains that because computers are great at some things and poor at others, and humans tend to have the opposite skills, it makes sense to combine their abilities rather than expect one of them alone to solve such difficult problems. Games, he points out, are an effective setting for the two to collaborate. He proceeds to discuss FoldIt and other games he has in the pipeline.

Lab 1 Mar: Lab 07 is a small CSS exercise to teach the students the styling basics of HTML and the concept of referencing information held in file, i.e. indirect reference. Also, with only one previous HTML assignment, this gives greater experience building Web pages.

Lec 2 Mar: A lecture on meta-data, tagging and XML. The presentation emphasizes the separation of content from processing and that XML can structure data without presupposing how it is to be processed. The three classifications of XML tags – identity, affinity and collection – are introduced; students show that they can recognize how the tags are used.

Assignment 18: This final assignment is suitable to be performed on a student’s personal machine. Indeed, the task – create a personal database using XML and displayed in the form of a diary – should be something that a student can use. The first part was to download a copy of picture display software (simpleviewer,) and notice how XML is used by the authors; using a single XML file to display several forms of the view shows the advantages of separating data from processing. The second part was to modify an XML file that implements a diary, adding five days of personal information. Finally, students are to add new XML tags and the corresponding XSL styling templates to implement them. It’s not a lot of work, but perhaps a little involved, as XML/XSL tends to be.

Lab 3 Mar: This was going to be an exercise to practice XML/XSL interaction [see Lab 8], but that topic is not presented until tomorrow. So students do the Part 1 of Assignment 18. Though it is originally designed to be done on a student’s own computer, it can be done in the lab, too, using publicly available .jpg files.

Lec 4 Mar: This lecture explains how the XML tags can be styled by a browser, based on XSL templates, and introduces the XSL tagging style to achieve it. This can be a very involved topic, but the lecture threads its way through an implementation, ending with suggestions for how the solution would be extended depending on the new types of data that are to be added to the XML file. This diagram seemed to be very effective as a guideline for what we are trying to achieve:

Illustration of How XSL styles XML

At the end Susan presents a series of quotations from the reflection component of the “Teach Scratch To Someone” assignment. This allows her to reinforce the purpose and value of the exercise, which some students were skeptical about.

And How Did It Turn Out?

Zoran’s lecture on Monday was – according to a couple of students – totally inspirational, a point I agree with. The class was engaged throughout the whole lecture. When asked on Wednesday what did they take away, that mentioned how important problems could be solved by human/computer collaboration.

In Tuesday’s lab one student finished in 15 minutes (obviously, someone with experience), but most took the whole hour and, according to Brandon, stumbled some. There was no consistent problem, apparently, and they’ve turned-in the work. As always, I wonder whether the point – indirect reference – every made it into any student’s conscious mind.

Wednesday’s tagging lecture was my first real attempt to teach this material to the beginners. I think it was successful, but as with earlier introductions to database topics, students don’t seem to find it captivating. They were following along, however, because when we got to tag classification part, they all jotted down the definitions and offered answers to my classification questions. Then it was back to zoning.

Thursday’s lab was routine. This evening, I was named “Teacher of the Year” by the campus Hellenic Women’s Association, possibly the first CS person ever to be recognized by that group.

Friday’s XML/XSL lecture came off well. One student who’d been out sick and hadn’t seen most of the prep came by after class to get caught up, and she caught on quickly, despite claiming she’d been lost in lecture. If students find the ability to customize their own meta-data to be interesting and useful, then the data portion of this class will have been a hit. We’ll see how it plays out.

Overall, it was a fun week for me, and also for those students I chatted with directly. The attendance was good all week, too, so my comments on the previous Friday may have made a difference. Although I’m looking forward to rapping it up next week, it would be wonderful to teach this class more computing courses.

Week 8: This Is Data

This week marked the move into the final series of topics focusing on data and meta-data. With one more lecture that we will have in the future (I have to be at the SIGCSE conference to describe this class on the last day) I would do a relational database introduction to knit this together tightly.  As it is, it’ll be loosely knitted, I guess.

Narrative on Week’s Goals

Without a doubt, the highlight of the week was a lecture by Prof. Richard Ladner of CSE on Accessibility. Richard is a pioneer in the area, and gives a lecture that is both practical and inspirational.

Calendar Entries for the Eighth Week

21 Feb: President’s Day national holiday.

Lab 22 Feb: Meeting in a classroom rather than the computer lab, the students hear a guest lecture from Prof. Richard Ladner of CSE. One of his points is that handicapped people, rather than being a “medical problem,” add diversity to our culture; the point of assistive technologies is to allow them to participate as full members of society. The lecture enumerates the evolution of various assistive technologies, and makes the point that technology developed for handicapped people is often generally useful – “curb cuts” used by baby strollers as well as wheelchairs was one non-electronic example. Computers can make the world better!

Lecture 23 Feb: The topics are advanced query formulation, structure of HTML, search engines and page rank. This turns out to be one topic too many, because I quit 10 minutes early so Susan can introduce the next homework assignment. Accordingly, page rank is flushed, despite a very slick example. The HTML part reduces the technology to three slides and an example. The motivation for introducing it (I hadn’t intended to do HTML) is to explain how a crawler works, and to prepare for tomorrows lab on HTML.

Assignment 16: Students are to teach themselves Scratch, spending at least three hours on the activity. They then write a comparison between Scratch and Processing. They prepare a “lesson” for teaching Scratch to someone else, which can take any form from a conventional lesson plan, to a song or animation. Then they give the lesson to someone and reflect on it.

Lab 24 Feb: This lab prepares for the XML discussion later. Students receive a cheat sheet of the most common HTML tags, and using the previous lecture’s 3-Slides-And-An-Example, do a lab in which they develop a Web page.

Lecture 25 Feb: The week ends on a high note as Susan presents her lecture on Debugging. It is a mix of her discussing principles and setting up exercises, and the students working in pairs to debug. She passes out a seven page Processing program (with standard color annotation). Cleverly, the Processing code they are debugging comes from one of the better Pair Programming games, turned in Wednesday. It has a clear problem that is easy to understand – she displays it on the screen – but it is not a trivial oversight. After the class works on debugging it, one of the students who wrote the code comes up and explains the bug and fixes it for the class.

And How Did It Work Out?

We are achieving our more modest pace, without a significant fall-off in content. Curiously – or maybe I mean, predictably – the more moderate pace harms attendance.

Tuesday’s – Ladner gave a great lecture, and it unambiguously makes the point that computers can improve the world. (He didn’t say it, but I would. And I would repeat the famous story about Stevie Wonder getting the first Kurzweil reading machine.)  The content is unquestionably worthy of presentation, even if Ladner is not available to deliver it.

Wednesday’s – Though the lecture was “scored” as being one topic too many, I think it would have been fine given the full 50 minutes. That said, I’d change the lecture. The portion devoted to formulating good advanced queries, seemed not to connect with the class. I wonder if it is either (a) known or too obvious, or (b) unclear why they need to know that in a CS Principles class. If the latter, (but, I think it’s the former) I now think they are right. It really isn’t necessary.

As an aside, I had struggled to decide whether to present material (as we do in Fluency) about how to evaluate Web sites in terms of how authoritative the information is. I decided against it. It’s really important, but it’s not really CS Principles. That same line of reasoning should apply to query formulation. At this point, I think this is a crisp example of how Fluency and Principles classes differ. (Security is another topic that highlights the differences.)

In Thursday’s lab the activity to make a Web page went very well. I am extremely enamored with the 3-slides-and-an-example approach to HTML. The students effectively picked it up on their own, which has been a theme I’ve emphasized all term, but with limited – in my view – success until now. I am pretty sure the 3-s-a-a-ex worked (we’ll see when the numbers come in) based on the fact one student who has REALLY struggled all term came for a meeting right after lab. She was enthusiastic because she’d finally gotten lab material straightway rather than struggling, and she’d made her page, and finished before her former pair-partner. Such success can breed confidence, but because this was an open assignment – no specific Web page was required – it probably promotes creativity at some level, too.

Friday’s debugging lecture was very nice. The problem was that only half the class was present. (It was the first sunny day in a while (probably for the year) in Seattle, so playing hooky is not unheard of.) I mentioned it in email to the class, because under the circumstances (no book, rapid deployment, the need to be agile), material is mentioned in class that is needed for assignments and/or labs, but not available in the written documents.

I had not intended to do HTML in this class – it seemed like too much notation – but I really cannot see how to avoid it, given the coming coverage of XML. So, it is an “add on,” but I will definitely keep it. It’s easy, which has always been one reason to do it – and very tangible. Students see this stuff a lot, and if they actually start looking for it, they’ll see it everywhere.

One possibility is to move HTML earlier in the term, possibly after Lightbot and before Processing. This would have the advantage of raising the difficulty gradient a bit more slowly; it seemed almost discontinuous to me this time. This would also better support the “personal Web portfolio” idea of the second lab that is only limping along right now. The students could literally build the page themselves rather than modifying mine, as they did this time. And, we could make reference to HTML at other places in the class, which I recall wanting to do.

Of course, there are downsides. One is that the teaching it to yourself via 3-slides-and-an-example won’t work so well at that point. They are nubies. But, it could be restructured some so that much of the learning could be independent. That would be very good. It is also very far into the future when we return to it. They will remember well enough, I suspect, but maybe not. And, the lovely sequence from “functions” in Lightbot to functions in Processing will be interrupted by the HTML. This may not be much of a risk, because the only person who seemed to appreciate this idea we me!

Week 7: AI and Watson

It was propitious that IBM’s Watson machine was playing Jeopardy this week. I reorganized the lectures so I could introduce the AI material before the competition. Then, on Tuesday we had a small reception with pizza and salad before going to a screening of the second night’s competition. It furthered the “more relaxed” feel of the courses’ second half.

Narrative on Week’s Goals

AI would normally have been taught later in the term, mostly as a “pick up” topic, as it seems somewhat secondary to the big ideas. Moving it was effective.

Calendar Entries for the Seventh Week

Lecture 14 Feb: I augment what I think of as a “standard” introductory AI lecture with Watson-related material. Having chatted with non-techies over the weekend and found that most people don’t see it as a big deal, I decide to give an explanation of why chess is easier than understanding a pun.

Lab 15 Feb: It was an opportunity to work on pair programming with assistance available. Most teams had already been checked off, and so they started work. I check off two more in lab, but still, not every pair has been approved.

Lecture 16 Feb: The topic was the Internet, IP, Ethernet and related matters. The goal, like all of the technology lectures, is to remove the “magic” of networking, and show it as a completely practical and understandable process. The analogies – Cerf’s, IP is like sending a novel by postcards, Ethernet is like a conversation at a cocktail party – make these concepts accessible.

Lab 17 Feb: More time for pair programming with Brandon available.

Lecture 18 Feb: The topic is how the Domain Name System translates domain names like spiff.cs.washington.edu to This is also a chance to talk about physical and logical forms of a phenomenon such as computer names. Finally, it is important to discuss the design issues that arise in creating the DNS, such as robustness, fault tolerance, redundancy, and other systems design concepts. I also include “thinking at scale.”

And How Did It Work Out?

Overall, the excitement about Watson was shared by only a couple of students in class. Generally, most saw it as just a publicity stunt.

Monday’s AI lecture was fine, but I think I failed – and the prep material failed – to persuade the class that what Watson was doing was amazing. Chess still seems to be tougher than puns in their minds. The topic of AI is always engaging; they immediately landed on emotions as a stumper topic for the Turing Test. The creativity part of the lecture was less effective than in previous classes I think, possibly because they had struggled enough with Albers that it had become a painful topic. I don’t know.

Tuesday’s pair programming engendered a lot of apparent enjoyment in lab. The teammates appeared to be more “equal” when they were the same sex, probably an obvious observation.

Wednesday’s Internet lecture also held the class’ interest. There were questions about interacting with ISPs unrelated to the lecture. The analogies worked, as usual, and everyone seemed to get them.

On Thursday, another day of pair programming … the excitement has evaporated, and now the hard programming and debugging have consumed the students. In conversation, they are definitely positive about it, though.

Friday’s lecture was my first try at an introductory DNS lecture, and I pronounce it a complete success. I had originally thought that I was belaboring the “problem,” since I seemed to be saying it in three different ways. But in reality, it was probably right: They understood what the problem was, and one student essentially figured out the process based only on the underlying mechanisms. The next slide showed that her guess was correct. Indeed, the setup problem that was going to promote more discussion — how can I log in from Miami to my computer in Seattle — kind of flopped, because the class had already gotten the idea, and why belabor it?

My cartoons of the idealized authoritative name servers – one for a domain of machines and one for a domain of domains – seemed to be easily comprehended.

Diagrams of the two extreme cases for authoritative name servers.

On balance it was a very positive week. The pair programming is getting rave reviews from virtually the whole class (apparently, one pair are dissenters). And the pace is more civilized, too.

But, without a doubt the best part of the week was that I got a lot of face time with the students. First, they had to come in in pairs to discuss their project. This was fun because they only had to explain it, and it was fun to joke around about what they are doing.

Also, they came in one at a time to correct their mid-term tests. (At Susan’s suggestion, they were allowed to work out the solutions to the problems they missed, come in with the correct answers, explain them to me and get (up to) half credit restored.) Though I was initially skeptical, this turned out to be a tremendous benefit in terms of finding out first hand what they understood, and what they didn’t. Also, in a couple of cases where they still couldn’t do a problem (usually the function for figuring total money in dollars from a bunch of coins), I would step through the process with each one. This exercise (which was really valuable) showed me that I need to emphasize still more that thinking of the computation from the code’s point of view is essential. I doubt it can be over-emphasized.