How I Got Into #Node: Uttam Pawar

After a frustrating experience at a startup, Uttam Pawar (a software engineer at Intel) decided to learn more about web and mobile development and got into Java, Flex, Rails(RoR) and eventually Node.js.

Uttam now contributes regularly to Node.js and is focused on the platform for his job as well as in building small apps for his family to stay better organized. We recently sat down with him for our How I Got Into #Node series to ask him about how he got into the technology, his background as an engineer, and his suggestions on how to get started in contributing to the project.

Uttam far left with his colleagues at Node.js Interactive.

When did you start getting into programming in general?

I graduated with a major in computer science from Mumbai University in 1995. Immediately after graduation, I started as a software engineer working on Digital Equipment Corporation’s (DEC) compilers and interpreters. This is where I got my first taste of real programming — especially system software. My first job involved fixing bugs for the users of the DEC compiler suite. Since then I’ve developed or maintained banking and telecom software.

I’ve since fallen in love with the open source software philosophy and started contributing to various projects. So far I’ve contributed to Linux kernel, GCC, the Open64 compiler toolchain, and Node.js.

When did you start using Node.js?

Up until 2013, I’d always worked on system software (due to my job requirement), and was never exposed to the web-based software development experience. Then in 2009–2010, I started working for a startup group to develop web-based software using Java and Flex technologies.

Since I had no background in web development, I got the responsibility of administration of our Linux based machines. Our group had one Java and one Flex developer. After working on it for about a year, the development team couldn’t develop the software as planned and decided to terminate the effort.

This experience was painful and frustrating to me because I wasn’t able to contribute anything to the overall development effort. So around 2013, I decided to learn about web and mobile development and tried Java, Flex, Rails(RoR) and Node.js.

What intrigued you about Node.js or what prompted you to use it?

My first good experience with web development was using the RoR platform. It is a beautiful framework, and a simple language to understand and write code. I wrote my first web application using RoR, but very soon I discover quite a few performance issues after deployment. This made me look at the Node.js platform.

I totally bought into the philosophy of single threaded execution of runtime (simplicity) with really good throughput performance. The only hurdle was to learn JavaScript. I found understanding JavaScript to be easy when writing small functions, but very confusing when writing a large amount of code.

For most people who know JavaScript, they can start using Node.js very easily, but for me it was a little different. The use of Node.js made it easier to understand and write code in JavaScript. This reduced my learning curve quite a bit. Since then I started using the Node.js platform for work and pleasure. Currently to keep up with performance tricks and techniques, I follow Brendan Gregg’s blog.

When did you start contributing to Node.js?

I started contributing to Node.js at the same time I started using it. I’ve been at Intel as a software engineer since 2012 working on various software stacks such as Android, PHP, JavaScript, Go and Node.js runtime optimizations.

As a performance engineer, I wanted to measure performance of the Node.js runtime on Intel platforms with various other platforms, but there were no standard benchmarks available to achieve this. So I started attending the Node.js Benchmark Working Group meetings, and connected with people who also are interested in performance.

I proposed having a standard workload to address various use cases of Node.js, such as very common single instances and multi-processes via the use of Cluster.js and a microservice model. My first contribution was the development and contribution of the Node-DC-EIS workload into Node.js Benchmarking, which addresses some of the most common uses of Node.js applications.

Since then I issued a few PR’s fixing test cases. I’ve also found it valuable to attended Node.js conferences to meet other folks that are involved in this effort, like Mike Dawson, James Snell, Matteo Collina, and many more.

Why do you continue to contribute? And how do you contribute?

I continue to contribute because I really care about Node.js performance. I feel like it’s the easiest platform to learn for new developers with the best runtime performance. I’ve seen people using Node.js only to create prototype application(s) and then moving onto using Java or such in production. I want to contribute to make sure performance (scaling) and security of Node.js runtime is of high quality and to make sure people stay with Node.js all the way to the deployment in production.

Currently I attend regular benchmarking meetings. Monitor any performance issues reported on the Node.js Issues and look for opportunities to fix them. At Intel we have a team working to improve performance of the Node.js runtime (libuv, V8, http_parser, etc.) and highly used npm modules.

One of the our achievement is that we have developed a bcrypt.js equivalent module with higher performance than the default version. We have developed “Server Side Rendering using React.js” workload, which very soon will be pushed into Node.js benchmarking to address yet another use case important to the end user.

If someone is interested in contributing, what advice might you provide them?

If you are interested, the first thing you can do is join one or many of the working groups that support the overall project that is Node.js. For example, if you are interested in Node.js benchmarking, start attending one hour bi-weekly meeting.

Another easy way to get started is issue a PR related to test case fixes. You can start @ http://nodetodo.org/. This site provides the easiest way to get familiar with the complete process of submitting a PR using a real issue. The process includes forking the project, cloning it, creating a working branch, making change(s), build, test, etc.

You can also look into individual software components of Node.js such as Google’s V8 or Microsoft’ Chakra JavaScript Engine, libuv library, openssl library if you are interested in getting more involved.

How do you use Node.js (either at work or outside of work)?

At work I mainly use Node.js code base to look for ways to optimize Node.js runtime. I also use a lot of npm modules. I do local builds, run various benchmarks such as Node-DC-EIS, AcmeAir, and internal core benchmarks that measure runtime performance. I also look at the impact of event driven programming models on the platform as a whole with special focus on CPU.

I do use Node.js in my spare time to do small projects at home such as Todo lists and photo sharing applications hosted on my local server for the family.