Ask anyone who has done programming for a meaningful period of time and they will describe the pleasure and pain of building with technology. On the one hand, when they build a new website, mobile app or product feature; there is a sense of euphoria along with a tremendous sense of accomplishment that human has conquered machine. On the other hand, the effort required to push through epic intermediate failures and frustration is real.
At Digital Adventures, we work with students on a daily, weekly, monthly and annual basis to build a wide variety of hardware and software based projects. As an education technology platform, we often witness students get very frustrated while building.
In fact, we have seen students crash their programs and computers requiring them to completely restart their entire efforts - an epic failure. Fortunately, these epic failures are a healthy and even necessary part of the process for developing their expertise over the long term.
1. 10:1 ratio
Programming languages and the human developers are inherently imperfect. As a result, even when a developer has a seemingly perfect idea of what they would like to build; there can still be challenges with the implementation and execution of the logic.
However, through the process of iteration and improvement, an elegant solution can ultimately be developed to the problem under consideration.
The key to remember is that your final effort won’t necessarily be on the first, second, third or even ninth try. Often times, programming requires one to wrestle with potential options for hours or days until a solution finally emerges.
Along the way, there will be times that you will crash the website or app and all will appear to be lost. Those are the times when it is most important to push through to figure out where exactly things went off the rails and how to fix it.
2. Helps develop independence
As students develop experience in building with technology, one of the key goals is for them to develop independence. If they have an issue with their program not functioning as intended there are a few potential options they can explore: ask the teacher for guidance, ask another student for assistance, or research the issue independently.
One thing that we always emphasize is it is never ok to give up. They can take a break to gather their thoughts. But, they always must come back to the problem they were working on.
Depending on where they are in the journey, some or all of these options may be available for a given problem that needs resolution.
Regardless of which option they pursue, it is important to know what problem they are actually trying to solve. To facilitate this process, our instructors will often ask what the student is trying to accomplish and how the current solution is performing different than intended.
Often the socratic nature of the discussion with an instructor will help a student see the flaw in their logic without additional instructor intervention. At other times, they need additional problem solving muscle or a fresh eyes approach because they may be too attached to their existing method.
However, we have found that it is extremely helpful for students to fully describe what they are trying to accomplish as the first step in getting them the assistance they need.
From there, they can often continue the process of deconstructing until they discover the flaw in their logic.
3. Feature, not a bug
As an education technology platform that is focused on teaching kids to build with technology so they can one day change the world, we consider failure and frustration to be a feature not a bug of our learning environment.
If students never bumped into big, seemingly un-solvable issues, it would be hard for them to grow.
Throughout their technological journey, there are going to be several new languages, frameworks, and innovations introduced.
While they are getting up to speed on things that may be on the cutting edge, it is important that their learning process is not disrupted by potential challenges that are inherent in all languages, frameworks and truly disruptive innovations.
Similar to tools in a toolbox, students begin to learn that you have to be careful when hammering a nail so you don’t smash your finger. No one would ever think to no longer use a hammer and nails during a construction project simply because they smashed their finger one or two times.
In much the same way, their programming may create bugs or they may not be able to get the desired output after several different tries.
The goal is that by understanding that failure and frustration are part of the process will enable them to develop resilience to the inevitability and eventuality which will ultimately make them better problem solvers.
4. Solution Identification Euphoria
Although we celebrate epic failures and frustration during the technology development process, it is important to remember that these are only temporary milestones along the way.
Ultimately, those who successfully build with technology are able to come up with elegant solutions to a number of different problems.
After having numerous discussions with engineers, programmers, developers and all manner of problem solvers, there is a consistent theme among those who are able to get over the hump - euphoria. There are times when students finally figure out how to get a project to work and they scream out “Hallelujah” or another joy-capturing word.
While there may be a wide variety of reasons for this, I think one potential reason may be that humans are inherently creative creatures.
The ability to leverage their creative muscles to develop an elegant solution to a technology-based problem knowing the inherent challenges of the platform is extremely satisfying.
In addition because of the mental stretch that occurred along the way, one feels as though they have truly accomplished something meaningful.
Within this context, one could argue that technology-based solution development is exercise for the brain that builds your problem solving muscles to become much stronger over time.