Ayende @ Rahien

Oren Eini aka Ayende Rahien CEO of Hibernating Rhinos LTD, which develops RavenDB, a NoSQL Open Source Document Database.

You can reach me by:

oren@ravendb.net

+972 52-548-6969

Posts: 6,927 | Comments: 49,413

filter by tags archive
time to read 3 min | 427 words

Over two years ago, I started working at We!. I wanted to work there mainly because during the interview I was very impressed by the amount of knowledge that the interviewer had. Looking back on the last couple of years, it has been a very good decision. I had the chance to work on interesting projects, work with very smart people, and do some crazy things. Mostly, I got to chance to make a lot of mistakes, learn from then and then make another set of mistakes.

I also had a lot of fun, and the ability to say that I really enjoy what I was doing.

Recently, We! has made a shift in the direction the developer division is headed, and now intends to focus primarily on business solutions. This translate to Share Point and MS CRM solutions. I have no experience in Share Point, so I can't comment on that, but I believe that I expressed my opinions on MS CRM elsewhere quite clearly. The company is focusing on bigger projects, based on those platforms. Those are more profitable, but they are also of the assembly line variety, hook this, bridge that, fill in those gaps, etc.

My interest lies elsewhere. I am interested in building applications in agile fashion, using TDD, DDD and ADD. From a business perspective, We!'s decision is probably extremely reasonable and smart, but it is simply not what I would like to do.

I have been thinking about this for a while now, and I have finally made up my mind about it in the last couple of days. Unless something drastic changes, I intend to leave We! after we finish our current project (around January 2008, I believe).

What does this mean?

I want to take this chance and see how things are going elsewhere in the world, this means that I am leaning toward relocating. I have a good idea about what I want to do next, but nothing that is set in stone. I have already rejected a highly technical position, I am not interested in tech for tech's sake. I believe that I have enough knowledge and experience to handle most technologies. What I would like to do now is working in an agile environment, in an agile team.

I see the following options:

  • Independent consultant / trainer
  • Consultancy
  • Startup
  • Product team

As always, I am interested in your opinions in this matter.

Full disclosure note: I don't have a degree, which I looks like can cause issues when getting a work visa.

time to read 1 min | 59 words

This is just my own scale, but my criteria is that I get requests for finding candidates for a position that need this technology. Requests from the community that already using this technology doesn't count.

The trigger to this post is that I just saw a couple of requests that specified required knowledge in NHibernate / Active Record. :-)

time to read 3 min | 578 words

My post about two (PHP) code samples that I got from people that I interviewed got a lot of comments, so instead of answering them one by one, I am going to answer them here. The post had a two code samples, one from a coder with 8 years experience, the second from a sysadmin that wants to move to development. Suffice to say that the sample from the coder with 8 years under his belt is atrocious.

Mostly, the comments tended to be:

  • Why am I interviewing PHP programmers?

    My company is also doing head hunting / recruitment, interviewing people is part of the job.
  • The sysadmin code looks good on the surface, but it is has problems. (and then listing the problems, in many detailed and interesting ways).

    The sysadmin code is not perfect by any means, but it is structured, it shows basic understanding of how things work, and the rest can be handled. That guy can learn to write good code. That isn't code that I would write, or would accept in my projects, but that is a very good start for the first steps.

image But a lot of people said that the first code sample is a quick & dirty solution to the problem at hand, some actually took offence at the idea.

If I interview someone for a position that include working with code (in fact, if the CV include any programming language whatsoever), you write code, period. The reasoning is that there are plenty that can talk the talk, but literally can't code. And looking at your code means that you get a lot of insight on how that person write code and how they think.

Now, here is an observation, you tend to write code in the same way no matter in what scenarios you are. Writing sloppy code in an interview is something that is a strong indication for a sloppy coder. That is not the only indication that I use, but it is certainly a significant one.

Given a choice between an experienced sloppy coder and an inexperienced one, I know who I would rather hire.

Now, to those who claimed that such questions are insulting, I am usually trying to fit the question to the person that I am interviewing (so a team lead would get something more interesting), but the key thing to remember is that I am not looking at the solution itself, I am looking at everything that they have around that.

I want to say that code style isn't something that I considering, but that would be a lie. I expect that the candidate would have some sort of a code style, and that it would be internally consistent. Beyond that, I don't really care if it spaces vs. tabs and where the curly go. But if there isn't a coding style that the candidate adheres to, that is something quite alarming.

Oh, and here is a secret that would make the argument more interesting, I don't program in PHP. The last time that I had to use that was when I tried to modify a bug tracker in PHP, and that was about two and a half years ago (the dot operator for string concat drives me crazy).

Just to remind people, my purpose in posting that was to talk a bit the difference between "experience" and quality.

time to read 2 min | 288 words

Yesterday I had to interview two guys for a PHP job. One had about 8 years experience in programming (not just PHP) in general, one was a sysadmin. As usual, I ask interievees to solve some code excersize (in this case, save an email to the DB). That is the code that the guy with 8 years programming has written:

