Independent Work
Computer Science Education

Contact Dr. Ibrahim Albluwi    Email (isma) @ (   Office 221 Nassau St.

I am interested in supervising independent work projects that help 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 an independent work in Computer Science Education. You will not find here specific project ideas to pick from, but you will find, hopefully, enough information and examples to spark new interesting 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 semester independent work project. The goal of listing such examples here is not to suggest implementing something with a similar size, but something that serves a similar purpose. Your independent work project could also be the seed for such large projects, which you may continue working on after the semester is over.


For a list of concrete independent work ideas in CS Education see this page.


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 Code Academy, Khan Academy, Grok Learning, Code Avengers and CrunchZilla. Lessons on these platforms generally involve tutorial text synchronized with practice coding exercises that offer feedback in realtime. 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 Fights, 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). Runstone Interactive and ZyBooks allow authoring books using tools to create visualizations and interactive programming exercises. WebSheets is currently used in COS 126 to create programming exercises with automatic feedback. You could 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 could 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). Algomation and Algo-Visualizer provide tools for creating custom algorithm and data structure visualizations and Open DSA allows creating lessons that involve interactive data structure visualizations.

You could build interactive visualizations for certain algorithmic techniques that are not well-covered in the above-mentioned tools, or introduce different interactivity aspects. Your tool could also introduce new ways for visualization and may make visualization authoring more accessible to instructors. You could 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 Web-CAT, ReplIt Classrooms, INGInious, Autolab, Submitty, MarkUs and AutoGradr. 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 could 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 could build any other tool you may think of that could make 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.
  • 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, 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.


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.

Many CS courses at Princeton are in the habit of storing data related to the performance of the students and their interaction with the software environments used in these courses. For example, COS 126 and COS 226 have archives and logs of assignment and programming exam submissions. The data provide information on when and how frequently students submit, as well as what test cases they fail or pass in each submission. Many courses also have archives of student responses to course entry, mid-semester and end-of-semester surveys. Such data provide a wide range of opportunities for a deeper understanding of the performance of our students, predicting their success or failure and for studying the validity of certain instructional decisions made in our courses. You also do not have to limit your self to the data at Princeton. You may want to analyze data provided by other institutions or educational tools.


COS 126 and COS 226 Assignments

Did you enjoy working on Atomic in COS 126? This assignment was developed with the help of some Princeton students. Developing an assignment for COS 126 or COS 226 is in fact more challenging than what it may sound like, but is also a lot of fun!

The assignment you will develop has to fit within the course curriculum and should be comparable in terms of effort the assignments currently used in the course. The assignment should also be interesting enough to replace one of the currently used very interesting assignments! You would then have to write the assignment statement and Checklist, as well as implement an auto-grader. You may also implement some tools or apps that could help in understanding the assignment (like the TSP visualizer that is given to the students with the TSP assignment).


Looking for concrete independent work ideas? Check this page.


Detected a broken link? Don't keep it broken! Report it to: (isma) @ (