Практики программирования в научной среде? [закрыто]

91

Задний план

В прошлом году я проходил стажировку в исследовательской группе по физике в университете. В этой группе мы в основном использовали LabVIEW для написания программ для управления нашими настройками, сбора данных и анализа наших данных. Для первых двух целей это работает нормально, но для анализа данных это настоящая боль. Вдобавок ко всему, все в основном были самоучками, поэтому написанный код, как правило, был довольно беспорядочным (неудивительно, что каждый доктор философии быстро решил все переписать с нуля). Контроль версий был неизвестен, и его невозможно было настроить из-за строгих правил программного обеспечения и сети со стороны ИТ-отдела.

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

Вопросы

Некоторые конкретные вопросы:

  • Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно для анализа данных? Какие библиотеки? (например, что вы используете для черчения?)
  • Было ли обучение для людей без значительного опыта в программировании?
  • Было ли у вас что-нибудь вроде контроля версий и отслеживания ошибок?
  • Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

Резюме ответов на данный момент

Ответы (или моя интерпретация их) на данный момент: (2008-10-11)

  • Языки / пакеты, которые кажутся наиболее широко используемыми:
    • LabVIEW
    • Python
      • с SciPy , NumPy , PyLab и т. д. (см. также ответ Брэндона для загрузки и ссылок)
    • C / C ++
    • MATLAB
  • Контроль версий используется почти всеми респондентами; отслеживание ошибок и другие процессы встречаются гораздо реже.
  • Курс Software Carpentry - хороший способ научить ученых методам программирования и разработки.
  • Как улучшить ситуацию?
    • Не заставляйте людей соблюдать строгие протоколы.
    • Создайте среду самостоятельно и покажите пользу другим. Помогите им самостоятельно начать работу с контролем версий, отслеживанием ошибок и т. Д.
    • Обзор чужого кода может помочь, но имейте в виду, что не все это оценят.
onnodb
источник
2
связанное чтение: nature.com/news/2010/101013/full/467775a.html
Тобиас Кинцлер,

Ответы:

27

Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

Раньше я работал на Enthought , главного корпоративного спонсора SciPy . Мы сотрудничали с учеными из компаний, заключивших контракт с Enthought на разработку программного обеспечения на заказ. Python / SciPy казались удобной средой для ученых. Начать работать с ним гораздо менее пугающе, чем, скажем, с C ++ или Java, если вы ученый без опыта работы с программным обеспечением.

В дистрибутив Enthought Python входят все библиотеки для научных вычислений, включая анализ, построение графиков, трехмерную визуализацию и т. Д.

Было ли обучение для людей без значительного опыта в программировании?

Enthought действительно предлагает обучение SciPy, и сообщество SciPy довольно хорошо отвечает на вопросы в списках рассылки.

У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

Да и да (Subversion и Trac). Поскольку мы работали совместно с учеными (и обычно удаленно от них), контроль версий и отслеживание ошибок были важны. Потребовалось некоторое обучение, чтобы научить некоторых ученых усвоить преимущества контроля версий.

Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

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

Брэндон Дюретт
источник
21

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

Он охватывает такие темы, как контроль версий, отладка, тестирование, создание сценариев и различные другие вопросы.

Я прослушал около 8 или 9 лекций и считаю, что их стоит очень рекомендовать.

Изменить: также доступны MP3-файлы лекций .

кайбенлеролл
источник
16

Ядерная физика / физика элементарных частиц здесь.

  • Основная работа по программированию раньше выполнялась в основном на Фортране с использованием CERNLIB (PAW, MINUIT, ...) и GEANT3 , в последнее время в основном это выполнялось на C ++ с ROOT и Geant4 . Существует ряд других библиотек и инструментов, которые используются специализированно, и LabVIEW находит их применение здесь и там.
  • Сбор данных в моем конце этого бизнеса часто означал довольно низкую работу. Часто в C, иногда даже в сборке, но это умирает по мере того, как оборудование становится более функциональным. С другой стороны, многие платы теперь построены на ПЛИС, которые нуждаются в поворотах ...
  • Одноразовые, графические интерфейсы и т. Д. Используют почти все ( Tcl / Tk раньше были большими, а в последнее время я видел больше Perl / Tk и Python / Tk), включая ряд пакетов, которые существуют в основном внутри сообщества физиков элементарных частиц .
  • Многие люди, пишущие код, практически не имеют формального обучения, и устные традиции передают процесс очень неравномерно, но большинство руководителей программных групп серьезно относятся к процессу и читают столько, сколько необходимо, чтобы восполнить свои недостатки в этой области.
  • Контроль версий основных инструментов повсеместен. Но многие индивидуальные программисты пренебрегают им для решения своих более мелких задач. Менее распространены формальные инструменты отслеживания ошибок, такие как ночные сборки, модульное тестирование и регрессионные тесты.

