Have you ever gotten so frustrated with a problem that you just want to give up? Do it! Give up! Throw your hands in the air and walk away! Conventional wisdom tells us that those with a can-do, stick-with-it attitude are the ones that succeed, but I don’t think simple tenacity is the right approach to every problem.
Allow me to add a disclaimer: please do not apply this advice to all of life’s issues. I am writing about this in the context of coding. Also, I am not telling you to be a programmer who fills a repository graveyard with half-finished projects and broken and buggy code. I think that giving up may be the best thing you can do to actually solve the problem you are facing or get through the sticky patch that is just not making any sense right now. That’s right! Throwing in the towel, at least temporarily, will actually help you to win the fight. Taking a detour might actually get you to your destination faster.
I am not a neuro scientist, so I really don’t know how this works. But I do know that our brains are capable of processing more information than we are consciously aware of. That’s why things like intuition exist. We intuitively know the right answer or the right thing to do, even if we can’t explain why it is right. That’s why when we can’t think of the answer to a question, it pops into our heads after we stop thinking about it. Our subconscious continues to work even after our conscious thoughts have moved on.
So, does this idea of giving up really work? It worked for me! I am currently working on a project to build a todo list web app using Ruby on Rails. I watched video after video of test-driven development. Write a test, watch it fail, write some code, test again, different failure, write more code, test again… I copied the code that I saw on the screen, but I had no idea what I was doing. I felt like a zombie typing random combinations of words, colons, parentheses, and curly braces on my keyboard. I was frustrated with the fact that I was doing all this work and not understanding one bit of it.
That is when I gave up and started working on this blog. It was something that I had wanted to do for some time, but I always felt that my Ruby app was more important and should be finished first. Well, I threw that idea out the window and dove in to Jekyll and started building my site. After a few weeks of easy HTML and CSS coding with a little Jekyll markdown, Liquid Templating language, and a few SSH commands thrown in, I had my blog up and running on GitHub.
With a fresh mind and renewed sense of purpose, I returned to my Ruby app, and a funny thing happened. I was actually understanding what I was doing. By no means am I at 100% or even 80% proficiency. But I think I went from about 10% to about 50%. That is a huge improvement! I still have a long way to go, but realizing that I am beginning to understand Ruby and test-driven development has given me the motivation to keep going.
I recently spoke with my friend who is a web engineer for the Dollar Shave Club, and he added this insight into what I was experiencing. He said that programming draws on a disparate set of small skills that are like the different branches of a tree. An experienced programmer intuitively draws on all these branches of knowledge to accomplish what he or she is doing. A programmer who is just starting out only has a few twigs to work with, and it is hard to know which branches he needs to learn in order to finish his project. Dropping one project to work on another may just end up adding a few needed branches to your tree that will actually help you with the first thing you were working on.
What are you stuck on? What are you struggling with? Give up! Work on something else. And you may find that it was exactly what you needed.