Praktyki programowania w środowisku naukowym? [Zamknięte]


91

tło

W zeszłym roku odbyłem staż w grupie fizyki na uniwersytecie. W tej grupie najczęściej używaliśmy LabVIEW do pisania programów do kontrolowania naszych ustawień, zbierania danych i analizowania naszych danych. Z dwóch pierwszych powodów działa to całkiem nieźle, ale w przypadku analizy danych to prawdziwy ból. Poza tym wszyscy byli w większości samoukami, więc napisany kod był generalnie niezłym bałaganem (nic dziwnego, że każdy doktorat szybko decydował się przepisać wszystko od nowa). Kontrola wersji była nieznana i niemożliwa do skonfigurowania z powodu surowych przepisów dotyczących oprogramowania i sieci z działu IT.

Teraz wszystko ułożyło się zaskakująco dobrze, ale w jaki sposób ludzie z nauk przyrodniczych rozwijają swoje oprogramowanie?

pytania

Kilka konkretnych pytań:

  • Jakich języków / środowisk używałeś do tworzenia oprogramowania naukowego, zwłaszcza do analizy danych? Jakie biblioteki? (na przykład, czego używasz do kreślenia?)
  • Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?
  • Czy masz coś takiego jak kontrola wersji i śledzenie błędów?
  • Jak byś spróbował stworzyć przyzwoite środowisko do programowania, nie wchodząc zbytnio na drogę poszczególnym naukowcom (zwłaszcza fizycy są upartymi ludźmi!)

Podsumowanie dotychczasowych odpowiedzi

Odpowiedzi (lub moja ich interpretacja) do tej pory: (2008-10-11)

  • Języki / pakiety, które wydają się być najczęściej używane:
  • Prawie wszyscy respondenci używają kontroli wersji; Śledzenie błędów i inne procesy są znacznie mniej powszechne.
  • Kurs Software Carpentry to dobry sposób na nauczenie naukowców technik programowania i programowania.
  • Jak coś ulepszyć?
    • Nie zmuszaj ludzi do przestrzegania ścisłych protokołów.
    • Skonfiguruj środowisko samodzielnie i pokaż innym korzyści. Pomóż im samodzielnie rozpocząć pracę z kontrolą wersji, śledzeniem błędów itp.
    • Przeglądanie kodu innych osób może pomóc, ale pamiętaj, że nie każdy może to docenić.

Odpowiedzi:


27

Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Pracowałem dla Enthought , głównego sponsora korporacyjnego SciPy . Współpracowaliśmy z naukowcami z firm, które zakontraktowały Enthought na tworzenie oprogramowania na zamówienie. Python / SciPy wydawał się wygodnym środowiskiem dla naukowców. Rozpoczęcie pracy jest znacznie mniej onieśmielające niż mówienie w C ++ lub Javie, jeśli jesteś naukowcem bez doświadczenia w oprogramowaniu.

Enthought Python Dystrybucja posiada wszystkie biblioteki naukowe obliczeniowe w tym analizy, kreślenia, 3D visualation, etc.

Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?

Enthought oferuje szkolenia SciPy, a społeczność SciPy jest całkiem dobra w odpowiadaniu na pytania z list mailingowych.

Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Tak i tak (Subversion i Trac). Ponieważ pracowaliśmy wspólnie z naukowcami (i zazwyczaj zdalnie od nich), kontrola wersji i śledzenie błędów były niezbędne. Potrzeba było trochę coachingu, aby naukowcy zinternalizowali korzyści płynące z kontroli wersji.

Jak postąpiłbyś, próbując stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (szczególnie fizycy to uparci ludzie!)

Upewnij się, że są zaznajomieni z łańcuchem narzędzi. To wymaga inwestycji z góry, ale sprawi, że będą mniej skłonni odrzucić ją na rzecz czegoś bardziej znanego (Excel). Kiedy narzędzia zawiodą ich (a tak się stanie), upewnij się, że mają gdzie szukać pomocy - listy mailingowe, grupy użytkowników, inni naukowcy i programiści w organizacji. Im więcej pomocy w przywróceniu ich do uprawiania fizyki, tym lepiej.


21

Kurs Software Carpentry jest skierowany specjalnie do osób zajmujących się obliczeniami naukowymi i ma na celu nauczenie podstaw i lekcji inżynierii oprogramowania oraz tego, jak najlepiej zastosować je w projektach.

Obejmuje takie tematy, jak kontrola wersji, debugowanie, testowanie, tworzenie skryptów i różne inne kwestie.

Wysłuchałem około 8 lub 9 wykładów i uważam, że jest to wysoce zalecane.

Edycja: Pliki MP3 z wykładów są również dostępne .


16

Fizyka jądrowa / cząstek tutaj.

  • Kiedyś główne prace programistyczne były wykonywane głównie w Fortranie przy użyciu CERNLIB (PAW, MINUIT, ...) i GEANT3 , a ostatnio głównie w C ++ z ROOT i Geant4 . Istnieje wiele innych bibliotek i narzędzi wyspecjalizowanych w użyciu, a LabVIEW widzi ich zastosowanie tu i ówdzie.
  • Gromadzenie danych pod koniec mojej działalności często oznaczało pracę na dość niskim poziomie. Często w C, czasami nawet w montażu, ale to zanika, gdy sprzęt staje się bardziej wydajny. Z drugiej strony, wiele płyt jest teraz zbudowanych z układami FPGA, które wymagają kręcenia bramek ...
  • Pojedyncze, graficzne interfejsy itp. Używają prawie wszystkiego ( Tcl / Tk był kiedyś duży, a ostatnio widziałem więcej Perl / Tk i Python / Tk), w tym wiele pakietów, które istnieją głównie w społeczności fizyki cząstek elementarnych .
  • Wiele osób piszących kod ma niewielkie lub żadne formalne szkolenie, a proces jest przekazywany bardzo nierównomiernie przez tradycję ustną, ale większość liderów grup oprogramowania traktuje proces poważnie i czyta tyle, ile potrzeba, aby uzupełnić swoje braki w tej dziedzinie.
  • Kontrola wersji głównych narzędzi jest wszechobecna. Ale wielu indywidualnych programistów zaniedbuje to przy swoich mniejszych zadaniach. Formalne narzędzia do śledzenia błędów są mniej powszechne, podobnie jak nocne kompilacje, testy jednostkowe i testy regresji.

Aby poprawić rzeczy:

  1. Znajdź się po dobrej stronie lokalnych liderów oprogramowania
  2. Wdrażaj proces, który chcesz zastosować na swoim terenie i zachęcaj tych, których pozwoliłeś, aby z niego korzystali.
  3. Czekać. Fizycy to ludzie empiryczni. Jeśli to pomoże, (w końcu!) To zauważą.

Jeszcze jedna sugestia, jak ulepszyć rzeczy.

  1. Poświęć trochę czasu, aby pomóc każdemu, z kim bezpośrednio pracujesz. Przejrzyj ich kod. Powiedz im o złożoności algorytmicznej / generowaniu kodu / DRY lub jakiejkolwiek podstawowej rzeczy, której nigdy się nie nauczyli, ponieważ jakiś profesor rzucił im kiedyś książkę w języku Fortran i powiedział: „zrób to”. Indoktrynuj ich w kwestiach związanych z procesami. Są inteligentnymi ludźmi i nauczą się, jeśli dasz im szansę.

11

Może to być nieco styczne, ale mam nadzieję, że istotne.

Pracowałem dla National Instruments, R&D, gdzie pisałem oprogramowanie dla zestawów narzędzi NI RF & Communication. Często korzystaliśmy z LabVIEW, a oto praktyki, które przestrzegaliśmy:

  1. Kontrola źródła. NI używa Perforce. Zrobiliśmy normalną rzecz - gałęzie dev / trunk, ciągła integracja, prace.
  2. Napisaliśmy zestawy testów automatycznych.
  3. Mieliśmy kilka osób, które miały doświadczenie w przetwarzaniu sygnałów i komunikacji. Kiedyś mieliśmy regularne przeglądy kodu i dokumenty z najlepszymi praktykami, aby upewnić się, że ich kod jest odpowiedni.
  4. Pomimo recenzji kodu, zdarzyło się, że „ludzie od oprogramowania”, tacy jak ja, musieli przepisać część tego kodu w celu zwiększenia wydajności.
  5. Wiem dokładnie, co masz na myśli mówiąc o upartych ludziach! Mieliśmy ludzi, którzy kiedyś uważali, że wskazanie potencjalnej poprawy wydajności w ich kodzie jest bezpośrednią osobistą zniewagą! Nie trzeba dodawać, że wymaga to dobrego zarządzania. Pomyślałem, że najlepszym sposobem radzenia sobie z tymi ludźmi jest iść powoli, nie naciskać zbyt mocno na zmiany iw razie potrzeby być przygotowanym do wykonania brudnej roboty. [Przykład: napisz zestaw testów dla swojego kodu].

