Ich halte es für wichtig, meine Fähigkeiten zur Problemlösung weiter zu trainieren. Das Schreiben meiner eigenen Mini-Projekte ist eine Möglichkeit, aber eine andere besteht darin, online gepostete Probleme zu lösen. Es ist einfach, interessante Programmier-Quiz online zu finden, bei denen clevere Algorithmen zum Lösen eingesetzt werden müssen - Project Euler ist ein bekanntes Beispiel.
In vielen realen Projekten hat das Design der Software jedoch - insbesondere in den Anfangsphasen - große Auswirkungen und kann in späteren Phasen nicht so einfach angepasst werden wie einfache Algorithmen. Um diese Fähigkeiten zu verbessern, suche ich nach einer Sammlung von Designproblemen.
Wenn ich "Design" sage, meine ich das abstrakte Design einer Softwarelösung - zum Beispiel, welche Module es geben wird und welche Abhängigkeiten zwischen ihnen bestehen, wie die Daten im Programm fließen werden, welche Art von Daten im System gespeichert werden müssen Datenbank usw. Bei Entwurfsproblemen handelt es sich um diejenigen Probleme, die in der Anfangsphase eines Projekts unbedingt zu lösen sind. Bei der Lösung handelt es sich jedoch um ein Whiteboard-Diagramm ohne eine einzige Codezeile.
Natürlich gibt es für diese Art von Problemen keine einzige richtige Lösung, aber ich bin besonders zufrieden mit jedem Ort, an dem auch Vor- und Nachteile der typischen Lösungen angezeigt werden, die zur Lösung des Problems verwendet werden könnten.