Як я повинен спланувати та розпочати проект?


20

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

Чи є стандарт, подібний, при запуску такого проекту, як складання графіків занять і початок з одиничних тестів? Яка хороша умова при плануванні та запуску середнього проекту.

Останній проект і розпочатий був симулятором руху снаряду - я знаю, передбачуваний.


Виберіть дизайн і дотримуйтесь його. Схоже, ви знаходите причини змінити дизайн.
Рамхаунд

Чи пов’язане ваше питання з аспектом дизайну проекту чи тим, що ви заперечуєте над змінами та зміною всього обсягу проекту?
Ім'я

2
@Ramhound: "Виберіть дизайн та дотримуйтесь його" працює чудово, доки ви вибираєте дизайн після написання та тестування коду.
кевін клайн

Можливо, я підберу трохи прочитання моделей дизайну та дизайну ОО. Це мені допомогло. Якщо, як я вважаю, ви початківець, то я рекомендував би шаблони дизайну Head First
Даррен Янг

Відповіді:


19

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

Коли ви запускаєте проект, лише кодуйте абсолютний мінімальний функціонал. Коли ви кодуєте це, переконайтеся, що ви пишете хороший, чистий код із розумним інкапсуляцією . Це зведе до мінімуму помилки, які виникають внаслідок внесення змін пізніше.

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

Якщо ви плануєте робити дитячі кроки і писати чистий код, це мінімізує кількість змін, які вам потрібно зробити. До того часу, як ви закінчили писати цю першу функцію, ви повинні прийняти зразки, на яких буде працювати ваша програма. Якщо з цим фундаментом є проблеми, наступні функції повинні швидко розкрити проблему. Буде легше побачити, як деталь інтегрується разом. Внесені вами зміни в цей момент повинні викликати мінімальні збої.


+1: Це відповідь, яку я можу отримати позаду. Плануйте абсолютний мінімум і додайте до плану по мірі необхідності, але додайте мінімум.
Джоел Етертон

Просто, але це спрацювало дуже добре; Спасибі.
Will03uk

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

7

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


2
+1, якщо питання стосується лише невеликих особистих проектів. Часта зміна та перезапис коду для цих проектів - також хороший знак: це означає, що розробник замислюється над кращими підходами чи способами вирішення тієї ж проблеми. Що було б проблематично - це писати шалений код і ніколи більше не думати про це.
Арсеній Муренко

4

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

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


3

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


1

http://nathanmarz.com/blog/suffering-oriented-programming.html

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


1

У розробці програми є два аспекти. Перший - вирішити, що саме може зробити ваша програма. Друга - це розробка способів зробити це. Зміни в тому, що він робить, є досить істотними, і залежно від зрілості програми (і зрушення в напрямку програми) найкраще підходити як перезапис, а не повторна робота.

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

Я дам пораду, яку я давав знову і знову. Виберіть проект для домашніх тварин. Напишіть це найкращим чином. Дізнайтеся щось нове, і застосуйте те, що ви навчились, щоб покращити підхід до розробки цього проекту.

Наприклад, почніть зі списку Todo. Зробити це просто ... спочатку навіть не турбуйтеся про зберігання бази даних. Просто працюй. Тепер почніть будувати на цьому фундаменті. Можливо, ви хочете вивчити MVVM та WPF ... ви вже знаєте, як реалізувати список пам'яті todo в пам'яті, тож у вас є одна проблема, яку потрібно вирішити. Тепер ви хочете зробити це там, де кілька користувачів можуть завантажувати свої списки todo з бази даних. Ви вирішили в пам'яті та роздільній презентації, тому ви можете зосередитись на навчанні доступу до даних. Звідти ви можете розширити додаток, щоб мати складнішу модель домену (наприклад, змінити зі списку Todo на рішення для управління проектами), веб-інтерфейс або навіть зробити його запуском на мобільному пристрої. Ключовим моментом для цієї роботи є вибір того, що ви виконаєте, для чого зможете відзначити прогрес і на якому ви зможете зростати з часом.


0

На мій досвід, розробка системи часто займає стільки ж часу чи довше, ніж фактичне кодування. Коли ви говорите "планування заздалегідь", що ви насправді плануєте? Можливо, перейдіть на стару школу і скористайтеся однією з перевірених методологій проектування. Або піти в стару школу і написати псевдо-код, перш ніж писати фактичний код.

Я думаю, що ви повинні запитати себе, чому ви змінюєте речі у вирішальні моменти, а не дотримуватися оригінального плану. Чи був початковий план хибним? Або у вас був проникливий момент, який показав кращий спосіб робити справи. Це було насправді краще чи просто інше?


0

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


0

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

Іншими словами, коли ви починаєте, не розробляйте нічого! .

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

Отже, список бажань + основні пріоритети = Вимоги .

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

Тобто: ЗАРАЗ ви отримуєте бажання закликати дизайнерів .

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

Крикни хаос, хай ковзають собаки ... Код !!

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

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


0

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

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

  • стислий простий англійський текст.
  • "Керована ціллю" працює найкраще, тобто "Мавпа отримує виноград" краще, ніж "Мавпа натискає червону кнопку".
  • заборонити технічну термінологію. Ніяких "витягувань", "текстових полів". Добрий випадок використання повинен бути незалежним від будь-якої технології інтерфейсу. Ви повинні мати можливість прийняти кейс використання для системи на базі HTML і використовувати його для голосово активованої системи без змін у самій справі використання. (це дуже важко зробити, але варто!).
  • Намагайтеся зменшити кількість слів першого вашої чернетки на 50%, позбудьтесь зайвих кроків та багатослівностей.

Після чого ви готові вказати свої основні класи:

UML - універсальна мова моделювання. Є стандартним інструментом для проектування класів. Ви вказуєте публічних членів та методи кожного класу та з'єднуєте їх у чітку стисну графічну модель.

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


0

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

У випадку, якщо ви все-таки повернетесь до квадратного місця, все не втрачено, оскільки ви набули досвіду.

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

Раніше я працював, роблячи речі швидко з року в рік, а потім одного разу зрозумів, що стаю непомітним у своєму наборі навичок.

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