# Things that you can't fathom people not understanding

**URL:** <https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360>\
**Category:** In My Humble Opinion\
**Created:** [June 7, 2013, 5:50am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360 "2013-06-07T05:50:28Z")\
**Posts on this page:** 20\
**Page:** 13

<div class="post-metadata">

**Author:** ![misterW](https://avatars.discourse-cdn.com/v4/letter/m/f1d935/32.png) [@misterW](https://boards.straightdope.com/u/misterW)\
**Post date:** [June 16, 2013, 9:52pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/241 "2013-06-16T21:52:19Z")

</div>

> [@desertmonk](#):
>
> That’s what I’m saying! Following the rules of the road and being predictable is how one stays safest on a bicycle; just doing whatever the hell you want is trouble.

In a perfect world, where drivers do not make errors or text or grow old and lose their vision…sure. In this world, many bicyclists are killed because driver error. With my life on the line, I’d rather take that variable out of the equation.

---

<div class="post-metadata">

**Author:** ![desertmonk](https://avatars.discourse-cdn.com/v4/letter/d/898d66/32.png) [@desertmonk](https://boards.straightdope.com/u/desertmonk)\
**Post date:** [June 16, 2013, 10:11pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/242 "2013-06-16T22:11:16Z")

</div>

> [@misterW](#):
>
> In a perfect world, where drivers do not make errors or text or grow old and lose their vision…sure. In this world, many bicyclists are killed because driver error. With my life on the line, I’d rather take that variable out of the equation.

If the car is going 35 and the bicycle is going 15 the vehicles will close at approximately 75 feet per second. At what point do you bail out then? When the other driver is way down the road? When it is too late? It will take a couple seconds to go “oh shit” and the jump the curb. The driver will have hit you at this point…

---

<div class="post-metadata">

**Author:** ![FXMastermind](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/fxmastermind/32/7289_2.png) [@FXMastermind](https://boards.straightdope.com/u/FXMastermind)\
**Post date:** [June 16, 2013, 10:11pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/243 "2013-06-16T22:11:53Z")

</div>

No.

---

<div class="post-metadata">

**Author:** ![misterW](https://avatars.discourse-cdn.com/v4/letter/m/f1d935/32.png) [@misterW](https://boards.straightdope.com/u/misterW)\
**Post date:** [June 16, 2013, 10:21pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/244 "2013-06-16T22:21:06Z")

</div>

I don’t know if I can give you the exact distance this would occur at, but its certainly not impossible to swerve out of the way of a fast moving vehicle that is bearing down on you. Just the fact that they don’t slow and begin to give you extra room would be the first clue that evasive action may be necessary.

---

<div class="post-metadata">

**Author:** ![desertmonk](https://avatars.discourse-cdn.com/v4/letter/d/898d66/32.png) [@desertmonk](https://boards.straightdope.com/u/desertmonk)\
**Post date:** [June 16, 2013, 10:37pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/245 "2013-06-16T22:37:28Z")

</div>

Some cites that discuss the dangers of wrong way cycling.

[http://www.bikelongbeach.org/archives/4745](http://www.bikelongbeach.org/archives/4745)

[http://www.santacruzlive.com/blogs/streetsmarts/2012/05/27/the-dangers-of-wrong-way-cycling/](http://www.santacruzlive.com/blogs/streetsmarts/2012/05/27/the-dangers-of-wrong-way-cycling/)

[http://bikecolli.info/collisiontype/left-turning-vehicle-wrongway-cyclist.html](http://bikecolli.info/collisiontype/left-turning-vehicle-wrongway-cyclist.html)

---

<div class="post-metadata">

**Author:** ![Senegoid](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/senegoid/32/6606_2.png) [@Senegoid](https://boards.straightdope.com/u/Senegoid)\
**Post date:** [June 17, 2013, 1:29am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/246 "2013-06-17T01:29:52Z")

</div>

> [@Frylock](#):
>
> Continuing to answer my own questions, I found [this](http://www.coderanch.com/t/422207/Programming/recursion) discussion forum thread in which the merits of recursive and non-recursive approaches are discussed. It is also explained there that some devices we use have small enough memory that it can make a real difference which approach you use.
> 
> So I can see how it would be important to understand how to do things both ways at least.

Here’s a little dissertation on the comparison of recursive versus iterative algorithms. I will start by making my point(s) right up front:

(1) Recursive computations _may sometimes_ be about as efficient as iterative, as shown in the factorial example below. Even so, there is overhead in making the function calls and returns at each step of the process. This is tolerable, and for algorithms where recursion is clearly a good idea, it’s an acceptable price. OTOH, recursion may be _hideously inefficient_ as shown in the Fibonacci example below.

(2) So, **Frylock** , you’re right that “. . . it would be important to understand how to do things both ways at least.”  
And this is my bitch about the crap I’ve seen too much of coming out of CS curricula: Whole generations of students are learning to use recursion as the knee-jerk way of doing things, without learning the alternatives, and without understanding of what recursion can really do to you.

Example 1: Recursive Factorial computation isn’t so bad:

```auto

int fact ( int n ) 
{
    if ( n == 0 ) return 1 ;
    else if ( n == 1 ) return 1 ;
    else
      return fact(n-1) * n ;
}

```

Now try computing fact(6). Can you do it _by hand_, with pencil and paper, tracing through all the steps that this computer algorithm would end up doing?

It looks like this:

```auto

    fact(6)
        = fact(5) * 6
        = fact(4) * 5 * 6
        = fact(3) * 4 * 5 * 6
        = fact(2) * 3 * 4 * 5 * 6
        = fact(1) * 2 * 3 * 4 * 5 * 6
        = 1 * 2 * 3 * 4 * 5 * 6
        = 720

```

So, when all is said and done, your program has actually done the multiplications:  
1 \* 2 \* 3 \* 4 \* 5 \* 6 — Not too terribly inefficient.

Stay tuned my next post, Example 2: Fibonacci, in which I will trace the steps of computing fib(6).

tl;dr version: It gets ugly.

---

<div class="post-metadata">

**Author:** ![jasg](https://avatars.discourse-cdn.com/v4/letter/j/f0a364/32.png) [@jasg](https://boards.straightdope.com/u/jasg)\
**Post date:** [June 17, 2013, 1:43am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/247 "2013-06-17T01:43:39Z")

</div>

Like the OP, I had a career in programming, after a degree in biology, but my initial reaction was - Evolution…

---

<div class="post-metadata">

**Author:** ![vivalostwages](https://avatars.discourse-cdn.com/v4/letter/v/d07c76/32.png) [@vivalostwages](https://boards.straightdope.com/u/vivalostwages)\
**Post date:** [June 17, 2013, 1:45am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/248 "2013-06-17T01:45:25Z")

</div>

> [@jasg](#):
>
> Like the OP, I had a career in programming, after a degree in biology, but my initial reaction was - Evolution…

Oh, the E-word. I’ve seen people react with visible anger at the very mention of it. I’m convinced that they understand the concept but simply don’t want to believe it.

---

<div class="post-metadata">

**Author:** ![Senegoid](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/senegoid/32/6606_2.png) [@Senegoid](https://boards.straightdope.com/u/Senegoid)\
**Post date:** [June 17, 2013, 2:05am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/249 "2013-06-17T02:05:52Z")

</div>

Example 2: Recursive computation of Fibonacci numbers: It’s ugly.

```auto

int fib ( int n )
{
    if ( n == 0 ) return 0 ;
    else if ( n == 1 ) return 1 ;
    else
      return fib(n-2) + fib(n-1) ;
}

```

Now that you’ve had a good warm-up practice computing fact(6) _by hand_, try computing fib(6) _by hand_, tracing through all the steps. It goes like this:

```auto

    fib(6)
      = fib(4) + fib(5)
      = fib(2) + fib(3) + fib(3) + fib(4)
      = fib(0) + fib(1) + fib(1) + fib(2) + fib(1) + fib(2) + fib(2) + fib(3)
      = 0 + 1 + 1 + fib(0) + fib(1) + 1 + fib(0) + fib(1) + fib(0) + fib(1) + fib(1) + fib(2)
      = 0 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + fib(0) + fib(1)
      = 0 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 1
      = 8

```

Note that to compute fib(6) = 8, the computation ultimately ends up adding 1 (one) over and over, a total of 8 times, with a bunch of 0’s added as well for good measure, for a total of 12 additions. Perhaps with some cleverness, you could eliminate all the 0’s.

Whereas, if you compute this iteratively, the additions you do will be simply:

```auto

0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8

```

and if your code is half clever, it won’t even do that first 0+1, for a total of 4 additions instead of 12.

Now try [computing fib(99) = 218922995834555169026](http://courses.csusm.edu/cs111lls/fibonacci_numbers.htm) that way. You will end up adding 1 (yes, one again) over and over, a total of 218922995834555169026 times (not to mention a whole bunch of zeroes)! You can bet that the Straight Dope Message Board will have many more Infinite Crises before your algorithm is done. (Not to mention that it will have 218922995834555169026 function calls, for a maximum stack depth (at any one time) of 99 frames.)

(ETA: Conclusion: If you think you need to be using recursion, be sure you have a good reason for it.)

Stay tuned for an anecdote . . .

---

<div class="post-metadata">

**Author:** ![Senegoid](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/senegoid/32/6606_2.png) [@Senegoid](https://boards.straightdope.com/u/Senegoid)\
**Post date:** [June 17, 2013, 2:13am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/250 "2013-06-17T02:13:54Z")

</div>

A Fibonacci anecdote:

I mentioned above that I first learned recursion in an _assembly language_ class. For our very first assignment in that class, we had a simple warm-up assignment to be written in FORTRAN, that being the language that was then taught in the prerequisite programming class.

The assignment was to compute Fibonacci(999) and Fibonacci(1000), and the _product_ of those.

As integers. Not approximations. Accurate to the units digit.

Recursion was not an option. Even if we were doing this in a language that supports recursion (which, of course, FORTRAN doesn’t), it’s not an option.

---

<div class="post-metadata">

**Author:** ![Trinopus](https://avatars.discourse-cdn.com/v4/letter/t/2bfe46/32.png) [@Trinopus](https://boards.straightdope.com/u/Trinopus)\
**Post date:** [June 17, 2013, 4:01am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/251 "2013-06-17T04:01:19Z")

</div>

A vaguely amusing story…

I was playing a wargame with a stranger at a convention. The game involves ships at sea. Before ships can have combat, they have to detect each other. Ships with better radar/sonar are better at detection. Once one ship detects another, it can fire guns or launch missiles.

When playing the game, the ship counters are right there on the board.

My partner couldn’t cope. “Why do I need to detect what I can clearly see?” I explained, “The people on that ship can’t see the other ship. It’s night, or it’s foggy or the waves are too high.”

He never did get it. (Autism, perhaps?)

So… I said, “Ships have to shoot each other twice. First the have to hit with their radar beams…then they get to shoot guns or launch missiles.”

He got that! Phrasing it in terms of the “thoughts” of cardboard counters on a map didn’t work, but the abstraction of “shooting them” with “radar beams” worked fine.

A story of incomprehension with a happy ending!

(And…he beat the snot out of me. Sunk my fleet with embarrassing ease. So it goes!)

---

<div class="post-metadata">

**Author:** ![Doug\_K](https://avatars.discourse-cdn.com/v4/letter/d/b5ac83/32.png) [@Doug\_K](https://boards.straightdope.com/u/Doug_K)\
**Post date:** [June 17, 2013, 4:20am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/252 "2013-06-17T04:20:49Z")

</div>

> [@Senegoid](#):
>
> Example 1: Recursive Factorial computation isn’t so bad:
> 
> ```auto
> 
> int fact ( int n ) 
> {
> if ( n == 0 ) return 1 ;
> else if ( n == 1 ) return 1 ;
> else
> return fact(n-1) * n ;
> }
> 
> ```
> 
> Now try computing fact(6). Can you do it _by hand_, with pencil and paper, tracing through all the steps that this computer algorithm would end up doing?
> 
> It looks like this:
> 
> ```auto
> 
> fact(6)
> = fact(5) * 6
> = fact(4) * 5 * 6
> = fact(3) * 4 * 5 * 6
> = fact(2) * 3 * 4 * 5 * 6
> = fact(1) * 2 * 3 * 4 * 5 * 6
> = 1 * 2 * 3 * 4 * 5 * 6
> = 720
> 
> ```
> 
> So, when all is said and done, your program has actually done the multiplications:  
> 1 \* 2 \* 3 \* 4 \* 5 \* 6 — Not too terribly inefficient.

Not as efficient as

```auto

int fact(int n)
{
   int result = 1;
   for (i = n ; i > 1 ; i-- ) result *= i;
   return result;
}

```

---

<div class="post-metadata">

**Author:** ![Rick](https://avatars.discourse-cdn.com/v4/letter/r/9f8e36/32.png) [@Rick](https://boards.straightdope.com/u/Rick)\
**Post date:** [June 17, 2013, 5:39am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/253 "2013-06-17T05:39:58Z")

</div>

> [@desertmonk](#):
>
> Some cites that discuss the dangers of wrong way cycling.
> 
> [http://www.bikelongbeach.org/archives/4745](http://www.bikelongbeach.org/archives/4745)

For those if you that think riding the wrong way is a good idea check desertmonk’s link. Over a 10 year span riding the wrong way was the leading cause of bicycle accidents. Not number 2 or 3. #1.  
Get a clue, ride with traffic.

---

<div class="post-metadata">

**Author:** ![Senegoid](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/senegoid/32/6606_2.png) [@Senegoid](https://boards.straightdope.com/u/Senegoid)\
**Post date:** [June 17, 2013, 5:50am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/254 "2013-06-17T05:50:14Z")

</div>

> [@Doug\_K](#):
>
> Not as efficient as
> 
> ```auto
> 
> int fact(int n)
> {
> int result = 1;
> for (i = n ; i > 1 ; i-- ) result *= i;
> return result;
> }
> 
> ```

True of course: The iterative and recursive approaches end up doing the same arithmetic steps, while the recursive way has the additional overhead of doing a function call at each step (stacking the args, making the call, making the return, unstacking the args), and also the additional step of computing n-1 at each level. The iterative approach avoids all that. (ETA: Well, on second thought, the iterative approach does include incrementing (or decrementing) a variable at each step, so that’s equivalent to the n-1 computation at each level in the recursion.)

Yet, for all that, it’s not what’s _really_ bad (sometimes) about recursion, and that is something that a lot of CS students just aren’t getting, I think. So the point I was really trying to make was to show that some recursive methods are _really really bad_, in ways that the naive CS student might not understand.

And this was all in response, largely, to **Frylock** ’s observation that it’s useful to really understand how recursion works and when it’s good to use, as opposed to just using it as the knee-jerk algorithm-of-first-choice all the time – which seems to be how it’s often taught!

---

<div class="post-metadata">

**Author:** ![Jragon](https://avatars.discourse-cdn.com/v4/letter/j/e19b73/32.png) [@Jragon](https://boards.straightdope.com/u/Jragon)\
**Post date:** [June 19, 2013, 6:47am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/255 "2013-06-19T06:47:16Z")

</div>

> [@SCAdian](#):
>
> Fire Control had two computers on the boat. I found it extremely annoying that these were referred to as #0 and #1.

I do admit I have prejudices against people who count **actual, real objects** starting at zero. These are the sorts of things one should not expose to the user/non-tech people :p.

---

<div class="post-metadata">

**Author:** ![Mijin](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/mijin/32/9369_2.png) [@Mijin](https://boards.straightdope.com/u/Mijin)\
**Post date:** [June 19, 2013, 7:24am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/256 "2013-06-19T07:24:58Z")

</div>

> [@Trinopus](#):
>
> You’d think! I even went to the effort of duplicating the whole process with real pieces of paper. “Save As” means copying the paper (laboriously by hand) and storing it in a new location (literally and physically in his file cabinet.) He still didn’t get it!
> 
> Yet…he’s a trained engineer, a manager, a good speaker, reads widely, an ex-Navy pilot. (Navy pilot! I guess it’s not impossible to be one and to be a dummy, but, wow, that’d be a tough combination!)
> 
> I think it just comes down to a weird mental blind spot, and I think this thread suggests that a lot of us have those.

Perhaps he didn’t have a good idea of the difference between the document being in memory and stored on the drive?

I’ve known several people that knew that struggled a bit with that. And if he didn’t have that foundation, then the difference between Save and Save As might be rendered strangely in his intuition.

---

<div class="post-metadata">

**Author:** ![Jragon](https://avatars.discourse-cdn.com/v4/letter/j/e19b73/32.png) [@Jragon](https://boards.straightdope.com/u/Jragon)\
**Post date:** [June 19, 2013, 7:39am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/257 "2013-06-19T07:39:29Z")

</div>

I think a big hurdle to understanding Save vs Save As is that the first time you Save a given file in most programs, Save functions exactly like Save As by necessity, so the difference gets muddled.

---

<div class="post-metadata">

**Author:** ![Jragon](https://avatars.discourse-cdn.com/v4/letter/j/e19b73/32.png) [@Jragon](https://boards.straightdope.com/u/Jragon)\
**Post date:** [June 19, 2013, 11:21am UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/258 "2013-06-19T11:21:36Z")

</div>

> [@Jragon](#):
>
> I think a big hurdle to understanding Save vs Save As is that the first time you Save a given file in most programs, Save functions exactly like Save As by necessity, so the difference gets muddled.

And, in fact, if a file is deleted/moved while open in the program any attempt to save will often be met with a Save As prompt. It’s reasonable, I’d say, to dismiss the behaviour as capricious and arbitrary if you’re not apt to pay enough attention to realize the general rule of file already exists =\> Save, file is missing =\> Save As.

---

<div class="post-metadata">

**Author:** ![Ulf\_the\_Unwashed](https://avatars.discourse-cdn.com/v4/letter/u/b4bc9f/32.png) [@Ulf\_the\_Unwashed](https://boards.straightdope.com/u/Ulf_the_Unwashed)\
**Post date:** [June 19, 2013, 6:29pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/259 "2013-06-19T18:29:21Z")

</div>

> [@Rick](#):
>
> For those if you that think riding the wrong way is a good idea check desertmonk’s link. Over a 10 year span riding the wrong way was the leading cause of bicycle accidents. Not number 2 or 3. #1.  
> Get a clue, ride with traffic.

You know, when I am driving and see a wrong-way cyclist I automatically think, “Oh dear, there goes an idiot. I’d better be extra careful.” Most of the time it’s a good thing I am.

---

<div class="post-metadata">

**Author:** ![FXMastermind](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/fxmastermind/32/7289_2.png) [@FXMastermind](https://boards.straightdope.com/u/FXMastermind)\
**Post date:** [June 19, 2013, 6:34pm UTC](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360/260 "2013-06-19T18:34:18Z")

</div>

Nothing says crazy like riding the wrong way on a bike. People avoid crazy.

All is going as planned.

[Previous page](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360.md?page=12)

[Next page](https://boards.straightdope.com/t/things-that-you-cant-fathom-people-not-understanding/660360.md?page=14)
