Commit 06d9675b authored by Nicolas Lenz's avatar Nicolas Lenz
Browse files

Init

parents
Pipeline #1117 passed with stage
in 13 seconds
slides.html
slides.pdf
test.html
.stack-work/
*.cabal
image: registry.eisfunke.com/software/container/pandoc-plus:latest
build:
stage: build
script:
- make slides.pdf
- make slides.tex
artifacts:
paths:
- slides.pdf
- slides.tex
pages:
stage: deploy
script:
- mkdir public
- mv slides.pdf public
artifacts:
paths:
- public
only:
- master
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Make",
"type": "shell",
"command": "make",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
\ No newline at end of file
This diff is collapsed.
# Programming Languages
An overview of the various programming languages that exist.
[**View as PDF**](https://lab.pages.eisfunke.com/programming-languages/slides.pdf)
inputs = $(shell ls src/*.md) # $(wildcard src/*.md) outputs in the wrong order
pandoc = pandoc $(inputs) -f markdown -t beamer \
--slide-level 2 -V theme:metropolis -H theme.tex
slides.pdf: $(inputs) res/* theme.tex
$(pandoc) --pdf-engine=xelatex -o $@
slides.tex: $(inputs) theme.tex
$(pandoc) -o $@
slides.html: $(inputs) theme.tex
pandoc $(inputs) -f markdown -t revealjs -s --slide-level 2 -o $@
clean:
rm -f slides.pdf slides.tex
.PHONY: clean
res/cc.png

1.48 KB

---
title: Programmiersprachen
subtitle: Eine Übersicht
author: Nicolas Lenz
---
![CC BY-SA 4.0](res/cc.png){height=31px} \
This work is freely available under a \
**[Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/)** \
license.
The source code of these slides can be found at <https://git.eisfunke.com/lab/programming-languages>.
# Einleitung
## Ich
**Hallo!**
Nicolas Lenz
- Masterstudent, 3. Semester
- O-Phase, Fachschaftsrat, FOSS-AG, ...
- Interessiert in Programmiersprachentheorie
## Fragen
Fragen könnt ihr gerne jederzeit stellen!
## Inhalt
- Welche Programmiersprachen werdet ihr im Studium lernen?
- Was für Programmiersprachen gibt es?
- Wie unterscheiden sie sich?
Keine Sorge: Nicht "prüfungsrelevant" und nicht schlimm, wenn euch diese Sprachen nichts sagen
Außerdem: Programmieren ist für das Studium weniger wichtig, als man meinen könnte
## Welche Programmiersprachen kennt ihr?
\center{\textbf{\Huge ?}}
# Im Studium
## Vorwissen
### Welche Programmiersprachen sollte ich für das Studium schon können?
::: incremental
- C und die üblichen Varianten
- C++
- C\-\-
- C#
-
- COBOL
- Fortran
- HQ9+
- INTERCAL
- VBA (Makros)
- x86-Assembler
:::
## Wirklich?
Nein, keine Sorge!
Programmieren lernt ihr im Studium selber (aber gottseidank nicht in diesen Sprachen, bis auf C).
## Im Bachelor
- **Java** (DAP1, DAP2, ...)
- Kotlin (SoPra)
- Python (HaPra)
- C (BS)
- Assembler (RS)
- SQL (IS)
- Prolog (Logik)
Je nach Wahlmodulen:
- Haskell (FuPro)
- JavaScript, PHP, HTML, CSS, ... (Webtech)
# In der Praxis
## Anwendungsbereiche
- **Eingebettete Systeme** \
*C, C++, Rust*
- **Web (Backend)** \
JavaScript (Node.js), TypeScript, PHP, Go, Python
- **Web (Frontend)** \
JavaScript, TypeScript, HTML/CSS
- **Grafik & Spiele** \
C++, C
- **Apps** \
Android: Java, Kotlin ­— iOS: Objective-C, Swift
- **Anwendungen** \
Java, C#, Python, C++
- **Wissenschaft** \
viele
## StackOverflow Developer Survey 2021
<https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-programming-scripting-and-markup-languages>
## Meistbenutzte Sprachen
- **JavaScript:** 65%
- **HTML/CSS:** 56%
- **Python:** 48%
- **SQL:** 47%
- **Java:** 35%
- **Node.js:** 34%
- **TypeScript:** 30%
- **C#:** 28%
- **Bash/Shell:** 27%
- **C++**: 24%
- **PHP:** 22%
- **C:** 21%
## Okay
Cool, aber wie unterscheiden die sich?
# Programmierparadigmen
## Programmierparadigmen
- Programmiersprachen werden mit sogenannten *Programmierparadigmen* klassifiziert
- Es gibt viele
- Sprachen können viele Sprachen
- Einteilung nicht immer klar
## Imperativ vs. Funktional
### Imperativ
Programm = Folge von *Befehlen*
Java, Python, C, ... (haben aber alle auch deklarative Aspekte!)
```
add(x, y) {
result = x + y
return result
}
```
### Funktional
Programm = Sammlung von *Funktionen*
```
add(x, y) = x + y
```
## Objektorientierung
Java und einige andere beliebte Programmiersprachen sind objektorientiert
```
class Hund
bello = new Hund
brutus = new Hund
```
# Typisierung
## Daten
- Quasi jede Programmiersprache stellt Daten dar
- → Sprachen danach einteilen, wie sie Daten typisieren
## Typ
Beispiele:
- `"Hallo Welt!" : String`
- `42 : Integer`
- `3.2 : Float`
- `True : Boolean`
## Klassifizierung
::: incremental
- stark vs. schwach
- dynamisch vs. statisch
- explizit vs. implizit
:::
# Syntax
## Syntax
- Programmiersprachen benutzen verschiedene Schreibweisen (*Syntax*)
- Wir schauen uns ein paar "Hallo-Welt-Programme" an
## C-like
- C, C++, Java, Go, Rust, viele andere
- `.` für Zugriff, `funktion(argument)` für Aufrufe
- Geschweifte Klammern (`{}`) zur Strukturierung
- Keywords
## Beispiele
### Java
```java
class Main {
public static void main(String[] args) {
System.out.print("Hallo Welt!");
}
}
```
### Rust
```rust
fn main() {
println!("Hallo Welt");
}
```
## Python
- Einrückung zur Strukturierung
```python
def hallo():
print('Hallo Welt!')
hallo()
```
# Exotisches
## Esoterische Programmiersprachen
Programmiersprachen, die nicht für den realen Einsatz gedacht sind
- Spaß
- Satire
- Ausprobieren
## Brainfuck
8 Zeichen: `>`, `<`, `+`, `-`, `.`, `,`, `[`, `]`
Hello World-Programm:
```
++++++++[>++++[>++>+++>+
++>+<<<<-]>+>+>->>+[<]<-
]>>.>---.+++++++..+++.>>
.<-.<.+++.------.-------
-.>>+.>++.
```
## Das kann ja gar keine richtige Programmiersprache sein!
- Turing-vollständig!
- Das heißt: Alle Berechnungen, die sich überhaupt mit einem Computer oder irgendeiner Programmiersprache durchführen lassen, gehen auch mit Brainfuck
## Beweise
- Beweis: Rigoroser Beweis einer Aussage
- Programme und Beweise sind das Gleiche!
- Programm: Eingabe und Ausgabe
- Beweis: Voraussetzung und Folgerung
- Beweisassistenten wie Coq oder Agda nutzen das aus
# Abschluss
## Links
Ich mache noch mehr Sachen!
### Newsletter abonnieren
[lab.eisfunke.com](https://lab.eisfunke.com/)
### Ich habe einen Podcast
[bytegeschichten.eisfunke.com](https://bytegeschichten.eisfunke.com/)
## Danke
Danke für's Zuhören!
def hallo():
print('Hallo Welt!')
hallo()
\definecolor{primary-medium}{HTML}{F19204}
\definecolor{accent-bright}{HTML}{F07D8F}
\definecolor{accent-light}{HTML}{EB4F67}
\definecolor{accent-medium}{HTML}{E41131}
\definecolor{accent-dim}{HTML}{A90D24}
\definecolor{background-very-dark}{HTML}{232124}
\definecolor{background-dark}{HTML}{3F3C41}
\definecolor{background-super-bright}{HTML}{F8F7F8}
\metroset{sectionpage=progressbar, progressbar=frametitle, titleformat=smallcaps, background=light}
\setbeamercolor{normal text}{fg=black}
\setbeamercolor{background canvas}{fg=background-dark, bg=background-super-bright}
\setbeamercolor*{palette primary}{fg=white,bg=primary-medium}
\setbeamercolor*{progress bar}{fg=accent-dim, bg=accent-bright}
\setlength{\leftmargini}{1em}
\usepackage{sourcesanspro}
\usepackage{sourcecodepro}
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\usepackage{listings}
\usepackage{mathtools, amssymb, stmaryrd, unicode-math}
\usepackage{xspace}
\usepackage{fvextra}
\usepackage{color}
\usepackage{fancyvrb}
% \renewcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},breaklines,fontsize=\small}
\DefineVerbatimEnvironment{verbatim}{Verbatim}{commandchars=\\\{\},breaklines,fontsize=\small}
% \input{macros.tex}
\lstnewenvironment{algorithm}{
\lstset{
mathescape=true,
escapeinside={(*}{*)},
keepspaces=true,
numbers=left,
numberstyle=\tiny,
columns=fullflexible,
keywordstyle=\bfseries,
keywords={repeat, until, for, all, each, in, return, function, if, else, or, and, empty},
numbers=left
}
}{}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment