ferrous-systems / teaching-material2

teaching-material v2.0
7 stars 2 forks source link

This is free workshop material produced by Ferrous Systems for trainings. Get in touch for a custom quote. The time for the full course is around three to four days.

The material is created with people with zero Rust experience but with a programming background in mind.

Ferrous Systems offers a large Rust curriculum for both beginner and advanced Rust developers.

Ferrous Systems specialises in custom, topic focused workshops for enterprises starting or expanding their use of Rust. Supplemental to our courses, we offer ongoing help and feedback.

The materials are presented as a set of small, self-contained lessons on a specific topic. Note that lessons might be revised, extended, or removed, when necessary to keep material up to date or relevant to new audiences. Lessons can be arranged into courses exploring various aspects of Rust.

Booking

See https://ferrous-systems.com/training for open courses or mail office@ferrous-systems.com for custom offers.

Group setup

Ferrous Systems recommends a trainer per 6 attendees for full trainer bandwidth. If possible, we recommend opting for groups of at least 12, to efficiently allow for 2 trainers.

When selecting groups for training, we recommend that participants have a similar experience level in Rust, and similar goals for using the language when possible. We are experienced with training developers from a wide range of backgrounds and experience levels, and can design a training suitable for your team.

Training material

Ferrous Systems offers our training material under MIT/Apache-2.0 license for source code (examples and exercises) and Creative Commons (CC-BY-SA) for textual content.

Custom course material developed on request, including any provided examples or exercises, will be delivered directly to you as part of the training.

Trainer staff

The Ferrous Systems training staff consists of multiple Rust project maintainers and domain experts, active in multiple working groups. This makes sure our trainers are always up to speed on new developments and can give current and authoritive answers.

Among those are:

Ferrous Systems can also collaborate with local trainers in Europe, US, Canada, South America, South Africa, and Oceania.

Tailoring

Ferrous Systems offers courses in many different settings.

Courses will be tailored to the clients needs during an interview before the event. This interview should happen as early as possible.

Specifically courses for companies in a transformation towards using Rust will be tailored to the companies core subjects.

The "three days" core

Ferrous Systems builds its core course around a base course of three days. This course consists of introduction into shared Rust subjects plus application in one domain. Three days gives enough time to focus on this domain for at least one day, plus enough time to answer questions coming up from the audience.

After a three days course, attendees will have a solid knowledge in Rusts core concepts, especially Ownership and Borrowing. They will also have the core skills necessary for efficient self-guided learning.

Variations

Variations of the course, such as a shorter or a longer version are available.

"Three days" overview

A course that focuses more on an ecosystem overview over a detailed core subject. It may cover up to 4 topics.

Attendees may not become productive in all areas, but get a good feeling for them.

This course is perfect for engineering management that will most likely not end up using Rust daily, but needs broad knowledge to assess Rust as a technology. It is also frequently given in academic settings.

5 days

The longer versions covers similar subjects as above, but in more detail. This allows for exercises such as the construction of a larger piece of software in the training group collaboratively.

These courses are recommended for people that are intended to be multipliers in your organisation, teaching or leading other teams using Rust.

After 5 days, attendees will have solid knowledge in a topical domain and full productivity.

2 days

A condensed version of the three days course. Detailed topic deep dives will be reduced and some self-guided exercises reduced to "code along" sessions.

2,4 and 8 hours topic tasters

Taster sessions that favor experiences over solid knowledge and get people excited.

Perfect for conferences and internal all-hands to expand people’s horizons.

Advanced courses

Advanced courses deepen a Rust subject and are indended for groups that have already attended a course previously. They quickly refresh core knowledge and then add a specific deep dive on topic. Advanced courses also differ from base courses in that they include a number facilitated discussions for attendees to share their experience.

Advanced courses are tailored like base courses to the need of the group. For example, an basic course for for asynchronous programming explains how concurrent execution in Rust works, while the advanced one may include writing your own execution engine.

Ferrous Systems offers Rust courses for a wide variety of subjects. The following is a non-exhaustive list of subjects.

Every subject with be taught with hands-on exercises.

Core topics

This is the core component of the course. In this course, attendees will learn:

Exercises will be tailored to the chosen special subjects.

Advanced Generic Programming in Rust

Although the use of generics is taught in the core course, this section instead focuses on how, and when, to use them effectively. For developers of widely used libraries (internal or public), this material is particularly important.

In this module, attendees will learn:

Rust in C/C++ Environments

Rust is often deployed in existing products, especially within or among solutions written in C/C. This module explains binding efficiently from C/C to Rust and from Rust to C/C++ codebases.

In this module, attendees will learn:

Unsafe Rust

Rusts unsafe feature is sometimes necessary for speed optimisations or implementation of special data structures. This module explains its position and use in the language.

In this module, attendees will learn:

Rust Testing

This module teaches advanced Rust testing techniques.

In this module, attendees will learn:

Rust for Application Development

This module is meant for developers that mostly produce application layer code and work less on libraries. It focuses less on line-by-line details, but on system construction and usage of foreign code.

In this module, attendees will learn:

Binary Size Optimisation

This module is meant for developers working on systems with constraints on program size, such as switches or IoT gateways. It explains techniques to keep the binary size of Rust applications small.

In this module, attendees will learn:

Rust Speed Optimisation

This module is meant for developers working on systems with high speed demands. It explains techniques to test for performance and optimise for speed.

In this module, attendees will learn:

Rust for Networking

This module is meant for developers working on the networking layer. It combines well with the "Asynchronous and Concurrent Rust" module.

In this module, attendees will learn:

Asynchronous and Concurrent Rust

This module is meant for developers interested in building highly concurrent systems. It combines well with the "Rust for Networking" module.

In this module, attendees will learn:

Cross Compilation

This module is meant for developers targeting many different architectures.

In this module, attendees will learn:

The optional targets are taught on client need.

Embedded Rust

This module is meant for developers interested in building bare metal systems such as microcontrollers. It includes the "Cross-Compilation" module, as far as it applies to microcontrollers.

In this module, attendees will learn:

Embedded Rust using RTIC

This module is similar to "Embedded Rust", but uses the RTIC concurrency framework for teaching (previously known as "Real Time For The Masses").

Writing Drivers for Embedded Rust

This module extends the "Embedded Rust" or "Embedded Rust using RTIC" module.

In this module, attendees will learn:

Productive coding in Rust

This module further teaches Rust working techniques, also with the support of IDEs.

In this module, attendees will learn:

Rust and WebAssembly (WASM)

WebAssembly (WASM) is a intermediate language optimised for fast evaluation in secure sandboxes. This module focuses on understanding the role of WebAssembly and its usage. It is taught on a platform relevant to the group.

In this module, attendees will learn:

The development of this course is financed by Ferrous Systems.

They are open sourced as a contribution to the growth of the Rust language.

If you want to fund further development of the course, book a training!

This course is expressively intended for commercial and free use.

https://creativecommons.org/licenses/by-sa/4.0/