A few months ago, I was halfway done with my first year of college. I was sitting in my dorm room reading Hacker News when I saw my first “Who is hiring” thread. I figured, maybe I could find an internship! I searched for “Charlottesville” and found this.
Let’s see… databases? Check. Go? Check. Analytics? Interesting! VividCortex sounded like a perfect fit for me. I sent out an email later that day, and here I am a few months later!
I had a great summer interning with the VividCortex team, and there is honestly a lot to say about my experience. I’ll try to point out some of the more significant parts in this post.
What I worked on
The code base was really intimidating at first. It was like looking at the Linux kernel git repository and then trying to figure out what you could do. I had no idea how anything worked, and there wasn’t really any documentation on it. So, I just said that I’d prefer to work on a separate project that didn’t touch any of the main code, because I didn’t want to break anything.
I started to work on separate things. I spent a week learning about metrics, read about histograms, and wrote a histogram package for Go. I also wrote a few tests for existing packages.
Eventually, I was given the task of writing a new configuration package. It was a standalone project at first, but eventually I found myself replacing the existing configuration code with my replacement. Now, I think all of the programs we write use that package.
Lately, it’s hard to say exactly what I work on. We have many issues opening up on GitHub, and I’ve been assigning to myself whatever seems doable for me. Overall, I think I’ve been doing a lot of overhauling. I’ve moved a lot of code around, tweaked types, and tried to get around CircleCI’s quirks.
What I liked
During my last internship, I never got to work with the main code base. I don’t think I was qualified for that. At VividCortex, some times aren’t as complicated and it’s easier for someone without a lot of experience or a rigorous computer science background to get into. I liked contributing to the main product.
I also had an opportunity to work with Go for 40 hours a week. The more I learn about Go, the better it gets. It’s just a lot of fun. Of course, I’ve learned to really dislike parts of it as well, but overall I think it’s my favorite language to work with.
I liked working with people who are passionate about open source software. VividCortex is a company capitalizing on open source software, and it’s really great that we’re giving back.
What I didn’t like
Writing tests is tedious. Sometimes, you get the feeling that something just works and you don’t really have to write tests for it. However, I was surprised when I found a /proc/ parser issue. I thought maybe my tests were wrong, but no, the main program was incorrect.
I also didn’t like how there was so much inertia to get into the code. I think part of it is that it’s just how things are, but another part is how the code base was structured. It was a monolithic repository without much documentation. Things are a lot better now. There’s more documentation and everything is organized much better.
What I learned
I never worked with anyone remotely before, and the fact that I’ve been working with developers on another continent is interesting! I learned the pros and cons of having a distributed team, and I think it’s something worth experiencing.
I think the most important things I learned were more about development habits than new subject matters. Programming is one of those things where you get better and better with practice, and it’s even better when someone more experienced than you can give you tips. There’s a lot of stuff I can mention: git workflow, Go tools, bash scripts, deterministic tests, etc.
There are definitely some things you learn over a few months of interning that you probably will never learn with a 4 year college degree program. I don’t think I can pinpoint them, but I think interning is a great idea.
Tech scene in Charlottesville
When I applied to the University of Virginia, I had no idea that there was a tech scene in Charlottesville. Now that I’ve gotten exposed to it, I’m surprised that there’s so much of it around here. I’m looking forward to getting involved with initiatives like Hack Cville and the Neon Guild.
Working with Brainiacs
The VividCortex team is great. I’ve learned a lot from the other developers and since the team is relatively small, it’s easier to get to know them better individually. The guys know a lot about what they do, and they’re really good at it. A few of them give talks at conferences, and they’re also active contributors themselves to open source.
One of the more interesting things about working for a small startup is you get to witness how things come together. VividCortex just closed a round of funding, and while many just see a press release or two about it, it’s really impressive to see Baron and Kyle work insanely hard to get things done.
Overall, it’s been a really productive (and fun!) summer for me. I had a great time.