<?php
	$persone_name = $_POST["nm"];
	$CityID = $_POST["ct_id"];
	$message = $_POST["msg"];
	
	$cn = mySQL_connect("127.0.0.1","root");
	mysql_select_db("myDB");
	mysql_query("INSERT INTO tbl_data (persone_name,city_id,message) VALUES ('" .   
	                                      $persone_name . "', '" .$CityID . '",'" .  $message . "'");
	
	mysql_close($cn);
?>

And here is the code that the sysadmin has written:

function save_to_db($host, $dbuser, $dbpassword, $dbname, $msg)
{
	//this function saves sent by parameters data to database
	$conn = new mysqli($host, $dbuser, $dbpassword, $dbname);
	
	$id=NULL;
	
	//preparing a query
	$stmt= @$conn->prepare("INSERT INTO msg VALUES (?,? ,? ,? ,?)");
	if($stmt == FALSE)
	{
		echo $conn->error;
		$conn->close();		
	}
	//binding data
	$stmt->bind_param('sssss',$id,$msg['from'],$msg['to'],$msg['subject'],$msg['content']);
	
	//escaping strings to prevent a SQL injections
	foreach($msg as &$item) {
		$item=$conn->real_escape_string($item);
	}
	
	// excuting a query
	$result=@$stmt->execute();
	
	return $msg;
}

I got that code as the first thing that I saw when I opened my mail, and that was a good way to start the day.

I don't think that I need to say who will get the job, right? And remember, the first one was written by someone with 8 years experience.

That is for the next time someone accuse me from despairing from the state of programmers on the market.

time to read 2 min | 310 words

Hammett is talking about how hard it is to hire good people. A part of my job used to be verifying candidates' technical abilities for our company's Head Hunters division. Getting people is easy, getting good people is so damn hard it is not even funny. I saw a lot of really bad programmers ( I still fondly remember the one who couldn't reverse a string but had 2 years ASP.Net experience ), but I saw very few good ones.

In fact, I can think of three people who were good. Were good means, we should hire him now, because if he walks out the door we are going to lose it. I don't really have a good answer for that, because the good developers are going to be busy all the time because they are good. And the bad will float around making a mess of any decent hiring process.

On the other hand, when I wanted to get a job a while ago, I had the depressing experience of going through eight or nine interviews before I found a place where I would feel comfortable. One of the funniest one was being asked to solve a problem, and after solving it, trying to explain how it worked for ~15 minutes, because the interviewer couldn't get it. At the end, it was mentioned that he expected me to use recursion there, and I solved it in another way, which completely threw him off the loop.

I took the job at We! because I had the very pleasant experience of being interviewed with people that were much smarter than I was and were pleasant to work with.

I wish that I had some advice about this issue, but unless we would face another bubble bursting, it is going to be very hard to find the good guys.

time to read 3 min | 497 words

Jeff Atwood has posted about the difficulities of some so-called programmers to program. The intersting facts are here. An extremely simple task is given, and quite a bit of people simply can't handle it, or take an undue amount of time to solve it.

A while ago I posted all sort of interesting questions that I would not put in interviews, it was the sort of interview questions from hell. I did a lot of interviews since then, and I have gotten sick of the level of people that I meet.

My current favoriate question is to give them this code:

public class Program
{
   public static void Main(string[] args)
  {
    //print the input string in reverse
  }
}

And ask them to solve it. It has gotten to the point that this is literally the first thing that I would ask a candidate to do. I am not picky, I would accept a solution in any imperative langauge except Ook#. And quite a bit of them simply can't do it. I am usually interviewing people that are supposed to have two years or more of experiance building applications in .Net. And they simply can't do it.

Let me tell you how vicious how I am with this horrible question, I give them a laptop (mine, actually) loaded with Visual Studio + ReSharper, full access to the net (and yes, that include Google), and they still can't do it. In one particular case, I watch the candidate go to google, skip the first result that was titled "Reversing a String in C#" and go directly to a code sample in C(!). He then spent the next five minutes shocking me by trying to get it to compile.

I can think of at least five different ways of doing it, depending on whatever you know that string can be iterated or that it has an indexer. I would expect that even if you didn't know either about string, you would realize that you can use Substring() to do it in a horribly inefficent way.

I can accept people with lack of knowledge, I can accept newbies (no prejustice is good), but I can't accept someone who can't program.

time to read 1 min | 142 words

Phil Haack has a post On Hiring Bloggers and Open Source Developers. I guess that I have no choice but to +1.

And if you get the joke, I would like to hire you.

In a recent inteview I had a candidate that had serious issues with:

  • Writing an INSERT statement
  • Reversing a string
  • Searching google*

* That is a skill that you need to have. If you are searching for Reversing a String in C# and you manages to go to the only example I C in the page, that is a major minor point.

FUTURE POSTS

No future posts left, oh my!

RECENT SERIES

  1. re (24):
    12 Nov 2019 - Document-Level Optimistic Concurrency in MongoDB
  2. Voron’s Roaring Set (2):
    11 Nov 2019 - Part II–Implementation
  3. Searching through text (3):
    17 Oct 2019 - Part III, Managing posting lists
  4. Design exercise (6):
    01 Aug 2019 - Complex data aggregation with RavenDB
  5. Reviewing mimalloc (2):
    22 Jul 2019 - Part II
View all series

RECENT COMMENTS

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats