Meet Anna Henningsen - Core Contributor & Engineer

anna.jpg

Title: Senior Full-Stack Engineer

Company: MongoDB (formerly NearForm)

Programming languages and skills: C++, JS/TS, Python, x86 Assembly, Shell

Languages: German, English, intermediate Turkish

Years of experience: 15 programming, 7 professionally

List of talks:

Favorite customer issue to solve: I don’t really work with customers in the traditional sense… One thing I remember having a lot of fun debugging was that dns.setServers() with an empty servers list used to be able to make Node.js crash :)

Favorite personal project: I’ve written an implementation of the Levenshtein distance computation in C++ that makes use of some special CPU features when they are available, that was fun to write.

Favorite enterprise project: I think this would be something that Worker threads in Node.js qualify for.

Favorite song: The Ladder Song cover by Lorde

Hobbies: I play soccer and go on longer bike rides.


INTERVIEW:

Let’s start with a little introduction, who are you and what do you do?

Hi, I’m Anna and I work for Node.js, that’s pretty much it laughs. I’m also on the Node.js Technical Steering Committee (TSC), the group that makes decisions and is responsible for the Node.js Core project.

How did you get involved in Node.js to begin with?

Around 2012 a couple of people from highschool wanted to work on a project and asked me to get involved, and that’s where we started using Node.js. I had a problem with the software we were working on and it was easier to write a patch of Node.js to figure out what was the problem rather than trying to debug my own code.

What were you building at the time?

It was a stock trading website game where people could simulate a stock trade to some degree.

That was your first contribution to Open Source?

I had maintained Open Source libraries before, but it was the first big Open Source project.

Let’s go back a little bit, how did you get started with JavaScript in the first place?

JavaScript is a different story, I think I was 12 years old, and I have coded on this old commodore 128 computer from the 80’s, with very old versions of Microsoft basic. It was possible to build things that way, and I wanted to build programs for actual computers. JavaScript was a nice language to start with, because when you wrote code for the browser you can very easily see immediate results, and you can show other people.

So you started programming when you were 12, did you pick it yourself or it was something teached in school?

I was mostly interested in seeing how things work and it made me wonder, can I build these things that other people have built? The commodore 128 computer came with a reference manual that had the complete language listed as a printed book, and that was something I could get started with very easily.

Where does your interest in computers come from to begin with?

I didn’t have a lot of friends at that age but I had a natural curiosity about these things.

What would you say is one advantage of working with Node.js Core?

One thing about the Node.js ecosystem is that it feels very natural to contribute to Open Source; if you have a relatively self-contained part of your code, you can put in a package and publish it to npm, that seems natural to me, so I did that a couple of times.

One thing that was particularly helpful to get into Node.js core later was maintaining bindings to liblzma lib-z which is a compression library, it uses a .xz format, so that made it very easy to contribute to the zlib parts of Node.js

What were the steps to maintain a library to get to the TSC of Node.js?

The first step was to do that patch to Node.js and after that I built a copy of Node.js master locally and I decided to use it as a Local Node.js developer version. At some point there was some change that was made in the buffers internals of Node.js, and because I was using Node.js master, I actually caught a bug with that before it was released, which was really nice.

At that time I didn’t understand much about the code. I did a PR like “hey I have this test case if you want it and it’s failing” and after that I got more involved, I started contributing to the zlib parts. I started watching leadership records.

Did you go to college?

My first full time job was the side project I was building with the people from highschool, so it was not a paid job. I was still a student, I finished my bachelors degree in math and I am working full time now.

Wow so you study Math… what interested you in Math?

Well, I started studying computer science for a year, and at the university I had the opportunity to take the math classes for math students, which had some extra stuff. I enjoyed that and the people a bit more, I felt comfortable. I didn’t want to do any hardware stuff.

Do you apply any of your math knowledge in your daily job?

No laughs. I have had a problem where I have to solve the system of linear equations and that was the most complex thing, and that’s just highschool math.

What did you wanted to be when you grew up as a kid?

