Erlang’s (or Joe Armstrong’s?) advice NOT to use defensive programming and to let processes crash (rather than pollute your code with needless guards trying to keep track of the wreckage) makes so much sense to me now that I wonder why I wasted so much effort on error handling over the years!
What I wonder is – is this approach only applicable to platforms like Erlang? Erlang has a VM with simple native support for process supervision trees and restarting processes is really fast. Should I spend my development efforts (when not in the Erlang world) on recreating supervision trees rather than bogging myself down with top-level exception handlers, error codes, null results etc etc etc.
Do you think this change of approach would work well in (say) the .NET or Java space?
It’s applicable everywhere. Whether or not you write your software in a “let it crash” pattern, it will crash anyway, e.g., when hardware fails. “Let it crash” applies anywhere where you need to withstand reality. Quoth James Hamilton:
This doesn’t precisely mean “never use guards,” though. But don’t be afraid to crash!