Archive for the ‘ACM’ Category

Connectionless Protocols

The post originally appeared on the Tufts ACM blog. 

It’s a common joke among computer scientists to liken themselves to the machines they work with. While not as prevalent at Tufts as other schools, the language of memory errors or HTTP status codes creeps into our understanding of ourselves and of our social situations. It’s a whimsical combination of metaphor and geekery. ACK?

There are two primary protocols that computers use to communicate with each other across a network. The first is UDP, which is fast and lightweight. UDP is a single packet hurled across the Internet to whatever fate may befall it. TCP is a more sophisticated protocol that makes various guarantees about the message that it is sending.

For one, TCP is reliable, while UDP is not. The term “reliable” has a special meaning in this context: a reliable protocol ensures that the message will get there. TCP is courteous enough to ask for retransmission if it didn’t receive a packet it was expecting. I’d like to apply to term back to human beings talking to each other.

If we put more emphasis on reliable communication, we’d spend less of the conversation talking and more time listening, to make sure we understood everything that was said. If not, it’s as simple as asking “come again?”, and being patient enough to repeat yourself. Ensuring a reliable connection places value on what other people say, which will lead to more friendships and tolerance. Efficiency and courtesy go hand-in-hand.

Secondly, TCP is serialized, which means it tolerates packets coming in out of order. It puts them in the right order before handing them off to the program above it, say, your mail client. UDP is not serialized, so different parts of the same file can arrive out of order.

Relationships used to be serialized. Courtship rituals bare a striking resemblance to network protocols, algorithmic dances of identification, verification, and only then communication. Or something. Serialization has been left on the sticky concrete floor of the frat house basement. If you’ve spent most of your Saturday nights in Halligan, I should remind you that many of our classmates have the inscrutable tradition of making out before so much as exchanging first names. (It’s as insecure as it sounds.) We’ve lost the notion of “not on the first date”.

In fact, we’ve largely lost the notion of dating altogether. Like UDP, hookups are a connectionless protocol, something we do blindly and without preservation of state from one to the next. It would be awfully hard to have a friendship if every time you started talking you had to introduce yourselves. TCP’s solution is the abstraction of a two-way stream of data. This connection must be set up by hand-shaking, maintained while in use, and eventually torn down. Similarly, only by effort and memory can we form lasting relationships and “connections” to other people.

You may remember the final scene of The Social Network, where Mark Zuckerberg (Jesse Eisenberg) lazily hits refresh to see if the woman he was dating at the start of the film has accepted his friend request. He has been trapped by his own creation. I think that computer scientists have a unique vantage point in our increasingly technologized world. By understanding the limitations of our machines, we are better equipped to, when necessary, put them aside and have a conversation with other human beings.


There’s not an app for that

The post originally appeared on the Tufts ACM blog. 

I was thrilled when I heard Tufts was hosting a hackathon, I was thrilled. A collaborative all-nighter coding with sponsorship and prizes from big-name companies in my backyard? It would be programming nirvana. Sign me up!

But when git push came to shove, most of the ideas were built on the “social, local, mobile” paradigm. That didn’t strike me as particularly innovative. We already have Facebook and the iPhone. I resisted the notion that everything is better as a mobile app.

I wanted an app that allows me to have more conversations. I brainstormed such an app with a colleague, which would have been called, “Get off your phone!”. It would serve up suggestions like “look up at the unique architecture” or “go talk to that person over there,” but we concluded that even if you put in a rating system it would just be a place for crude jokes and pickup lines. I abandoned the idea, along with hope in a hair-of-the-dog solution. I wound up working on a school project instead.

One of the things I love about computer science is how diverse its applications are. You can mine data for scientific research, or design a clean and functional website, or write utilities that help manage a company’s workflow, or make a video game, or just become more aware of the patterns and relations of the things around us. Not everything we build has to be a time-waster for rich people (and on the global scale, we are all rich people). In fact, to build only these apps is a shameful waste of the privileged position we occupy as educated people.

The future is here. We all carry devices in our pockets that can tell us anything, anywhere. We’re living the always-on dream, but it’s time to wake up. We have crises in real life to attend to, like feeding seven billion people while fighting climate change.

There are some things apps just can’t do, and I don’t mean solve the halting problem. Our devices have caused us to be less connected, not more. Put the toy technologies back in your pocket. Time to go do something else now. Have coffee with a good friend, perhaps. Or at least a Monster with a teammate.