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?