176 karma · joined September 23, 2018
Intro to CS: SICP (1979)
Algorithms/data structures: CLRS (1989)
Theory of computation: Sipser (1996)
Compilers: Dragon book (1986)
Calculus: Spivak (1967)
Linear Algebra: Dover's by Shilov (1971)
The given year is for the first publication, some of them are still being updated and I probably read a newer edition.
Furthermore, whether an error can be handled or not is a property of the caller, not the callee. If you're writing a public api and don't know your caller then checked exceptions are safer, and callers who just want to propagate the error can still write an api wrapper that rethrows them unchecked.
I do agree that checked exceptions are poorly implemented in Java though. In my dream world checked exceptions would be replaced by Either types which wrap a value or an error and there would be macro-methods for both propagating them and throwing them unchecked. There would also be union types for representing a set of possible named exceptions. Rust is probably the language closest to this.
Finally, if you're writing internal code for something like a web api, then of course you should stay far away from checked exceptions and rethrow them unchecked as early as possible when calling external code.