When I first enrolled in Oregon State’s computer science program, I wasn’t planning on leaving my career as an educator to become a software developer. I wanted to teach computer science and programming, and so a formal degree in computer science seemed like the best (and only) way to prepare myself.
Over the summer, I set up an informational interview with a computer science teacher in Portland. He shared a lot of valuable information about education, studying computer science, and the technology industry. One of his main recommendations was that if I want to teach computer science, then I should know what it’s like to work as a developer. That’s what students will want to know about, and so I’d be doing them a disservice by not having that experience myself. Fair enough. So I started to look for internships.
I started my internship search on websites like Glassdoor, Indeed, LinkedIn, and Google Jobs. This gave me a sense for which companies were doing things I found interesting and which offered internships. Once a company was on my radar, I’d check their job boards regularly so that I could apply as soon as they were posted. I felt like the sooner I submitted an application, the better.
The companies and organizations I planned on submitting applications too basically fit into two categories: “a man can dream” internships and “I might actually be competitive for this” internships.
A Man Can Dream
- Jet Propulsion Laboratory
Might Actually Be Competitive
- Rohde & Schwarz
- Reservoir Labs
- Pacific Northwest National Laboratory
- Tokyo Electron
Some of these companies have a formal intern program where they hire a group of interns all at once (Google, Amazon, Insitu, etc.) for a specific period of time, while others appear to hire individual interns for individual projects (Intel, Galois, NASA, etc.).
I only ended up applying to some of these companies since I received an internship offer in mid-December. More on that below.
Resumes and Cover Letters
All of the applications required a resume, so my first order of business was creating and polishing my resume. It’d been a few years since I’d updated my resume, so I decided to start from scratch. I started with the two-column Deedy Resume template, but I never felt great about the format and had heard that resume-scanning software has a hard time with the two-column format, so I kept looking for a better template.
After a while, I stumbled on Todd C. Miller’s LaTeX resume template, which he’d adapted from someone else, who’d adapted it from someone else, and so on. I made some minor formatting changes, filled it with my stuff, et voilà. Here’s a PDF version of the final result. I love that it has that indescribable Tex look.
Just like the Constitution, a resume is very much a living document. All throughout my internship search I was refining it and tailoring it to the position I was applying for. And I put my resume in front of anyone who would give me feedback on it, including instructors at Oregon State, fellow students (thanks, Erica!), and people I know who work in the tech industry. A good way to know that your resume is getting dialed is if the only advice you get is conflicting: “add your GPA,” “leave off your GPA,” “put education first,” “put work experience first,” etc. This shows that you’ve gotten the objective stuff right and are just down to the (less-important) details.
Here are a few decisions I made regarding my resume.
Education first: It’s the clearest sign that I’m qualified for an internship, and the GPA shows that I’ve done well in my courses.
Previous degree: The person who ended up offering me an internship was curious about my background in anthropology and sociology and why I’d become interested in computer science. I think my background in the social sciences strengthened my applications, but if nothing else it made for a good conversation starter.
Previous work experience: As with listing my degree in sociology and anthropology, I think listing my previous work experience had a positive impact on my applications. And as one of the instructors who reviewed my resume said, “It shows that people have given you money to do things.”
One thing that helped me format and tailor my resume was ShareLatex. It’s a website for creating and exporting LaTeX documents. When I wanted to hide something for a particular application, I could just comment it out in LaTeX, and then add it back later. This allowed me to keep a “master” resume and then just comment out the stuff that wasn’t relevant to a particular position.
Some companies I applied to required a cover letter, but most didn’t. Some didn’t accept them at all. Google accepts cover letters, but tactfully tells you that they’re not going to read them.
I always took advantage of the opportunity to submit a cover letter. First, I think that written communication is one of my strengths and I want to show that whenever I can. Second, writing a cover letter forces you to answer the central job application question: “Why me?” If you can’t sell yourself in a cover letter, you’ll have a harder time selling yourself in person and over the phone.
After I had my resume and cover letter dialed and had started submitting applications, I began reading Cracking the Coding Interview and doing programming challenges on LeetCode. I don’t have much to share about either of those resources, except this: focus on one type of problem at a time. In other words, solve a bunch of linked list problems, then solve a bunch of tree problems, and then solve a bunch of search problems, and so on. I found this to be much more effective than changing topics/algorithms/data structures with each question. Oh, and don’t get discouraged. I had a really hard time with my first LeetCode problem. Now that same problem (and others like it) seem trivially easy.
All of my applications resulted in two phone interviews. One of the things I did to prepare for them was create an interview sheet wherein I wrote down the questions I expected to be asked and bullet-point style answers to those questions. Obviously it’s impossible to know which questions you’ll be asked, but it’s a good bet that they’ll want to know a few things:
- Why you want the position.
- What skills and experience you bring to the position.
- How you’ve handled workplace conflict.
So, write these things down and keep them in front of you! You probably won’t need to refer to it, but at least you will have thought them through before hand. I also made sure to write down the questions I wanted to ask.
I figured that there were probably a lot of other people in Oregon State’s computer science program looking for internships, so I started a Slack channel (#internships) devoted to the topic. This became a very valuable resource for me, mostly because of information about how to prepare for internship applications. Everyone’s at a different stage in the process and so everyone always has something to learn and something to share.
I spent some time and energy networking. I say networking, but what I really mean is that I tried to meet and learn from as many people as possible. The aim wasn’t to get referrals. Instead, I wanted to get used to talking to people in the industry, and more importantly, to get used to talking about myself. This experience didn’t lead directly to an internship offer, but it was invaluable in helping me build confidence throughout a journey that’s often the opposite of confidence-inspiring.
The key to this sort of networking, at least for me, is the informational interview. It’s a fancy name for getting coffee and asking questions. It’s always nerve-wracking to ask someone out to coffee, but everyone I asked always seemed happy to meet up and help me out.
I also attended a code retreat (sort of like a hackathon), which I wrote about here. My takeaway from that event was that it’s much harder to write code when other people are looking over your shoulder.
I received bites from three companies: Amazon, Insitu, and Rohde & Schwarz (in that order). These were all cold applications with no connections at the company and no referrals.
As of this writing, I’ve yet to hear back from most of the other companies I applied to. However, I did receive outright rejections from a couple of the internships I applied to at Intel, Google’s internship program, and the internship at Reservoir Labs.
Here’s how each interview process unfolded.
On December 1, 2017, Amazon invited me to start their interview process. It’s broken up into three rounds. The first two rounds are coding challenges and the final round involves actually talking to another human being (I assume this round involves coding, too, but I can’t speak from experience).
The first round consisted of seven debugging questions which I completed in C++ and then a few dozen SAT-style logic questions. There’s not much that can be done to prepare for these questions, I suppose, besides making sure you’re very familiar with basic syntax in the language you’re testing in. In addition, I treated the experience like I was taking a final for a class: quiet house, clear mind, earplugs, etc. I also kept a whiteboard nearby which was very useful for the logic questions.
A couple days after I completed the first round I received an email inviting me to complete the second round of the interview process. But I received another offer from a company that was higher on my list, so I never did.
On December 7, 2017, I received an email from a hiring manager at Insitu inviting me to complete a phone interview. This caught me a bit off-guard because at this point I was getting used to sending out applications and never hearing anything back. But it was a welcome surprise; Insitu was one of the companies I was most interested in interning with. Two reasons: One, they work in hardware (UAVs, specifically) and two, because everything I’d seen online indicated that they had a well-developed and worthwhile internship.
A week later, I spoke on the phone with a (the?) senior software engineering manager at Insitu. He was a bit late calling, which I actually appreciated because it gave me a few more minutes to calm down and collect my thoughts. Even so, the first thing he did was apologize very sincerely about being late and wasting a few minutes of my time. A common courtesy, perhaps, but it spoke volumes to me about him and the company. A prospective intern is pretty low in the pecking order, yet he still seemed to value my time and feelings.
Once we’d gotten to the meat of the interview, we talked about the position and what a potential intern might be doing. Then he asked about my education and work background. After that he asked me a handful of general technical questions. Once he had finished with his questions I had a chance to ask mine. The interview lasted a little over an hour. I felt like I’d done a decent job preparing for and executing the interview, but I had no idea what to expect next.
I sent John a note thanking him for the interview and he responded a day or two later thanking me for applying and talking with him on the phone. Then he said that he’d asked the hiring manager to offer me the position.
Rohde & Schwarz
When I attended Oregon State’s Career Showcase on December 11, I met two engineers from Rohde & Schwarz who build digital oscilloscopes. They were interested in an air quality monitoring project I’d worked on while living overseas (and showed off via a poster at the Showcase) and said they’d follow up about an internship.
Two days later I completed a phone interview with the two representatives, their current intern, and a few other people who they work with. They jumped right into the technical questions, mostly related to general object-oriented knowledge and a few C++ language features. I had warmed up to this type of interview the day before with the Insitu interview, so I didn’t find it too challenging. Then we talked a bit about the position and my background. Not long after the interview finished, I received another call from one of the Rohde & Schwarz representatives inviting me out for an on-site interview at their offices in Beaverton.
The on-site interview wasn’t much of an interview. Instead, they just showed me around their workspaces and equipment and then we went out to lunch. There weren’t any formal interview questions or technical questions. The team at Rohde & Schwarz seemed like really good people and I think I would’ve enjoyed working with them.
Right after I got home, I heard that I’d been offered an internship at Insitu. An offer from Rohde & Schwarz came soon after, but by then I’d already made up my mind.
As I alluded to above, I accepted the internship offer at Insitu. The internship will take place over summer term, from June to September, during which time I won’t take any classes at Oregon State. I’m really, really excited for my internship, and I’m also really, really excited to be done applying for internships. The end.