If I asked you to give me two integers that add up to 10, how many could you conjure? 5? 2? As it turns out, there are an infinite number of integers you could use in this equation:
8+2 = 10
5+5 = 10
100+(-90) = 10
You see where I’m going with this. Even the simplest of mathematical problems can yield a surprising number of possible solutions, and so it goes with coding.
Since cofounding Mobile Makers and teaching over 250 students for the past two and a half years, I have witnessed the the simplest of challenges met with innumerable solutions. As an experienced developer, I would most certainly have solved a particularly simple problem a certain way. Yet these students, time and time again, prove to me that programming is a creative field with solutions I would never have entertained.
Programming is a creative field.
There truly are no right answers in programming. For any given coding puzzle there will exist several viable, acceptable solutions. Now, sometimes we may solve for different types of problems. We might be coding for maintenance. We might be particularly concerned with memory consumption and therefore looking to maximize efficiency. A game, for instance, might need to execute something as quick as possible, taking advantage of technology not readily accessible through a higher level language.
Even within those narrow silos of concerns, there will be various worthy interpretations and implementations. One of the things that I love about my career is that I continually discover new ways to do things. Hell, revisit a project you did a year ago, and you’re going to want to rewrite portions based on what you’ve learned, things you’ve read, or code you’ve written.
However, when learning to code, it’s not about just getting the program to do what you want—it’s about figuring out how to get the program to do what you want. As a student learns to code, they are looking for patterns and successes. Students are also very sensitive to failure, seeking both validation and course corrections. It is important to understand the value of failure and to leverage its potency.
This is not lip-service—failure is the way we learn. Success provides the positive feedback, offset by failure, that propels the physiology of the brain into constructing new neural paths, storing memories, making associations. In a word: learning. If we do not fail, we do not learn. It’s that simple.
If we do not fail, we do not learn.
This is where a tough philosophy meets the road. We do not give answers to code challenges in our iOS bootcamp cohorts. Doing so would suggest that there is one right answer even if we can intellectually rationalize that this is not the case. Students will see expert-provided solutions to a common problem as something to strive for. Personally, I would rather see the student own their solution, no matter the quality, and verbally support the concepts and thought process that carried them on their path.
For me, supported and guided self-discovery is the most important instructional feedback tool at our disposal. When done correctly, we see confident and capable coders come out of our program, ready to take on the world.