Haha ... ich habe noch einige solcher Anti-Pattern in petto :)
@Ufuk6465 жыл бұрын
Hab mich voll weggeschmissen xD
@Florian.Dalwigk5 жыл бұрын
@@Ufuk646 Haha, das freut mich :)
@echtertill3 жыл бұрын
@@Florian.Dalwigk Kannst du noch ein Video machen?
@Florian.Dalwigk3 жыл бұрын
Ich überlege es mir
@Thomas09182736454 жыл бұрын
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.Dalwigk4 жыл бұрын
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_zokki3 жыл бұрын
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 Жыл бұрын
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
@jobcentertycoon4 жыл бұрын
Och einfach sich die ersten Projekte die man früher mal gemacht hat angucken dann weiß man was ineffizienz bedeutet
@Florian.Dalwigk4 жыл бұрын
Ja, da kann sich niemand von ausnehmen :D
@hansklaus68603 жыл бұрын
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.Dalwigk3 жыл бұрын
Uff 😅
@ultraman69503 жыл бұрын
German programming video recommended to a native Spanish speaker... KZbin algorithm is an enigma.
@Florian.Dalwigk3 жыл бұрын
Lol 🤦♂️ Sorry for that!
@halilibrahimozturk27913 жыл бұрын
Hello from Turkey :)
@Florian.Dalwigk3 жыл бұрын
Hey! Greetings back :)
@TheGodlikeBlock4 жыл бұрын
> 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.Dalwigk4 жыл бұрын
Gute Ergänzung!
@cidar47503 жыл бұрын
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.
@Erarnitox3 жыл бұрын
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)
@swenruhl17593 жыл бұрын
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; }
@SimGunther3 жыл бұрын
_Wild English comment appears for the algorithm_
@Florian.Dalwigk3 жыл бұрын
Thank you very much!
@einsenundnullen97895 жыл бұрын
6:21 beste Stelle
@Florian.Dalwigk4 жыл бұрын
;)
@matthias_21254 жыл бұрын
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.Dalwigk4 жыл бұрын
Haha, die Idee ist cool 😎
@eliasga78203 жыл бұрын
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.
@LaDolceFotografia3 жыл бұрын
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.Dalwigk3 жыл бұрын
Naja "Tipp". Dass das Video ironisch gemeint war, ist schon klar, oder? :D Das sollte man gerade NICHT machen.
@LaDolceFotografia3 жыл бұрын
@@Florian.Dalwigk Ist irgendwie eben nicht klar. Dafür geht das zu oft hin und her 🤷🏻♂️
@Florian.Dalwigk3 жыл бұрын
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).
@mortgu3 жыл бұрын
🤦 das ist doch offensichtlich nur ironisch gemeint. Hast du keinen Sinn für Humor?
@linuxtag20094 жыл бұрын
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.Dalwigk3 жыл бұрын
:D
@weblio48615 жыл бұрын
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.Dalwigk4 жыл бұрын
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).
@Nilslos4 жыл бұрын
@@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.Dalwigk3 жыл бұрын
Da stimme ich dir absolut zu!
@jojajoja4203 жыл бұрын
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.Dalwigk3 жыл бұрын
Richtig böse 😈
@MrTschoke3 жыл бұрын
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.Dalwigk3 жыл бұрын
Das ist dann aber eher unabsichtlich ... eine Motivation würde ich der Person dann nicht unterstellen.
@MrTschoke3 жыл бұрын
verstehen kommt darauf an wie einsichtig die person ist. Hab da schon spannende Erklärungen gehört warum das so gut ist.
@Florian.Dalwigk3 жыл бұрын
Hast du ein Beispiel?
@MrTschoke3 жыл бұрын
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...
@MrTschoke3 жыл бұрын
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.
@heinrichschiller46733 жыл бұрын
Ich würde noch empfehlen den Code Denglisch zu schreiben, mit einem Hauch französischer Begriffe falls einem dann doch die Begriffe ausgehen.
@Florian.Dalwigk3 жыл бұрын
Also dann "Dengrisch"?
@dasd1am0nd3 жыл бұрын
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.Dalwigk3 жыл бұрын
😆
@supirc2 жыл бұрын
Sehr geiles Video :D Hat mich richtig zum lachen gebracht, und gelernt hab ich auch noch was. Danke :)
@Florian.Dalwigk2 жыл бұрын
Perfekt :) Freut mich!
@dontpanic32063 жыл бұрын
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.Dalwigk3 жыл бұрын
Das ist ein typischer Fall von Overengineering.
@bombermen11323 жыл бұрын
I fühle mich wie der ultimative unteammate, nur weil ich mir dieses Video anschaue
@Florian.Dalwigk3 жыл бұрын
Unteammate? Sorry, ich kenne den Begriff nicht 😅
@napptus3 жыл бұрын
@@Florian.Dalwigk Teammate = Mitspieler, Helfer für Erfolg Untteammate = Saboteur
@Florian.Dalwigk3 жыл бұрын
Again what learned! 😅
@PhillipAmthor3 жыл бұрын
Wenn man bei halo gekickt wird obwohl das spiel noch gar nicht begonnen hat
@ParodieHecker-mobile3 жыл бұрын
@@napptus Ich kenn es nur als Anti-Mate
@Ciddyism3 жыл бұрын
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?!
@maze765 жыл бұрын
Wie er einfach nicht weiß auf welcher Seite er stehen soll 😂😂😂
@Florian.Dalwigk5 жыл бұрын
;)
@felixmentele3 жыл бұрын
Ah, der Einführungskurs für Riot-Programmierer xD
@Florian.Dalwigk3 жыл бұрын
Yeah 😎
@gnul3 жыл бұрын
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.Dalwigk3 жыл бұрын
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.
@kaanevlende5634 жыл бұрын
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.Dalwigk4 жыл бұрын
Ja, hätte man. Dazu werde ich bald mal ein Video machen.
@schwingedeshaehers3 жыл бұрын
Und am Anfang mit //do Not Change true = 1; false = 0; (Bzw ähnliches)
@keineangabe44343 жыл бұрын
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.Dalwigk3 жыл бұрын
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?
@keineangabe44343 жыл бұрын
@@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.Dalwigk3 жыл бұрын
😄😅 Vielen Dank für die Info!
@justdicer3 жыл бұрын
Das video scheint vielen erst jz vorgeschlagen zu werden auch mal ne art von vorpruduction
@Florian.Dalwigk3 жыл бұрын
Nice! Ich bin auch überrascht 😄
@justdicer3 жыл бұрын
@@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.Dalwigk3 жыл бұрын
Ja, echt Top! Vor einem Jahr habe ich durch so etwas fast 20.000 Abos dazu bekommen.
@viktorbeer99213 жыл бұрын
Sollte ich jemals programmierer anstellen müssen weiß ich was ich als test mache 😂
@Florian.Dalwigk3 жыл бұрын
Yeah 😁😊
@jonathanbabelotzky42223 жыл бұрын
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.Dalwigk3 жыл бұрын
Kommt auf den Kontext an.
@Vue-F Жыл бұрын
Ich lache jedes Mal bei dem Video. 😂😂😂 PS: Gerade runtergescrollt. Videovorschlag: ARTE - Arbeit ohne Sinn, Dienst nach Vorschrift. 😂😂😂
@Florian.Dalwigk Жыл бұрын
Passend ;)
@Cyber_Chriis3 жыл бұрын
Auch gut: Unnötige While-Schleifen integrieren, um weitere Abhängigkeiten zu erzeugen, statt einfach mit einem for-Loop drüber zu iterieren 🔥🔥
@Florian.Dalwigk3 жыл бұрын
Yeah!
@minleyfox52313 жыл бұрын
Wie meinst du das? Was für Abhängigkeiten erzeugt eine while loop?
@ScharadaLP3 жыл бұрын
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.Dalwigk3 жыл бұрын
Bei 10 Zeilen ist das noch vertretbar 😉
@loyalitiy3 жыл бұрын
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.Dalwigk3 жыл бұрын
Wahrscheinlich 😄
@swindler15703 жыл бұрын
Ich will mehr davon! Lol
@Florian.Dalwigk3 жыл бұрын
Ich überlege, ob ich noch einen 2. Teil mache 😄
@Dus38263 жыл бұрын
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 ?
@johannbauer28633 жыл бұрын
7:38 ich programmier in funktionalen Programmiersprachen, was soll das? XD
@Florian.Dalwigk3 жыл бұрын
Sorry 😅
@mazito44453 жыл бұрын
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!"
@marcotroster82472 жыл бұрын
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.Dalwigk2 жыл бұрын
Ach du heilige ... :D
@marcotroster82472 жыл бұрын
@@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 😅😅😅
@echtertill3 жыл бұрын
Jeder Fehler den man kennenlernt ist ein neuer Fehler den man machen kann
@Florian.Dalwigk3 жыл бұрын
Schön gesagt!
@tomatentheo63163 жыл бұрын
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;-)
@Colduz3 жыл бұрын
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.Dalwigk3 жыл бұрын
Das kommt tatsächlich auf die Zielgruppe an. Grundsätzlich ist der Code okay, doch für andere vlt. schwer lesbar.
@bm59313 жыл бұрын
Super Video!
@Florian.Dalwigk3 жыл бұрын
Vielen Dank :)
@The-Torbey3 жыл бұрын
Beim Oneliner seh ich mich leider wieder. Muss ich mir echt abgewöhnen, auch wenn meine Oneliner meist nicht so lang sind
@Florian.Dalwigk3 жыл бұрын
Manchmal ist weniger aber auch mehr.
@multigladiator3845 жыл бұрын
5:30 hehe
@Brocks5515 жыл бұрын
da musste ich auch laut lachen :D
@Florian.Dalwigk4 жыл бұрын
;)
@echtertill3 жыл бұрын
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.Dalwigk3 жыл бұрын
Wie kann man das denn vertauschen? Als Informatiklehrer?
@echtertill3 жыл бұрын
@@Florian.Dalwigk Frage ich mich auch. Java und Javascript ist wie Car und Carpet.
@Florian.Dalwigk3 жыл бұрын
Gutes Beispiel 😉
@oShinobu3 жыл бұрын
@@echtertill Das Beispiel muss ich mir merken :D
@raphaelkuttruf3 жыл бұрын
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😅
@ajcool2k3 жыл бұрын
Doppelte Negationen verwende ich oft um Werte (!!{}) zu boolean zu casten. Aber ich möchte die Welt auch brennen sehen 🔥
@Florian.Dalwigk2 жыл бұрын
Hehe :)
@jensw91283 жыл бұрын
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.Dalwigk3 жыл бұрын
Warum nur? 🤣
@andreasrohmann26473 жыл бұрын
Wieso, der Code ist doch geil. Hab ich mir gleich kopiert :-)
@x0kosmus0x3 жыл бұрын
Der oneliner für Fakultät ist richtig cool
@Florian.Dalwigk3 жыл бұрын
Yeah 😎
@xsold3 жыл бұрын
Wenn das Java ist, dann darfst du nach der convention kein underscore (_) benutzen. Also kein int iteration_count sonder iterationCount
@Florian.Dalwigk3 жыл бұрын
Da trenne ich mich von von Convention, da ich das für besser lesbar halte.
@xsold3 жыл бұрын
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.Dalwigk3 жыл бұрын
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 😉
@xsold3 жыл бұрын
@@Florian.Dalwigk exakt.
@DJTechnostyler3 жыл бұрын
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.Dalwigk2 жыл бұрын
Das ist glaube ich Geschmackssache ;)
@mastermuc03 жыл бұрын
Das schlimme bei OneLinern ist dass sich manche Leute dafür feiern, weil der Code dann ja kompakter ist.
@Florian.Dalwigk3 жыл бұрын
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.
@nicolasschmidt14123 жыл бұрын
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
@niccommander3 жыл бұрын
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.Dalwigk3 жыл бұрын
Oh ja!
@Ufuk6465 жыл бұрын
Geiles Video xD
@Florian.Dalwigk4 жыл бұрын
🙏
@vexjujinko45543 жыл бұрын
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.Dalwigk3 жыл бұрын
I will work on that!
@שלומיטובול3 жыл бұрын
@@Florian.Dalwigk thanks, Appreciate it!
@Florian.Dalwigk3 жыл бұрын
You're welcome!
@jazurka8962 жыл бұрын
Also das Creepy Code Repo hab ich mal gespeichert ^^
@Florian.Dalwigk2 жыл бұрын
:D
@object_name3 жыл бұрын
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.
@JojOatXGME3 жыл бұрын
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.
@LetShadowPlay3 жыл бұрын
Wenn du das video schaust und dir denkst mhh wieso erfüllt der code meiner firma so viele von den punkten :-/
@Florian.Dalwigk3 жыл бұрын
Dann bist du bei der falschen Firma :D
@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.
@ITWorks4U3 жыл бұрын
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.Dalwigk2 жыл бұрын
Das stimmt.
@benhbr3 жыл бұрын
Herrlich! Btw, in 6:30 hat sich ein falscher Freund eingeschlichen ;)
@Florian.Dalwigk3 жыл бұрын
Inwiefern?
@keineangabe44343 жыл бұрын
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.Dalwigk3 жыл бұрын
Manchmal schreibt man sich in Rage 😉
@keineangabe44343 жыл бұрын
@@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.Dalwigk3 жыл бұрын
Ohja!
@keineangabe44343 жыл бұрын
@@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!
@corruptedmodz97973 жыл бұрын
Wie cyberpunk 2077 gecoded wurde
@Florian.Dalwigk3 жыл бұрын
😆
@Florian.Dalwigk3 жыл бұрын
Gibt es den noch bzw wird der noch weiterentwickelt?
@Game_Lab_Germany3 жыл бұрын
Also vor 2 Wochen wusste ich noch was ich da mache ö.ö Jetzt weiß es nur noch Gott was die krasseranfangsengcodeblock tut.
@Florian.Dalwigk3 жыл бұрын
Oh
@wollginator3 жыл бұрын
Habe meine Anregungen und Kommentare unter das Techlead Video zu Anti-Patterns geschrieben, du übernimmst sie ja dann vermutlich 1:1 ;-D
@Florian.Dalwigk3 жыл бұрын
Ne, mein Video ist speziell für Java 😉
@wollginator3 жыл бұрын
@@Florian.Dalwigk Absolut, sollte auch nur ein kleiner Scherz sein, keep it up! :-)
@Florian.Dalwigk3 жыл бұрын
Danke 🙂
@BooBar25213 жыл бұрын
Rache ist eine tolle Motivation 😂👌🏻
@Florian.Dalwigk3 жыл бұрын
😏
@ega9192 жыл бұрын
Oneliner zählen zu meinen guilty pleasures. 😇🤭
@Florian.Dalwigk2 жыл бұрын
😅
@JojOatXGME3 жыл бұрын
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.
@cheshire12 жыл бұрын
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.
@GuRuGeorge033 жыл бұрын
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.Dalwigk3 жыл бұрын
Aber, aber ... ;)
@1aboPLZ3 жыл бұрын
Vor'm comitten auf nem Git durch nen Obfuscator jagen xD Schöne verschlüsselte Kommentare 😎
@1aboPLZ3 жыл бұрын
wait... jetzt will ich nen Java Obfuscator implementieren 😂
@Florian.Dalwigk3 жыл бұрын
😎👍
@Florian.Dalwigk3 жыл бұрын
Tu dir keinen Zwang an 😅
@vexjujinko45543 жыл бұрын
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
@cheshire12 жыл бұрын
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.
@andik703 жыл бұрын
Doppelte negation is in C aber nicht schlecht.
@Florian.Dalwigk3 жыл бұрын
Warum?
@andik703 жыл бұрын
@@Florian.Dalwigk definierter Wert. Zwar ist ungleich 0 true, aber !! transformiert den Wert zu 0 oder 1.
@Florian.Dalwigk3 жыл бұрын
Ok
@davidkuda70743 жыл бұрын
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
@DEZK903 жыл бұрын
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.
@Meowzofficial3 жыл бұрын
How to coding partner:
@Florian.Dalwigk3 жыл бұрын
?
@Jungbluth113 жыл бұрын
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.Dalwigk3 жыл бұрын
Absolut! 😄
@Jungbluth113 жыл бұрын
@@Florian.Dalwigk Wenn ich mir so die Kommentare durchlese bin ich mir sicher ob das jeder verstanden hat
@Florian.Dalwigk3 жыл бұрын
🤔
@uumas3 жыл бұрын
Weiss nicht was es an der Fakultätsmethode zu beanstanden gibt. Besser geht's nicht.
@Florian.Dalwigk3 жыл бұрын
😳
@bandanaboii31363 жыл бұрын
Du hast
@Florian.Dalwigk3 жыл бұрын
?
@-reneanon63913 жыл бұрын
0
@Florian.Dalwigk3 жыл бұрын
-1
@timonoerd29113 жыл бұрын
Ich sag jetzt nichts^^ gist.github.com/aras-p/6224951
@Florian.Dalwigk3 жыл бұрын
Ich bin übrigens ein großer Fan von "Obfuscated C Code".
@timonoerd29113 жыл бұрын
@@Florian.Dalwigk hatte irgendwo mal so ein #define true (rand()
@hallomeinnameistkarl2162 жыл бұрын
Hm Hmhm if var == True: print("Hihi") elif var == False: print("Haha")
@Florian.Dalwigk2 жыл бұрын
Aaaaaaaaaaaaahhhhhhhhhhhhhhhhhh!!!!!!!!!!!!!!!
@hallomeinnameistkarl2162 жыл бұрын
@@Florian.Dalwigk Hihi
@albano93544 жыл бұрын
In dieser Komentarsektion ist zu viel IQ konzentriert.
@Florian.Dalwigk4 жыл бұрын
Korrekt!
@dasten1233 жыл бұрын
lol
@Florian.Dalwigk3 жыл бұрын
League of Legends?
@dasten1233 жыл бұрын
@@Florian.Dalwigk Fluss in der Region Bahr al-Ghazal im Südsudan
@Florian.Dalwigk3 жыл бұрын
😄
@echtertill3 жыл бұрын
Das wird witzig
@Florian.Dalwigk3 жыл бұрын
Oh ja!
@PEHOLST13 жыл бұрын
Das erinnert mich an den Coronawahnsinn der Regierung☺️
@DonDerBalken3 жыл бұрын
Troll dich weg! Was hat das miteinander zu tun? Ist Jens Spahn jetzt Programmierer oder was?
@1aboPLZ3 жыл бұрын
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 😑
@einsjannis3 жыл бұрын
So schlechtes video
@Florian.Dalwigk3 жыл бұрын
Okay. Darf ich fragen warum?
@kleinalex3 жыл бұрын
@@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.Dalwigk3 жыл бұрын
War vlt genau so intendiert
@kleinalex3 жыл бұрын
@@Florian.Dalwigk Wir lernen: Nicht alles, was Absicht ist, ist auch gut 🤷