Show simple item record

dc.contributor.authorLi, Zhen
dc.description.abstractProgramming activities are not trivial tasks. Rather, to carry out such complex problem solving tasks, programming expertise developed through long-term experience is required. In contrast, the current landscape of computing demands more reliable and efficient implementations of concurrent software programs. In this thesis work, we research topics in psychology of programming and computer science education with an emphasis on programming with concurrency to inform the fields of psychology of programming, computer science education, empirical software engineering and a broader scope of human factors related fields. We identify the barriers to learning programming with concurrency through review and empirical work. We synthesize the previous research findings with regard to programming expertise, generalize a conceptual framework of the development and application of programming expertise and indicate the importance of the knowledge repository component. We reveal the structure of concurrency-related concepts, and provide insight into the acquisition procedures for such knowledge with our description of a “misconception hierarchy” grounded from qualitative analysis of empirical data. Comprehensive arguments generated through a case study are further provided to describe non-concurrency-related barriers that are critical for students to learn and appreciate programming with concurrency. We conduct explorations on the impact of existing and innovative techniques and course designs used in teaching programming with concurrency topics. We review the pedagogical impact of pair programming and indicate its protective effect on retaining female and less-experienced students through our quasi-experiments. We also reveal the engineering and cognitive effect of pair programming in that pair programming helps students to write code using better style and promotes more comprehensive and critical thinking in earlier phases of software development. We survey curriculum guides on topics regarding programming with concurrency and identify two concurrency models (shared memory versus message passing), three implementation approaches (Threads, Actors, and Coroutines), and several classic scenarios (Bounded Buffer, Dining Philosopher, Sleeping Barber, etc.) to teach in an upper-level undergraduate computer science course. We provide feedback on benefits and drawbacks of this series of pedagogical innovations including flipped classroom design, using a language-independent pseudocode system, and introducing repeated practice with different implementation approaches on a single problem.
dc.subjectPsychology of Programming
dc.subjectComputer Science Education
dc.subjectConcurrent System
dc.subjectEmpirical Software Engineering
dc.titleProgramming with concurrency
dc.title.alternativebarriers to learning and explorations in teaching
dc.description.departmentComputer Science
dc.description.majorComputer Science
dc.description.advisorEileen T. Kraemer
dc.description.committeeEileen T. Kraemer
dc.description.committeeJohn A. Miller
dc.description.committeeTianming Liu

Files in this item


There are no files associated with this item.

This item appears in the following Collection(s)

Show simple item record