# Course Overview

<img src="https://842106675-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LIAGGBJMP1kBzA4YD-z%2Fuploads%2Fh5EdE6vCiVwIY0328r8U%2Ffile.excalidraw.svg?alt=media&#x26;token=39804cf4-1a8c-4a7d-b612-cee4caf61e92" alt="The overarching concepts that we address in the LiFi project." class="gitbook-drawing">

## Key Topics

In this course, we aim to answer how we can solve real-world problems with computers. To understand this, we need to focus on two key concepts: **algorithms** and **communication**. Algorithms are the recipes computers follow to solve problems. Communication over networks enables us—and computers—to share our knowledge with the rest of the world.

Computers can only solve problems when we describe them in a language they understand. Problems can be broken down into two parts: the input (what goes in) and the expected output (the solution). Learning how to represent this information in computer-friendly terms is essential, which is why we cover **information representation** as a foundational topic.

After representing information in a computer-friendly way, we need to give the computer instructions. While algorithms serve as general recipes for solving problems, a **program** is an algorithm translated into a programming language that computers can understand. A program simply takes input, processes it, and produces output. Though the actual **information processing** happens at the hardware level, we can write programs in more user-friendly languages like Python. Learning to program computers is a key goal of this project.

Information stored on a single computer has limited value until it's shared with others. That's why a main goal of the LiFi project is to understand information sharing—from how data travels through physical media like cables and Wi-Fi to how networks like the internet work.

## Learning Objectives

The LiFi project covers many **aspects of the digital world and its interfaces with the analog world**. It practically introduces topics typically found in a beginner's computer science course. While it may not always perfectly align with the course content, concepts are better understood when presented through a real-world project. A key objective is to help you understand the fundamental concepts that power modern computers and shape our digital world.

As we explore the digital world, we will learn about **how digital computers work** at a high level. You'll gain insight into how these versatile machines can perform countless tasks with remarkable precision and speed.

You will learn to write programs using Python, though learning Python itself isn't the main goal—we could have chosen any programming language. Instead, we focus on teaching **the basics of programming and algorithmic thinking**, which are universal skills that extend beyond Python and programming itself. At its core, programming is about **solving problems**.

## Course Materials

This course explores a new topic each week. Every topic includes comprehensive lecture notes, presentation slides, and a set of exercises. You find all the material listed below.

### Lecture Notes

* [Lecture Notes on Problem-Solving](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/problem-solving.pdf)
* [Lecture Notes on Algorithms](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/algorithms.pdf)
* [Lecture Notes on Information](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/information.pdf)
* [Lecture Notes on Bits](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/bits.pdf)
* [Lecture Notes on Code Systems](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/code-systems.pdf)
* [Lecture Notes on Data Structures](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/data-structures.pdf)
* [Lecture Notes on Analog vs. Digital](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/analog-vs-digital.pdf)
* [Lecture Notes on Storage](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/storage.pdf)
* [Lecture Notes on Logic and Arithmetic](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/logic-and-arithmetic.pdf)
* [Lecture Notes on Computers](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/computer.pdf)
* [Lecture Notes on Signals](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/signals.pdf)
* [Lecture Notes on Protocols](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/protocols.pdf)
* [Lecture Notes on Encryption](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/encryption.pdf)
* [Lecture Notes on Compression](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/script/compression.pdf)

### Presentation Slides