Чтобы улучшить ситуацию:

  1. Станьте на сторону местных лидеров программного обеспечения
  2. Внедрите процесс, который вы хотите использовать, в своей области и поощряйте тех, кого вы позволяете, также использовать его.
  3. Подождите. Физики - люди эмпирические. Если это поможет, они (в конце концов!) Заметят.

Еще одно предложение по улучшению вещей.

  1. Потратьте немного времени на то, чтобы помочь любому, с кем вы работаете напрямую. Просмотрите их код. Расскажите им об алгоритмической сложности / генерации кода / DRY или о том, что они так и не узнали, потому что какой-то профессор однажды бросил в них книгу по Фортрану и сказал: «Сделайте так, чтобы это работало». Обучайте их по вопросам процесса. Они умные люди, и они будут учиться, если вы дадите им шанс.
dmckee --- котенок экс-модератора
источник
11

Это может быть немного косвенным, но, надеюсь, актуальным.

Раньше я работал в отделе исследований и разработок National Instruments, где писал программное обеспечение для наборов инструментов NI RF & Communication. Мы довольно часто использовали LabVIEW, и вот методы, которым мы следовали:

  1. Управления источником. NI использует Perforce. Мы занимались обычным делом - ветки dev / trunk, непрерывная интеграция, работа.
  2. Мы написали автоматизированные наборы тестов.
  3. У нас было несколько человек, которые пришли с опытом обработки сигналов и связи. Раньше у нас были регулярные обзоры кода и документы с лучшими практиками, чтобы убедиться, что их код соответствует требованиям.
  4. Несмотря на обзоры кода, было несколько случаев, когда "программистам" вроде меня приходилось переписывать часть этого кода для повышения эффективности.
  5. Я точно знаю, что вы имеете в виду про упрямых людей! У нас были люди, которые раньше думали, что указание на потенциальное улучшение производительности в их коде было прямым личным оскорблением! Само собой разумеется, что это требует хорошего управления. Я подумал, что лучший способ справиться с этими людьми - действовать медленно, не давить на изменения и, если необходимо, быть готовым к грязной работе. [Пример: напишите набор тестов для их кода].
Прамод
источник
9

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

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

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

Крис Апчерч
источник
7

1.) Языки сценариев популярны в наши дни для большинства вещей из-за лучшего оборудования. Perl / Python / Lisp преобладают для легких приложений (автоматизация, легкие вычисления); Я вижу много Perl в своей работе (вычислительная ЭМ), поскольку нам нравится Unix / Linux. Для повышения производительности обычно используются C / C ++ / Fortran. Для параллельных вычислений мы обычно вручную распараллеливаем прогоны в EM, в отличие от того, чтобы программа выполняла это неявно (т.е. разделяла задания по углу обзора при вычислении радиолокационных сечений).

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

3.) Используем SVN; однако у нас нет программного обеспечения для отслеживания ошибок. Примерно так же хорош, как и текстовый файл, который сообщает вам, где находятся конкретные ошибки.

4.) Мое предложение по внедрению лучших практик для ученых: делайте это медленно . Как ученые, мы обычно не отправляем продукцию. Никто в науке не делает себе имя, имея чистый, поддерживаемый код . Обычно они получают признание по результатам этого кода. Им нужно видеть оправдание тратить время на изучение практики программного обеспечения. Медленно вводите новые концепции и пытайтесь заставить их следовать; они ученые, поэтому после того, как их собственные эмпирические данные подтвердят полезность таких вещей, как контроль версий, они начнут использовать его постоянно!

темп2290
источник
6

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

Александр Львович Беликов
источник
5

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

Языки:

  • C ++ - очень универсален: можно использовать для чего угодно, хорошая скорость, но может быть немного неудобно, когда дело касается MPI
  • Octave - хороша для дополнительных вычислений, очень удобна и производительна

Библиотеки:

  • Armadillo / Blitz ++ - быстрые абстракции массивов / матриц / кубов для C ++
  • Эйген / Армадилло - линейная алгебра
  • GSL - для использования с C
  • LAPACK / BLAS / ATLAS - чрезвычайно большой и быстрый, но менее удобный (и написан на FORTRAN)

Графика:

  • GNUPlot - имеет очень чистый и аккуратный вывод, но иногда не такой производительный
  • Origin - очень удобно для черчения

