“Accomplished X by implementing Y which led to Z.”
— Gayle Laakmann McDowell, author of Cracking The Coding Interview

When I interviewed for software engineering internships this past fall, my open source contributions helped me stand out from the crowd.

Me (Ethan Arrowood) attending a presentation hosted by Accelerate Innovation & Entrepreneurship Center

Who am I?

I am a 2nd year student pursuing a computer science major, as well as minors in applied mathematics and business management at Wentworth Institute of Technology (WIT) in Boston, MA.

My main programming languages are JavaScript (Node.js & React.js) and Java. I’m also familiar with Python, R, SQL, NoSQL, MySQL, Firebase, HarperDB, and MongoDB.

Technical Interviews

You can find so many resources on how to prepare for a technical interview. All of them will tell you to study your data structures and algorithms, and definitely do not forget that lovely Big O notation. Some articles will also tell you to have side projects and put them in a wonderful virtual portfolio. I’d like to share one more thing you can do to set your self apart, contribute to open source projects.

Contributing to Open Source

A snapshot of my GitHub contributions this past year*

Many of my interviews began by discussing my contributions to the freeCodeCamp curriculum and guides projects as well as some higher level Git concepts such as handling merge conflicts, cherry-picking commits, and managing commit history during squashing.

It is extremely easy to get involved in the freeCodeCamp open source community. There is an incredibly active Gitter chat room and plenty of exciting projects being developed. If you are looking for an easy introduction to open source development join the Gitter chat and you may even see me there!

Another popular interview topic are my open source side projects. My first NPM module, harperdb-nodejs-driver, was a very common discussion topic. I learned a lot through developing this such as unit testing, code coverage, deployment scripts, branch management, and automatic builds. It still needs some work, but it introduced me to a lot of niche open source development practices.

Finally, in almost every single interview, I was asked about my contributions to the React.js, Node.js, and Fastify projects. Contributing to larger projects can be difficult but it is not impossible, and in fact a lot of developers love it when new contributors want to contribute to their project! Below, I’ve broken down how I got involved in contributing to these 3 projects.

Node.js

My first contribution to the Node.js project was in October of 2016 when I attended the Node.js Code & Learn at the Node.js Interactive North America conference in Austin, Texas. I was only a first-year student and my university helped pay for part of the trip. The conference was such an incredible experience that I attended it again this year in Vancouver, Canada. I have multiple merged pull requests on the Node.js project, a majority coming from the Code & Learn event. Recently I’ve been trying to branch out and find other open issues.

A Twitter screenshot of me reaching out for open Node.js issues. Shoutout to the incredible Rich Trott!

React.js

React.js is my favorite framework. It was fun to learn and it is even more fun to build applications with. Even more so, the React community is one of the best I have ever been apart of. One of my biggest developer role models, Dan Abramov, is very active in the React.js open source community and I’ve had the incredible opportunity to work with him directly on multiple issues.

I’ve been able to find open React issues by doing 2 things:

  1. Following the React repository and looking at every issue opened. If I think it is something I can handle I ask if I can work on it and see if there is any other good information I should have before starting.
  2. I follow as many React contributors I can on Twitter and keep a lookout for new, exciting projects as well as any open issues. Sometimes Dan will post ‘good first issue’ tweets!
Good First Issue tweet by Dan Abramov

Some other awesome React developers to follow include:

Sophie Alpert Ryan Florence Sebastian Markbage Brian Vaughn
Andrew Clark Michael Jackson Cassidy Williams Kent Dodds

Also check out this list put together by Dan himself.

There are many incredible React projects to contribute to as well including React Router, Redux, React Native, React VR, and Create React App.

Fastify

Fastify is a fast and low overhead web framework for Node.js. It is inspired by projects such as Express and Hapi. Created by Tomas Della Vedova and Matteo Collina. I was introduced to the project during the 2017 Node.js Interactive North America conference where I met Matteo. Matteo encouraged me to dive head first into the project. He also shared some incredible tips for contributing and learning new things:

  • Do not be afraid of failing
    There will be times when you get things wrong, or you simply don’t have the skill set to complete an issue. This is perfectly okay and many project maintainers will be there to support you and show you the way.
  • The only way you will learn new things is by putting yourself out there
    When I first contributed to Fastify I knew very little about back-end servers. From working on that project I added many new skills to my tool-belt and have a significantly better understanding of the back-end ecosystem.
Seriously. Don’t be afraid of making mistakes. They happen all the time and you will learn from them!

Conclusion and Take Away

Interviewing is an exciting experience and will be different for everyone. Open source software is a growing community, “GitHub reached 24 million developers working across 67 million repositories” (GitHub).

Capitalize on your skills and leverage your experience whenever you can. Don’t be afraid of making mistakes (I made one in the middle of writing this article!), and make sure to learn from them. Even though the open source world may seem scary, be brave and remember there are other developers out there looking to support you!

*My contribution graph is sparse in July and August because during the summer I was a summer camp counselor and did not spend much (if any) time on my laptop. I would encourage everyone to take time off every once and a while, I promise it won’t hurt your progress and will actually feel really refreshing!

If you have any questions feel free to reach out on Twitter.

You can also find me on GitHub and check out my website ?

Happy coding ? and good luck on your own interviews! ?