Lori Postner

University of Washington

The Challenges of Learning to Program

 

 

Introduction

Introductory programming classes are notoriously difficult. They routinely have high attrition and low success rates (Morrison & Newman, 2001). At many institutions, introductory programming is a gateway course that allows a select few to major in computer science. Students commonly refer to Introduction to Computer Programming as the “hardest class on campus.” If computer science educators want to improve instruction we need to know more about the difficulties students encounter while learning to program. To understand these challenges, I will study the multiple dimensions of the learning process—cognitive, social, and pedagogical—by following a small group of students throughout their introductory programming class. By learning about these students’ experiences as they learn to program I hope to understand how each of these aspects influences students’ interest and success in programming.

 

 

Previous Research

Unlike science and mathematics researchers who have developed a coherent body of knowledge about how students learn these subjects, computer science educators are only beginning to consider the complex issues involved in learning to program. Early research looked at the ‘psychology of programming.’ Stemming from a cognitive perspective, researchers looked at how novices and experts solved programming problems (e.g., Rist, 1986; Soloway, 1986; Soloway & Ehrlich, 1984). From this research we have learned about some of the alternative conceptions students have about programming statements in specific languages and possible sources for these errors (e.g., Bayman & Mayer, 1983; Spohrer & Soloway, 1986a, 1986b). Unfortunately this research is of limited applicability to today’s undergraduate classroom since they often studied programming languages no longer widely taught.

 

In addition to the cognitive nature of learning, math and science researchers have also investigated social influences. Seymour and Hewitt (1997) found that students cited lack of peer support groups as influencing their choice to switch from math and science majors. Fullilove and Treisman (1990) found that Chinese-American students created study groups in mathematics classes. Working in these groups appeared to help them succeed in introductory courses. In contrast with this research in math and science, little research has been conducted on the social nature of programming in introductory courses. Such courses are highly competitive. Professors often require students to work alone prohibiting them from sharing code. We do not know how this isolation may influence how students learn to program.

 

 

Research Plan

My question is: what is so hard about learning to program that discourages students from entering computer science? I will simultaneously investigate questions from three perspectives: cognitive, social, and pedagogical lenses.

·        What aspects of learning the subject matter do student struggle with most?

·        Does the social environment help or hinder students learning?

·        Is the teacher's approach to teaching programming concepts a mismatch for students?

Although these types of questions have been explored in other disciplines (e.g., Rigden & Tobias, 1991, in Chemistry and Fullilove & Treisman, 1990, in Calculus) they have not been widely investigated in computer science. My research will look at these multiple aspects of the learning process.

 

To address these questions, I am currently collecting data on students’ experiences of learning to program in the introductory programming class at a major university with a highly respected computer science department. Students and teachers agree that writing code, although time consuming and often frustrating, is an essential part of learning to program. This is where I am focusing my attention.

 

To understand the cognitive challenge students encounter while working on their programming assignments I am following six students with minimal programming experience throughout the course. I am interviewing them about their programming assignments in order to learn about their understanding of the assignment, their approach to solving it, the problems they encounter, and the solutions they create. Through my multiple interviews with each student I hope to gain an understanding of the difficulties that arise for them and the sources of these difficulties.

 

To investigate the pedagogical aspect of learning to program, I am gathering information from the instructors, teaching assistants and laboratory consultants. I am learning about the teaching staffs’ goals and expectations. I am gaining insight into their views of students’ problems. I am using this information to see if there are differences between the students' expectations and the instructors' goals.

 

To understand the social nature of the course I am attending the lecture classes and quiz sections. I am also reading the class newsgroup. I am spending time in the on-campus computer lab observing students working on their assignments and getting help from the laboratory consultants. Through these multiple observations I hope to gain an understanding of the various areas that may make learning to program a challenge for so many students.

 

One emerging issue of interest is students' questions. I am trying to identify how students go about getting their questions answered and how successful their attempts are. In addition I am looking at various types of questions students ask and how they go about receiving answers.

 

Interesting misconceptions are also emerging from the data. Several programming concepts have been repeatedly misunderstood or misused by students. For example, some students think that print statements (i.e., System.out.println) do the same thing as return statements within functions/methods. Some students I have spoken to believe that both types of statements display information on the screen but that they are used under different circumstances. The instructors and teaching assistants have seen students use print statements where return statements are required on in-class assignments and exams.

 

 

Current stage in program of study

I am a 3rd year Ph.D. student in the College of Education at the University of Washington. I became a Ph.D. Candidate this quarter. I am currently collecting data for my thesis and hope to be finished with data collection by March 2002. I have begun data analysis and expect to be able to discuss some preliminary findings at the conference.

 

 

What I hope to gain from participating in the Doctoral Consortium

I want to participate in the doctoral consortium to have the opportunity to discuss my research and receive feedback on it. I hope to meet other students who are conducting research on issues of learning and teaching computer science to see how other people are researching these types of issues and the results they are finding. By talking about my research in this type of forum I hope to be critiqued on my work from leading researchers in the field in a supportive and non-threatening atmosphere. This will be my first time at SIGCSE and I believe this will give me the opportunity to connect with other students and faculty conducting research.

 

 

References

Bayman, P., & Mayer, R. E. (1983). A diagnosis of beginning programmers' misconceptions of BASIC programming statements. Communications of the ACM, 26(9), 677-679.

            Fullilove, R. E., & Treisman, P. U. (1990). Mathematics achievement among African American undergraduates at the University of California, Berkeley: an evaluation of the mathematics workshop program. Journal of Negro Education, 59(3), 463-478.

Morrison, M., & Newman, T., S. (2001). A study of the impact on student background and preparedness on outcomes in CS1. Proceedings of the Thirty-second SIGCSE Technical Symposium on Computer Science Education, Charlotte, NC.

Rigden, J. S., & Tobias, S. (1991). Tune in, turn off, drop out: Why so many college students abandon science after the introductory courses. The Sciences, 31(1) 16-20.

Rist, R. S. (1986). Plans in programming: definition, demonstration and development. In E. Soloway & S. Iyenger (Eds.), Empirical Studies of Programmers. Norwood, NJ: Ablex.

Seymour, E., & Hewitt, N. M. (1997). Talking about leaving: why undergraduates leave the sciences. Boulder, CO: Westview Press.

Soloway, E. (1986). Learning to program = Learning to construct mechanisms and explanations. Communications of the ACM, 29(9), 850-858.

Soloway, E., & Ehrlich, K. (1984). Empirical studies of programming knowledge. IEEE Transactions on Software Engineering, 10(5), 595-609.

Spohrer, J. C., & Soloway, E. (1986a). Alternatives to construct-based programming misconceptions. Paper presented at the CHI'86 Proceedings.

Spohrer, J. C., & Soloway, E. (1986b). Novice mistakes: Are the folk wisdoms correct? Communications of the ACM, 29(7), 624-632.