---
url: /how-to-use-this-course.md
description: >-
  How to read the course in order, what each level covers, and the conventions
  every sample follows.
---

# How to use this course

*Written: {{ $frontmatter.date }}*

## Reading order

Read the levels in order the first time through. Later pages build on earlier ones. Every page lists its prerequisites with links. If you already write code in another language, skim Levels 0 and 1 for Luau differences such as 1-based tables, truthiness, and `nil`. Slow down at Level 2, where Roblox execution contexts begin.

Install [Roblox Studio](https://create.roblox.com/docs/en-us/studio/setup). You need nothing else until the tooling chapters say so.

## Roadmap

| Level | Chapters | When you finish it, you can |
| --- | --- | --- |
| Level 0: Getting started | [Introduction](getting-started/introduction.md), [Studio and environment](getting-started/studio-and-environment.md), [First script](getting-started/first-script.md) | Open Studio, run code, read errors, tell client from server |
| Level 1: Programming fundamentals | [Variables](programming-fundamentals/variables-and-values.md), [Operators and logic](programming-fundamentals/operators-and-logic.md), [Conditionals and loops](programming-fundamentals/conditionals-and-loops.md), [Functions and scope](programming-fundamentals/functions-and-scope.md), [Tables 1](programming-fundamentals/tables-part-1.md), [Strings, numbers, nil](programming-fundamentals/strings-numbers-nil.md), [Debugging basics](programming-fundamentals/debugging-basics.md) | Write small programs, trace bugs, use tables for everything |
| Level 2: Core Luau | [Syntax and control flow](luau-basics/syntax-and-control-flow.md), [Tables in depth](luau-basics/tables-in-depth.md), [Strings and libraries](luau-basics/strings-and-libraries.md), [Advanced functions](luau-basics/functions-advanced.md), [Modules and require](luau-basics/modules-and-require.md), [Metatables and OOP](luau-basics/metatables-and-oop.md), [Errors and defensive code](luau-basics/errors-and-defensive-code.md) | Write idiomatic Luau: closures, modules, objects, libraries |
| Level 3: Roblox fundamentals | [DataModel and Instances](roblox-fundamentals/datamodel-and-instances.md), [Scripts and execution](roblox-fundamentals/scripts-and-execution.md), [Services and events](roblox-fundamentals/services-and-events.md), [Task and async](roblox-fundamentals/task-and-async.md), [Players and characters](roblox-fundamentals/players-and-characters.md), [Remotes and networking](roblox-fundamentals/remotes-and-networking.md), [Server authority](roblox-fundamentals/server-authority.md), [UI and input](roblox-fundamentals/ui-and-input.md) | Build working experiences: instances, events, remotes, validated gameplay, UI |
| Level 4: Intermediate engineering | [Patterns and boundaries](intermediate/patterns-and-boundaries.md), [State and data](intermediate/state-and-data.md), [Async and concurrency](intermediate/async-and-concurrency.md), [Rojo project structure](intermediate/rojo-project-structure.md) | Structure multi-module code, persist data, run Rojo projects |
| Level 5: Strict typing | [Annotations and inference](strict-typing/annotations-and-inference.md), [Modes](strict-typing/modes.md), [Narrowing and guards](strict-typing/narrowing-and-guards.md), [Casts and assertions](strict-typing/casts-and-assertions.md), [Generics](strict-typing/generics.md), [Subtyping and compatibility](strict-typing/subtyping-and-compatibility.md), [Type packs](strict-typing/type-packs-and-variadics.md), [Solver and migration](strict-typing/solver-and-migration.md), [Diagnosing errors](strict-typing/diagnosing-errors.md) | Type anything precisely, read any error, migrate codebases to strict |
| Level 6: Advanced production | [Architecture](advanced/architecture.md), [Packages](advanced/packages.md), [Security and production](advanced/security-and-production.md), [Performance](advanced/performance.md) | Architect services, controllers, and data. Ship secure systems. Optimize by measurement |
| Level 7: Language evolution | [RFC status guide](rfcs/implemented.md), [Syntax](rfcs/syntax.md), [Generics and packs](rfcs/generics-and-packs.md), [Type-system RFCs](rfcs/type-system-rfcs.md), [Type functions](rfcs/type-functions.md), [Stdlib and config](rfcs/stdlib-and-config.md) | Understand where each feature came from and what is still unavailable |
| Tooling | [Testing](tooling/testing.md), [Debugging workflows](tooling/debugging-workflows.md), [Format, lint, version control](tooling/format-lint-version-control.md), [Shipping checklist](tooling/shipping-checklist.md) | Test, debug, format, version, and ship your work like a team of one |
| Level 8: Integration projects | [Utility library](projects/utility-library.md), [Gameplay mechanic](projects/gameplay-mechanic.md), [Service/controller system](projects/service-controller-system.md), [Client-server protocol](projects/client-server-protocol.md), [Data system](projects/data-system.md), [Capstones](projects/capstones.md) | Prove it: six builds combining the whole course |
| Reference | [Glossary](glossary.md), [References](references.md) | Look up terms and find source documentation |

## Conventions used throughout

Samples use `--!strict` on line 1 unless the page teaches another mode. Every Roblox sample names its container, such as a Script in ServerScriptService or a LocalScript in StarterPlayerScripts. Each file gets Engine services once with `game:GetService`. Constructed Instances set `Parent` last. Shared tables return frozen. Every Engine and package claim links its official source; confirm the linked source again before you rely on version-sensitive behavior.