9

Nie jestem „naturalnym” naukowcem (studiuję transport), ale jestem naukowcem, który pisze wiele własnych programów do analizy danych. Staram się pisać jak najwięcej w Pythonie, ale czasami jestem zmuszony używać innych języków, gdy pracuję nad rozszerzaniem lub dostosowywaniem istniejącego narzędzia programowego. W mojej dziedzinie jest bardzo mało szkoleń z programowania. Większość ludzi jest samoukiem lub uczyła się umiejętności programowania na zajęciach odbywanych wcześniej lub poza dyscypliną.

Jestem wielkim fanem kontroli wersji. Użyłem Vault działającego na moim serwerze domowym dla całego kodu do mojej dysertacji. W tej chwili próbuję nakłonić dział do skonfigurowania serwera Subversion, ale przypuszczam, że będę jedynym, który go użyje, przynajmniej na początku. Bawiłem się trochę z FogBugs, ale w przeciwieństwie do kontroli wersji, nie sądzę, żeby było to tak przydatne dla jednoosobowego zespołu.

Jeśli chodzi o zachęcanie innych do korzystania z kontroli wersji i tym podobnych, to naprawdę jest to problem, z którym mam teraz do czynienia. Planuję zmusić moich studentów, by używali go w projektach badawczych, które dla mnie robią, i zachęcać ich do używania go do własnych badań. Jeśli prowadzę zajęcia z programowania, prawdopodobnie zmuszę uczniów do korzystania z kontroli wersji również tam (oceniając ich na podstawie tego, co jest w repozytorium). Jeśli chodzi o moich kolegów i absolwentów, jedyne, co mogę zrobić, to udostępnić serwer i polegać na delikatnej perswazji i dawaniu dobrego przykładu. Szczerze mówiąc, w tym momencie myślę, że ważniejsze jest, aby robili regularne kopie zapasowe, niż umieszczając je w kontroli źródła (niektórzy ludzie noszą jedyną kopię swoich danych badawczych na dyskach flash USB).


7

1.) Języki skryptowe są obecnie popularne w większości rzeczy ze względu na lepszy sprzęt. Perl / Python / Lisp są powszechne w przypadku lekkich aplikacji (automatyzacja, lekkie obliczenia); Widzę dużo Perla w mojej pracy (obliczeniowe EM), ponieważ lubimy Unix / Linux. W przypadku wydajności, zwykle używane są C / C ++ / Fortran. W przypadku obliczeń równoległych, cóż, zwykle ręcznie zrównoleglamy przebiegi w EM, w przeciwieństwie do tego, aby program robił to niejawnie (tj. Dzielimy zadania według kąta patrzenia podczas obliczania przekrojów radarowych).

2.) Po prostu wrzucamy tutaj ludzi do miksu. Wiele z kodu, który mamy, jest bardzo niechlujnych, ale naukowcy są zazwyczaj roztrzepaną gromadą, która nie ma nic przeciwko temu. Nie jest to idealne rozwiązanie, ale mamy rzeczy do dostarczenia i brakuje nam personelu. Powoli stajemy się lepsi.

3.) Używamy SVN; jednak nie mamy oprogramowania do śledzenia błędów. Prawie tak dobre, jak to dla nas jest, to plik txt, który mówi ci, gdzie są konkretne błędy.

4.) Moja sugestia dotycząca wdrażania najlepszych praktyk dla naukowców: rób to powoli . Jako naukowcy zazwyczaj nie wysyłamy produktów. Nikt w nauce nie zyskuje rozgłosu mając czysty, łatwy w utrzymaniu kod . Zazwyczaj zyskują uznanie dzięki wynikom tego kodu. Muszą zobaczyć uzasadnienie poświęcania czasu na naukę praktyk związanych z oprogramowaniem. Powoli wprowadzaj nowe koncepcje i staraj się je stosować; są naukowcami, więc po tym, jak ich własne dowody empiryczne potwierdzą przydatność rzeczy takich jak kontrola wersji, zaczną z niej korzystać przez cały czas!



5

Jestem fizykiem zajmującym się fizyką materii skondensowanej budującym modele klasyczne i kwantowe.

Języki:

  • C ++ - bardzo wszechstronny: może być używany do wszystkiego, dobra prędkość, ale może być trochę niewygodny, jeśli chodzi o MPI
  • Oktawa - dobra do dodatkowych obliczeń, bardzo wygodna i produktywna

