Skip to main content

A draft schedule for the new digital humanities CSC 151

Topics/tags: CSC151, Racket, digital humanities, rambly, excessively long, insufficiently edited

When I start to develop a new class, I find it useful to put a few things in place. I develop a big picture for the course, the general sense of what I expect students to get out of the course [1]. I reflect on the core topics that belong in the course. I sometimes write an introduction, as I’ve just done for the forthcoming digital humanities version of CSC 151. And, some point near the beginning, I choose the order of topics. That is, I put together a schedule.

In developing a schedule, I rely on a variety of resources. If a colleague at Grinnell has taught the course, I will often look at their schedule. I might also see what colleagues elsewhere have done for the course. If I’ve planned to use a textbook, I review its order of topics [2]. Nonetheless, in many cases, I decided that I’d rather use ad-hoc resources or resources that I write myself, rather than using a textbook. In some cases, that’s necessary because of the topic or approach that I’ve chosen. For example, I’m pretty sure that there aren’t textbooks that take a workshop-style approach to introductory CS through the lens of media computation, data science, or the digital humanities. And even if such books exist, they aren’t in Scheme [5]. In others, I can’t find a book that approaches the material in a way that satisfies me. I’m picky, and I get frustrated by issues as small as poor formatting.

Where was I? Oh, that’s right. I was writing about developing a schedule and ended up writing about writing materials for my courses. When I’m writing texts for my courses, the schedule helps me think about what to write. Generally, I try to write materials in order. The schedule helps me decide that order.

Since I’m developing a new version of CSC 151 and I’m writing a more-substantial-than-normal-for-SamR textbook [6], I should put together a draft schedule for the course. And it’s definitely a draft schedule; I expect that as I write individual sections, I’ll find that I will want to reorganize topics. I also know that teaching the course will lead to some insights that also encourage me to rearrange topics.


Where do I start? I should first figure out the general constraints on the schedule. While I could design the course in the abstract, I know that the semester matters. I’d rather design for a specific semester first and then generalize later. In this case, I’m teaching an MWF class in spring 2019. In spring 2019, the semester begins on January 21. January 21 is Martin Luther King Day, which means that we cancel classes so that students can attend events associated with diversity and inclusion [7]. That means that we’ll only have forty-one days of class, rather than the more traditional forty-two [8]. And we’ll just have two days of class the first week. That eliminates a Friday quiz that week.

Spring break starts on March 16. That means that we have eight weeks of classes before spring break [9] and six weeks of classes after spring break. I’ve never quite understood why we don’t do seven weeks before spring break and seven weeks after, but I assume it’s partially so that the College’s spring break aligns with the local school system’s spring break.

The timing of spring break doesn’t matter for the order of the topics, except that I generally want to avoid a two-day topic that starts the last day before spring break and ends the first day afterward; students are unlikely to retain enough information over break.

However, the timing of spring break does matter for homework assignments. And, while they are probably less critical than the topics, it seems worthwhile to start with the timing of assignments. Come to think of it, some assignments, notably the class project, affect the topics we cover. And I’ve found it useful to use class time to debrief on some of the exams. So it is worthwhile to start with the large pieces of work.

Planning assignments

I plan to continue the long-standing model of homework assignments and take-home exams are due Tuesday evenings. Given the schedule, that means I’ll have something due weeks 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, and 14. The week-two assignment may be a bit complicated to write given that the class doesn’t start until Wednesday, but I’ll figure something out.

I’ve traditionally assigned an exam in week three that is due in week four. And for the past few years, we’ve given four take-home exams. Given changes to the add-drop timing, I find it less necessary to give a take-home exam so early in the semester. And it will likely make it easier for both the students and me if the course requires three take-home exams rather than four [10]. So let’s have the take-home exams due in week 5, week 8, and week 14. I’d prefer to have one due in week 9, rather than week 8, but that’s immediately after spring break, and it’s unfair to have work due then [11]. I don’t want to push the exam to week ten because the project will take weeks twelve and thirteen, and I’d prefer that they have two assignments between exams. Let’s see where that puts us.

Week Work
2 HW1: A Scheme-free assignment
3 HW2: First Scheme Assignment
4 HW3: TBD
5 Exam 1
6 HW4: TBD
7 HW5: TBD
8 Exam 2
10 HW6: TBD
11 HW7: TBD
12 Project Proposal
13 Project
14 Exam 3

I’ll figure out the details of the particular assignments later. I know that HW6 or HW7 will be about topic modeling and the other will probably have to do with tree traversal. What about the Scheme-free assignment? I’m tempted to have that one be about document markup, which means that the first Friday of class may need to be about markup languages [12] rather than Scheme. That should be okay. In any case, it behooves me to move on to the schedule before filling in more details of the assignments.

