Выбрать главу

History hinges on such small things. A difference of thirty degrees, and this story would end here. But my laptop is angled just so, and on my screen, the 3-D bookstore is spinning wildly on two axes, like a spaceship tumbling through a blank cosmos, and the girl glances down, and—

“What’s that?” she says, one eyebrow raised. One dark lovely eyebrow.

Okay, I have to play this right. Don’t make it sound too nerdy: “Well, it’s a model of this store, except you can see which books are available…”

The girl’s eyes light up: “Data visualization!” She’s no longer dubious. Suddenly she’s delighted.

“That’s right,” I say. “That’s it exactly. Here, take a look.”

We meet halfway, at the end of the desk, and I show her the 3-D bookstore, which is still disappearing whenever it spins too far around. She leans in close.

“Can I see the source code?”

If Eric’s malevolence was surprising, this girl’s curiosity is astonishing. “Sure, of course,” I say, toggling through dark windows until raw Ruby fills the screen, all color-coded red and gold and green.

“This is what I do for work,” she says, hunching down low, peering at the code. “Data viz. Do you mind?” She gestures at the keyboard. Uh, no, beautiful late-night hacker girl, I do not mind.

My limbic system has grown accustomed to a certain (very low) level of human (female) contact. With her standing right next to me, her elbow poking me just the tiniest bit, I basically feel drunk. I’m trying to formulate my next steps. I’ll recommend Edward Tufte, The Visual Display of Quantitative Information. Penumbra has a copy — I’ve seen it on the shelf. It’s huge.

She’s scrolling fast through my code, which is a little embarrassing, because my code is full of comments like Hell, yeah! and Now, computer, it is time for you to do my bidding.

“This is great,” she says, smiling. “And you must be Clay?”

It’s in the code — there’s a method called clay_is_awesome. I assume every programmer writes one of those.

“I’m Kat,” she says. “I think I found the problem. Want to see?”

I’ve been struggling for hours, but this girl — Kat — has found the bug in my bookstore in five minutes flat. She’s a genius. She talks me through the debugging process and explains her reasoning, which is quick and confident. And then, tap tap, she fixes the bug.

“Sorry, I’m hogging it,” she says, swiveling the laptop back to me. She pushes a lock of hair back behind her ear, stands up straight, and says, with mock composure, “So, Clay, why are you making a model of this bookstore?” As she says it, her eyes follow the shelves up to the ceiling.

I’m not sure if I want to be completely honest about the deep strangeness of this place. Hello, nice to meet you, I sell unreadable books to weird old people — want to get dinner? (And suddenly I am gripped with the certainty that one of those people is going to come careening through the front door. Please, Tyndall, Fedorov, all of you: Stay home tonight. Keep reading.)

I play up a different angle: “It’s sort of a history thing,” I say. “The store’s been open for almost a century. I think it’s the oldest bookstore in the city — maybe the whole West Coast.”

“That’s amazing,” she says. “Google’s like a baby compared to that.” That explains it: this girl is a Googler. So she really is a genius. Also, one of her teeth is chipped in a cute way.

“I love data like this,” she says, nodding her chin toward my laptop. “Real-world data. Old data.”

This girl has the spark of life. This is my primary filter for new friends (girl- and otherwise) and the highest compliment I can pay. I’ve tried many times to figure out exactly what ignites it — what cocktail of characteristics comes together in the cold, dark cosmos to form a star. I know it’s mostly in the face — not just the eyes but the brow, the cheeks, the mouth, and the micromuscles that connect them all.

Kat’s micromuscles are very attractive.

She says, “Have you tried doing a time-series visualization?”

“Not yet, not exactly, no.” I do not, in fact, even know what that is.

“At Google, we do them for search logs,” she says. “It’s cool — you’ll see some new idea flash across the world, like a little epidemic. Then it burns out in a week.”

This sounds very interesting to me, but mostly because this girl is very interesting to me.

Kat’s phone makes a bright ping and she glances down. “Oh,” she says, “that’s my bus.” I curse the city’s public transit system for its occasional punctuality. “I can show you what I mean about the time-series stuff,” she ventures. “Want to meet up sometime?”

Why, yes, as a matter of fact I do. Maybe I’ll just go ahead and buy her the Tufte book. I’ll bring it wrapped in brown paper. Wait — is that weird? It’s an expensive book. Maybe there’s a low-key paperback edition. I could buy it on Amazon. That’s stupid, I work at a bookstore. (Could Amazon ship it fast enough?)

Kat is still waiting for me to answer. “Sure,” I squeak.

She scribbles her email address on one of Penumbra’s postcards: katpotente@—of course—gmail.com. “I’ll save my coupon for another time,” she says, waving her phone. “See you later.”

As soon as she leaves, I log in to check my hyper-targeted ad campaign. Did I accidentally check the box that said “beautiful”? (What about “single”?) Can I afford this introduction? In pure marketing terms, this was a failure: I did not sell any books, expensive or otherwise. Actually, I’m a dollar in the hole, thanks to the scribbled-on postcard. But there’s no reason to worry: from my original budget of eleven dollars, Google has subtracted just seventeen cents. In return, I have received a single ad impression — a single, perfect ad impression — delivered exactly twenty-three minutes ago.

* * *

Later, after an hour of late-night isolation and lignin inhalation have sobered me up, I do two things.

First: I email Kat and ask her if she wants to get lunch tomorrow, which is a Saturday. I might sometimes be faint of heart, but I do believe in striking while the iron is hot.

Then: I google “time-series visualization” and start work on a new version of my model, thinking that maybe I can impress her with a prototype. I am really into the kind of girl you can impress with a prototype.

The idea is to animate through the borrowed books over time instead of just seeing them all at once. First, I transcribe more names, titles, and times from the logbook into my laptop. Then I start hacking.

Programming is not all the same. Normal written languages have different rhythms and idioms, right? Well, so do programming languages. The language called C is all harsh imperatives, almost raw computer-speak. The language called Lisp is like one long, looping sentence, full of subclauses, so long in fact that you usually forget what it was even about in the first place. The language called Erlang is just like it sounds: eccentric and Scandinavian. I cannot program in any of these languages, because they’re all too hard.

But Ruby, my language of choice since NewBagel, was invented by a cheerful Japanese programmer, and it reads like friendly, accessible poetry. Billy Collins by way of Bill Gates.

But, of course, the point of a programming language is that you don’t just read it; you write it, too. You make it do things for you. And this, I think, is where Ruby shines:

Imagine that you’re cooking. But instead of following the recipe step-by-step and hoping for the best, you can actually take ingredients in and out of the pot whenever you want. You can add salt, taste it, shake your head, and pull the salt back out. You can take a perfectly crisp crust, isolate it, and then add whatever you want to the inside. It’s no longer just a linear process ending in success or (mostly, for me) frustrating failure. Instead, it’s a loop or a curlicue or a little scribble. It’s play.