Biblioteki:

  • Armadillo / Blitz ++ - szybkie abstrakcje tablic / macierzy / kostek dla C ++
  • Eigen / Armadillo - algebra liniowa
  • GSL - do użytku z C
  • LAPACK / BLAS / ATLAS - wyjątkowo duży i szybki, ale mniej wygodny (i napisany w FORTRANIE)

Grafika:

  • GNUPlot - ma bardzo czysty i schludny wynik, ale czasami nie jest tak produktywny
  • Pochodzenie - bardzo wygodne do kreślenia

Narzędzia programistyczne:

  • Wtyczki Vim + - dla mnie działa świetnie
  • GDB - świetne narzędzie do debugowania podczas pracy z C / C ++
  • Code :: Blocks - Używałem go przez jakiś czas i uznałem to za całkiem wygodne, ale moim zdaniem Vim jest nadal lepszy.

Jeśli twoje c ++ działa wolniej niż twoje c, używasz go nieprawidłowo. - Oczywiście, to łatwe, ale to już inna sprawa. :: pracuję z c ++ od około 7 lat i ciągle uczę się nowych rzeczy ::
dmckee --- ex-moderator kitten

Naprawdę uważam, że jestem wielkim fanem C ++, ale ciężko jest zrozumieć, jak mogłoby to być „znacznie wolniejsze” niż C czy Fortran. Chyba że dołączysz warianty C dla HPC, takie jak UPC i C dla CUDA.
Suugaku

4

Pracuję jako fizyk na brytyjskim uniwersytecie.

Może powinienem podkreślić, że różne obszary badań kładą różny nacisk na programowanie. Fizycy cząstek elementarnych (tacy jak dmckee) zajmują się modelowaniem obliczeniowym prawie wyłącznie i mogą współpracować przy dużych projektach oprogramowania, podczas gdy ludzie z dziedzin takich jak moja własna (materia skondensowana) stosunkowo rzadko piszą kod. Podejrzewam, że większość naukowców wpada do tego ostatniego obozu. Powiedziałbym, że umiejętności kodowania są zwykle postrzegane jako przydatne w fizyce, ale nie są niezbędne, podobnie jak umiejętności fizyczne / matematyczne są postrzegane jako przydatne dla programistów, ale nie są niezbędne. Mając to na uwadze...

  • Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Zwykle analiza i kreślenie danych odbywa się za pomocą ogólnych pakietów do analizy danych, takich jak IGOR Pro , ORIGIN , Kaleidegraph, które można traktować jako „Excel plus”. Pakiety te zazwyczaj zawierają język skryptowy, którego można użyć do automatyzacji. Bardziej specjalistyczna analiza może mieć dedykowane narzędzie do tego zadania, które generalnie zostało napisane dawno temu, nikt nie ma źródła i jest dość błędna. Niektóre bardziej techniczne typy mogą używać wymienionych języków (Python, R, MatLab z Gnuplot do kreślenia).

Oprogramowanie sterujące jest powszechnie wykonywane w LabVIEW, chociaż w rzeczywistości używamy Delphi, co jest dość niezwykłe.

  • Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?

Byłem na seminariach na temat obliczeń gridowych, wizualizacji 3D, nauki Boost itp. Prowadzonych przez oba uniwersytety, na których byłem. Jako licencjat uczyliśmy się VBA dla Excela i MatLab, ale C / MatLab / LabVIEW jest bardziej powszechny.

  • Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Nie, chociaż ludzie mają konfiguracje rozwoju osobistego. Nasza baza kodu znajduje się w udostępnionym folderze na „serwerze”, który jest aktualizowany za pomocą narzędzia do synchronizacji.

  • Jak postąpiłbyś, próbując stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (szczególnie fizycy to uparci ludzie!)

Krok po kroku! Próbuję zastąpić folder współdzielony czymś bardziej solidnym, być może pomoże znalezienie klienta SVN, który naśladuje obecne zachowanie narzędzi do synchronizacji.

Powiedziałbym, że ogólnie rzecz biorąc, w przypadku większości projektów przyrodniczych lepiej spędzać czas na badaniach!


Dziękuję za podzielenie się swoimi przemyśleniami! Zgadzam się, że „generalnie lepiej spędza się czas na robieniu badań”, ale widząc, ile czasu jest często tracone z powodu braku takich rzeczy, jak kontrola wersji i podstawowe szkolenie z programowania, powiedziałbym, że naukowcy nie doceniają tego problemu.
onnodb

4

