TutorFlow supports coding-oriented learning experiences where explanation and practice happen in the same lesson. Learners write and run code directly inside the course with no separate IDE, no copy-pasting, and no switching tabs.
This makes TutorFlow useful for programming bootcamps, computer science courses, engineering onboarding, and self-paced developer upskilling.
Inspect a course before building your own
Open the Python course example. Check how the explanation, code editor, and exercises fit together. For your own first lesson, use the Python source file walkthrough and verify normal, empty, negative, and single-item inputs.
Four coding lesson types
| Lesson type | What learners do | Best for |
|---|---|---|
| Coding Lesson | Read the explanation and practise in an interactive IDE beside it | Teaching a concept with hands-on practice |
| Coding Test | Solve coding problems that TutorFlow checks automatically | Graded exercises and technical assessments |
| Python Notebook | Run Python cell by cell in a Jupyter notebook, with pip packages such as pandas available | Data analysis and science courses |
| Web | Build and preview an HTML, CSS, and JavaScript page in real time | Front-end and web development courses |
Coding problems are a lesson type, not a test question type. A standalone Test holds multiple-choice, true/false, fill-in-the-blank, open-ended, and submission questions. To grade code, add a Coding Test lesson to the course.
Supported programming languages
The in-lesson code runner supports 17 languages:
| Language | Notes |
|---|---|
| Python | The most used language for data, scripting, and general programming courses |
| JavaScript | Runs on Node.js; pair it with a Web lesson for browser work |
| TypeScript | Typed JavaScript for enterprise-focused training |
| Java | Standard for CS curricula and corporate Java training |
| C | Systems programming and algorithms |
| C++ | Algorithms, competitive programming, and systems courses |
| Go | Backend and systems courses |
| Rust | Systems and performance-focused courses |
| Kotlin | Android and JVM courses |
| Swift | iOS and Apple-platform fundamentals |
| Ruby | Scripting and web framework courses |
| PHP | Web development courses |
| R | Statistics and data analysis courses |
| Bash | Shell scripting and DevOps onboarding |
| Clojure | Functional programming courses |
| Pascal | Introductory programming and school curricula |
| Visual Basic .NET | Legacy business application training |
SQL is not in the runner. For database courses, teach queries in a lecture lesson with highlighted code blocks, or run them from Python in a notebook lesson.
What coding exercises look like in TutorFlow
A coding exercise gives learners a code editor, a problem statement, and a place to run their solution and see the output. In a Coding Test lesson, you define the expected results and TutorFlow checks each submission automatically, so learners get a verdict without waiting for you.
Coding lessons can sit anywhere in a course: as the applied part after a lecture, as a standalone practice block, or as the graded step at the end of a chapter.
Recommended course structure for coding content
A lesson that teaches one coding concept well usually follows this pattern:
- Concept explanation. Introduce the idea in plain language, with an analogy if useful.
- Worked example. Show a complete, working code sample with annotations.
- Guided task. Give learners a pre-filled problem to complete or modify in a Coding Lesson.
- Open practice. Ask them to solve a fresh problem from scratch.
- Reflection. Have them explain what their solution does and why.
- Assessment. Check correctness in a Coding Test and written understanding in a quiz or exam.
What makes coding lessons effective
Short theory blocks work better than long ones. Learners in coding courses want to write code quickly, and long lecture sections before any practice reduce engagement. A good pattern is "explain for two minutes, practice for five."
Progressive difficulty matters more than variety. A well-designed coding course builds one skill at a time, where each exercise is slightly harder than the last. Jumping between unrelated topics in the same lesson breaks the momentum.
When possible, define clear expected outputs for exercises. "Your function should return X given input Y" is easier to check, and easier for learners to verify themselves, than open-ended tasks.