Entwicklungsumgebung done right - Mach das Beste aus deinem Workflow!

Eine Entwicklungsumgebung ist mehr als nur eine blanke IDE. Mehr dazu in diesem kleinen Post.

Entwicklungsumgebung done right - Mach das Beste aus deinem Workflow!

Intro

Wenn die meisten Entwickler an eine IDE oder eine Entwicklungsumgebung denken, fallen ihnen meistens Tools ein, wie etwa IntelliJ, eclipse und wie sie alle heißen.
Doch was die meisten hierbei vergessen ist, dass eigentlich der ganze Computer eine Entwicklungsumgebung ist oder sein kann.
Gerade bei High-Level-Sprachen hat sich das mehr von der Command Line weg entwickelt.
Dieser Post soll aufzeigen, warum und wie das Betriebsssystem die Grundlage für jeden Entwickler bilden kann. So, lets go!

Was ist eine Entwicklungsumgebung für mich, bzw. was sollte sie bieten?

Zuerst einmal sollten wir genau klären, was ich mit einer Entwicklungsumgebung meine.
Grundsätzlich versteht sich darunter ein Toolset, mit dem ich als Entwickler meinen Alltag bestreite.
Hier gibt es hier erst einmal ein paar essentielle Dinge die mir wichtig sind:

  • Syntax Highlighting
  • Compile Steps lokal durchführen
  • Linting
  • Formatting
  • Automated Tasks

Dann gibt es noch einige Features, die vielleicht nicht jeder zwingend benötigt, die einem das Leben aber doch einiges leichter machen.
Für mich sind das Folgende:

  • AutoComplete von Statements
  • Code Snippet-Generation
  • File Watcher die automatisiert Tasks durchführen
  • Isolierte Entwicklungsstacks

Wie erreiche ich diesen Flow bzw. diese Features?

Im nachfolgenden nenne ich ein paar Buzzwords und eine entsprechende Erklärung, was diese Tools oder Technologien meinen um vielleicht auch bald deinen Dev-Flow zu verbessern.

Klassiche IDE/Editor

Gerade für höhere Sprachen empfiehlt sich eine IDE, die einem die Grundfeatures liefert, die man für die tägliche Arbeit benötigt.
Für Sprachen wie Go und Verwandte finde ich, lässt sich hier aber auch recht gut auf der Console arbeiten.
Hierbei habe ich sehr lange auf nano gesetzt, bin hier aber mittlerweile vollständig auf vim migriert.
Vim sieht hier auf den ersten Blick sehr umständlich aus. Nach einiger Zeit erkennt man aber den ungeheueren Vorteil, der sich durch die scheinbare Umständlichkeit und Komplexität ergibt.

Einige nutzen auch gerne leichtgewichtige Texteditoren, die als IDE-Hybride gesehen werden können.
Hierzu zähle ich vor allem Visual Studio Code, Atom und Sublime.
Sie bieten eine via Plugins schnell erweiterbare Funktionalität, bieten aber hierbei die Leichtigkeit eines Texteditors.
An dieser Stelle sei gesagt, dass dies auch mit vim und Co. ziemlich gut möglich ist.
Natürlich können auch Plugins den Texteditor meistens nicht als echten Ersatz zur IDE machen.
Wer also hier eine schnelle und komfortable Lösung sucht sollte sich mehr mit den "Vollblut-IDEs" wie IntelliJ beschäftigen.

Docker/Package Manager

Vielleicht, wer weiß?

Um die Umgebungen gut isolieren und nutzen zu können, bietet hier Docker eine ideale Möglichkeit ganze Entwicklungsumgebungen in Container zu verfrachten und so isoliert voneinander zu betreiben. Das Ganze bedeutet natürlich auch einiges an Aufwand, lohnt sich jedoch auf lange Sicht. Eine Alternative die hier ähnlich wie Docker funktioniert ist z. B. Podman, er arbeitet ohne Daemon und läuft unter dem ausführenden Benutzer.

Wem es zu viel Arbeit ist, seine ganze Umgebung zu containerisieren kann ich diverse Package Manager und Version Switcher, wie ich sie jetzt einfach mal nenne empfehlen.
Dabei empfehle ich einen Blick auf sdkman oder nvm zu werfen.
Manche Programmiersprachen wie z. B. Go liefern hier auch integrierte Möglichkeiten mehrere Versionen der Sprache parallel zu installieren.
Die meisten Switcher funktionieren hierbei über eine einfache CLI.
So kann man nach einer kurzen Installation schnell zwischen verschiedenen Versionen von SDKs und Runtimes entscheiden, ohne sich groß um Containerisierung oder die Installation selbst zu kümmern.

