My Microinternship Experience

A couple weeks ago I did a “microinternship”. It was supposed to be a two day trial to see how I worked on a small project I was given at a company. They let me go at the end of the first day because I was struggling being productive in the codebase.

Background

I graduated about a year ago with a BS in physics. In college I ended up making friends with a number of CS majors, and now most of my friends have ended up being software developers.

I posted on Who Wants to be Hired in Hackernews, and ended up subsequently receiving an email from a small startup in California (not the Bay Area).

I had noted in my post that I already had some interviews in the Bay Area, and was hoping to schedule some more in CA.

Screening

They did two technical screens, a couple simple physics/geometry questions, and a simple coding question (find two numbers that sum to k). Something they did not screen was my C knowledge, which turned to be an issue. (I don’t know if I gave some false impression of my C knowledge, and tried to ask about it. They seemed to claim that it was just some sort of mistake). The second screen involved some questions mostly about testing the system.

Given my background, I have a number of knowledge gaps that I’ve been trying to find and fill in over time, but it’s difficult to know they’re there. Once I know where they are it makes it reasonable to learn the required materials, and ideally get some practice. However, these gaps exist, and I am not always able to identify them.

The “micro internship”

It was supposed to be two days, and they gave me a small project to work on.

The issues came that 1) I’m not as familiar with C as I needed to be for this 2) it took me a while to realize I needed to look at capnproto documentation, which was hugely useful, and really helped me start to understand things. 3) they were using some custom socket wrapper things, which made it harder to understand.

There was also some miscommunication where something I was writing ended up in an if, which I should have checked if the if was actually being evaluated. This was a silly mistake on my part and sucked up significantly more time than it should have.

Another silly mistake for me was handling of the mutex, which I believe I screwed up at least once.

Where I could have done better:

  • looking at the capnproto documentation sooner
  • searching through the code more for examples of the socket usage

Some other things were, I haven’t had to handle any meaningful messaging, especially at a low level with my current experiences. This is definitely a gap I need to work to fill.

I talked over it with a friend, he believes that it should have been doable, and I’m inclined to agree.

Unfortunately, I didn’t even get to the python part, which would have significantly easier for me, and where I may have been able to show off my abilities more. Also, unfortunately I was significantly more comfortable by the end of the day, which maybe meant the following day would have gone smoother, but they decided to let me go.

Caveats

This was my experience, and I’m not able to talk about things that I don’t know I didn’t know, and I’m probably forgetting some dumb questions I had to ask. There might have been things I was doing wrong even though I had been able to get things starting to work.

Conclusion

It was a hell of a learning experience, and it felt bad to fail in such a ‘fall flat on my face’ manner. It feels pretty awful having someone tell you you did so poorly they’re cutting the ‘interview’ process from two days to one. That being said, I’m actively working on these areas of weakness so nothing like this happens to me again, and so that I am prepared to face future challenges.