Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0dfec54
WIP with Aside import error
roboteer5291 Jun 19, 2026
3c6f97b
Fix autoimport
roboteer5291 Jun 19, 2026
154d191
Educator's Guide landing page
roboteer5291 Jun 19, 2026
efa13c0
Start Educator's Guide landing page
Adrianamm Jun 17, 2026
36dd12d
Start remark autoimport
roboteer5291 Jun 19, 2026
9bd32ad
Fix autoimport
roboteer5291 Jun 19, 2026
8c12770
Educator's Guide landing page
roboteer5291 Jun 19, 2026
c42ee5e
Merge remote-tracking branch 'roboteer5291/educators-guide' into educ…
roboteer5291 Jun 19, 2026
3219139
Educator's Guide landing page
roboteer5291 Jun 20, 2026
a5136c2
Merge remote-tracking branch 'roboteer5291/educators-guide' into educ…
roboteer5291 Jun 20, 2026
51d7f3f
Finish Educator's Guide intro, add blank stage pages
roboteer5291 Jun 23, 2026
155c71b
Merge branch 'main' into educators-guide
roboteer5291 Jun 27, 2026
e5e47e7
Lint/format
roboteer5291 Jun 27, 2026
5965ee2
Remove header from stage 0 page
roboteer5291 Jun 27, 2026
6bf92b9
Fix homepage build error
roboteer5291 Jun 27, 2026
2163d0a
Add reference to Python and C++
roboteer5291 Jun 27, 2026
0fb5f45
Fix merge errors
roboteer5291 Jun 27, 2026
55a0161
Fix typos
roboteer5291 Jun 27, 2026
15d72a9
Add to note about minimal prior knowledge
roboteer5291 Jun 27, 2026
ac11df3
Clarify
roboteer5291 Jun 27, 2026
effbdd7
Update src/content/docs/educators-guide/introduction/index.mdx
roboteer5291 Jun 27, 2026
7650bfc
Update src/content/docs/educators-guide/introduction/preparation.mdx
roboteer5291 Jun 27, 2026
a0deb14
Wording change re: sidepaths
roboteer5291 Jun 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions src/config/sidebarConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,41 @@ export const sidebarSections: Record<string, SidebarSection[]> = {
},
],

// Educator's Guide section
'/educators-guide': [
{
label: "Educator's Guide",
items: [
{ label: 'Introduction', slug: 'educators-guide/introduction' },
{
label: 'The Stages',
slug: 'educators-guide/introduction/the-stages',
},
{
label: 'Preparing Yourself',
slug: 'educators-guide/introduction/preparation',
},
{ label: 'Stage 0', slug: 'educators-guide/stage0' },
{
label: 'Stage 1',
collapsed: true,
items: [
{ label: 'Overview', slug: 'educators-guide/stage1' },
{
label: 'Stage 1A',
slug: 'educators-guide/stage1/stage1a',
},
{
label: 'Stage 1B',
slug: 'educators-guide/stage1/stage1b',
},
],
},
{ label: 'Stage 2', slug: 'educators-guide/stage2' },
],
},
],

