My Authors
Read all threads
@krismicinski @tikhonjelvis Deeply controversial opinion. I love EOPL and was "raised on it", but I don't love it the same way any more. It's a great book *for people like me* (going on to get a PhD in PL). Not AT ALL sure it speaks to the "coder on the street". »
CC @AustinZHenley @tomgilray
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray I wrote PLAI as a response to that (plai.org). It *intersperses* uses of concepts with their definition, and *precedes* use before definition. (Hence App followed by Impl in title.) Need to motivate these ideas for students. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray A driving principle in my PL education thinking has been, "How do I successfully communicate with the other 90%?" That is, the 90% who won't go on to get a PhD in CS (10% is probably generous, maybe 1% will…so more like other 99%). They are NOT LIKE US. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray Over time I further evolved my thinking. My starting point (inspired by EOPL, but also all my research on feature-oriented programming) was to think more about PL decomposition by feature, rather than "paradigm" nonsense.
cs.brown.edu/~sk/Publicatio… »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray To that end, we created the mystery language approach. A few other universities (not my own PhD students!) have tried it and found it very effective for them. The beauty of it is it plugs into every other approach to PL ed.
cs.brown.edu/~sk/Publicatio… »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray But I'll be honest. Every year I end up frustrated. A running joke for my PhD students (even @0_0yanyan0_0 has already heard this) is about a month into the semester I walk into their office and declare that my course is rubbish. EVERY year. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 But I was dead serious. I may have some of the best course evals in the dept and have a string of successful alums, but I knew in my heart that it wasn't really working. They were *performing*, but I knew that they weren't really *learning* what I hoped they would. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 It's so bad, I'd been thinking about bringing in people from the outside to take PL off my hands. After ~25 years of teaching it to some extent I figured I must be the problem: I was tired and jaded and needed to do something else. Hopefully they could mend it. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 But this year, finally, it has all clicked and come together. I changed the structure of the course in several ways, and I feel like it's all fresh again. I am just loving teaching PL and people will need to pry it from my cold, dead hands. What changed? »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 First, I realized that to teach PL I need a good tool, and I was already in possession of a great tool: @racketlang. For various reasons I didn't want to over-use Racket in my course, and realized that was foolish. So I went "all in". »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang Much of the implementation work is now using macros. Curiously, I mostly only use `syntax-rules`, because Racket is not the *subject* of study, only the *medium*. Curiously, this goes back to a very old idea. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang In the early 80s, Kohlbecker, Friedman, etc wrote a "book": The Hitchhikers Guide to the Meta-Universe (or something like that). I've never read/seen it, but I've been fed it in my "mother's milk" of PL education through Felleisen, Duba and Friedman. Maybe @mwand has a copy. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand It teaches PL through macros, not interpreters. This is a darned good idea for so many reasons. I still do an interpreter and type-checker directly, not through macros, because that idea ports across languages. But all other implementation is through macros (just -rules!). »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand But I have FOUR TRACKS of work in my course. One is implementation (as above). One is students create "interesting" programs for each other, guess what the other's program does, and we build up a quasi concept inventory of their (mis)conceptions. SO useful to me! »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand The third is the mystery languages, which I've described above. They're timed to come in before we do the pertinent feature in class. So they've already come to class aware of the principal design space of that feature, through bottom-up experimentation. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand The fourth, for which I lack a good name, I call "Read/Do". Here they have to (mostly) read some external source, then perform some reflective action (usually writing). Usually they engage in "real-world languages": Python, JS, Erlang, etc. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand I'm most proud of the read/do I added mid-semester, in response to a nudge from our diversity initiative. What on earth does PL have to do with diversity, you ask? I wondered that too: it's neutral, just a technology, etc., right? Good, then you'll like my assignment. (-: »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand I did one more thing which was an experiment that hasn't worked so well. Each assignment was tagged with a grade level. You had to do well on all assignments up to that grade level to earn that grade. Nice concept, messy implementation, likely to be modified. So ignore that. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand To understand some assignments (Quizius is the "students author stuff" part, from cs.brown.edu/~sk/Publicatio…) you need to understand the terms SMoL and SImPl ("small and simple"). It's based on our research that even basic PL stuff is poorly understood (cs.brown.edu/~sk/Publicatio…). »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand Even in upper-level CS, students don't fully understand the basic model common to most languages in use (Py, Java, OCaml, etc.). I call this SMoL: the Standard Model of Languages. It's *critical* to understand SMoL as a coder. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand It's also *useful* (if not entirely fair) to view other things (dataflow, constraint, lazy, etc.) as a departure from SMoL. Once you master SMoL, the difference (and value) stands in very stark contrast. Hence, first, nail SMoL. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand SImPl is the idea that most language implementations can be thought of as desugar + Interpreter pattern (or its cousin, Visitor). So you do the latter part twice (an interpreter, and type checker). You do the former a lot, since that's more time-effective. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand But the key thing is to go *well beyond implementation*. Only Implementation track is "implement languages". Mystery is "code in languages". Quizius is "reflect on languages". Read/Do is "engage with languages". Make a rich, multi-dimensional, multi-sensory experience. »
@krismicinski @tikhonjelvis @AustinZHenley @tomgilray @0_0yanyan0_0 @racketlang @mwand All the material is here: cs.brown.edu/courses/cs173/…
Happy to take questions/flames/suggestions. Will be slow on replies since I'm traveling int'l until Dec 18. Email also welcome. Good luck with your courses. What a great time to be alive and teaching PL! •
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with ShriramKrishnamurthi

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!