&gt; &quot;This distinction [between bugs and recoverable errors] is paramount. Surprisingly, most systems don’t make one, at least not in a principled way! As we saw above, Java, C#, and dynamic languages just use exceptions for everything; and C and Go use return codes.&quot;<p>Not a Java programmer, but isn&#x27;t that what RuntimeException is for? Yeah, Java uses exceptions for both errors and recoverable errors, but it can use <i>different</i> exceptions.