Где я могу найти дизайнерские упражнения для работы? [закрыто]

16

Я чувствую, что важно продолжать практиковать мои навыки решения проблем. Написание собственных мини-проектов - это один из способов, а другой - попытаться решить проблемы, размещенные в Интернете. В Интернете легко найти интересные тесты по программированию, для решения которых требуется применение умных алгоритмов - Project Euler - один из хорошо известных примеров.

Однако во многих реальных проектах разработка программного обеспечения, особенно на начальных этапах, оказывает большое влияние, и на более поздних этапах его нельзя настроить так же легко, как простые алгоритмы. Чтобы улучшить эти навыки, я ищу любую коллекцию проблем дизайна.

Когда я говорю «дизайн», я имею в виду абстрактный дизайн программного решения - например, какие модули будут и какие между ними зависимости, как данные будут передаваться в программе, какие данные должны быть сохранены в проблемы с базой данных и т. д. Проблемы проектирования - это те проблемы, которые необходимо решить на ранних этапах любого проекта, но их решение представляет собой диаграмму в виде доски без единой строки кода.

Конечно, такого рода проблемы не имеют единственно правильного решения, но я буду особенно рад любому месту, где также представлены плюсы и минусы типичных решений, которые могут быть использованы для решения проблемы.

дуб
источник

Ответы:

7

Как насчет кода Ката . Я сделал несколько из них, и они забавные, и достаточно сложные, чтобы всегда было чему поучиться.

Комментарии к каждому из ката обычно содержат достаточно информации, чтобы помочь ответить на все, что вы застряли.

Алан
источник
Первая - это, конечно, проблема дизайна, но у меня было ощущение, что все остальные гораздо более ориентированы на код. Я еще раз посмотрю, спасибо!
Дуб
3

Начните с к классической проблеме проектирования: KWIC.

Дэвид Парнас использовал KWIC в качестве примера в своей классической статье о модульности: «Критерии для использования при разложении систем на модули» , которую каждый, вероятно, должен читать каждые 10 лет.

KWIC, для ключевого слова в контексте , является простой проблемой индексации и сортировки, когда вы читаете по строкам текста, а затем поворачиваете каждую строку на основе ключевых слов (например, исключая "the", "with"), добавляя каждый сдвиг к список вы потом сортируете. Идея заключается в том, что использование KWIC было бы полезно для создания индекса для книги. Во время своей классической статьи Парнас сказал, что опытный программист может решить ее за одну-две недели, но закон Янниса гласит, что теперь это можно сделать за один-два часа . [Операционные системы и стандартные библиотеки стали намного лучше.]

Прочитайте статью Парнаса и, как только вы сможете понять, что должна делать программа KWIC, отправляйтесь и напишите свое собственное в качестве упражнения для дизайна. Затем прочитайте остальную часть статьи, в которой обсуждаются два разных варианта: оба являются модульными, но один достигает скрытия информации, а другой - нет.

Зная пример KWIC, вы сможете оценить другие документы по разработке программного обеспечения, которые его используют. Например, в статье Майкла ВанХильста «Разъединение изменений от дизайна» он используется, чтобы показать действительно интересную технику дизайна с использованием шаблонов C ++. И, пока мы говорим о шаблонах и дизайне C ++, читайте статью Czarnecki и Eisenecker's Synthesizing Objects .

Переход от KWIC - это другие классические примеры, такие как пример Spacewar , который был портирован / переработан на нескольких языках, таких как Python и AspectJ .

Конечно, любая программа может быть использована в качестве упражнения для проектирования, но KWIC и Spacewar являются примерами, где вы можете рассмотреть несколько альтернатив.

Макнейл
источник
Re: Ваше разъяснение ... Я говорю в основном об уровне дизайна доски здесь. Но стоит также докопаться и до уровня кода, поскольку вы можете понять, что многие из ваших дизайнерских решений имеют недостатки, которые значительно затрудняют их выражение.
Макнейл
1

Я слышал, что такие вещи называются «программирование катас». Ката - это термин боевых искусств для формы или последовательности движений, которые практикуются снова и снова до совершенства. Поищите каты на вашем языке, и я готов поспорить, что вы что-то найдёте. :)

Джош Эрл
источник
1

Я согласен, что Катас и Эйлер хороши для разработки алгоритмов и практики кодирования - возможно, вы сможете расширить их, проявить немного творчества и разработать систему для решения одной из проблем.

Например, я работаю не только над решением проблем Эйлера, чтобы найти самый быстрый и кратчайший ответ, но и над их распределением - я хочу настроить ряд узлов Эрланга, чтобы решить одну из проблем. Конечно, это означает, что мне нужно выяснить, как разделить проблему на отдельные порции, и заставить их отчитываться о своем прогрессе и объединять результаты вместе (все в пределах функционального языка, в котором я не эксперт).

Возможно, вы можете спроектировать систему, основанную на решении одной из этих проблем, в качестве бизнес-решения - как вы можете сделать так, чтобы несколько «клиентов» могли иметь доступ к вашей проблеме за один раз, вы можете пройти через процесс взаимодействия между клиентом и уровнем обслуживания , и т.д.

Все дело в том, чтобы быть креативным и получать удовольствие.

Уотсон
источник