I had decided early on that I would take a gap year after high school, and one of my goals was to do a programming internship. In December, I sent out a few hopeful resumes, which depicted no experience other than some hobby projects on Github. I was surprised when a response came back, requesting an interview. Then another.

The first office was what you'd imagine a tech startup looks like - a roomful of guys with T-shirts, sitting at two rows of computers, monitors full of colorful text on a black background. We talked about the projects I did, and I asked about theirs. It felt more like a chat than an interview, and towards the end we even joked about ridiculous job requirements (...five years of experience in React?!)

The next interview was the day after, and I didn't even have time to wash my (only) skirt between them. This one took place in a conference room, located in an incubator site full of glass buildings and serious-looking people. The startup wrote PHP enterprise software for logistics companies. Towards the end the interviewer said, "By the way, there's no minimum wage for interns - we'll give you however much your effort is worth."

Finally, an email returned with an offer. It was from the first startup. I was lucky. If they hadn't replied, I might have spent the next five months writing boring CRUD software in a company that treats programmers like machines. Instead, I got to work with a team of amazing people who cared about writing solid code and encouraged learning.

When I got assigned to my first project, I had no idea where to start. The code looked unfamiliar in every way, and I was dead certain that I would get fired by the end of the month. I knew Javascript but not Angular/Ionic, and the structure is very different. The only way I was able to write new code was to find a similar function somewhere, copy it, and modify it.

All of the app projects used an API endpoint library that the senior developers had created. It was the most difficult to understand. To make sense of what it was doing, I global-searched functions and followed them though files full of intimidating-looking code. And this was only the frontend part - which I already knew the basics of beforehand. It was not long before I was given some backend tasks to do. I hadn't written a line of Ruby code before, and knew next to nothing about backend programming. Though I was given a tutorial book to read, it became apparent that the fastest and most engaging way to learn was by trying to understand existing code:

Start with the html file. What function does this button call? What endpoint does this function call? What controller in the backend does this endpoint call? What serializer does this controller render with? What values are passed back to the endpoint?

This helps a lot when you want to a new language fast, especially if you already know one. Clone a Github project and just try to follow each function. Google the syntax that you don't understand, and use global search to find other functions that are called.

As things gradually fell into routine, five months passed by before I knew it. Somehow, I was now able to complete tasks that I used to find impossibly challenging. At the start, I would choose tasks based on how easy they seemed, but now I picked them based on how interesting they were.

To summarize, here is what I learned:

  • How to focus -
    I was not used to this kind of intense programming for eight hours a day. By the end of the second week, I was going to throw up if I had to write another line of code. During this internship, I had built up stamina and could now maintain focus for long periods of time. It also help to understand the code throughly, so I wouldn't get distracted having to constantly look up everything.

  • Optimize my workflow -
    Since I was spending so much time in the code editor and terminal, I put in the effort to customize every part and memorize as many shortcuts as I could. It was worth it. I became much faster at navigating code and getting to whichever file I needed.

  • Care about other people -
    The first time I got git blame-d was because I changed a migration file after someone else had already pulled it. I also had to make sure conventions were followed, and learned how to explain what I was working on so that I could stop saying "uh... just read my code" at the daily standups.

What I could have done better:

  • Ask more questions -
    I wasn't particularly shy, but I was scared of being looked down at if I asked too many beginner questions. In the end, I learned that it was perfectly fine to do so, being an intern.

  • Focus during meetings -
    This was a crucial part of the internship that I missed. When they started talking about this client or that project, I couldn't help getting bored and stopped listening. I could have learned a lot more about the business side of things.

  • Read corrections -
    It helps a lot to know what you did wrong, whether it be code style or fundamental code structure. I should have looked at how my code was corrected and improved upon by other people.

Thank you guys for such a great and productive internship - I will definitely miss you all!