Einleitung
Auch in Teil 2 der Dojos für Entwickler gewinnt der, der auch übt. Was kann man gewinnen? Die Antwort ist kurz und bündig: Wissen. Stefan Lieser hat weitere 15 Aufgaben und ihre Lösungen formuliert. Stefan ist freiberuflicher Trainer und Berater und Fan von intelligenten Entwicklungsmethoden, die für Qualität der resultierenden Software sorgen. Er denkt sich die Aufgaben aus und gibt dann auch seine Lösung zum Besten. Er wird auch mitteilen, wie lange er gebraucht und wie viele Tests er geschrieben hat.
Alle Originalquellcodes in diesem devbook finden Sie zum Download unter http://www.dotnet-developer-conference.de/downloads/DojosII.zip
Aber bevor es los geht noch schnell 3 Fragen an Stefan:
Stefan, wie bist du zum Programmieren gekommen?
Mein Vater hat einmal einen programmierbaren Taschenrechner mit nach Hause gebracht. Der hat mich sehr fasziniert. Als Ferienjob habe ich dann Datenerfassung auf einer DEC PDP-11 gemacht und dabei "nebenbei" FORTRAN gelernt. Übrigens im selben Büro mit meinem Vater. Das hat mir tiefe Einblicke in sein Berufsleben gegeben. So ging es dann ständig weiter. In der Schule Informatikunterricht, dann Informatik studiert. Und schon vor Studiumsbeginn die ersten Programmierjobs.
Mich hat C# als Sprache fasziniert. Ich fand sie von Anfang an in manchen Details eleganter als Java. Ich beschäftige mich neben .NET allerdings auch mit anderen Umgebungen.
Wie lernt man am schnellsten zu programmieren?
Auch für die Softwareentwicklung gilt, dass man es erst mit 10.000 Stunden "deliberate practice" zur Meisterschaft bringt. Insofern würde ich sagen, am schnellsten geht es, wenn man täglich übt. Damit meine ich nicht, täglich seinen Job als Programmierer zu machen, sondern wirklich täglich zu üben. Der Unterschied besteht für mich darin, dass ich beim Üben Fehler zulassen kann. Als Trompeter vergleiche ich das gerne mit dem Spielen eines Musikinstruments. Immer nur Auftreten geht nicht. Ich muss vor allem Üben. Und das klingt nicht immer schön ;-)
Welche Tipps zum schnellen und effektiven Lernen kannst du den Lesern dieses DevBooks geben?
Zum Lernen ist Regelmäßigkeit und Reflexion erforderlich. Mit den Übungen des DevBooks kann man sich einige Zeit beschäftigen. Jede Woche eine Aufgabe lösen wäre z.B. ein Weg. Sinnvollerweise sollte die im Buch gezeigte Lösung erst nach der eigenen Lösung angesehen werden, um Vergleiche ziehen zu können. Dabei geht es nicht um richtig oder falsch sondern um den Erkenntnisgewinn.
Worte an den Leser…
Ich wünsche den Lesern viel Spaß mit den Übungen. Eine Anregung könnte noch sein, die Übungen und vor allem die Lösungen gemeinsam mit Kollegen zu diskutieren. Üben in der Gruppe kann viel Spaß machen. Auch beim Diskutieren der individuellen Lösungen kann man einiges lernen. Wer keine eigene Gruppe gründen möchte, kann auch zur CCD School kommen (http://ccd-school.de).
Aufgabe 1
MarkDown-Control selbst gebaut
Einfach, einfacher, MarkDown
Es muss nicht immer HTML oder RTF sein. Wer Texte auszeichnen will, kann auch MarkDown verwenden. Dieses Format ist besonders einfach und aus vielen Wikis bekannt. Also lautet die Übung: Schreiben Sie ein Control, das MarkDown-Texte darstellen kann.
Ein Text erhält Auszeichnungen, damit er auf bestimmte Art und Weise dargestellt wird. Das ist nichts Neues. Anfang der 90er-Jahre wurden beispielsweise HTML und RTF entwickelt, mit dem Ziel, Texten eine Struktur geben zu können. Mit beiden Formaten ist es möglich, einen Textabschnitt etwa kursiv oder fett auszugeben:
HTML: <em>kursiv</em> <strong>fett</strong> RTF: {\i kursiv} {\b fett}
Beide Formate haben jedoch gemeinsam, dass die Syntax für die Formatierung recht aufwendig ist. So sind die gezeigten HTML- und RTF-Beispiele auch nicht vollständig, weil sie von weiteren Elementen umschlossen sein müssen, um gültiges HTML beziehungsweise RTF darzustellen.
Die Vereinfachung von Formatierungen ist das Hauptziel von MarkDown [1][2]. Mit dieser bewusst total simpel gehaltenen Formatierung soll es möglich sein, das Schreiben von Texten deutlich zu vereinfachen, ohne dabei auf Formatierungen gänzlich verzichten zu müssen. So wird bei MarkDown die Formatierung einfach in den Text eingestreut und muss nicht in einen komplizierten syntaktischen Rahmen eingebettet werden. Die Beispiele für kursive und fette Hervorhebungen sehen in MarkDown wie folgt aus:
*kursiv* **fett** ***fett kursiv***
Sie können nicht nur einzelne Textabschnitte kursiv oder fett ausgeben; MarkDown bietet auch Möglichkeiten, die Struktur des Textes zu beschreiben. Eine grundsätzliche Idee von MarkDown ist es, aus einem MarkDown-Text ein HTML-Dokument zu erzeugen. Daher lehnen sich die Formatierungen an das an, was mit HTML möglich ist. Überschriften können beispielsweise folgendermaßen erzeugt werden:
# Überschrift auf Ebene 1 ## Überschrift auf Ebene 2 ### Überschrift auf Ebene 3
Möglicherweise wird der eine oder andere Leser feststellen, dass er solche oder ähnliche Auszeichnungen schon verwendet hat: Wikis verwenden häufig MarkDown oder daran angelehnte Formatierungen.
Auch Aufzählungen in Form von Spiegelstrichlisten oder nummerierte Listen sind möglich:
* Erster Punkt * Zweiter Punkt * Dritter Punkt 1. Schritt eins 1. Schritt zwei 1. Schritt drei
Solche Formatierungen werden beim Konvertieren nach HTML in <ul>- oder <ol>-Listen Übersetzt.
Doch nun zur Aufgabe: Erstellen Sie ein User-Control, das einen Text im MarkDown-Format akzeptiert und als Label anzeigt. Allerdings sollen dabei MarkDown-Formatierungen berücksichtigt werden, sodass beispielsweise ein Wort in Sternchen kursiv ausgegeben wird. Wie viele der MarkDown-Elemente Sie umsetzen, ist zunächst nachrangig. Beginnen Sie ganz einfach, statt gleich eine perfekte 100-prozentige Lösung anzustreben.
Die Herausforderung liegt in zwei Bereichen: zum einen im Parsen des Textes, zum anderen in der Visualisierung. Innerhalb des Textes müssen die Auszeichnungen erkannt werden, um daraus Formatierungen abzuleiten. Im angezeigten Text dürfen die Auszeichnungen nicht mehr erscheinen. Stattdessen muss der Text entsprechend formatiert sein. Wie man das in einem User-Control erreicht, ist die zweite Herausforderung. Ob Sie dabei auf Windows Forms, Silverlight oder WPF setzen, bleibt natürlich Ihnen überlassen. Allerdings würde ich persönlich die Übungszeit nutzen, mich mit XAML auseinanderzusetzen, da in Windows Forms sicher nicht die Zukunft liegt. Wie immer wünsche ich Ihnen viel Spaß beim Üben. Machen Sie viele Fehler und lernen Sie daraus! [ml]
[1] http://de.wikipedia.org/wiki/Markdown [2] http://daringfireball.net/projects/markdown/
Lösung 1
Ein UserControl für Markdown-Textauszeichnungen
Show up Mark down
Texte mit Markdown-Auszeichnungen in einem Control darzustellen, das war die Aufgabe. Natürlich ist bei der Lösung wieder alles im Fluss. Und weil