Some starting points

With the big picture of assignments out of the way, I’m now ready to explore particular topics we’ll cover and the way in which I’ll order them. As a starting point, let’s look at the CSC 151 schedule for last spring, the first spring offering of the data-science CSC 151.

Week Monday Wednesday Friday
1 Intro algorithms Intro Linux/Scheme Basic types
2 Lists Procedures Pair programming
3 Documentation Testing Debugging
4 Tables Files Boolean values
5 Discuss exam 1 Local bindings Conditionals
6 Displaying data Preconditions Recursion
7 Recursion lab Helper/tail recursion Patterns of list recursion
8 Numeric recursion Naming local procedures Randomness and simulation
9 Pairs and pair structures Vectors Trees
10 Higher-order procedures, revisited Files, revisited Algorithm analysis
11 Project introduction Association lists Project work day
12 Binary search Intro sorting Project work day
13 Insertion sort Merge sort Presentation prep
14 Presentations Wrap up Course evaluation

I also thought about looking at the CSC 151 schedule from the previous spring, which represents the last spring offering of the media-computation CSC 151. That was a four-day-per-week course, which means that it won’t necessarily be as helpful as I design another three-day-per-week course. Still, it will be helpful for me to reflect on the topics that we have traditionally covered [14].

Week Monday Tuesday Wednesday Friday
1 Intro algorithms Intro Linux Intro Scheme Numeric computation
2 RGB Colors Transforming RGB colors Transforming images Intro procedures
3 Intro procedures, continued I/O and side effects Documentation Testing
4 Testing, continued Pause for breath Drawings as values Lists
5 Booleans and predicates Conditionals Programming the GIMP Tools Anonymous procedures and local bindings
6 Images as functions Lists, revisited Recursion Recursion, continued
7 Preconditions, revisited Characters and Strings Helper recursion Helper recursion, continued
8 Pause for Breath Patterns of list recursion Numeric recursion Naming local procedures
9 Turtle graphics Iteration Geometric art w/numeric recursion Randomized drawing
10 Pairs and pair structures Vectors Trees On two-dimensional design
11 Project kickoff Higher-order procedures, revisited Higher-order procedures, continued Project work day
12 Files Analyzing procedures Association Lists Binary search
13 Discuss exam 3 Discuss exam 3, continued Discuss exam 3, extended Intro sorting
14 Project assessment: Images Project assessment: Code Recap Wrap Up

That schedule is a bit of a surprise. I know that I had not planned a week to discuss exam 3. I can’t quite remember why I felt it necessary, but I think it was to help students delve more deeply into problem-solving processes. It’s also clear that I did a lot of combining of pairs of related topics as I moved from fifty-six class sessions to forty-two class sessions [15]. And, as one might expect, I was able to drop some of the topics that tied to images, such as RGB colors, drawings as values, and geometric art.

Adding and dropping topics

What will look different in the new course? As I mentioned, I’ll have only forty-one class sessions rather than forty-two. While many general topics will persist, the particulars of most of those topics will change to draw upon whatever I settle on as the particular aspects of digital humanities to emphasize.

There are also things that I need to add. As I noted earlier, I’ve decided to start with document markup. I’ll need to add that in the first week of class. XML documents are trees, and I would, therefore, like to do more with trees in the class. I will certainly change the focus of the Trees topic will from BSTs [16] to XML trees. But I also want to add some tree processing earlier in the semester, using simplified Scheme equivalents of XPath and XSLT. I should add a day on regular expressions. That may be early in the semester. More broadly, it may be useful to devote a day to discussing each of the first two exams and not just the first exam. Such days are often particularly helpful in giving students additional perspective on approaches to problem solving.

A few of my colleagues have suggested that my perspective on the digital humanities relies too heavily on text. In part, that’s because my experience is mostly with text-based DH and my experience affects my perspective. But it’s also an issue of accessibility: Text is more broadly accessible than graphics. And, I must admit, it’s easier to come up with appropriately complex examples with text than graphics. In any case, it’s an issue that I should think about more deeply. For the time being, I’ll keep one day on graphics and visualization using the core Racket graphics tools. Maybe we’ll even start with some graphics; after all, the snowman example is a nice way to start learning Racket with images. And it does appear that the pict package uses a relatively pure approach to graphics [17].

I should also think about a day on using maps. Unfortunately, it’s harder to use something like Google Maps in Racket than it is in, say JavaScript. I see that there’s a Racket to JavaScript compiler called Whalesong, but it’s no longer in the current list of Racket packages. But perhaps I can write something using the Google Static Maps API. It seems relatively straightforward. But Google charges [18]. I wonder if there are free resources for education. Following some links led me to some Google Earth resources, including one entitled Visualize your data on a custom map using Google My Maps. But that seems manual, rather than scripted. In any case, it’s something I should come back to later.

