Insights From My Third Week As A Software Development Intern
Week number three has come to an end. Once again, I want to give a shout-out to my mentors Fernando Calderón and Cristian Cota and the Education Team: Dayra Chiu, and Luis Lizarraga. Thank you for the energy and time you put into this. These are the insights I gained in the past seven days:
Polyglot Programming and asking for help 🗯
This week, all of us interns had to solve four different Code Jam problems as a team. The solutions had to be programed in 6 different languages: Go, Ruby, Scala, Rust, Java, and Node.js. It was tough and, so far, the most challenging task from my internship. Yes, I’m talking about the Polyglot Programmer challenge. 👻
- First, read the Code Jam problem.
- Then, think about how to solve the problem.
- Third, make pseudo code.
- Finally, write polyglot code.
Fortunately, a couple of days later, one of my mentors helped me clear my mind and advised me on an approach to solving the problem. He advised me to add a step between steps two and three: Writing the solution to the problem in the language that I already knew. This was an experienced approach that seems commonsensical now, but at that time I didn’t realize this was the best way to solve the problems. I followed this method and, with a lot of support from my peers, the assignment was completed.
Overall, this was a demanding but very rewarding experience that taught me the importance of taking a step back to figure out the best way to approach a problem and how essential is to ask for help.
Vulnerability and collaboration 💬
Another noteworthy insight from this week is that software development is inherently collaborative. This means that in order to be a valuable part of this activity we have to communicate proactively and be vulnerable. By doing this we show our failures, victories, expectations and any limitations we have in order to make the development cycle more efficient and effective.
Also, by disclosing this information, we foster an environment with a tight feedback loop where several people can point flaws and mistakes. This allows for errors to be detected on early stages, when there’s still time to act on them.
Decision-making and the brain 🧠
We make decisions all the time. According to Linda Rising, we make them by following two steps: First, we consciously do data gathering. We research, talk to people, read, watch videos and listen to podcasts. Then, the unconscious mind takes care of the verdict when we are in diffused mode.
This teaches me two things. The first one is that we need to carefully select the information we consume because it can skew our decision even before we make it. This data selection should be done not only when making a particular choice but all the time. When we access information, we should strive to receive data input from different viewpoints in order to assure an objective judgement.
Second, we can’t consciously access to all of our brain. We need to encourage introspective activities that stimulate our diffuse mode in order for that contemplative brain activity to happen.
In short, when we know this process, we can prioritize how we approach decision making and know that the unconscious brain will make most of the process. However, we need to nourish it with valuable and diverse data to make sure the outcome of the decision is not biased.
The Dreyfus Mastery Model 🥋
In last’s week essay, I mentioned Perceptual Learning which is a study-based learning method. This week I learned that according to Dave Thomas (“The Pragmatic Programmer”), the best way to master Software Development is through the Dreyfus Model.
The model is a “skill acquisition model of how learners acquire skills through formal instruction and practicing”. This definition is very similar and closely intertwined with Perceptual Learning. But, to take this a step further, Dave Thomas mapped the Dreyfus Model with five stages of Software Development mastery:
- Novice: Makes associations and patterns.
- Advanced Beginner: Starts trying tasks on their own.
- Competent: Develops conceptual models.
- Proficient: Wants to understand the larger conceptual framework.
- Expert: Works from intuition.
According to these two models, “copying is how we learn. We can’t introduce anything new until we are fluent in the language of our domain and we do that through emulation.”
This week I spend a significant part of the time struggling in how to solve a problem. In order to succeed in this industry I have to become more comfortable with being vulnerable and asking for help. In the next week, I will prioritize learning over perfection. This will require for me to follow a growth mindset and know that it’s okay to face limitations but I can always get there.
Here’s to another challenging but rewarding week! 🍷