Skip to content

Educator's Guide Overview

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 physics or math, making it suitable for students from various backgrounds. The emphasis is on building knowledge through consistent practice and review.

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-tach or in a more classroom-esque setting where it’s led by student programming leads or mentors.

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.

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.

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.

Why Java?

Java is the most popular language used in FRC by a significant margin (source). 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.

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 one student 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 FRC software 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. The concepts taught in this course should be applicable to most teams’ code structure.