# Introduction

As a programmer you should understand almost everything about the robot:

* **Mechanical systems** (Inertia, gear ratios, basic physics)
* **Electrical systems** (power distribution, sensors, networking).
* **Software systems** (subsystem control, autonomous routines, safety features).

Before diving into code, make sure to review the [design](https://unirex-5817.gitbook.io/training) and eletrical resources(TODO link). Programming decisions are only as good as your understanding of the hardware.

***

### What This Guide Covers

We’ll start by breaking down how the robot works and how to model it in software. From there, you’ll learn:

1. **Fundamentals** – Gear ratios, current limits, subsystem control, autonomous routines.
2. **Seasonal Workflow** – What you should be doing at each stage of the season.
3. **Competition Readiness** – What you should be doing to succeed at competition.

***

### Programming Language

We use **Java** as our primary programming language.

WPI (the creators of WPILib) maintain the libraries and frameworks that all FRC robots run on. Their resources are super useful:

&#x20;[WPILib Official Site](https://wpilib.org/)

***

### Learning Java

If you are new to Java, here are the recommended starting points:

* **Basics and Syntax**:\
  [Java Programming Basics and Syntax](https://docs.google.com/document/d/1DMp1ZqzaLNj9CzdIEbfEdjj1DOePfNHhwf5NEjGn7FE/edit?tab=t.0#heading=h.atft1gljwkj2)\
  (Skim the rest if you’re curious.)
* **Full Video Course** (highly recommended):\
  [Learn Java – Full Course](https://www.youtube.com/watch?v=xTtL8E4LzTQ)
  * Skip the starred sections and sections #10, #58, #59, #62, and #64.
  * This course covers far more than Mason’s guide and will give you a strong foundation.

***

### Key Mindset

You’ll spend your time not only writing code but also:

* Debugging hardware/software interactions.
* Testing and simulating before the robot is built.
* Iterating quickly to match evolving mechanical designs.
* Collaborating with design and electrical teams.

The better you understand the full system, the more effective you’ll be as a programmer.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://uni-rex5817.gitbook.io/programming-training/introduction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
