David Beazley (@dabeaz)
March 4, 2023
After a stint of newsletter hosting at TinyLetter, I’ve decided to migrate my newsletter to ButtonDown. The deal-breaker was the ability to author the newsletter using markdown–which is a real benefit for code examples and other things. Welcome!
I originally planned to send out a newsletter dedicated to my recent foray into parser combinators. However, it got a little bit out of hand and expanded into something greater. So, I decided to post it over on GitHub instead.
In short, I recently implemented my compiler class project in Haskell and fell down a rabbit hole related to the implementation of parsers. Normally, in the compilers course, I have everyone implement a hand-written recursive descent parser. However, the Haskell book I was reading (“Programming in Haskell” by Graham Hutton) tackled parsing in a completely different way. I decided it might be fun to try something similar in the world of Python. I use “similar” very loosely here as my solution makes full use of Python’s dynamic typing, the so-called “walrus operator”, variadic function arguments, and all sorts of other VERY non-Haskell kinds of things. There’s more than enough to anger everyone, but it’s still kind of cool.
In any event, if you’re looking for a bit of crazy fun, here’s the post.
In January, I experimented with my usual course format and offered my Compilers/Raft courses in an extended month-long format. On the whole, I think the results of this experiment were mixed, at best. Some people liked the extended format, but I also felt that it lacked a certain element of “flow.”
In the typical weeklong immersion course, we’re all working on the same code at about the same time (this includes me). Rarely do we go for more than a couple of hours without pulling everyone back for some discussion. The alternation between coding and discussion offers a kind of pacing and makes it easier for me to know where the project stands at any given moment. For this reason, I’m inclined to stick with the immersion format as my preferred scheduling option. That said…
As an alternative to the month-long group course, would you ever consider signing up for a course taught in an extended one-on-one format? As an analogy, consider it similar to taking music lessons.
We would meet together for a scheduled hour, once a week, and do a bit of code-review, pair programming, debugging, and other things. Upon conclusion, you’d have some homework to work on for next time (e.g., some reading, short video to watch, some project coding objectives, etc.). Maybe we’d work on it together in a shared GitHub repo.
It seems that such an approach could also offer significant flexibility in both pacing and scheduling around timezones.
Would it work? Would it be effective? I don’t know. However, I’d really to get your feedback about it. Is it something you would even consider?
I have started to post immersion courses for summer:
There is also still some space available in some of my spring courses.
Just a quick note that I am mostly active on Mastodon these days. You can currently find me at https://mastodon.social/@dabeaz.
That’s it for now. I’m still hoping to be a bit more regular with newsletter posts. Things got a little crazy this winter with teaching, Covid, and other matters. However, summer is on the way. Time to code!