Initial commit: README
This commit is contained in:
256
README.md
Normal file
256
README.md
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
# 🎓 programming-concepts-universal
|
||||||
|
|
||||||
|
*Interaktiver Programmierkurs: Von C zu universellen Konzepten*
|
||||||
|
|
||||||
|
## 📋 Übersicht
|
||||||
|
|
||||||
|
Dieses Repository enthält einen kompletten Kurs für Programmieranfänger mit C-Grundlagen, der sich auf **sprachunabhängige Konzepte** konzentriert.
|
||||||
|
|
||||||
|
**Zielgruppe:** Student mit C-Erfahrung, geplantem C++-Umstieg
|
||||||
|
**Kursdauer:** 8 Wochen
|
||||||
|
**Lernziel:** Konzepte verstehen, die auf jede Programmiersprache übertragbar sind
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Repository-Struktur
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── README.md # Diese Datei
|
||||||
|
├── docs/
|
||||||
|
│ ├── programming-concepts-universal.md # Hauptkurs-Dokument
|
||||||
|
│ └── quiz-fragen.md # Interaktive Quizfragen
|
||||||
|
├── src/
|
||||||
|
│ └── c_examples/ # C Code-Beispiele
|
||||||
|
│ ├── module1_memory.c
|
||||||
|
│ ├── module2_datatypes.c
|
||||||
|
│ ├── module3_controlflow.c
|
||||||
|
│ ├── module4_functions.c
|
||||||
|
│ ├── module5_datastructures.c
|
||||||
|
│ ├── module6_pointers.c
|
||||||
|
│ ├── module7_oop_in_c.c
|
||||||
|
│ ├── module8_modularization.c
|
||||||
|
│ ├── Makefile
|
||||||
|
│ └── README.md
|
||||||
|
└── exercises/
|
||||||
|
├── checkpoint_a.c # Memory & Typen
|
||||||
|
├── checkpoint_b.c # Taschenrechner
|
||||||
|
├── checkpoint_c.c # Dynamische Liste
|
||||||
|
└── final_project/ # Todo-App
|
||||||
|
├── todo_c/
|
||||||
|
└── todo_cpp/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗺️ Kurs-Module
|
||||||
|
|
||||||
|
| Modul | Thema | C-Beispiel | C++-Gegenstück |
|
||||||
|
|-------|-------|------------|----------------|
|
||||||
|
| 1 | **Memory-Modell** | `malloc/free` | `new/delete`, Smart Pointer |
|
||||||
|
| 2 | **Datentypen** | `int32_t`, Overflow | `auto`, `constexpr` |
|
||||||
|
| 3 | **Flusskontrolle** | `if/for/while` | Gleich |
|
||||||
|
| 4 | **Funktionen** | Call-by-Value | References, `&` |
|
||||||
|
| 5 | **Datenstrukturen** | LinkedList, Stack | STL: `vector`, `stack` |
|
||||||
|
| 6 | **Pointer** | `*`, `&`, Arithmetik | References, Smart Ptr |
|
||||||
|
| 7 | **OOP** | Structs + Fct Ptrs | `class`, `virtual` |
|
||||||
|
| 8 | **Modularisierung** | MVC-Pattern | Namespaces, Templates |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Schnellstart
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
```bash
|
||||||
|
# C-Compiler (gcc oder clang)
|
||||||
|
gcc --version
|
||||||
|
|
||||||
|
# C++-Compiler (optional für Vergleich)
|
||||||
|
g++ --version
|
||||||
|
|
||||||
|
# Make (optional)
|
||||||
|
make --version
|
||||||
|
```
|
||||||
|
|
||||||
|
### Kompilieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Alle C-Beispiele kompilieren
|
||||||
|
cd src/c_examples
|
||||||
|
make all
|
||||||
|
|
||||||
|
# Einzelnes Modul
|
||||||
|
make module1
|
||||||
|
./module1
|
||||||
|
|
||||||
|
# Mit Debugging
|
||||||
|
make CFLAGS="-g -O0" module1
|
||||||
|
gdb ./module1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Kursverwendung
|
||||||
|
|
||||||
|
### Empfohlener Lernpfad
|
||||||
|
|
||||||
|
**Woche 1-2:**
|
||||||
|
1. Lese `docs/programming-concepts-universal.md` Modul 1-2
|
||||||
|
2. Bearbeite `docs/quiz-fragen.md` Fragen 1.1-2.3
|
||||||
|
3. Kompiliere und teste `module1_memory.c` & `module2_datatypes.c`
|
||||||
|
4. ✅ Checkpoint A bestehen
|
||||||
|
|
||||||
|
**Woche 3-4:**
|
||||||
|
1. Modul 3-4 lesen
|
||||||
|
2. Quizfragen 3.1-4.3
|
||||||
|
3. Code-Beispiele: `module3_controlflow.c`, `module4_functions.c`
|
||||||
|
4. 📝 Checkpoint B: Taschenrechner implementieren
|
||||||
|
|
||||||
|
**Woche 5-6:**
|
||||||
|
1. Modul 5-6 lesen
|
||||||
|
2. Quizfragen 5.1-6.3
|
||||||
|
3. Code: `module5_datastructures.c`, `module6_pointers.c`
|
||||||
|
4. 🔧 Checkpoint C: Eigene LinkedList implementieren
|
||||||
|
|
||||||
|
**Woche 7-8:**
|
||||||
|
1. Modul 7-8 lesen
|
||||||
|
2. Quizfragen 7.1-8.3 + Final
|
||||||
|
3. Code: `module7_oop_in_c.c` + C++ Vergleich
|
||||||
|
4. 🎓 Final-Projekt: Todo-App in C, dann C++
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Quiz-System
|
||||||
|
|
||||||
|
Das Kursmaterial enthält **28 Quizfragen** mit:
|
||||||
|
- ✅ Multiple Choice
|
||||||
|
- 📝 Code-Analyse
|
||||||
|
- 🔍 Konzept-Fragen
|
||||||
|
- 🎯 Score-Tabelle (0-28 Punkte)
|
||||||
|
|
||||||
|
**Bewertung:**
|
||||||
|
| Punkte | Bewertung |
|
||||||
|
|--------|-----------|
|
||||||
|
| 26-28 | 🏆 Meister |
|
||||||
|
| 22-25 | ⭐ Experte |
|
||||||
|
| 18-21 | ✅ Gut |
|
||||||
|
| < 18 | 📚 Nacharbeiten |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Kernkonzepte
|
||||||
|
|
||||||
|
### 1. Memory-Modell (Universell)
|
||||||
|
```
|
||||||
|
┌─────────────────┐
|
||||||
|
│ Stack │ ← Automatisch, schnell, begrenzt
|
||||||
|
│ (short-term) │
|
||||||
|
├─────────────────┤
|
||||||
|
│ Heap │ ← Manuell/verwaltet, flexibel
|
||||||
|
│ (long-term) │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
**In jeder Sprache:** Stack/Heap existieren, Management variiert
|
||||||
|
|
||||||
|
### 2. Typen als Konzepte
|
||||||
|
```c
|
||||||
|
// Nicht lernen: "int ist 4 Bytes"
|
||||||
|
// Lernen: "int ist ein ganzzahliger Typ mit begrenztem Bereich"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. OOP-Prinzipien (Sprachunabhängig)
|
||||||
|
- **Kapselung:** Daten schützen
|
||||||
|
- **Abstraktion:** Wie ist egal
|
||||||
|
- **Vererbung:** "IS-A" Beziehung
|
||||||
|
- **Polymorphie:** Gleiche Schnittstelle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 C vs C++ Vergleich
|
||||||
|
|
||||||
|
| Feature | C | C++ |
|
||||||
|
|---------|---|-----|
|
||||||
|
| Memory | `malloc/free` | `new/delete`, RAII |
|
||||||
|
| Strings | `char[]` | `std::string` |
|
||||||
|
| Arrays | Fixed/dynamisch | `std::vector` |
|
||||||
|
| OOP | Simuliert | Nativ (`class`) |
|
||||||
|
| Generics | `void*` | `template<T>` |
|
||||||
|
| Module | Header | Namespaces |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Checkpoints
|
||||||
|
|
||||||
|
### Checkpoint A (nach Modul 2)
|
||||||
|
```c
|
||||||
|
// Frage: Was ist der Output?
|
||||||
|
void test() {
|
||||||
|
int x = 42;
|
||||||
|
int *p = &x;
|
||||||
|
// Was ist p nach Ende von test()?
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checkpoint B (nach Modul 4)
|
||||||
|
Erstelle einen Taschenrechner mit:
|
||||||
|
- Menü-System (if/switch)
|
||||||
|
- Mathematische Funktionen
|
||||||
|
- Rekursive Fakultät
|
||||||
|
- Fehlerbehandlung
|
||||||
|
|
||||||
|
### Checkpoint C (nach Modul 6)
|
||||||
|
Implementiere eine dynamische Liste:
|
||||||
|
```c
|
||||||
|
typedef struct {
|
||||||
|
int* data;
|
||||||
|
int size;
|
||||||
|
int capacity;
|
||||||
|
} Vector;
|
||||||
|
|
||||||
|
void vector_push(Vector* v, int value);
|
||||||
|
int vector_get(Vector* v, int index);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Final-Projekt
|
||||||
|
**Todo-App** mit:
|
||||||
|
1. CRUD-Operationen
|
||||||
|
2. File-Speicherung
|
||||||
|
3. CLI-Interface
|
||||||
|
4. Modularer Architektur
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Ressourcen
|
||||||
|
|
||||||
|
### Bücher
|
||||||
|
- **"The C Programming Language"** (K&R) - Klassiker
|
||||||
|
- **"C++ Primer"** (Lippman) - Umfassend
|
||||||
|
- **"Clean Code"** (Robert C. Martin) - Sprachunabhängig!
|
||||||
|
- **"Design Patterns"** (Gang of Four) - Das Original
|
||||||
|
|
||||||
|
### Online
|
||||||
|
- [exercism.org](https://exercism.org) - Sprachübergreifende Übungen
|
||||||
|
- [leetcode.com](https://leetcode.com) - Algorithmen
|
||||||
|
- [codewars.com](https://codewars.com) - Katas
|
||||||
|
|
||||||
|
### Dokumentation
|
||||||
|
- [C Reference](https://en.cppreference.com/w/c)
|
||||||
|
- [C++ Reference](https://en.cppreference.com/w/cpp)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Mitwirken
|
||||||
|
|
||||||
|
Dieser Kurs ist für Bildungszwecke gedacht. Verbesserungsvorschläge willkommen!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 Lizenz
|
||||||
|
|
||||||
|
MIT License - Für Bildungszwecke frei nutzbar.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Viel Erfolg beim Lernen! 🚀**
|
||||||
|
|
||||||
|
*Remember: Programmieren ist nicht Syntax lernen – es sind Konzepte, die in jeder Sprache wiederkehren, nur mit anderem Akzent.*
|
||||||
Reference in New Issue
Block a user