Я обычно анализирую данные экспериментов и, хотя у меня есть общая схема шагов, которые мне нужно сделать, мне может потребоваться настроить ее под конкретные условия экспериментов или вопросы, стоящие за ними. Я обычно единственный, кто кодирует.
Я посмотрел википедию, но я не уверен, какую методологию я могу использовать, частично потому, что я никогда не следовал ни одной, а частично потому, что иногда я просто изучаю данные, чтобы посмотреть, как они выглядят, а иногда я просто хочу получить ответ. (И потому, что я не очень-то должен тестировать или иметь определенное качество в моем коде)
Мне предложили задать этот вопрос через час или два, когда я обнаружил, что функция r table
зависит от порядка векторов, а не от имени элементов, с которыми их сравнивать. Тогда я подумал, что должен был протестировать поведение и функции, которые я использовал, с некоторыми фиктивными данными. Но я использовал таблицу после того, как другой анализ привел к нехватке информации, поэтому я не мог следовать методологии разработки, основанной на тестировании (если я правильно понял). Тем не менее, я чувствую, что с некоторыми улучшениями в моем отношении к проекту я мог бы быть более эффективным, кроме выявления ошибок раньше, а также того, как и что искать в случае, если я сомневаюсь в результате, поэтому, пожалуйста, не сосредотачивайтесь только на этот пример ошибка.
Какая методология программного обеспечения лучше всего подходит для исследований?
Я в основном спрашиваю, как обеспечить качество и своевременный прогресс, а также сохранить специфику исследований.
Пример того, как я работаю:
Биолог имеет в виду вопрос и знает, что проведение эксперимента приведет к получению данных, представляющих интерес (т. Е. Уровней экспрессии генов в двух условиях), затем он / он устанавливает эксперимент и вспоминает образцы от 10 человек / мышей / крыс. Теперь я должен проанализировать эти данные для этих 10 образцов, используя существующие библиотеки и тесты (или внедряя новые тесты), но принимая во внимание вопрос, который имел в виду биолог (т.е. какие гены более выражены в одном состоянии, чем в другом). Структура такая же, как в предыдущих экспериментах (в которых участвовало 6 условий и другое животное), но статистический тест, нормализация, структура данных могут измениться. Поэтому я обычно копирую предыдущую версию и адаптирую ее к текущим потребностям.
Ответы:
Возможно, нужна не методология программного обеспечения, а политические изменения в научных кругах, которые решают проблему непризнания роли, которую играет разработка программного обеспечения в науке.
Институт программного обеспечения в области устойчивого развития (Великобритания) является организацией , ближе всего к тому , что вы ищете: как доводы в пользу более добросовестного использования компьютерных программ в области научных исследований.
Он также предоставляет информационные указатели для тех, кто интересуется методологиями разработки программного обеспечения.
Однако я должен отметить, что методологии обычно управляют командами программистов с итерациями и постепенным уточнением целей проекта и работают со стабильными базами кода, которые длятся долго. Они предназначены для проектов, которые на порядок сложнее, чем вы делаете.
Относительно того, почему эта совершенно очевидно правильная вещь (более добросовестное использование компьютерного программирования в научных исследованиях) не была достигнута и всегда поддерживается, вот неудобная истина: в академической административной среде можно увидеть, как ученые умаляют значение, которое играет компьютер программирование. Иногда можно увидеть, что они объединяются, чтобы отрицать признание вклада людей, участвующих в программном обеспечении, даже если природа этого вклада соответствует научной дисциплине.
На вашем рабочем месте есть вещи, которых не хватало, и вещи, которые вы можете сделать.
Вещи, которые пропали без вести:
Короче говоря, общая культура такова, что вовлеченные люди на самом деле не заинтересованы в ... как вы уже догадались ... более добросовестном использовании компьютерного программирования в научных исследованиях.
Что вы можете сделать:
Для разработчиков программного обеспечения карьеры руководящие принципы этого характера могут быть найдены в:
Они считаются основными требованиями для ведения бизнеса по разработке программного обеспечения. Однако, когда вы ведете войну апатии, вам нужно расставлять приоритеты. Улучшение работы с инструментами, запись и ведение информации, хранение версий исходного кода - это минимум для единственной среды.
источник
Не беспокойтесь о методологии, а попытайтесь сосредоточиться на том, что вам нужно отслеживать, на ваших требованиях к самой разработке программного обеспечения.
Пройдя недолгое пребывание в положении, относительно похожем на ваше, я могу извлечь из своего личного опыта.
Алгоритмическая точность
Вероятно, самый важный аспект, вы должны быть в состоянии доказать, что ваше программное обеспечение делает то, для чего оно было разработано. Здесь автоматическое тестирование - ваш лучший союзник. Я понимаю, что без правильного набора данных может быть трудно обойтись, но на самом деле вы должны выработать привычку создавать свои собственные наборы данных. Однако их назначение несколько иное: вы не пытаетесь извлечь тенденцию из данных, но убедитесь, что программное обеспечение дает предсказуемые и правильные результаты из известного набора данных. Так, например, для распознавания образов вам не нужен генетический состав нескольких гигабайт, достаточно нескольких строк текста, чтобы алгоритм обнаружил образец.
Я использовал для обработки своих данных, чтобы представлять угловые случаи, невозможные случаи. Я имел тенденцию сосредотачиваться больше на крайностях, чем на ожидаемой норме. Много раз я помню, как тестировал что-то невозможное, только чтобы увидеть, как эта ситуация возникает в реальном наборе данных. Если бы я не проверил это, я бы не стал обнаруживать и регистрировать ошибки, необходимые для выявления потенциальных повреждений или ошибок в наборе данных. TDD хорошо подходит для этой части, хотя создание хорошего тестового набора, я думаю, более важно, независимо от того, делаете ли вы это до или после реального кода.
Versioning
Слишком часто эта часть не учитывается. Хорошая схема управления версиями для вашего кода и созданных пакетов / исполняемых файлов поможет в огромной степени поддерживать ваш прогресс в порядке. Чтобы выявлять ошибки или несоответствия, может помочь восстановление именно того кода, который использовался для создания ранее полученных результатов. Ветвление также может помочь при экспериментировании с различными подходами или алгоритмами.
Убедитесь, что вы пометили код, используемый в реальных вычислениях. Проверьте семантическое управление версиями, если вам нужна помощь в именовании версий.
Автоматизированная сборка
Следствие к пункту выше. Убедитесь, что вы максимально автоматизировали процесс сборки и упаковки вашего программного обеспечения. Вам не нужно идти полным ходом, просто достаточно сделать тривиальное создание окончательной системы из исходного кода и зависимостей. Цель здесь - сэкономить ваше время, а также получить воспроизводимое средство для воссоздания программного обеспечения из источника, включая зависимости и другие внешние факторы. Groovy, Maven, ant, Scons, cmake - это лишь небольшой пример инструментов автоматизации сборки и систем сценариев, которые могут помочь.
Если вы хотите пройти лишнюю милю, установите Jenkins или teamcity или любую другую систему непрерывной интеграции. Дополнительный бонус, если вам нужно поддерживать несколько серверов или рабочих для распределенных вычислений. Большинство из этих систем будут иметь средства, чтобы помочь в обслуживании. Кроме того, вы сможете полностью автоматизировать тестовые прогоны, поэтому вам не нужно ждать результатов, прежде чем продолжить, просто зафиксируйте и получите письмо позже. У меня была система, которая занимала часы, чтобы пройти тестовые наборы. Установка этой автоматизации была лучшей инвестицией моего времени. Особенно, если у вас уже есть сценарии для сборки всего.
Изоляция окружающей среды
Исследователи проводят непомерное количество времени, изолируя один или малый набор переменных, представляющих интерес, от сложных систем через их протоколы. Это также должно быть распространено на ваши практики разработки программного обеспечения. Вы также можете проверить контейнеризацию с помощью Docker или Vagrant. Это даст вам лучший контроль над средой, в которой работает программное обеспечение.
Вам не нужно иметь большую команду, пока это не окупится, я большую часть времени был один, но мне очень помогло это сделать. Душевное спокойствие и время спасли его, при условии, что они значительно перевесят накладные расходы, которые мне стоило это сделать.
источник
Вы можете использовать R? Вот для чего это.
Сохраняйте свой код простым . Пойдите для удобочитаемости, и не беспокойтесь о производительности, если это не проблема. Существуют методологии, позволяющие командам программистов не допускать ошибок в коде друг друга, даже если команда состоит из одного человека.
Тем не менее, дисциплина кодирования очень важна. Я видел код от высококвалифицированных продвинутых ученых и математиков, и это ужасно . Они полностью игнорируют форматирование. Они сжимают код вместе, как будто он упакован в вакууме. Их имена переменных полностью загадочны. Они не пишут комментарии, или они пишут непостижимые комментарии, или комментарии говорят одно, а код - другое. Не делай таких вещей. Всегда думайте о будущих изменениях, которые вы или другие, возможно, должны будете внести.
источник