To a large extent I agree with you, but there is one thing I pause about:
You get the same level of learning,
you get the same realizations, the
only thing you skip is your wasted time.
Here we diverge. As Confuciussaid:
Tell me, and I will forget.
Show me, and I may remember.
Involve me, and I will understand.
Sometimes, and for some things, that time spent working out bits of a solution - even if you fail and ultimately ask for help - is not wasted. Sometimes it's priming you to be in a better position to understand the solution you're given.
But do I really need or want to know, remember and understand the nuances of each and every of my problems?
For example, we have a lot of legacy Delphi code. Delphi 7 has a bug in which it gives incorrect compiler warnings for some of it. I don't care one bit about the history, details and nuances of the bug. The 2 hours I don't spend examining that are 2 hours I can spend learning something useful instead.
It's not yes or no. It's not everything or nothing.
* There are cases where the fastest thing to do is ask your colleagues.
* There are cases where the fastest thing to do is ask your friends (if you have any).
* There are cases where the fastest thing to do is ask Google.
* There are cases where the fastest thing to do is ask StackOverflow.
But there are times when it's best (and not necessarily fastest!) to work on it for a while to see if you can either solve it, or at least get your mind around it enough to understand the solution when it comes.
The very best programmers/engineers/employees/founders/people know when it's which case from the above.
Honestly, at this point it's about the asker's urge to learn -- if he blindly looks for an answer, then he won't take anything away from it. If he looks for reasons, then he'll get them.
This is true regardless of which method he'd use to figure out a solution.
I do agree it's not binary -- I'm learning Objective C right now, and spent two hours last night tracking down a crash that was ultimately linked to not understanding retain and release semantics. That is worthwhile, and a situation where just asking someone for a fix wouldn't work.
But I think that's a learning issue. If you already know the majority of what's going on, and the rest is just finding a key, then I think searching/asking is perfectly valid.
And really, wouldn't you argue that a programmer worth being called such would always attempt to be involved with finding the answer?
It's not binary.