Инструменты разработки:

  • Плагины Vim + - у меня отлично работает
  • GDB - отличный инструмент для отладки при работе с C / C ++
  • Code :: Blocks - Я использовал его некоторое время и нашел его довольно удобным, но, на мой взгляд, Vim все же лучше.
Роман
источник
Если ваш c ++ работает медленнее, чем ваш c, вы используете его неправильно. «Конечно, это легко сделать, но это другое дело. :: работаю с C ++ уже около 7 лет, и все еще учусь чему-то новому ::
dmckee --- котенок экс-модератора
Я действительно большой поклонник C ++, но трудно понять, как он может быть «намного медленнее», чем C или Fortran. Если вы не включили варианты C для HPC, такие как UPC и C для CUDA.
Suugaku
4

Я работаю физиком в британском университете.

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

  • Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

Обычно анализ данных и построение графиков выполняются с использованием общих пакетов анализа данных, таких как IGOR Pro , ORIGIN , Kaleidegraph, которые можно рассматривать как «Excel плюс». Эти пакеты обычно имеют язык сценариев, который можно использовать для автоматизации. Более специализированный анализ может иметь специальную утилиту для работы, которая, как правило, была написана очень давно, ни у кого нет исходного кода, и в ней довольно много ошибок. Некоторые другие технические специалисты могут использовать упомянутые языки (Python, R, MatLab с Gnuplot для построения графиков).

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

  • Было ли обучение для людей без значительного опыта в программировании?

Я был на семинарах по грид-вычислениям, 3D-визуализации, ускорению обучения и т. Д., Проводимых обоими университетами, в которых я был. В бакалавриате нас учили VBA для Excel и MatLab, но C / MatLab / LabVIEW более распространены.

  • У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

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

  • Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

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

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

Брендан
источник
Спасибо, что поделились своими мыслями! Я согласен с тем, что «время обычно лучше тратить на исследования», но, видя, сколько времени часто теряется из-за отсутствия таких вещей, как контроль версий и базовое обучение программированию, я бы сказал, что ученые недооценивают эту проблему.
onnodb,
4

Бывший академик-физик, а теперь физик-промышленник из Великобритании:

Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

В наши дни я в основном использую MATLAB (простой доступ к функциям визуализации и математике). Раньше я много использовал Фортран и IDL . Я использовал C (но я больше читатель, чем писатель C), макросы Excel (уродливые и запутанные). В настоящее время мне нужно уметь читать Java и C ++ (но я действительно не могу программировать на них), и я также взломал Python. Для собственного развлечения я сейчас занимаюсь программированием на C # (в основном для обеспечения переносимости / низкой стоимости / красивых интерфейсов). Я могу писать Fortran практически на любом языке, который мне представлен ;-)

Было ли обучение для людей без значительного опыта в программировании?

В большинстве (всех?) Бакалаврских курсах физики будет небольшой курс программирования, обычно на C, Fortran или MATLAB, но это настоящие основы. Я действительно хотел бы в какой-то момент пройти обучение в области разработки программного обеспечения (контроль версий / тестирование / проектирование систем среднего масштаба)

У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

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

Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

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

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

Ян Хопкинсон
источник
4

Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

Python, NumPy и pylab (построение графиков).

Было ли обучение для людей без значительного опыта в программировании?

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

У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

Да, Subversion для контроля версий, Trac для отслеживания ошибок и вики. Вы можете получить бесплатный хостинг для отслеживания ошибок / контроля версий на сайте http://www.assembla.com/, если их TOS подходят вашему проекту.

Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!).

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

Аарон Маенпаа
источник
3

Я статистик в университете в Великобритании. Обычно люди здесь используют R для анализа данных, его довольно легко изучить, если вы знаете C / Perl. Его реальная сила в том, что вы можете импортировать и изменять данные в интерактивном режиме. Очень легко взять несколько файлов CSV (или Excel) и объединить их, создать новые столбцы на основе других, а затем добавить их в GLM, GAM или другую модель. Построение графиков тоже тривиально и не требует знания совершенно нового языка (например, PGPLOT или GNUPLOT). Конечно, у вас также есть преимущество наличия множества встроенных функций (от простых вещей, таких как среднее значение, стандартное отклонение и т. Д.). путь к нейронным сетям, сплайнам и построению GL.)

Сказав это, есть пара проблем. С очень большими наборами данных R может стать очень медленным (я действительно видел это только с наборами данных> 50 000x30), и, поскольку он интерпретируется, вы не получаете преимущества Fortran / C в этом отношении. Но вы можете (очень легко) заставить R вызывать разделяемые библиотеки C и Fortran (либо из чего-то вроде netlib, либо из тех, что вы написали сами). Итак, обычный рабочий процесс будет заключаться в следующем:

  • Решите, что делать.
  • Прототипируйте код в R.
  • Проведите предварительный анализ.
  • Перепишите медленный код на C или Fortran и вызовите его из R.

