2017-04-12
A few weeks ago, I was feeling a bit stressed out: I didn't feel like I was making as much progress as I wanted on my projects, but I also felt like I wasn't really making the most of being at the Recurse Center. I was trying to be open to all the things happening, but also feeling like I should be more productive. I think I was doing and learning a lot, which I was really enjoying but things didn't feel very tangible. I was really enjoying being here, but I felt dissatisfied with the way I was deciding how to spend my time. I was spending more and more time worrying that I wasn't doing the right thing.
I think I hadn't shifted the mindset I had developed when I was learning to program by myself in quite an isolated way, and with a daily routine that was quite resistant to me learning about programming. Also, while at RC I have been trying to understand more about out how things work under the surface; it had seemed too daunting and unachievable before. Now I was in a place where I could reach further, but I'd have to change the way I was doing things. I was also aware that the energy I was using to think about this was not taking me closer to a solution; if anything it was taking me further away by making me worried (which made me even more worried :|).
I remembered what the previous batch had told us on our first day: pair more. I had really enjoyed the pairing I had done so far, and knew it was something I probably wouldn't be able to do as much after RC. So I decided to stop worrying about getting things done, and that for a week my main priority each day was to pair. Below are some of my thoughts from that week and conversations I've had since.
I reached out to people who had expressed an interest in working with me on something. I ended up having on average a couple of pairing sessions a day, sometimes more. For most of them we worked on a project one of us had already started, sometimes we ended up just discussing the thing. I tried to make notes of the things I could remember at the end of each session. I usually worked with one other person but a couple of times I worked in a three.
I did a lot of things I wouldn't have if I'd worked by myself. I was exposed to libraries and methods I wouldn't have been otherwise, I used and saw others use things that I knew but still felt a bit too hard for me, and I learned subtle new ways of thinking or approaching a problem. I paired on things I hadn't been familiar with before, and I was challenged to think about familiar things in new ways. I found myself more interested in some of the things I learned about than I had been in the projects I'd originally wanted to work on. By the end of the week I had decided to shift my focus for the rest of my time here.
##Connecting
I started to think about pair programming as primarily another way of interacting and connecting with other people, rather than primarily as a way of writing code. Of course we do it because we enjoy programming and learning more about programming. But it's kind of like playing a game with others - you might play a particular game because you enjoy it, but you are probably playing with others because you want to connect with people.
Most educational environments use group work to some degree, but I think in those situations it's seen more as a tool. On the other hand, working together or learning and growing as a community could be an underlying principle. It feels like this at RC a lot, to different degrees at different times. I'm still trying to work out exactly what I mean by this.
It's really fun!
It can also be quite intense - you're not just writing code (or thinking or talking about code or something related to code), you're also really engaging with someone else for a block of time. It can be quite tiring, and also bring up stuff like insecurity ...
##Insecurity
I sometimes noticed myself hesitating to ask questions when something wasn't clear. I think it's easier to ask questions that might be silly if you have already interacted with someone, but it also gets easier as you're working together. Some of the most interesting and informative conversations happened because I asked questions that might have been silly. There is no such thing as a silly question, but it's one thing to know that and another to believe it when you don't know something.
Sometimes I felt like I wasn't really helpful. I've heard other people say this too. Most of the time I was working with someone who had more experience with the thing we were doing that I was. I sometimes wondered what the other person was getting out of it. People are so generous with their time and knowledge here I wanted to make sure I wasn't taking too much. I sometimes asked people, after we'd paired on something, what they had got out of it.
As quite a new programmer I hesitated to ask people to pair with me unless they expressed interest. I was worried they would get bored if they had to go at my pace, or they would want to pair with someone who could teach them things and challenge them. I think sometimes people do want that, but part of the fun is working with different people and having different experiences.
Here are some of the answers I got when I asked people what they got out of pairing with me:
Some other things I think people can get from pairing:
##logistics
Pairing on someone else's project means you need to spend time at the start to introduce and get familiar with the code, or at least the specific part you are going to work on. Even with a great explanation at the start, the first time I paired on someone else's project I felt quite disorientated. I didn't feel like I was being very helpful because of this, but then I realized that it's just what happens when one person knows the code really well and the other just met it. I think it also happens to some degree when you're working on a big project, however well you know it, and that with experience you gain tools and techniques but also comfort dealing with the unfamiliar. Small stand alone challenges start with no code, so no one knows it better. But everyone has different experiences and knowledge, so someone is still probably more familiar with the problem (or the language you are using, or the approach you take to solve it). That's part of how we learn by pairing.
Sometimes, especially towards the end of the week, I was really tired. I think I underestimated how much energy focusing, engaging, and learning for a block of time can use.
It's ok to say you need something (a break, to repeat something, to draw a picture of it, time to think etc.)
Some things I found really useful when I did them:
##After the week of pairing My week of pairing was two weeks ago. Since then I have done a lot of pairing, usually everyday, but not quite as much or as consistently as during that week. I started working on things that I discovered an interest in while pairing which has been great. I've also found myself slipping into worrying about getting enough done, or putting pressure on myself.
With just a month left at RC, I am deciding to make the most of this time and opportunity by pairing, working, and talking with people here as much as I can. I also want to push myself to follow my curiosity, even when it seems too hard, rather than pressure myself to complete a series of tasks. I want to get better at focusing on the process rather than worrying about the product. That is something I can only start doing better in the next month, and can continue doing after.
Some process things I want to do over the next month:
I'm not sure if these are enough, and there are other things I do want to work on and learn. I am still thinking through how to make the most of my time here while not putting counter productive pressure on myself.