
[Inverted Tree © 2006, John Opsopaus]
Man, interviews in the Valley have truly gotten fucking awful.There is no other ritual that is as thoroughly dehumanizing, utterly useless, tediously time-consuming, here's-a-banana-dance-monkey-dance freak-show of zero predictive value, as the supreme haze-fest that goes by the name Silicon Valley Casting Couch. And we are all complicit - engineers in startups, big corps, and finally, the candidates themselves who voluntarily subject themselves to this shameful farce.
Back when I was working at Twitter, my boss constantly interviewed at firms outside Twitter. He also encouraged us to interview. His motto was - you never know what's out there. So if you are invited to an interview, take the afternoon off on a Friday and go. You might learn something valuable. So even though I had a really sweet gig at Twitter and had no intention of changing jobs, I would politely answer phone calls of desperate sounding recruiters, and take the Muni to show up at the interview, roughly once every 2 months, on Friday at noon when the drinking starts at Twitter ☺
Know what ? He was absolutely right. Every one of those interviews taught me something truly valuable - mostly that I was one lucky SOB to have a gig at a place like Twitter :) Honestly, most of these other companies were truly dysfunctional on so many levels I could write a whole book....these were companies of all shapes and sizes - Blackrock, Wealthfront, Stocktwits, Premise, OPower, Glassdoor, a bunch of YC companies that shall not be named for fear of perpetual backlash and eternal banishment from the kingdom of HN :) , and a dozen others...
At all these companies, I would be ushered in politely and a C-suite guy would deferentially explain the business problem that was right up my alley. Those days, Scalding was the hottest tool in the toolbox. Everybody had (or thought they had) a Hadoop ETL problem, and Scalding was the key to their problem chest. Scalding is this cute little Scala DSL that was invented at Twitter, and got a lot of traction in the absence of Spark, because it was a rock-solid elegant FP alternative to the ugly (as in ugly-as-Pig :) task of authoring map-reduce jobs. I love Scalding, and take pleasure in subjecting Scalding to perverse computation tasks it is thoroughly unsuited for, like perceptrons & portfolio management :) I also do useful shit with it, for which I got paid, but that stuff is quite boring. So anyways, all these managers wanted me to come on board asap & code Scalding jobs for them. Sure, why not ? Well - wait a minute...first, we want you to interview with the engineering team to see if you'd be a right fit. So that's how it begins.
You are then ushered into a room with the programmer's worst nightmare - a blank whiteboard.
For the next 3 hours, you will be subject to a hostile tete-a-tete by 3 different engineers, or sometimes 6, because SV has this concept of a shadow - this shadow engineer is sort of a trainee-in-the-wings, learning how to poke and prod you - the programming sample that has shown up on the company petri-dish, so tomorrow he could independently interrogate new programmers who dare walk into THE ROOM WITH THE WHITEBOARD, entry to which was forbidden to all except the ones with perfect SAT scores.
The first programmer with/without a shadow walks in. He's quite annoyed, because he was neck deep in jira or git or debugging some hairy stack-trace on eclipse, and he's been unceremoniously yanked off to interview YOU - the new dude, who has no fucking idea how things really work here. Well, he must show YOU your place. You lowly worm, how dare you interrupt the lovely horizontal scroll-through of nested exceptions emerging through the anonymous class OOM-ing inside Spring's MetaFactoryAbstractContainer ? You shall pay. Dearly. Tell me, noob, how the fuck do you invert a binary tree ?
Now, I was never asked that particular question. The Blackrock guy only wanted me to tell him EXACTLY how Java/Scala computes the hashcode of a String.
Now, if you must know, this is how it EXACTLY it computes the damn hashcode -
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
So it exponentiates 31 by one less than the length of the string and multiples that with the first character's ascii, then exponentiates 31 by two less than the length of the string and multiples that with the second character's ascii, and so on and so forth, and sums the whole mess. And I'm supposed to know this.
Now, in his defense, computing the dot product of the string with a random prime vector is a well known Universal Multiplicative Hash Function, but forgive me, father, for I did not pay much attention to this invaluable nugget in my Algorithms 101.
Was it the Wealthfront guy who wanted me to write a unit test for Pascal's triangle ? Or was it an integration test, I forget ? Only he didn't tell me in so many words. He said the first row was a 1, and the second row was a 1,1. The third a 1,2,1 etc. So now write a function that spits out the nth row. Being a math major, I wrote out the recurrence that would generate Pascal's triangle. He now says, ok, how do you unit test this ? Unit what ? You know, how do you test whether the function is coded up correctly? Now, am not what you call a TDD guy - I have written a unit test or two, but it seemed so silly to unit test a perfectly valid math identity, so I innocently asked him if I had gotten the recurrence wrong, and I believe I was a no-hire at that point.
The Glassdoor guy was a former Googler, so he was like - wait a minute I read this really cute puzzle last week and I must ask you this - there are n sailors and m beer bottles and something to do with bottles being passed around and one of the bottles containing a poison and one of the sailors being dishonest and something about identifying that dishonest sailor before you consume the poison and die. I truly wished I had consumed the poison instead of laboring through that mess.
The OPower guy said they had a ton of problems where they will be using Scalding, so I asked him what they are doing in its absence. He said Oh we pojo it. Then he said pojo this and pojo that, and soon I was drowning in pojos, so I asked, Sorry, what exactly is a pojo ? Now, bear in mind I am a Scala programmer and haven't touched Java in ages, and they knew that. Their whole pitch was they wanted to inject some new Scala blood into their tired Java veins, and that's why I interviewed there. So the guy is agape, and says, you don't know what a pojo is ? When was the last time you wrote Java ? I was like, a decade ago, back in Goldman...seems like a lifetime now. So he says, write a map-reduce job in Java on the whiteboard correctly and the job is yours. Now, I tell him, dude, I don't write Java at all - this is a Scala gig & that's why I'm here etc. He says, yeah, ok, but, you did write Java at some point in your life, so think back and write. Now I am like, how the fuck does it go - public static void main open brackets is that square bracket or paren...int argc char star argv no fuck that's C how do you do a char* in Java oh I know argv[], honestly, I've written thousands of lines in Scala and Java's really not my thing, and the whole point of Scalding is to not think so hard and just grab a TypedPipe and compose pipe.map{foo}.reduce{bar}.write{sink}, why would anybody want to map-reduce in Java and at this point, I have lost the job because, the recruiter tells me "you are too passionate about scalding and don't know what a pojo is".
The [redacted] YC startup had a really cool contest to which I submitted a greedy algorithm solution coded up in Scala. I was promptly flown down to Mountain View, wined & dined, and then asked to code something in Ruby. Being completely unfamiliar with the language, I got nowhere. They sent me a polite rejection that said Scala was a non-starter because it was such an ugly language, and everybody in the Valley uses Ruby and Python, because that's what every YC start-up uses. Then that tautological start-up died and its co-founder now hangs around on the Scala stackoverflow channel :)
Ironically, the one place where I was hired with zero interviews was a cozy little outfit on the east coast called GS. So this was way back in the late 1990s, when I was a consultant from Sun Microsystems, showing the folks at GS how to build a trading system inside an applet. The whole premise seems laughably silly, but those were the days when Netscape was one of the largest internet companies out there, and GS wanted their trading applet to run on Netscape Navigator, or Communicator or whatever the hell that particular browser was called. Goldman in those days had a very strong systems presence, for it had poached a bunch of C++ compiler guys from Bell Labs. These were strong theoreticians, one of whom wrote his own "trading language", a sort of C++ DSL which would spit out dags as output. Now, there was a markup language called "HTML" that these guys knew nothing about. Matter of fact, they knew practically nothing about Java or applets, because trading systems then were proprietary software distributed on floppies and CD-ROMs. The internet was too new, and nobody thought you could trade equities over the internet inside an applet. So I took this directed acyclic graph that the C++ DSL produced, and wrote a straightforward recursive descent parser in Java that converted the dag to a nice looking tree in HTML. I then sent that chap an email with a link. When he clicked on that link, his Netscape browser window opened and showed him his dag in a panel. Straightforward html shit. That chap went gaga. He was an MD and had great clout, so he calls up Sun Microsystems and says, we have hired your consultant! He is now going to work for us! Now, Sun doesn't like poaching, but its GS, so the legal folks on both ends got involved & sorted it out over the weekend. Next Monday, I was no more a consultant. I began working at GS as a regular Goldman employee. With zero interviews. All because I could parse a goddamn binary tree.
Man, interviews in the Valley have truly gotten fucking awful.There is no other ritual that is as thoroughly dehumanizing, utterly useless, tediously time-consuming, here's-a-banana-dance-monkey-dance freak-show of zero predictive value, as the supreme haze-fest that goes by the name Silicon Valley Casting Couch. And we are all complicit - engineers in startups, big corps, and finally, the candidates themselves who voluntarily subject themselves to this shameful farce.
Back when I was working at Twitter, my boss constantly interviewed at firms outside Twitter. He also encouraged us to interview. His motto was - you never know what's out there. So if you are invited to an interview, take the afternoon off on a Friday and go. You might learn something valuable. So even though I had a really sweet gig at Twitter and had no intention of changing jobs, I would politely answer phone calls of desperate sounding recruiters, and take the Muni to show up at the interview, roughly once every 2 months, on Friday at noon when the drinking starts at Twitter ☺
Know what ? He was absolutely right. Every one of those interviews taught me something truly valuable - mostly that I was one lucky SOB to have a gig at a place like Twitter :) Honestly, most of these other companies were truly dysfunctional on so many levels I could write a whole book....these were companies of all shapes and sizes - Blackrock, Wealthfront, Stocktwits, Premise, OPower, Glassdoor, a bunch of YC companies that shall not be named for fear of perpetual backlash and eternal banishment from the kingdom of HN :) , and a dozen others...
At all these companies, I would be ushered in politely and a C-suite guy would deferentially explain the business problem that was right up my alley. Those days, Scalding was the hottest tool in the toolbox. Everybody had (or thought they had) a Hadoop ETL problem, and Scalding was the key to their problem chest. Scalding is this cute little Scala DSL that was invented at Twitter, and got a lot of traction in the absence of Spark, because it was a rock-solid elegant FP alternative to the ugly (as in ugly-as-Pig :) task of authoring map-reduce jobs. I love Scalding, and take pleasure in subjecting Scalding to perverse computation tasks it is thoroughly unsuited for, like perceptrons & portfolio management :) I also do useful shit with it, for which I got paid, but that stuff is quite boring. So anyways, all these managers wanted me to come on board asap & code Scalding jobs for them. Sure, why not ? Well - wait a minute...first, we want you to interview with the engineering team to see if you'd be a right fit. So that's how it begins.
You are then ushered into a room with the programmer's worst nightmare - a blank whiteboard.
For the next 3 hours, you will be subject to a hostile tete-a-tete by 3 different engineers, or sometimes 6, because SV has this concept of a shadow - this shadow engineer is sort of a trainee-in-the-wings, learning how to poke and prod you - the programming sample that has shown up on the company petri-dish, so tomorrow he could independently interrogate new programmers who dare walk into THE ROOM WITH THE WHITEBOARD, entry to which was forbidden to all except the ones with perfect SAT scores.
The first programmer with/without a shadow walks in. He's quite annoyed, because he was neck deep in jira or git or debugging some hairy stack-trace on eclipse, and he's been unceremoniously yanked off to interview YOU - the new dude, who has no fucking idea how things really work here. Well, he must show YOU your place. You lowly worm, how dare you interrupt the lovely horizontal scroll-through of nested exceptions emerging through the anonymous class OOM-ing inside Spring's MetaFactoryAbstractContainer ? You shall pay. Dearly. Tell me, noob, how the fuck do you invert a binary tree ?
Now, I was never asked that particular question. The Blackrock guy only wanted me to tell him EXACTLY how Java/Scala computes the hashcode of a String.
Now, if you must know, this is how it EXACTLY it computes the damn hashcode -
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
So it exponentiates 31 by one less than the length of the string and multiples that with the first character's ascii, then exponentiates 31 by two less than the length of the string and multiples that with the second character's ascii, and so on and so forth, and sums the whole mess. And I'm supposed to know this.
Now, in his defense, computing the dot product of the string with a random prime vector is a well known Universal Multiplicative Hash Function, but forgive me, father, for I did not pay much attention to this invaluable nugget in my Algorithms 101.
Was it the Wealthfront guy who wanted me to write a unit test for Pascal's triangle ? Or was it an integration test, I forget ? Only he didn't tell me in so many words. He said the first row was a 1, and the second row was a 1,1. The third a 1,2,1 etc. So now write a function that spits out the nth row. Being a math major, I wrote out the recurrence that would generate Pascal's triangle. He now says, ok, how do you unit test this ? Unit what ? You know, how do you test whether the function is coded up correctly? Now, am not what you call a TDD guy - I have written a unit test or two, but it seemed so silly to unit test a perfectly valid math identity, so I innocently asked him if I had gotten the recurrence wrong, and I believe I was a no-hire at that point.
The Glassdoor guy was a former Googler, so he was like - wait a minute I read this really cute puzzle last week and I must ask you this - there are n sailors and m beer bottles and something to do with bottles being passed around and one of the bottles containing a poison and one of the sailors being dishonest and something about identifying that dishonest sailor before you consume the poison and die. I truly wished I had consumed the poison instead of laboring through that mess.
The OPower guy said they had a ton of problems where they will be using Scalding, so I asked him what they are doing in its absence. He said Oh we pojo it. Then he said pojo this and pojo that, and soon I was drowning in pojos, so I asked, Sorry, what exactly is a pojo ? Now, bear in mind I am a Scala programmer and haven't touched Java in ages, and they knew that. Their whole pitch was they wanted to inject some new Scala blood into their tired Java veins, and that's why I interviewed there. So the guy is agape, and says, you don't know what a pojo is ? When was the last time you wrote Java ? I was like, a decade ago, back in Goldman...seems like a lifetime now. So he says, write a map-reduce job in Java on the whiteboard correctly and the job is yours. Now, I tell him, dude, I don't write Java at all - this is a Scala gig & that's why I'm here etc. He says, yeah, ok, but, you did write Java at some point in your life, so think back and write. Now I am like, how the fuck does it go - public static void main open brackets is that square bracket or paren...int argc char star argv no fuck that's C how do you do a char* in Java oh I know argv[], honestly, I've written thousands of lines in Scala and Java's really not my thing, and the whole point of Scalding is to not think so hard and just grab a TypedPipe and compose pipe.map{foo}.reduce{bar}.write{sink}, why would anybody want to map-reduce in Java and at this point, I have lost the job because, the recruiter tells me "you are too passionate about scalding and don't know what a pojo is".
The [redacted] YC startup had a really cool contest to which I submitted a greedy algorithm solution coded up in Scala. I was promptly flown down to Mountain View, wined & dined, and then asked to code something in Ruby. Being completely unfamiliar with the language, I got nowhere. They sent me a polite rejection that said Scala was a non-starter because it was such an ugly language, and everybody in the Valley uses Ruby and Python, because that's what every YC start-up uses. Then that tautological start-up died and its co-founder now hangs around on the Scala stackoverflow channel :)
Ironically, the one place where I was hired with zero interviews was a cozy little outfit on the east coast called GS. So this was way back in the late 1990s, when I was a consultant from Sun Microsystems, showing the folks at GS how to build a trading system inside an applet. The whole premise seems laughably silly, but those were the days when Netscape was one of the largest internet companies out there, and GS wanted their trading applet to run on Netscape Navigator, or Communicator or whatever the hell that particular browser was called. Goldman in those days had a very strong systems presence, for it had poached a bunch of C++ compiler guys from Bell Labs. These were strong theoreticians, one of whom wrote his own "trading language", a sort of C++ DSL which would spit out dags as output. Now, there was a markup language called "HTML" that these guys knew nothing about. Matter of fact, they knew practically nothing about Java or applets, because trading systems then were proprietary software distributed on floppies and CD-ROMs. The internet was too new, and nobody thought you could trade equities over the internet inside an applet. So I took this directed acyclic graph that the C++ DSL produced, and wrote a straightforward recursive descent parser in Java that converted the dag to a nice looking tree in HTML. I then sent that chap an email with a link. When he clicked on that link, his Netscape browser window opened and showed him his dag in a panel. Straightforward html shit. That chap went gaga. He was an MD and had great clout, so he calls up Sun Microsystems and says, we have hired your consultant! He is now going to work for us! Now, Sun doesn't like poaching, but its GS, so the legal folks on both ends got involved & sorted it out over the weekend. Next Monday, I was no more a consultant. I began working at GS as a regular Goldman employee. With zero interviews. All because I could parse a goddamn binary tree.