Каковы полезные стратегии для принятия, когда у вас или проекта нет четкого представления о том, какой конечный (если есть) продукт будет?
Возьмем "исследование", чтобы означать исследование в области, где многие вещи не известны или не реализованы, и где формальный набор результатов не может быть указан в начале проекта. Это распространено в STEM (наука (физика, химия, биология, материалы и т.д.), Технология, медицина) и многие области информатики и информатики. Программное обеспечение создается как самоцель (например, новый алгоритм), средство управления данными (часто экспериментальное) и симуляция (например, материалы, реакции и т.д.). Обычно он создается небольшими группами или отдельными лицами (я опускаю большую науку, такую как телескопы и адронные коллайдеры, где большое внимание уделяется разработке программного обеспечения.)
Исследование программного обеспечения характеризуется (по крайней мере):
- неизвестный результат
- неизвестная шкала времени
- небольшое формальное управление проектами.
- ограниченные бюджеты (по крайней мере, в академических кругах)
- непредсказуемость сторонних инструментов и библиотек
- изменения во внешнем мире во время проекта (например, новые открытия, которые могут быть положительными - сэкономить усилия - или отрицательные - получать зачерпнутые
Проекты могут быть любыми, начиная с дней ( "см., если это целесообразное направление" ) до лет ( "это моя тема PhD" ) или дольше. Часто люди не нанимаются как люди, работающие по программному обеспечению, но находят, что им нужно написать код, чтобы получить исследование или заразиться, написав программное обеспечение. Как правило, мало хорошего для разработки программного обеспечения - "продукт" является конференцией или журнальной публикацией.
Однако некоторые из этих проектов оказываются очень ценными - наиболее очевидной областью является геномика, где в первые дни ученые показали, что динамическое программирование является революционным инструментом, помогающим думать о белковой и нуклеарной структуре - теперь это мульти- (или более). То же самое верно для кодов квантовой механики для прогнозирования свойств веществ.
Недостатком является то, что много кода выбрасывается, и его сложно построить. Чтобы попытаться преодолеть это, мы создаем библиотеки, которые совместно используются в группе, а через мир - как Open Source (но здесь также очень мало кредитов). Многие исследователи изобретают колесо ( "голова-вниз" ), где коллеги не консультируются и программируют "герой", где кто-то пытается сам сделать сам).
Слишком большая формальность в начале проекта часто отбрасывает людей и теряется инновация (никто не будет тратить 2 месяца на официальные спецификации и модульные тесты). Слишком маленькие и плохие привычки разрабатываются и обнародуются. Курсы программирования помогают, но снова трудно заставить людей делать это, особенно когда вы полагаетесь на их добрую волю. Менторинг чрезвычайно ценен, но не всегда успешным.
Есть ли онлайн-ресурсы, которые могут помочь убедить людей в хороших привычках программного обеспечения?
EDIT: Я благодарен dmckee (ниже) за то, что он указал на аналогичное обсуждение. Все это хорошо, и я особенно согласен с контролем версий как одной из самых важных вещей, которые мы можем предложить ученым (мы предложили это нашим коллегам и получили очень хороший прием). Мне также нравится подход к курсу Software Carpentry, упомянутому там.