was chatting with a friend about some of the challenges with teaching yourself programming topics:

* you have random gaps that you don’t even know about
* it's hard to assess your level, you might know a lot about one subtopic and be a total beginner elsewhere
* it's very difficult to guess what other fellow autodidacts know about the subject

I've had to learn how to suss out what shared knowledge base I have with another programmer on any given topic quickly so that we can talk

(1/?)

I also think a lot about what it means to be "self taught" in programming, for example I "taught myself" about how TLS works under the hood by writing a toy implementation of TLS 1.3. But I used this guide https://tls13.xargs.org/, and I probably could not (or would not) have done the project if that guide didn't exist

so if we want to make it easier for people to teach themselves effectively, what kinds of resources do we need to provide?

(2/?)

The Illustrated TLS 1.3 Connection

Every byte of a TLS connection explained and reproduced

we have a lot of amazing "teach yourself" resources in programming (like nand2tetris or all of the great guides to writing your own compiler / programming language).

But I think a lot about -- which programming topics *don't* have great guides for how to "teach yourself" that thing? What's missing? How can we fill in the gaps?

(3/?)

also, how can we help people who are self-taught in an area recognize what knowledge gaps we might have? Not in a gatekeeping “EVERY REAL PROGRAMMER SHOULD KNOW X” way, but more "hey, if you feel like you're missing something, here are some ideas for where to start"

(4/?)

I used to get a bit mad when people referred to me as "self taught" (“I have TWO computer science degrees!! I literally have the most normal possible CS education!”) but I've learned to embrace it. There's no way you can learn everything in your CS degree, careers are long, and we're all gonna have to teach ourselves a lot of stuff anyway.

(5/?)

@b0rk Loud agreement with all of this.

When I'm considering what book to write next, I always consider sysadmin culture's knowledge gaps. I write them specifically to cover what every sysadmin must know about the topic.

Nothing replaces getting in there and playing around with a protocol. We invent toolkits to make e.g. creating a TLS connection easier, rather than materials to help people understand what TLS is doing. The well-meant toolkit is confining, where the understanding is liberating.

@mwl @b0rk Slightly tangential to this: I found that programming a “secure” protocol (in this case, SNMPv3) was slightly maddening.

I had to get it precisely correct, or it wouldn’t work at all, and nothing “under the hood” was any help at pointing out what might be wrong (except, perhaps, Wireshark in some instances).

It didn’t help that I was struggling to make sense of OpenSSL and its various APIs (and documentation) at the same time.

@whyrl @b0rk Yeah, SNMPv3 is deeply picky, even as just a sysadmin. Drove me mad when writing the book.