I have listened to a number of podcasts where Richard Feldman boasts about 
never getting a runtime exception. 

I am having a hard time grasping the concept. I think I look at runtime 
exceptions a bit differently. I look at them as a *positive*. A programmers 
tool. A debugging tool. A way to communicate up the call stack. A way to 
separate the error stream from the standard stream.

For example, a java newbie might do this:

void myFunction(int x){
   if(x < 1){
*      log("error: x must be >= 1"); *
*      return 0*
   }      
   return x * x * x;
}

A more experienced developer might do this:

void myFunction(int x){
   if(x < 1){
      *throw new IllegalArgumentException("error: x must be >= 1"); *
   }      
   return x * x * x;
}

I look at runtime exceptions as a good thing. It's kind of like having two 
returns. One return for the normal answer (return). And another for error 
conditions (throw). Just like unix has two output streams: one for normal 
messages and one for error messages. This allows the caller to handle the 
normal return value and the *top-level* caller to handle (i.e. catch) the 
errors (usually by logging a stack trace). 

So I don't get it. If I don't have runtime exceptions, what do I do when 
someone passes an invalid argument? What do I do if some pre-condition is 
not as I expected? Some JSON returned from the server is not in the correct 
format? Are we back to just *one* return value for both error conditions 
and normal conditions?

Technically speaking, in java, if I wanted to create an app with no 
runtime exceptions it would be real easy. I could just swallow invalid 
arguments and let the program fail in a super mysterious way, farther 
upstream (the opposite of fail-fast). But I wouldn't boast about that. Or I 
could just have a try/catch in my main method that caught every exception 
and swallowed it or logged it.

If Richard said he wrote apps with no *bugs*. That would be impressive. But 
an app with no runtime exceptions seems like a silly thing to boast about. 
I see 3 kinds of bugs in my java apps:

1. *Compile errors.* These are the easiest to deal with. These are 
preferred. But I don't see the compiler catching the above mentioned 
IllegalArgumentException*. *Or a piece of bad JSON from the server.

2. *Runtime Exception. *Like a NullPointerException or an 
IllegalArgumentException. I *love* these kind of bugs. Super easy to find. 
Super easy to fix. A stack trace tells me exactly where to look. These kind 
of exceptions have never been a thorn in my spine. 

3. *The mystery bug. *Program is just not producing the correct output. No 
idea why. No idea where to start looking. No error message. No stack trace. 
These are the worst kind of errors.

In my opinion one of the key differences between an experienced developer 
and a beginner developer is that an experienced developer fails-fast with 
compile errors (#1) or runtime exceptions (#2). Beginner developers fail 
mysteriously with (#3).

So, based on my understanding, the whole "no runtime exceptions" concept is 
just not computing.

But I am new to Elm. Surely I am misunderstanding something. Please tell me 
what I am missing.


-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to