Hey Rust folk.
Here’s a project that I’ve been hacking on (with Yilin Chen and
Xuwei Fu) that I hope might interest people. It’s a training course
on building real-world systems software with Rust, Practical Networked
Applications in Rust.
I think it is commonly recognized that while there is quite a lot of good Rust
documentation, there are not many guides on putting the pieces together to
create complete software projects. So this is an attempt to fill that gap.
Details about the course are in the link, but a short summary is that it
leads you through a series of projects, all on the same codebase, that
incrementally integrate new Rust subjects, finally resulting in a
high-performance, networked, parallel and asynchronous key-value database.
Before each project, the topics are introduced independently
through external resources and small exercises. It’s my hope that the course
both explicitly and implicitly teaches people a variety of things about best
practices, the crate ecosystem, the documentation ecosystem, tooling,
systems-level programming generally, and other tidbits that new Rust programers
typically have to discover on their own.
I am creating it for my employer, PingCAP, as a tool for onboarding new Rust
programmers, but I am also determined that it be useful for a broader audience
of aspiring Rust systems programmers. In particular, even though the end-product
is a database, I intend that there is, or will be, enough subject matter to
cover a wide variety of systems programming concerns.
Today it is definitely in an “alpha” state and incomplete, but it is starting to
look pretty neat, so I want to get it in front of people and get feedback. The
scope is still modest (it gets through four projects decently, the fourth being
on parallelism, and then falls apart on the next async project), but I think it
could ultimately span at least 10 projects, with more content to be added to the
existing projects as well.
Because of its incompleteness, I can’t wholeheartedly suggest that you actually
take the course, but for any that do I would be grateful to hear about your
experience. And even if you don’t try the course, I’m still interested in your
feedback, what you think of the structure and the progression, what topics you want
in this kind of material, etc. Besides individual mentoring and blog posts, I
don’t have any background as an educator, so any thoughts about how learnable
this looks and what to do to make it moreso are also hugely appreciated.