Criteria for admission to AP CS courses in high school The question is simple and direct here: what objective criteria are helpful* in admitting students to AP CS courses?

(By "helpful," I mean criteria that have some worth as indicator of future success in the course.)

Some context might help. Where I teach, there is no computer science pre-requisite to AP CS Principles, and when there was only AP CS A, there was not for that either. For most of my students, their first CS class is indeed an AP-level course.

Absent of this background, it is hard to predict what objective factors (I stress "objective" here for a reason) will help indicate how a student might perform at the AP level in CS. This is also crucial because all AP courses I've ever taken or taught have required applications due to both the rigorous nature of the course and the need to whittle down an applicant pool that is larger than the number of available spots in the course.

I have a couple theories of my own based on a few years of admitting students using several factors, but I will wait to self-answer until others share their practices.



Note:

Good answers need to include not only what the criteria used is, but also evidence - either in research or local practice - that supports the correlation between the chosen criteria and the eventual success, or lack thereof, of the students in AP CS courses (or, at a minimum reasonably advanced high school level CS courses).
I don't have criteria with evidence that are indicators of success, but I have some I use that can indicate the lack thereof.

At my school, although we are not allowed to specify prerequisites for our courses, the other programming teacher and I "vet" prospective programming students using data from students' literacy and math history (the two of us combined teach VB.NET, C#, SAS, and AP CS A).  The literacy and math scores come from the prior year's end-of-course tests.  This data is made available in an interface provided by, I believe, Pearson Education.  For each student we can see something like the following:



Where the colors/shapes mean the following:



We have found that Red or Yellow in math and/or Red in literacy are accurate predictors of a student who will struggle in programming.  Just looking at the data from last semester, when I taught programming I (VB.NET), the only C's and D's I had in the course were the students who had Red or Yellow math scores or Red literacy scores.

Every semester when we go through our rosters (we are doing it right now for next fall), if we encounter a student who has signed up for a programming course who does not have a strong math or literacy foundation, we first approach their counselor, show them our prior semesters' data, and talk to them about the student's chances of success.  The counselor will then talk to the student, and maybe the parents.  Sometimes the student will choose to take something other than programming.  Sometimes the student will want to take programming anyway, and that is fine.  We just want the student (and parent(s)) to be aware that, if they want to be successful in programming, considering their history, they may have to work extra hard or get extra help.

While this process we go through may smack of "profiling", our goal is to help every student be as successful as they can be.

Note that the converse, a student who has all "Green" data, is not necessarily an indicator that they won't struggle.  There are, obviously, other factors, many not quantifiable until you get to know the student:  motivation, maturity, perserverence, and hard work.