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


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.