News Coding: Könnt ihr programmieren? Und wenn ja, wie und wieso?

.Snoopy. schrieb:
Ich habe mit Imperative/strukturierter Programmierung angefangen (wie so schön der Prof. immer sagte Spagetti-Code Programmierung :lol:) und habe mit objektorientierter Programmierung aufgehört.
Strukturierte Programmierung ist definitiv kein Spagetti Code (zumindest wenn man nicht absichtlich welchen draus macht). Als Spagetti-Code bezeichnet man Code mit vielen unstrukturierten Sprüngen (goto statement), wie es in BASIC oder Fortran üblich war. Das ist aber schon lange nicht mehr von praktischer Relevanz.
Ausserdem sind die meisten OO Sprachen auch imperativ, der Code in den Methoden folgt diesem Prinzip. Die Alternativen zum imperativen Paradigma sind Deklarativ und Funktional.
 
  • Gefällt mir
Reaktionen: nullPtr
@TomH22
ich habe damals mit Pascal bei strukturierte Programmierung anfangen müssen und da war es schon sehr passend. Dort die Sprungmarken im Code nachzuvollziehen war/ ist schon etwas für sich. Da war C schon nachvollziehbarer, dem stimme ich dir zu. Zumindest für mich. Viele sagten auch, C++ wäre die OO Sprache. Ich bei der Meinung Java ist es mehr. Denn ohne eine Klasse geht bei Java nichts. Ich sage immer, wer OOP lernen will, soll Java anfangen. Das ist aber meine Meinung, sicherlich haben auch hier eine andere.
Ich würde behaupten, bei Programmiersprachen können wir 100 Leute fragen und bekommen 1000 Meinungen.

Man soll das nehmen, was man beherrscht und was am sinnvollsten ist. Wichtig sind nur, Namenskonventionen einhalten. Saubere Deklarationen, und vor allem eine sehr gute Doku. Dann ist auch mit Sprachen, welche als "weniger sauberer Programmierstil" gelten, eine Nachvollziehbarkeit recht gut möglich. Ich habe selbst in der Vergangenheit damit zu kämpfen gehabt, meinen eigenen Code nach ein einigen Jahren zu verstehen, weil ich früher daran gespart hatte.
 
@sh. Privat programmiere ich nicht mehr, da keine Zeit mehr dafür da ist, bzw. ich meine Freizeit mit etwas anderen ausfülle, was mir wichtiger ist. Es waren da zuletzt Java/Kotlin. Das müsste 2018/2019 sein. Android Studio. Stack, wenn war meine ich meistens push, selten pop / is empty.

Beruflich programmiere ich hier und da intern kleine Tools/Apps, die uns in der Abteilung im Alltag weiterhelfen. Denn programmieren ist nicht mehr mein Job, das ist mehr oder weniger eine Nebentätigkeit. Hier bin ich mittlerweile von C++ auf C# gewechselt. Alte Tools, welche in vb.net waren, stelle ich, wenn möglich um auf C#, wenn diese geändert werden müssen, da MS für VB die Weiterentwicklung eingestellt hat und bei uns eher Programmierer mit C# Kenntnissen im Haus sind als mit vb.net, wenn ich mal Fragen zu einigen Lösungsansätzen habe. Frag mich nicht, wieso es Tools in vb.net gibt. Hier wurde so einiges darin programmiert, warum auch immer. Visual Studio 2022 nutze ich dafür.
 
.Snoopy. schrieb:
ich habe damals mit Pascal bei strukturierte Programmierung anfangen müssen und da war es schon sehr passend. Dort die Sprungmarken im Code nachzuvollziehen war/ ist schon etwas für sich.
Falls Du mit "Sprungmarken" Labels meinst (ich hasse Eindeutschungen bei Programmiersprachen...) dann sollte strukturierter Pascal Code keine, oder höchstens wenige enthalten.
Die Besonderheit von "Original" Pascal ist, dass kein exit, break, return, continue, usw gibt. Der Einzige "Notausstieg" aus der Struktur ist "goto". Dadurch ist es in Pascal häufiger als z.B. in C nötig, goto zu verwenden, quasi als generischer Ersatz für die genannten Statements. Ich komme selber aus der Turbo-Pascal Ära, und habe viel Pascal Code geschrieben und gesehen. Trotz der genannten Eigenschaft habe ich nur wenig gotos in Pascal gesehen. Wenn Du als viele Labels und gotos gesehen hast, musst Du echt Pech gehabt haben und schlechten Code erwischt haben.

.Snoopy. schrieb:
Viele sagten auch, C++ wäre die OO Sprache. Ich bei der Meinung Java ist es mehr. Denn ohne eine Klasse geht bei Java nichts.
Die Frage ob eine Sprache globale Funktionen außerhalb von Klassen erlaubt, sagt nichts darüber aus, wie "objektorientiert" eine Sprache ist. "Objektorientiertheit" ist eher eine Eigenschaft des Codes als der Sprache. Ich kann auch in C objektorientiert programmieren, eine C++ Klasse ist nichts weiter als ein Struct mit einem Zeiger auf eine Tabelle von Funktionspointern. Die ersten C++ Compiler waren auch "Transpiler" die einfach C++ nach C übersetzt haben.

