Author Archives: countaleph

On Grandparents

A week ago, my grandma died.

My grandpa went a couple years before she did. They both lived in China, and they both fell ill fairly suddenly, so I’ve gotten that phone call twice. The one that’s like, “Hey Emma! Just wanted you to know, Grandpa isn’t feeling too well. He’s been in the hospital for a couple days. They’re not sure what’s wrong, but…maybe you should come visit?”

Both times, I dropped everything, ran to the Chinese consulate, got my same-day rush visa (which requires no small amount of yelling and faxing, let me tell you), bought my next-day plane tickets, and flew into Shanghai the following evening. Both times, I arrived just in time to say goodbye.

My grandparents pretty much raised me. My parents had me right after they immigrated to the States, and they were out working most of the time, so it fell to my grandparents to spoil me rotten. My grandmother was this tiny, fierce, combative lady with a withering glare, but she always smiled when she saw me. My grandfather usually let her have her way, probably because he loved her, and probably also because life was much easier that way. He was a tinkerer. Neither of them ever learned much English, despite living in Chicago for nineteen years, but my grandpa was happy, because he was busy raising my goldfish and frogs and parakeets that I’d grown tired of, building three story birdhouses for the pigeons I brought home with broken wings, and trying to grow a variety of Asian vegetables that had no business growing in the midwestern United States. He loved to play Chinese opera songs at top volume through his duct-taped Walkman, while moving Chinese dominoes around in ways that defied logic. He explained the game to me one time. It was like Solitaire, except that it made no sense at all.

My grandma was smarter, and more easily bored. She largely occupied her time experimenting with cooking, watching historical Chinese soap operas, and telling my grandpa the right way to do things. She was mercurial, even with me. Some days she was sad, some days she was icy, and some days she was completely fine. I found out when I was older that my mom tried her out on a bunch of different antidepressants throughout the years, but it made no difference. She was simply that way, and my grandpa quietly took care of her, and defused her temper whenever possible.

I never had a doubt that they thought I was special. The rest of their grandchildren all lived in Shanghai, and around them, even my goofy grandfather was sterner, more demanding of respect and obedience. My grandmother rarely smiled at all. But I was their strange, foreign granddaughter, and they readily accepted my bright pink hair, my motorcycle, my Caucasian boyfriend, my unladylike career choices, and everything else about me as a matter of course. Aren’t all American kids that way?

They moved back to China permanently when I went off to college. My grandfather immediately embarked on a million new projects, which he’d show me whenever I flew in for a visit. Here was the vine plant, obviously much bigger than he’d imagined when he’d built the frame for it, that would theoretically someday produce fruit. Here was the microwave-sized porous rock, inexplicably covered in four different species of moss.

My grandmother enjoyed being back in a place where she could express her disapproval at people in a language they’d understand, but I think she missed me a lot. I usually talked to her more when I called, and she always seemed cheerier by the end of our conversation. When I was in college, I would relay my various adventures around campus, and she tried her best to scold me, but never quite managed because I could always hear her smiling. When I became a software engineer, I tried several times to explain to her what I was doing for work, but we pretty much arrived at “typing on computers a lot.” She reminded me not to look at screens too much, to dress warmly, and to call my parents more.

At one point, I remember my mom and some of her siblings talking about getting my grandparents a laptop, or an iPad, or something. I knew better. When I was in high school, I’d spent a few summer weeks trying to teach them to use the Internet. When I started, I thought I could teach them to download Chinese movies and send emails to their kids in Shanghai. A week in, I would have settled for them learning to turn on the computer, and click on a handful of bookmarks to Chinese news sites that I’d installed for them. It was useless. My grandfather is probably going to be a QA tester in a future life. One time, I saw him using a mouse upside down. My grandmother had somewhat more common sense, but she was also much less patient.

There was one exception to my grandparents’ blanket incompatibility with technology. Every year, on my birthday, I would always get a phone call from them. My freshman year of college, they called me on my regular, old-timey telephone from their regular, old-timey telephone. But soon, they graduated to cordless phones and non-smart cell phones. One year, my grandma even Facetimed me from my aunt’s iPhone! True to style, she started the call with the wrong camera feed on, and she was ready to spend the whole call talking at the back of the phone. I walked her through it, though. I was unspeakably proud.

