Wie würde ein erfahrener Programmierer Hello world Programmieren?

10 Antworten

Genau so:
https://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/H%C3%B6here_Programmiersprachen

Unnötige Zusätze machen das Programm unnötig komplex und erschweren die spätere Wartung. Mit zunehmender Erfahrung lernt man zu entscheiden, wo die ideale Grenze zwischen Perfektionismus und Pragmatismus liegt, doch dafür gibt es keine Faustregel, das ist immer anders.

Bei Hello World ist das aber einfach:
Es soll "Hello World" ausgeben, also reicht eine billige Text-Ausgabe, entweder in der Konsole oder einer MessageBox.


Palladin007  24.05.2020, 02:42

Ich hatte Langeweile und hab ein kleines Programm gebastelt, das verdeutlichen soll, wie sehr man es mit der Software-Architektur auch übertreiben kann:

https://pastebin.com/nha63KpL

Abhängigkeiten:

  • .NET 5 (nicht notwendig, aber hatte ich eben eingestellt)
  • C# 8
  • Microsoft.Extensions.DependencyInjection
  • Newtonsoft.Json

Das Ding liest eine Config ein, aus der holt sie den Pfad zu einer Text-Datei, aus der die Nachricht gelesen wird und die schreibt es alle 100ms in die Konsole. Config und Text-Datei können zur Laufzeit bearbeitet werden.

Das Besondere ist, dass alle Einzelschritte ohne umfassende Code-Änderungen getauscht werden können, indem eine andere Implementierung des jeweiligen Services registriert wird, sämtlicher anderer Code sollte davon nicht betroffen sein. Das ermöglicht auch das leichte automatische Testen, da man z.B. das Lesen von Dateien auslassen und durch Mock-Implementierungen tauschen kann.
Das Pattern dahinter heißt "Inversion of Control".

Das kann man noch deutlich weiter treiben.
Z.B. macht das alles nur dann wirklich Sinn, wenn man Implementierung und Interface auch voneinander trennt. So könnten die Interfaces in einer eigenen DLL landen, während jede Implementierung ebenfalls eine eigene DLL bekommt.
Das alles kann man dann über ein entsprechendes Konfigurations-Modell vor dem Start als eine Art Plugin-System "zusammenbauen", wenn man also die Nachricht in einer MessageBox haben möchte, muss man nur eine geeignete MessageViewer-Implementierung daneben legen, in der Config eintragen und s läuft mit MessageBoxen.

Aber das alles ist völlig sinnlos, da man diese Vorteile nie nutzen wird und das ist der Fall, wo man sich dann gegen solche "Optimierungen" entscheiden sollte.
Ein guter Entwickler kennt diese ganzen möglichen Wege, hat ihren Sinn verstanden und kann auch erkennen, wann es zu viel ist.

Es gibt aber auch Fälle, wo das Sinn machen kann.
Z.B. habe ich lange an einem System gearbeitet, das aus einem zentralen Server und vielen PC-Clients bestand. Das ganze System musste mit mehreren Kontext-Informationen (z.B. Standort oder Kunde) umgehen können, weil sich das Verhalten anhand dieser Informationen teilweise deutlich verändert hat.

Das besagte System hat dafür kein Konzept gehabt, weshalb es überall verteilt wunderschöne verschachtelte if-Statements für den jeweiligen Standort oder Kunde hatte. Deshalb arbeite ich gerade an einem Konzept, das mir erlaubt, das Verhalten je Standort und Kunde mit einer Art Plugin-System zu überschreiben oder zu erweitern. Die Basis dafür bietet wieder Inversion of Control.
Im Grunde also ein zur Laufzeit tauschbares Basis-Framework für ein Plugin-System, bei dem die Plugins je Situation neu zusammengesteckt werden können.

0

Ich nenn mich nicht professioneller Programmierer und bin auch nicht ausgebildet, habe aber dennoch einige Jahre an Erfahrung in mehreren Sprachen.

Ich z.B. schreib gar nicht mehr die Hello World Programme aus Tutorials, wenn ich eine neue Sprache lerne, sondern versuche durch etwas experimentieren und durch Erfahrung eine kompliziertere Version zu programmieren.
Zur Hilfe nehmen ich auch manchmal das Internet, um etwas zu verstehen.

Man kann ja auch z.B. eine MsgBox oder einen Button für den Text "Hello World" nutzen und das mach ich auch meist.

Einfach nur etwas auszugeben wurde mir nach der Zeit zu langweilig.

Woher ich das weiß:Hobby

PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:30

Genau ich meine einfach es sich absichtlich komplexer zu machen also ganz instiktiv also mehr als man eigentlich braucht ich bin Azubi als Fachinformatiker für Systemintegration und kann auch programmieren naja etwas

