Projects in Computer
Science Education

I am interested in advising graduation projects that focus on helping students in learning Computer Science or instructors in teaching Computer Science.

This page is meant to help you understand the different possible directions you could take if you decide to do a project in Computer Science Education. You will not find here specific project ideas to pick from, but, hopefully, enough information and examples to help you come up with your own project ideas in the field of CS Education!

Many of the examples listed here are clearly larger than what could be achieved in a one or two semesters. Therefore, focus on the purpose of these examples rather than their size.


Educational Games

You could build a game that teaches a CS concept or tool. For example, CISCO offers a game for practicing with binary numbers, and this game helps in learning vim. The Human Resource Machine is an excellent example of a game that teaches low-level programming in assembly. CodeCombat also teaches front-end web development languages through a strategy game. Many games also exist that are tailored towards introducing kids to algorithmic thinking like: Help Gidget, Light Bot and CodeMonkey.

The game does not have to offer sophisticated graphics or logic. For example, CodeHunt is a simple game with a very powerful idea. This game provides the player with results of running test cases and the player has to guess the underlying code that produces these results. Another example of a game with simple graphics and logic is Untrusted.


Tutoring Systems

Teaching CS does not have to be done through a game. You could build an interactive tutoring system that teaches a CS concept or tool. Examples of such systems include Codecademy, Grok Learning, Code Avengers and CrunchZilla. Lessons on these platforms generally involve tutorial text synchronized with practice coding exercises that offer feedback in real time. Some of these platforms also use Gamification techniques to incentivize their learners.

Less sophisticated tools also exist that specialize in teaching one programming language. For example, CSS Diner and FlexBox Froggy provide interactive challenges that walk the learner through the basic concepts of CSS.

Some tutoring systems try to be more intelligent by providing personalized feedback depending on the student answers and changing the exercises or the learning environment depending on the concepts the student is struggling with (see this Wikipedia article for more on Intelligent Tutoring Systems). Examples of systems that claim to do this in a CS context include iList and ChiQat.

Very related to tutoring systems are tools that allow practicing with a certain CS concept or programming language. These usually target learners that want to sharpen their skills rather than learn from scratch. Examples of such tools include HackerRank, Code Wars, CheckIO, and PracticeIt. Many of these tools are Gamified to make the practice experience more engaging. An example of a less sophisticated practice tool is Regex Golf, which provides interactive exercises on Regular Expressions (the same website also offers ReturnTrue for practicing with JavaScript).


Tools for Authoring CS Lessons and Exercises

CS instructors need tools for creating online lessons and exercises for programming concepts. Examples of such systems include Stepik, PCRS, and CodeHS (although CodeHS is a more general learning management system). Runestone Interactive and ZyBooks allow authoring books using tools to create visualizations and interactive programming exercises. WebSheets allows instructors to create automatically graded programming exercises, where students can fill-in-the-blanks provided in some starter code.

You can think of building a new tool that targets a certain programming language or CS concept (like networking, DFAs, regular expressions, proofs, etc.) or that improves how the current tools provide their functionality.


Simulators and Visualization Tools

Interactive visualizations can make difficult algorithms, data structures and concepts more accessible to learners. They provide students with means to experiment and understand, as well as instructors with an easy way to show mechanisms that typically require a lot of drawing and erasing on the board. Many algorithm visualization tools exist. For example, VisualAlgo and this website provide a library of algorithm and data structure visualizations (with some interactivity). Algo-Visualizer provides tools for creating custom algorithm and data structure visualizations and Open DSA allows creating lessons that involve interactive data structure visualizations.

You can build interactive visualizations for certain algorithmic techniques that are not well-covered in the above-mentioned tools, or introduce different interactivity aspects. Your tool can introduce new ways for visualization or make visualization authoring more accessible to instructors. You can also build a simulator that facilitates understanding and explaining non-programming concepts. Examples of such simulators include this Turing Machine Simulator, LogiSketch that allows sketching logic circuits and simulating them, Automaton Simulator and FSM Simulator for simulating finite state machines, and this simulator for simulating networks.


Assessment Tools

How can we make grading programming assignments and exams easier? How can instructors provide feedback on students code more effectively?

There are many systems that allow creating programming assignments, automatically grading them and providing feedback and grades to the students. Examples include Ed, OkPy, Replit Teams for Education, INGInious, Autolab, Submitty and MarkUs. Each of these systems approaches auto-grading differently and provides different course management and assignment management features. On the other hand, FindBugs, CheckStyle and PMD are examples of libraries that can be embedded in auto-grading scripts and systems. They are meant to check certain aspects of programs like style and object oriented design.

GradeScope is an example of a system that is dedicated to facilitate grading and providing feedback, rather than automatically grading (although it has an auto-grader). It shares some features with CodePost, which was developed at Princeton for providing feedback for programming assignments and exams. On the other hand, tools like PeerGrade and Aropa allow students to provide feedback to each other’s work (see this paper for more on peer-assessment).

