This is a long overdue post inspired by Iris's comments to my post on the care and feeding of research students. Since the start of the school year is quickly approaching (eek!), and since the start of the school year brings thoughts of staffing up your research labs, it seemed like an appropriate time to write about how I go about selecting undergraduates to work in my lab.
First, the procedure is a bit different for hiring students to work during the school year vs. during the summer. So I'll talk first about the skills I look for in students in general, and then I'll talk specifically about hiring during the year and hiring for the summer.
Skills I look for in a student
The three main things I look for in an undergraduate researcher are motivation, enthusiasm, and curiosity. Of these, motivation (and particularly self-motivation) is the most important, hands-down. Doing research requires undergrads to work independently and to figure things out on their own a lot of the time. There are not a lot of external rewards, no due dates, no single path to an answer. Thus, being self-motivated is vital: can a student stay on track without due dates and without the pressure of an exact deadline? Motivation is hard to judge, so I'll go by things like performance in my classes (did the student go above and beyond in some aspect of the course), performance in my colleagues' classes, or hobbies (is the student doing significant side projects that require a lot of independent learning?). Curiosity goes hand-in-hand with motivation: is the student sufficiently motivated to learn things on his or her own, pick up a new programming language, do lit searches? Curiosity also goes hand-in-hand with enthusiasm. When a student displays enthusiasm about the project, I know that s/he has some sense of the bigger picture. This enthusiasm often helps the student through the rougher parts of the project (when things aren't going well or it turns out we're pursuing the wrong question) and provides an impetus for the student to learn the skills necessary to do the work.
Hiring during the school year
My goals for hiring undergrads during the school year vary somewhat. Sometimes, I have a specific task I'd like a student to do---I'm trying to get a paper out and need a particular analysis done, or there's a small question that a previous student didn't finish with that I'd like closure on. Or, there's a particular question that I think a student or two could make headway on during a semester/term. In this case, if I have a specific student in mind (say, someone who's worked on the project previously), I'll try to hire that student. Otherwise, I'll typically post announcements in our newsletter, and announce in my classes, that I'm hiring a student to do X, and that interested students should come and see me. Other times, my goal is recruitment: I want to try and convince a student that she should become a CS major, and so I recruit that student directly and find a research problem from my own work that interests her. And sometimes, I try to hire someone that I think might be a good fit for a summer position in my lab---sort of like a trial hire.
In any case, in addition to the skills I mentioned above, I look for someone who has time to devote to research. I tell them up front how much time per week I expect them to devote to the project, roughly what I expect to be done each week, and talk with them frankly about their other commitments. Having someone who is extremely self-motivated is vital; otherwise, it is too easy for life to get in the way of research. If I'm not sure about a student, I'll go around and ask my colleagues about performance in their classes or work the student has done for them, etc.
Hiring for the summer
Because I'm not distracted by 80,000 other things during the summer, and can spend more time concentrating on research, I can actually afford to take a few more risks with my summer hires. It is easier to teach an undergraduate how to "do" research when I can sit down with him or her for a couple of hours to work through a problem, rather than trying to squeeze things into a thirty-minute meeting twice a week. If I'm hiring multiple students, then, I will often use one of the slots to hire someone I think has potential, but has not necessarily demonstrated it yet. Someone, for instance, who gets solid grades in our CS classes but is not a superstar; someone who is clearly eager to learn and willing to put in the time to do so; usually a younger student, one of our newly-declared or probably-will-declare majors. If I do this, I'll also hire a slightly more experienced student to serve as a peer mentor to the student, and help get him or her up to speed on the project.
Basically, then, I look for solid grades and enthusiasm, as well as personality. If I'm hiring multiple students, I try to hire students who I think will work well together: either their personalities complement each other, or they have similar working styles. This is difficult to get right, and it's backfired on me once before, but I usually do a good job of picking students who work well together. If I'm hiring a single student, I look for someone who's mature enough to work independently and grapple with harder, unfocused problems, and who's comfortable working with me.
So that's a glimpse into my own personal hiring process. As you've noticed, there's a lot of fuzziness to it, a lot of subjective decisions. Sometimes I'm not sure how or why it works, but so far it's worked rather well for me.