C++ und Java sind konzeptionell an viel Stellen sehr ähnlich, aber dann eben auch drastisch verschieden. Das hat z.B. damit zu tun, dass C++ versucht mit "Zero-Cost" Abstraktionen zu arbeiten, d.h. Code Sprachkonstrukten die später keine Laufzeit kosten.
Die ersten "reinen" OO Sprachen wie Smalltalk haben komplett mit dynamischer Binding (sprich die aufgerufene Methode wird immer zur Laufzeit ermittelt) gearbeitet. Bei Smalltalk gab es keine Calls, sondern man hat dem Zielobjekt eine Nachricht geschickt.

Ich würde weder C++ noch Java zum Einstieg empfehlen, das sind beides Sprachen mit Unmengen an historischem Ballast und Bloat.

Die Zeit der puren OO ist sowieso vorbei, die meisten "moderneren" Sprachen wie Go, Swift, Kotlin, Rust, usw. sind "multi-Paradigma" Sprachen.
Ergänzung ()

.Snoopy. schrieb:
Frag mich nicht, wieso es Tools in vb.net gibt. Hier wurde so einiges darin programmiert, warum auch immer.
Ist wahrscheinlich historisch. Bevor es .NET gab, war das COM-basierte Visual Basic ein beliebtes Rapid Development Tool für Fachanwendungen, etc.. mit einem großen Ecosystem an Tools, Libraries, Controls ("OCXe"). Diesen Code nach VB.NET zu portieren war halt einfacher als nach C#, vor allem mussten die Programmierer keine neue Sprache lernen.
 
  • Gefällt mir
Reaktionen: .Snoopy.
Also heute habe ich was mit
  • SQL
  • Basic
  • Fortran
  • (und HTML)
gemacht. Und vorige Woche was mit
  • Assembler
Nichts davon kommt in der Liste vor?!

Siehe auch "Does LaTeX count as “programming”?"
und:
1685030166045.png
 
Zuletzt bearbeitet:
TomH22 schrieb:
C++ .... Java , das sind beides Sprachen mit .... historischem Ballast und Bloat.
C# ebenfalls, um anderen Lesern die Hoffnung zu nehmen. Die zuständigen Teams wissen im Gespräch allerdings recht genau wo sie den Stift ansetzen würden, erhalten aber keine Freigabe. Das ist sehr, sehr bedauerlich in Anbetracht der Konsequenzen.
Zumal alle 3 Sprachen so viel Migrations-Assistenz auffahren könnten, wenn Projekte mit einer neueren Sprachversion nicht mehr builden würden, daß die SprachenDesigner gerade progressiver umbauen könnten.
 
Zuletzt bearbeitet:
TomH22 schrieb:
Die Besonderheit von "Original" Pascal ist, dass kein exit, break, return, continue, usw gibt. Der Einzige "Notausstieg" aus der Struktur ist "goto".

"GOTO" sollte man tunlichst nicht dazu benutzen, aus Unterprogrammen oder vergleichbaren Strukturen herauszuspringen, weil dann irgendwann der Stack überläuft.

Wenn ich solche Hacks in Assembler überhaupt jemals gebraucht habe, habe ich die verwaiste Rücksprungadresse danach explizit vom Stack entfernt (z.B. zweimal PLA).
 
man soll mit dem goto ja auch nicht aus einer Subroutine springen, sondern nur aus der Schleife. Insofern liegt da auch nichts auf dem Stack. Aber ja, besser gar kein goto und ne "ordentliche" Sprache....
 
JMP $FCE2 schrieb:
"GOTO" sollte man tunlichst nicht dazu benutzen, aus Unterprogrammen oder vergleichbaren Strukturen herauszuspringen, weil dann irgendwann der Stack überläuft.
Das geht in keiner Hochsprache, die goto unterstützt, insofern nicht wirklich relevant.
Original Pascal hatte die Besonderheit, dass man im Lexikalischen Scope aufwärts springen konnte, d.h. von einer lokalen Prozedur oder Funktion in die umgebende Funktion. Dabei gab es aber einen korrekten Stack Unwind.
Allerdings hat kaum ein kommerzieller Compiler diese Möglichkeit jemals umgesetzt.
C hat mit setjmp/longjmp einen kruden Mechanismus für einen globalen Sprung

Blende Up schrieb:
Aber ja, besser gar kein goto und ne "ordentliche" Sprache....
Strukturiertes Exception Handling (try/catch/finally) ist der bessere Weg, um nahezu alle Fälle von goto oder setjmp/longjmp abzudecken.
Das ist aber ein etwas neueres Konzept, daher haben Sprachen aus den 70er Jahren des vorherigen Jahrhunderts das noch nicht…

