PyTutor
![PyTutor PyTutor](img/pytutor/pytutor01.png)
I worked on PyTutor as my thesis project for the MA–Educational Technology program at Adelphi under the advisement of Program Director Matt Curinga. PyTutor is a social educational platform that supports collaborative learning for novice computer programmers.
The platform content is created by more experienced programmers and teachers, allowing educators to author questions, provide model solutions, decide the level of their question, organize their question with tagged keywords, and add unit tests for their content. The questions within the PyTutor system remain open for editing and revision. Students are able to practice their programming skills with this content. PyTutor determines the level of the student, and provides them questions of appropriate challenge.
The main sections I’ve worked on in PyTutor include the student report and creating unit tests. The Student Report works by first collecting information about all of a user’s responses. Students are able to respond up to ten times to a single question, and the Student Report allows users to analyze and compare these submissions. The data collected from each of these submissions includes the actual code that was written, whether the question was answered correctly or incorrectly, the level of the question, and the total number of attempts. This information is bound in a Python dictionary, and this information is distributed into two side by side on the Student Report page to show solved and unsolved questions per level.
![](img/pytutor/pytutor02.png)
The student report function begins by identifying the user and collecting all the responses they've made, and organizing them by the question they pertain to. (question I.D.)
![](img/pytutor/pytutor03.png)
Then, empty variables are created to hold the information that will be collected from the student responses. 'data' is the dictionary that will organize the responses based on whether they are correct or incorrect
![](img/pytutor/pytutor04.png)
Next, the function passes through all of the student responses, and organizes them by their corresponding question. It then adds this information to the dictionary ‘data,’ and includes the running total of how many times they were responded to correctly and incorrectly.
This information is then sent to the report’s html page, using the Django framework to change dynamic variables on the page.
![](img/pytutor/pytutor05.png)
The information in the student response function is used to create two tables that display information about the questions and total number of student answers.
![](img/pytutor/pytutor06.png)
And the questions are separated by whether they were answered correctly or incorrectly, and the page shows the student’s history regarding questions they’ve answered at different levels.
![](img/pytutor/pytutor07.png)
The questions displayed in these charts are clickable items that show details about the question and student responses, including the question prompt, tags that categorize the question, the response history, model-response history, and responses posted by other users.
![](img/pytutor/pytutor08.png)
![](img/pytutor/pytutor09.png)
Since this session creates 5 incorrect and 1 correct response for each question, we used this information to test the code against our expected results. We ran the session 4 times, (twice generating a correct response, and twice generating 5 incorrect responses,) and set the highest question level at 2. In this way, we were able to use assertion tests to determine that the current student level and number of correct and incorrect responses were matching the our expected results.
Since the current level utilizes the students highest level achieved (including calculations concerning the number correct,) we were able to predict that the current level of the student was level 2.
![](img/pytutor/pytutor10.png)
This project has been paramount to shaping my understanding of how dynamic web based applications are created, managed, and ultimately run. First hand experience working with objects, controllers, databases and mapping systems has allowed me to contextualize information that I learned in my introductory programming courses of my Ed Tech M.A., and apply the knowledge in ways that create usable products. PyTutor has been instrumental my programming development, and I am eager to continue working on the project. Moving forward, PyTutor will include social functionalities that allow students to create a network and send alert messages for help with a problem. This will allow students to work together and receive answers in real time. My experience in programming courses so far has already made clear the value that this software will have in a class environment, and this has been a great motivation while working on the project.