Towards answering “Am I on the right track?” automatically using program synthesis

Students learning to program often need help completing assignments and understanding why their code does not work as they expect it to. One common place where they seek such help is at teaching assistant office hours. We found that teaching assistants in introductory programming (CS1) courses frequently answer some variant of the question ``Am I on the Right Track?''. The goal of this work is to develop an automated tool that provides similar feedback for students in real-time from within an IDE as they are writing their program. Existing automated tools lack the generality that we seek, often assuming a single approach to a problem, using hand-coded error models, or applying sample fixes from other students. In this paper, we explore the use of program synthesis to provide less constrained automated answers to ``Am I on the Right Track'' (AIORT) questions. We describe an observational study of TA-student interactions that supports targeting AIORT questions, as well as the development of and design considerations behind a prototype integrated development environment (IDE). The IDE uses an existing program synthesis engine to determine if a student is on the right track and we present pilot user studies of its use.

[1]  Philip J. Guo,et al.  Omnicode: A Novice-Oriented Live Programming Environment with Always-On Run-Time Value Visualizations , 2017, UIST.

[2]  Luca de Alfaro,et al.  CrowdGrader: a tool for crowdsourcing the evaluation of homework assignments , 2014, SIGCSE.

[3]  Robert Hieb,et al.  Revised 5 Report on the Algorithmic Language , 1999 .

[4]  Michael Kölling,et al.  An object-oriented program development environment for the first programming course , 1996, SIGCSE '96.

[5]  Elena L. Glassman,et al.  Foobaz: Variable Name Feedback for Student Code at Scale , 2015, UIST.

[6]  Kristy Elizabeth Boyer,et al.  Principles of asking effective questions during student problem solving , 2010, SIGCSE.

[7]  Armando Solar-Lezama,et al.  Program synthesis from polymorphic refinement types , 2015, PLDI.

[8]  Joe Gibbs Politz,et al.  The Sweep: Essential Examples for In-Flow Peer Review , 2016, SIGCSE.

[9]  Matthias Felleisen,et al.  How to Design Programs, 2e , 2004 .

[10]  Philip J. Guo Online python tutor: embeddable web-based program visualization for cs education , 2013, SIGCSE '13.

[11]  Herbert H. Clark,et al.  Grounding in communication , 1991, Perspectives on socially shared cognition.

[12]  Rastislav Bodík,et al.  Rousillon: Scraping Distributed Hierarchical Web Data , 2018, UIST.

[13]  Thomas Vikberg,et al.  Massive increase in eager TAs: experiences from extreme apprenticeship-based CS1 , 2013, ITiCSE '13.

[14]  Tom Routen,et al.  Intelligent Tutoring Systems , 1996, Lecture Notes in Computer Science.

[15]  Armando Solar-Lezama,et al.  Programming by sketching for bit-streaming programs , 2005, PLDI '05.

[16]  Björn Hartmann,et al.  Writing Reusable Code Feedback at Scale with Mixed-Initiative Program Synthesis , 2017, L@S.

[17]  Emina Torlak,et al.  Growing solver-aided languages with rosette , 2013, Onward!.

[18]  Sumit Gulwani,et al.  Automated feedback generation for introductory programming assignments , 2013, PLDI.

[19]  Andrew Danner,et al.  A support program for introductory CS courses that improves student performance and retains students from underrepresented groups , 2014, SIGCSE.

[20]  Elena L. Glassman,et al.  Learnersourcing Personalized Hints , 2016, CSCW.

[21]  Johan Jeuring,et al.  Ask-Elle: an Adaptable Programming Tutor for Haskell Giving Automated Feedback , 2017, International Journal of Artificial Intelligence in Education.

[22]  Sumit Gulwani,et al.  Program Synthesis , 2017, Software Systems Safety.

[23]  Kenneth R. Koedinger,et al.  Automating Hint Generation with Solution Space Path Construction , 2014, Intelligent Tutoring Systems.

[24]  Sumit Gulwani,et al.  Automatic Diagnosis of Students' Misconceptions in K-8 Mathematics , 2018, CHI.

[25]  John R. Anderson,et al.  Skill Acquisition and the LISP Tutor , 1989, Cogn. Sci..

[26]  William E. Byrd,et al.  A unified approach to solving seven programming problems (functional pearl) , 2017, Proc. ACM Program. Lang..

[27]  Scott R. Klemmer,et al.  What would other programmers do: suggesting solutions to error messages , 2010, CHI.

[28]  Philip J. Guo Codeopticon: Real-Time, One-To-Many Human Tutoring for Computer Programming , 2015, UIST.

[29]  J. Michael,et al.  NOVICE VS. EXPERT TUTORS: A COMPARISON OF STYLE , 1999 .

[30]  Matthias Felleisen,et al.  How to design programs: an introduction to programming and computing , 2001 .

[31]  R. Kent Dybvig,et al.  Revised5 Report on the Algorithmic Language Scheme , 1986, SIGP.

[32]  Philip J. Guo,et al.  OverCode: visualizing variation in student solutions to programming problems at scale , 2014, ACM Trans. Comput. Hum. Interact..

[33]  Sumit Gulwani,et al.  FlashMeta: a framework for inductive program synthesis , 2015, OOPSLA.

[34]  Jack Hollingsworth,et al.  Automatic graders for programming classes , 1960, Commun. ACM.

[35]  John Seely Brown,et al.  Diagnostic Models for Procedural Bugs in Basic Mathematical Skills , 1978, Cogn. Sci..

[36]  Justin Cheng,et al.  Peer and self assessment in massive online classes , 2013, ACM Trans. Comput. Hum. Interact..

[37]  Björn Hartmann,et al.  TraceDiff: Debugging unexpected code behavior using trace divergences , 2017, 2017 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC).