5 months at F5 as an intern

internship developer learning rubyonrails ionic3 angular 4

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:

What I could have done better:

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