Skip to content

Latest commit

 

History

History
127 lines (87 loc) · 4.77 KB

File metadata and controls

127 lines (87 loc) · 4.77 KB

Exercises:

Prepare the exercises in the following list according to the sessions they are assigned to. Each exercise should take about 30min to complete, if approached right. There are 2 times 42 exercises (what a surprise). The first 42 are to warm up and get comfortable with Rust. The second 42 are a little more complex and require either a clever algorithm or a good design. Make use of any tool at your disposal and do work in groups to reflect upon the different solutions possible:

Credit: The exercises are taken from Exercism, you can find many other languages to practice there and a helpful community. You can also find solutions to each exercise. In you own interest, only look at these solutions after spending at least 30min on an honest attempt to each exercise.

Curriculum

1. Types: Rust Data Types and Tooling

Learning Goals:

  • Understand why are types important for programming in General
  • Understand how can types help support efficiency, safety, and security
  • Know basic types in Rust and understand how they compare to Python
  • Understand the differences between scalar types, compound types, and structs
  • Apply Numeric Types, Strings, and Pointers in your programs.
  • Apply Tuples, Arrays, Vectors, and Hashmaps in your programs.
  1. Exercise Review:

  2. Lecture: Why do we need types and what can we do with them?

  3. Project: Creating preliminary Data Structure and Logic for our Game of Clack

Additional Reading:

2. Memory Management: Mutability and Ownership

Learning Goals:

  • Understand head and stack and their usage and implications for structuring programs
  • Understand the need for and pitfalls of pointers
  • Understand the difference between mutable and immutable types
  • Understand how C, Python and Rust handle memory
  • Understand Ownership and Borrowing and Rust for both mutable and immutable types
  • Analyse and resolve issues arising from Ownership and Borrowing in your own code

Additional Reading:

The detailed content of each Session will be added here during the term.

3. System Design

Learning Goals:

  • Understand and apply important principles of systems design
  • Know and apply the Separation of Concerns principle
  • Know and apply the Don't Repeat Yourself Principle
  • Know and apply the KISS Principle
  • Know and apply the SOLID Principle
  • Know and apply the YAGNI Principle
  • Avoid premature optimization
  1. Exercise Review

  2. Lecture

  • Programming Principles
  1. Project
  • Create Basic Data Structure and Simple Frontend for Clack

4. Object-Oriented-Design

Learning Goals:

  • Understand the basics of object-orientation
  • Know and understand how to build a Struct in Rust
  • Develop a basic understanding of Traits and Generics
  • Get to know Enums and understand when to use them
  • Understand Generics and Enums
  • Apply Pattern Matching
  1. Exercise Review

  2. Lecture:

  • Object Orientation and Generic Types in Rust
  • Enums and Pattern Matching
  1. Project:
  • Building Game, Turn and Clacking Function

5. Encapsulation and Abstraction

Learning Goals:

  • Get an Advanced understanding of Abstract Types
  • Understand the differences between Trait Object and Generics
  • Know how to write own Traits Object and Generics
  • Know how to use Generic Functions and Type Parameters
  • Understand Polymorphism, Apply Generic Traits and Operator Overloading
  • Know and apply Utility Traits

6. Functional Programming

Learning Goals:

  • Understand the differences between object-oriented Programming and functional Programming
  • Know and apply higher-order functions in Rust (aka Iterator Adapters)
  • Understand and apply closures in Rust
  • Using and apply functional patterns to collection types in Rust

7. Strings and IO

UTF-8:

Strings in Rust: