What abilities are necessary for success in computer science

Background I teach 135 ninth through twelfth grade students in the first year computer science course offered in Fairfax County Public Schools, Virginia. The primary objectives of the course are for students to a) be able to understand and analyze data in a problem, b) determine the steps needed to solve a problem and c) find the solution by writing a computer program, using logical thinking and problem solving skills. The prerequisite for this course is completion of geometry. Some thought has been given to creating a fast-paced first year computer science class in addition to the course which is currently offered. The critical decision of determining which students to place in a fast-paced class presented a dilemma. One initial suggestion was to interview students that signed up to take computer science to determine their computer experience. Several administrators and counselors proposed that students who had the most experience with applications software or with computer hardware would be the best candidates for a fast-paced class. In addition, they speculated that students with high grades in mathematics courses and/or standardized mathematics tests should be placed in a fast-paced course. I knew from my experiences that students familiar with software applications and hardware components do not have as much computer anxiety as students with little to no experience with computers. Even students whose computer experience was limited to computer games are "ready to go". However, I also knew that many of my students with extensive experience with applications and hardware are not necessarily quick to learn new concepts and do not necessarily demonstrate skill in reasoning, solving problems and logical thinking. Previous experience does not necessarily make a student a good candidate for a fast-paced class. Even though it seemed reasonable that high grades in mathematics would be a valid indicator of success, I expressed my reservations about using mathematics grades as a criterion to sort students. Most of my students have a strong background in mathematics and/or computer applications. Regardless of this, many of them become frustrated and are surprised at having difficulty programming. Many students with little or no previous computer experience have similar problems, and additionally, they arc confronted with computer anxiety. There are too many things for students with little computer experience to learn in one course. A programming course used as the first exposure to computer science not only discourages many who are overwhelmed by what is required, but gives a distorted picture of the profession. For many students in Computer Science I, it appears that rather than learning the basic concepts of the field, their energies are devoted to learning syntax. Rather than learning real problem solving skills, they resort to trial-and-error. Rather than getting the 'big picture' of computer science, they narrow their focus to 'getting this program to run. ' (Allan and Kolesar, 1997) I was reluctant to pull out my best students from heterogeneously grouped computer science classes. My observations and experiences indicated that the expertise and understanding of my better students is beneficial to their classmates. The more successful students provide a support system for their peers as well as for me. I began to wonder if any criteria could serve the purpose of sorting students into different paced courses and whether students should be sorted into different paced courses at all. 'Successful ' students are not necessarily the ones who have an 'A' . They are the ones who easily understand new concepts and processes and who serve as role models and mentors for their classmates. The majority of class time is spent in groups, verbally communicating about the programming process, brainstorming to determine and understand the task at hand, and developing a sequence of small steps to efficiently complete the programming task. Most of my students would not be able to generate this process without leadership from the successful students, whose guidance and ability to verbalize their thinking are critical for students to explain to each other what they have done, what they still need to do, what they find difficult, and how to write the program code. Peer helping also avoids students having to wait for my help while I am working with others. Without spontaneous help from each other, many students would 'shut down, ' do nothing, resort to hacking--trying anything until they get some code to work, or eventually wonder why they took this course. Would it really be wise to remove these successful students from my classes?