% LaTeX
%
% file: proposal.tex
% date: 2010-02-19
%   by: Gregory D. Benson
% desc: NSF TUES Proposal 
%

\documentclass[11pt]{article}
\usepackage{vmargin}
\usepackage{url}
\usepackage{graphicx}

\def\fdc{xDU}
\def\trans{{\tt xducc}}
\def\lcs{{\tt xdurte}}
\def\durootdef{{\bf duroot}}
\def\duroot{{\it duroot}}

\def\freebsd{FreeBSD}
\def\netbsd{NetBSD}
\def\linux{Linux}

% Multiline comments
\long\def\com#1{}


\setpapersize{USletter}
%\setmarginsrb{left}{top}{right}{bottom}{hheight}{hsep}{fheight}{fskip}
\setmarginsrb{1.0in}{1.0in}{1.0in}{1.0in}{0.20in}{7mm}{0.25in}{7mm} 

%
% List bullets
%
%\renewcommand{\labelitemi}{$\triangleright$}	% first level
%\renewcommand{\labelitemii}{$\rightarrow$}	% second level

\begin{document}

\centerline{\LARGE {\bf CodeVR}: Program Comprehension and Analysis Using State Capture}
\vspace{0.05in}
\vspace{0.1in}
\centerline{PROPOSAL}
\centerline{Faculty Development Fund for Research}
\centerline{Request for a Research Assistant in Summer 2010}
\vspace{0.2in}
\centerline{Gregory D. Benson}
\vspace{0.1in}
\centerline{Department of Computer Science}
\centerline{University of San Francisco}
\vspace{0.1in}
\centerline{February 19, 2010}

%\begin{abstract}
%\end{abstract}

\section{Ideas}

\subsection{Processes and Models to Enhance Student Learning}
We need new, engaging, ways to enable more students to more quickly and deeply learn how programs executed.  A path to early successes will provide positive reinforcement which will encourage further engagement.

\begin{itemize}
    \item We have address the {\it motivation} problem
    \item We still need to address the {\it learning} problem
\end

Some students seem to plateau.

Easily adoptable at other institutions.

Download software.

Web-based.

Commodity multi-touch displays.

Collaborative interactive multi-touch program execution exploration.

Targets: 107, 110, others.  SEP.  High School.


\subsection{Successful Projects Should be Institutionalized}.



\section{Related Work}

DrJava


\section{Introduction}

Understanding how programs execute is fundamental to learning computer science.  As teachers, we spend considerable time trying to help students develop a {\it mental model} of program execution.   The sooner students can develop an accurate mental model the sooner they can better predict how programming constructs will behave and begin to create their own programs.
While much of what we do in introductory computer science courses are aimed at having students run, examine, and modify programs, perhaps interactively, we
lack software tools that allow for simple visualization and easy navigation of program execution.  

The goal of this proposal is to develop and assess a innovative software system called CodeVR for the recording, replaying, and navigation of Python program execution designed to help students more quickly establish a mental model of program execution.  Using the metaphor of a digital video player, students can easily move forward and {\it backward} through program execution to see the control flow, variable changes, and corresponding program output.  Furthermore, we propose to develop and assess a {\it multi-touch} version of CodeVR that allows students to directly explore program execution in a tactile fashion using touch gestures rather than a mouse and keyboard.  CodeVR and CodeVR with Multi-touch are transformative software tools for helping new CS students more quickly develop a mental foundation for reasoning about and predicting program behavior.  To the author's knowledge, this is the first proposal to integrate multi-touch and program comprehension.

Over the last several years, Computer Science programs have reevaluated and revised their introductory sequence in the face of declining enrollments.  One approach used to attract and retain more students is to introduce more compelling projects and programming environments.  For example, Alice allows students to create 3D stories and games, Jython Environment for Students (JES)
allows students to modify images and create animations, and the Institute for Personal Robots in Education (IPRE) approach allows students to program robots with Python.  At USF we have introduced students to Python and the Google App Engine in the first semester CS course to build rich web-based application and  we have enabled non-CS majors to develop mobile applications for Android using Google App Inventor (ref).  These approaches have proven (ref to Alice study, ref to IPRE study) effective at attracting new students and retaining at risk students.  If getting students motivated and engaged is half the battle, then getting them to learn is the other half.

CodeVR is complimentary to motivational approaches and environments in that provides an inviting way for students to see how a program works regardless of the problem domain.  Unlike conventional debuggers, which presupposes an established mental model and are non-intuitive for beginners, CodeVR allows students to easily record a program execution, then play it, examine it, and move arbitrarily through the program timeline.  For tactile learners, the Multi-touch interface will elicit more direct interaction with the program execution and its state and output.  One of the most exciting broader impacts of this work is to provide an an engaging tool that is significantly different from conventional 

While our early experience with prototypes of full state capture engines and graphical interfaces suggest that such tool will be extremely powerful, our prototypes are not robust or simple enough for incoming students to use.
Furthermore, with working versions of CodeVR, controlled assessments are needed to demonstrate the effectiveness of the tool.  To this end, the PI will team up with Dr. Renate Otterbach, a Senior Research Analyst at the University of San Francisco.  Dr. Otterbach has extensive experience with developing assessments of different theoretical learning models.  This proposal requests funds for the PI, student researchers, and, Dr. Otterbach, to develop a robust prototype of CodeVR and perform an assessment of its effectiveness in helping students learning programming concepts more quickly and thoroughly.

