zero. once again you can determine how busy i am by the rate of my blog posts. blogging right now feels to me like a sponge—it soaks up whatever time i have left, because it can just take an arbitrary amount of attention. but when i don’t have that time left, then oops no blog post. and that’s why i have not been posting at my weekly rate asdfgj. anyway, regularly scheduled programming.
one. as i alluded to in my last post, i was doing the internship application grind a few weeks ago. i’ve been doing the grind since my first year here, of course, and i’ve talked about that a little. but this year i took it the most seriously as i possibly could, because this is basically my last summer before i graduate, and hence the last “real” chance i get at doing an internship.
the whole process of internship app season feels like a rehash of college admissions. it’s not like everyone’s talking about it, but it feels like there’s always conversation surrounding it, if you want to look for it. so i wasn’t completely unfamiliar with how that felt like. but there were some differences.
for one, software engineering apps feel very silly. instead of crafting a good application for a dozen or so carefully selected universities, it is instead extracting myself to a list of personal details, becoming the embodiment of my resume, and copy-pasting the same application to hundreds of companies with little variation. they all blur together and start feeling like the same thing.
two. i’ve applied to a lot of places as, nominally, a “front-end engineer”. i don’t know what it means to be a front-end engineer.
i like interfaces, sure. i like designing systems such that they work. but i also like thinking about how things interact with each other. and i know that all of this sounds really vague, but that’s the whole point. i don’t know what i want to do.
before coming to mit, i had absolutely no idea what college would be like. the whole concept of getting to choose your own classes? that was entirely new to me. the whole concept of living with other people in a dorm, the experience of being closely involved with student groups, all those things—all completely unfamiliar. everything that i expected it would be before coming in wasn’t at all what it was actually like.
once again i’m facing that same unknown. what is it like to be a so-called “front-end engineer”? who knows? not me. one of the first things i learned in mit is that identity is so fluid, and labels like “front-end engineer” erode sooner rather than later.
three. rather than college admissions, it might be more apt to compare the recruitment cycle to a dating app. except unlike a dating app, when you get matched, you get sent typically some sort of algorithms question on a site like hackerrank. i've done so, so many technical screens on hackerrank. it's not even funny. that you have to finish. so that’s, what, an hour or two of your time, times maybe the twenty or so companies that didn’t instantly reject you.
it reminds me of college admissions back in the philippines, where each university has their own college admission test that you have to take. sometimes i wish i can just send the results of one technical screen to another company, but alas, i don’t think that’s happening any time soon.
four. some companies have which is worse than the companies that instantly rejected me, because now i've sunk like, what, an hour or two doing a technical screen for them? after the technical screen. now we’re down to a handful of companies that want to proceed.
at this point it looks different place-to-place. sometimes it consists of a phone screen, where you talk to a recruiter about your experiences and what you’re looking for. sometimes it’s another technical screen, but with an interviewer instead of with a website. the similarity is that this is the first point in the process where you talk to an actual human being.
i’m not the biggest fan of trying to “be professional” when talking to recruiters. definitely, a certain amount of politeness is expected. but i want to be candid. i don’t want to be professional to the point of being someone i don’t want to be, if that makes sense? for example, when people asked me, oh, what are you looking for in an internship? i don’t say something like, i’m looking to expand my horizons or to grow professionally. my first answer is of course, i do <em>elaborate</em> on the answer after i've given it. it's just that i'm not going to pretend i have it all planned out, when i don't.
maybe that made some recruiters less interested in me, and i think that’s okay. i’m not sure of many things, but i’m pretty sure that and yes, that's a reason to be honest in your interviews. being professional is important! but do you really want to do an internship/go to college/work somewhere because you pretended to be someone you aren't? where saying “i’m not sure” is discouraged.
five. i made the final rounds of two companies, which i’ll call acme and widget. both companies called this final around a “remote onsite”, which sounds like an oxymoron. but apparently, as i learned from nisha’s post, the term “onsite” is just used to refer to a final round of interviews in general; usually a series of three-ish interviews ranging from technical to behavioral. such a round of interviews is it's nice and all doing things from the comfort of my room, but onsites sound so cool, though. you get to travel! somewhere! just to do an interview! and they feed you, presumably! sounds exciting. which is why it’s called onsite, but something something pandemic.
i signed ndas before the onsites, and i’m not going to yes, i <em>did</em> read the non-disclosure agreements before signing them. no i <em>don't</em> remember what they say. yes, i <em>can</em> look it up. no, i <em>don't</em> want to. to figure out what i can and can’t say, so i won’t. i thought the onsite for acme went mostly well, except for a small hiccup in the middle, and the onsite for widget went much better. in both onsites i got to talk to an i'm reminded again that i'm incredibly lucky that i'm in mit, and that i can have an instant connection with someone i don't know because we went to the same place together, even years apart. who was currently working there, and it was somewhat nice being able to refer to mit things by name and have someone understand.
six. not all the technicals i received were algorithms and similar coding challenges. i think the most interesting ones i did were the ones i received during these onsites. and, i can’t believe that i’m saying this, but i’m actually glad that i took classes like i've heard 6.009, fundamentals of programming, dubbed as software engineering 101. i've heard 6.031, elements of software construction, dubbed as how not to get fired in industry. later i mention 6.006, introduction to algorithms, dubbed as how to pass the coding interview. , because they were kind of indirectly helpful for those.
because the interesting problems aren’t the kind of algorithms problems that appear in classes like 6.006. they’re more practical, implementation-based ones, similar to those that’d actually appear in practice. concepts like having nice immutable data structures, or writing functional-oriented code crept in my programming.
i used to think that the concept of functional programming, or “pure functions” in general, was an impractical way to write programs. a pure function is a function that always returns the same result, given the same inputs. as opposed to an impure function, which might depend on something random, or might have side effects like taking input or sending emails.
and at first i thought it was ridiculous to not have side effects, because that’s the whole point of programming, right? we write programs to make things happen. but i appreciated the fact that the mindset is to separate the side effects. that way, you have your nice, pure, testable functions on one side. and on the other side, you have the functions that have side effects. and thinking like this felt like a great way to organize code conceptually.
seven. the mindset i was taught about doing internship interviews is that it’s not only a chance for the company to get to know you, but a chance for you to get to know the company. to think of it less as a test, and again the analogy with dating apps… well, i suck at dates.
getting a feel for what a company is like through interviews is like getting to know someone on a first date. or, if you prefer, trying to get to know a college by talking to a single person about their experience studying there. and you have to do it in, what, half an hour?
you can iron out all the surface-level details. what does your company do, exactly? what is a typical day like? what kind of work would i be doing? but when it comes to the factors that’d be more useful in actually deciding where you want to go, it’s harder to get useful answers. what’s the culture like? oh, it’s great. it’s a fun place to work. how would you describe the way people work together? it’s very collaborative. i’ve always felt comfortable asking for help. what do you like about working there? you really get a sense of ownership for what you do.
okay, cool. it sounds like the answers everyone else gives, i guess. which i don’t blame the other person for—it’s hard to give good answers to these questions. heck, i wouldn’t even know how to answer these about mit, while providing information that could be actually helpful.
sometimes i want to ask questions like, well, what is it not like? what made you decide to work here, as opposed to somewhere else? what is it like here compared to the other places you’ve been in? and it feels weird and awkward asking these, because it feels like i’m implicitly asking the other person to put down other places. sigh.
eight. acme and widget both accepted me. acme notified me a few days later, widget notified me the next day. the deadline to accept the offers, as i alluded to last time, was two weeks. and once again, once again, i’m reminded of the college admissions process. it feels like such a brief period of time between your acceptance and when you have to commit. and here, it feels so brief between being given an offer and the deadline for acceptance.
so i talk to more people. the interviews were nice, but they weren’t fully helpful, so maybe talking to people who currently work there would help? so i talked to people who work in acme. i talk to people who work in widget. i try to come up with useful questions, but it’s hard. i don’t have any. i talk to all my friends, i try to come up with reasons for and against, but i end up saying the same things, reciting all the same factors.
with respect to the on-paper details, acme and widget are very similar. both located in sf, both similarly-sized startups. the compensation both companies were offering was also similar. but also like college decisions, the on-paper details feel like for me, of course. it might be much more important for you, if, for example, you're deciding between somewhere near from home and somewhere far.
the differences i feel about acme and widget are hard to articulate. in my mind, there are two salient factors. the first is that acme has people who are “more like me”, whatever that means, in the sense that they’d probably have a closer background to mine. i got the impression, one way or another, that the people in acme leaned nerdier than people in widget.
the second is that widget feels more invested in recruiting me. again, i don’t know how i got this impression, or what that means in practice. but i don’t know, maybe it’s the fact that they got to me sooner, that the people i talked to felt more excited about it, or some other factor like that.
that’s pretty much about it. i don’t think i can articulate any other big differences between acme and widget. they exist, definitely, but not in a way that i can say.
nine. of course, both of these differences are ridiculous. let me draw an analogy to when i decided between mit and another university, which i honestly should've picked a better placeholder name.
mit had more people i knew, rather than u, and the people at mit felt “more like me”, whatever that means. now, i ended up being somewhat wrong about this. the people i felt were “like me” ended up not being the people i spent time with. i met lots and lots of other people that weren’t “like me”, and i enjoyed spending time with them, and i’m great friends with many of them.
and with respect to recruitment, well. i felt that u was more invested into recruiting me, and that u liked me more than mit did. and that’s not entirely true, because institutions don’t have feelings. the point was that the people i talked to, the recruiters i talked to, liked me. and it’s probably not going to be the case that i work with them closely for the actual internship, right?
and the similarities of these two decisions—mit or u, acme or widget—go even further than that. mit and u, i knew, both invested into recruiting me, and spent effort in getting me to commit. i knew that whichever one i picked, i would feel bad because the other one’s efforts would’ve gone to waste. and again, i feel the same way for both acme and widget. hiring interns feels like it’d be a really expensive process. it’d make me feel bad to have wasted the time of the other company.
ten. from the post i linked about deciding between mit and u:
I was avoiding answering this question for the longest time. I kept thinking that the realization would come to me like a singing choir of angels when you meet “the one”. That I somehow would just know what I wanted once I’ve seen it. But here I was: all the information was in front of me and the decision never lay with the college, it lay with me.
eleven. a pure function is a function that always returns the same result, given the same input. if you have a function, and given one kind of input it responds in one way, and given the same input it responds in a different way, then the function can’t be a pure function.
and that’s not always a bad thing. that just means the function has side effects. that just means the function is mutable, that the function is changing something about its state, or the outside world. consistency is useful, and pure functions are great, but if all we had are pure functions we would never get any programming done.
if you’re faced with a decision between a and b, and pick a, and you’re then faced with the same decision to pick a and b, and pick b, that’s not a bad thing. it might be inconsistent, but that’s not a bad thing. that just means your decisions aren’t pure functions. because even if the context of the decision, even if the entire world was exactly the same, you are allowed to make different decisions.
you can’t make the same decision twice, for it’s not the same decision and it’s not the same you.
twelve. with the analogy i’ve drawn between acme and mit, and widget and u, you’d think that i’d like acme more than widget. the conclusion of the post was that i followed what my gut decided, overriding pretty much all the other considerations. that i knew, inside me, that there was something about mit that made me decide to go there instead of to go to u.
and if i were to guess, say, six months ago, as to which one i’d pick, given just this information—i would’ve guessed i’d pick acme, rather than widget. or at least, i would’ve guessed that my gut feeling was closer to acme, rather than widget.
but that’s not true. my gut wants me to accept widget’s offer, and not acme.
and when i think about it, and i ask myself, why, i get made-up reasons. the same kind of made-up reasons about it being better for me, about how it’ll be a newer experience, about how i liked the kind of work there more, about how the compensation is slightly better, whatever.
but none of those are the real reason why. the real reason is that my gut feeling likes widget more than acme, and none of the reasons i just mentioned are the reason why my gut feels like this. i don’t know why my gut feels like this. but it’s what i feel. it’s not a quick emotional impulse, and i know it isn’t, because it was a gut feeling that slowly mounted over time, the more and more i thought about it. it’s what feels right. i don’t know why it feels right. but it does. and sometimes you just gotta trust your gut, even if you don’t know why.
i’ve regretted making decisions that go against my gut feeling, but i’ve never regretted decisions i’ve made based on what felt right.
thirteen. such is the nature of choice. it’s decisions like these, i guess—where to go to college, where to do an internship, where to move, where to work, wherever—that there are no right answers, only different ones.
Here’s another thing I told Sam: these kinds of decisions about your future are rarely correct or incorrect, just more or less well-made.
in the end, i feel a reassuring stillness in the fact that i recognize that being able to say this, with some confidence knowing that this is going to be true, is definitely a sign of privilege. undergrad is four years, but an internship is one summer. no matter where i end up, i know i’ll be fine.
- typically some sort of algorithms question on a site like hackerrank. i've done so, so many technical screens on hackerrank. it's not even funny. back to text ↑
- which is worse than the companies that instantly rejected me, because now i've sunk like, what, an hour or two doing a technical screen for them? back to text ↑
- of course, i do elaborate on the answer after i've given it. it's just that i'm not going to pretend i have it all planned out, when i don't. back to text ↑
- and yes, that's a reason to be honest in your interviews. being professional is important! but do you really want to do an internship/go to college/work somewhere because you pretended to be someone you aren't? back to text ↑
- it's nice and all doing things from the comfort of my room, but onsites sound so cool, though. you get to travel! somewhere! just to do an interview! and they feed you, presumably! sounds exciting. back to text ↑
- yes, i did read the non-disclosure agreements before signing them. no i don't remember what they say. yes, i can look it up. no, i don't want to. back to text ↑
- i'm reminded again that i'm incredibly lucky that i'm in mit, and that i can have an instant connection with someone i don't know because we went to the same place together, even years apart. back to text ↑
- i've heard 6.009, fundamentals of programming, dubbed as software engineering 101. i've heard 6.031, elements of software construction, dubbed as how not to get fired in industry. later i mention 6.006, introduction to algorithms, dubbed as how to pass the coding interview. back to text ↑
- again the analogy with dating apps… back to text ↑
- for me, of course. it might be much more important for you, if, for example, you're deciding between somewhere near from home and somewhere far. back to text ↑
- i honestly should've picked a better placeholder name. back to text ↑
- i recognize that being able to say this, with some confidence knowing that this is going to be true, is definitely a sign of privilege. back to text ↑