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

Фон

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

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

Вопросы

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

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

Резюме ответов пока

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

  • Языки/пакеты, которые, как представляется, наиболее широко используются:
    • LabVIEW
    • Python
      • с SciPy, NumPy, PyLab и т.д. (см. также ответ Brandon для загрузки и ссылок)
    • C/С++
    • MATLAB
  • Контроль версий используется почти всеми респондентами; отслеживание ошибок и другие процессы гораздо реже.
  • Курс "Плотницкие программы" - это хороший способ научить программистов и методов разработки ученым.
  • Как улучшить ситуацию?
    • Не заставляйте людей следовать строгим протоколам.
    • Создайте среду самостоятельно и покажите преимущества другим. Помогите им начать работу с контролем версий, отслеживанием ошибок и т.д. Сами.
    • Обзор кода других людей может помочь, но имейте в виду, что не все могут это оценить.

Ответ 1

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

Я работал для Enthought, основного корпоративного спонсора SciPy. Мы сотрудничали с учеными из компаний, которые заключили контракт с Enthought для разработки пользовательского программного обеспечения. Python/SciPy, казалось, была удобной средой для ученых. Это гораздо менее пугающе начать работу, чем сказать С++ или Java, если вы ученый без программного фона.

Enthought Python Distribution поставляется со всеми научными вычислительными библиотеками, включая анализ, построение, 3D-визуализацию и т.д.

Была ли какая-либо подготовка для людей, не имеющих существенного опыта программирования?

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

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

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

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

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

Ответ 2

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

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

Я слушал около 8 или 9 лекций и думаю, что это рекомендуется.

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

Ответ 3

Физика ядра/частицы здесь.

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

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

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

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

  1. Положите немного времени, чтобы помочь кому-либо, с кем вы работаете напрямую. Просмотрите свой код. Расскажите им об алгоритмической сложности/генерации кода /DRY или о том, что они никогда не узнали, потому что какой-то профессор бросил им книгу Fortran и сказал "сделайте это". Индоктринируйте их по вопросам процесса. Они умные люди, и они узнают, если вы дадите им шанс.

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

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

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

Ответ 8

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

Языки:

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

Библиотеки:

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

Графика:

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

Средства разработки:

  • Vim + плагины - он отлично работает для меня
  • GDB - отличный инструмент для отладки при работе с C/С++
  • Code::Blocks - Я использовал его в течение некоторого времени и нашел его вполне комфортным, но Vim все еще лучше, на мой взгляд.

Ответ 9

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

Python, NumPy и pylab (построение).

Была ли какая-либо подготовка для людей, не имеющих существенного опыта программирования?

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

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

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

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

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

Ответ 10

Экс-академик-физик и теперь физик-промышленник Великобритании:

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

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

Была ли какая-либо подготовка для людей, не имеющих существенного опыта программирования?

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

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

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

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

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

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

Ответ 11

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

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

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

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

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

  • Была ли какая-либо подготовка для людей без каких-либо существенных предпосылок программирования?

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

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

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

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

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

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

Ответ 12

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

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

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

Что для меня очень хорошо работает.

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

Мой факультет физики штата преподавал LabVIEW классы и широко использовал его в своих исследовательских проектах.

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

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

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

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

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

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

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

Ответ 16

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

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

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

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

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

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

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

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

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

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

Ответ 17

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 18

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

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

Ответ 20

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

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

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

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