Что мне очень нравится.

Я один из немногих в своем отделе (из> 100 человек), использующих контроль версий (в моем случае использую git с githuib.com). Это довольно тревожно, но они, похоже, не хотят его пробовать. out и довольны распространением zip-файлов (фу.)

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

Дэвид Лоуренс Миллер
источник
2

Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

LabVIEW преподавал на физическом факультете моего бакалавриата. классы и широко использовал их в своих исследовательских проектах.

Другая альтернатива - MATLAB , в которой у меня нет опыта. Есть лагеря для любого продукта; у каждого есть свои преимущества / недостатки. В зависимости от того, какие проблемы вам нужно решить, один пакет может быть предпочтительнее другого.

Что касается анализа данных, вы можете использовать любой тип вычислителя чисел. В идеале вы можете выполнять сложные вычисления на языке X и форматировать выходные данные для удобного построения графиков в Excel, Mathcad , Mathematica или в любой другой системе построения графиков. Не ждите здесь стандартизации.

У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

Оглядываясь назад, мы этого не сделали, и нам всем было бы легче, если бы мы это сделали. Нет ничего лучше, чем сломать все и часами бороться за это!

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

Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

Существует четкое разделение между сбором данных (DAQ) и анализом данных. Это означает, что можно стандартизировать DAQ, а затем позволить ученым поиграть с данными в программе по своему выбору.

Дуга дурак
источник
2

Еще один хороший вариант - Scilab . В нем есть графические модули типа LabVIEW , собственный язык программирования, и вы также можете встраивать, например, код Fortran и C. Он используется в государственном и частном секторах, в том числе в крупных промышленных компаниях. И это бесплатно.

Что касается управления версиями, некоторые предпочитают Mercurial , поскольку он дает больше свободы в управлении и определении репозиториев. Однако у меня нет опыта с этим.

Для построения я использую Matplotlib . Скоро мне придется делать анимацию, и я видел хорошие результаты с использованием MEncoder . Вот пример, включающий звуковую дорожку.

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

Вам также следует подумать о разработке с использованием отладчика, который позволяет вам проверять содержимое переменных в устанавливаемых точках останова в коде вместо использования строк печати. Я использовал Eclipse для разработки Python и Fortran (хотя у меня возникла ложная ошибка при компиляции с ним короткой программы Fortran, но, возможно, это была плохая конфигурация), и я начинаю использовать Eric IDE для Python. Он позволяет вам отлаживать, управлять версиями с помощью SVN , у него есть встроенная консоль, он может выполнять рефакторинг с помощью Bicycle Repair Man (он также может использовать другой), у вас есть Unittest и т. Д. Более легкая альтернатива для Python - IDLE , в комплекте с Python, начиная с версии 2.3.

В качестве подсказки я также предлагаю:

  • Без использования односимвольных переменных. Если вы захотите выполнить поиск по внешнему виду, вы получите результаты везде. Некоторые утверждают, что приличная среда IDE делает это проще, но тогда вы будете зависеть от постоянного доступа к среде IDE. Даже использования ii, jj и kk может быть достаточно, хотя этот выбор будет зависеть от вашего языка. (Двойные гласные будут менее полезны, если, например, комментарии к коду будут сделаны на эстонском языке).

  • Комментируем код с самого начала.

  • Для критических приложений иногда лучше полагаться на более старые версии языка / компилятора (основные выпуски), более стабильные и лучше отлаженные. Конечно, у вас может быть более оптимизированный код в более поздних версиях, исправленные ошибки и т.д., но я говорю об использовании Fortran 95 вместо 2003, Python 2.5.4 вместо 3.0 или около того. (Особенно, когда новая версия нарушает обратную совместимость.) Множество улучшений обычно приводят к множеству ошибок. Тем не менее, это будет зависеть от конкретных случаев применения! Обратите внимание, что это личный выбор, многие люди могут возразить против этого.

  • Используйте резервное и автоматическое резервное копирование! (С контролем версий).

Дэвид
источник
2

Определенно, используйте Subversion для сохранения текущих, незавершенных и стабильных моментальных копий исходного кода. Сюда входят C ++, Java и т. Д. Для собственных программных средств и быстрые сценарии для одноразовой обработки.