Beyond the digital humanities, I’ve started to think about different aspects of Racket I might or might not include. Rackets structs seem like useful ways to group data. I’ve also debated switching how we do local variables [19].

Where does that leave me? If I remember everything I just wrote, I want to add the following topics: HTML/CSS, processing XML, regular expressions, visualizing data, maps [20], structs, and a discussion of the second exam. I’ve lost one day. So I need to find eight things to remove or combine. Displaying data (Monday, Week 5) is becoming visualizing data. I can drop tables (Monday, Week 4) The early discussion of files (Wednesday, Week 4) is mostly in the context of CSV; I can probably merge it into the first string day [21]. I see that we had gone from one 50-minute project work day to three 80-minute work days [22]. I suppose I should go back down to one [23]. That’s five days. I still need to find three more things to cut or merge.

At first glance, the discussion of local procedure bindings (Wednesday, Week 8) seems to be a bit much. After all, letrec only takes a few minutes to introduce. But we also talk about named let. We also re-emphasize the husk-and-kernel strategy that we introduced a bit earlier (Wednesday, Week 6).

Given that we revisit husk-and-kernel with local procedure bindings, do we need a whole day on precondition testing? Could we, perhaps, combine it with documentation (Monday, Week 3)? I traditionally run the documentation lab by having the class collaborate to write documentation. But we could use some of the time to write husks and kernels. It’s risky, but it’s worth trying.

I suppose that I could combine the wrapup and the course evaluation. I like the wrapup as an overflow time for presentations. And it’s somewhat pointless to introduce new topics in the last week of the semester. So it appears that the answer is No, I should not merge them.

What’s left to cut? There are two days in which we revisit topics, one on higher-order procedures (Monday, Week 10) and one on files (Wednesday, Week 10). In the former case, students learn how to write the higher-order procedures that they’ve been using [24]. We’ll need to keep that class. What about files? The students will learn how to read files early in the semester. The late-semester files topic is mostly about ports and output. It’s strange to teach an introductory class in which they don’t write files or write interactive programs [25]. But we don’t use files much in the class. And students get puzzled by much of what we do with files (not only the relationship between a port and a file, but also the patterns for recursion over files). So I’m going to temporarily make a somewhat controversial decision and drop that subject. I’ll need to revisit that decision with my colleagues.

At this point, I feel like I’ve cut as much as I can. So perhaps I will not add as much as I had planned. One option is to move some of the learning to homework assignments. It’s probably not the best decision, but, for now, I’m going to merge visualization and maps into a single day [26] and assume that I’ll come up with appropriate assignments.

A revised schedule

Of course, the syllabus is more than the list of topics. I need to come up with the right ordering. For example, in the media computation course, we went from making the drawings as values the initial focus to making RGB colors the initial focus. When we moved to the data science model, lists became the initial focus. That approach also let us introduce map, filter, and reduce relatively quickly. While I won’t only use text, it appears that strings and text will be the initial focus of the digital humanities course (along with the quick graphics introduction on the first day).

What are some issues at play? I’d like them to see conditionals before they take the first exam. I’d like to see them start to study recursion before they take the second exam so that I can include one or two questions on recursion [27]. I ended up moving randomness immediately after the introduction to recursion because I plan to include random text generation as part of the randomness, and some examples help illustrate recursion. Here’s what I have so far [28].

Week Monday Wednesday Friday
1 MLK Day Intro algorithms Intro Linux/HTML+CSS
2 Intro Scheme w/graphics Procedures Pair programming
3 Characters, strings, and text files Regular expressions Lists
4 Processing XML Booleans and predicates Conditionals
5 Documentation + precondition checking Testing Debugging
6 Discuss exam 1 Visualization + Maps Local bindings
7 Recursion Recursion lab Randomness
8 Helper/tail recursion Numeric recursion Patterns of list recursion
9 Discuss exam 2 Naming local procedures Pairs and pair structures
10 Trees Structs Vectors
11 Project introduction Higher-order procedures, revisited Algorithm analysis
12 Association lists Binary search Project work day
13 Intro sorting Insertion sort Merge sort
14 Presentations Wrap up Course evaluation

But the high-level schedule does not cover all of the details. For example, what aspects of lists do I cover when? Procedures like compose and section don’t appear anywhere. Do I introduce them when I introduce procedures or do I wait until, say, I start on lists?

If I use graphics in the new introduction to Scheme, I lose the coverage of numbers we traditionally begin with. While the basics of numbers are straightforward, there are some subtleties that we also cover. Where, for example, will we consider exact and inexact numbers? One possibility is to add them to the day in which we explore Boolean values and predicate procedures (Wednesday, Week 5).

