Où puis-je trouver des exercices de conception sur lesquels travailler? [fermé]

16

Je pense qu'il est important de continuer à pratiquer mes compétences en résolution de problèmes. Écrire mes propres mini-projets est une façon, mais une autre consiste à essayer de résoudre les problèmes affichés en ligne. Il est facile de trouver des quiz de programmation intéressants en ligne qui nécessitent d'appliquer des algorithmes intelligents pour résoudre - Project Euler est un exemple bien connu.

Cependant, dans de nombreux projets réels, la conception du logiciel - en particulier dans les phases initiales - a un impact important et à des stades ultérieurs, il ne peut pas être modifié aussi facilement que des algorithmes simples. Afin d'améliorer ces compétences, je recherche toute collection de problèmes de conception.

Quand je dis «conception», je veux dire la conception abstraite d'une solution logicielle - par exemple, quels modules y aura-t-il et quelles sont les dépendances entre eux, comment les données circuleront dans le programme, quel type de données doit être enregistré dans le base de données, etc. Les problèmes de conception sont ceux qui sont essentiels à résoudre dans les premières étapes de tout projet, mais leur solution est un diagramme de tableau blanc sans une seule ligne de code.

Bien sûr, ce genre de problèmes n'a pas de solution correcte unique, mais je serai particulièrement satisfait de tout endroit qui affiche également les avantages et les inconvénients des solutions typiques qui pourraient être utilisées pour aborder le problème.

Chêne
la source

Réponses:

7

Que diriez-vous de Code Kata . J'en ai fait quelques-unes, et elles sont amusantes à faire et suffisamment stimulantes pour qu'il y ait toujours quelque chose à apprendre.

Les commentaires pour chacun des kata contiennent généralement suffisamment d'informations pour répondre à tout ce qui vous bloque.

Alan
la source
Le premier est certainement un problème de conception, mais j'avais le sentiment que les autres étaient beaucoup plus orientés code. Je vais lui donner un autre look, merci!
Oak
3

Commencez avec le problème de conception classique: KWIC.

David Parnas a utilisé KWIC comme exemple dans son article classique sur la modularité: sur les critères à utiliser dans les systèmes de décomposition en modules , que tout le monde devrait probablement lire tous les 10 ans.

KWIC, pour le mot-clé en contexte , est un simple problème d'indexation et de tri où vous lisez des lignes de texte, puis faites pivoter chaque ligne en fonction de mots clés (par exemple, en excluant "le", "avec"), en ajoutant chaque décalage à un liste que vous triez ensuite. L'idée est que l'utilisation de KWIC serait utile pour générer un index pour un livre. Au moment de son article classique, Parnas a déclaré qu'un programmeur expérimenté pourrait le résoudre en une à deux semaines, mais la loi de Yannis stipule que cela peut maintenant être fait en une à deux heures . [Les systèmes d'exploitation et les bibliothèques standard se sont beaucoup améliorés.]

Lisez l'article de Parnas et dès que vous pourrez comprendre ce que le programme KWIC est censé faire, allez écrire le vôtre comme exercice de conception. Ensuite, lisez le reste de l'article, qui traite de deux modèles différents: les deux sont modulaires, mais l'un permet de masquer les informations tandis que l'autre ne le fait pas.

Après avoir connu l'exemple KWIC, vous pourrez apprécier les autres documents de conception de logiciels qui l'utilisent. Par exemple, l'article Decoupling Change from Design de Michael VanHilst l' utilise pour montrer une technique de conception vraiment intéressante utilisant des modèles C ++. Et, tant que nous parlons de modèles et de conception C ++, lisez l'article de Czarnecki et d'Eisenecker Synthesizing Objects .

En passant de KWIC, il existe d'autres exemples classiques, comme l' exemple Spacewar , qui a été porté / repensé dans plusieurs langues, comme Python et AspectJ .

Bien sûr, n'importe quel programme peut être utilisé comme exercice de conception, mais KWIC et Spacewar sont des exemples où vous pouvez envisager plusieurs alternatives.

Macneil
la source
Re: Votre clarification ... Je parle principalement du niveau de conception du tableau blanc ici. Mais il vaut également la peine de creuser jusqu'au niveau du code, car vous pouvez réaliser que beaucoup de vos solutions de conception présentent des défauts qui les rendent beaucoup plus difficiles à exprimer.
Macneil
1

J'ai entendu ce genre de chose appelé «programmation de katas». Kata est un terme d'arts martiaux pour une forme ou une séquence de mouvements qui se répète encore et encore à la perfection. Faites une recherche de katas dans la langue de votre choix et je parie que vous trouverez quelque chose. :)

Josh Earl
la source
1

Je suis d'accord que Katas et Euler sont gentils pour concevoir des algorithmes et pratiquer le codage - peut-être que vous pouvez les développer, être un peu créatif et concevoir un système autour de l'un des problèmes.

Par exemple, je travaille non seulement à résoudre les problèmes d'Euler pour trouver la réponse la plus rapide et la plus courte, mais à les résoudre de manière distribuée - je veux mettre en place une série de nœuds Erlang afin de résoudre l'un des problèmes. Bien sûr, cela signifie que je dois comprendre comment séparer le problème en morceaux discrets et leur faire rapport sur leurs progrès et agréger les résultats ensemble (le tout dans un langage fonctionnel dont je ne suis pas un expert).

Peut-être pouvez-vous concevoir un système autour de la résolution de l'un de ces problèmes en tant que solution commerciale - comment pouvez-vous faire en sorte que plusieurs "clients" puissent accéder à votre problème en même temps, vous pouvez passer par la conception d'un client et les interactions de la couche de service , etc.

Il s'agit d'être créatif et de s'amuser.

Watson
la source