Matias Lavista, Amazon Software Development Engineer Intern: “Going through the internship process will make you a better candidate.”

The University of Chicago Masters Program in Computer Science students push boundaries and innovate across many facets of industry. Whether it’s developing seamless UX interfaces, engineering software at Fortune 500 companies, working in big data or keeping networks secure, our students use their applied-skills education from the MPCS to problem-solve, create, and elevate the computer science field. Learn from their stories and discover how a CS background can prepare you for cutting-edge internships.

Matias Lavista University of Chicago MPCS

Matias Lavista will be graduating from the MPCS in 2019. He explains how the MPCS courses helped him day-to-day at his software development engineering internship at Amazon, what it was like to audit PhD courses, and gives advice to those who may be thinking about applying for an internship.

Can you tell us a bit about the internship process?

The moment I arrived at the MPCS I started to look for and apply to internships. I knew the process started in the fall, and top companies would be closing out the positions by the end of the year. A couple of the top companies came to campus, but all of them have applications open online that are easy to find. I applied at Amazon early November, and got my first online assessment between Christmas and New Year. I was in Patagonia with my family, trying to find a decent internet connection in the mountains, so be aware.

Prior to arriving at the MPCS I had spent a couple months going through a few resources: interviewcake.com, pramp.com, Cracking the Coding Interview problems. I recommend solving problems like these by timing yourself and coding solutions to the point they compile. Interviewers want to see code that compiles, and sometimes getting the final details right can make you lose your confidence. 

Can you walk us through your day at your internship? What might a great day look like for you?

I arrive at the office around 8:30 a.m. and start cleaning up part of the code I worked on last night. I then get my questions prepared for when the team meets for Scrum, where I report my progress to my teammates and ask any relevant questions. I go to lunch around noon with my team or other interns. Then I spend the afternoon coding, testing, and deploying my feature. 

I’m given a lot of autonomy and had to design my feature and get it approved by the team, knowing that I’m designing to put in front of an AWS customer. I find it unheard of for an Intern to have that responsibility, and I think it’s great. I also have weekly meetings with my manager, and (practically) daily meetings with my mentor.

Matias Lavista University of Chicago MPCS

Which programming languages and other technologies do you find yourself using regularly? Were these skills you learned in the MPCS?

My project requires coding in C, around a web server, which I love. We also use Java for the customer admin pages, and Python generally for our test harness. Debugging with GDB, manipulating Makefile to link/compile new packages, deploying and understanding web request processing, are all things that are useful in my day. 

I took Advanced Programming with Andrew Siegel, and even though I had experience in C, it was super useful to understand the different versions of C (when was // made available; declaring variables in a “for loop”). It provided good practice for manipulating data structures in C. Compilers with Hal Finkel was also incredibly useful for understanding our systems in general.

Cloud Computing helped me understand the size and problems of these distributed systems, as well as the AWS jargon.

What was your reason for applying to the MPCS? Did you have prior experience in computer science/a computer science background? 

I did have prior experience as a developer, but had gotten away from it the last 4-5 years. I had been working in Product Management and Tech Operations in a managerial role at Form.com. 

During that amazing experience, I noticed that I wanted to have a deeper technical knowledge so I could help brainstorm, solve problems, and make strategic decisions as to the type of solutions we were providing customers. 

The MPCS has the advantage of accepting applicants from a wide variety of backgrounds while having the resources of an elite institution, including TTIC and The College classes. 

Would you recommend the MPCS to others? If so, why?

I would recommend the MPCS for people who want to get exposed to a deeper technical understanding of computer science and are willing to put in the work. UChicago will make you work for your grades and your degree. Taking the time to understand how systems work doesn’t only prepare you for a job as a developer – it will differentiate a candidate in almost any job today, and in the future. 

How has your MPCS education helped you achieve your professional goals?

It gave me the opportunity to sit down and study things I’d been wanting to study for a long time. It provided me with my classmates, a group of similar-minded people who generally have the same interests and goals as myself. 

UChicago has a close relationship with Argonne, and many of those researchers teach at the MPCS too. I was able to do an internship at Argonne with Paul Romano last quarter, which was great and gave me extra hands-on practice. 

The MPCS allowed me to choose three classes I was interested in each quarter. When I was looking for classes beyond the Masters curriculum, I was able to audit PhD classes like “Advanced OS,” where we read papers from the history of operating systems. 

Two other classes that I’ll mention are Advanced C++ with Mike Spertus, which gives you a C++ committee member’s perspective on why the language is so great, and Algorithms with Avrim Blum at TTIC (a beautiful class). 

What is a piece of advice you’d give someone considering applying to the MPCS?

Try to make sure you know what you want out of the program before applying. I think I was lucky that I had done several CS classes while working and knew precisely what I wanted to take (Compilers, Networking, and OS).

Four quarters goes by very fast. I was able to take classes at TTIC, audit UChicago PhD classes, and even take advanced classes with the undergraduates in the College, because I knew what I wanted. To do something similar, you need to be organized, come prepared, and speak to the right people. 

Do you have any internship advice for someone who may be starting to apply?

For tech roles, begin early (after the first month of the Fall quarter). Make sure your resume is presentable, and start applying. 

Try to get as many interviews as you can: practicing will make you better and reduce your nerves and anxiety. Use online resources (pramp.com in particular was super useful), and code your practice solutions until they compile as this will give you extra confidence.

Don’t get discouraged if you absolutely bomb an interview – this is a great learning experience and will help make sure you are better prepared for those types of questions in the future. If your ultimate goal is to become a software developer, going through the internship process – even if you don’t get the results you want – will make you a better candidate when you apply for full-time positions. If it goes well, excellent; if not, internships are just practice for the real thing.