Recursion

Cross-posted to the IDP08 Blue Blog.

I’m going to go ahead and “nerd-alert” myself on this post.

My fellow programmers:

Do you remember the first time you tried to learn recursion? And how you thought your professor, while teaching you “the magic of recursion,” was secretly laughing at you behind doors because you weren’t getting how recursion worked? The professor could tell you the results, the structure, and even why it worked, but you still didn’t get it.

How many times did you ask your professor to explain recursion just one more time, hoping it would “click”?

But you had an assignment, and it was due soon, so you started coding. It wasn’t like you had any idea what was going on, or that you thought it would work. You just did it. And eventually, through trial and error (most likely), it worked. But it still didn’t make sense.

And the saddest part was that recursion could make complete sense, but that didn’t mean you knew how to code the solution to the problem. Yet, the first time you wrote recursive code that validated and worked, you felt like a true programmer.

So this is where I am right now. I am back in my undergrad, trying to understand recursion for the first time. I’m frustrated, determined, and annoyed. I’m supposed to be “smarter” than this, but this isn’t a case of being smart, is it?

This is a case of trusting those who are wiser than us. It’s a case of trusting that they aren’t laughing at us behind doors, because once upon a time, they had the exact same problem. And if they do laugh, they aren’t laughing at us, but at the memory of their own frustration and panic. Well, some of them might be laughing at us, you never know, really.

Once upon a time, I trusted my professors, I did what they said, I got a recursive function to work, and I (eventually) understood recursion.

Recursion, my friends. Once you’ve experienced it, you can never go back. I suspect it might be the same for design.