// Other Resources section (maps to /resources in content)
'/other-resources': [
{
Expand Down
58 changes: 58 additions & 0 deletions src/content/docs/educators-guide/introduction/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
title: Educator's Guide Overview
description: A guide for educators implementing the FRCSoftware.org Learning Course
---

The FRCSoftware.org Learning Course is a self-paced, comprehensive program that teaches FRC robot programming and Java skills.
This guide is intended to help educators effectively implement the course while supporting their students throughout the learning process.
Designed for accessibility, the course requires minimal prior knowledge of programming, physics, or math, making it suitable for students from various backgrounds.
The emphasis is on building knowledge through consistent practice and review.

## Course Usage

The course is built for self-paced learning, where students can progress at their own speed.
It utilizes code and robot simulation, a tool standard throughout FRC programming, to enable students to see their work and results quickly and not require a specific robot, or any robot access.
It can either be used by students to self-teach or used to help teach new students in a more classroom-esque setting.

<Aside type="note" title="Why Self-Paced?">
Different people will have different starting points and different things
they don't understand or struggle with. Going at a set pace may cause some
students to be bored and others to struggle and fall behind.
</Aside>

The ideal setup is for educators to offload most of the curriculum (concepts, exercises, projects) to the website, freeing them up to give more individualized help and review to each student.
This is what may be called a “self-paced blended learning” approach, where preferably meeting time or class time is given for students to do the work at their own pace and for educators to review and catch mistakes as students are working through exercises and projects.

This approach helps increase motivation and engagement, reduces gaps in knowledge, builds confidence, and helps make sure every student gets the support they need to learn.

## Course Content

While the initial Java content is taught via general exercises, the majority of the course is focused on teaching FRC programming skills through FRC-relevant exercises, where new skills and concepts are introduced in each project.
Each section has a bit of explanation on the concepts or skills being introduced in the exercise, with the exercises gradually decreasing in guidance to help students get more confident with writing software.

<Aside type="note" title="Why Java?">
Java is the most popular language used in FRC by a significant margin
([source](https://community.firstinspires.org/more-reefscape-by-the-numbers-new-legal-devices
"FRC Blog: More REEFSCAPE By The Numbers")). This means that there's an
abundance of public code to refer to and that it's the easiest language to
receive help for. Additionally, many students learn Java through AP Computer
Science in school, giving them exposure to the language already. Many of the
concepts discussed in this course will be applicable to Python or C++,
however syntax will differ and there may be some concepts or libraries used
that are completely unavailable.
</Aside>

The progression of the course moves from learning how to write Java to programming robots of increasing complexity, starting with individual mechanisms of robots and moving to full robots.
Students will then learn how to write a robot program from the ground-up, thinking about code structure and how to best write their code for a balance between speed and maintainability.

Additionally, there are various reference sections that don't fall on the main Learning Course.
These cover topics that are relevant to FRC programming, such as swerve or vision, but aren't necessarily the core concepts that need to be taught to allow a student to meaningfully contribute in-season.
Generally, these topics are something only a core group of students on a programming subteam would need to know, while the Learning Course focuses on the concepts every student will want to know to effectively contribute.

The purpose of software in FRC is to maximize the robot's capabilities in matches, working hand in hand with the robot's design and the team's strategy.
As such, this course places a focus on giving students the tools to write code efficiently and to maximize the use of time once the robot is complete.
This includes heavy utilization of simulation to develop and validate code, structuring code to be both quick to write and easy to make changes and maintain in-season, and giving students the tools to evaluate when certain control strategies may be necessary or whether a simpler, but easier, strategy is appropriate.

There are infinitely many ways to structure a robot project or control a mechanism, but this course gives what its writers believe to be the best balance of simplicity, maintainability, and capability.
As such, how your team wrote code in the past isn't necessarily incorrect, it's just not how this course will be teaching.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it's worth mentioning something like even if you intend to teach your team to structure code differently, FRCSoftware resources can still be leveraged to accomplish that (say starting with our Stage 2 starter code and writing a version of that using a team's custom framework while leveraging the sim we shipped with the starter code).

Happy to treat this more as something to think about than something to include immediately

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that idea, but I'd be hesitant to mention that before we know what the stage 2 code is going to look like and what the guides behind it are going to look like as well. Depending on how things are written, it could be really weird to work around a different structure. For the time being I think it's probably best to hold off, but keep in mind once we have a better picture of what a complete stage 2 is going to look like.

The concepts taught in this course should be applicable to most teams' code structure.
27 changes: 27 additions & 0 deletions src/content/docs/educators-guide/introduction/preparation.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
title: Preparation
description: A guide for educators to prepare themselves to deliver the Learning Course to students.
---

Before using the FRCSoftware.org Learning Course to teach your students, make sure you have an adequate understanding of the concepts covered.
The best way to do this is to go through the course yourself; however, the level of involvement with which you do so is dependent on your previous knowledge.
If you're new to FRC programming or Java, we recommend going pretty deep through the course as much as you can, at least so you're ahead of the students you're helping guide.
If you're pretty experienced with Java and FRC programming, you might just go through the Educator's Guide to get a complete overview of the course and caught up to date with practice.

<Aside type="note">
While the commands v3 library retains many elements from the v2 library,
there are many significant changes that impact how it is used and how to
best structure code. If you have experience with commands v2 but not v3, a
deeper dive into the v3 library is recommended.
</Aside>

In particular, familiarizing yourself with the development environment, tools, and git is going to be particularly helpful to ensure that your students can focus on the code itself.
Additionally, having such software on your own computer will allow you to demonstrate things for students without impacting their own code.

## Final Advice

1. Remember that is is ok for students to be at wildly different sections of the course.
2. Even if a student just gets through Stage 1, they would have enough knowledge to be somewhat helpful and easy to guide during build season.
The more sections they complete, the more autonomous they should be as a developer, making them easier to lead to complete a task.
3. When helping students, make sure to not handhold them too much.
If you're in a situation where you can get the student to solve a problem by asking some guiding questions, do that.
42 changes: 42 additions & 0 deletions src/content/docs/educators-guide/introduction/the-stages.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: The Stages
description: An explanation FRCSoftware.org Learning Course stages for educators
---

The course progressively builds complexity while reinforcing core concepts of good software development practices, controls fundamentals, and code organization.
It starts with basic code to control a 2026 kitbot and progresses through more complex robots and mechanisms.

## Stage Section Overview

**Stage 0: Java Fundamentals**

- Sets up students with the development environment and required tooling
- Teaches students the Java concepts necessary for FRC software

**Stage 1a: Basic FRC Programming**

- Introduces students to many of the development tools which will be used throughout the course and for general FRC development
- Provides an overview of FRC electronics
- Introduces students to the 2026 Kitbot, which will be utilized throughout Stage 1
- Teaches the basics of FRC motor controller and gamepad interaction
- Students will have a functional teleoperated kitbot program and a basic auto

**Stage 1b: Introduction to Command-Based Programming**

- Introduces command-based programming
- Introduces logging and telemetry
- Introduces the concept of code structure and working with multiple files
- Covers the basics of PID control when applied to simple autonomous driving
- Students will have a functional teleoperated kitbot program and a more advanced auto

**Stage 2: 2025 Robot**

- Introduces feedforward control and mechanism dynamics
- Provides techniques for additional teleoperated automation
- Students will write entire `Mechanism`s on their own
- Introduces commands v3 state machines
- Discusses various code structure and organization choices that will have to be made in any given robot project
- Covers one technique to prevent mechanisms from colliding with the rest of the robot

Additionally, all stages will naturally include a significant amount of debugging experience as students write their code.
Debugging is a critical skill that all students should know as, inevitably, some code won't work as expected on the first try.
6 changes: 6 additions & 0 deletions src/content/docs/educators-guide/stage0/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: 'Stage 0: Java Fundamentals'
description: An overview of Stage 0 for educators
---

WIP
6 changes: 6 additions & 0 deletions src/content/docs/educators-guide/stage1/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Stage 1 Overview
description: An overview of Stage 1 for educators
---

WIP
6 changes: 6 additions & 0 deletions src/content/docs/educators-guide/stage1/stage1a.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: 'Stage 1A: Basic FRC Programming'
description: An overview of Stage 1A for educators
---

WIP
6 changes: 6 additions & 0 deletions src/content/docs/educators-guide/stage1/stage1b.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: 'Stage 1B: Introduction to Command-Based Programming'
description: An overview of Stage 1B for educators
---

WIP
6 changes: 6 additions & 0 deletions src/content/docs/educators-guide/stage2/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Stage 2 Overview
description: An overview of Stage 2 for educators
---

WIP
12 changes: 9 additions & 3 deletions src/content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,15 @@ import HomeCard from '../../components/HomeCard.astro';
description="Explains the main features of the website. Recommended to go through before the learning course."
/>
<HomeCard
title="Contribution"
href="/contribution/"
icon="wrench"
title="Educator's Guide"
href="/educators-guide/introduction"
icon="book"
description="A guide for educators implementing the FRCSoftware.org Learning Course."
/>
<HomeCard
description="Help contribute! Since FRCSoftware.org is in such an early stage right now, we are in need of contributors."
icon="wrench"
href="/contribution/"
title="Contribution"
/>
</div>
2 changes: 1 addition & 1 deletion src/starlightOverrides/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const navLinks = [
{ href: '/feature-guide/', label: 'Website Feature Guide' },
{ href: '/getting-started/intro-to-prog/', label: 'Getting Started' },
// { href: "/learning-course/", label: "Learning Course" },
// { href: "/educators-guide/introduction/", label: "Educator's Guide" },
{ href: '/educators-guide/introduction/', label: "Educator's Guide" },
// { href: "/design-handbook/", label: "Design Handbook" },
// { href: "/mechanism-examples/", label: "Mechanism Examples" },
// { href: "/best-practices/", label: "Best Practices" },
Expand Down
Loading