title: Should the Exception.Message property be shown directly to users?
body: <p>That may sound like a silly question but I'd like to gather some input regarding this. I'm used to see 2 flavors of handling exception messages. First there is the simple pattern where you show the <code>Message</code> directly to the user:</p>
  <pre><code>try
  {
      service.Update();
  }
  catch (Exception ex)
  {
      ShowMessage(ex.Message);
  }
  </code></pre>
  <p>The alternative way of treating exceptions is to consider strongly-typed exceptions to mean something that is then interpreted by the 'controller' class (or whatever piece of code than handles pushing information to the user):</p>
  <pre><code>try
  {
      service.Update();
  }
  catch (NetworkException ex)
  {
      ShowMessage(&quot;Network is unavailable.&quot;);
  }
  catch (Exception ex)
  {
      ShowMessage(&quot;Something went wrong with the update.&quot;);
  }
  </code></pre>
  <p>The first approach requires that every message used by exceptions (whether passed in the constructor by the calling code or managed inside a strongly-typed exception) be 'user-ready' (clean, properly formulated and localized, etc.). The second approach transfers this responsibility to the controller code. Plus it might require having very specific strongly-typed exceptions to make sure that every catch block is able to interpret them correctly.</p>
  <p>So to whom is aimed the Message property of the Exception class (in C#, Java...)? The end-user or the programmer?</p>
  <p>Thank you,</p>