This post is part of Series: Being a programmer again
Quick recap. I was a programmer for 12 years. I then switched to support and people management for 12 years. I now want to go back to programming for the rest of my career. I started working at Zed Industries on January the 17th, helping build the Zed editor and be a Rust programmer wannabe. Zed is a blazingly fast and collaborative editor for programmers. End of June is going to be the judgment day. Will I remain part of Zed? Stick around to find out.
What happened since last time
It’s been a while, indeed. A month! I am trying to find a good balance between writing often (with the risk of being repetitive) or writing less often (with the risk of you all losing interest). I admit this post falls a bit on the latter end. But not without a good reason. A few days before my starting date, my mother in law died. As a family we had to deal with grief, and on top of that, all the administrative stuff that come along with a death.
I also started working at Zed Industries eight days later! Talk about a mix of emotions, right? I have to admit, it has been a challenge. I’ve directed all my energy to make sense out of the vast new knowledge that’s entering my brain. And also trying to be communicative internally so that my colleagues start learning about who I am. And that has taken from the energy required to share an update like this one.
I am now on my fourth week, and I am happy to share I’ve contributed at least 8 different things to the product. Mostly bug fixes. I’ve also moved our public docs over to GitBook.
Here’s a small bug I fixed yesterday:
And yes, for those wondering, I did use StackOverflow to figure out the solution 😃.
Life is fragile
The death of my mother in law reminded me how fragile life is. You never know how much time you still have on this planet. It reinforces my choice to do what I want now, rather than later. We often think the timing will be better later. But it never feels it is. So here I am, doing what I want, right now. And if that’s a bit theoretical, here’s my life progress bar in the context of a prediction that I am going to live until I am 70. A bit pessimistic if you think what the current life expectancy is. A bit optimistic if you consider various factors that can shorten your lifespan:
The length of the rest of my life is a bit scary when you visualize it like that. I don’t want to sound pessimistic, though. This only helps me stop spending my time on bullshit. Yes, I am a bit more selfish than in the past. Yes, I am a bit more reckless. Yes, I do say no more often. No, I haven’t stopped trying not be an asshole. I do hope this exercise helps me more than making me sad.
It is not easy
I am not going to lie. Starting over again with a new programming language, after 12 years of not coding full time is not easy. I have been spending most of my time, learning, and staring at code not knowing what it does. I feel my brain works at 1/4 of the speed of more experienced colleagues. Zed Industries is all about pairing. And I’ve now paired with 5 different people. I often get this feeling that I am slowing everyone down.
My four main problems so far are:
- Not knowing Rust well enough
- Not knowing Zed’s codebase
- Not always understanding how the product itself is expected to work from the user perspective
- I am in Europe and most folks are in North America, so quality overlapping is difficult
The first two are intertwined. When you don’t know Rust well enough, and you read the codebase, it’s not always clear what’s Rust, what’s coming from the core library, what’s a third party library, and what’s part of Zed itself. This creates a chicken and an egg situation where you don’t even know which part of the whole is involved so that you can go and learn it. My strategy there is to keep on consuming as many resources as I can find on Rust. As that can unlock the chicken and egg problem longterm.
Number three is the easiest to solve, because I can just try Zed myself or ask around.
The last one, can be difficult. The company’s culture favors pairing a lot. Which is great when most of the folks overlap in close enough timezones. I am in Europe, though, and I only have one other colleague near me. Which is a blessing, but if I want to pair with anyone else it tends to be more difficult. To pair with anyone else, I have to work pat 5pm or 6pm, often until 9pm or even later. My energy levels are not the same that late in the day. This is a difficult problem to solve. You can understand that if you take a look at all the factors that add up:
- Energy levels
- Rust fluency
- My brain speed
- Not knowing the codebase well enough
- The nature of the product itself which often adds to the complexity
My strategy with this one is to start later and take more breaks throughout the day. But we need to fix this by have more folks in Europe if I am being honest.
Learning
After struggling a bit with larger tasks, I decided it might be better to figure out how to fix smaller issues. Here are some things that are a bit better when tackling smaller fixes with a not so well known codebase:
- I feel I am making some progress
- I am more motivated because of the small wins
- I am going at my own pace
- I am not slowing others
- I can stop and read about things I don’t understand
- Investigating bugs is often easier than writing new code
Just to expand on that last point. Often investigating a bug, means I am looking at existing code. Understanding how existing code does not do what’s expected. In what way does it fail? The solution is tweaking something existing most of the times. Yes, you need to write some new code occasionally. But most of the times, it’s all about improving some pre-existent code. Or even removing it.
I can’t always only fix bugs of course, but it’s a good balance between staring at the screen and not doing anything, and writing the next best killer feature for Zed. With the added bonus of keeping on learning.
Heartbeats
Heartbeats is what I use for updates. An update is personal writeup that I post in a place accessible by anyone in the company. I have borrowed the term from Basecamp. The name doesn’t matter as much as the practice, though.
I like written communication a lot. It is like a journal. I get to leave context on what’s happening, the decisions I have made, how I feel, and more. Especially in a fully remote company, this is very important. I have written two updates since I joined Zed Industries, the process has helped me organize my thoughts and understand how I am feeling. It’s almost as if I am doing a one-on-one with my manager, but instead it’s out in the open 😃.
The cadence is not as fixed as a one-on-one though. It’s more based on whether I have something meaningful to share. So, I’ve written 2 in a four-week span.
Rust
I want to keep my posts a bit more general, because I know my audience has a mixed background. This means I don’t want to have too technical posts. But I still want to add some sprinkles here and there.
Rust is difficult to learn. But every little win makes you feel pretty good.
One of the most confusing things coming from languages like Ruby, Elixir, and other higher level languages (especially those with a garbage collector) is understanding why the heck Rust has two kinds of strings: &str
and String
.
I am not going to fully explain this here, as I am still struggling to fully understand it myself. But I will link to a video that I feel it finally helped me get closer to conquering that part of the language:
String
vs &str
What’s next?
We have a recently introduced practice called “Quality week”. Every 6 weeks, give or take, we all spend a full week on quality. We fix bugs, and polish Zed. There’s a curated list of quality week candidate issues that we can then pick from. We already had one, and next week is our next one. I am looking forward to it.
I hope you enjoyed my update. Off to the races, and see you in the next one.
What are you up to Petros?
Staying calm. Indie 2D retro style game dev wannabe. Check what I am doing now.