I’ve never thought that the last days of someone’s life were more important or more meaningful than all the rest, so I tried to lighten the mood when they were in the hospital, told them terrible jokes, tried to get them to recall the sparse English I’d taught them years before. I didn’t know how to say goodbye. But I hope they knew that I loved them, that they gave me a happy childhood, and that they instilled in me an enormous curiosity and a reckless tenacity, respectively. I think that they must have known.

Dear Startups: Stop Asking Me Math Puzzles to Figure Out If I Can Code

I’ve always been pretty good at math. Not trigonometry, or arithmetic, or whatever people are usually thinking of when they’re like, “Oh, you must be smart! I hate math!” But, combinatorics and graph theory and proving things and figuring out how to put hats on prisoners – I love that stuff. I went to three different high schools, and I did math team at all of them. When I was ten or eleven and my parents needed me to shut up at dinner parties, they bribed me with books of math puzzles. No joke.

During my sophomore year of college, I was dating a Computer Science major, and I took some CS classes out of curiosity. To my surprise, CS wasn’t different from math at all. I took my Intro class in Java, so there was some mumbo-jumbo that you put at the top of your programs that went “public something void main something something”, but once you got that nonsense out of the way, it was all sorting lists and putting stuff in matrices and traversing trees. Easy stuff. And once the CS department switched to Python, it got even easier.

So I became a math and CS double-major at my tiny liberal arts school in Minnesota, and my senior year, I started looking for jobs. Turns out, only actuarial firms want to hire people who are really good (but not, like, PhD good) at nothing except figuring out how many ways there are to distribute hats from a coat check so that everyone gets the wrong hat back. So, software engineering it was.

After some research and a couple bad interviews and no small amount of panicking, I found a startup in San Francisco that looked awesome. I interviewed, expecting the worst. But for some reason, my interviewer asked me to find the shortest path between nodes A and B in a graph. (Essentially. I think he said some stuff about Kevin Bacon.) I did so. He asked if I could do better if I knew that A and B were exactly six degrees apart. Yep! Breadth-first search from both ends. Oh wait, you should do that anyway, even if you don’t know how far apart the nodes are! Cool. They flew me out for a full-day onsite interview, where they asked me a bunch more questions that involved sorting things and memoizing things and traversing things, and then they gave me an offer. The entire interview process from beginning to end took six days, and I wrote exactly zero lines of actual code.

Some more relevant things they could’ve asked me, but didn’t:

How comfortable are you with Unix?
I can change directories, list things, and run Python programs. Oh! And rename files. Probably.

Describe how Ajax calls work.
Umm, isn’t that what Gmail uses? It’s like, refreshing the page without refreshing the whole page?

What version control systems are you familiar with?
Oh, we used SVN for our senior thesis project. I accidentally triggered a conflict one time. Someone fixed it for me.

How would you implement a [deck of cards, public garage, hotel reservation system] using object-oriented design?
Variables. Variables everywhere. With counts. And maybe some strings.

Absolutely anything at all about databases.

Listen, the very last thing I want is to sound ungrateful. At that first job, I learned all of those things I listed, and more, because the senior engineers patiently sat with me and put up with my stupid questions and never got frustrated with me, even when I got frustrated with myself. But it took me more than a year. And I’ve worked at three jobs since then, and interviewed at many, many more places, and I’ve found that my first startup’s interview style wasn’t a weird fluke. It’s actually extremely common practice. People ask math puzzles to determine programming ability. Why?

In a particularly egregious example of this, when I was interviewing for my second job out of college, I was asked to come up with an algorithm to eventually sink a submarine with unknown (but integral) position and velocity that was somewhere on a number line. (Spoiler alert: to solve this problem, you need to know how to enumerate the rationals.) Once again, zero lines of code. Two weeks into my new job, they told me to write them a consumer iPhone app. Needless to say, I had never encountered Objective-C. I’d written perhaps twenty lines of C in a group project in my programming languages class in college, and all I remembered was that it was terrible and you had to do your own garbage collection or something. My new startup gave me a book called The C Programming Language, pointed me to where I could install the newest version of Xcode, and off I went. Three weeks later, my CTO had a talk with me where he was like, “You’re not getting up to speed as quickly as we expected.” I redoubled my efforts. A week after that, we had the same conversation, but harsher. And then there was a holiday break, and the day after it, I was fired.