Były fizyk akademicki, a teraz fizyk przemysłowy z Wielkiej Brytanii tutaj:

Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Obecnie głównie korzystam z MATLABA (łatwy dostęp do funkcji wizualizacji i matematyki). Często używałem Fortrana i IDL . Użyłem C (ale jestem bardziej czytelnikiem niż pisarzem C), makr Excela (brzydkie i mylące). Obecnie muszę umieć czytać Javę i C ++ (ale tak naprawdę nie mogę w nich programować), a także zhakowałem Pythona. Dla własnej rozrywki zajmuję się teraz programowaniem w języku C # (głównie po to, aby uzyskać przenośność / niski koszt / ładne interfejsy). Potrafię pisać w języku Fortran w prawie każdym języku, w jakim jestem przedstawiony ;-)

Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?

Większość (wszystkich?) Studiów licencjackich z fizyki będzie miała mały kurs programowania, zwykle w języku C, Fortran lub MATLAB, ale to są prawdziwe podstawy. Naprawdę chciałbym kiedyś odbyć szkolenie z inżynierii oprogramowania (kontrola wersji / testowanie / projektowanie systemów średniej skali)

Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Zacząłem używać Subversion / TortoiseSVN stosunkowo niedawno. Grupy, z którymi pracowałem w przeszłości, używały kontroli wersji. Nie znam żadnej grupy akademickiej, która używa oficjalnego oprogramowania do śledzenia błędów. Nadal nie stosuję żadnych systematycznych testów.

Jak postąpiłbyś, próbując stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (szczególnie fizycy to uparci ludzie!)

Chciałbym wprowadzić pewne pomysły z zakresu inżynierii oprogramowania na poziomie licencjackim, a następnie wzmocnić je praktyką na poziomie magisterskim, a także podać wskazówki do zasobów, takich jak wspomniany powyżej kurs Software Carpentry.

Spodziewałbym się, że znaczna część fizyków akademickich będzie pisać oprogramowanie (choć niekoniecznie wszyscy) i pilnie potrzebują przynajmniej wprowadzenia do idei inżynierii oprogramowania.


4

Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Python, NumPy i pylab (kreślenie).

Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?

Nie, ale ja pracowałem w multimedialnym laboratorium badawczym, więc prawie każdy miał wykształcenie informatyczne.

Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Tak, Subversion do kontroli wersji, Trac do śledzenia błędów i wiki. Możesz otrzymać darmowy hosting śledzenia błędów / kontroli wersji ze strony http://www.assembla.com/, jeśli ich TOS pasuje do twojego projektu.

Jak byś próbował stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (zwłaszcza fizycy to uparci ludzie!).

Upewnij się, że infrastruktura jest skonfigurowana i dobrze utrzymana, i spróbuj sprzedać korzyści płynące z kontroli źródła.


3

Jestem statystykiem na uniwersytecie w Wielkiej Brytanii. Generalnie ludzie używają R do analizy danych, dość łatwo jest się nauczyć, jeśli znasz C / Perl. Jego prawdziwą mocą jest sposób, w jaki można interaktywnie importować i modyfikować dane. Bardzo łatwo jest wziąć wiele, powiedzmy, plików CSV (lub Excel) i scalić je, utworzyć nowe kolumny na podstawie innych, a następnie wrzucić to do GLM, GAM lub innego modelu. Plotowanie jest również trywialne i nie wymaga znajomości zupełnie nowego języka (takiego jak PGPLOT lub GNUPLOT). Oczywiście masz również tę zaletę, że masz kilka wbudowanych funkcji (od prostych rzeczy, takich jak średnia, odchylenie standardowe itp. droga do sieci neuronowych, splajnów i kreślenia GL).

Powiedziawszy to, istnieje kilka problemów. W przypadku bardzo dużych zbiorów danych R może stać się bardzo powolne (tak naprawdę widziałem to tylko z zestawami danych> 50 000x30), a ponieważ jest interpretowane, nie uzyskujesz przewagi Fortran / C pod tym względem. Ale możesz (bardzo łatwo) zmusić R do wywoływania bibliotek współdzielonych C i Fortran (z czegoś takiego jak netlib lub tych, które sam napisałeś). Tak więc zwykły przepływ pracy będzie następujący:

  • Zastanów się, co robić.
  • Wykonaj prototyp kodu w R.
  • Przeprowadź wstępne analizy.
  • Ponownie napisz powolny kod do C lub Fortran i wywołaj go z R.

Co dla mnie bardzo dobrze działa.