Das Ganze ermöglicht ziemlich bequem den Wechsel zwischen Versionen und Tools was dafür sorgt, dass schnell zwischen Umgebungen gewechselt oder sogar parallel gearbeitet werden kann.

Bash

Die Bash ist ein sehr mächtiges Werkzeug und im Bash Ökosystem gibt es allerlei Helferlein die dem Entwickler helfen kleine Aufgaben zu automatisieren oder als Skript abgelegt zu versionieren.
So ist es ziemlich schnell möglich CI-Prozesse auch lokal auszuführen, Watcher einzurichten und den ganzen Workflow zu beschleunigen.

Das massive Ökosystem rund um die Bash ermöglicht natürlich auch kleine Helferlein in Form vom Commands selbst zu schreiben und global zu verwenden. Ebenso ist es möglich bestehenden Befehlen Alias zu vergeben. Alles in allem ein sehr mächtiges Tool, auf das sich ein Blick lohnt.

Scripting

Wie bereits oberhalb erwähnt, ermöglicht die Bash und das Ökosystem um sie herum schon sehr viel.
Allerdings werden komplexere Aufgaben mit der Bash zum echten Problem.
Die Shell-Scripts sind meistens recht umständlich zu schreiben und zu warten.
Hierbei empfiehlt sich eine Skriptsprache seiner Wahl zu lernen, und die Aufgaben entsprechend zu automatisieren.
Gute Beispiele hierfür wären JavaScript oder Python.

Hierbei kann von einer kleinen Code-Generierung über das Verschieben von Verzeichnissen und Artefakten alles mögliche gemacht werden.
Getreu dem Motto "the sky is the limit".

Vorallem Python ist auf so gut wie jeder Linux-Installation bereits mitgeliefert und Node ist heutzutage sowieso bei so gut wie jedem Frontend-Dev installiert.
Es erleichtert somit die Nutzung durch andere Projektmitglieder und -entwickler.

Das sind ziemlich viele Tools und Empfehlungen, und jetzt?

Wichtig ist, learn as you go. Versuch nicht alles auf einmal zu machen. Im kurzen ein paar Tipps je nach Skill-Level.

Anfänger

Du hast gerade erst mit der Programmierung angefangen und fühlst dich noch unsicher mit allem? Dann ist dieser Abschnitt für dich.

Im ersten Step würde ich dir empfehlen dich erst mehr auf die Sprache selbst zu fokussieren.
Lerne erst mit der Sprache umzugehen, nutze die Tools die du in den meisten Tutorials findest.
So bekommst du schnell einen soliden Einstieg.
Solltest du merken, das die Tools nicht für dich sind, solltest du dich nach Alternativen umsehen, die für dich einen besseren Wert bieten.
Hier ist es wie mit einer Brille. Du wirst merken, wenn du sie brauchst.

Wenn du das Tool deiner Wahl gefunden hast, versuche das Maximum aus dem Tool rauszuholen, wenn dir was fehlt, versuche es erst mit fertigen Tools und Skripten aufzufüllen.
Wenn das nicht funktioniert, ist es an der Zeit selbst zu scripten und sich mit der Bash anzufreunden.

Fortgeschrittener

Du bist ein Programmierer mit mittelmäßiger Erfahrung, weißt mit deinen Tools umzugehen bist aber auf der Suche nach mehr?

Such dir Tasks, die du immer wieder tust und automatisiere diese.
Du wirst merken wie sich dein Workflow massiv verbessern wird.

Profi

Du bist ein Programmierer, der mit Tools, Scripting und der Command Line klar kommt, und so ziemlich alles automatisiert hat was geht.

Meistens sind die Scripts entweder wiederverwendbar oder extrem spezifisch, du findest dich oft bei Copy/Paste? - Vielleicht wird es Zeit mal eine Library mit deinen Scripts und Automatisierungen anzulegen.

Hierbei habe ich von git submodulen bis zu einer eigenständigen CLI schon viel gesehen. Jeder hat hierbei andere Präferenzen. Aber glaub mir, der Aufwand wird sich lohnen!

Choose the right OS

Je nachdem, mit welchen Sprachen du entwickelst wirst du schnell feststellen, dass sich bestimmte Betriebssysteme besonders gut oder schlecht für gewisse Programmiersprachen eignen.

Meine Wahl

Ich persönlich entwickle jetzt schon seit zwei Jahren privat fast ausschließlich mit Linux, beruflich gut ein Jahr.
Für mich hat es sich angeboten, einfach aus dem Grund, dass Linux für den Java und Web-Stack die besten, fertigen Möglichkeiten bietet.
Bereits einige Zeit zuvor hatte ich mit diversen Linux-Distributionen geliebäugelt.
Bin aber letztlich bei Ubuntu hängen geblieben.

