1/n Over the months we've gotten several questions about how our new book, DCIC [dcic-world.org], relates to HtDP (How to Design Programs). They are deeply similar, but even from 30K feet there are some salient differences. A thread on how they compare. 🧵
2/n At a high level they are very similar. Both are built around the centrality of data structure. Both want to provide methods for designing programs. Both start with functional programming but transition to (and take very seriously) state/imperative. ↵
3/n Both are built around languages carefully designed with education in mind. Yes to special support for writing examples & tests; error reporting designed for beginners; built-in images, reactivity; no to weird language gotchas. Etc. Always, put the student first. ↵
4/n To call these "similarities" is, of course, a profound disservice. HtDP often pioneered these things; DCIC copied them.

Now for the differences. Note that they are differences TODAY. Some ideas from DCIC are going to HtDP, and over time more may intermingle. ↵
5/n The most obvious is that DCIC is in @PyretLang. HtDP has tons of good ideas, all ignored because of *syntax*. We built Pyret to embody good ideas we'd learned from @racketlang student languages and other good ideas of our own, but package it in a familiar syntax. ↵
6/n The next most obvious thing is that DCIC also includes Python. HtDP has a (not published) follow-up that teaches design in Java [felleisen.org/matthias/HtDC/…]. Whereas we wanted to integrate the *transition* to Python into DCIC. There's much to be learned from the contrast! ↵
7/n In particular, Pyret and its IDE were carefully designed around pedagogic ideas for teaching state. Python was not despite, the ubiquity and difficulty of state! So there's a lot to be gained, when introducing state, to contrast them. (That material is being upgraded.) ↵
8/n Next, DCIC has algorithmic content. It covers big-O. It even has a section on amortized analysis. It goes up through some graph algorithms. I cover these in my accelerated intro class; most intro courses will not touch this. That's fine, it's there for those who want it. ↵
9/n I also have notes, waiting to be converted, a few more advanced/whimsical topics for students who want to go farther. They're really for the student like me: the kind who loved the footnotes in SICP. These will be marked clearly as bonus material. ↵
10/n Okay, so those are most of the differences. They're visible (some even evident) from glancing through the book or the ToC. However, there is one very deep difference that will not be apparent to most readers. Let me explain it in the rest of this thread. ↵
11/n HtDP is built around a beautiful idea: the data structures shown grow in complexity in set-theoretic terms. So: atomic, then fixed-size (structures), then unbounded collections (lists) of atomic, pairs of lists, lists of structures, etc. Build it up bit-by-bit. ↵
12/n IMO, this has a downside. You have to *imagine* what the data represent (this num is an age, that's str a name, that list is of GDPs), but they're idealized. In a way the most real data are actually images! After that (which come early), it's all "virtualized". ↵
13/n My take is that many interesting data are lists of structures. (Remember those? They're complicated and come some ways down the progression.) You say "Huh?!?" To which I offer you another name for them: tables. Tables are ubiquitous. Even primary school kids know them. ↵
14/n Even better, lots of real-world data are provided as tables. You don't have to imagine things or make up fake GDPs like 1, 2, 3. You can get actual GDPs or populations or movie revenues or sports standings or whatever interests you. Ideally, cleansed and curated. ↵
15/n I believe that just about every child is a nascent data scientist: at least when it's convenient to them. Even an "I hate math" kid will often gladly use statistics to argue for their favorite actor or sportsperson or whatever. We just have to find what motivates them. ↵
16/n But there's a BIG catch! A key feature of HtDP is that for every level of datatype, it provides a Design Recipe for programming over that datatype. Lists-of-structs are complex. So is their programming recipe. And we want to put them near the beginning! ↵
17/n The Design Recipe is dangerous to ignore. Students struggle with blank pages and often fill them up with bad code, which they then get attached to. The DR provides structure, scaffolding, reviewability, and much more. It's cognitively grounded in schemas. ↵
18/n So over the past few years, we've been working on different program design methods that address the same ends through different means. A lot of our recent education research has been putting new foundations in place. It's very much work in progress. ↵
Many of our recent papers are related to aspects of DCIC. It's fabulous to get to do this with an amazing team: @KathiFisler @joepolitz Ben Lerner but also the @Bootstrapworld team and our Bootstrap collaborators (eg, ideas from school math ed have improved collegiate CS!). •

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with ShriramKrishnamurthi

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!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @ShriramKMurthi

Jan 30
1/ ICYMI: yesteday's (women's) Ashes #cricket was some of the best cricket in a while. Don't see scores or highlights, just watch England 2nd innings (after Australia declared setting them 257 in 47o: highest women's chase had been 193). No spoilers! But 3 salient things: ↵
2/ First, by leaving them essentially an ODI inning, it showed clearly how an ODI has its own pacing and rhythm different from that of tests or T20s. There's *space and time* for things to evolve in a way they don't in T20.
3/ Second, it was a *decision* to declare when Australia did, creating that ODI-like situation. That could only happen in a test. So it was this fascinating hybrid of formats and constraint-solving.
Read 6 tweets
Jan 23
1/ Several people have asked me to summarize my exploration of the low-code/no-code space. Here's what I learned. Note that this is VERY temporal: what's true today may not be in one month (especially with so much VC money sloshing about). Also, not tagging any companies. 🧵
2/ The principal dimensions of the space that I can discern are:

- new databases/tables
- data analytics, including visualization
- CRUD
- one-offs

I'll discuss these not in this order, but focus on CRUD, which to me is the most personally intriguing of the lot.
3/ The one-offs are things like vision model generators (Lobe), medical viz (MeVisLab), notebook-based data-driven storytelling (Observable). All very nice, but not much (yet) comparable to them, so they're specialized point solutions.
Read 30 tweets
Dec 6, 2021
A short thread about my "other 90%" rule, frustration with courses, and a nice thing that happened.

My "other 90%" rule is that ugrad courses should be designed for the 90% of students who are NOT like us: not crazy about our subject, bound to grad school, etc. 1/n
What can THEY take away from our subject? What can they learn that might most impact them? The impact can and maybe should be both intellectual (expand their mind) and practical (give them new skills). I've always tried to apply this to my PL course. 2/n
When I talk about this to colleagues, they always trot out a "but who will think of the children" argument for not wanting to do the same: they're thinking of the student exactly like themselves. I get the feeling. I just think we should resist it. 3/n
Read 13 tweets
Dec 5, 2021
After numerous years of paid subscription, I finally cancelled @duolingo. I was plateauing on it, and found the coverage of languages uneven. I had avoided the gamification for a long time until my kid got me to compete with her. And that was great…until something happened: 1/n
My kid got to Champion, which means you top the leaderboard on the highest tier (Diamond League). That's cool! She kept urging me to do it. And no matter how hard I tried, I simply Could. Not. Come. Close. 2/n
I was in Diamond for a long time. Day 1 and maybe 2 I'd be leading. And then, somehow, someone would come out of the blue and just blow me away. Like destroy me: I'd have say 500 points and they'd have 3500. It seemed like superhuman effort. 3/n
Read 14 tweets
Nov 22, 2021
Language-embedded programming with tables is ubiquitous, but not at all as well supported by types as it should be. We have created a design/expression benchmark to spur better science on tabular types. There are 6 parts; 2 should esp. stand out: ↵ 🧵
blog.brownplt.org/2021/11/21/b2t…
1. Def of table.
2. Examples of tables.
3. API of table ops.
4. Example programs.

5. ERRONEOUS programs. Type research should || error research. Let's surface errors as a 1st class entity.

6. Datasheets, to improve commensurability.

All is explained in the blog & paper. ↵
Props to new grad student Kuang-Chen Lu. Special credit to post-doc Ben Greenman, who resisted the urge to build Yet Another Tabular Type System and instead focus on improving the state of science. (Ben's on the market if any R1 is hiring!) ↵
Read 4 tweets
Nov 20, 2021
This is an interesting thread by Jon. Having been (sort of) on both sides of this, I have some thoughts. Jon is super right that making changes to teaching languages is really problematic. Books get printed, materials consolidate, updating is not easy. ↵
I've extensively supported both secondary school and university educators. It's tricky at all levels. You're a prof, you have your lecture, it's all set to go, the evening before class you re-run the code to make sure it's all good, and … the language has changed on you. WTF. ↵
In @racketlang, of course, we have #lang, a general, universal mechanism that can be used for versioning and soooo much more. Curiously, it seems to be used for soooo much more but NOT for versioning. Maybe it's too powerful. Some of it is also cultural. ↵
Read 7 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


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

Become a Premium Member ($3/month or $30/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

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(