1. Building the basics
  2. Controlling the program flow
  3. Organizing for reuse
  4. Interfacing with code and errors
  5. Borrowing ownership with scopes
  6. Working with collections
  7. Reading input and writing output
  8. Using crates with cargo
  9. Testing what you build
  10. Documenting what you build
  11. Generating code with macros
  12. Using heap memory effectively
  13. Running concurrent code
  14. Writing async code
  15. Working with generics
  16. Calling unsafe and foreign functions