I also note that, at first glance, this does not look like a list of digital humanities topics. That makes some sense, at least to me. After all, it’s still a computer science course. The digital humanities content gets incorporated in the context of each individual subject [29]. And the choice of digital humanities as the focus influenced both the subjects we will cover and the ordering of those subjects.

It’s not a perfect schedule, but it’s enough to get me started on writing the daily readings and labs. It’s also a good starting point to begin conversations with others about content and approach. I’ve already mentioned that some colleagues are concerned about the seeming text-centric nature of the course. I’ll need to talk more with them about what else they’d like to see. For example, is it just more options for visualization, or are we also going to need to consider more kinds of data?

Terrifyingly enough, it seems that I’ll also need to produce a more detailed course schedule in which I explore the issues I’ve just mentioned. What will the details of each day include? What will the digital humanities topics be? Those additional details will help me write and will help my colleagues understand what we do and do not cover in the course.

However, that’s a task for another day [30]. I’ll probably intersperse that work with writing. And, as I know, writing the readings and labs will also help me reflect more carefully on the schedule [31].

It’s time to get started! [32]

Postscript: As I begin to fill in the additional details, here’s a question to think about: I traditionally have students write a Nut butter and fruit spread sandwich algorithm on the first day of class. It’s an entertaining exercise. Should I switch to something more DH oriented?

Postscript: That first day mentioned in the previous Postscript is not really part of the text that I’m writing. Does that mean that I also need to start thinking about an instructor’s guide? Agh! That’s scary.

Postscript: Right after finishing this musing, I received a message from Chronicle announcing a new advice guide on How to Create a Syllabus, just released today. I’ll add that to my list of things to reflect on.

Postscript: How long does it take to draft a schedule for a class? As this musing may suggest, it can take a long time. All in all, I spent about one full day on it, spread out over multiple days. That estimate includes the time I spent writing about developing the schedule. However, it does not include the hour or so I spent writing a program to make it much faster to put together one of the schedule tables I use in this musing [33].

[1] At times, I express those as course goals or learning outcomes. More frequently, I express them in the course description.

[2] If there are multiple potential textbooks, I might use the ordering of topics as a way of choosing which is appropriate [3].

[3] I also consider cost, quality of instruction, accuracy, and a host of other issues.

[4] And even when I’m teaching a course that others have taught.

[5] Or Racket.

[6] At least that’s the plan.

[7] Some folks seem to think that MLK day means I can show up at school a day late. It doesn’t. Someday I’ll muse about the faculty’s vote about MLK day.

[8] I wondered whether the faculty would vote to start classes on Friday on years in which MLK day fell on the first day of class so that we could maintain forty-two days of class in those years. I don’t think anyone even proposed that model.

[9] Well, eight weeks of classes minus one day of classes.

[10] I may come to regret that decision.

[11] I’d also like to be able to use break to get grading done.

[12] Well, HTML to start with.

[14] We offered the media computation version for about a decade. The schedule shifted over that decade, but it generally kept the same topics. However, we did lose objects and meta-programming at some point.

[15] No, I don’t plan to go back. I prefer the new three-by-eighty format.

[16] Binary Search Trees.

[17] If I do begin with simple graphics, I’ll need to think about ways to make that accessible and about alternatives.

[18] Maybe it’s not as bad as I think. See, which suggests that one can get up to $200 in free credit.

[19] We’ve always used let (and let* and letrec). The Racket community uses internal define. My current inclination is to stick with let.

[20] That’s map as in Google Maps, not as in apply a procedure to each element of a list nor mentored advanced projects.

[21] Let’s hope that I don’t overload my students.

[22] I’m counting the presentation preparation.

[23] The project introduction is also a kind of work day. And that day is 30 minutes longer than it was in the old version of the course.

[24] Speaking of procedures … I wonder if I should introduce section and compose when we first cover procedures. If not, where do I introduce them? Perhaps with lists.

[25] Almost all the interaction in the work they do stems from the interactive nature of Scheme.

[26] I’ll still write two separate readings.

[27] It would also be nice to have a homework assignment on recursion. However, that does not seem possible. I’ll make sure to keep the recursion on exam two very simple.

[28] In all honesty, I should admit that I’ve played with the schedule a bit to get it to this point. I chose not to discuss ordering or, more precisely, not to present the sequence of draft schedules, because the musing already seemed much too long.

[29] Or at least most individual subjects. I’m not sure, for example, how much digital humanities content will appear in the discussion of debugging.

[30] Or, more precisely, for another few days.

[31] For example, I may be doing XML too early because it relies on students understanding a particular representation of XML.

[32] More precisely, tomorrow is a time to get started.

[33] I’ll explain more about that software in a future musing.

Version 1.0 of 2018-09-12.