Prior to Applying
When I had applied for my internship at Evojam, I had a semester or two of Computer Science related study under my belt and a lot of time spent fiddling with programming on my own. Basically any spare time I had was spent going through tutorials, reading books, and so on. One day it would be a tutorial on AngularJS, the other a book on Rails, and the third possibly something on Git. Repeat for a few months and what do you get? A person with a decently broad, but extremely shallow knowledge base. I vividly remember at one point realising that I had been writing a Hello World tutorial for the 8th or 9th time.
What I Was Looking For
All I knew what I wanted was focus. Months of hopping around between different technologies had left me with little actionable knowledge or skills. That, along with the desire to get some real world experience motivated me to look for an internship. After sending out some emails and a Skype call I had found one, at Evojam.
What I Got
As a relatively young and small company it was pretty difficult to gauge what I was getting myself into. I had my doubts and fears but they were trumped by the excitement of knowing that I wouldn’t have to spend another summer working behind a register at a petrol station, and would finally get the chance to do something I was passionate about.
My task was to join Artur - the Senior Backend Engineer who was working on a greenfield project, which involved a REST API and some micro services. The project was at that time was barely a few months old, worked on by 2 people in total and there was a lot to do.
The Water’s Deep
I can only attempt to describe the first few weeks of my internship as if I had trekked into the Amazon, came across an indigenous tribe and had been attempting to assimilate into their group. I watched in bewilderment as tech jargon that I had never heard of was hurled across the open space office, scrambled for words during the proceedings of sprint retros and daily standups, and struggled to make sense of the patch sets flying into code review.
The only recourse that came to mind at the time was to simply dive in, and give it all I had. I immersed myself in all the books, blogs, tutorials that I could find. Sink or swim seems like an appropriate (albeit dramatic) metaphor, for the effort required to keep up to the pace I had set for myself.
Learning How to Swim
Fundamental to the learning process that followed is the approach that Artur took with me. Whilst not something explicitly stated at the time, in retrospect I can see it clearly. He would turn around and suggest stories for me to pick up that were always just out of reach of my current abilities, and then basically say "have fun" and turn back around. Then I would do some research, threw what I had done in code review, get good feedback void of any sugarcoating, and this would repeat until the feature was done. Of course, there were (many) times when I was frustrated, lost and confused. Some things seemed simply impossible to do. So I would get a nudge in the right direction, but rarely "the answer". In the end the net result was constant learning of new concepts/technologies, improvement of code style and structure, and the confidence to get out of my comfort zone.
Furthermore, as our team was small and backlog huge, there was always something new and exciting for me to get my hands on. I wasn't limited to "junior" tasks, had my hand held, or kept out of the loop. The lack of a ceiling above me in terms of what I was able to work on, meant that it was up to me to set the pace of my own learning and improvement.
I feel that now I have a solid foundation on which to tackle harder problems, grok new concepts and write better code.
In writing this blog post I can't help but not notice the element of luck in this story. I was lucky that I reached out to Evojam, that I got put under the wing of an awesome mentor, and that I got to witness and participate in the development of a decently sized application from scratch. So I have to acknowledge that joining a small company does not guarantee developer happiness, neither joining a large corporation prohibit it. The message I do want to get across is firstly a personal thank you to Artur Bańkowski, and secondly one to those specifically on the entry level in this field - consider joining a good small sized company or startup, you never know how much you can learn.
1 - Part gamble, part instinct, part research. Just as companies vet employees prior to hiring them, the process (should) be much the same in the other direction.