Build your programming skills through practice!

Students, is your course using CodeWorkout?

Find your course

Teachers, want to use CodeWorkout in your course?

Create your course

Want to try CodeWorkout?

Try a question now

Or try a specific kind of question: multiple choice, Java, Ruby, or Python.

Practice Your Skills

For learners of any age, CodeWorkout provides a place for you to practice your skills and develop your knowledge, both through code writing activities and questions about programming knowledge.

Practice using our existing bank of questions, or write your own!

Use in a Course

For teachers, CodeWorkout allows you to create your own custom assignments using exercises from our question bank, or exercises you write yourself. Use CodeWorkout for homework, for quizzes, or even for on-line testing.

When you write your own questions, you can share them with others, or limit them to your own assignments with your own students.

Track Progress

CodeWorkout tracks each learner's efforts and progress, letting you know what skills you've mastered and which need more work. CodeWorkout can even suggest what exercises you should try next so you can keep improving your skills.

What Is CodeWorkout?

CodeWorkout is an online system for people learning a programming language for the first time. It is a free, open-source solution for practicing small programming problems. Students may practice coding exercises on a variety of programming concepts within the convenience of a web browser! Exercises provide customized, immediate feedback to support learning and suggests appropriate exercises as students improve their mastery.

CodeWorkout was inspired by many great systems built by others, but aims to bring together the best from earlier forerunners while adding important new features. It provides comprehensive support for teachers who want to use coding exercises in their courses, while also maintaining flexibility for self-paced learners who aren't part of an organized course.

Have to Be a Student?

No, you do not have to be a student in a course to use CodeWorkout. While CodeWorkout provides comprehensive support for teachers who want to use exercises as part of course assignments, quizzes, and tests, this site also supports independent learners who are just practicing on their own. You can go to the "Gym" here and practice any exercises that are available on any topic of your interest at any time, whether or not you are enrolled in a course. Even if you're in a course, you can practice exercises on any topic you like, regardless of what your teacher has assigned. Build the skills you are interested in at your own pace, in your own order of preference.

Why Not Web-CAT?

Web-CAT is a separate open-source tool (by the same development team!) for automatically grading programming assignments. It is aimed at larger assignments (lab assignments, programming assignments, group projects, etc.) that take students from a few hours to a few months to write, and that typically involve creating one or more entire program classes, up to a producing complete program.

CodeWorkout, on the other hand, focuses on small practice exercises where a student might do 10 or 20 together as part of one assignment. These are often multiple choice questions, or exercises that require you to write, debug, or interpret a single method or function. Think "homework questions" rather than "programming projects". At this scale, CodeWorkout provides many services for both student feedback and for instructor assignment management that are not provided by other systems.

CodeWorkout is Free to Use

CodeWorkout is open-source software that is free to use. All publicly shared questions here carry a Creative Commons license. If you write your own questions, you are welcome to share them under the same license here, or use them privately without licensing them for sharing.

We welcome community contributions, both in the form of questions (you can write them yourself, or send them to us at and we'll convert them for you!), and in the form of source code. You can find us on github at .

Supported by the National Science Foundation

This work is supported in part by the National Science Foundation under grant DUE-1245589. Any opinions, findings, conclusions, or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.