Tips on what to do during a software engineering internship. (part 5 – during)
In my opinion, a bad internship only occurs if you did not learn something new from the internship. I’ve been pretty lucky at the company’s I’ve interned at and the mentors I got, but I can’t say the same for some of my friends.
Unfortunately, poorly executed internships are not directly correlated to the company’s size, and it’s disappointing to see interns spend an entire summer working without getting much out of it. For me, an internship with a good mentor will be beneficial both during and after. But being resourceful during the internship can help as well, even with a less motivated mentor!
The first thing I noticed when talking to full-timers with interns is how much time it takes to bring interns up to speed and answer their questions. It seemed like the company (at least my team) understood that the interns were a high priority, so being available was super important to them. Here are some things my mentors have told me about what to do during the internship.
Ask your mentor questions!
Especially near the beginning of the internship, don’t hesitate to ask questions. Onboarding onto a new system can be challenging, and there are a lot of shortcuts and techniques that will make your life easier. I appreciated my intern manager from Facebook because he gave me mini 5-minute tutorials on using the internal systems. Being receptive early and asking those questions allowed me to pick up the different shortcuts and techniques. That helped me save a lot of time, especially near the beginning.
Figure out if you want to work in this role?
One important thing to find out during your internship is if you enjoy the role of a software engineer. Full-time software engineering is entirely different from the classes you take. The biggest thing I’ve noticed is the type of complexity and challenges.
I spent most of my assignments writing algorithms and optimizing them. However, as a software engineering intern, I spent a lot of time talking to my team, writing documentation/proposals, deciding on testing strategies, choosing variables names, and resolving review comments. The ‘actual’ coding part is only part of the battle. The other part is being about how other people perceive what you write.
I didn’t write a design doc in all my internships. But reading the design documents of the projects I was working on helped solidify my understanding of the code and helped me become better are making design decisions. It also helped me get a sense of a day in the life of a full-timer.
Learn from code reviews.
Code review is one of my favorite parts of the internship. Getting better with code style, variable naming, and design decisions don’t come from writing code yourself. Also, it’s not every day that a senior engineer can give you tips on how to write better code. And I’ve learned so much because of it. It’s probably the most impactful part of your internship, as college classes rarely cover how to write clean code since it’s pretty challenging to ‘grade.’ Professors rarely have time to review on top of teaching classes and research to review code. Also, you can bet graduate TAs don’t write the cleanest code. Furthermore, each company has its style guide, which can help develop your coding style. Reading other people’s code can help as well!
On that note, during my internships, I’ve asked my mentor to suggest other people I could get to review my code (to get variety). I’ve also asked them to add me as a reviewer on their commits to understand how they write code. Both have been valuable to me.
Reading Documentation is great.
Have you read post-mortems before? They’re pretty cool and can help you understand how different systems interact with each other. As an intern, you have access to many internal design documents that other software engineers wrote to solve problems. It’s not like the design documents that you write in college because, here, each decision can impact millions of people (and there probably isn’t a ‘correct’ answer). There’s also a treasure trove of fun reading material that people will write about tips and tricks of common editors and their coding workflow. Reading these documents can both be extremely informative and fun!
Make sure you have work-life balance.
As an intern, it’s essential to separate from your work after hours. I’ve seen too many people work crazy hours for a company that they don’t even get the upside. Interns rarely (and shouldn’t) get equity, so the ups and downs of a project being behind schedule shouldn’t impact the enjoyment of living in a new city and the summer. My mentor used to tell me “why are you still here after 5 PM? Go home!” :D Leaving at a reasonable time allowed me to explore the city and also hang out with other interns and get to know them as well!
But going the opposite direction and choosing to slack on work isn’t good either. Sure, I know people who barely did work and still got a return offer, but they got fewer chances to learn and develop as a coder. Knowing what resources are available to use can be extremely helpful during an internship. Working hard (and efficiently) and making sure you are learning and contributing makes an internship both fulfilling and beneficial to both the intern and the company.