0
IR00T  23.05.2020, 19:32
@PowerJohnvvv

Genau. Zumindest ist das bei mir so.
Ich will es mir halt möglichst schwer machen und selbst die Probleme lösen (stackoverflow gehört ja auch dazu), um einfach viel zu lernen.

0
PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:34
@IR00T

Stackoverflow ist das was einen Programmierer erst ausmacht

0

...Das ist immer gleich, Variiert nur je nach Programmiersprache. Bei C# währe es:

Console.WriteLine("Hello World");

Woher ich das weiß:eigene Erfahrung

PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:29

Ja logisch ne ich meine nur ob man es dann absichtlicher komplexer macht also innerhalb der Programmiersprache selbst ich meine du kannst Hello world auch erst in ne Variable packen und dann ausgeben

0
ButterkeksLp1  23.05.2020, 19:30
@PowerJohnvvv

Ja aber, warum sollte man? Komplizierter geht immer. ich kann auch jeden einzelnen Buchstaben als variable Festlegen und dann "Hello World" ausgeben

0
PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:32
@ButterkeksLp1

Ja oder immer einen Zufälligen Character generieren und dann in einem Loop immer schauen ob der in dem Wort Hello world vorkommt dann in eine Liste Packen und dann die Liste ausgeben

0
ButterkeksLp1  23.05.2020, 19:36
@PowerJohnvvv

Aber wozu? warum sollte ich mir eine halbe Stunde Arbeit machen wenn ich das selbe in 10 sekunden schaffe?

0
PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:37
@ButterkeksLp1

Ja ich Frag ja nur ich denke genau so wie du wobei ich es glaube ich auch mal zu übungszwecken komplizierter machen werde

0
ButterkeksLp1  23.05.2020, 19:38
@PowerJohnvvv

Zu Übungszwecken lass das mit Hello World. Die Methoden die du zum Komplexer machen nutzt wirst du nie brauchen. Programmiere lieber einen Taschenrechner o.ä

0

Ich denke, man kann es irgendwie verkomplizieren und "Hello World" in verschiedenen Farben oder mit coolen Animationen ausstatten, aber da es ja darum geht den Code möglichst übersichtlich zu halten, würde ich das wohl auch so halten ;)


PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:31

Also auch ganz normal print("hello world")

0
DeusExtimus  23.05.2020, 19:34
@PowerJohnvvv

ich programmiere Arbeitsbedingt nie in Python, aber

cout << "Hello World! \n";

ist wohl gleichbedeutend

0
PowerJohnvvv 
Beitragsersteller
 23.05.2020, 19:36
@DeusExtimus

"\n" müsste glaub ich gar nicht sein ich nehme an du sprichst von C oder eher C++

0
regex9  24.05.2020, 09:24
@PowerJohnvvv

Wenn das Verhalten von print nachgebildet werden soll (hierbei mit C++), ist es durchaus notwendig, einen Zeilenumbruch an die Ausgabe zu hängen. Entweder mit \n oder std::endl. Das Leerzeichen nach dem Ausrufezeichen (oben) wäre eines zu viel.

0
DeusExtimus  24.05.2020, 10:32
@PowerJohnvvv

Ich arbeite mit c++, und das \n ist nur um einen Zeilenumbruch gleich mit rein zu machen. Aber stimmt schon, dass es eigentlich nicht nötig ist, wenn man es so kurz wie möglich halten will

0
DeusExtimus  05.06.2020, 09:00
@PowerJohnvvv

ja. Man fängt ja immer mit "Hello World" an, um erstmal die einfachste Funktion kennen zu lernen. Und am besten lernt man Programmieren, meiner Meinung nach durch Projekte die einem selber Spaß machen. Und oftmals macht gerade das Spaß, eine eigentlich einfache Aufgabe so Komplex und schön wie möglich zu gestalten

0

Na klar! Also erst mal muss das "Hello world" ja irgendwo her kommen, da brauchen wir ja offensichtlich ein Factory Pattern um die Strings zu erzeugen (evtl. Wollen wir irgendwann auch mal anderen Text ausgeben). Und für die Ausgabe brauchen wir eine OutputStrategy Klasse, die natürlich ConsoleOutputStrategy implementiert. Und Decorator brauchen wir natürlich um dynamisch neues Verhalten zur Ausgabe hinzuzufügen.

Aber mal im ernst: Gute Entwickler schreiben keinen komplexen Code, sondern versuchen komplexe Probleme in Teilprobleme und wiederverwendbare Komponenten herunterzubrechen. Aus Sicht eines Anwenders ist eine Konsolenausgabe so ziemlich die atomarste Einheit ist, die es gibt.