Wichtigsten Software-Entwickler Base Skills und immergültige Grundlagen

Es gibt Grundlagenwissen, das trotz aller Änderungen der Technologien und Programmiersprachen dauerhaft nachgenutzt werden kann. Hier findest du eine Zusammenstellung dieser Themen, die mir als Softwareentwickler in den letzten 25 Jahren immer wieder aus schwierigen Situationen geholfen haben.

Die Skills sind nach drei Levels sortiert. Die Levels sagen etwas über die Schwierigkeit und Komplexität der Themen aus. Sie sollen aber auch dabei helfen zu verstehen, dass bestimmte Themen aus den höheren Leveln die Grundlagen aus vorangegangenen Leveln benötigen.

Level 0: IT Grundlagen

  • PC Aufbau repräsentiert am besten jede Hardware, auf der Software betrieben wird
    Mainboard, CPU, Ram, Cache, GPU mit GPU Ram, Storage, Verbindungen untereinander, Schnittstellen aussen/innen (SATA, USB, PCIe)
  • Persistente Speicher Typen mit ihren Auswirken auf Geschwindigkeit, Zuverlässigkeit, Skalierbarkeit
    SSD, NAND, NVME, mechanische Laufwerke, SD, Flash, CD/DVD/Bluray, Tape
  • Betriebssysteme einsetzten können und Unterschiede verstehen
    Windows, MacOS, Linux, Chrome mit Unterschieden, Applikationsinstallation, Rechten, Vorteile + Nachteile, 2-3 bedienen können
  • Datei und Ordner Struktur und Hierarchie Ordner Struktur Windows / Linux / Mac navigieren, sortieren, verschieben, Hierarchie durchsteigen
  • Office Programme und Texteditor bedienen
    Word, Excel, Powerpoint, Visuelle Texteditoren wie Notepad++ / Sublime / Textedit

Level 1: Softwareentwicklungsgrundlagen

  • IDE aufsetzen und konfigurieren mit Plugins / Extensions und Runtimes
  • Browser Funktionalität begreifen
    Rendering, Messages, Verschlüsselung, Komprimierung
  • Command Line Grundlagen Linux und Windows Zugriff auf Terminal, 5-10 wichtigsten Commands
  • SSH zum Verbinden auf Server, Container, Datenquellen
  • git Versionskontrolle verstehen und nutzen
    Initialisieren, Anbinden an externes Repo, 5 wichtigsten Commands
  • Markdown zum Schreiben für Doku und Readme Dateien
    wichtigesten Formattierungen für Überschriften, fett, kursiv, Links, Listen
  • S3 Object Storage nutzen
    GUIs könenn, Command Line Commands, Unterschied zu Block Storage verstehen
  • Rest API lesen und mit konsumieren
    Funktionsweise, Aufgaben, CRUD in Rest, Rest-API GUI Client
  • Binär, Hexadezimal und Dezimal Zusammenhänge und Struktur begreifen
  • Netzwerkgrundlagen “Wie funktioniert das Internet”
    IP Adresse, Domains, Routing, Firewall, Ports
    erklären können warum eine HTML Seite überhaupt an einem lokalen Device angezeigt wird
  • Wie funktionieren Programmiersprachen
    wieso erzeugt eine Datei überhaupt eine Ausgabe auf dem Monitor oder Smartphone
    Herunterbrechen bis auf die Hardware

Level 2: Erweiterte Softwareentwicklungsgrundlagen

  • Command Line Tiefenwissen
    20-30 Standard Commands, Piping, Output umlenken
  • Command Line Text Editor wie vim oder nano zum schnellen Editieren in VMs, Containern oder Servern
  • Crontab Lesen, verstehen, Cron Job einrichten
  • Datei-Kompression anwenden und verstehen
    wichtigste Typen kennen: tar, gz, zip mit und ohne Komprimierung, bz2
    Unterschiede bei Ressourcen, Geschwindigkeit und Grösse der komprimierten Archive
  • Bildkompression verstehen
    Gängige Komprimierung verstehen und kontrastieren können (tiff, gif, jpg, png, webp, avif)
  • Erweitertes Netzwerkwissen
    Netzwerk-Protokolle, Standard Ports der gängigsten Applikationen, DNS Zonen, CDNs
  • Webserver Grundlagen Apache und/oder nginx Aufgaben verstehen, neu starten können, SSL Zertifikate
  • Datenbanken und deren Unterschiede
    Relationale Datenbanken kennen und betreiben: sqlite, maria/mysql, postgresql
    Non-Relationals Datenbanken kennen und betreiben: Redis, Mongo, CouchDB
    Unterschiede in Verwendung verstehen
  • Docker und Container Vorteile, Nachteile gegenüber VM und FaaS
    Command Line Wissen: Erstellen, einsehen, images löschen, Versionierung
  • Continuous Integration, Continous Delivery im Idealfall git
  • Backup Strategien kennen und anwenden
    für lokalen Daten, für produktive Applikationen einschliesslich Datenbanken