2009-06-11 6 views
12

Когда вы начинаете новый проект, как вы его планируете или как долго это займет?Сколько вы планируете, прежде чем начинать код?

Pseudocode? Блок-схемы?

Вы пытаетесь задуматься обо всех классах заранее?

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

+0

Duplicate: http://stackoverflow.com/questions/44254/how-do-you-plan-small-work-or-hobby-projects – gnovice

ответ

16

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

Они обычно следуют следующей структуре:

  1. Создать краткий поэтому у меня есть цель в виде.
  2. Внесите class diagram, чтобы понять, с какими данными я буду иметь дело.
  3. Внедрение всех классов.
  4. Составите use-case diagram, чтобы наброски видов деятельности.
  5. Экранируйте схему использования (в HTML для webapps)
  6. Проводка леса, путем проведения модульных испытаний и строительства для их передачи.
  7. Примите решение о выпуске продукта для коммерческого успеха, а затем забудьте обо всем этом.
11

МНОГО меньше, чем я должен

Я всегда нырять, пачкаются, а потом понимаешь, что я напутал. Затем вернитесь и спланируйте, и сделайте это правильно.

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

Редактировать я в основном попадают в такого рода разбить клавиатуру столовых при игре с большим/комплексом. Интересно посмотреть, как далеко доходят вещи, прежде чем вы поймете, что ваш дизайн «у меня в голове, так что это нормально» на 100% испорчен.

+0

Теперь я планирую. Он работает лучше. –

1

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

1

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

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

6

Возможно, не самая лучшая техника ... но ... Я планирую код.

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

Кроме того, я напишу заметки, в которых подробно описаны «основные функции» и «объекты-малые/пожелания».

+0

Я думаю, что у этого есть преимущества, чем раньше вы напишете код, тем скорее вы узнаете ошибки дизайна ... –

+2

@Liran Я бы сказал, что чем скорее вы напишете, тем позже вы узнаете ошибки и будете иметь рефакторинг соответственно (или, скорее всего, не сдаваться/начинать с нуля) – Matt

0

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

3

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

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

Однако, если это простое кодирование.Я, как правило, просто пишу, что у меня на уме и проверить.

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

Это мое мнение.

1

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

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

1

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

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

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

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

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

1

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

1

Лично это зависит от области & сложность проекта, количество людей, с которыми я работаю, и общие ожидания при доставке.

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

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

1

Я заварил кофе и ремесло пару сэндвичей.

Действительно, это зависит от проекта. Я работал над некоторыми проектами в оборонной промышленности, которые занимали 2 года подробного планирования, прежде чем писать одну строку кода, и я сел и выпустил несколько небольших утилит из нескольких запросов в электронном письме из 3D или художник текстуры в одном сидении с мешком с кренделями и чашкой Джо.

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

Единственное, что вы действительно должны убедиться в том, что у вас есть адекватное понимание проблемной области. Если нет, потратить время на исследование, пока вы это сделаете, всегда стоит того времени.

3

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

  1. Встречайте и все участники с проектом
  2. принимать обильное примечания относительно предполагаемых требований
  3. создают длинные маркированные списки требований высокого уровня
  4. старт для разбивки требований высокого уровня на четко определенные детали
  5. начинают заполнять Требования к программному обеспечению Специфическое слово шаблон: SRS
  6. cre поел проволочные рамки в фотошопе, первенствует, или (мой любимый) Balsamiq
  7. список из данных, которые должны быть захвачены и начать строить из грубой Schema
  8. список из класса структур в UML
  9. определяют проект график
  10. blah blah blah
  11. написать код
  12. надежды на то, что было запрошено, что еще нужно, когда код завершен!

В течение последних нескольких лет я следил за Agile (SCRUM) и принял совершенно другой подход.

  1. встретиться с владельцем продукта, чтобы услышать о задачах, которые будут построены
  2. разлагаются историю на задачи (основное планирование)
  3. Назначьте время для задач
  4. сделать некоторые более детальное планирование
  5. -> записи тест, написать код для сдачи теста, рефакторинг -> проверка танца
  6. демонстрирует рабочий продукт/функцию
  7. начало процесса

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

Имейте в виду, что есть время и место для обоих способов развития. Я бы не хотел создавать программное обеспечение Jet с помощью Agile!

0

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

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

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

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

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

Я использовал только блок-схему , чтобы помочь в разработке программы - назад, когда я изучал сборку и был совершенно новым для программирования (и это было полезно). Mythical Man-Month говорит следующее: «Однако подробный блок-схема« поистине-удар »- это устаревшая неприятность, подходящая только для инициации новичков в алгоритмическое мышление ... Я никогда не видел опытного программиста, который обычно прежде чем начать писать программы ».

1

IMO 5 минут планирования вперед = 1 час кодирования ....

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

Самой важной частью должен быть FLOWCHART.

Другие детали иногда могут быть учтены на лету.

0

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

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