Jestem jedną z niewielu osób w moim dziale (> 100 osób) używających kontroli wersji (w moim przypadku używam git z githuib.com). To raczej niepokojące, ale po prostu nie wydają się być chętni do wypróbowywania tego i są zadowoleni z przekazywania plików zip (fuj.)

Moją sugestią byłoby kontynuowanie korzystania z LabView do przejęcia (i być może próba przekonania współpracowników do uzgodnienia zestawu narzędzi do pozyskiwania i udostępniania dla wszystkich), a następnie przejście do eksportu danych do pliku CSV (lub podobnego) i robienie analizy w R. Naprawdę nie ma sensu ponownie wymyślać koła pod tym względem.


2

Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Na moim licencjackim wydziale fizyki prowadziłem zajęcia z LabVIEW i szeroko stosowałem go w swoich projektach badawczych.

Inną alternatywą jest MATLAB , w którym nie mam doświadczenia. Istnieją obozy dla obu produktów; każdy ma swoje zalety / wady. W zależności od rodzaju problemów, które chcesz rozwiązać, jeden pakiet może być bardziej preferowany niż drugi.

Jeśli chodzi o analizę danych, możesz użyć dowolnego rodzaju analizatora liczb, który chcesz. Najlepiej byłoby, gdybyś wykonał trudne obliczenia w języku X i sformatował wynik, aby dobrze drukować w programie Excel, Mathcad , Mathematica lub jakimkolwiek innym systemie kreślenia. Nie oczekuj tutaj standaryzacji.

Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Patrząc wstecz, tak się nie stało i byłoby nam wszystkim łatwiej, gdybyśmy to zrobili. Nie ma to jak zepsuć wszystko i godzinami walczyć, aby to naprawić!

Zdecydowanie używaj kontroli źródła dla dowolnego wspólnego kodu. Zachęcaj osoby do pisania kodu w sposób, który można uczynić bardziej ogólnym. To tak naprawdę tylko najlepsze praktyki kodowania. Naprawdę, powinieneś poprosić ich o nauczanie (lub wzięcie) zajęć z informatyki, aby mogli zdobyć podstawy.

Jak postąpiłbyś, próbując stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (szczególnie fizycy to uparci ludzie!)

Istnieje wyraźny podział między pozyskiwaniem danych (DAQ) a analizą danych. Oznacza to, że można ustandaryzować DAQ, a następnie pozwolić naukowcom bawić się danymi w wybranym przez siebie programie.


2

Inną dobrą opcją jest Scilab . Posiada moduły graficzne à la LabVIEW , ma własny język programowania, a także umożliwia osadzenie na przykład kodu w języku Fortran i C. Jest używany w sektorach publicznym i prywatnym, w tym w dużych firmach przemysłowych. I to za darmo.

Jeśli chodzi o wersjonowanie, niektórzy wolą Mercurial , ponieważ daje on więcej swobód w zarządzaniu i definiowaniu repozytoriów. Nie mam jednak z tym żadnego doświadczenia.

Do kreślenia używam Matplotlib . Wkrótce będę musiał tworzyć animacje i widziałem dobre rezultaty używając MEncodera . Oto przykład zawierający ścieżkę dźwiękową.

Na koniec proponuję podejście modułowe, to znaczy próbę przechowywania głównych fragmentów kodu w różnych plikach, aby zmiana kodu, zrozumienie, konserwacja i ulepszanie były łatwiejsze. Napisałem na przykład moduł Pythona do testowania integralności plików, drugi do sekwencji przetwarzania obrazu itp.

Należy również rozważyć programowanie z użyciem debugera, który umożliwia sprawdzanie zawartości zmiennej w ustawialnych punktach przerwania w kodzie, zamiast używać drukowania wierszy. Użyłem Eclipse do programowania w Pythonie i Fortranie (chociaż dostałem fałszywy błąd podczas kompilowania z nim krótkiego programu w języku Fortran, ale może to być zła konfiguracja) i zaczynam używać Eric IDE dla Pythona. Pozwala na debugowanie, zarządzanie wersjami za pomocą SVN , ma wbudowaną konsolę, może dokonywać refaktoryzacji z Bicycle Repair Man (może też użyć innej), masz Unittest, itp. Lżejszą alternatywą dla Pythona jest IDLE , w zestawie z Pythonem od wersji 2.3.

