Here’s an SVG showing all of the dependencies associated with CSC courses:
Yes, it’s a little small to read. Click on it to see a bigger version. It’s an SVG, so you can blow it up arbitrarily. (Note: this picture is a lot more readable since Aaron Keen made the eminently sensible suggestion that it be left-to-right rather than bottom-to-top.)
Things to know about this data:
It’s scraped from the 2015–2017 course catalog in HTML format.
All cross-listed courses are normalized to their CSC equivalents.
Arrows are shown to all courses mentioned in the prereqs.
The last of these is significant. If a course has a pre-requisite like “Both CSC 124 and one of MATH 117 or MATH 118”, I just draw arrows to all of them. So don’t assume that the number of outgoing arrows is an indication of the number of courses required to take this course.
There are lots of courses shown here that haven’t been taught in a long time. CSC 108 jumps out at me, but there are others.
Some courses have a prerequisite that can be fulfilled by a no-longer-existing course. For instance, CSC 141 changed into 348, but there are still a bunch of courses that list CSC 141. Since 141 is not displayed as a hyperlink in the catalog, we assume that it’s defunct, and we don’t show it.
No dependencies are shown for non-CSC courses.
All scraping and processing done in Racket, natch. Graph drawn with Dot.
It appears that I have not recently documented how exactly it is that you “capture,” and (more importantly) feed and care for a wild yeast culture.
I should start by saying that most of what I know comes from
“Cooked,” by Michael Pollan,
“Tartine Bread,” by Chad Robertson,
… and certain brief conversations with biologists at Cal Poly
The fundamental assumption behind the effectiveness of what I’m going to tell you comes from the ‘everything is everywhere: but the environment selects’ hypothesis, “promulgated by Dutch microbiologist Martinus Wilhelm Beijerinck early in the twentieth century.”1 The basic idea is that most microorganisms are present in varying densities nearly everywhere on earth, and that it’s possible, by providing the right environment, to breed pretty much any microorganism that you want.
In this case, we want a yeast culture. Some people take great care to preserve a particular culture that has been handed down for generations. My reading suggests that this is … well, kind of pointless. You can create your own culture in a week or two (or maybe less) without much fuss, and without anything but flour and water.
With that said, it’s certainly easier to preserve a culture than it is to create one, so once you’ve got it going well, it makes sense to me to keep it going. Honestly, it’s a lot like a fire was to primitive culture: starting it is a pain, and feeding it isn’t too expensive.
Okay, here’s my “recipe.” I’ve started from scratch on this twice, and I’ll probably do it again.
If you’re like me, you’re feeling really, really bad right now. Loss, despair, a pain in your chest. Walking around alone at night, feeling absolutely awful. Really bad. A horror-clown has just been elected president. A man who doesn’t seem to have any plans beyond simple self-aggrandizement, who will say or do anything to inflate his own self-importance.
At the end of the day, you’re probably asking this: What does this mean for America?
Well, I’ll tell you what it means.
It means that we’re not done yet.
This is not yet the America that we want it to be.
It means that we’ve still got a heck of a lot of work to do. No one said this was going to be easy.
So: make a list of priorities. Here’s mine:
Human Rights
Climate Change
Nuclear Proliferation
Then—and this is the hard part—start doing something about them.
Hey, today was the day! The day of the annual swim from Long Island to the mouth of Blue Hill Harbor, the current incarnation of the Granite Wo-Mon Challenge.
Before the swim:
pre-swim
Thanks to Chris Guinness for this excellent shot.
After the swim:
post-swim
Charlotte Clews posted this picture, although she’s in the picture so I suspect she didn’t hit the button. Was this Henry?
Low tide was at 8:47 AM today, so by rights we should have started the swim at about 11:00 AM, but no one wanted to wait quite that long. We gathered at the KYC at 9:00 (or 9:10… or 9:15) and headed out to Long Island. I think we managed to start swimming at about 10:00.
Let me just say: choppy. Not end-of-the-world choppy but still chopping pretty good. Which is to say: bad. I think we all swallowed quite a bit of seawater.
My strava log suggests that the swim took about 1:38, which is quite a bit more than last year.
A special thanks this year to Tricia Sawyer, who pretty much organized the event, and didn’t get to swim. (N.B.: “Organized” = “sent an email to the rest of the slackers”.) It wouldn’t have happened without you!
Earlier this year, I was talking to Kurt Mammen, who’s teaching 357, and he mentioned that he’d surveyed his students to see how much time they were putting into the course. I think that’s an excellent idea, so I did it too.
Specifically, I conducted a quick end-of-course survey in CPE 430, asking students to estimate the number of weekly hours they spent on the class, outside of lab and lecture.
Here are some pictures of the results. For students that specified a range, I simply took the mean of the endpoints of the range as their response.
Density of responses
Then, for those who will complain that a simple histogram is easier to read, a simple histogram of rounded-to-the-nearest-hour responses:
Histogram of responses
Finally, in an attempt to squish the results into something more accurately describable as a parameterizable normal curve, I plotted the density of the natural log of the responses. Here it is:
Density of logs of responses
Sure enough, it looks much more normal, with no fat tail to the right. This may just be data hacking, of course. For what it’s worth, the mean of this curve is 2.13, with a standard deviation of 0.49.
Oh mainstream programmers, how I hate thee. Let me count the ways.
The following is a question taken from the “AP Computer Science Principles Course and Exam Description,” from the College Board:
A programmer completes the user manual for a video game she has developed and realizes she has reversed the roles of goats and sheep throughout the text. Consider the programmer’s goal of changing all occurences of “goats” to “sheep” and all occurrences of “sheep” to “goats.” The programmer will use the fact that the word “foxes” does not appear anywhere in the original text.
Which of the following algorithms can be used to accomplish the programmer’s goal?
a)
First, change all occurrences of “goats” to “sheep.”
Then, charge all occurrences of “sheep” to “goats.”
b)
First, change all occurrences of “goats” to “sheep.”
Then, charge all occurrences of “sheep” to “goats.”
Last, charge all occurrences of “foxes” to “sheep.”
c)
First, change all occurrences of “goats” to “foxes.”
Then, charge all occurrences of “sheep” to “goats.”
Last, charge all occurrences of “foxes” to “sheep.”
d)
First, change all occurrences of “goats” to “foxes.”
Then, charge all occurrences of “foxes” to “sheep.”
Last, charge all occurrences of “sheep” to “goats.”
This question makes me angry. Why? Because the obvious lesson from this example is that YOU SHOULD NOT BE MODELING COMPUTATION AS A SEQUENCE OF MUTATIONS.
In other words, the correct answer is this:
e) For each word in the document, replace it using this function: * if the word is “goats”, return “sheep” * if the word is “sheep”, return “goats” * otherwise, return the word unchanged.
Voila. Problem solved. No resorting to nasty swap ideas.
At a lower level, I think the core problem may be the inability of the English language to handle this kind of abstraction. Notice that in my proposed solution (e), I tread dangerously close to mathematical notation; it’s not really purely English any more.
This compares the outcomes in the years 2005 through 2009, before we instituted 123, with the outcomes in the years since. This is a cumulative graph, showing for a number of classes how many students finished by taking that many classes or fewer, and whether they succeeded or failed. Success is defined as having gotten a grade of C- or better in 103 (that is, the condition that allows them to continue with higher-level classes in the major).
So, for instance, we see that in the years before 123 was added, more than 90% of students took four classes or fewer, and that about 38% of those students did not successfully finish. In the years after 123 was added, slightly less than 90% of students took four classes or fewer, and of those, only about 23% left without finishing.
The big picture here is the post-change years have a much lower dropout rate; our first-year retention has improved from 63% to 77%, a dramatic increase.
Here’s a pair of pictures showing the distribution of # of classes taken in the first-year curriculum. There are only four classes, so this is really a picture of students repeating classes, and how many times they repeat them. So, for instance, we see that about 8% of students take exactly five courses (most likely repeating one), and that in this group, approximately 85% are then finished successfully.
first-year student outcomes
This graph shows the cumulative distribution; it’s just the discrete integral of the prior picture.
cumulative first-year student outcomes
Note that a lot of people come in with AP credit, and skip one or more classes, which is why we see a lot of people finished after one or two classes.
It’s also interesting how many people stop after one or two classes. You can look at that either as bad news or good, depending on whether you see these students as promising ones that we squandered, or students that quickly discovered that computer science was not for them.
Also note that since these pictures span 2005 to 2015, they cover the period from 2005–2010 when the course sequence was only three courses long. The obvious next step is to split these graphs into two graphs, to see whether the addition of 123 to the curriculum had a major effect.