{"id":971,"date":"2010-05-20T06:37:06","date_gmt":"2010-05-20T06:37:06","guid":{"rendered":"http:\/\/www.navision-blog.de\/2010\/05\/20\/bericht-vom-ersten-net-coding-dojo-in-hamburg\/"},"modified":"2010-05-23T12:23:25","modified_gmt":"2010-05-23T12:23:25","slug":"bericht-vom-ersten-net-coding-dojo-in-hamburg","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2010\/05\/20\/bericht-vom-ersten-net-coding-dojo-in-hamburg\/","title":{"rendered":"Bericht vom Ersten .NET Coding Dojo in Hamburg"},"content":{"rendered":"<p>Gestern fand das erste .NET Coding Dojo in Hamburg statt und es war aus meiner Sicht ein voller Erfolg. Als erstes m&#246;chte ich mich an dieser Stelle bei der Firma <a href=\"http:\/\/www.moaa.de\">masters of arts<\/a> f&#252;r die R&#228;umlichkeit und nat&#252;rlich bei allen Teilnehmer f&#252;r die aktive Mitarbeit bedanken.<\/p>\n<p><img loading=\"lazy\" style=\"border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"Erkl&#228;rungen\" border=\"0\" alt=\"Erkl&#228;rungen\" align=\"right\" src=\"http:\/\/www.tbi-halle.de\/wp-content\/uploads\/BerichtvomErsten.NETCodingDojoinHamburg_5870\/image.png\" width=\"181\" height=\"244\" \/> <\/p>\n<p>Durchgef&#252;hrt haben wir das Dojo im <a href=\"http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?RandoriKata\">Randori-Stil<\/a>, d.h. es gab einen Entwickler, einen \u201cCo-Piloten\u201d und das Publikum. Nach jeweils 5 Minuten bzw. jedem neuen Testfall wurden die Positionen mit neuen Teilnehmer aus dem Publikum getauscht.<\/p>\n<p>Nach einer kurzen allgemeinen Einf&#252;hrung in das Thema \u201cCoding Dojo\u201d habe ich die Aufgabenstellungen der Kata.FizzBuzz und Kata.DictionaryReplacer vorgestellt. Durch kurze Abstimmung haben wir dann (vermutlich durch meine Wortwahl beeinflusst) die Kata.DictionaryReplacer gew&#228;hlt.<\/p>\n<p>Mit der Wahl dieser Kata war ich nicht ganz ungl&#252;cklich, da wir DictionaryReplacer schon im Online Dojo durchgenommen haben und ich deshalb die Fallstricke schon etwas einsch&#228;tzen konnte.<\/p>\n<blockquote>\n<p><strong>Kata.DictionaryReplacer<\/strong><\/p>\n<p>Create a method that takes a string and a dictionary,      <br \/>and replaces every key in the dictionary pre and suffixed with a dollar sign,       <br \/>with the corresponding value from the Dictionary. <\/p>\n<p>Tests <\/p>\n<p>input : &quot;&quot;,      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dict empty       <br \/>output: &quot;&quot; <\/p>\n<p>input : &quot;$temp$&quot;,&#160; <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dict [&quot;temp&quot;, &quot;temporary&quot;]       <br \/>output: &quot;temporary&quot; <\/p>\n<p>input : &quot;$temp$ here comes the name $name$&quot;,      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dict [&quot;temp&quot;, &quot;temporary&quot;] [&quot;name&quot;, &quot;John Doe&quot;]       <br \/>output : &quot;temporary here comes the name John Doe&quot;<\/p>\n<p align=\"right\">[<a href=\"http:\/\/codingdojo.org\/cgi-bin\/wiki.pl?KataDictionaryReplacer\">codingdojo.org<\/a>]<\/p>\n<\/blockquote>\n<p>Nach kurzer Einf&#252;hrung in die Vorgehensweise des Test-Driven Developments (TDD) und Diskussion &#252;ber sinnvolles Naming ging es dann auch richtig in die Entwicklung. Die Kata eignet sich in dieser Form auch sehr sch&#246;n um tats&#228;chlich \u201cTest first\u201d zu arbeiten. Die Implementierung folgt quasi als logische Konsequenz.<\/p>\n<p><img loading=\"lazy\" style=\"border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"Das Publikum\" border=\"0\" alt=\"Das Publikum\" align=\"left\" src=\"http:\/\/www.tbi-halle.de\/wp-content\/uploads\/BerichtvomErsten.NETCodingDojoinHamburg_5870\/image_3.png\" width=\"244\" height=\"164\" \/> <\/p>\n<p>Interessant und ungleich komplizierter wurde es dann als wir eine zus&#228;tzliche Anforderung eingebaut haben. Da es sich bei der Kata um eine Art Templatesystem handelt liegt es nahe auch in den Values des W&#246;rterbuchs neue Keys zu erlauben und somit eine beliebige Ersetzungstiefe zu erreichen. Diese Anforderung ist ein wunderbares Beispiel daf&#252;r wie sehr man mit Aufwandsabsch&#228;tzungen daneben liegen kann. \ud83d\ude09<\/p>\n<p><img loading=\"lazy\" style=\"border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"Guter Rat ist teuer\" border=\"0\" alt=\"Guter Rat ist teuer\" align=\"right\" src=\"http:\/\/www.tbi-halle.de\/wp-content\/uploads\/BerichtvomErsten.NETCodingDojoinHamburg_5870\/image_4.png\" width=\"244\" height=\"156\" \/> <\/p>\n<p>Die rekursive Ersetzung wurde noch sehr schnell gel&#246;st, aber richtig schwer haben wir uns dann mit der Erkennung von zyklischen Ersetzungen und der daraus folgenden Endlosschleife getan. Nach und nach wurden immer kompliziertere L&#246;sungsm&#246;glichkeiten genannt, die aber in der gegebenen Zeit nicht fehlerfrei umgesetzt werden konnten. Als Folge haben wir immer noch einen Test \u201crot\u201d. Wer Lust hat kann sich also die Quellen vom <a href=\"http:\/\/github.com\/forki\/DojoHamburg\">github Repository<\/a> ziehen und als Hausaufgabe den verbleibenden Test \u201cgr&#252;n\u201d machen.<\/p>\n<p>In der Nachbetrachtung haben wir noch einige Sachen festgestellt:<\/p>\n<h5>Was lief gut?<\/h5>\n<ul>\n<li>Die Rotation der Teilnehmer klappte problemlos <\/li>\n<li>L&#246;sungsideen sprudelten f&#246;rmlich aus dem Publikum <\/li>\n<li>Interessante Edge-Cases wurden gefunden <\/li>\n<li>Viele kleine Tipps (z.B. Resharper Shortcuts) wurden ausgetauscht <\/li>\n<li>TDD wurde als erfolgreich f&#252;r die Kata angesehen <\/li>\n<li>Die Randori-Form sorgt f&#252;r Aktivit&#228;t <\/li>\n<li>Ganz wichtig: Es hat Spa&#223; gemacht! <\/li>\n<\/ul>\n<h5>Was wollen wir besser machen?<\/h5>\n<ul>\n<li>Schneller den ersten Test schreiben <\/li>\n<li>Intensivere Diskussion des Interfaces <\/li>\n<li>Noch mehr Wert auf das Naming legen <\/li>\n<li>Versuchen die einfachste L&#246;sung zu w&#228;hlen <\/li>\n<li>Mehr Wert auf Refactoring legen\n<ul>\n<li>wurde etwas vernachl&#228;ssigt, da wir viel Zeit an der Endlosschleife verbraucht haben <\/li>\n<\/ul>\n<\/li>\n<li>Die Rollen Driver, Co-Pilot und Publikum klarer trennen <\/li>\n<li>Nach jedem implementierten Testcase bzw. jeder Rotation der Teilnehmer in das git Repository einchecken <\/li>\n<li>Von Anfang an externe Tastatur und Maus f&#252;r den Laptop bereit stellen <\/li>\n<li>Internetverbindung um Syntaxfrage schneller kl&#228;ren zu k&#246;nnen <\/li>\n<\/ul>\n<p>Als m&#246;glichen Termin f&#252;r das Dojo haben wir jetzt grob jeweils den 3. Mittwoch im Monat vorgeschlagen. &#220;ber die <a href=\"https:\/\/www.xing.com\/net\/pri2907edx\/dotnetusergrouphamburg\/\">Xing-Gruppe der .NET User Group Hamburg<\/a> werden wir nat&#252;rlich auch wieder entsprechende Einladungen verschicken.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gestern fand das erste .NET Coding Dojo in Hamburg statt und es war aus meiner Sicht ein voller Erfolg. Als erstes m&#246;chte ich mich an dieser Stelle bei der Firma masters of arts f&#252;r die R&#228;umlichkeit und nat&#252;rlich bei allen Teilnehmer f&#252;r die aktive Mitarbeit bedanken. Durchgef&#252;hrt haben wir das Dojo im Randori-Stil, d.h. es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,6],"tags":[574,590,531,284],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/971"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=971"}],"version-history":[{"count":6,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/971\/revisions"}],"predecessor-version":[{"id":977,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/971\/revisions\/977"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=971"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}