No Substitutes for the Real Thing: My Internship at Under Armour
My journey at Under Armour (UA) began with a trip to The University of Texas at Austin (UT) career fair in search of a summer internship. With no specific company in mind, I brought a copious amount of resumes to distribute to any company that seemed remotely interesting or had some good SWAG (fun free stuff the recruiters give out). I was running low on resumes and energy when, to my surprise, I stumbled upon UA. It made me wonder “why would an athletic apparel giant be recruiting computer science students?”
Excitedly, I approached the booth and soon learned of UA’s expansion into the fitness tech world. Talking with the reps at the stand, I immediately realized what a great opportunity working at UA would be for me, since it would give me a chance to merge two passions of mine: an athletic lifestyle and computer science. They invited me to come to their office and after a quick, slightly sweaty interview: I got the job!
Excitement + Fear
Initially arriving at UA was simultaneously exciting and frightening! I had only just completed my sophomore year as a Computer Science major at UT and still had a lot left in my programming journey. My first two years of college provided a solid foundation in computer science fundamentals, but it was reasonably light on some of the more practical necessities for functioning in a professional software engineering organization. I did not have experience yet with concepts like best practices for source control, continuous integration, and writing testable code.
I also had little experience developing mobile applications on Apple’s iOS platform. The MapMyFitness suite of iOS apps is largely written with Objective-C, but a growing portion of it is being written/re-written using Swift. I knew the basics of Swift, but I’d never even looked at Objective-C prior to working here (which may have been the scariest part of it all). Objective-C is a verbose language, and at first it looked like a bunch of random words scrambled together in every which way—terrifying to read, let alone write. While Swift is a pretty language and easy to learn, there are so many “easter eggs” and hidden functionalities. Needless to say, I was a bit overwhelmed by all this new information and I spent the first couple days in terror of asking a stupid question that would expose my lack of knowledge in these areas.
Very quickly, I learned to relax because the team explicitly let me know that questions are welcomed and expected, especially as an intern. Anything from gaining clarification on a task’s objectives, to advice on how to design a solution, to maneuvering through the agile process—the team demonstrated a desire to invest in me early and seemed genuinely interested in my progression as a developer. The more I learned, the more confidence I gained, and the more effective I became on the team.
I started off working on just a few small bugs. For the longest time, my biggest contribution to the app was fixing the “user’s-last-name-overlaps-the-add-friend-button” bug (which was easy to reproduce using my last name):
As I adjusted to the languages and code base, I started becoming an active contributor to larger bug fixes and tasks with bigger scope. About halfway through the summer, I was given the responsibility of helping with a major remodeling of the Record Workout view in the app. Given the technical debt that has accumulated over the years on this screen, the team decided to refactor the structure of the underlying code in addition to the visual changes that the Product and Design teams wanted to make. Due to the complex interactions of this screen, the team chose to employ the Model-View-View-Model pattern (MVVM) as the foundation of this refactor.
My assignments were to create the Record Workout Button View and the GPS Signal View. The Button View consists of four different buttons that reflect the state of a workout along with the animations between them. The latter is a view that displays an image corresponding to the strength of the GPS signal. Both views implement the core properties of MVVM that allow for easy communication between other classes through an overarching view controller.
After I completed the work on the Record Workout screens, I felt less like I was just fumbling around in Xcode and more like I was wielding Swift to my advantage. At this point, we decided I was ready to begin working on a feature that I could own from start-to-finish. After discussing product needs with the team, we decided I should implement a set of Force Touch shortcut actions that allow a user to start a workout directly from his/her homescreen. Users with Force Touch capabilities on their phones can initiate a Force Touch press directly on the app icon, select an activity type (i.e. Run, Ride, Walk, etc), and then just go!
Now that my summer internship has ended, I feel sad, but really gratified by all that I accomplished over the summer. Coming in knowing little about mobile app development, I learned two languages and became comfortable with working on mobile apps. My understanding of computer science has evolved and I feel more secure in my choice to become a programmer. I also learned how to function as an employee in the workplace: working with pre-existing code, writing code that others will later use, and collaborating with other teams. I realized the outside applications of my education; that I can use what I’ve learned at UT even in new environments. So after living the summer as a professional, I’m excited about two more years of life as a student again—where I’ll continue to better myself as both computer scientist and athlete!