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


91

Передумови

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

Зараз все справді вийшло напрочуд ОК, але як люди в галузі природничих наук розробляють своє програмне забезпечення?

Питання

Кілька конкретних питань:

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

Короткий зміст відповідей на даний момент

Наразі відповіді (або моє їх тлумачення): (2008-10-11)

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

Відповіді:


27

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

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

Розподіл Enthought Python поставляється з усіма науковими обчислювальними бібліотеками , включаючи аналіз, побудова, 3D visualation і т.д.

Чи проводився якийсь тренінг для людей, які не мали значного досвіду програмування?

Enthought пропонує навчання SciPy, і спільнота SciPy досить добре відповідає на запитання у списках розсилки.

У вас було щось на зразок контролю версій, відстеження помилок?

Так, і так (Subversion and Trac). Оскільки ми працювали спільно з вченими (і, як правило, віддалено від них), контроль версій та відстеження помилок були надзвичайно важливими. Потрібен був певний тренінг, щоб змусити деяких науковців засвоїти переваги контролю версій.

Як би ви намагалися створити гідне середовище для програмування, не перешкоджаючи окремим вченим (особливо фізики - вперті люди!)

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


21

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

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

Я прослухав близько 8 чи 9 лекцій і вважаю, що це настійно рекомендується.

Редагувати: доступні також MP3-файли лекцій .


16

Ядерна / фізика частинок тут.

  • Основна робота з програмування раніше виконувалась переважно у Fortran за допомогою CERNLIB (PAW, MINUIT, ...) та GEANT3 , останнім часом вона в основному робилася на C ++ з ROOT та Geant4 . Існує ряд інших бібліотек та інструментів для спеціалізованого використання, і LabVIEW тут і там бачить певне використання.
  • Збір даних у моєму кінці цього бізнесу часто означав досить низький рівень роботи. Часто в C, іноді навіть у збірці, але це вимирає, оскільки обладнання стає більш спроможним. З іншого боку, багато плат зараз побудовані з FPGA , які потребують перетворення воріт ...
  • Одноразові, графічні інтерфейси тощо використовують майже все ( Tcl / Tk раніше був великим, і останнім часом я бачу більше Perl / Tk та Python / Tk), включаючи низку пакетів, які існують здебільшого у спільноті фізики частинок .
  • Багато людей, які пишуть код, мають невелику або зовсім не мають офіційної підготовки, і процес передається дуже нерівномірно за усними традиціями, але більшість керівників програмних груп сприймають процес серйозно і читають стільки, скільки потрібно, щоб усунути свої недоліки в цій галузі.
  • Контроль версій основних інструментів є повсюдним. Але багато окремих програмістів нехтують нею заради своїх менших завдань. Формальні засоби відстеження помилок зустрічаються рідше, як і нічні збірки, модульні тести та регресійні тести.

Щоб покращити ситуацію:

  1. Потрапіть на позитивні сторони місцевих лідерів програмного забезпечення
  2. Впроваджуйте процес, який ви хочете використовувати у своїй місцевості, і заохочуйте тих, кого ви впускаєте, також використовувати його.
  3. Чекай. Фізики - люди емпіричні. Якщо це допоможе, вони (зрештою!) Це помітять.

Ще одна пропозиція щодо вдосконалення.

  1. Приділіть трохи часу, щоб допомогти кожному, з ким безпосередньо працюєте. Перегляньте їх код. Розкажіть їм про складність алгоритму / генерацію коду / СУХІСТЬ або про щось основне, чого вони ніколи не дізналися, тому що якийсь професор одного разу кинув на них книгу Фортрана і сказав: "Зробіть це". Виділіть їх з питань процесу. Вони розумні люди, і вони дізнаються, якщо ви дасте їм шанс.

11

Це може бути дещо дотичним, але, сподіваюся, актуальним.

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

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

9

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

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

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


7

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

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

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

4.) Моя пропозиція щодо впровадження найкращих практик для вчених: робіть це повільно . Як науковці, ми зазвичай не постачаємо продукцію. Ніхто в науці не створює собі ім’я, маючи чистий, що підтримується кодом . Зазвичай вони отримують визнання за результатами цього коду. Вони повинні бачити обґрунтування витрат часу на вивчення практик програмного забезпечення. Повільно вводьте нові поняття і намагайтеся змусити їх слідувати; вони вчені, тож після того, як їх власні емпіричні дані підтвердять корисність таких речей, як контроль версій, вони почнуть це використовувати весь час!



5

Я фізик, який працює в галузі фізики конденсованої речовини, будуючи класичні та квантові моделі.

Мови:

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

Бібліотеки:

  • Armadillo / Blitz ++ - швидкі абстракції масивів / матриць / кубів для C ++
  • Eigen / Armadillo - лінійна алгебра
  • GSL - для використання з C
  • LAPACK / BLAS / ATLAS - надзвичайно великий і швидкий, але менш зручний (і написаний на ФОРТРАН)

Графіка:

  • GNUPlot - він має дуже чистий і акуратний результат, але іноді не такий продуктивний
  • Походження - дуже зручне для побудови графіків

Інструменти розробки:

  • Vim + плагіни - це чудово працює для мене
  • GDB - чудовий інструмент налагодження при роботі з C / C ++
  • Код :: Блоки - Я деякий час користувався ним і вважав його досить зручним, але, на мій погляд, Vim все-таки кращий.

Якщо ваш c ++ працює повільніше, ніж ваш c, ви використовуєте його неправильно. 'Звичайно, це легко зробити, але це вже інша справа. :: працюю з c ++ вже близько 7 років, і все ще
постійно вчимось