Die Diskussion über goto ist aber heutzutage komplett irrelevant. An einem goto an sich ist nichts schlechtes, es ist halt nur, wenn es das einzige Mittel zu Steuerung des Kontrollflusses ist, wie etwa in Fortran und BASIC in ihren “Urformen“ ein Alptraum bezüglich Verständlichkeit und Wartbarkeit des Codes. Wenn heute irgendwo in z.B. C Code mal ein einzelnes goto verwendet wird, ist das überhaupt kein Problem und in jedem Fall besser, als irgendwelche Hilfskonstruktionen nur um krampfhaft das goto zu vermeiden.
Man muss immer bedenken, beim Coding sollte es niemals „ums Prinzip“ gehen, sondern immer um Qualität, im Sinne von Wartbarkeit, Lesbarkeit, Performance, usw.
 
  • Gefällt mir
Reaktionen: Unnu
Muffknutscher schrieb:
Was ist eigentlich mit bash und Powershell?
Fortgeschrittenes Admin-Voodoo. ;)
Im positiven Sinne!
Ergänzung ()

TomH22 schrieb:
beim Coding sollte es niemals „ums Prinzip“ gehen, sondern immer um Qualität, im Sinne von Wartbarkeit, Lesbarkeit, Performance, usw.
THIS!
Und das muss man jeden Jahrgang Frischlingen gerade wieder beibiegen, sonst verkünsteln die sich ratzfatz und hinterher kann diesen Geniestreich keiner mehr warten / verstehen geschweige denn testen!
 
Zuletzt bearbeitet:
Unnu schrieb:
Fortgeschrittenes Admin-Voodoo. ;)
Im positiven Sinne!
Oder DevOps Vodoo ;)
Ich arbeite bei uns im Cloud-Native / DevOps Bereich. Und es ist heutzutage absolut üblich das man als Entwickler gleichzeitig in z.B. C#, Python, Powershell, JavaScript und noch einiges mehr unterwegs ist.
 
  • Gefällt mir
Reaktionen: Unnu
dev/random schrieb:
aber dadurch werden bash und powershell eher für komplexere Aufgaben nicht geeigneter.
Hmmm, höheres vielleicht nicht, jedoch „komplex“ sehr wohl.

Mir sind damals bei diesen alteingesessenen (so graue Entitäten der Firma, die eigentlich alles wussten … und machten) Linux-Admins monströse Skripte über den Weg gelaufen, die sich gewaschen hatten.

Vieles davon ist mittlerweile in Programmen aufgegangen. Bspw. gibt’s jetzt Helm und Ansible. Oder auch CI-Tools, die die Buildschritte „ansehnlich“ verbinden und darstellen.
Ergänzung ()

TomH22 schrieb:
Oder DevOps Vodoo ;)
Ja, vieles ist mittlerweile Dev(Sec)Ops. Da hast Du recht. Diese moderne Wortschöpfung gab’s damals so noch nicht. Die Arbeit allerdings schon. 😃
Ergänzung ()

Slowz schrieb:
Mich hätte noch interessiert, wo die Nutzer thematisch unterwegs sind.
Ich bin mittlerweile in der IT-Security anzutreffen.
 
Zuletzt bearbeitet:
Blende Up schrieb:
man soll mit dem goto ja auch nicht aus einer Subroutine springen, sondern nur aus der Schleife. Insofern liegt da auch nichts auf dem Stack.

Hab den Spaß gerade mal ausprobiert:

stacktest1.gif


Für jede offene Schleife landen 18 Byte auf dem Stack, verschwinden aber wieder, wenn man eine neue Schleife mit der gleichen Variablen öffnet. Insofern läuft der Stack tatsächlich nicht voll, wenn man (wie auf dem C64 üblich) die Variablen recycelt.

Beim Goto aus dem Unterprogramm läuft wie erwartet der Stack voll:

stacktest2.gif


stacktest4.gif


Ach ja, das gehört auch noch zum Programm :daumen:

stacktest3.gif
 
Habe mit C++, CUDA und etwas später Python angefangen.
Heute nutze ich Rust und Julia, gefühlt die nachfolger.
Kann mich so weit nicht beschweren.
 
  • Gefällt mir
Reaktionen: pseudopseudonym und KitKat::new()
TomH22 schrieb:
Ich arbeite bei uns im Cloud-Native / DevOps Bereich. Und es ist heutzutage absolut üblich das man als Entwickler gleichzeitig in z.B. C#, Python, Powershell, JavaScript und noch einiges mehr unterwegs ist.
Lustig wird's dann, wenn man Patches für bereits gebundelten JS-Code schreiben muss.
 
Zuletzt bearbeitet:
Unnu schrieb:
Hmmm, höheres vielleicht nicht, jedoch „komplex“ sehr wohl.
[...]
Vieles davon ist mittlerweile in Programmen aufgegangen. Bspw. gibt’s jetzt Helm und Ansible.
Das ist ja genau mein Argument. Natürlich gibt es unendlich komplexe Shell-Skripte, die aber so gut wie niemand mehr beherrschen kann, da eben Funktionalität höherer Programmiersprachen fehlt. Eine saubere Fehlerbehandlung in 10.000 Zeilen bash ist eine Herausforderung und nicht Standard.
Die von Dir genannten Beispiele zeigen ja gerade, dass Shell-Skripte mit wachsendem Funktionsumfang und Komplexität eher in andere Sprachen übertragen werden, um beherrschbar zu bleiben.
 
Zurück
Oben