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.