Hands-on Learning

Both software developers and security engineers are practitioners first, theoreticians second. Understanding underlying concepts and situational context is critical, certainly. But at the end of the day you write and run code. And someone else may try to exploit that code while it's running.

The aforementioned Dreyfus Model encapsulates both formal instruction and hands-on practice1. It may be cliche, but practice makes perfect. Or makes expert, rather. There's a limit to how much you can learn skimming a book for concepts.

You need to write, run, and debug code to progress through the Dreyfus stages. This means following along with examples presented in the chapters, and, more importantly, using this book as a starting point for real-world projects of your own choosing.

Our goal here is to teach concepts and transferable skills, to get you to the level where real-world experience is a realistic potential. For the language-learning aspect, that's the point at which you'd feel comfortable:

  • Contributing to existing open-source projects written in Rust.
  • Publishing a Rust library of your own design.
  • Incorporating Rust into a new initiative in your workplace.
  • Etc.

Chapter-End Challenges

Each chapter ends with an optional challenge. These challenges are open-ended problems that require both designing a moderate-to-high complexity feature and actually coding it up.

You'll need to explore the solution space independently, applying the chapter's concepts in a new context, finding resources beyond this book, and developing your own strategies.

No challenge solutions are provided, it's up to you to work through the suggested problems! Or personal variations that motivate you.