Posts tagged 'pair programming'
I'm using this tumblr to keep a couple people up-to-date on my doings and not only for assignments, so I thought I'd offer an overview of what the program's about.
It is, of course, twelve weeks long. The first nine weeks are mainly curriculum, followed by three weeks of project development—looking at what the previous cycle is doing, this consists of cloning the functionality of another public website as an proof of skills. I don't think most people choose to make a novel project (it's easier to solve a solved problem), but I don't know whether it's banned per se.
Of course, one part of the program is blogging your reflections on a public tumblr. My alumnus friend tells me that the only people who will be interested in most of this will be fellow students, but I try to cover enough other topics that maybe others will want to read about my time in aA.
Central to the instruction methodology is a working strategy called Pair Programming. How this works is a single computer is hooked to two monitors, and one person controls the keyboard and mouse, while the other talks about their thought process and, almost but not quite, tells the other person word-by-word how to get through the problem.
In practice what ends up happening is one of a couple things. First and most ideal, the pair is matched well, at which point you can easily forget who's actually in charge at any given moment—it feels like the executive portion of your brain is the other person, and you become the mechanical/error checking portion, or vice-versa.
Second, there's a close disparity, or a symmetrical disparity—A knows something B doesn't, and maybe B knows things A doesn't. My pet peeve is people doing motion commands multiple times, so I am constantly teaching my partners motion commands (delete line is ctrl-shift-K, select line is cmd-L, etc.). I don't restrict myself to this sort of thing—I've been spotting a lot of errors and edge cases while driving, which I don't do as much when navigating because I'm thinking of the overall strategy. It's sort of like the source of the analogy—the navigator in a car doesn't tell the driver how to pass or avoid an accident, but s/he does make damned sure the driver doesn't pass their exit.
My perennial weakness is syntax specifics; I don't bother spending a lot of brainpower memorizing the syntax of every command when the reference material is right there. What I have spent time on, by contrast, is understanding what the elements of the function signatures in the documentation are, so I can quickly parse and interpret what sorts of things a function is capable of, and what sorts of things it returns. I'd like to think I'm helping others learn how to do these things with greater facility.
Third and most rarely, one person is completely clueless and is basically told by the driver what to tell them ("okay, so how are we going to solve this problem? What search algorithm should we use?"), and then when they're the driver, they're simply a glorified typist. I think this is why Pair Programming often gets a bad rap—in organizations with programmers of vastly different skill levels, you won't always have two people who can pair well.
One of the advantages that you'll see regardless is that, as long as one person isn't a complete pushover, the pair will produce cleaner, more readable code, and each person will come away knowing more than when they started, either about programming and problem solving, or about communication and education.
The office, on Cooper Square, is relatively compact and a bit on the old side. It's not all glitz and glamour; it's functional, in a building that could really benefit from a bit of TLC from a motivated DIYer. The local shopping options, especially for food, are amazing—it's going to be hard not burning through my savings by going out to eat every day, especially because some of the best conversations happen at lunch when everyone has a chance to relax—and it's nice and central to a lot of people and train lines.
We only use the school's computers, not our own. I guess previous cycles had mechanisms for students to bring their own computers, but there are logistical problems with that, especially when it comes to supporting non-default install environments and version conflicts. Further, we all use the same editor to work—Atom, by the same people who make the git version control system (ed: this isn't true; it's made by the github people)—which is a good editor, but not great, out of the box. One advantage to learning Atom is that, in time, you can add plugins to do almost anything any other editor does, but it can be quite frustrating not having some of the more clever IDE shortcuts available by default (TextMate's "Command-enter autocompletes a function signature" is one I miss almost daily.)
One thing I'm noticing is that if you learn Unix shortcuts, specifically readline mode's motion and deletion commands, and the shortcuts for a single editor, most of the other editors out there will support the same shortcuts. So really, the learning curve to switching to Sublime or TextMate after using Atom should be quite low. Atom does file browsing better than TextMate, so even though I bought the latter, I am considering just sticking with Atom. (If you don't understand, navigating the file hierarchy of a big project can be quite a pain in the ass with bad tools.)
Their current stats are 98% of grads are hired within a certain timeframe for a median salary of $84,000 (in NYC). This is promising, because I run out of money mid-March :)
Today's partner: Cihangir
So. Good stuff.
It's been busy this week, which isn't germane to the appAcademy experience per se, but has certainly made it more interesting. Getting situated close to campus and investing in a good working space was a great idea because it's rapidly become clear that there will be. no. time. for anything else the next twelve weeks.
In preparation for this course, I spoke with a alumnus friend, and mentioned that this is my time to really focus on something. I think the next two or three years are just going to be a constant push to improve, and it all starts here, in twelve weeks of pushing myself as much as possible.
I tend to reflect a lot on how things run, and I don't mean to come off as negative, but I try to see the good and the bad. I don't expect anyone skimming this tumblr will come so far down that they'll see this disclaimer, but basically I don't generally whitewash things, but when I say something positive you can be pretty sure i mean it.
In no particular order, then:
- The whole experience so far has felt bootstrapped. Like, everyone is so concerned with making the best possible programmers with the most recent technology and the least possible overhead that sometimes things break. The facility is nowhere near as polished as I expected—for comparison, I've visited General Assembly in New York and they seemed clean but sterile. An acquaintance is starting their bootcamp in a week, and I'm curious if their polish comes at the cost of some flexibility.
- Random errors: the appacademy.io DNS entry was invalid for a day a couple weeks ago. The progress tracker is down now. Before I tried refreshing it, it was showing that I have a fine for coming in late to class tomorrow. What.
- Everyone is super positive and super excited to be there, or at least we're all faking it really well. :)
- I have never been so tired from working. Day one, where most of the material is review from the course prepwork, felt like the roughest study session I ever had in college times two, no joke. My brain doesn't hurt the way it did when I had to take a math test for a class I wasn't prepared for in a language I was just beginning to understand (long story), but by 4:30 I was just drained. I'm going to have to invest in blood glucose—snacks to keep in a cubby, coffee (with sugar?), juice, something, to get through the afternoons, but even this might not be enough.
- Pair programming is intense, in a super good way. Especially in the morning when we were fresh, I felt like my partner and I were really getting a lot out of it. He was really practiced in a lot of the nuance of some of the commands, whereas I rely much more on the documentation and learning as I go. I was able to offer I think some expertise in the choice and use of algorithms, which means that we balanced each other out in a lot of ways.
- I do wonder what the coming days will be like. Again, my partner seemed really sharp, and I wonder if that's typical of the quality of the students here. I joke (but not really) that 90% of Harvard's work educating students is done by the time they get through the admissions process, but I do wonder how true that is at aA. If my partner is a typical student… man, they run a tight ship. And the students at the cusp of admission must just be above average ;)
All in all, it was a productive day. There's almost too much to process in one go, so I'm just letting it all sink in and not stressing too much. I figure things will just click into place in time as long as I keep pushing.
I'm really not sure what these things are supposed to feel like or if there's a length requirement, so that's all for now.