+++
title = "Code"
description = "Programmierung und Skripten"
weight = 2
template = "page.html"

[taxonomies]
tags = ["programming","linux"]

[extra]
local_image = "img/code.svg"
+++
![Tier List](tier-list.png)
## Einleitung
In diesem Artikel liste ich Programmiersprachen auf, mit welchen ich schon gearbeitet habe und ordne sie nach Erfahrungslevel (1-am wenigsten Erfahrung bis 5-am meisten Erfahrung). Ich gebe jeder Sprache außerdem eine Note abhängig davon wie gerne ich mit der Sprache Programmiere und wie gut ich ihr Design finde.

## Level 1:
#### ein kleineres Projekt
- **C#** - vor einiger Zeit ein paar Berührungspunkte, als ich mit der Unity Engine experimentiert habe *(4+)*
- **Go** - kleines Tool geschrieben, dass Daten von einer öffentlichen Bundesliga API abgerufen hat um diese im Terminal anzuzeigen *(2-, relativ einfach aber sehr effektiv)*
- **Haskell** - ein simples Spiel implementiert *(2, macht Spaß)*
- **Lua** - einfaches neovim Plugin geschrieben um die Funktionen einiger Plugins abzubilden, die ich auf meinem Arbeitsrechner nicht installieren wollte *(2)*
## Level 2: 
#### mehrere kleinere Projekte
- **Java** - mit Java habe ich für die Uni einiges Programmiert und zudem ein einfaches Spiel mit GUI, in welchem die Tipp-Geschwindigkeit gemessen wurde *(3-, nicht meins aber besser als C#)*
- **JavaScript** - ich habe einiges mit JavaScript und TypeScript gemacht, auch mit dem Framework VueJS und der Grafikengine ThreeJS *(4-, der JavaScript Kosmos ist wirklich sehr suspekt)*
- **Rust** - ich habe mit Rust einige kleine Projekte umgesetzt, darunter ein Discord Bot und einen API-Client *(2+, harte Lernkurve, aber sehr gutes Design und guter Compiler)*
## Level 3:
#### ein größeres Projekt oder viele kleinere Projekte
- **C** - mit C habe ich Programmieren gelernt und benutze die Sprache gerne für unterschiedlichste kleine Projekte *(1, eine geniale Sprache, die mangels vieler Abstraktionen großen Spaß macht, bei der man sich aber auch leicht ins Knie schießen kann)* 
- **C++** - mit C++ habe ich in der Uni ein komplexes Konzept(b-spline Oberflächen) aus der Computergrafik implementiert und dabei die pmp Bibliothek benutzt *(2, macht viel Spaß, C auf Steroiden mir aber zum Teil etwas zu überladen)*
## Level 4:
#### Shell
Unter Shell fasse ich sowohl Wissen über Shellskripte als auch generelles Wissen über die Unix Kommandozeile zusammen.
Für diese Dinge habe ich schon Shellskripte geschrieben:
- Backupskript mit rsync
- Diverse selbstgeschriebene Checks für CheckMK
- Automationsskripte für Cloudsysteme, Cluster und Benchmarking  
*(1+, ich gebe dem Shellskript stellvertretend für die Unix-Philosophie eine perfekte Note, weil sich in dem Design das großartige Unix Design fortsetzt)*
## Level 5:
#### Python 
Mit Python habe ich am Abstand am meisten gearbeitet. Die Sprache schlägt eine Brücke zwischen simplen Skripten und komplexen Anwendungen. Sie ist sehr einfach zugänglich,
muss aber wegen den Performance-Limitationen richtig eingesetzt werden um nicht zu langsame Software zu erzeugen. Meine Erfahrungen mit der Sprache sehen wie folgt aus:
- professionell Python-Django als Server Backend-Entwickler
- Automationsskripte mit verschiedenen APIs für Netzwerkadministration
- Datenauswertung und Visualisierung per Jupyter Notebook
- Implementierung Kognitiver Algorithmen mit numpy
- Bildbearbeitung mit Pillow  
*(2-, eine sehr vielseitige Sprache, braucht allerdings für Typisierung und Performance einige Tweaks)*



