|How does knowing how something works compare to knowing why and when to use that something?|
I'm a self-taught programmer with a lot of experience. I know when to use a database index, and I know why they exist. I know the performance limitations, I know the tradeoffs, and I know when they are appropriate and not appropriate. But if you were to ask me about how they work, I have no idea. If you were to ask me to explain the computational complexity of selecting a tow on an indexed table compared to a non-indexed table, I have no idea.
How does this fact effect me as a developer? I recently got into a discussion on another forum about this topic. The consensus from that discussion seemed to be that not knowing the low level implementation details significantly hinders your ability reason about the technology. In other words, if I can't explain how a B+tree works, I'm pretty much worthless when it comes to understanding how to use a database.
The discussion came up when I noticed that just about 100% of the job interviews I've done, I'm always asked to explain how something works, rather than when to use something, or why you would use something. This means that I pretty much fail every single job interview, and probably will remain so for the foreseeable future.
To what extent does understanding the underlying concept effect you ability to reason about a technology?