I can’t remember but apparently I told my parents I wanted to be a gardener because flowers grow on their own. I might have had some misconceptions there.

That’s so sweet, do you still garden these days?

No, not really but I have been getting more plants and I still want to keep more in my apartment.

What was the most exciting project in Node.js that you ever worked and why?

It’s not actually a Node.js feature, it’s related to the Node.js tests, we try to avoid to talk to Internet servers because they are out of our control, I wrote a small mock DNS server for Node.js just for the test suite, and that was a fun project.

What was the thing that made it fun?

It was something that you don’t get to do usually, writing an implementation of a protocol that just works.

Would you say that learning new things and solving interesting problems is something that you enjoy?

Yeah, one thing that I like more than implementing features is actually debugging, you know, taking a puzzle and solving it, that’s a very fun thing to do.

What has been your least favorite thing in Node.js?

Today I was debugging a memory leak related to the implementation and API which is super specific. I feel that’s one of the parts in Node.js that has been way over-engineered, and I dislike that. Usually when I don’t like something about Node.js I can do something about it, that's one of the very nice things about Open Source Software, but with any API that has been exposed, it’s not possible to change it and it can get quite complex.

You focus 100% on the Node.js project, what’s the main project you are working on right now?

I don’t have any bigger things, my manager James Snell is working on the QUIC implementation for Node.js and I support him with that, mostly I’m taking care of old things that happen inside the core repo and little things that I think could be improved.

Everyone that we have interviewed so far makes it sound so easy to get involved in Node.js for an Open Source perspective. What would be some advice that you can give to someone that is considering to start out in this area?

Whether that is easy or not depends on where you are coming from, because if you want to contribute a little to Node.js I’m sure you will find something if you want to. But if you actually want to contribute for a longer period of time, more consistently, you really need to have some time to invest in there and patience for long discussions.

Most of the open issues on the Node.js core issue record are open because if there is not enough information and somebody has to put the work in to figure it out.

Do you need to have a passion?

If you don’t have a passion or if you don’t get paid to do it, you will probably lose interest after a while.

What’s the thing you enjoy the most working on Open Source?

I enjoy working with the people of Node.js core, I also enjoy very much that it enables me to go to conferences and share the things that I’ve learned.

What do you enjoy about speaking at conferences?

Sharing my knowledge especially when it is something I’m excited about, or that I find interesting and that I think other people might find interesting as well, and definitely the community aspect of it. Meeting people, talking to them over things that are completely unrelated to tech, and sometimes about tech things. A lot of ideas for features that could be brought into Node.js came from talking to people in conferences.

How many conferences have you attended?

I have a list that I keep, including meetups I have given 21 talks so far, from 2016 until now.

The most fun talks I’ve given are about live coding implementing features in Node.js.

What keeps you motivated to work on Node.js?

The community and the technological challenge. Having the opportunity to improve the developer experience for thousands, maybe millions of people, that’s a very unique thing, and I think it is worth a lot.

Node.js core provides a lot of technical challenges, you can always go from one area to another if something starts to bore you. I have contributed to V8 and Libuv, there are so many parts of Node.js that you can contribute.

Is there anyone in Node.js that you admire a lot and have you had the opportunity to work with them?

It was helpful to see some of the trans people that were around in Node.js core at the time, I felt comfortable. When I started it was mostly npm people and I generally look up to them, but i didn’t end up working with them a lot.

Do you feel that the community was welcoming enough for trans people, and did you feel that it was worth the time investment?

Node.js has had its drama in the last couple of years, I feel Node.js has made big steps towards being more inclusive in a lot of situations. And I feel pretty comfortable where we are right now.

How long have you been working with NearForm?

Since October 2017, it’s my first full time job.

Thank you Anna for this wonderful interview, hopefully more people can get inspired and contribute to Node.js and good luck in your new job at MongoDB!

profile.jpg
Liz Parody

Head of Developer Relations at @NodeSource, organizer of @jsconfco and @pionerasdev.@lizparody23