oh, the places you’ll go (reprise) by Cami M. '23
my first ever technical interview
(This is part 2 of my oh, the places you’ll go blogpost because they really were all written in one document but it didn’t make sense for them to be in the same post since they had different tones kind of so…here we are).
This past January, I learned how to code (again). On a whim, I decided to take 6.145 because I started to entertain the idea of being a computer science major again. Why? Well, I slightly blame the atmosphere of MIT — a good majority of my friends are CS majors and always seeing them beeping and booping away made me realize I should probably learn how to also beep boop. Regardless, I suffered through 6.145, with a lot of tears and a lot of late nights and a lot of meeting friends on Stud2 (the floor with the food court) to help fix my broken code.
In the spring, I learned what math was for computer scientists, as 6.042 brought me through graphs and pigeonhole principles. I secretly really loved 6.042, despite doing poorly in the class. It’s ironic, because I actually had a C in discrete math when I took it in high school and I absolutely hated it. Seems like we have a running trend here.
6.08 showed me that I could do this whole compsci thing, futzing around with circuits and wiring and making screens light up like magic. Then I started to realize that I really do, in fact, like this whole computer science thing, even if it makes me cry, and I started frantically applying to internships left and right, hoping to get something.
And by magic, and by sheer luck, I managed to nab an internship at Microsoft as a New Technologist, where my confidence in my abilities as a CS person skyrocketed. I was an active participant in team meetings and calls, I ideated and came up with my own vision for an app, I did practice technical interviews (though I didn’t get any of the questions right…), I networked and met countless software engineers and product managers who gave me insight on their life as a tech person. And I started thinking more and more that this was my place, this is a place I could see myself.
I try to be a proper computer science major.
And that brings us to the very recent past, where I decided to take 6.009, MIT’s Fundamentals of Programming class (a class that is notoriously very difficult but very rewarding). And I was applying to internships left and right, while balancing career fairs and practice interviews and LeetCode and HackerRank. My daily week essentially looked like grinding 009 for two or three days, then using my spare time to apply to internships, and then using that spare time to practice coding.
I did well at my past internship, so Microsoft allowed me to apply for their Explore program and immediately get sent to the final round, rather than having to pass the resume review, phone screening, and secondary interview stage. When I got this news, anxiety started to settle in. Heavily. I constantly question my abilities as a CS person. I don’t come up with the cleanest code sometimes, or it takes me a while to get things right. I don’t really understand concepts right away, and usually I have to have someone draw it in front of me in order for me to fully understand what they’re talking about. I don’t know what a stack is…or a heap…or any of those data structures, really. And honestly, I’m just trying my best.
Hesitantly, I asked my boyfriend (who has been coding for much, much, much longer than I have) to help me with my Microsoft interview. At first, I didn’t want to tell anyone about it. I didn’t want to build expectations. I’m scared of telling people when I get things or do things because I’m scared they’ll expect me to get it, and then I disappoint them when I don’t. This situation was even more stressful because I never ask my boyfriend for help when it comes to coding. This is one of my most toxic traits, I’d say, because I really hate embarrassing myself in front of him. I get scared when I’m wrong, especially when it comes to coding, and I hate looking stupid. There were times where he attempted to help me with my other 009 labs and I just burst into tears, crying because I just felt like a wreck and I felt incredibly stupid because he commented on a piece of my code that was messy or something else. And I would often times blame it on him, for his teaching style being too blunt or coarse (which it is), but I deserve to take some of that blame for being far too defensive.
For the next two weeks, I attempted to do HackerRank questions, opting to do easy ones since it was Explore after all and I was hoping they wouldn’t be too intense on me. Every so often, Raymond would check in on me, asking if I’ve practiced yet, or when the interview was.
I started to get little bunches in my stomach because every new day meant one day closer to this interview. While all of this was happening, Raymond was on his own internship search, too. And he was doing everything (at least to me) well. He didn’t even flinch when he had his second round technical, passing test cases and such with ease.
And I couldn’t help but start to think that maybe I’m not fit for this area, that maybe this is a realm I shouldn’t even be touching. For those of you who have read my previous blogs, you might recall me having extreme sickness and body rashes and in and out of MIT medical visits and so on. All of that was induced by the stress of this one interview. In fact, the week of the interview, I begged S Cubed to let me take a week off from school, mainly so I could focus on rebuilding my health again. (I am back to normal! Thankfully.)
I have my first ever technical interview.
Then, Tuesday came. I woke up, went to my favorite class of the semester (8.021…a physics class..y’all…A PHYSICS CLASS!!!), took some notes, and then waited. Agonizingly.
I set up my work area, adjusting the blinds so just enough sunlight would sheen on my face and make it look pretty and good, but not enough so that it would make it hard to code and see my screen. I put my hair in a Professional TM bun and slapped on a dress (that apparently made me look like a Star Wars character, according to Raymond) and proceeded to hype myself up in the mirror.
My stomach was quite literally jumping as soon as I entered the kick-off, a 30 minute call with the campus recruiters and other interviewees to describe the logistics of the day. Had we not been a pandemic, I would’ve been flown out to the Redmond Microsoft campus to interview and be accommodated nicely, but unfortunately, we are in a pandemic.
I would have two interviews this day, each about 45 minutes each, with fifteen minute breaks in between each interview. After my second interview concludes, I’m free to leave.
It seemed simple enough.
I anxiously gripped my Apple pencil in my hand and attempted to remember basic coding things, but instead of revision, I found myself writing positive messages and encouragement on my Notability document. Little things like “You will be okay. Stay calm. Breathe. You know what you are doing. You have prepared for this.” These mantras littered my paper, and they somehow made me feel a little better.
By the time 3:55 hit, I was already in the call’s waiting room. I figured it was best to show up five minutes early. At 4 o’clock, I was let into the call. I was told the interview would be a mix of behavioral, project based, and technical questions. We started off by introducing ourselves to each other. Then, he asked a lot about my previous internship at Microsoft. There, I talked excitedly about my projects. I was brutally honest, too, explaining how at first I wasn’t all too fond of the internship, but once I got to know my teammates and had better communication, I ended up really, really loving it. I found myself slowly getting more and more relaxed in my interview. I’ll admit that I think I do fairly decently in behavioral interviews. I like to think of myself as somewhat charismatic, albeit a little goofy and messy at times, but overall, I think I carry myself well. Regardless, I was really happy with how it was going so far.
He then asked me how long I’ve been coding for and if I’ve done this sort of thing before, and I said that I started learning this past January and this was my first technical interview. And then he offered something I did not expect: he said I could skip the technical question and opt for a design question instead. Here is when I started doing a lot of rapid fire thinking. For the past two weeks, I had been prepping for a coding question, but I didn’t quite know if I would be able to solve it. But design questions are pretty difficult as well and I didn’t really prepare for those.
So I responded, saying I’d be happy to do the technical since I wanted to get more experience and I’d try my best.
Question: Given a sentence (in the form of a string), return the words in this sentence in reverse order.
Luckily, I was able to complete the question, save for a few syntax errors and silly mess-ups.
I started off by talking about how every word in the sentence should be separated by the ‘ ‘ character. So, we’re able to parse out what is a word if we just slice the string every time we encounter a space. Then, we can add each word to a list, and then iterate over the list in reverse, returning each word.
I made sure to remember all of the technical interview tips my mentor had given me over the summer: talk often and explain everything, think of all the possible test cases and edge cases, ask clarifying questions and don’t dive into things right away.
I remember I stupidly asked “Did I do it correctly?” to which my interviewer chuckled and said “Yes, you did it great!”
(I would later find out that I did not do it super great. I realized I could’ve just done list comprehension for a one line solution. Oops. But who cares?)
We then spent the remaining time talking about life at Microsoft, his team, Microsoft work culture, and work from home amidst a pandemic.
I then had my fifteen minute break, to where I giddily exclaimed to my roommates that I did well in my first interview, grabbed some panic wheat thins, and then headed back in my room for my second interview.
My second interview was a little more intimidating than the first, since my interviewer wasn’t as open or as talkative as my previous one. He asked me a lot of interesting questions, mainly pulling them from my resume. He noted the fact that I was an avid media person and blogger (lol hello!) and then asked what in particular about computer science excited me.
I told him that I didn’t…well…really know where I wanted to go into computer science, but I really loved product design, app dev, and web dev. Embarrassingly, I admitted that I learned to code from Tumblr since I would edit my theme in HTML and add cute little colors or transition effects, to which he responded with a very humble “Oh gee thanks, I used to work for Tumblr so that makes me happy.” (This was a happy coincidence!) I then talked a lot more about the shortcomings I noticed in media and CS.
A lot of times, I think people forget to make technology accessible, whether it be not having accommodating color palettes for color blindness, or text to speech / alt text for readers, or just making confusing and difficult user interfaces so people can’t really understand your project. Sometimes computer scientists get a little too wrapped up in their world of coding and mumbo jumbo computer science jargon that they forget that regular normal people are supposed to know how to use things. And that’s why I wanted to go into CS. I wanted to be in CS to remind engineers of why we build the projects we build and how technology is useless if it is not accessible.
My interviewer was a pretty insightful guy, especially seeing as he worked on the UI and front-end part for his team, so it was really nice to hear about how he is currently trying to optimize run times and whatnot for his programs so it’s easier for people to use.
Then, we reached the coding bit.
Question: Given a string, return True if the parentheses in the string are properly open and closed. Return false if not.
‘(()’ –> False
‘()’ –> True
‘)))))’ –> False
The good news: I recognized the question. The bad news: I had seen a harder version of this question on LeetCode and I remember I failed / didn’t find the solution.
I struggled a bit in the beginning, stupidly telling my interviewer that I had attempted a similar question in the past, but didn’t know how to do it. Thankfully, he said that that was okay and he’d offer some hints if I got stuck. I babbled on for a couple of seconds, explaining my initial thoughts where I thought we should have some flag that was a boolean that was opened every time a parentheses was opened and closed whenever it was closed, before backtracking and explaining why my initial thoughts wouldn’t work (seems like a lot of flags to manage). He told me something that nudged me in the right direction, where he said the flag idea was along the right track, but I probably shouldn’t be tracking a boolean. I then realized I could instead keep a counter that adds one when a parentheses is opened (counter += 1) and subtracts one when a parentheses is closed (counter -= 1) and if the counter at the end is not equal to zero, then it hasn’t been properly closed.
He then said that my solution was correct (yay!) and then asked how I would refactor my code if I had all the different kinds of brackets I had to keep track of “({[” and what data structure I’d use. I didn’t get this bit right, seeing as I haven’t studied any data structures yet and didn’t really know what to do here, but he kindly explained to me that you’d use a stack here. We then spent the rest of the time talking about his time at Microsoft, as well as what I wrote about as a blogger!
Then it was done. The recruiters told me I should get a response within two weeks, so all I had left to do was wait.
Overall, I felt pretty good about my interviews. I was pleased with how I did and was really, really nervous to get the decisions.
two days later
Two days later, I get an email from a recruiter from Disney, who saw my resume and wanted to interview with me. I then also get an email from a recruiter at EA who also wants to interview with me because they saw my resume.
And then I refresh my email and I have an offer from Microsoft, telling me I’ve been accepted to Microsoft Explore.
And I burst into tears and I’m shaking and I text my mom and I tell my roommates and then I go on the bed and cry because I did it.
It’s difficult to put into words how strange my relationship is with computer science. There are moments where I love writing out the solutions and thinking of how to approach a problem and get childishly giddy when I figure it out. Then there are the moments where I’m staring at the ceiling and crying and banging my fists against the desk because my code won’t run or the runtime is far too long and I don’t know how to fix it and people try to explain it to me but I’m too stupid to understand. And then there are these kinds of moments, where after all of that, I still manage to pull through.
In this moment, I am overwhelmed and relieved and overcome with joy because to me, this is a sign that I am good enough. That my hard work has paid off and that with enough effort and time I can get these coveted positions. I’ve struggled a lot with computer science, especially because I’d convinced myself that I wasn’t as good as other people since I had started so late. I saw my peers and my friends ace coding assessments with ease, get big time SWE internships as freshmen, and clear classes like 009 and 006 without even blinking. But this day and this moment swept all of that aside and showed me that I was competent.
I know a lot of this is in my head. That I am not competing with anyone at all and that the performance of other people does not dictate my value or my worth, but regardless, this was a victory in my journey and I am proud of myself. Slowly, but surely, I’m gaining confidence in my abilities and I’m just so amazed to see my personal and technical growth throughout these past ten months.
I guess I wanted to write this blog because I wanted to say that it doesn’t really matter when you start or when you develop a passion for something, as long as you pursue it and work hard for it? Or something along the lines of that. I’m writing this also to mark the occasion, so I can look back on this blog as a senior at MIT and remember the time I had my first technical interview and have a recap of my CS journey so far.
I hope to do more blog posts on the cool classes I’m taking (since I mentioned them!!) but I really just wanted to share this important moment with you all :)