So I’ve been at Canonical for 6 months now, and after six months into my first full-time remote gig, and while I knew it was going to be different than office work, you never really know how it’s going to play out. Needless to say, there are some lessons I expected, and some that were new, and it’s worth examining them. Continue reading
It’s been about half a year since I wrote my last post, and I wanted to reflect back on some of the goals I had set for myself. In a nutshell, I wanted to 1) Grow HSV tech community, 2) learn some cloud technologies, 3) build something, and 4) read more theoretical books.
So halfway through the year, I feel like the HSV tech community has been growing, and HSV.py is still going strong. I still have a surprise coming, so stay tuned. But what has derailed most of my other goals is that in April, I started a new job: Software Engineer at Canonical!
I’m working on the CPC team which focuses on public and private cloud deployments. I mostly do Python library work and Jenkins pipelines to transform Ubuntu images to their suitable cloud images. It’s been great, because 1) I can work in Python and 2) I am getting to learn about a lot of cloud technologies along the way.
But, this is only my third ever job. The first time I moved jobs, I had 3 years of experience; now I have 12. I feel like there is a lot of advice out there for when you are new and swapping jobs, but not so much when you’re a senior engineer. Here are some tips I’ve discovered in the three months of working there.
So for the first time ever, I have finished Advent Of Code.
- Man it felt good to complete it AoC for once. Finishing that last challenge, watching the animations, and reading the final piece of the story gave me such a feeling of accomplishment, that I just had to step back from my computer and grin.
- There were some really diverse challenges that I had fun working through. Recursive solutions, mapping 3d space, transpiling custom assembly, I definitely had my work cut out for me.
- I got to learn way more than I thought I was going to in Python. I knew itertools was awesome, but I got to learn some new things (accumulate, chain.from_iterable). I also got to play with Counter for the first time. And I got to play with mypy, which gives you type annotations.
- Not everything was hunky dory. For instance, Day 15. Day 15 took me days to do. There were some very specific edge cases that I had to work out.
- Day 17 was tricky too, but I ended up liking that one, but it took a little bit to figure out as well.
- Day 23. Oh Day 23. I almost quit due to day 23. I had an idea, but I knew it wasn’t mathematically sound. I didn’t understand any of the things they were saying on reddit for this problem. Eventually I figured out how to make my solution work with the math, but it was rough.
So I’ve decided to do Advent of Code this year again (no surprise there), but this time, I’m encouraging everyone in HSV.py to join me as well.
I’ve completed 8 challenges, and thought it was time for a recap. I plan on breaking down solutions day by day, and then ending with some lessons learned that might help others. I compete each night with ugly hacked together code, then work on refactoring it the next day. What I share is the refactored version (Don’t think I spit something like this out in just an hour). You can find all my code on my GitHub
So let’s get started.
I’m at DevSpace 2018 right now, and just participated in a Open Space about Lunch and Learns. As I have previously written, I am the curator for Tech Talks at my workplace. Instead of talking about how our tech talks work today though, I want to give my ideas on how to start up a tech talk or lunch and learn culture from absolutely nothing.
Remember, you don’t have to have something fully launched day one for it to be valuable. Be Agile. Create your MVP for Tech Talks, and iterate on what works; throw away what doesn’t. Continue reading
So I officially have RCFC 1.0 released (the phone app and the Python library). I’m really happy with how it turned out, and I wanted to share some of the lessons I learned along the way.
Lesson #0: Know your reasons for working on the side project
It is very important to be honest with yourself before you work on a project. Why do you wan to work on it? There are many motivators, be it money, fame, or experience, but be clear with yourself. For me, I wanted to see if I could solve a problem, but I treated this as a learning project. It was okay if I failed. I wasn’t planning on making money with it. I also wanted to see if I could build a reusable framework that others could learn from. I wanted to know how to build a phone app. I also was working on learning circuit design, and I needed a motivation to learn. This is why I worked on RCFC.
Additionally, recognize your constraints. You will not have a lot of time to work on a side project. So I wanted to put in some upfront effort to minimize ongoing maintenance. With RCFC, that meant that in order to update functionality, I only had to write a Python function, not update a web framework or phone app (Hooray open closed principle).
Another two days down, no sweat (minus a segfault on day 6, but shhhh.)
Day 5’s challenge was to take a list of jump offsets and determine how many jumps you need to take before exiting the block of code (modifying the jump offsets each time)
Day 6’s challenge was to take a list of memory banks, run through a balancing algorithm regarding allocations, and count how many steps until an infinite loop.
Let’s take a look at the code, as they clock in at <40 lines apiece.