With absolutely no doubt, I can say that internships prepared me to be a Software Engineer as much as my undergraduate studies.
I just had an intern finish his project under me at Viki, Singapore and I have been through two, one year long internships at companies in Silicon Valley. I base this post from these experiences.
First, basics matter. Most internships start after the sophomore year. Anything before that and it is likely that an intern would not have enough base in Computer Science to be able to work on a project of real importance. Before starting any internship, ensure that you have covered the basic classes such as Data Structures, Algorithms, Computer Architecture, Basic OS, Networking and Databases. Even if you have not had the chance to take these classes before the internship begins, try and fill the gaps with Coursera courses during your free time. These concepts will live with you for the rest of your career and get reinforced with every line of code you write or any technical discussion that you have. And, when you get back to school, you will be acing those classes.
Ensure that you have covered the basic classes such as Data Structures, Algorithms, Computer Architecture, Basic OS, Networking and Databases.
Second, Ask questions. You might be the smartest kid in your class with a 5.0/5.0 GPA. But you have the full right to act dumb and ask as many questions as possible. Most people would be more than happy to answer your questions. Be humble and be rewarded with bombs of knowledge and real-life experiences. Sometimes those seemingly dumb questions can lead to interesting stories.
Be humble and be rewarded with bombs of knowledge and real-life experiences.
Third, do not limit yourself to your team. You are just an intern who has no speciality. Explore other teams and their challenges. Be focused on your project but do not be a hermit. Have lunch with Engineers and Engineering Managers from other teams. Most of them would be happy to explain what they are working on and this will give you a broader understanding of various engineering roles.
And now some advice for Intern managers:
Ensure that you pair your intern with a mentor, who is not the intern’s manager. I learnt a lot through one hour, one-on-one white board sessions with mentors than through one hour of readings. I got good at Vim by looking at mentors navigating like a ninja through the humongous codebase.
Do not expect your intern to deliver. Expect the least but push hard enough to ensure that they feel challenged.
These experiences helped me and I hope they help you as you begin your journey as a Software Engineer. I am still learning and would love your comments on this! Tweet me @angadsg