git status-add-commit, git status-add-commit, git status…

We had a field trip to learn about Firebase at the Google office last week. The presentation was great, but then... this view, this view. Mmph.
We had a field trip to learn about Firebase at the Google office last week. The presentation was great, but then… this view, this view. Mmph.

Consider this picture your moment of zen. We’re about to dive into nightmare territory.

In the first week of class, I was pair programming, and we’d reached the point (one of fairly dozens that day) of editing and troubleshooting. We use Sublime Text 2, something I’m fairly used to at this point; what I wasn’t used to was Ubuntu. I hit an F key without meaning to; suddenly, our window maximized, and neither double-clicking nor dragging the top bar of the window down made it shrink. The maximized Sublime stared at us from two mirrored monitors, waiting.

So I began tapping the F keys again, one by one, thinking it would ultimately undo what I’d done, and I might learn a couple shortcuts too. This is a practice that has served me fairly well for the last 20-odd years, with not a casualty to speak of.

Til that day, anyway.

Somewhere around F-8 or F-9, all of our lines of code rearranged themselves. Instead of our 40-plus lines of tidily indented work, they had formed a perverse pyramid, blank rows at the top, and the rest below in order of descending indentation, alphabetized within those length blocks. Under the edit menu, undo was greyed out.

I think – I think – that I managed not to actually say “What even the fuck?” in front of my pair. (We were all still using people manners then; now there’s a post-it in one of the bathrooms telling you to drink more water, lest you get constipated, a problematic situation the post-it writer knows very well, ok?)

I called over my advisor, explained the situation, and watched as she tried a few of my steps again. No undo. No solution. Nothing.

She frowned and said words that were not meant to be an indictment but were nonetheless: when was the last time you committed?

It was about 5:50 pm. We’d last committed after we’d finished our last exercise. You know, at 1 pm.

“Well,” she said finally, rising from the keyboard. “You learned something.”

“I did,” I told her. “And I’m not – well, I’m not proud. But it’s not often that a person really manages to break something beyond repair with computers. It’s… notable.”

She shrugged and went to help less hapless people. I apologized profusely to my pair, who was altogether lovely about it.

I thought for a moment and closed Sublime. I counted to three and reopened it.

Our properly ordered, fully functional Python file was restored.

I’m not sure I took a whole breath in before I completed a commit on it. And now I, like all of us in our time, am a committing zealot. Early, often, excessively.

I don’t recommend being an anxious person. But for certain qualities? I totally recommend hiring them.

I Hate Pair Programming; I Must Pair Program

Cartons of cold brew coffee from Blue Bottle
Pair programming at 5 pm? Better grab a couple of these.

I knew before coming to school that the Hackbright day leaned heavily on pair programming. During the first five weeks, days unfurl like this:

  • Lecture
  • Pair programming
  • Lunch
  • Lecture
  • Pair programming
  • Break
  • More pair programming
  • Profit? Or collapse onto BART. One of those.

I am told that it’s not a super common practice for tech companies, or at least not outside of training or special projects. But I know that people learn better if they have to learn, discuss, and then teach. I know that the general level of knowledge in the room rises if we have to work through problems together, combining what we know to make a greater, more effective whole. One of the reasons I decided to go to a school like this is that I have a well-documented tendency to read about how to make this loop or that data structure, nod to myself with some satisfaction, consider it learned, and move on.

That is a great way to learn some vocabulary terms; it is a piss-poor way to learn programming.

And it’s part of why I decided to go to school rather than going my usual autodidact way. I knew that, with the structure of school and the requirements of a major final project, I would have to read, digest, and then practice. I wouldn’t really learn anything otherwise. And that meant pair programming, with its constant verbalizing, sharing of knowledge, and immediate application of what we’d learned in lecture. Sounded great to me. Sign me up and tell me where to send the deposit.

I was right about every bit of it. Pair programming is a stellar communication tool, and, when paired with available expert help, it’s like having your own half-a-tutor. You learn things from them; you have to explain things to them. You really learn.

That said, I’m pretty excited to get to the second half of my program, because it means less pair programming and more time slogging through my project by myself. And it is absolutely not because of the people I’ve been paired with, who have all had good manners and and the good grace to teach me things.

I hate pair programming because I am a hard introvert with only so much social energy in a given day. The first week at Hackbright, I met about 40 new people, found myself in a new city where I have only two friends, and also had to talk through assignments with a near-stranger for close to four hours a day.

I’m surprised I didn’t actually melt into an Odo-like puddle in a bucket.

I’ve kvetched about this to my advisor. To friends. To fellow exhausted Hackbright students. And yet I’d never advise them to change this part of the curriculum, because I really can’t think of a different, better approach.

Instead, I’ve just dialed back how social I am. I have more lunches alone; I take quiet texting breaks. I don’t go out very much. And it’s a bummer, because I have access to 34 other aspiring software engineers, and so many of them are so very interesting.

But I can hear their life stories while I eat my reheated pizza, or I can have brain to solve programming problems. I can’t have both. So I retreat and read, and I use my social energy very carefully.

And I hate pair programming.

But I’m grateful for what it’s going to give me.

P.S. If you want some legitimately useful pair programming tips, cohort friend Noelle has some for you.