Learning Programming
Dealing with failure and frustration
I’ve recently finished my apprenticeship program here at 10Pines.
The experience was way beyond my expectations. Really. I’ve learned much more than I expected.
In order to show some of my experience during my time here, I was asked to write a post about something I’ve learned. I’ve decide not to write about the techniques or tools I have gained, but about the human aspects of this educational period, which include, in my opinion, two very important concepts.
First of all, I want to write about the importance of seeing error as feedback and as a way to learn.
It’s important to change that mindset that tells us that making a mistake is wrong and we need to start seeing it as an opportunity for learning. Failure is not a bad thing, it gives us constructive critique about something that is not working the way we are expecting and needs to be fixed. Thus, it helps us reconsider the steps we’ve taken, find what to fix and learn with it. So..
Let's make some mistakes!
With programming we are always learning and that is a fact. I feel there is so much to learn, so much to grasp. Sometimes, that feeling discourages me. But I’ve discovered that it doesn't matter how much you know or how good programmer you are, you can always learn something new. So I will always feel that there is so much to learn, and that’s okay.
During my apprenticeship I understood that programming and failing is where we encounter opportunities to learn the most. And when I thought about my feelings when I couldn’t get things right, I realized that programming is indeed frustrating. And it will always be like that.
The programming experience includes: trying to fix something, getting frustrated, keep going trying to fix it, stopping for a minute, getting a new idea and finally finding the solution that makes the program work.
So I learned that getting frustrated is normal. There is nothing wrong with it. And I will never stop getting frustrated. This sense of frustration is what will make the satisfaction of finding and solving the problem much bigger. So..
Let's get frustrated!
We need to adapt ourselves until we feel comfortable with these feelings while working.
With this, I would like to write a little about the second concept, which is psychological:
Tolerance to frustration
So, what does this concept have to do with programming?
We often use the words tolerance to frustration referring to whether a person has this skill, and if so, how much of it.
So, what is tolerance, anyway? The definition of tolerance implies the existence of a threshold. When something manages to make us surpass this limit, a reaction occurs. This way, people can be more or less tolerant depending on their personality, their emotional state, what circumstances they are under, etc.
On the other hand, the word frustration has several psychological connotations. This is: the emotional experience a person undergoes when confronting a situation in which an expectation, a wish, a project, a hope or a necessity is not fulfilled or achieved.
Whether it comes from an external or internal source, every frustration involves a specific situation and an experience. Not everyone reacts exactly the same. That’s why we could say that there are a lot of different reactions to frustration, as many as people.
So when a wish or hope is not fulfilled, a person can react in different ways to this frustration, from feeling anger to being aggressive or even violent, if we want to mention the most extreme way. Or on the contrary, the person can experience a state of no reaction whatsoever, or feelings of sadness, pessimism, fear and lack of motivation.
Have you ever felt something like this when programming? Have you ever experienced one of this reactions?
I have. I’ve felt so discouraged that I didn’t feel like coding anymore, ever again.
So, what about tolerance to frustration then? Can we tolerate our own frustrations in a healthy way? Of course we can. And we should.
When a person has tolerance to frustration, internally what this person has is a degree of strength and balance that allows him/her to continue loving and working, against or despite frustration.
Moving forward, every frustration, not only as the situation, but as the experience, is horrendous, but not bad in itself. It’s very important to know that maturity involves a subtle balance between the frequency of gratifying experiences and frustration. What’s more, Freud said that the possibility of further growth and development of the subject depends partly on this balance[1].
With this I want to point out:
The importance of being in an environment where not everything is a gratification, and where our problems aren't always solved by someone else, since that's when we lose this opportunity for progress and growth: a little frustration helps us become more capable and mature;
And the importance of not living in a state of permanent frustration: in an environment where we do get frustrated all the time, because that's what could make you feel overwhelmed and hinder your wish to improve yourself and grow.
During my time here in 10Pines, I found this kind of environment with the balance Freud mentioned: I was motivated to face challenges, with the responsibility to do things for myself, knowing that I was going to find errors/problems that I’d have to solve but with the support of our mentors and my colleagues to not feel completely discouraged.
So, for me, the most interesting thing in this apprenticeship, beyond the concepts, techniques and tools I’ve learned, was that I could learn from failure and frustrations and that I should increase my tolerance to them in order to become a happier programmer… without dying while trying.