From time to time I read articles or tweets or watch talks from @hillelogram or @pressron or @sebmarkbage (in no particular order) and realize that those people have much deeper understanding. They are not stuck in one paradigm or one programming language, they can bring paradigms from different languages to current languages.
Even more, they not just understand it, but also able to make it accessible for others. They are able to explain it - which proves again dipper understanding.
Dr. Hoenikker used to say that any scientist who couldn't explain to an
eight-year-old what he was doing was a charlatan
from Kurt Vonnegut's novel Cat's Cradle
I guess they have been exposed to many different programming paradigms, or maybe they studied some arcane, but very clever programming languages or they had pretty good CS education (not all degrees are the same).
Recently I stumbled on this quote:
If you don't know how compilers work, then you don't know how computers work.
-- Steve Yegge
And this made me think: are there specific topics in CS which will significantly improve understanding of CS in general? Should I write my own Lisp, or should I learn E programming language, or should I learn about branch prediction, should I read Types and Programming Languages or SICP, should I know answers to Entscheidungsproblem?
What are the most effective ways to gain real deep understanding? What is the required knowledge?
Photo by Samuel Zeller on Unsplash