Manish Profile picture
2 Mar, 22 tweets, 5 min read
a recent conversation amongst friends reminded me of my thoughts on expertise, magic, and mental models, and while this probably should be a blog post I'm lazy so I might as well thread it
the context of this was advanced borrow checking in rust, but most of the thoughts are more general and apply to a lot of learning paths, at least in programming
for example, with lifetime elision / explicit lifetimes in rust, i've heard the learning process described as:

1. Beginners: Rely on the "magic" (elision), and use it exclusively. They're lost the moment they need to step out of it, until they learn the underlying workings.
2. Intermediate: Understand most of the workings of explicit lifetimes, but perhaps not enough to keep the magic in their heads. Tend to map the magic to the underlying model and rely on the magic less, using more explicit lifetimes, etc
3. Expert: Understand the entire system enough to revert to using the magic as much as possible. Can totally use the advanced stuff, but will avoid it unless it's necessary.
This was just an example but I've seen this kind of thing play out for various different topics in computing. There's some magic, the beginners rely on it, intermediate folks are able to work outside of the magic but they use the magic less, experts use more magic again
"magic" here is, essentially, some imperfect abstraction layer. it's imperfect because sooner or later you have to care about it. It's a great benefit to the learning process, and overall makes things easier, but it also introduces this u-shaped curve of "how much you use it"
the underlying driving force here, the underlying driving force in a lot of learning processes, is mental models. Specifically, the process of working through *inaccurate* mental models, which are often easy and natural to construct.
I've talked about this before in manishearth.github.io/blog/2017/04/0… (There I call them "bad" mental models, using scare quotes, but I now prefer to avoid the implicit value judgement as much as possible)
A lot of the problems faced whilst learning a subject are due to having a mental model which is an inaccurate (not just incomplete!) depiction of the real world. This leads people down the wrong path at times, leading to frustration when things do not work the way they expect
It's *very easy* to build inaccurate mental models. You implicitly build a hypothesis of how the world works, and notice that your hypothesis "seems to work", and kinda cement it in your mind without relitigating it as you learn.
As I say in the blog post, this tells us that we should approach such situations with empathy, not derision, but there's more: this helps us better map a lot of learning processes
For example, the beginner/intermediate/expert curve I explained before?

The beginners have an inaccurate mental model from the imperfect abstraction layer. This is *okay*, the abstraction layer still helps them learn piecemeal.
The intermediate users have realized their mental model was inaccurate and have moved away from it, sometimes unnecessarily avoiding the abstraction layer.

The experts' mental model includes the abstraction layer and they're back to being comfy with it.
The whole contour of the learning process is dictated by what mental models you build, when they turn out to be insufficient, when you notice that, and how you update them when so
A good teacher is, among other things, able to notice when the mental model is inaccurate, and when it's necessary to fix that, and help fix it.
An experienced individual (or good autodidact) is able to, on their own, notice quickly when their mental model needs to be updated, and appropriately work on updating it.
maybe it's because i'm an autodidact, but to me this^ has been the singular *technical* thing that I consider to be core to "expertise in programming". There are things like "working with others" that are important too, but this is the only one related directly to technical skill
Not the number of programming languages one knows, not the quality of ones preferred tools, it's one's ability to learn and adjust their mental models when necessary. This unlocks so much else.
ah, for the life of me I couldn't remember where I'd gotten the borrow checking example from, after @samth pointed it out I remembered: it's building on Terry Tao's "phases of rigor in math" post. I suspect I'd come up with it after reading this ages ago terrytao.wordpress.com/career-advice/…
it covers a lot of this better than I do, go read it (long screenshot from post linked in previous tweet)
@plaidfinch has an excellent way of phrasing the core principle in this thread:

• • •

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

Keep Current with Manish

Manish 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 @ManishEarth

1 Mar
a thing i've said a couple times now is that the marginal benefit of someone getting their vaccine a bit earlier is nothing compared to the huge benefit of us reaching herd immunity
yes, you getting the vaccine now may make someone you feel "deserves it more" get it a little later. that's fine, overall everyone rushing to use up available vaccines as fast as possible moves us significantly closer to herd immunity.
Folks have the same attitudes around vaccines as they did around masks a year ago

masks are not usually a scarce resource, they were temporarily scarce, and that remedied itself

Read 5 tweets
28 Feb
Trying to figure something out about some words in Mandarin

Mandarin speakers: mind saying 这么, 什么, 怎么样 in a natural way (fit it in a sentence?) to yourself, and then answering the questions in the next tweets? Don't look at the questions before saying the words
Was there an "n" sound between the characters in 这么?
(feel free to reply with specifics)
Was there an "n" between the characters in 什么? How would you transcribe it?
Read 6 tweets
21 Jan
Sometimes you set up a process just before you need it and look back and feel so grateful someone had that idea

@ca_covid has a way to report errors with the data, since sometimes we don't get all the info, sometimes vaccines run out, etc
until a few days ago, we just had a feed into a discord channel of these, and folks could triage and fix them

then we added the "oh no ping", a special ping to various people that would happen whenever an entry had 2+ unhandled errors
most of the errors are minor, but if you get two for a site it's definitely something that should be prioritized, even if the actual error is not a big deal

today we started getting many more of these, and because of this ping we were able to triage and fix them quickly
Read 4 tweets
20 Jan
The second point here played out in a really cool way

We learned from one pharmacy that they hadn't been in the county system and got themselves loaded because we had called the previous day
this made folks wonder: "hey surely that's not the only place with this problem? maybe we can tell them to make sure they're in the system!"

we then could just call a bunch of pharmacies of the same chain in the same county (we have a list!) and tell them to do this. It worked!
a cool thing we could have done, but didn't in this case, would have been to go a step further and retarget our phone banking efforts to that county, with a broadcasted change to the script. We have that tooling.
Read 4 tweets
23 May 20
so @ethanhs is new to Mathematica and was wondering why array indexing starts at 1

and the reason behind it is actually pretty weird and due to some interesting language design choices. i thought y'all would enjoy it
Mathematica has a wonderfully quirky functional language that does a lot of things really well. I enjoy using it a lot, though I don't get to use it much these days
so first, some basics. arrays ("lists") in Mathematica are declared with curly braces, and are indexed with double square brackets

they have to be double square brackets because single square brackets are function application (e.g. `Sin[x]`), and parentheses are for grouping > arr = {5, 6, 7, 8}<br />
{5, 6, 7, 8}<br />
> arr[[1]]<br />
5
Read 17 tweets
27 Oct 18
So I'm seeing a lot of misunderstandings around voting systems, especially when it pertains to voting machines. It occurs to me that people may not have a clear idea about how they actually work, and what properties they try to uphold, and how they try to be fraud-resilient.
So systems like these interest me for the same reasons cryptography does -- they're interesting constraint sets with complex dynamics, and are kinda fun to roll around in your head with various situations.

This year I signed up as a poll worker to help, and to learn more.
This thread will mostly be about how voting in Alameda County, CA works. I'll try to highlight properties considered important more broadly, but the exact dynamics of what I describe are county-specific.
Read 67 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 Become our Patreon

Thank you for your support!

Follow Us on Twitter!