Tagged as

A Coder Interview With Oren Eini

Welcome to our continuing series of Code Project interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we talk to Oren Eini, perhaps best known for his work on RavenDB.

Welcome to our continuing series of Code Project interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we talk to Oren Eini, perhaps best known for his work on RavenDB.

Who are you?

My name in Oren Eini, I am also known under the nickname Ayende Rahien for reasons that are too long to detail here. I live in Hadera, Israel (about an hour north of Tel Aviv) and mostly work there as well, although I tend to travel quite a bit.

Mostly I work on our NoSQL document database: RavenDB. Job title varies from "Wizard" all the way to "Oh No! Him Again."

After really getting the problems of developers working on relational systems, I decided that I have had enough and set out to write a database that wouldn’t make me want to jump out of a high window at every opportunity. That is how RavenDB was born. It is a database that was written by developers for use in actual OTLP applications, and it make it a joy to develop applications because it gets out of your way.

Most days I start by going over the mailing lists for our products, answering support questions and then either doing bug fixes or working on new features .

What is your development environment?

I am mostly developing using C#, with VS 2012. We are still working on .NET 4, but we just added the async targeting bridge to make things easier.

My current machine is a quad core 3.2 Ghz machine + 8 GB RAM with SSD drive. I don’t care much for the CPU, but the RAM and the SSD drives are crucial for good performance.

With regards to tooling, I can’t say enough good things about JetBrains, we use [ReSharper](http://www.jetbrains.com/resharper/, YouTrack and TeamCity for all our projects. They are effective tools that get out of your way.

What new tools, languages or frameworks interest you?

I like working with C# 5’s async, and I am probably going to do evil stuff there.

Node.js is getting a lot of noise, but when I looked at it previously, the major point was the event-driven nature. Now I want to look at that from an architectural point of view. More specifically, how the limits of JavaScript force a common architecture of single function per module.

What is your coding pet peeve?

Pet peeve? SELECT N+1 is right there at the top of the list, but error handling via catch() {} is what will get my blood boiling

This failed with a null reference exception, and I just couldn’t figure out why. For my C++ eyes, the form variable should have been allocated using the default ctor.

It took me a while to grasp that this is actually a pointer. Once I got that, which took more time than I am willing to say, I wrote the exact same program in C++.

In C++, I got:

Invalid pointer access: 0x01230accd

After comparing this to the C# error, which told me about a null reference exception and in which line. I knew where I wanted to be.

How has the developer community influenced your coding?

I think that it had a lot of influence. I started out working on my own, so a lot of the things that I learned were from off the ’net. Even today, you can pretty much tell whatever I am doing because it is in my blog. A lot of my early projects were heavily influenced by that.

We use GitHub for all of our projects, and I can state that it has easily changed the way we are working with software.

The thing that I dislike the most about the dev culture is the tendency to grab into something - today it is probably CQRS/event source and few years ago it was DDD and before that TDD - and declare it to be THE thing you need to be a good developer. Usually without any need for additonal context.

What advice would you offer to an up-and-coming programmer?

Go and re-read the books about the basics. From how to implement a memory manager to networking protocol to case studies in project failures. Having good grounding is the most important aspect in being a developer not just for a year or two, but as a profession.

Comments and Discussions

Yes - in the office we've spent an awful lot of time discussing Ayende's posts and RavenDB itself (and Lucene).

Seeing under the hood, and seeing the reasoning behind decisions (or even better: seeing that there is actually a major decision to be made on something that at first glance seem obvious) makes wonderful reading.