I was talking with my good friend today discussing how she has just started taking a Spanish course. She mentioned how it was hard at the beginning because the teacher started immediately speaking in Spanish and asking them to read in Spanish. At first I sympathized with the unease of that situation, but then I began to ponder how it is actually good to feel uncomfortable at times.
It is akin to working out. Just as sore muscles are a sign that you pushed your body, her feeling of discomfort means that she is pushing herself beyond her norm. Just as your muscles will heal and become stronger, she will come out of the situation even stronger. That discomfort is going to inspire her to work harder and to learn the language more quickly. She can reflect on that feeling of unease and be thankful that she has the courage to put herself into that situation.
This caused me to reflect on myself to see if I am pushing myself in someway that makes me uncomfortable. If not, I am not growing and learning as well as I should. I have been developing for iOS for so long now that I am profoundly comfortable with just about any problem I come across. I have written a library that digs relatively deeply into the Objective-C runtime, and I have written many front-ends. This does not mean I don’t thoroughly enjoy what I do, but it does mean that I could be losing my capacity to push through my discomfort and, through that, my ability to learn.
However, I quickly thought of my very recent resurgence into Ruby on Rails. My previous employer developed their back-end in Rails and I communicated with it from my iOS app, but I never really got a chance to dig into the code. My only real experience with Rails so far has been that I wrote this blog from scratch with it. I however, did not write any unit tests and I mostly fumbled through it.
My lack of real world Ruby experience was my biggest fear when I decided to go independent as most modern applications at least require a web back-end. I do have experience with the LAMP stack, but compared to my comfort level with Objective-C, I was pretty terrified to do much work outside of the “Walled Garden” of Apple technologies.
Luckily, I had a strong business reason to push past my insecurity because I need to develop a website and back-end for version 2.0 of my Notecards app. I have been developing it for just over a week now and I am already leaps and bounds more comfortable with Rails. It was slow going as I shook off the cobwebs on how to use generators and configure the database. I pushed through the hurdles of configuring Capistrano to deploy, configuring Devise to allow JSON authentication, and how to get my specs up and running with RSpec. I reminisced as I ended up with more than 40 tabs open in my browser after each coding session as I once had when first learning Objective-C. I went to sleep after 3am multiple nights after 11 hour sessions of debugging, dreaming of the problems I still needed to address.
Soon though, I found that things started coming more easily. After I did my first endpoint with unit tests, the next ones were easy. I could build on what I learned about single level endpoints to allow second level endpoints. It became more normal again to enter a situation or problem uncomfortably and to come out on top with even more knowledge.
I even got the extreme pleasure today of being able to very quickly implement a back-end change for one of my clients because I had tackled a similar issue just a few days ago for my own app. It is truly invigorating to see my skills really start to take off like they haven't in years.
It is easy to forget that it is not our accomplishments that make us who we are, but our struggles. It is easy to forget that to truly grow, it is difficult, it is infuriating, and it is uncomfortable. I for one, hope to never forget that for too long. One should never become, too comfortable.