I was pretty devastated. I mean, nobody had ever called me a slow learner before. And I had a ton of software engineer friends, and they could all do this stuff. How hard could it possibly be? Why couldn’t I get it?

I promptly repressed my experience at that second startup, talked to nobody about it, joined my third startup (they asked me something about Markov chains), and proceeded to quietly freak out every time I had a 1-on-1 with my new CTO, wondering if I was about to hear that I wasn’t contributing enough, that I’d somehow tricked them into hiring me, that they’d thought I’d be so much better at this.

And I kept struggling, although I did feel like I was learning, and it did get easier. Slowly. But still, I would run into entirely new concepts that I just didn’t have the context for. One time, a few of us got together to code for fun on a Sunday, and someone suggested using node.js, because it seemed like a cool thing to learn. And, looking at some example code, I encountered an anonymous function being passed into another function. I did not get it. Everyone else did! Right away! Even though backend Javascript was new to them, too! So they spent half an hour drawing diagrams with lots of arrows for me, and finally (relying on a lot of metaphors in my head at once), I managed to cobble together a cursory understanding. And then I watched them pass their callbacks around in their code, and it was still magic to me, and I felt so dumb.

Recently, a close friend of mine began learning to code, and I found myself explaining stuff to her. Pretty basic stuff, like the difference between static and instance variables, and how inheritance works. And it dawned on me that I was using all these words like “class” and “object” and “method”, and I knew what they meant, intrinsically, without having to think about it, because I’d been using those words and those concepts for years. But every time I said one of those words, I saw her trying to remember what it meant, what properties it had, and how it fit with what I was saying, because somebody had just written the definitions of all those things on a blackboard for her not two weeks ago. And I realized (it took me that long to realize) that I couldn’t just transfer three years of software engineering experience to her by building and building on stuff I’d already explained. Brains, apparently, don’t work that way. Not like codebases.

It seems like a lot of interviewers think that CS theory and problem-solving skills are the important things, the difficult things, and if you know them, everything else is easy. It makes sense that they think this, because a lot of them have been coding since they were twelve, and they get how to code the same way I get how to solve puzzles. And they probably didn’t learn the theory side of it until college. But me, I’ve been practicing problem-solving since I was ten. So I feel like I’m in a pretty good position to say: programming is fucking difficult. Just as difficult as problem-solving, if not more so. And just because I breeze through your common-elements-in-unsorted-lists and linked-list-cycles and paths-through-grids problems, doesn’t mean that I’ll learn all the new coding stuff I need to know in my first few weeks on the job.

I mean, I’m getting better at it. I feel like I’m finally on the other side of the sheer confusion in the beginning. But I’ve been doing this for over three years now. And there’s still a long, long way to go before I’m anywhere near as good at programming as I am at solving math puzzles. So please, future interviewers, ask me a coding question. You’re trying to figure out if I can code. And I’m not trying to trick you! I want you to know! So there is absolutely no reason for this roundabout nonsense.

Hello world!

Recently, I found a Facebook Note that I’d written when I was a junior in college. It was one of those terrifically narcissistic “25 Things About Me” things, where you make one and tag 25 of your friends and then they’re supposed to write 25 things about themselves, too. But mostly you tag them so they have to read your note. Facebook Likes had just come out, then. Two people Liked my note.

I read what I’d written, these 25 things that I once thought it was so important that everybody know about me. And, it was kind of nice! Incredibly shallow, but nice. I remember trying to come up with 25 things about myself, and it being surprisingly difficult. I think I probably learned some stuff, trying to summarize myself that way.

I remember having a LiveJournal. Hell, I remember having a Diaryland. Pretty sure I had a Xanga once. God only knows what I Xanga’d. Still, I feel like I knew myself better, when I made myself organize my thoughts and write them down sometimes. Maybe this will be sort of a grown-up version of that.

I thought about having a themed blog, like Emma-Travels-The-World or Emma-Is-A-Girl-Programmer or Emma-Learns-Which-Fruits-And-Vegetables-Grow-On-Which-Sorts-Of-Plants. But, you know, sometimes I just want to organize my thoughts and write them down. So that’s what I’ll do here.