Jako kilka wskazówek proponuję również:

  • Nieużywanie zmiennych jednoznakowych. Jeśli chcesz przeszukać wyglądy, wyniki otrzymasz wszędzie. Niektórzy twierdzą, że przyzwoite IDE to ułatwia, ale wtedy będziesz musiał mieć stały dostęp do IDE. Nawet użycie ii, jj i kk może wystarczyć, chociaż ten wybór będzie zależał od twojego języka. (Podwójne samogłoski byłyby mniej przydatne, gdyby na przykład komentarze do kodu były w języku estońskim).

  • Komentowanie kodu od samego początku.

  • W przypadku krytycznych aplikacji czasami lepiej jest polegać na starszych wersjach języka / kompilatora (główne wydania), bardziej stabilnych i lepiej debugowanych. Oczywiście możesz mieć bardziej zoptymalizowany kod w późniejszych wersjach, naprawione błędy itp., Ale mówię o używaniu Fortran 95 zamiast 2003, Pythona 2.5.4 zamiast 3.0, lub coś takiego. (Szczególnie, gdy nowa wersja łamie wsteczną kompatybilność.) Wiele ulepszeń zwykle wprowadza wiele błędów. Jednak będzie to zależeć od konkretnych zastosowań! Zauważ, że jest to osobisty wybór, wiele osób może się temu sprzeciwić.

  • Korzystaj z nadmiarowych i automatycznych kopii zapasowych! (Z kontrolą wersji).


2

Zdecydowanie używaj Subversion do utrzymywania aktualnych, trwających i stabilnych kopii migawkowych kodu źródłowego. Obejmuje to C ++, Javę itp. Dla własnych narzędzi programowych oraz skrypty szybkiego dostępu do jednorazowego przetwarzania.

Z silnym naciskiem na naukę i inżynierię stosowaną w kierunku metodologii rozwoju „samotnego kowboja”, zwykłą praktyką organizowania repozytorium w pniu, znaczniku i cokolwiek innego - nie przejmuj się! Naukowcy i ich technicy laboratoryjni lubią kręcić pokrętłami, poruszać elektrodami i ścigać wycieki próżni. To wystarczająca praca, aby wszyscy zgodzili się, powiedzmy Python / NumPy lub przestrzegać jakiejś konwencji nazewnictwa; zapomnij, próbując zmusić ich do przestrzegania tajemnych praktyk i konwencji programistów.


2

Jeśli chodzi o zarządzanie kodem źródłowym, scentralizowane systemy, takie jak Subversion, są lepsze do użytku naukowego ze względu na jasny pojedynczy punkt prawdy (SPOT). Rejestrowanie zmian i możliwość przywoływania wersji dowolnego pliku bez szukania miejsca, w którym można coś znaleźć, ma ogromne zalety w zakresie przechowywania danych. Narzędzia takie jak Git i Monotone : o mój Boże, chaos, który mogę sobie wyobrazić! Posiadanie jasnych danych o tym, jaka wersja skryptów hakerskich została użyta podczas zabawy z nowym czujnikiem, kiedy minął bozon Higgsa lub wybuchła supernowa, doprowadzi do szczęścia.


Czy kiedykolwiek próbowałeś użyć rozproszonego systemu kontroli wersji?
Andrew Grimm

1
Prawie wszystkie systemy rozproszone sprawiają, że jest to tak samo łatwe, jak systemy scentralizowane. Po prostu rejestrujesz identyfikator zatwierdzenia (w terminach Git) zamiast numeru wersji (jak w SVN).
Phil Miller

2

Jakie języki / środowiska używałeś do tworzenia oprogramowania naukowego, zwł. analiza danych? Jakie biblioteki? (Np. Czego używasz do kreślenia?)

