Anti-Patterns: Wie du SCHLECHTEN Code schreibst!

  Рет қаралды 44,419

Florian Dalwigk

Florian Dalwigk

Күн бұрын

Пікірлер
@TheCelebreties
@TheCelebreties 5 жыл бұрын
Ich will mehr um meinen Tutor zu quälen :D
@Florian.Dalwigk
@Florian.Dalwigk 5 жыл бұрын
Haha ... ich habe noch einige solcher Anti-Pattern in petto :)
@Ufuk646
@Ufuk646 5 жыл бұрын
Hab mich voll weggeschmissen xD
@Florian.Dalwigk
@Florian.Dalwigk 5 жыл бұрын
@@Ufuk646 Haha, das freut mich :)
@echtertill
@echtertill 3 жыл бұрын
@@Florian.Dalwigk Kannst du noch ein Video machen?
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ich überlege es mir
@Thomas0918273645
@Thomas0918273645 4 жыл бұрын
Als ich mir das Programmieren damals selbst beigebracht habe, hab ich auch einige dieser Techniken (versehentlich und unwissentlich) angewendet. Damals hab ich allerdings nur mich selbst gefoltert... :D
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Als Autodidakt ist das völlig normal (woher soll man das auch wissen) :D Mit der Zeit merkt man aber, dass die Art, wie man programmiert, vielleicht nicht die effizienteste ist ;)
@software_zokki
@software_zokki 3 жыл бұрын
Ich hab das Gefühl, dass ein ehemaliger Arbeiter in der Firma wo ich arbeite sich das Video vor 2,5Jahren geguckt und alles zu einer Perfektion gebracht hat. Es gibt nichts was der hier im Video nicht zur Perfektion geschafft hat.
@av8876
@av8876 Жыл бұрын
Ich danke dir für das Video. Und you Tube dafür, es mir vorgeschlagen zu haben. Ich hab zwar als Anfänger noch so gut wie nichts verstanden, aber so viel ist sicher: dein trockener Humor ist eine wahre Wonne. Liebe Grüße
@jobcentertycoon
@jobcentertycoon 4 жыл бұрын
Och einfach sich die ersten Projekte die man früher mal gemacht hat angucken dann weiß man was ineffizienz bedeutet
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Ja, da kann sich niemand von ausnehmen :D
@hansklaus6860
@hansklaus6860 3 жыл бұрын
Ich hab noch zwei schöne dinge: Irgendwo mitten in einer Methode einen return Befehl einbauen. Am besten so, dass man ihn schwer sieht, z.B. in normalerweise eingeklapptem Code oder am ende einer einzeiligen if-Anweisung, die so lang ist dass der eigentliche return befehl hinter dem Bildschirmrand verschwindet. Anstatt einfach einen Wert zurückzugeben, kann man auch eine Objektreferenz in eine Methode reinreichen, über die die Werte dann verändert werden. Wenn man nur den Methodenaufruf sieht, ist es vollkommen unmöglich zu sehen, dass dieser Wert hier verändert wird.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Uff 😅
@ultraman6950
@ultraman6950 3 жыл бұрын
German programming video recommended to a native Spanish speaker... KZbin algorithm is an enigma.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Lol 🤦‍♂️ Sorry for that!
@halilibrahimozturk2791
@halilibrahimozturk2791 3 жыл бұрын
Hello from Turkey :)
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Hey! Greetings back :)
@TheGodlikeBlock
@TheGodlikeBlock 4 жыл бұрын
> Jede rekursive Funktion ist iterativ darstellbar Nicht ganz, sondern nur jede *Primitiv Rekursive* Funktion. Das häufigst gennante Beispiel für eine Funktion, die NUR rekursiv sein kann ist die "Ackermann Funktion"
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Gute Ergänzung!
@cidar4750
@cidar4750 3 жыл бұрын
Es kann zwar solche Funktionen geben, die Ackermann-Funktion gibt es allerdings auch in iterativer Version (leicht per Suchmaschine auffindbar), ist also kein gutes Beispiel. Ohne Frage ist und bleibt die rekursive Variante eleganter, aber darum ging es ja nicht.
@Erarnitox
@Erarnitox 3 жыл бұрын
Antipattern: selbst modifizierender code. Geht vermutlich nur in nativen sprachen, aber habe schon gesehen dass auf die opcodes des programms selbst eim pointer angelegt wurde um diese zur laufzeit je nach bedingung zu überschreiben. Macht es debuggern natürlich nicht leicht sinnvolle hinweise zu geben falls etwas schief läuft. es gibt natürlich auch noch den Präprozessor in Sprachen wie C oder C++, mit dem kann man auch sehr sehr viel unfug machen. Vor allem in headern bei denen man weiss dass sie in mehrere source datein eingebunden werden. Ein klassiker: #define M_PI 3.2f oder: #define true ((rand() % 100) < 85)
@swenruhl1759
@swenruhl1759 3 жыл бұрын
Ist "faculty" statt "factorial" ein Fehler oder ein weiteres Beispiel für schlechten Code? Das hier ist mein Favorit: if (a != b) { return a; } else { return b; }
@SimGunther
@SimGunther 3 жыл бұрын
_Wild English comment appears for the algorithm_
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Thank you very much!
@einsenundnullen9789
@einsenundnullen9789 5 жыл бұрын
6:21 beste Stelle
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
;)
@matthias_2125
@matthias_2125 4 жыл бұрын
Mein Liebling: Zufallszahlen generieren, bis eine bestimmte Zahl erreicht ist, um Variablen zu initialisieren. Das ist empfehlenswert, da es locker eine Viertelstunde dauern kann und mein Computer währenddessen eine Flugzeugturbine nachgeahmt hat.
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Haha, die Idee ist cool 😎
@eliasga7820
@eliasga7820 3 жыл бұрын
Ich behaupte mal, dass das ein "Anti-Pattern" ist, mit dem man sich nur selbst strafen kann. Sobald ein zweiter Entwickler so etwas sieht, wird es für dich keine Ausrede geben, wofür das gut ist. Und so wie ich das Video verstehe, geht es darum, Anti-Patterns aus ganz bestimmten Gründen einzusetzen, die aber in weiter Entfernung noch rational begründet werden könnten.
@LaDolceFotografia
@LaDolceFotografia 3 жыл бұрын
Ich finde die Einleitung echt bedenklich! Der Tipp, durch schlechten Code unverzichtbar zu werden ist echt gefährlich und kostet einen im besten Fall nur den Job, im schlechtesten die Karriere! Den einzigen, den man mit Anti-Patterns sabotiert ist eigentlich nur: Man selbst. Warum? Versteht niemand außer dir den Code, wirst du irgendwann alleine auf dem Projekt geparkt. Du vergammelst dann dort auf einem veralteten Technologiestack und verlernst die Best-Practices, während deine Kollegen geile neue Themen bekommen. Es wird auch immer schwerer, seinen eigenen schlechten Code zu lesen und man braucht selbst immer länger für Änderungen. Man wird unproduktiver und irgendwann wenn das Projekt dann gecancelt wird oder durch einen neuen Technologiestack ersetzt wird, ist man weg vom Fenster. Nicht nur hast du dann keinen Job mehr, du hast auch keine Ahnung mehr, was grad top-notch ist. Super Sackgasse! Code ist IMMER ein Brief von dir an dich selbst in der Zukunft #cleancode
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Naja "Tipp". Dass das Video ironisch gemeint war, ist schon klar, oder? :D Das sollte man gerade NICHT machen.
@LaDolceFotografia
@LaDolceFotografia 3 жыл бұрын
@@Florian.Dalwigk Ist irgendwie eben nicht klar. Dafür geht das zu oft hin und her 🤷🏻‍♂️
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Okay, aber ich denke, dass der Titel und die Aufmachung an sich für einen Großteil ausreichend zum Erkennen der Intention dieses Videos ist (siehe Kommentare).
@mortgu
@mortgu 3 жыл бұрын
🤦 das ist doch offensichtlich nur ironisch gemeint. Hast du keinen Sinn für Humor?
@linuxtag2009
@linuxtag2009 4 жыл бұрын
Auch ein schönes Antipattern ist das Ausfaktorisieren. Wir sollten mal eine Funktion schreiben, die einen Integer in einen String umwandelt, zum Beispiel 42 in "zweiundvierzig" (Werte bis 9999). Das geht mit einer geschachtelten Fallunterscheidung ganz gut. Als wir fertig waren, haben wir das Programm als Codegenerator missbraucht und ein etwa 10.000 Zeilen langes, alternatives Löungsprogramm abgegeben. Unsere Tutoren mussten schon manchmal etwas leiden ...
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
:D
@weblio4861
@weblio4861 5 жыл бұрын
Die Aussage mit der Jobsicherheit bei Anti-Pattern ist wohl doch eher zu theoretisch betrachtet. In der Praxis ist es eher so das man Entwickler die guten Code schreiben eher hält als die, die schlechten Code schreiben. Denn genau aus den Gründen die du als "Vorteil" bezeichnest, sind eben halt die Nachteile aus der Sichtweise des Arbeitgebers. Man mag halt keinen Entwickler haben, dessen Code man schwer lesen kann, denn dieser verursacht auf langfristiger Sicht zu viele Kosten...
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Das stimmt. Allerdings kann man theoretisch mit diesen Anti-Pattern durchkommen und ab einem bestimmten Punkt gibt es kaum noch ein Zurück (und wenn, dann nur mit enormen Aufwand).
@Nilslos
@Nilslos 4 жыл бұрын
@@Florian.Dalwigk Damit das klappt, muss man aber WIRKLICH gut sein, um trotz solchem Scheiß unverzichtbar zu sein. Man muss sowohl die Anti-Patterns als auch wirklich guten Code richtig anwenden können. Aber wenn man so gut ist kann man es auch gleich richtig machen :D
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Da stimme ich dir absolut zu!
@jojajoja420
@jojajoja420 3 жыл бұрын
Wer's geschickt macht, erklärt sogar immer überzeugend, warum das Anti-Pattern alternativlos oder besser ist. Dann bist du nicht nur der einzige, der es verstehst, sondern deine Kollegen halten dich auch noch für ein Genie.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Richtig böse 😈
@MrTschoke
@MrTschoke 3 жыл бұрын
Bin schon 10 Jahre Programmierer. Die Motivation für schlechten Code ist meiner Erfahrung nach meistens, das die Person es einfach nicht besser kann.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Das ist dann aber eher unabsichtlich ... eine Motivation würde ich der Person dann nicht unterstellen.
@MrTschoke
@MrTschoke 3 жыл бұрын
verstehen kommt darauf an wie einsichtig die person ist. Hab da schon spannende Erklärungen gehört warum das so gut ist.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Hast du ein Beispiel?
@MrTschoke
@MrTschoke 3 жыл бұрын
Ok. Hab mal einen gesehen der hat in c# alles was ging public static gemacht. Mit der Begründung: Das ist viel besser, dann kommt man von überall an die fields bzw Methoden. Instanziert wurde nicht viel. Oder ein variablenname "erstes Muster nach ... Barren" (in der s7 kann man so Namen wählen). Mit der Begründung: das ist so viel leserlicher. Oder riesiege eierlegendewollmilchsäue. Mit der Begründung: das ist so viel flexibler. Oder auf Vererbung verzichten. Mit der begründung: das macht es zu kompliziert. Da blickt man nicht mehr wo was passiert. Könnte da noch viel mehr schreiben...
@MrTschoke
@MrTschoke 3 жыл бұрын
Einen hab ich noch. In der sps gibt es verschiedene Sprachen. Eine davon ist awl. Ist sowas wie assembler. Und dann gibt es scl. Das ist eine prozedurale mit den ganzen kontrollstrukturen und so. Es gibt viele Programmierer die behaupten das awl viel leserlicher und einfacher sei. Also spaghetti Code ist besser als kontrollstrukturen.
@heinrichschiller4673
@heinrichschiller4673 3 жыл бұрын
Ich würde noch empfehlen den Code Denglisch zu schreiben, mit einem Hauch französischer Begriffe falls einem dann doch die Begriffe ausgehen.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Also dann "Dengrisch"?
@dasd1am0nd
@dasd1am0nd 3 жыл бұрын
Oder mit hartem, ausgeschriebenem Akzent ;) schwäbische Kommentare zu verstehen macht bestimmt Spaß xD. Ausrede währe das man die Mitarbeiter kulturell fortbilden möchte
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😆
@supirc
@supirc 2 жыл бұрын
Sehr geiles Video :D Hat mich richtig zum lachen gebracht, und gelernt hab ich auch noch was. Danke :)
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Perfekt :) Freut mich!
@dontpanic3206
@dontpanic3206 3 жыл бұрын
Ein Schulprojekt von mir war, eine simple physikalische Simulation zu Programmieren. Aus irgendeinem Grund hatte sich einer in unserer Gruppe dazu entschieden, eine eigens programmierte Datenbank für simple Konstanten und Koordinaten zu verwenden, die man nirgendwo hätte speichern müssen. Das Projekt war nun plötzlich extrem schwer und wurde nie fertiggestellt.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Das ist ein typischer Fall von Overengineering.
@bombermen1132
@bombermen1132 3 жыл бұрын
I fühle mich wie der ultimative unteammate, nur weil ich mir dieses Video anschaue
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Unteammate? Sorry, ich kenne den Begriff nicht 😅
@napptus
@napptus 3 жыл бұрын
@@Florian.Dalwigk Teammate = Mitspieler, Helfer für Erfolg Untteammate = Saboteur
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Again what learned! 😅
@PhillipAmthor
@PhillipAmthor 3 жыл бұрын
Wenn man bei halo gekickt wird obwohl das spiel noch gar nicht begonnen hat
@ParodieHecker-mobile
@ParodieHecker-mobile 3 жыл бұрын
@@napptus Ich kenn es nur als Anti-Mate
@Ciddyism
@Ciddyism 3 жыл бұрын
Ich glaub, 1-2 "Neulinge" aus dem aktuellen Projekt, das ich seit kurzem unterstütze und optimiere, haben dieses Video geschaut und das mit dem Anti in Anti-Patterns nicht verstanden. :D (So schlimm ist es jetzt auch nicht, aber man erkennt den Unterschied zwischen dem Code der Fortgeschrittenen (bzw. Pros) und dem der "Anfänger" / Azubis recht deutlich. Und ich vermute, dass der Kaffee alle war, sonst hätten die Reviewenden den Käse wohl entdeckt.) Die doppelte Negation kann ich bestätigen. Nutzte die für Verfügbarkeitsprüfung bei Objekten etc. bis es was besseres gab. (return !!obj; // cast to bool) Fand dann auch schon mal !!bool -> bool oder if (!!obj) - bei dem if (obj) das gleiche macht. (Wenn man etwas nachmacht, das man nicht versteht.) Ab hier könnte eine Prise Sarkasmus / Anti in den Text geraten sein. ;) --- Labels und Gotos gehen immer. Das sollte man aus der Assembler-Welt übernehmen, da es sich da so bewehrt hat, dass es sogar in Basic gelandet ist. Die Nutzer freuen sich, wenn sie auf das Goto klicken und erstmal nicht wissen wo sie sind. Oder noch besser: die Suchfunktion verwenden müssen, weil die IDE nicht mit Gotos klarkommt. --- LINQ o.ä. hast du - glaub ich - nicht erwähnt? for-Schleife statt z.B. - list.select() (oder list.map()) - list.where() (oder list.filter()) - list.any() (oder list.some()) - ... ist immer gut. Mehr Code und man sieht nicht so leicht was nun geschieht. Außerdem finde ich gerade bei any/some die merkwürdigsten Konstruktionen mit break; um wieder aus der Schleife zu kommen. --- Wenn man dann doch LINQ verwendet: unerwarteten Code einbauen. Geht doch nichts über das Filtern von Elementen um nebenbei noch den Inhalt des Originals zu ändern. Also z.B. list.where((entry) => { var res = decide(entry); entry.status = done; // nobody expects the ... return res; }); --- Außerdem kann man dem Azubi erstmal erklären warum es keine gute Idee ist mit der For-Schleife aufsteigend durch die Liste zu gehen und bestimmte Elemente zu entfernen. So kann man mehr Zeit im Pairprogramming verbringen und lernt Kollegen kennen. (Besonders schön "Also die For-Schleife zeige ich dir nicht. Die funktioniert sicher richtig. Es muss die Auswahl der zu löschenden Elemente sein, die die Fehler verursacht." (Man schaut in die Ausgabe: Fehler out-of-bounds, liest zig Zeilen Code und diverse Funktionen, alles richtig, ... bringt den Dev dazu doch mal die Schleife zu zeigen: Ups, es werden "Paare" von zu löschenden Einträgen zu 50% ignoriert.) --- Außerdem möglichst einen "Einzeiler draus machen" - gerade bei Ergebnissen aus Datenbankabfragen. Versteht doch jeder was diese 20 Operationen auf min. 4 Tabellen aus diesen 100.000 Einträgen macht und wieso das Ergebnis so aussieht. (Da hatte ich mal vor Jahren ne Rückfrage eines Kollegen, der seinen eigenen Code (bzw. den Fehler darin) nicht verstand und auch nicht wirklich debuggen konnte, weil VS das zu dem Zeitpunkt nur mit Zwischenergebnissen unterstützt hat.) --- Möglichst einen Einzeiler aus der For-Schleife machen. for (int i = 0; i < listlen && task(); i++); bool task() { //do task... return true; } Und wenn wir schon dabei sind: Syntax nicht verstehen. Die Software in einer Endlosschleife zu parken ist aber eher ein Bug. for (int i = 0; i < len; ); { i++; // print log // do task } war auch sehr schön. Er kannte ++i nicht und wollte nicht bei 1 anfangen? Die 3 großen Sätze des Neulings - "Es kann ja nicht daran liegen, dass der Zähler nicht hochgezählt wird - aber die Logs kommen nicht.", - "Aber es kommt doch überall ein Semikolon hinter." und - "Der Compiler ist so dumm, der warnt mich nicht einmal vor solchen Fehlern." --- Waren jetzt meine Highlights der letzten ~10 Jahre?!
@maze76
@maze76 5 жыл бұрын
Wie er einfach nicht weiß auf welcher Seite er stehen soll 😂😂😂
@Florian.Dalwigk
@Florian.Dalwigk 5 жыл бұрын
;)
@felixmentele
@felixmentele 3 жыл бұрын
Ah, der Einführungskurs für Riot-Programmierer xD
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Yeah 😎
@gnul
@gnul 3 жыл бұрын
In meiner alten Firma gab es Klassen mit 100k Zeilen. 🤯 Der Herr 🎣, der das programmiert hatte war und ist unverzichtbar für das Unternehmen. 🚀
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
100k Zeilen Code? 😳 Absoluter Wahnsinn! Das kann nicht gut sein 😄 Vor allem, wenn der nette Herr die Segel streichen will ... ein absoluter Single Point of Failure.
@kaanevlende563
@kaanevlende563 4 жыл бұрын
Hey, hätte mal eine kleine Frage. Hätte man den rekursiven Code bei 8:04 nicht einfach in eine for schleife packen können ? Bzw, vielleicht hast du ja Lust ein Video zu erstellen, wo du näher auf solche rekursiven Fälle eingehen möchtest? Find das interessant abwägen zu können, ab wann die iterative Methode besser wäre
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Ja, hätte man. Dazu werde ich bald mal ein Video machen.
@schwingedeshaehers
@schwingedeshaehers 3 жыл бұрын
Und am Anfang mit //do Not Change true = 1; false = 0; (Bzw ähnliches)
@keineangabe4434
@keineangabe4434 3 жыл бұрын
Am besten ist das man den Code beginnt so zu parallelisieren das es zu Race-Conditions kommt die zu einem Problem auf jeder anderen Maschine außer der eigenen werden. Bonuspunkte wenn man das durch geschicktes aufrufen von cout oder print Befehlen macht.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Haha, super gute Idee! PS: Darf ich mal fragen, wo ihr alle herkommt? Das Video hat jetzt aus dem Nichts über 2000 Aufrufe bekommen. Wurde euch das auf YT vorgeschlagen oder extern verlinkt?
@keineangabe4434
@keineangabe4434 3 жыл бұрын
@@Florian.Dalwigk Kommt von KZbin Algorithmus. Du wurdest mir aus dem heiteren Himmel vorgeschlagen. Vielleicht findet er deinen Namen nett. Vielleicht findet er es putzig das ein Mensch sich anmaßt etwas wie ihn verstehen zu wollen.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😄😅 Vielen Dank für die Info!
@justdicer
@justdicer 3 жыл бұрын
Das video scheint vielen erst jz vorgeschlagen zu werden auch mal ne art von vorpruduction
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Nice! Ich bin auch überrascht 😄
@justdicer
@justdicer 3 жыл бұрын
@@Florian.Dalwigk das gleiche geschah vor kurzem mit dem games com vlog von spark of phinix von 2014 oder 15 der wurde seiner ganzen comunity angezeigt 7 jahre später youtube Algorithmus ist echt gut
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ja, echt Top! Vor einem Jahr habe ich durch so etwas fast 20.000 Abos dazu bekommen.
@viktorbeer9921
@viktorbeer9921 3 жыл бұрын
Sollte ich jemals programmierer anstellen müssen weiß ich was ich als test mache 😂
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Yeah 😁😊
@jonathanbabelotzky4222
@jonathanbabelotzky4222 3 жыл бұрын
Gibt aber auch viele Stellen, in denen 20 Zeilen Code in einem One-Liner abgehandelt werden könnten und ich mich frage, warum das so aufgebläht wurde. Sehe eher Bloating als Oneliner als Problem.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Kommt auf den Kontext an.
@Vue-F
@Vue-F Жыл бұрын
Ich lache jedes Mal bei dem Video. 😂😂😂 PS: Gerade runtergescrollt. Videovorschlag: ARTE - Arbeit ohne Sinn, Dienst nach Vorschrift. 😂😂😂
@Florian.Dalwigk
@Florian.Dalwigk Жыл бұрын
Passend ;)
@Cyber_Chriis
@Cyber_Chriis 3 жыл бұрын
Auch gut: Unnötige While-Schleifen integrieren, um weitere Abhängigkeiten zu erzeugen, statt einfach mit einem for-Loop drüber zu iterieren 🔥🔥
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Yeah!
@minleyfox5231
@minleyfox5231 3 жыл бұрын
Wie meinst du das? Was für Abhängigkeiten erzeugt eine while loop?
@ScharadaLP
@ScharadaLP 3 жыл бұрын
Findest du code copy okay wenn es sich zB um zwei unterschiedliche Produkte handelt und es sich wirklich nur um vielleicht 10 Zeilen code handelt?
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Bei 10 Zeilen ist das noch vertretbar 😉
@loyalitiy
@loyalitiy 3 жыл бұрын
Zwiebel Taktik ach ja... Den hab ich mal als Abgabe gebracht. Selbst implementiert, viel Code geschrieben und meinen Code über die Vorgabe gestülpt, der Tutor hatte höchstwahrscheinlich sehr viel Spaß. War halt viel zum lesen ;)
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Wahrscheinlich 😄
@swindler1570
@swindler1570 3 жыл бұрын
Ich will mehr davon! Lol
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ich überlege, ob ich noch einen 2. Teil mache 😄
@Dus3826
@Dus3826 3 жыл бұрын
Also mit ein paar Punkte tu ich mich schwer. Meinst du, man sollte lieber gegen Implementation testen, als Interfaces? Wenn nein, benötige ich Interfaces, wenn ich meinen Code auf sein Verhalten, nicht seine Implementation, testen möchte, oder was sehe ich falsch ?
@johannbauer2863
@johannbauer2863 3 жыл бұрын
7:38 ich programmier in funktionalen Programmiersprachen, was soll das? XD
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Sorry 😅
@mazito4445
@mazito4445 3 жыл бұрын
Ihh, Haskell... "Piraten, den Rekursionsanker werfen!!!"... "Kapitän, da schwimmt ein riesiges Lambda"... "Beta Reduktion FEUER, Alpha Reduktion FEUER... verdammt denk an die Klammern ihr Ratten, sonst sieht da keiner mehr durch!"
@marcotroster8247
@marcotroster8247 2 жыл бұрын
Das beste Anti-Pattern, was mir bisher untergekommen ist: Einen DB-Kontext als Singleton umsetzen und bei den Abfragen nicht die eigentlichen Daten zurückgeben, sondern nur ob's geklappt hat. Die Daten legt man dann in unscheinbare Klassenvariablen vom Singleton ab. Und weil das noch nicht genug ist, schreibt man alle DB-Kontexte so und ruft sie gegenseitig auf, dass sich die Attribute schon während einer Abfrage ständig überschreiben und nen halben DDoS verursachen. Happy Debugging für den armen Tropf, der rausfinden soll, wieso Nutzer manchmal Daten von nem anderen Nutzer bekommen und wieso die Queries manchmal paar Minuten laden 😂
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Ach du heilige ... :D
@marcotroster8247
@marcotroster8247 2 жыл бұрын
@@Florian.Dalwigk Naja das Projekt war ein einziges Anti-Pattern. Ungefähr alles was du genannt hast außer "overengineertes Design" konnte man finden. Hard-kodierte AWS Keys, auf den lokalen Entwicklerrechner vom Vorgänger gelinkte DLLs die gefehlt haben, in Git eingecheckte Build-Outputs, keine Testprozedur (nicht mal manuell als Excel-Tabelle), manuell implementierte Verschlüsselung, selbstgeschriebene SQL Injection MSSQL-Makros, usw. Jedes Select-From-Where war ne Store Procedure "aus Sicherheitsgründen". Sowas wie SqlParameter in C# haben sie nicht gekannt und die Where-Condition im Code selber zusammengebaut, usw. 😅 Und das schlimmste war eigentlich, dass es dem IT Security Experte und dem Projektleiter egal war, ob die Website 5 Minuten lädt und dass man Daten klauen kann. Das war echt ne Sauerei, dass ich dann noch wegen dem Öffnen solcher Tickets böse angeschaut wurde, weil man nicht ehrlich mit dem Kunde reden durfte, dass er uns nen heillosen Schrotthaufen angekarrt hat 🤯 Ich hatte mir schon überlegt, ob ich den Beruf wechseln soll, weil ich am Refactoring dieses Müllhaufens gescheitert war. Aber dann kam zum Glück wieder ein besseres Projekt, bei dem ich Selbstvertrauen tanken konnte und mir klar wurde, dass jeder dran gescheitert wäre 😄 Naja was man nicht alles für Geld tut 😅😅😅
@echtertill
@echtertill 3 жыл бұрын
Jeder Fehler den man kennenlernt ist ein neuer Fehler den man machen kann
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Schön gesagt!
@tomatentheo6316
@tomatentheo6316 3 жыл бұрын
Alle Klassen mit Klassenvariablen instanziieren lassen, getreu dem Motto,wir hassen Garbage-Collection. ....aber zu deinem Punkt mit Interfaces,Abstrakten Klassen, würde ich mit Vorsicht genießen, denn bei einem guten Design Partnern sind sie ein sehr gutes Mittel zum Zweck. Erst kürzlich könnte ich somit erfolgreich switch-Case oder If-Else Verschachtelungen vermeiden. Allerdings ist es schon richtig ein Interface welches ein Interface implantiert und dann noch von einer abstrakten Klasse vererbt wir, ist womöglich etwas divergent. Jedoch die Situation bestimmt denn Fall! Schlimmer sind Gott Klassen oder dutzende If-Else- oder switch-Case Anweisungen.Am besten noch in Verbindung mit Reflexfilme;-)
@Colduz
@Colduz 3 жыл бұрын
6:38 Was ist an den Code unverständlich? "n==1 ||" könnte weggelassen werden, aber sonst? Die Rekursion entspricht in diesen Fall, der mathematischen Definition. Finde ich vollkommen in Ordnung. Schlechte One-Liner sind für mich eher solche Geschichten: a=a100?100:a);
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Das kommt tatsächlich auf die Zielgruppe an. Grundsätzlich ist der Code okay, doch für andere vlt. schwer lesbar.
@bm5931
@bm5931 3 жыл бұрын
Super Video!
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Vielen Dank :)
@The-Torbey
@The-Torbey 3 жыл бұрын
Beim Oneliner seh ich mich leider wieder. Muss ich mir echt abgewöhnen, auch wenn meine Oneliner meist nicht so lang sind
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Manchmal ist weniger aber auch mehr.
@multigladiator384
@multigladiator384 5 жыл бұрын
5:30 hehe
@Brocks551
@Brocks551 5 жыл бұрын
da musste ich auch laut lachen :D
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
;)
@echtertill
@echtertill 3 жыл бұрын
Ich kombiniere einfach alles als Strafe für mein Lehrer, der Java statt JS gesagt hat und mir so viele Probleme beim Coden bereitet hat.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Wie kann man das denn vertauschen? Als Informatiklehrer?
@echtertill
@echtertill 3 жыл бұрын
@@Florian.Dalwigk Frage ich mich auch. Java und Javascript ist wie Car und Carpet.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Gutes Beispiel 😉
@oShinobu
@oShinobu 3 жыл бұрын
@@echtertill Das Beispiel muss ich mir merken :D
@raphaelkuttruf
@raphaelkuttruf 3 жыл бұрын
Boolsche Ausdrücke kann man extrem aufblühen lassen 😂 Auch die wildesten Edgecases müssen angefangen werden, da entstehen unmengen an Code😁 Möglichst viele UDTs erfinden😋 Indirektionen lieben wir doch alle😅
@ajcool2k
@ajcool2k 3 жыл бұрын
Doppelte Negationen verwende ich oft um Werte (!!{}) zu boolean zu casten. Aber ich möchte die Welt auch brennen sehen 🔥
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Hehe :)
@jensw9128
@jensw9128 3 жыл бұрын
Das ist der Doomsday Alg zum bestimmen des wochentags zu einem bestimmten Datum, als Einzeiler: return weekdays[(year%100/12+year%100%12+year%100%12/4-year/100%4*2+2-doomsdays[month-1]-(((year%4==0&&year%100!=0)||year%400==0)&&month
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Warum nur? 🤣
@andreasrohmann2647
@andreasrohmann2647 3 жыл бұрын
Wieso, der Code ist doch geil. Hab ich mir gleich kopiert :-)
@x0kosmus0x
@x0kosmus0x 3 жыл бұрын
Der oneliner für Fakultät ist richtig cool
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Yeah 😎
@xsold
@xsold 3 жыл бұрын
Wenn das Java ist, dann darfst du nach der convention kein underscore (_) benutzen. Also kein int iteration_count sonder iterationCount
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Da trenne ich mich von von Convention, da ich das für besser lesbar halte.
@xsold
@xsold 3 жыл бұрын
Es ist deine Meinung, und deine meinung bleibt deine Meinung. Wenn du sagst, das isst für dich richtig, dann ist es das auch.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Genauso lasse ich jedem die andere Variante. Jeder soll so coden, wie er/sie es mag. Nur beim Arbeiten im Team sollte man sich dann gut absprechen 😉
@xsold
@xsold 3 жыл бұрын
@@Florian.Dalwigk exakt.
@DJTechnostyler
@DJTechnostyler 3 жыл бұрын
Nun, das mit den if-Anweisungen in eine Funktion packen finde ich ehrlich gesagt gar nicht mal so verkehrt. Beispielsweise gibt es in JavaScript kein XOR. Da finde ich es immer sehr angenehm, wenn man das in ne eigene Funktion packt. Manchmal sind if-Anweisungen auch einfach nur kompliziert und man kann keine Alternative nutzen. Dann sind Funktionen ein wunderschönes Mittel um diesen komplizierten Anweisungen eine Semantik zu geben. Oder man braucht eine Überprüfung einfach immer und immer wieder, weil sehr viel Nebenläufigkeit stattfindet und man Raceconditions vermeiden will und gleichzeitig unnötiges Ausführen von Code.
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Das ist glaube ich Geschmackssache ;)
@mastermuc0
@mastermuc0 3 жыл бұрын
Das schlimme bei OneLinern ist dass sich manche Leute dafür feiern, weil der Code dann ja kompakter ist.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Und weil der Code dann ach so kompliziert aussieht. "Schau mal, was ich hier geiles programmiert habe." Traurig, wenn man so etwas nötig hat.
@nicolasschmidt1412
@nicolasschmidt1412 3 жыл бұрын
Naja, also für Produktionscode, bzw. Code der zur Anwendung da ist, ist es meistens eher schlechter Stil, aber an sich ist es eine interessante Challenge, komplexe Algorithmen in einem einzigen Befehl zu schreiben. Ich habe das aus Langeweile immer im Informatik-Unterricht in der Schule gemeinsam mit einem Freund gemacht und es war schon echt beeindruckend, wie viel komplizierte Sachen man durch einen rekursiven One-Liner so hinbekommen kann. Trotzdem sollte man sowas natürlich nicht in seinen Code einbauen, wenn der am Ende auch laufen soll, also das debuggen ist dann ja auch die Hölle. Und in einem Team erst recht nicht. Aber es ist halt an sich schon eine interessante Challenge
@niccommander
@niccommander 3 жыл бұрын
Ganz schlimm ist es auch statische Attribute in libs zur Konfiguation zu verwenden - am besten noch auf einem System bei dem die Lib zwischen Applikationen geshared wird...
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Oh ja!
@Ufuk646
@Ufuk646 5 жыл бұрын
Geiles Video xD
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
🙏
@vexjujinko4554
@vexjujinko4554 3 жыл бұрын
9:09 Bold of you to assume, dass man für refactoring Zeit kriegt. Das wäre ja schließlich eine gute Idee
@שלומיטובול
@שלומיטובול 3 жыл бұрын
This look like interesting video... What about english subtitles?
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
I will work on that!
@שלומיטובול
@שלומיטובול 3 жыл бұрын
@@Florian.Dalwigk thanks, Appreciate it!
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
You're welcome!
@jazurka896
@jazurka896 2 жыл бұрын
Also das Creepy Code Repo hab ich mal gespeichert ^^
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
:D
@object_name
@object_name 3 жыл бұрын
Bei deiner definition von "Spaghetti code" verstehe ich glaube ich nicht ganz was du meinst. Deine Beschreibung trifft nach meinem Verständnis nach unter anderem auf - Array.map. // eigentlich ein for loop - Array.forEach // eigentlich ein for loop - Singleton // ist ja quasi der Konstruktor - Single Responsiblilty Prinzip // erzeugt sehr viele sprünge in kleinere funktionen (nach uncle bob, sind das ja nicht mehr als ~10 zeilen pro funktion oder so) zu. Aber am ende läuft es sowieso darauf hinaus, dass der absichtlich schlecht verfasste code plötzlich hoch gelobbt und von den Kollegen als angenehm zu lesen beschrieben wird. Ich bin langsam der Überzeugung, schlechter/guter Code ist absolut subjektiv.
@JojOatXGME
@JojOatXGME 3 жыл бұрын
Na ja, am Ende ist das immer ein Trade-off. Jede Funktion sorgt für einen gewissen Overhead. Gleichzeitig werden die Funktionen selbst aber einfacher zu überblicken, zumindest wenn man es richtig macht. Im Endeffekt hängt es von sehr vielen Faktoren ab, ob das Verschieben in eine separate Funktion an dieser Stelle sinnvoll ist oder nicht. Dazu zählt auch Häufigkeit der Verwendung einer Funktion. So kann z.B. Array.map die Lesbarkeit gegenüber eine Schleife verbessern, während das Einfügen einer eigenen map-Method die Lesbarkeit gegenüber einer Schleife verschlechtern kann. Eine Funktion die häufiger verwendet wird, ist auch mehr Entwicklern bereits bekannt und verursacht damit auch deutlich weniger Overhead. Ein anderer Faktor ist auch die Vertrautheit der Kollegen mit bestimmten Konzepten. So kann eine IIFE die Verständlichkeit durchaus verbessern. Wenn der Leser aber noch nicht mit dem Konzept vertraut ist, ist das aber super verwirrend. Das bedeutet schlechter/guter Code ist leider tatsächlich sehr subjektiv.
@LetShadowPlay
@LetShadowPlay 3 жыл бұрын
Wenn du das video schaust und dir denkst mhh wieso erfüllt der code meiner firma so viele von den punkten :-/
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Dann bist du bei der falschen Firma :D
@wchen2340
@wchen2340 Жыл бұрын
Exception base flow Control. Unübersichtliche GUIs mittels Popups und nested dropdowns zu retten. Code snippets aus SO-Fragen copy/pasten. Den Compiler wegen kleinkariertheit beschimpfen. Daher die Warnungen abschalten und dann die ganze nacht nen typo oder shadowing-artefakt mittels printf() debuggen. jajaja. muss man durch. ich zumindest.
@ITWorks4U
@ITWorks4U 3 жыл бұрын
Das Video ist zwar etwas alt, aber immer wieder sehe ich, speziell bei C/C++ "Tutorials" Dinge, die man nicht sehen will: uninitialisierte Zeiger, Verwenden von unsicheren Funktionen, wie gets(), atoi() oder auch uninitialisierte Variablen und Datentypen, die dann zur Laufzeit verwendet werden sollen. Damit kann man auch viel Mist am System machen.
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Das stimmt.
@benhbr
@benhbr 3 жыл бұрын
Herrlich! Btw, in 6:30 hat sich ein falscher Freund eingeschlichen ;)
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Inwiefern?
@keineangabe4434
@keineangabe4434 3 жыл бұрын
Auch ein sehr guter Weg (den ich leider schon mal mitmachen musste), alles in eine einzige komplexe Funktion packen. Die Funktion akzeptierte als Eingabe alles außer den Trivialfall (d.h. der Fall der dazu führt das Eingabe = Ausgabe ist), denn dieser Fall ist natürlich unnötig. Die Funktion selbst hat mehrere Sprunganweisungen zu haben, denn das macht das ganze effizienter. Außerdem enthält er "leichte nummerische Besonderheiten die das Ergebnis nur minimal beeinflussen aber alles schneller machen". Auf die Frage "Welche" ist mit "Siehe Code" zu antworten. Bonuspunkte wenn ihr nicht verstehen könnt warum es schwierig ist diesen Code zu testen. Und warum das Debuggen so lange dauert. Extra Bonus wenn ihr dann gar nicht einsehen könnte warum der Code, der Sprunganweisungen hat, nicht in CUDA übertragen werden kann. Ach, jetzt habe ich wieder Hass. Und das ist 3 Jahre her.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Manchmal schreibt man sich in Rage 😉
@keineangabe4434
@keineangabe4434 3 жыл бұрын
@@Florian.Dalwigk Manch mal muss man dass rauslassen sonst beginnt man noch das moderne äquivalent der Inquisition für schlechten Computercode zu gründen.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ohja!
@keineangabe4434
@keineangabe4434 3 жыл бұрын
@@Florian.Dalwigk Hmm, dann wären wir schon mal zwei. Was wir nun brauchen ist Folterwerkzeug und ein paar willige Schergen. Auf zur GEZ-Einzugsbehörde!
@corruptedmodz9797
@corruptedmodz9797 3 жыл бұрын
Wie cyberpunk 2077 gecoded wurde
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😆
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Gibt es den noch bzw wird der noch weiterentwickelt?
@Game_Lab_Germany
@Game_Lab_Germany 3 жыл бұрын
Also vor 2 Wochen wusste ich noch was ich da mache ö.ö Jetzt weiß es nur noch Gott was die krasseranfangsengcodeblock tut.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Oh
@wollginator
@wollginator 3 жыл бұрын
Habe meine Anregungen und Kommentare unter das Techlead Video zu Anti-Patterns geschrieben, du übernimmst sie ja dann vermutlich 1:1 ;-D
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ne, mein Video ist speziell für Java 😉
@wollginator
@wollginator 3 жыл бұрын
@@Florian.Dalwigk Absolut, sollte auch nur ein kleiner Scherz sein, keep it up! :-)
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Danke 🙂
@BooBar2521
@BooBar2521 3 жыл бұрын
Rache ist eine tolle Motivation 😂👌🏻
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😏
@ega919
@ega919 2 жыл бұрын
Oneliner zählen zu meinen guilty pleasures. 😇🤭
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
😅
@JojOatXGME
@JojOatXGME 3 жыл бұрын
Das mit der Rekursion finde ich übertrieben. Es gibt auch viele Probleme die ich mit natürlicher Sprache auch mit Rekursion beschreiben würde. Solche Rekursionen in Schleifen umzuformen macht den Code meiner Meinung nach nur deutlich schwerer zu lesen. Das ist etwas, was ich leider auch immer mal wieder sehe. Da gibt es dann teilweise mehrere Verzweigungen, die nur dafür da sind in der Schleife den Status über die Iterationen hinweg richtig zu tracken. Für den Fall der Fakultät sind meiner Meinung nach beide Varianten gleich lesbar. Man sollte sowas nur nicht in eine andere Methode integrieren, sondern in eine eigene Funktion auslagern. Das gilt für die Schleife genauso.
@cheshire1
@cheshire1 2 жыл бұрын
Man muss von Fall zu Fall entscheiden. Es gibt Fälle wo Rekursion sehr sinnvoll ist, aber auch welche, wo es großen Schaden anrichtet. z.B. kann man die Fibonacci-Zahlen rekursiv berechnen, so wie es mit natürlicher Sprache beschrieben wird, das führt aber zu exponentieller Laufzeit. Das Problem ist, dass oft nicht genau nachgedacht und Rekursion pauschal als elegant eingeordnet wird.
@GuRuGeorge03
@GuRuGeorge03 3 жыл бұрын
Bewusst anti pattern erzeugen? Da muss man ja unnötig genial sein. machts einfach wie ich und seid einfach scheiße wenns um pattern geht, dann kommen die anti pattern ganz intuitiv xD
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Aber, aber ... ;)
@1aboPLZ
@1aboPLZ 3 жыл бұрын
Vor'm comitten auf nem Git durch nen Obfuscator jagen xD Schöne verschlüsselte Kommentare 😎
@1aboPLZ
@1aboPLZ 3 жыл бұрын
wait... jetzt will ich nen Java Obfuscator implementieren 😂
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😎👍
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Tu dir keinen Zwang an 😅
@vexjujinko4554
@vexjujinko4554 3 жыл бұрын
Ich fand die faculty function ziemlich lesbar um ehrlich zu sein. Das hängt aber sicher auch davon ab ob einem klar ist was Fakultäten in Mathe sind. Wobei ich innerhalb einer function wo dies die einzige Funktionalität ist wohl auch etwas ausführlicher wäre, aber es gibt definitiv Fälle wo ich mit ähnlichen Zeilen gearbeitet habe, ohne, dass es mir negativ aufgefallen wäre
@cheshire1
@cheshire1 2 жыл бұрын
Dazu kommt aber noch, dass das englische Wort für Fakultät factorial ist und nicht faculty. Ich kann mir vorstellen, dass ein englischsprachiger Developer extrem verwirrt wäre.
@andik70
@andik70 3 жыл бұрын
Doppelte negation is in C aber nicht schlecht.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Warum?
@andik70
@andik70 3 жыл бұрын
@@Florian.Dalwigk definierter Wert. Zwar ist ungleich 0 true, aber !! transformiert den Wert zu 0 oder 1.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ok
@davidkuda7074
@davidkuda7074 3 жыл бұрын
Hmm mit Spaghetti-Code bin ich nicht einverstanden. Robert C. Martin schlägt in seinem Buch "Clean Code" vor, dass Funktionen klein sein sollen und nur eine Sache tun sollen. gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29
@DEZK90
@DEZK90 3 жыл бұрын
Hab ich auch gedacht. Es widersprechen sich auch andere Punkte: Overengeneering und Superclasses, man könnte ein Sauberes MVC oder MVVM Pattern verwenden, hat dann aber mehr Klassen und ggf. Interfaces, man kommt aber auch ohne diese Klassen und Interfaces aus, wenn man alles in den Code-Behind eines Views packt. Das letzteres unsauber ist, geht natürlich aus den Prinzipien des Clean-Code und der Trennung von Ansichten und Logik hervor. Das wäre auch ein Beispiel für ein tatsächliches Anti Pattern, so wollen Dinge wie WPF oder Angular, dass du dich an ein MVx Pattern hälst, halten dich aber nicht auf, falls du es nicht machst.
@Meowzofficial
@Meowzofficial 3 жыл бұрын
How to coding partner:
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
?
@Jungbluth11
@Jungbluth11 3 жыл бұрын
Leute die diese Anti-Pattern bewusst aus anderen Gründen als zu Lehrzwecken verwenden, haben es verdient entlassen zu werden und nie wieder einen Job als Programmierer zu bekommen!
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Absolut! 😄
@Jungbluth11
@Jungbluth11 3 жыл бұрын
@@Florian.Dalwigk Wenn ich mir so die Kommentare durchlese bin ich mir sicher ob das jeder verstanden hat
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
🤔
@uumas
@uumas 3 жыл бұрын
Weiss nicht was es an der Fakultätsmethode zu beanstanden gibt. Besser geht's nicht.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😳
@bandanaboii3136
@bandanaboii3136 3 жыл бұрын
Du hast
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
?
@-reneanon6391
@-reneanon6391 3 жыл бұрын
0
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
-1
@timonoerd2911
@timonoerd2911 3 жыл бұрын
Ich sag jetzt nichts^^ gist.github.com/aras-p/6224951
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Ich bin übrigens ein großer Fan von "Obfuscated C Code".
@timonoerd2911
@timonoerd2911 3 жыл бұрын
@@Florian.Dalwigk hatte irgendwo mal so ein #define true (rand()
@hallomeinnameistkarl216
@hallomeinnameistkarl216 2 жыл бұрын
Hm Hmhm if var == True: print("Hihi") elif var == False: print("Haha")
@Florian.Dalwigk
@Florian.Dalwigk 2 жыл бұрын
Aaaaaaaaaaaaahhhhhhhhhhhhhhhhhh!!!!!!!!!!!!!!!
@hallomeinnameistkarl216
@hallomeinnameistkarl216 2 жыл бұрын
@@Florian.Dalwigk Hihi
@albano9354
@albano9354 4 жыл бұрын
In dieser Komentarsektion ist zu viel IQ konzentriert.
@Florian.Dalwigk
@Florian.Dalwigk 4 жыл бұрын
Korrekt!
@dasten123
@dasten123 3 жыл бұрын
lol
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
League of Legends?
@dasten123
@dasten123 3 жыл бұрын
@@Florian.Dalwigk Fluss in der Region Bahr al-Ghazal im Südsudan
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
😄
@echtertill
@echtertill 3 жыл бұрын
Das wird witzig
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Oh ja!
@PEHOLST1
@PEHOLST1 3 жыл бұрын
Das erinnert mich an den Coronawahnsinn der Regierung☺️
@DonDerBalken
@DonDerBalken 3 жыл бұрын
Troll dich weg! Was hat das miteinander zu tun? Ist Jens Spahn jetzt Programmierer oder was?
@1aboPLZ
@1aboPLZ 3 жыл бұрын
doch finde schon gewisser Weise. Es gab für viele Personen in meinem Umfeld Unklarheiten aber auch Entscheidungsgründe zu Maßnahmen kamen halt manchmal wie Spaghetti rüber.... Das ist so weil das ja so ist und das wiederum weil das andere nicht so ist und das wiederum muss man jetzt abwägen 😑
@einsjannis
@einsjannis 3 жыл бұрын
So schlechtes video
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Okay. Darf ich fragen warum?
@kleinalex
@kleinalex 3 жыл бұрын
​@@Florian.Dalwigk Ich rate jetzt mal: Weil es in dem ganzen Video praktisch keine Betonung und keine Satzunterteilungen gibt? Würde man versuchen, in dem Text Satzzeichen nur nach Gehör zu setzen (also nicht nach Regeln), es würde kein einziges Satzzeichen dabei rauskommen. Nicht einmal zwischen den verschiedenen Themen wird auch nur Luft geholt. Dadurch ist es sehr anstrengend, dem eigentlich inhaltlich interessanten Video zu folgen. Das Video ist damit selbst ein schönes Anti-Pattern für Vortragsgestaltung.
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
War vlt genau so intendiert
@kleinalex
@kleinalex 3 жыл бұрын
@@Florian.Dalwigk Wir lernen: Nicht alles, was Absicht ist, ist auch gut 🤷
@Florian.Dalwigk
@Florian.Dalwigk 3 жыл бұрын
Wohl wahr
CLEAN CODE: Wie du IF-ANWEISUNGEN BESSER einsetzt
4:47
Florian Dalwigk
Рет қаралды 38 М.
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
小丑女COCO的审判。#天使 #小丑 #超人不会飞
00:53
超人不会飞
Рет қаралды 16 МЛН
Junior Vs Senior Code - How To Write Better Code
22:13
Web Dev Simplified
Рет қаралды 1,1 МЛН
Das One-Time-Pad (OTP)
8:55
Florian Dalwigk
Рет қаралды 32 М.
SO erzeugst du JEDE Datei aus einer anderen Datei | #Python
9:26
Florian Dalwigk
Рет қаралды 22 М.
Einführung in die Aussagenlogik mit Sherlock Holmes
16:23
Florian Dalwigk
Рет қаралды 53 М.
Sei nicht so PARANOID!
9:46
Florian Dalwigk
Рет қаралды 2,8 М.
BND Chief: State of the Nation (Interview)
24:30
Florian Dalwigk
Рет қаралды 3,3 М.
Vorbereitung auf das Informatikstudium | Informatikstudium
9:44
Florian Dalwigk
Рет қаралды 43 М.
ALLE Python Keywords in EINEM Video erklärt | #Python
14:06
Florian Dalwigk
Рет қаралды 62 М.
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН