# Mentoring

In order to help new contributors that may want or need mentoring in order to contribute to F3D,
F3D has a mentoring program. Here we explain how it works as well as provide resources that could not be listed elsewhere.

## Process

If you want to contribute to F3D but have no experience with open source contributions or need help with technical subjects,
then you may want to enroll in the mentoring program!

Just join our [discord](https://discord.f3d.app) and select the "mentee" role, then a mentor will reach out and guide you.
Please note there is no expectation of knowledge, skill or ability. You just need to want to contribute to F3D and willing to learn.
Usually it looks like this:

- You join the discord as Mentee.
- A maintainer/moderator welcomes you and guide you to a dedicated channel.
- Your mentor ask you about what you want to do and what are your skills in order to adapt the mentoring.
- Your mentor points you to resources to get started, usually with compiling the software.
- Once you are able to build and use F3D, your mentor asks you to look at ["good-first-issue"](https://github.com/f3d-app/f3d/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
- You pick an _unassigned_ issue
- Your mentor explain the issue in details to you to get your started on it
- While you progress on the issue, your mentor will guide you with technical issue and contribution steps

## Important points

- [Discord](https://discord.f3d.app) is needed for mentoring.
- Please talk with your mentor in the dedicated channel, not in private messages.
- Please ask any questions you may have, mentoring is about learning!
- Once again, please ask questions and make sure you understand everything, we love to share about how the project works!
- Your mentor will ask you to open a pull request to show some code. Please do that instead of sharing a branch, it is much easier for mentors.
- The contribution guide mention running tests, do not worry about tests for now.
- The contribution guide mention running CI, do not worry about CI for now.
- If you use AI as a dev tool, mentors will considered it your own code and you should be able to explain what it does.

## Resources

Generic Resources:

- [How to ask questions the smart way](http://www.catb.org/esr/faqs/smart-questions.html)
- [CMake practical guide](https://crascit.com/professional-cmake/)
- [LearnCPP](https://www.learncpp.com/)
- [LeanOpenGL](https://learnopengl.com/)
- [VTK documentation](https://docs.vtk.org/en/latest/)
- [ImGui documentation](https://github.com/ocornut/imgui/wiki/)

F3D pull request examples:

- [PR that makes a small doc change](https://github.com/f3d-app/f3d/pull/2450)
- [PR that fixes a simple issue](https://github.com/f3d-app/f3d/pull/2397)
- [PR that adds a CLI option](https://github.com/f3d-app/f3d/pull/2402)
- [PR that adds a CLI and libf3d option](https://github.com/f3d-app/f3d/pull/2181)
- [PR that adds a new interaction binding](https://github.com/f3d-app/f3d/pull/2404)
- [PR that adds a new reader](https://github.com/f3d-app/f3d/pull/1579)
- [PR that adds a new plugin](https://github.com/f3d-app/f3d/pull/1128)

## Mentors

Anyone can be a mentor!

That being said, usually mentors are contributors with a bit of experience with the project and with open source contributions.
So, when a Contributor becomes a [Returning Contributor](./10-GOVERNANCE.md#12-returning-contributors), they can also decide to select the `mentor`
role on discord, which means that they will be informed when a Mentee needs mentorings. There is no obligations and no expectations.
