1. Introduction
  2. 1. Level: Starter
    1. 1.1. Your first programming language
    2. 1.2. Related books
    3. 1.3. Setting up the computer
    4. 1.4. Your first program
    5. 1.5. Quick, to the IDE!
      1. 1.5.1. Saving our progress
  3. 2. Level: Novice
    1. 2.1. It's like cooking recipes, seriously
    2. 2.2. Variables are like little boxes that store things inside
      1. 2.2.1. Exercise: Printing and Formatting
    3. 2.3. Having fun with libraries
    4. 2.4. Declaring variables
      1. 2.4.1. Exercise: Variables
      2. 2.4.2. Let's try Turtle!
    5. 2.5. Incrementing and decrementing
    6. 2.6. Looping' around
      1. 2.6.1. Exercise: loops
      2. 2.6.2. !? Turtle: loops
    7. 2.7. Adding some comments
    8. 2.8. What If…?
    9. 2.9. For loops again!
      1. 2.9.1. ? Other types of loops
      2. 2.9.2. !!? Exercise: conditionals
      3. 2.9.3. !!? Turtle: Improving with loops
      4. 2.9.4. !!!? Turtle: Making a spiral
  4. 3. Level: Apprentice
    1. 3.1. Introducing Functions
      1. 3.1.1. Returning values from functions
      2. 3.1.2. Function arguments
    2. 3.2. Data types
      1. 3.2.1. Rust data types
    3. 3.3. Back to declaring variables… with type
    4. 3.4. ? dbg!() and format!()
    5. 3.5. ? Converting types with explicit conversions
      1. 3.5.1. !!? Exercise: explicit conversions
    6. 3.6. A tiny bit on strings
      1. 3.6.1. Simple explanation on &str vs String
    7. 3.7. A bit more detailed explanation on functions
      1. 3.7.1. ? Introduction to Closures
    8. 3.8. !!? Project: A simple game with Macroquad
  5. 4. Level: Adept
    1. 4.1. Modules - splitting files
    2. 4.2. What are those other data types for?
    3. 4.3. ? const and static
    4. 4.4. Not everything are numbers and texts: Structs
      1. 4.4.1. Struct-specific functions, really?
      2. 4.4.2. !? OOP? More like OP
      3. 4.4.3. !!? What are objects and instances
    5. 4.5. ? Need to write back: &mut and *
    6. 4.6. ? Enums!
    7. 4.7. !? Match!
    8. 4.8. ? Floating point gotchas
    9. 4.9. !!? Contracts in programming
    10. 4.10. !!? Algorithms
    11. 4.11. !!? Data Structures
      1. 4.11.1. !!? Lists
      2. 4.11.2. !!? Tuples
      3. 4.11.3. !!? Slices
      4. 4.11.4. !!? HashMaps
    12. 4.12. !!? Project: A simple game with ggez
  6. 5. !? Level: Master
    1. 5.1. Borrowing
    2. 5.2. !!? Lifetimes
    3. 5.3. !!? What it made it "click" for me - memory allocation
    4. 5.4. !!? Generic parameters
    5. 5.5. !!? Data Structures
      1. 5.5.1. !!? Lists again!
        1. 5.5.1.1. !!? Deques and ring buffers
      2. 5.5.2. !!? HashMaps again!
        1. 5.5.2.1. !!? HashSets, what?
      3. 5.5.3. !!? The infamous linked list
      4. 5.5.4. !!? Trees
      5. 5.5.5. !!? Heaps
  7. 6. !!? Level: Grand Master
    1. 6.1. !!? A glance over macros
    2. 6.2. !!? Polymorphism (Traits)
    3. 6.3. !!? Functional programming
      1. 6.3.1. !!? Iterators
    4. 6.4. !!? Smart Pointers
      1. 6.4.1. !!? Box
      2. 6.4.2. !!? Rc
      3. 6.4.3. !!? RefCell
    5. 6.5. !? What is a Garbage Collector?
  8. 7. !!? Level: Legendary
    1. 7.1. !!? Polymorphism (dyn Box)
    2. 7.2. !!? No Size? ?Sized
    3. 7.3. !!? Threading
      1. 7.3.1. !!? Mutexes/Locks
      2. 7.3.2. !!? Atomics
    4. 7.4. !!? Async
    5. 7.5. !!? Databases and SQL
      1. 7.5.1. !!? What about NoSQL?
    6. 7.6. !!? Web applications!
      1. 7.6.1. !!? HTML+CSS+JS in one shot
      2. 7.6.2. !!? Web servers
      3. 7.6.3. !!? REST services
  9. 8. Appendices
    1. 8.1. Appendix A. License of this book
    2. 8.2. Appendix B. Caveats and challenges in this book
    3. 8.3. Appendix C. Exercises and Solutions
    4. 8.4. Appendix D. Proposed projects
    5. 8.5. Appendix E. Rust compared to other languages

A Language to Teach Programming
🦀 Rust for Total Beginners 🦀

Appendix C. Exercises and Solutions