Warum Ubuntu? - Ganz einfach weil es die meisten Pakete für Ubuntu und Debian gibt, nachdem Ubuntu auf Debian basiert gibt es also eine Menge Pakete, es gibt von so gut wie allen Tools irgendwelche Guides oder offiziellen Repos etc. für Ubuntu. Es ist einfach anzupassen und bekommt immer frische Updates.

Benutze ich IDEs? - Ja, jeder der mich kennt weiß das ich hier fast ausschließlich JetBrains-Produkte nutze.
Ich habe festgestellt das gerade für PHP PHPStorm, oder für Java IntelliJ einfach die beste Wahl ist. Es läuft schnell, hat eine erstklassige Autovervollständigung und genau die Plugins und Tools die ich brauche. Nach meiner Ausbildung habe ich auch sofort eine JetBrains-Lizenz für alle Produkte erworben und es nicht bereut.

Primär arbeite ich gerne mit den IDEs, weiche aber auch gerne mal auf die CommandLine aus und programmiere und skripte hier.
Kleine Randinfo an der Stelle: den Post den du gerade liest wurde mit Vim geschrieben bzw. entworfen und auf Linux Mint mit Visual Studio Code Korrektur gelesen. Danke an dieser Stelle an Andreas Popel.

Als Kleiner Einstieg.

Welches OS passt am Besten?

Einfach gesagt, am Besten du nutzt zum Enwickeln die Plattform oder das OS auf dem später die Software auch läuft, natürlich ausgenommen Handys.

Apple macOS etc.

Wenn du für das Apple-Ökosystem entwicklen willst, wirst du an einem gewissen Punkt, nicht um ein Gerät der Marke Apple herumgekommen.
Falls du Verrückter C# entwickelst wirst du mit Linux keine angenehme Erfahrung haben ;).

Microsoft Windows

Da ist leider was dran!

Windows würde ich nur nutzen, wenn es wirklich nötig ist.
Nicht nur wegen meiner zugegebenermaßen großen Abneigung gegenüber Microsoft.
Vor allem liegt der Grund hierbei in der teilweise umständlichen Installation von Dev-Tools und der miserablen Console.
Wer an dieser Stelle auf das Windows Update hofft, das uns die magische Konsolenrevolution liefern soll, dem würde ich empfehlen hier nicht zu viel Hoffnung zu investieren.
Genau solche Hoffnungen hatte ich zu Einführung des Ubuntu Subsystems, die auch herbe enttäuscht wurden.
Ich lasse mich aber gerne vom Gegenteil überzeugen lassen @Microsoft ;)

Linux (Ubuntu)

Wer rund um das Web oder die Backend-Entwicklung tätig ist, dem kann ich nur raten, Linux so schnell es geht einzusetzen.
Es ist eine andere Welt als Windows, aber der Umstieg lohnt.
Der Linux-Stack läuft auf fast jedem Server, auf dem die Anwendung später laufen wird, und wenn man es auch als Desktop einsetzt, weiß man auch wieso.

Hierbei eine kleine Warnung: Man kann Linux kaputt machen, es wird dich nicht aufhalten so wie Windows.
Also tu nichts, ohne zu wissen was du tust und vorallem glaub nicht jedem Random Script.

Disclaimer

Abschliessend noch ein kleiner Disclaimer.
Das Ganze ist natürlich sehr persönlich angehaucht.
Basis für das Ganze sind meine Erfahrungen und nicht das Allheilmittel.

Abschluss

Sieh deinen PC und dein Betriebssystem nicht nur als notwendiges Übel und nutze alles so gut es geht.
Auch wenn es ab und zu weh tut und man einige Haare verliert, es lohnt.
Den wer seine Plattform kennt und damit umzugehen weiß, kann schneller und besser entwickeln.

Und das wichtigste, dadurch dass du deine Plattform besser nutzt, gehst du auch weniger einen Vendor-LockIn mit großen IDE-Herstellern ein.
Auch wenn diese total cool sind, solltest du auch in der Lage sein Software zu entwickeln ohne "Autopilot".

Gerade in Coding Interviews hast du oft nicht deine volle IDE zur Verfügung sondern vielleicht nur eine kleine Weboberfläche mit Syntax-Highlighting und einem Run-Button.

Es lohnt sich auch mal bewusst die IDE an die Seite zu legen und nur einen, mit Syntax-Highlighting ausgestatteten Editor für die Programmierung zu nutzen.