Я справді відзначаю величезного шанувальника C ++, але важко зрозуміти, як це може бути "набагато повільніше", ніж C або Fortran. Якщо ви не включите варіанти C для HPC, такі як UPC та C для CUDA.
Suugaku

4

Я працюю фізиком в університеті Великобританії.

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

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

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

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

  • Чи проводився якийсь тренінг для людей, які не мали значного досвіду програмування?

Я відвідував семінари з обчислювальних мереж, тривимірної візуалізації, Boost навчання тощо, які проводили обидва університети, в яких я був. Як студент нас навчали VBA для Excel та MatLab, але C / MatLab / LabVIEW є більш поширеним явищем.

  • У вас було щось на зразок контролю версій, відстеження помилок?

Ні, хоча у людей є налаштування особистого розвитку. Наша база коду знаходиться у спільній папці на "сервері", яка постійно підтримується за допомогою інструмента синхронізації.

  • Як би ви намагалися створити гідне середовище для програмування, не перешкоджаючи окремим вченим (особливо фізики - вперті люди!)

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

Я б сказав, що загалом для більшості природничих проектів час, як правило, краще витрачати на дослідження!


Дякуємо, що поділилися своїми думками! Я згоден з тим, що "час, як правило, краще витрачається на дослідження", але, бачачи, скільки часу часто втрачається через відсутність таких речей, як контроль версій та базове навчання програмуванню, я б сказав, що вчені недооцінюють це питання.
onnodb

4

Екс-академічний фізик, а тепер фізик промисловості Великобританії тут:

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

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

Чи проводився якийсь тренінг для людей, які не мали значного досвіду програмування?

Більшість (усіх?) Курсів фізики для студентів матимуть невеликий курс програмування, як правило, на C, Fortran або MATLAB, але це справжні основи. Я б дуже хотів, щоб я пройшов якусь підготовку з програмної інженерії (контроль перегляду / тестування / проектування систем середнього масштабу)

У вас було щось на зразок контролю версій, відстеження помилок?

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

Як би ви намагалися створити гідне середовище для програмування, не перешкоджаючи окремим вченим (особливо фізики - вперті люди!)

Я хотів би спробувати представити деякі ідеї програмної інженерії на рівні бакалавра, а потім підкріпити їх практикою на рівні аспірантів, а також навести вказівки на такі ресурси, як курс програмного столярства, згаданий вище.

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


4

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

Python, NumPy та pylab (побудова графіка).

Чи проводився якийсь тренінг для людей, які не мали значного досвіду програмування?

Ні, але я працював у мультимедійній дослідницькій лабораторії, тож майже всі мали досвід інформатики.

У вас було щось на зразок контролю версій, відстеження помилок?

Так, Subversion для контролю версій, Trac для відстеження помилок та wiki. Ви можете отримати безкоштовний хостинг помилок / контроль версій з http://www.assembla.com/, якщо їх TOS відповідає вашому проекту.

Як би ви намагалися створити гідне середовище для програмування, не перешкоджаючи окремим вченим (зокрема, фізики - вперті люди!).

Переконайтесь, що інфраструктура налагоджена та добре підтримується, і спробуйте продати переваги контролю джерел.


3

Я статистик університету у Великобританії. Як правило, тут люди використовують R для аналізу даних, навчитись досить просто, якщо ви знаєте C / Perl. Його справжня сила полягає в тому, як ви можете імпортувати та змінювати дані інтерактивно. Дуже легко взяти декілька скажуваних файлів CSV (або Excel) та об’єднати їх, створити нові стовпці на основі інших, а потім перекинути їх у GLM, GAM чи іншу модель. Складання графіків теж є тривіальним і не вимагає знання абсолютно нової мови (наприклад, PGPLOT чи GNUPLOT.) Звичайно, ви також маєте перевагу, маючи купу вбудованих функцій (від простих речей, таких як середнє значення, стандартне відхилення тощо). шлях до нейронних мереж, сплайнів та побудови графіків.)

Сказавши це, є кілька питань. З дуже великими наборами даних R може стати дуже повільним (я насправді бачив це лише з наборами даних> 50 000x30), і оскільки це трактується, ви не отримуєте переваг Fortran / C у цьому відношенні. Але ви можете (дуже легко) отримати R, щоб зателефонувати до спільних бібліотек C та Fortran (або з чогось на кшталт netlib, або з тих, які ви написали самостійно.) Отже, звичайним робочим процесом буде:

  • Придумайте, що робити.
  • Прототип коду в R.
  • Проведіть кілька попередніх аналізів.
  • Перепишіть повільний код в C або Fortran і зателефонуйте йому з R.

Що для мене дуже добре працює.

Я один з єдиних людей у ​​своєму відділі (із понад 100 осіб), які використовують контроль версій (у моєму випадку використовую git із githuib.com.) Це досить тривожно, але, схоже, вони просто не прагнуть спробувати і задовольняються передачею 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 або дотримуватися певної конвенції щодо іменування; забудьте спробувати змусити їх дотримуватися загадкових практик та умов розробників програмного забезпечення.


2

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


Ви коли-небудь пробували використовувати розподілену систему контролю версій?
Ендрю Грімм,

1
Майже всі розподілені системи роблять це настільки ж простим, як і централізовані. Ви просто записуєте ідентифікатор коміту (у термінах Git) замість номера редакції (як у SVN).
Філ Міллер,

2

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

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

  • 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. Для цього є дві речі:

  • Інтерактивна оболонка, де можна експериментувати
  • Його чіткий (хоча іноді і тривалий) синтаксис

Додатковою перевагою є бібліотеки для більшості речей, які ви хотіли б із цим робити.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.