Учитывая сильную склонность науки и прикладной инженерии к методологии разработки «одиноких ковбоев», обычная практика организации репозитория в виде ствола, тегов и всего остального - не беспокойтесь! Ученые и их лаборанты любят вращать ручки, двигать электроды и искать утечки вакуума. Достаточно работы, чтобы все согласились, скажем, с Python / NumPy или следовали некоторому соглашению об именах; забудьте о попытках заставить их следовать тайным практикам и соглашениям разработчиков программного обеспечения.

DarenW
источник
2

Что касается управления исходным кодом, централизованные системы, такие как Subversion , лучше подходят для научного использования из-за четкой единой точки истины (SPOT). Ведение журнала изменений и возможность вспомнить версии любого файла, не пытаясь понять, где что-то найти, имеет огромные преимущества для ведения учета. Такие инструменты, как Git и Monotone : о, черт возьми, какой хаос, который я могу представить, последует! Наличие четких записей о том, какая версия сценариев хакерских работ использовалась при игре с новым датчиком, когда прошел бозон Хиггса или взорвалась сверхновая, приведет к счастью.

DarenW
источник
Вы когда-нибудь пробовали использовать распределенную систему контроля версий?
Эндрю Гримм,
1
Почти все распределенные системы делают это так же просто, как и централизованные. Вы просто записываете идентификатор фиксации (в терминах Git) вместо номера версии (как в SVN).
Фил Миллер,
2

Какие языки / среды вы использовали для разработки научного программного обеспечения, особенно? анализ данных? Какие библиотеки? (Например, что вы используете для черчения?)

Языки, которые я использовал для числовых и научных данных:

  • C (медленная разработка, слишком много отладки, почти невозможно написать повторно используемый код)
  • C ++ (и я научился его ненавидеть - разработка не такая медленная, как C, но может быть проблемой. Шаблоны и классы изначально были крутыми, но через некоторое время я понял, что постоянно борюсь с ними и ищу обходные пути для проблемы языкового дизайна
  • Common Lisp, который был нормальным, но не очень широко использовался для научных вычислений. Непросто интегрировать с C (по сравнению с другими языками), но работает
  • Схема. Этот стал моим личным выбором.

Мой редактор - Emacs, хотя я использую vim для быстрых вещей, таких как редактирование файлов конфигурации.

Для черчения я обычно создаю текстовый файл и загружаю его в gnuplot.

Для анализа данных я обычно создаю текстовый файл и использую GNU R.

Я вижу здесь множество людей, использующих FORTRAN (в основном 77, но около 90), много Java и немного Python. Мне они не нравятся, поэтому я их не использую.

Было ли обучение для людей без значительного опыта в программировании?

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

У вас было что-нибудь вроде контроля версий, отслеживания ошибок?

Контроль версий абсолютно важен! Я храню свой код и данные на трех разных машинах, в двух разных концах света - в репозиториях Git. Я синхронизирую их все время (так что у меня есть контроль версий и резервные копии!) Я не занимаюсь контролем ошибок, хотя могу начать это делать. Но мои коллеги вообще не знают BTS или VCS.

Как бы вы попытались создать достойную среду для программирования, не слишком сильно мешая отдельным ученым (особенно физики - упрямые люди!)

Во-первых, я бы дал им как можно больше свободы. (В университете, где я работаю, я мог выбирать между тем, чтобы кто-то установил Ubuntu или Windows, или мою собственную ОС - я решил установить свою собственную. У меня нет поддержки от них, и я несу ответственность за все, что происходит с мои машины, включая вопросы безопасности, но я делаю с машиной все, что хочу).

Во-вторых, я бы посмотрел, к чему они привыкли, и заставил бы это работать (нужен FORTRAN? Мы его настроим. Нужен C ++? Нет проблем. Mathematica? Хорошо, купим лицензию). Затем посмотрите, сколько из них хотели бы изучить «дополнительные инструменты», которые помогут им быть более продуктивными (не говорите «разные» инструменты. Скажите «дополнительные», чтобы не казалось, что кто-то «проиграет» или «позволит» идти "или что-то еще). Начните с редакторов, посмотрите, есть ли группы, которые хотели бы использовать VCS для синхронизации своей работы (эй, вы можете оставаться дома и отправлять свой код через SVN или GIT - разве это не здорово?) И так далее. Не навязывайте - покажите на примерах, насколько круты эти инструменты. Проведите анализ данных с помощью R и покажите им, насколько это просто. Покажите красивую графику и объясните, как вы ее создали (но начните с простых примеров,

Джей
источник
2

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

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

Норман Х
источник
1

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

Если вы хотите использовать более общий язык сценариев, я бы выбрал Python. Для этого есть две вещи:

  • Интерактивная оболочка, в которой вы можете экспериментировать
  • Его ясный (хотя иногда и длинный) синтаксис

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

Серая пантера
источник