Języki, których używałem do numeracji i rzeczy związanych z sicentyfikacją:

  • C (powolny rozwój, zbyt dużo debugowania, prawie niemożliwe do napisania kodu wielokrotnego użytku)
  • C ++ (i nauczyłem się go nienawidzić - programowanie nie jest tak powolne jak C, ale może być uciążliwe. Szablony i klasy były początkowo fajne, ale po chwili zdałem sobie sprawę, że cały czas z nimi walczę i znajduję obejścia problemy z projektowaniem języka
  • Common Lisp, który był OK, ale nie był szeroko stosowany w komputerach Sci. Niełatwa integracja z C (w porównaniu z innymi językami), ale działa
  • Schemat. Ten stał się moim osobistym wyborem.

Moim edytorem jest Emacs, chociaż używam vima do szybkich rzeczy, takich jak edycja plików konfiguracyjnych.

Do kreślenia zazwyczaj generuję plik tekstowy i umieszczam go w gnuplot.

Do analizy danych zazwyczaj generuję plik tekstowy i używam GNU R.

Widzę tutaj wielu ludzi używających FORTRANU (głównie 77, ale jakieś 90), dużo Javy i trochę Pythona. Nie lubię ich, więc ich nie używam.

Czy były jakieś szkolenia dla osób bez większego doświadczenia w programowaniu?

Myślę, że mnie to nie dotyczy, ponieważ ukończyłem CS - ale tam, gdzie pracuję, nie ma formalnego szkolenia, ale ludzie (inżynierowie, fizycy, matematycy) pomagają sobie nawzajem.

Czy masz coś takiego jak kontrola wersji, śledzenie błędów?

Kontrola wersji jest absolutnie ważna! Trzymam swój kod i dane na trzech różnych maszynach, po dwóch różnych stronach świata - w repozytoriach Git. Synchronizuję je cały czas (więc mam kontrolę wersji i kopie zapasowe!) Nie robię kontroli błędów, chociaż mogę zacząć to robić. Ale moi koledzy w ogóle nie BTS ani VCS.

Jak postąpiłbyś, próbując stworzyć przyzwoite środowisko do programowania, bez zbytniego przeszkadzania poszczególnym naukowcom (szczególnie fizycy to uparci ludzie!)

Po pierwsze, dałbym im jak najwięcej swobody. (Na uniwersytecie, na którym pracuję, mogłem wybierać między tym, czy ktoś zainstaluje Ubuntu lub Windows, czy zainstaluje własny system operacyjny - zdecydowałem się zainstalować własny. Nie mam od nich wsparcia i jestem odpowiedzialny za wszystko, co się dzieje z moje maszyny, w tym kwestie bezpieczeństwa, ale robię, co chcę z maszyną).

Po drugie, zobaczę do czego są przyzwyczajeni i sprawię, że to zadziała (potrzebujesz FORTRANU? Skonfigurujemy go. Potrzebujesz C ++? Żaden problem. Mathematica? OK, kupimy licencję). Następnie zobacz, ilu z nich chciałoby nauczyć się „dodatkowych narzędzi”, które pomogłyby im być bardziej produktywnymi (nie mów „innych” narzędzi. Powiedz „dodatkowe”, aby nikt nie „stracił” lub „pozwolił”) go ”lub cokolwiek). Zacznij od redaktorów, zobacz, czy są grupy, które chciałyby używać VCS do synchronizacji swojej pracy (hej, możesz zostać w domu i wysłać swój kod przez SVN lub GIT - czy to nie byłoby świetne?) I tak dalej. Nie narzucaj - pokaż przykłady, jak fajne są te narzędzia. Przeprowadź analizę danych za pomocą języka R i pokaż im, jakie to proste. Pokaż ładne grafiki i wyjaśnij, w jaki sposób je utworzyłeś (ale zacznij od prostych przykładów,


2

Sugerowałbym F # jako potencjalnego kandydata do wykonywania manipulacji związanych z nauką, biorąc pod uwagę jego silne semantyczne powiązania z konstrukcjami matematycznymi.

Również wsparcie dla jednostek miary, o czym tutaj napisano , ma duży sens dla zapewnienia prawidłowego tłumaczenia między modelem matematycznym a kodem źródłowym implementacji.


1

Przede wszystkim zdecydowanie wybrałbym język skryptowy, aby uniknąć konieczności wyjaśniania wielu dodatkowych rzeczy (na przykład ręczne zarządzanie pamięcią jest - w większości - ok, jeśli piszesz rzeczy niskopoziomowe, wrażliwe na wydajność, ale dla kogoś, kto po prostu chce używać komputera jako ulepszonego kalkulatora naukowego, to zdecydowanie przesada). Sprawdź też, czy jest coś konkretnego dla Twojej domeny (podobnie jak R w przypadku statystyk). Ma to tę zaletę, że już pracuje z pojęciami znanymi użytkownikom i posiada wyspecjalizowany kod do określonych sytuacji (na przykład obliczanie odchyleń standardowych, stosowanie testów statystycznych itp. W przypadku R).

Jeśli chcesz użyć bardziej ogólnego języka skryptowego, wybrałbym Python. Dwie rzeczy to:

  • Interaktywna powłoka, w której możesz eksperymentować
  • Jego jasna (choć czasami długa) składnia

Dodatkową zaletą jest to, że ma biblioteki do większości rzeczy, które chciałbyś z nim zrobić.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.