Clean Code – Tech’n’Drinks @myposter

Anfang November hatten wir in unserem Münchner Office volles Haus: Die Tech Community traf sich nun schon zum 10. Mal zu unserem Meetup Tech’n’Drinks. Dieses Mal mit zwei Speakern von uns: Martin und Jenny zum Thema Clean Code. 

Unsere beiden Speaker Martin und Jenny

Seit 2017 ist Martin bei myposter für die iOS-App-Entwicklung verantwortlich. Bereits zu seiner Schulzeit unternahm er erste Gehversuche in der Informatik, indem er den ein oder anderen Hefteintrag – zum Leid seiner Lehrer – in HTML verfasste. Über einige Umwegen kam er dann vor ca. 7 Jahren auch beruflich in der Informatik an. 

Jenny landete ohne große Umwege in der Welt der Softwareentwicklung. Sie hat Medieninformatik studiert und war zuerst als Freelancerin tätig. Seit 2015 ist sie bei myposter und bringt uns als fachlicher Tech Lead im Bereich Frontend immer weiter nach vorn.  

Die Talks

Martin und Jenny tauchten mit ihren Talks tief in die Themen “Clean Code” bzw. “Clean Code adapted for JavaScript” ein. Während sich Martin dabei mehr auf die Theorie hinter Clean Code konzentrierte, sprach Jenny darüber, wie man Clean Code Konzepte auf eine konkrete Programmiersprache – nämlich JavaScript – anwendet. 

Clean Code

Martin beschäftigte sich in seinem Talk mit den verschiedenen Leitlinien, die man bei Clean Code beachten sollte. Eines davon ist der Grundsatz “Don’t repeat yourself” oder kurz: DRY. Dabei geht es überwiegend darum, dass Wissen nicht wiederholt wird, um Widersprüche zu vermeiden. Außerdem sollte das Prinzip “Keep it simple stupid (KISS)” beachtet werden. Der Code sollte demnach so einfach wie möglich gehalten und nicht unnötig kompliziert geschrieben werden. Das Hauptziel ist also die Einfachheit beim Design. Als Letztes stellte Martin den Grundsatz “You ain’t gonna need it (YAGNI)” vor. Dabei geht es darum, die Funktionalität im Auge zu behalten und kein Over-Engineering zu betreiben. Im Allgemeinen ist beim Clean Code wichtig, immer die richtige Balance zwischen DRY,KISS und YAGNI zu finden. Martin stellte am Ende außerdem nochmal heraus, dass bei alledem zu berücksichtigen ist, dass Prinzipien zwar generell verfolgt werden sollten – man es aber natürlich nicht übertreiben darf. Prinzipien sind keine fixen Regeln und man muss immer das richtige Gleichgewicht finden – aber: Stop Overthinking! 

Clean Code adapted for JavaScript

Der zweite Talk orientiert sich an Robert C. Martins Buch “Clean Code: A Handbook of Agile Software Craftsmanship”. Dabei wurden die Konzepte aus dem Buch für JavaScript adaptiert und Jenny ging darauf ein, was man unbedingt beachten sollte. Dabei handelte es sich jedoch eher um Empfehlungen als um feste Regeln, da es kein universelles Mittel gibt um guten Code von schlechtem Code zu unterscheiden.

Ich bin ein Textblock. Klicken Sie auf den Bearbeiten Button um diesen Text zu ändern. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

                                                                                 Quelle: Reddit.

Naming

Wie schon Phil Karlton in seinem Zitat “There are only two hard things in Computer Science: cache invalidation and naming things” dargestellt hat, ist das Naming im Code nicht immer so einfach. Deshalb beschäftigte sich Jenny im ersten Teil des Talks mit dem Naming von Variablen, Funktionen und Klassen. Zusammengefasst sollten Namen die folgenden Kriterien erfüllen:

  • Namen sollten selbsterklärend sein und vermitteln, welche Absicht dahinter steckt
  • Namen sollten aussprechbar sein
  • Namen sollten durchsuchbar sein, das heißt auch, dass man Magic Strings und Numbers vermeiden sollte
  • Namen sollten explizit sein, um mentales Mapping zu vermeiden
  • Namen sollten konsistent sein, wobei man nach Möglichkeit immer dieselben Wörter für dieselben Konzepte verwenden sollte
  • Namen sollten keinen unnötigen Kontext enthalten

Funktionen

Der zweite Teil von Jennys Talk drehte sich rund um Funktionen. Hierzu gab sie uns folgende Tipps:

  • Single Responsibility Principle: Funktionen sollten nur eine Sache machen
  • So wenig Parameter wie möglich verwenden (optimalerweise keinen, mehr als 3 sollten unbedingt vermieden werden)
  • Flags als Funktionsparameter vermeiden, da sie uns im Normalfall zeigen, dass die Funktion mehr macht als nur eine Sache
  • Funktionen sollten “rein” (“pure”) sein, d.h. sie sollten einen Wert nehmen und einen anderen Wert zurückgeben, damit unerwünschte Seiteneffekte vermieden werden können 
  • “Don’t repeat yourself” (DRY): Code Duplikationen sollten vermieden werden
  • Prototype Extensions (“Monkey Patching”) vermeiden, da es zu unerwartetem Verhalten führen kann, vor allem wenn man andere Libraries verwendet, die Erweiterungen unter demselben Namen vorgenommen haben

Klassen

Im letzten Teil ging Jenny auf Klassen ein, denn seit ES2015 (ES6) gibt es diese in JavaScript. Als wichtigste Regel sollte dabei beachtet werden: 

  • Klassen bevorzugen (vor ES6: constructor functions), außer wenn keine komplexen Objekte benötigt werden
  • Klassen sollten, ebenso wie Funktionen, nur eine Sache tun (Single Responsibility Principle). So erreicht man auch relativ kleine Klassen
  • Man sollte “Method Chaining” verwenden, wenn man Methoden auf Klassen aufruft, damit der Code ausdrucksstärker und weniger verbose ist

Die Slides der beiden Talks findest Du hier:

Klicken Sie auf den unteren Button, um den Inhalt von www.slideshare.net zu laden.

Inhalt laden

PGlmcmFtZSBzcmM9Ii8vd3d3LnNsaWRlc2hhcmUubmV0L3NsaWRlc2hvdy9lbWJlZF9jb2RlL2tleS9NSnpndVJNMWZmUzR2dyIgd2lkdGg9IjU5NSIgaGVpZ2h0PSI0ODUiIGZyYW1lYm9yZGVyPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBzY3JvbGxpbmc9Im5vIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjQ0NDOyBib3JkZXItd2lkdGg6MXB4OyBtYXJnaW4tYm90dG9tOjVweDsgbWF4LXdpZHRoOiAxMDAlOyIgYWxsb3dmdWxsc2NyZWVuPiA8L2lmcmFtZT4=

Klicken Sie auf den unteren Button, um den Inhalt von www.slideshare.net zu laden.

Inhalt laden

PGlmcmFtZSBzcmM9Ii8vd3d3LnNsaWRlc2hhcmUubmV0L3NsaWRlc2hvdy9lbWJlZF9jb2RlL2tleS84NkhHbzZDakZRaVhqQyIgd2lkdGg9IjU5NSIgaGVpZ2h0PSI0ODUiIGZyYW1lYm9yZGVyPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBzY3JvbGxpbmc9Im5vIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjQ0NDOyBib3JkZXItd2lkdGg6MXB4OyBtYXJnaW4tYm90dG9tOjVweDsgbWF4LXdpZHRoOiAxMDAlOyIgYWxsb3dmdWxsc2NyZWVuPiA8L2lmcmFtZT4=