So you didn’t land a summer software engineering internship…Now what?
This is my advice for computing students who were hoping for — but did not get — a summer internship in software engineering.
Two things not to do
- First of all, don’t panic. Internships are a helpful way to prepare for a career in computing, but they are certainly not the only way.
- Second, don’t give up on your career goals. Each internship opening gets many many applicants — sometimes over 100 applicants trying to get one job. I hired some interns when I worked at IBM, and there is a lot of randomness in the process.
However, you should recognize that summer internships are a common stepping stone toward a full-time jobs. Careers often follow a “rich get richer” path; a track record of success leads to greater opportunities. So you will want to make sure that next time around, whether you are angling for an internship or a full-time job, you can compete with the people who did land internships. Let’s figure out how you can get a similar kind of benefit this summer.
A few ways to spend your time constructively
A summer internship gives students two kinds of experiences:
- Corporate experience: Interns get acquainted with the corporation that is hosting them for the summer. This increases the chances that the intern will take a job with the corporation after graduation.
- Engineering experience: Interns get engineering experience with a real project working with a larger team towards a business objective. This lets them apply what they have learned in the classroom, and understand topics that professors cannot teach you.
(It also provides the intern with money.)
You will not be able to replicate the first kind of experience, but you can certainly replicate the second one. If you can afford to not make money in the summer, or to make do with a part-time job instead of a full-time one, here are some suggestions for ways to use your time constructively. This will pay off in the long run, since your new experiences will help you negotiate a higher salary later on.
- Contribute to an existing open-source project. There are many open-source software projects that would love to have some additional support. There are many ways to contribute to an open-source projects — writing documentation, adding test suites, adding or improving their continuous integration pipeline, fixing defects, and adding new features. These are exactly the same activities that people do at software engineering internships, with the added benefit that you can show what you did to a potential employer (because it’s open source). You might think, “Hmm, but I don’t know how to get started”. If you are serious about contributing to the project, then one of the maintainers will be happy to help familiarize you with the codebase, and they may be willing to meet with you on a weekly or biweekly basis. Get started by reading the code from the user entry points (e.g. a user-facing API or user interface), chime in with small suggestions on pull request discussions, and look for a small defect to fix (often they are tagged with “good first bug” or similar). To get the full experience, you will want to set yourself a schedule, and spend 10–40 hours a week on it.
- Learn to do something new. Complete an online certificate. Compete in Kaggle competitions. Create a Linux kernel module. Write an LLVM pass. Write an application that uses Boost. Implement several chapters’ worth of algorithms from Cormen/Leiserson/Rivest/Stein, in multiple programming languages. Use the Cloud Education credits from AWS and Google Cloud: build the same application using a monolithic and a microservice architecture; support a REST API and a GraphQL API routed to the same backend.
- Help others. Try to get the highest reputation you can on Stack Overflow. Pick a few popular topics, study them, build relevant software, and then start sharing your expertise. You’ll be amazed at how much this helps you learn to communicate effectively with others, and again, you’ll have a neat experience to share in your next interview.
- Engineer, don’t hack. For any software that you develop this summer, follow an engineering process. Work in iterations. Define your requirements. Create a design on paper and then in a UML tool. Prototype in Python. Track changes with Git. Keep your code in GitHub, using issues, pull requests, and a CI. Follow test-driven development. Use standard frameworks like React or Electron. Document your code. If you create a substantial application that demonstrates engineering skill, guess what — you’ve got a great project to talk about in your next interview.
I’m sorry you didn’t get the internship you were hoping for. But I hope that these ideas help you use your time well.
Do you have any other suggestions for future software engineers in spending a summer wisely? Please share in the comments!