The primary outcomes for this work is a tangible software tool and studies showing how it affects student learning.  We plan to institutionalize the use of CodeVR by using it in our introductory CS course, CS 110, which is based on Python, as well as in our CS course for non-majors, CS 107, which also uses Python.  In addition, we plan to pilot CodeVR in our Summer Enrichment Program for Young Women (ref).   Furthermore, we plan to upgrade our main CS teaching laboratory with commodity multi-touch displays, so that CodeVR can be used and tested easily.  Because the tool can compliment existing curriculums using Python, we will make CodeVR free available to other programs.  As an aide to other institutions, we will publish our experiences with specific multi-touch hardware so that others can make informed purchasing decisions.



\section{Objectives and Project Description}

The manner in which we comprehend and debug software has not changed significantly in the last 40 years.  While computer scientists have developed new programming languages that have resulted in faster development times and more robust software, we have not seen similar advances in practical debugging and code comprehension tools.  The objective of this proposal is to develop a new software development tool called {\it CodeVR} (Code Visualization Recorder), or CVR (a play on VCRs or DVRs).  

Unlike tradition debuggers, CodeVR will record the complete execution state of a running program.  A developer can then use the CodeVR interface to navigate the recorded state in order to find bugs and to understand how the code actually works.  One can think of CodeVR as a video recorder for running programs.  Once recorded, a programmer can seamlessly move forward and backward through the execution of the program to see how the code behaves over time.  A traditional debugger only allows programmers to step through a program moving forward through the execution state.  The interface will allow visualization of all execution paths through the code and all variables.  

The CodeVR system will be useful in many contexts, but here are two important targets:

\begin{itemize}
\item \textbf{Teaching Introductory Computer Science}  One of the hardest things to teach new computer science students is how programs actually execute.  To become a good programmer, students must develop a {\it mental model} of program execution.  Largely we do this through pencil and paper examples.  However, we do not have any software tools that allow a student to visualize the execution of their programs and see how the statements they have written affect program behavior.  CodeVR will be a revolutionary teaching tool for both introductory and advanced CS courses.  Student will be able to record their programs and navigate to any point in the execution steps.  CodeVR will allow students to move forward and backward through time just like when watching a digital video.  This will be directly useful to our CS 110 and CS 107 classes here at USF.
    
\item \textbf{Software Comprehension and Analysis}  The CodeVR will also be tremendously useful to experienced software developers.  It is often the case that programmers must work with an existing code base.  However, it takes quite a bit of time to come up to speed in understanding how existing code works.  Current approaches involve reading the source code directly and through experimentation with running the program itself.  However, it would be extremely useful to be able to completely navigate the execution sequences and variable changes to running programs.  In fact, with a complete recording, programmers will be able to {\it search} for interesting points in the program.  Once these points are found the CodeVR interface will allow for easy navigation to the points and in between them.  Just like slow motion instant replays in live sports broadcasts, CodeVR will allow for controlled replaying of any portion of program execution.  Furthermore, with the full program state capture, several useful types of analyses can be performed such as code coverage and causality relationships. 

\end{itemize}

The system will consist of three major components:

\begin{itemize}
    \item The State Capture Engine: This is the software that performs the execution state recording.    
    \item A Graphical Application Interface: This is the main interface a programmer will use to visual and navigate the recorded execution state.
    \item An Analysis Engine: This will consist of algorithms for automatically deducing interesting statistical and analytical information about the behavior of running programs.
\end{itemize}


Our initial target language for CodeVR will be the Python Programming Language.  Python is a popular programming language and it is the language we teach in CS 110 and CS 107.  It is also used for many commercial languages.  It is the number 3 language used at Google (behind Java and C++).

I have been working on the fundamental principles of CodeVR for the last three years.  However, I now need to have students help develop the first prototype.  This proposal is requesting funds to hire a research assistant in the summer of 2010 to help develop CodeVR.

\section{Statement of Duties}

The research assistant will be responsible for implementing significant portions of the CodeVR system.  I will also be doing some of the development side by side with the assistant.  Our development will be guided by specifications we are designing this semester (Spring 2010).  Specifically, the research student will perform the following tasks:

\begin{itemize}
    \item Develop CodeVR components.
    \item Identify any issues with the initial specification.
    \item Document the design and implementation.
    \item Run experiments to assess the performance of the prototype.
    \item Contribute to a publication describing the CodeVR system.
\end{itemize}

\section{Budget}

I am requesting funds for one graduate RA for 280 hours.  At \$13.44/hour, this results in a total request of \$3763.20.

\paragraph{Justification for Additional Hours}

Due to the intensive nature of the software development effort for CodeVR, I am requesting funds for 280 hours for one graduate RA in the Summer of 2010.  This will allow one RA to work 20 hours a week for the entire summer on the projects.  The additional hours are needed to keep a good graduate student at USF in the summer instead of getting a much higher-paid internship somewhere else.  Even with the additional hours, the effective pay rate will be significantly below what CS students can earn as interns.

\paragraph{Compliance with Equal Opportunity Guidelines}  I agree to abide by the standard USF equal opportunity guidelines.

%
% References
%

%\bibliographystyle{plain}
%{\scriptsize
%\bibliography{res}
%}

\end{document}