* [Slides on Problem-Solving](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Problem%20Solving.pdf)
* [Slides on Algorithms](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Algorithms.pdf)
* [Slides on Information](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Information.pdf)
* [Slides on Bits](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Bits.pdf)
* [Slides on Code Systems](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Code%20Systems.pdf)
* [Slides on Data Structures](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Data%20Structures.pdf)
* [Slides on Analog vs. Digital](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Analog%20vs%20Digital.pdf)
* [Slides on Storage](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Storage.pdf)
* [Slides on Logic and Arithmetic](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Logic%20and%20Arithmetic.pdf)
* [Slides on Computers](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Computers.pdf)
* [Slides on Signals](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Signals.pdf)
* [Slides on Protocols](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Protocols.pdf)
* [Slides on Encryption](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Encryption.pdf)
* [Slides on Compression](https://winf-hsos.github.io/university-docs/google_slides/wirtschaftsinformatik/SS%2025%20-%20Digitization%20-%20Information%20Representation%20and%20Processing%20-%20Compression.pdf)

### Programming Tutorials

* [Welcome to Python](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/welcome-to-python.pdf)
* [Tutorial on Variables and Data Types](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/variables-and-data-types.pdf)
* [Tutorial on Functions](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/functions.pdf)
* [Tutorial on Collections](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/collections.pdf)
* [Tutorial on Loops](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/loops.pdf)
* [Tutorial on Conditionals](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/conditionals.pdf)
* [Tutorial on Debugging and Error Handling](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/programming/debugging-and-error-handling.pdf)

### Exercises

Every week includes an exercise to deepen your understanding of the current material. The weekly exercises fall into three categories:

1. **Reflection exercises** that help you develop a broader understanding of the week's topics.
2. **Programming exercises** where you practice new coding techniques. While these exercises generally relate to the week's topic, the connection may not always be perfect.
3. **LiFi project exercises** that guide you through building the LiFi prototype, working toward the final product.

#### Reflection Exercises

* [Exercise Sheet on Problem-Solving](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-problem-solving.pdf)
* [Exercise Sheet on Algorithms](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-algorithms.pdf)
* [Exercise Sheet on Information](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-information.pdf)
* [Exercise Sheet on Number Systems](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-number-systems.pdf)
* [Exercise Sheet on Code Systems](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-code-systems.pdf)
* [Exercise Sheet on Data Structures](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-data-structures.pdf)
* [Exercise Sheet on Analog vs. Digital](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-analog-vs-digital.pdf)
* [Exercise Sheet on Storage](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-storage.pdf)
* [Exercise Sheet on Logic and Arithmetic](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-logic-and-arithmetic.pdf)
* [Exercise Sheet on Computers](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-computers.pdf)
* [Exercise Sheet on Signals](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-signals.pdf)
* [Exercise Sheet on Protocols](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-protocols.pdf)
* [Exercise Sheet on Encryption](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-encryption.pdf)
* [Exercise Sheet on Compression](https://winf-hsos.github.io/university-docs/quarto/digitization_and_programming/exercises/exercises-compression.pdf)

#### Programming Exercises

* [Problem-Solving Exercises](https://winf-hsos.github.io/lifi-exercises/python_introduction/lifi_problem_solving_exercises.pdf)

#### LiFi Project Exercises

* [Exercise 1: Ready, Set, Smoke](https://winf-hsos.github.io/lifi-exercises/exercises/01_exercise_ready_set_smoke.pdf)
* [Exercise 2: Logic With The LED](https://winf-hsos.github.io/lifi-exercises/exercises/02_exercise_logic_with_the_led.pdf)
* [Exercise 3: On and Off](https://winf-hsos.github.io/lifi-exercises/exercises/03_exercise_on_and_off.pdf)
* [Exercise 4: Digitizing The Physical World](https://winf-hsos.github.io/lifi-exercises/exercises/04_exercise_digitizing_the_physical_world.pdf)
* [Exercise 5: Speed Of Light](https://winf-hsos.github.io/lifi-exercises/exercises/05_exercise_speed_of_light.pdf)
* [Exercise 6: Text Messages](https://winf-hsos.github.io/lifi-exercises/exercises/06_exercise_text_messages.pdf)
* Exercise 7: Pixel By Pixel

## Important Terms And Concepts

You will notice that some words in this course are highlighted with <mark style="background-color:yellow;">**yellow color**</mark>. I use this formatting to point you to important terms and concepts that you should know and be able to explain. It is not necessarily explained in the same lesson or in this course at all. If you can't find anything here directly or in the provided literature, make sure you do your research and ask questions during sessions.

## Introduction Of Hardware ⚡

We use three different hardware devices during the LiFi-project. They are introduced in a dedicated lesson of the course and are marked with a ⚡, so you can find them easily.

{% content-ref url="lifi-project/v0-setup/the-led" %}
[the-led](https://docs.lifi-project.de/lifi-project/v0-setup/the-led)
{% endcontent-ref %}

{% content-ref url="lifi-project/v1-sending-signals/the-color-sensor" %}
[the-color-sensor](https://docs.lifi-project.de/lifi-project/v1-sending-signals/the-color-sensor)
{% endcontent-ref %}

{% content-ref url="lifi-project/v2-receiving-messages/the-oled-display" %}
[the-oled-display](https://docs.lifi-project.de/lifi-project/v2-receiving-messages/the-oled-display)
{% endcontent-ref %}

## Credits

This course was written with assistance from [ChatGPT](https://chat.openai.com/) and [DeepL](https://www.deepl.com/translator). Most of the drawings were created with [Google Slides](https://sites.google.com/view/slides-workspace/login) and [Excalidraw](https://excalidraw.com/). Some images were generated with [Bing Image Creator](https://www.bing.com/images/create).
