My first outdoor soccer game was a mess. I was constantly in the wrong place. When the ball came to me, I couldn’t stop it, dribble it, or pass it. Basically, nothing went right. I was incredibly frustrated. After all, I’m an accomplished runner and triathlete and a US Soccer licensed coach! I knew what I needed to do, I just couldn’t make it happen.
After the game, I had a chance to reflect. In hindsight, it wasn’t surprising that I played terribly. I jumped from coaching to trying to execute all the intricate skills needed to play soccer in real time. That’s not how sports work. You don’t go from knowing what needs to be done to instantly being able to do it. You have to practice. So I did. For the next several weeks, I would spend a few nights per week practicing basic skills like dribbling, shooting and receiving passes. Over time, my play improved. During the first game, I was overwhelmed with complexity of everything happening at once. When I practice, I can slow down and focus on just one thing until I get it right. I’m still not a very good soccer player, but I’m no longer overwhelmed. Now, I find myself improving from week to week.
I felt the same while learning Elm. I started by working on a feature in our production application. Within a day, I had made a mess. I had thoroughly confused myself and gone down so many false paths that I no longer knew what I was trying to accomplish. I made exactly the same mistake I made playing soccer. I tried to do too much at once without being solid at the fundamentals. It was time to practice.
At HubTran, we love Exercism. It’s a tool we use in pairing with our less experienced developers to give a space for practice. Typically, I will work on a problem with one of our less experienced developers. After we complete the exercise together they will go back and solve the problem a different way on their own. This time, however, I got to be the less experienced developer. Over the next few weeks I continued to go through the exercises and the solutions started to come more quickly. Even when I didn’t know exactly how to solve a problem, I typically had an idea of what techniques to use. Practice let me understand the fundamentals to the point where I could start to combine them into more real world scenarios.
Of course, even with practice, some things are tricky. My experience as a runner and triathlete didn’t give me all the skills I needed to be a soccer player. Similarly, my experience in Ruby isn’t always helpful when learning Elm. For example, I was working on the RNA Transcription exercise with Glen last week and we got stuck. We both had the general outline of what we needed to do:
- Split the string into characters
- Translate the character into a Result with either an error or the correct transcription
- Combine the Result’s into a single Result
But even knowing that, we still couldn’t figure out how to make progress. We spent almost an hour fumbling from attempt to attempt until Glen found Result.map2. Suddenly, a light bulb went off and we were able to quickly complete our solution. With that, we learned a new technique. Importantly, we learned that technique in a space where it was okay to try things and to make mistakes. One of the wonderful parts of practice is that it creates an area where it is okay to push your boundaries and fail. Only by failing repeatedly did we get to the point where we understood the concept of map at a much deeper level.
I learned a lot from this experience. First, I learned at a deeper level what map means. More importantly, I was reminded of what it feels like to be a beginner, even though I have more than 20 years of experience. That feeling of confusion in frustrating is difficult to deal with. Feeling it myself reminds me of what our less experienced folks go through every day.
As a postscript, I paired with Kofi on the same problem a few days later. I found the solution to be completely clear, up until Kofi blew my mind with the function composition operator in Elm. I love the feeling of leveling up, but there’s always more to learn. I’m thankful to be part of a team who is as interested in improving as I am!
Are you the type of person who loves to practice and improve? If so, please reach out. We’re always looking for great people to join us!