RC Week 2: Pairing is Awesome
Friday, September 30, 2022
The second week of my batch at Recurse Center (RC) is a wrap, and it already feels like it's going too quickly. My batch is twelve weeks long, so I'm 17% through. Only ten weeks left! This is a precious time, so I'm trying to make the most of it, but also trying to not increase the pressure on myself to make the most of it. This can get a bit recursive, which is, ah, in the name I guess!
How was the week?
Overall, this week was pretty good. I was sick for a lot of the week (the joys of a toddler just entering preschool for the first time 🤒 ), which put a damper on my plans from last week. The biggest wins of the week were learning and being kind to myself.
This week I had planned to get a lot of programming done. I got some done, but learned more than I maybe expected to, especially about myself and about pair programming.
Here's what I did this week:
- Had 6 coffee chats ☕
- Had 6 pair programming sessions, a mixture of working on my projects and working on other folks' projects
- Did some pair blogging, which was a fun and productive experiment!
- Went to a few events, like the Red Book reading group, a homelab group (a blog post is coming on my homelab soon 😉)
- Figured out why egui wasn't registering clicks as I thought it would (if you nest widgets, you can only interact with the one of them, I think the outer one) which unblocks me for progress on this next week!
- Implemented COMMAND, ECHO, GET, and SET in anode-kv and tested the performance; it's okay and single-threaded throughput is 0.75x to 1.15x redis's, depending on the workload. This gives me a very good launching off point for measuring performance, profiling, and making data-driven improvements!
- Summarized a paper for Red Book reading group and presented it
- Setup my new server and got some automation running to provision VMs, yay!
- Scratched a personal itch and wrote a small Rust program to do a very specific task (filter a calendar feed to remove some cancelled events that showed up as phantoms in my Fastmail calendar) and got it into "production". From creating the repo to using it was ~2 hours, which felt fantastic. (Also the repo is 60% Rust and 40% Dockerfile, which I think is hilarious.)
Yeah, so overall, I think that I had a very productive week! I came nowhere close to the goals I wanted to get done this week, and I was productive, which means I was unrealistic, but more on that in the next session.
The biggest thing this week was all the pair programming. During pairing sessions, I learned things about my tooling that I didn't know. I learned about Rust features and Rust libraries that I didn't know. And I learned about little things that take us on tangents that are so wholly unrelated to programming, but just fantastic.
This week continued the unexpected side of RC for me: self discovery.
Pair programming is awesome. Before RC, I've been skeptical of pair programming. I've also been very afraid of it, as someone who is easily drained by social interactions. RC has flipped this on its head for me and showed me the joy of pair programming. I won't even say "pair programming done well," because I certainly don't think I know how to pair well yet. I think it's joyous when everyone is approaching it with kindness and openness. It's not always roses, but it has been instrumental in me learning so much this week.
I set too high of expectations for myself. Looking back at my list of things I wanted to do this week, it was way too ambitious: I wanted to implement a few redis features, benchmark them, setup a server, make an interactive GUI, implement an AI algorithm, write a blog post, finish another blog post, and pair program a ton. Yeah, that was not realistic. But is it a problem? In this context, in this week, it was not. I was able to be kind to myself and understand that not only was it too much, I was also sick.
In general, it is a pattern. I have a tendency to be hard on myself and set very high expectations for myself. The problem isn't necessarily the expectations, but if I make myself feel bad for falling short. If I just have high expectations, that can be an effective motivational device. So this week it worked out. Next week, I hope it does, as well.
What's next week?
I set too high of expectations this week, and it worked out. So let's do that again and play with fire, I guess?
For events/social things, I want to make sure that I pair program every day and keep having coffee chats. I have a few events I'm going to related to relevant topics. And I'm going to explore a few new ones that I wasn't able to make the time for this week! (I want to keep meeting more people who I haven't interacted with very much so far in the batch, and keep exploring different things!)
On specific projects, I do want to circle back to my chess programming and make progress on both.
For anode-kv, I want to:
- Finish up my VM automation for running benchmarks
- Benchmark and profile anode-kv and compare to redis under the same workload
- Make one improvement to performance based on data
- Learn to use rust-gdb and use it to find and fix a bug (I assume I have a bug to fix)
- Implement INCR and maybe some list commands (this will require me to refactor some of the storage layer to not just deal with
Vec<u8>, but to have some tracking of what type a value is)
For patzer, I want to:
- Get the GUI interactive for humans, so you can play against a bot
- Implement one search algorithm like minimax (which will also require a basic evaluation function)
This is... a lot. I think there's a chance I will complete it all, but a relatively low chance. I'm okay with that! By giving myself a menu of things to work on, I can do what captures my interest at any given moment.
Alright. Time to get some rest (or finish up another blog post). If you read this far, hi! Thank you! I appreciate you!