About ten years ago, after my grandmother died, I got really into Robert Anton Wilson. That sort of set the trajectory for the rest of my life. While I think RAW was wrong about a lot of things, the meta-lesson of erring on the side of agnosis -- trusting that, when the world doesn't behave in line with your expectations (and often even when it does) it's because of unknown unknowns, and that the world is stranger an…
I can't agree more with this. Robert Anton Wilson's books are extremely readable, entertaining, and will definitely help you see a new perspective. For programmers and tech people I'd recommend RAW above Godel, Escher, Bach, for example. One of his many intriguing ideas, borrowed from Alfred Korzybski, is that "The Map is Not the Territory". Always know that whatever map or idea you have is only ever, at best, a frag…
I have been a bit obsessed with the idea that "the map is not the territory". I think it's because I grew up with some strong mental models that turned out not to be true.
I used Google and found that I mentioned it at least 3 times on HN, going back years:
https://news.ycombinator.com/item?id=15866856 -- Programmers should learn a little philosophy
https://news.ycombinator.com/item?id=7074831 -- With regard to Taleb, "I share Taleb's problem with models". I compare him to Nate Silver. I liked Silver's book very much at the time, and saw a lot of parallels in "learning about the world". (But I have since become disappointed with Silver.)
https://news.ycombinator.com/item?id=7913435 -- Static typing doesn't prevent the important bugs. Static types are a map; they're not the territory -- which is runtime behavior, interaction with the end user, interaction with the world.
I still have this rant a brewing: you cannot learn ANYTHING about the world if you don't actually run your program! Of course, most people who use static types do run their programs. But it's not a strawman; there's an extreme solipsistic school of "modeling with types" where programmers try not to run their programs and instead rely on the compiler. I suppose this may be effective for some very limited kinds of software with small interfaces to "the world" (which includes hardware), but IMO it's the wrong default. You can't learn anything about hardware without running your program, let alone end users!