Plagiarism Detection is also an integral part of the assessment process. Most auto-graders provide plagiarism detection as an integrated feature, but the detection accuracy varies from an auto-grader to another. Some systems are dedicated only for plagiarism detection like JPlag and MOSS. However, there is still much room for improving accuracy and the presentation of results, as well as for implementing detection tools that target certain types of assignments and programming languages.


Other Tools

You can build any tool you may think of for making the life of CS students and/or CS instructors easier. Here is a miscellaneous list of examples that may not fall directly in the categories discussed above:

  • Git Hub Education and Git Kraken make source version control more accessible to students by providing a GUI and features specific for educational settings.

  • Dr Java is an IDE developed specifically for educational purposes. It is very simple to use and provides an interactions pane that allows quick demonstration of java commands in a classroom.

  • Codesters helps students learn programming in Python by allowing them to drag and drop Python code blocks in a web environment to create fun applications. This is combined with Python lessons and some classroom management features for instructors. Thimble also allows building web-apps by remixing existing ones. Thimble also provides embedded tutorials in the programming environments that helps learning web-development.

  • Blockly is a JavaScript library that allows building block-based editors for different programming languages. Try it and think of ways to use it in your CS Ed tool!

  • Chopapp allows sharing pieces of code and annotating them with comments. This is helpful when students work together on a project remotely, when a student sends a question on a piece of code to the instructor, or when an instructor or student provides feedback on code to a student. Ideone also allows sharing pieces of code, and also allows compiling and debugging programs in more than 60 languages. It is an online IDE that removes the need for complex installation of programming environments.

  • Vocareum, Codio, JSFiddle, and Cloud9 are more than online IDEs. They provide ways for collaboration on projects, pair programming and other features that are useful for CS classrooms.

You could also think beyond conventional applications and introduce CS educational tools that make use of hardware like Raspberry Pi and Ardhuino, or Virtual Reality apps that teach a certain CS concept (maybe take a kid in a tour inside a computer? Or allow delving inside a data structure or the memory stack during the execution of an algorithm?). You could also think of tools that help people with disabilities learn CS or develop innovative ways for helping people without internet or computer access (like in refugee camps) learn CS.

The following questions can help you in thinking of an idea:

  • Who are you targeting with this tool?

    Arabs, seniors, people with disabilities, kids, teens, college students, refugees, any learner, CS teachers, etc.
  • What kind of tool will it be?

    Mobile app, web app, desktop app, etc.
  • What in CS will this tool focus on?

    low-level programming, high-level programming, code reading, code writing, debugging, testing, problem solving, algorithms, data structures, digital logic design, finite state machines, multi-threading, caching, machine learning, data bases, networking, etc.
  • What tools are already there that serve a similar or related purpose to the tool you are thinking of? How will your tool be different?

  • Is there any CSEd tool that you particularly love or hate? Can you think of ways to improve the tool, extend it to other programming languages, or specialize it to serve a specific audience better?


Educational Data Mining

Instead of building an educational tool, you could analyze data to answer a CS Education research question. The Wikipedia articles on Learning Analytics and Educational Data Mining provide an excellent overview of how data could be mined and analyzed to help us understand how students learn and help make educational software more intelligent and adaptable to the learner needs. This article also provides a survey for the use of learning analytics and data mining in the context of computing education.


Examples of Student Projects Completed in Previous Semesters

  • PackIT (2020): Gregory Smith (Princeton University) created a game to help novices improve their code reading skills. To succeed in the game, the player needs to be able to understand the code purpose and be able to predict its effect without mechanically executing every iteration.

  • Thabit (2020): A platform for competitive programming practice for the Arab community (ToDo: add student names + advisor name).

  • An analysis of student code in CS1 (2019): Joseph Salter (Princeton University) analyzed thousands of lines of student code submitted for assignments in COS126 over the period of ~2 years. The focus was on discovering patterns related coding style.

  • 2Nodes (2016): Hasan Alhamsh and Maram Tuffaha created an algorithm visualization tool and API that allows instructors to embed instructions into the C++ code of an algorithm in order to visualize it. Their work focused on making the visualization accessible for teachers.

  • ZoomMem (2016): Abdullah Bahosain and Tariq Khundakji created an online tool for visualizing the memory of C++ programs in a step-by-step manner. Their work is an alternative to PythonTutor, which at that time supported Python only.

  • GitBull (2015): Nayef Muhiar and Luay Bseiso created a version control web application. Their focus was on making version control accessible to novices. (ToDo: add advisor name)

  • ??? (???): Gamified Learning Management System for CS courses by Umar AlKfaween and Fahmi Alnajjar (ToDo: add project name and link to report).

Last modified: