Правильное сочетание планирования и программирования нового проекта

10

Я собираюсь начать новый проект (игра, но это неважно). Основная идея в моей голове, но не все детали.

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

То, что я ищу, - это способ объединения обоих без доминирования одного над другим. Должен ли я реализовать проект в стиле Scrum? Должен ли я создавать пользовательские истории, а затем реализовывать их? Должен ли я работать на основе функций? (У меня есть некоторый опыт в scrum и классическом подходе «спецификация к коду».)

Обновление : как насчет того, чтобы начать с «пустышки» и реализовать эту функцию позже?

WarrenFaith
источник

Ответы:

5

Вы на правильном пути. Нет необходимости тратить месяцы на планирование, но у вас обязательно должен быть какой-то план.

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

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

jmort253
источник
Платформа таргетинга - это моя ежедневная работа, поэтому я знаю большинство технологий, которые хочу использовать. Я предполагаю, что я буду использовать простую схватку и основной план. Поэтому я могу начать с некоторых задержек и планировать каждую итерацию.
WarrenFaith
Вы продолжаете писать «планирование» неправильно. Просто подумал, что укажу на это, поскольку я не могу отредактировать ваш комментарий :) Но да, я думаю, что scrum - это отличный подход, он поддерживает гибкость и дает вам возможность решить, стоит ли даже усилий продолжать проект.
jmort253
Оо В немецком языке все наоборот: планирование с одним n и программирование с двумя m ...: D Спасибо!
WarrenFaith
@WarrenFaith - Извините! Это мой этноцентризм выходит! Спасибо за указание на мою ошибку;)
jmort253
11

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

Стивен А. Лоу
источник
3
.... и каждый раз, когда у вас появляется идея для чего-то, что, по вашему мнению, было бы круто, просто запишите эту идею в список невыполненных заданий, но не реализуйте ее до тех пор, пока не будет достигнут минимально жизнеспособный продукт.
k3b
главный вопрос по-прежнему заключается в том, насколько я должен планировать это. Если бы вы тоже могли дать мне этот совет, вы приняли ответ.
WarrenFaith
1
@WarrenFaith: особенности - >> истории - >> контрольные примеры.
Стивен А. Лоу
4

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

Нужно понимать, что рефакторинг - это нормальная часть разработки, и это просто вопрос принятия решения, когда вы это сделаете. Подождите долго, и вы получите огромное количество спагетти, прося полное переписать. Не смешно.

Я предлагаю немного спланировать, но приступить к написанию кода как можно скорее и рефакторинга, рефакторинга, рефакторинга, чтобы сохранить код в форме. СУХОЙ принцип (не повторяйся) - отличный индикатор для этого.

Мартин Викман
источник
Спасибо за ответ. Я знаю, что в рефакторинге нет ничего необычного, но я не хочу предотвращать рефакторинг, вызванный пропущенным планированием.
WarrenFaith
@Warren - неспособность планировать не мешает рефакторингу. Вы можете либо закодировать решение на компьютере, либо попытаться закодировать его в своей голове или на бумаге. Я думаю, что оба из них неэффективны. Начните кодировать, зная, что вы измените его позже.
Кевин Клайн
@kevin cline: Хорошо, давайте сделаем разницу между рефакторингом существующего кода для новой функции или улучшений и переписать почти все приложение для новой функции. Я могу жить с первым, а не со вторым ..
WarrenFaith
@WarrenFaith: до тех пор, пока код плотный и в форме, вы должны избегать переписываний. Единственное время, которое я видел, переписывает, это когда система превращается в большой шарик грязи (без рефакторинга) или фундаментальных технических изменений (смена платформы).
Мартин Уикман,
3

Когда я нахожусь в этом положении, я иногда использую TDD (разработку через тестирование) и начинаю планировать некоторые тесты для наиболее сложной части системы, которую я разрабатываю. В качестве альтернативы я могу собрать псевдокод высокого уровня, опять же для самых сложных областей. Я считаю, что этот процесс дает мне свободный план действий и помогает мне определить, какие области, вероятно, будут наиболее трудоемкими.

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

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

Подводя итог более кратко, можно сказать, «сначала займись самым сложным, разделяй и властвуй с помощью псевдокода и / или планов TDD»!

BradB
источник
Я не фанат TDD, но все равно спасибо!
WarrenFaith
Я не обязательно говорю об использовании TDD, я хотел сказать, что это то, что я использую как структуру для «планирования» своего кода. Таким образом, я не буду прыгать прямо в написании своего кода и не буду тратить много времени на написание массовых документов / планов проектов, которые слишком далеки от реального кодирования. Речь идет о поиске счастливой среды. Вы можете добиться того же самого в принципе с ручкой и бумагой. Я также должен отметить, что я не пишу тест для ВСЕГО - только для более сложных областей.
BradB
3

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

davidk01
источник
2

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

Кеннет
источник