Де я можу знайти дизайнерські вправи, над якими можна працювати? [зачинено]


16

Я вважаю, що важливо продовжувати практикувати свої навички вирішення проблем. Створення власних міні-проектів - це один із способів, але інший - спробувати вирішити проблеми, розміщені в Інтернеті. В Інтернеті легко знайти цікаві вікторини з програмування, які потребують застосування розумних алгоритмів для вирішення - Project Euler - один з відомих прикладів.

Однак у багатьох реальних проектах дизайн програмного забезпечення - особливо на початкових етапах - має великий вплив, і на пізніших етапах його неможливо налагодити так легко, як звичайні алгоритми. Для вдосконалення цих навичок я шукаю будь-яку колекцію дизайнерських проблем.

Коли я кажу "дизайн", я маю на увазі абстрактне проектування програмного рішення - наприклад, які модулі будуть і які залежності між ними, як будуть надходити дані в програму, які дані потрібно зберігати в бази даних тощо. Проблеми з дизайном - це ті проблеми, які вирішувати вирішально на ранніх стадіях будь-якого проекту, але їх рішення - це діаграма дошки без єдиного рядка коду.

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


Відповіді:


7

Як щодо Code Kata . Я зробив декілька з них, і їх цікаво робити, і досить складно, що завжди є чому навчитися.

У коментарях до кожної з ката зазвичай є достатньо інформації, щоб допомогти відповісти на все, що ви застрягли.


Перша, безумовно, проблема дизайну, але я мав відчуття, що інші набагато більш орієнтовані на код. Я ще подивлюся, дякую!
Дуб

3

Почніть з до класичної проблеми проектування: KWIC.

Девід Парнас використав KWIC як приклад у своєму класичному документі про модульність: про критерії , які слід використовувати у розкладанні систем на модулі , які, мабуть, кожен повинен прочитати кожні 10 років.

KWIC для ключового слова в контексті - це проста проблема індексації та сортування, коли ви читаєте в текстових рядках, а потім обертаєте кожен рядок на основі ключових слів (наприклад, виключаючи "the", "with"), додаючи кожен зсув до a список ви потім сортувати. Ідея полягає в тому, що використання KWIC було б корисно для створення індексу для книги. Під час своєї класичної роботи Парнас сказав, що досвідчений програміст може вирішити це за один-два тижні, але Закон Янніса стверджує, що зараз це можна зробити за одну-дві години . [Операційні системи та стандартні бібліотеки значно покращилися.]

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

Дізнавшись приклад KWIC, ви зможете оцінити інші проектні документи, які його використовують. Наприклад, у роботі Майкла ВанХільста «Розв’язання змін змін від дизайну» використовується для показу дійсно цікавої техніки дизайну за допомогою шаблонів C ++. І, поки ми говоримо про шаблони та дизайн C ++, читайте документ Czarnecki та Eisenecker " Об'єкти синтезування об'єктів" .

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

Звичайно, будь-яка програма може бути використана як конструкторська вправа, але KWIC та Spacewar - приклади, де можна переглянути кілька альтернатив.


Re: Ваше уточнення ... Я тут говорю переважно про рівень дизайну на дошці. Але варто також перекопатися до рівня коду, оскільки ви можете усвідомити, що багато ваших дизайнерських рішень мають недоліки, які ускладнюють їх вираження.
Macneil

1

Я чув подібне, що називається "програмування ката". Ката - термін бойових мистецтв для форми або послідовності рухів, які практикуються знову і знову до вдосконалення. Виконайте кілька пошуків катав на вашій мові, що вибираєте, і я думаю, що ви щось з’явите. :)


1

Я погоджуюсь, що Катас та Ейлер приємно розробляти алгоритми та практикувати кодування - можливо, ви можете розширити їх і проявити трохи творчості та створити систему навколо однієї з проблем.

Наприклад, я працюю над не просто вирішенням проблем Ейлера, щоб знайти найшвидшу, найкоротшу відповідь, а вирішувати їх розподіленим способом - я хочу створити ряд вузлів Ерланг, щоб вирішити одну з проблем. Звичайно, це означає, що я повинен розібратися, як розділити проблему на дискретні шматки, і змусити їх звітувати про свій прогрес та збирати результати разом (усе в рамках функціональної мови, в якому я не є експертом).

Можливо, ви можете спроектувати систему навколо вирішення однієї з цих проблем як бізнес-рішення - як зробити так, щоб декілька "клієнтів" могли отримати доступ до вашої проблеми за один раз, ви можете перейти до проектування взаємодій клієнтського та службового рівня. тощо.

Вся справа в тому, щоб бути творчими та веселитися.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.