Praktik untuk pemrograman di lingkungan ilmiah? [Tutup]

91

Latar Belakang

Tahun lalu, saya magang di kelompok penelitian fisika di sebuah universitas. Dalam grup ini, kami kebanyakan menggunakan LabVIEW untuk menulis program untuk mengontrol pengaturan kami, melakukan akuisisi data dan menganalisis data kami. Untuk dua tujuan pertama, itu berfungsi cukup baik, tetapi untuk analisis data, ini sangat menyakitkan. Selain itu, semua orang kebanyakan otodidak, jadi kode yang ditulis biasanya cukup berantakan (tidak heran jika setiap PhD dengan cepat memutuskan untuk menulis ulang semuanya dari awal). Kontrol versi tidak diketahui, dan tidak mungkin disiapkan karena peraturan perangkat lunak dan jaringan yang ketat dari departemen TI.

Sekarang, hal-hal yang benar-benar berjalan baik-baik saja, tetapi bagaimana orang-orang di bidang ilmu alam melakukan pengembangan perangkat lunak mereka?

Pertanyaan

Beberapa pertanyaan konkret:

  • Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, terutama analisis data? Perpustakaan apa? (misalnya, apa yang Anda gunakan untuk membuat plot?)
  • Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?
  • Apakah Anda memiliki sesuatu seperti kontrol versi, dan pelacakan bug?
  • Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (terutama fisikawan adalah orang yang keras kepala!)

Ringkasan jawaban sejauh ini

Jawaban (atau interpretasi saya tentang mereka) sejauh ini: (2008-10-11)

  • Bahasa / paket yang tampaknya paling banyak digunakan:
  • Kontrol versi digunakan oleh hampir semua responden; pelacakan bug dan proses lainnya jauh lebih jarang.
  • Kursus Pertukangan Perangkat Lunak adalah cara yang baik untuk mengajarkan teknik pemrograman dan pengembangan kepada ilmuwan.
  • Bagaimana cara meningkatkan sesuatu?
    • Jangan memaksa orang untuk mengikuti protokol yang ketat.
    • Siapkan lingkungan Anda sendiri, dan tunjukkan manfaatnya kepada orang lain. Bantu mereka untuk mulai bekerja dengan kontrol versi, pelacakan bug, dll. Sendiri.
    • Meninjau kode orang lain dapat membantu, tetapi ketahuilah bahwa tidak semua orang dapat menghargainya.
onnodb
sumber
2
bacaan terkait: nature.com/news/2010/101013/full/467775a.html
Tobias Kienzler

Jawaban:

27

Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Saya dulu bekerja untuk Enthought , sponsor korporat utama SciPy . Kami bekerja sama dengan ilmuwan dari perusahaan yang mengontrak Enthought untuk pengembangan perangkat lunak khusus. Python / SciPy tampaknya merupakan lingkungan yang nyaman bagi para ilmuwan. Jauh lebih tidak menakutkan untuk memulai daripada mengatakan C ++ atau Java jika Anda seorang ilmuwan tanpa latar belakang perangkat lunak.

The Enthought Python Distribusi datang dengan semua perpustakaan komputasi ilmiah termasuk analisis, merencanakan, visualation 3D, dll

Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?

Enthought memang menawarkan pelatihan SciPy dan komunitas SciPy cukup baik dalam menjawab pertanyaan di milis.

Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Ya, dan ya (Subversion dan Trac). Karena kami bekerja secara kolaboratif dengan para ilmuwan (dan biasanya dari jarak jauh), kontrol versi dan pelacakan bug sangat penting. Perlu beberapa pelatihan agar beberapa ilmuwan menginternalisasi manfaat kontrol versi.

Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!)

Pastikan mereka terbiasa dengan rantai alat. Dibutuhkan investasi di depan, tetapi itu akan membuat mereka merasa kurang cenderung untuk menolaknya demi sesuatu yang lebih akrab (Excel). Ketika alat membuat mereka gagal (dan mereka akan melakukannya), pastikan mereka memiliki tempat untuk mencari bantuan - milis, grup pengguna, ilmuwan lain, dan pengembang perangkat lunak dalam organisasi. Semakin banyak bantuan untuk membuat mereka kembali melakukan fisika, semakin baik.

Brandon DuRette
sumber
21

Kursus Pertukangan Perangkat Lunak ditujukan secara khusus untuk orang-orang yang melakukan komputasi ilmiah dan bertujuan untuk mengajarkan dasar-dasar dan pelajaran rekayasa perangkat lunak, dan cara terbaik untuk menerapkannya pada proyek.

Ini mencakup topik seperti kontrol versi, debugging, pengujian, skrip, dan berbagai masalah lainnya.

Saya telah mendengarkan sekitar 8 atau 9 ceramah dan merasa sangat direkomendasikan.

Sunting: MP3 dari kuliah tersedia juga.

kaybenleroll
sumber
16

Fisika nuklir / partikel di sini.

  • Pekerjaan pemrograman utama dulu kebanyakan dilakukan di Fortran menggunakan CERNLIB (PAW, MINUIT, ...) dan GEANT3 , belakangan ini sebagian besar dilakukan di C ++ dengan ROOT dan Geant4 . Ada sejumlah pustaka dan alat lain dalam penggunaan khusus, dan LabVIEW melihat beberapa penggunaan di sana-sini.
  • Akuisisi data di akhir bisnis saya ini sering kali berarti pekerjaan tingkat rendah. Seringkali di C, kadang-kadang bahkan dalam perakitan, tetapi ini sekarat karena perangkat keras menjadi lebih mampu. Di sisi lain, banyak papan sekarang dibangun dengan FPGA yang membutuhkan ...
  • Satu kali, antarmuka grafis, dll. Menggunakan hampir semua hal ( Tcl / Tk dulu besar, dan saya telah melihat lebih banyak Perl / Tk dan Python / Tk akhir-akhir ini) termasuk sejumlah paket yang sebagian besar ada di dalam komunitas fisika partikel .
  • Banyak orang yang menulis kode memiliki sedikit atau tidak ada pelatihan formal, dan proses disebarkan dengan sangat tidak merata oleh tradisi lisan, tetapi sebagian besar pemimpin kelompok perangkat lunak menanggapi proses dengan serius dan membaca sebanyak yang diperlukan untuk menutupi kekurangan mereka di bidang ini.
  • Kontrol versi untuk alat utama ada di mana-mana. Tetapi banyak programmer individu mengabaikannya untuk tugas-tugas kecil mereka. Alat pelacakan bug formal kurang umum, seperti pembangunan malam hari, pengujian unit, dan pengujian regresi.

Untuk meningkatkan hal-hal:

  1. Dapatkan sisi baik dari para pemimpin perangkat lunak lokal
  2. Terapkan proses yang ingin Anda gunakan di area Anda sendiri, dan dorong orang-orang yang Anda izinkan untuk menggunakannya juga.
  3. Tunggu. Fisikawan adalah orang-orang empiris. Jika membantu, mereka (pada akhirnya!) Akan menyadarinya.

Satu lagi saran untuk memperbaiki sesuatu.

  1. Luangkan sedikit waktu untuk membantu siapa pun yang bekerja dengan Anda secara langsung. Tinjau kode mereka. Ceritakan kepada mereka tentang kompleksitas algoritmik / pembuatan kode / KERING atau hal dasar apa pun yang tidak pernah mereka pelajari karena beberapa profesor pernah melemparkan buku Fortran kepada mereka dan berkata "buat itu berhasil". Indoktrinasi mereka tentang masalah proses. Mereka adalah orang pintar, dan mereka akan belajar jika Anda memberi mereka kesempatan.
dmckee --- mantan moderator anak kucing
sumber
11

Ini mungkin sedikit bersinggungan, tapi semoga relevan.

Saya dulu bekerja untuk Instrumen Nasional, Litbang, tempat saya menulis perangkat lunak untuk perangkat NI RF & Komunikasi. Kami cukup sering menggunakan LabVIEW, dan berikut adalah praktik yang kami ikuti:

  1. Kontrol sumber. NI menggunakan Perforce. Kami melakukan hal biasa - cabang dev / trunk, integrasi berkelanjutan, pekerjaan.
  2. Kami menulis rangkaian pengujian otomatis.
  3. Kami memiliki beberapa orang yang datang dengan latar belakang pemrosesan sinyal dan komunikasi. Kami biasanya memiliki tinjauan kode rutin, dan dokumen praktik terbaik untuk memastikan kodenya sesuai dengan standar.
  4. Terlepas dari peninjauan kode, ada beberapa kejadian ketika "orang perangkat lunak", seperti saya harus menulis ulang beberapa kode ini untuk efisiensi.
  5. Saya tahu persis apa yang Anda maksud tentang orang yang keras kepala! Kami memiliki orang-orang yang dulu berpikir bahwa menunjukkan potensi peningkatan kinerja dalam kode mereka adalah penghinaan pribadi langsung! Tak perlu dikatakan bahwa ini membutuhkan manajemen yang baik. Saya pikir cara terbaik untuk menghadapi orang-orang ini adalah dengan perlahan, tidak memaksakan diri untuk perubahan dan jika perlu bersiaplah untuk melakukan pekerjaan kotor. [Contoh: tulis rangkaian pengujian untuk kodenya].
Pramod
sumber
9

Saya bukan ilmuwan 'alami' (saya belajar transportasi), tetapi saya seorang akademisi yang menulis banyak perangkat lunak saya sendiri untuk analisis data. Saya mencoba menulis sebanyak yang saya bisa dengan Python, tetapi kadang-kadang saya terpaksa menggunakan bahasa lain saat saya bekerja untuk memperluas atau menyesuaikan alat perangkat lunak yang ada. Hanya ada sedikit pelatihan pemrograman di bidang saya. Kebanyakan orang otodidak, atau mempelajari keterampilan pemrograman mereka dari kelas yang diambil sebelumnya atau di luar disiplin.

Saya penggemar berat kontrol versi. Saya menggunakan Vault yang berjalan di server rumah saya untuk semua kode untuk disertasi saya. Saat ini saya mencoba meminta departemen untuk menyiapkan server Subversion, tetapi tebakan saya adalah saya akan menjadi satu-satunya yang menggunakannya, setidaknya pada awalnya. Saya telah bermain-main sedikit dengan FogBugs, tetapi tidak seperti kontrol versi, saya rasa itu tidak terlalu berguna untuk tim satu orang.

Mengenai mendorong orang lain untuk menggunakan kontrol versi dan sejenisnya, itulah masalah yang saya hadapi sekarang. Saya berencana memaksa mahasiswa pascasarjana saya untuk menggunakannya dalam proyek penelitian yang mereka lakukan untuk saya, dan mendorong mereka untuk menggunakannya untuk penelitian mereka sendiri. Jika saya mengajar kelas yang melibatkan pemrograman, saya mungkin akan memaksa siswa untuk menggunakan kontrol versi di sana juga (menilai mereka berdasarkan apa yang ada di repositori). Sejauh kolega saya dan mahasiswa pascasarjana mereka pergi, yang benar-benar dapat saya lakukan adalah menyediakan server dan mengandalkan persuasi lembut dan memberikan contoh yang baik. Sejujurnya, pada titik ini saya pikir lebih penting untuk membuat mereka melakukan backup rutin daripada mendapatkannya di kontrol sumber (beberapa orang membawa satu-satunya salinan data penelitian mereka pada USB flash drive).

Chris Upchurch
sumber
7

1.) Bahasa skrip sangat populer akhir-akhir ini untuk banyak hal karena perangkat keras yang lebih baik. Perl / Python / Lisp lazim untuk aplikasi ringan (otomatisasi, komputasi ringan); Saya melihat banyak Perl di tempat kerja saya (EM komputasi) karena kami menyukai Unix / Linux. Untuk urusan kinerja, C / C ++ / Fortran biasanya digunakan. Untuk komputasi paralel, kita biasanya secara manual memparalelkan berjalan di EM sebagai lawan program yang secara implisit melakukannya (yaitu membagi pekerjaan dengan sudut pandang saat menghitung penampang radar).

2.) Kami hanya memasukkan orang ke dalam campuran di sini. Banyak kode yang kita miliki sangat berantakan, tetapi para ilmuwan biasanya adalah kelompok yang tidak peduli dengan hal semacam itu. Tidak ideal, tetapi kami memiliki banyak hal untuk disampaikan dan kami sangat kekurangan staf. Kami perlahan membaik.

3.) Kami menggunakan SVN; namun, kami tidak memiliki perangkat lunak pelacak bug. Tentang hal terbaik yang didapatnya bagi kami adalah file txt yang memberi tahu Anda di mana bug tertentu berada.

4.) Saran saya untuk menerapkan praktik terbaik bagi para ilmuwan: lakukan perlahan . Sebagai ilmuwan, kami biasanya tidak mengirimkan produk. Tak seorang pun dalam sains membuat nama untuk dirinya sendiri dengan memiliki kode yang bersih dan dapat dipelihara . Biasanya mereka mendapatkan pengakuan dari hasil kode itu. Mereka perlu melihat pembenaran untuk menghabiskan waktu mempelajari praktik perangkat lunak. Perkenalkan konsep-konsep baru secara perlahan dan cobalah untuk membuat mereka mengikuti; mereka ilmuwan, jadi setelah bukti empiris mereka sendiri menegaskan kegunaan hal-hal seperti kontrol versi, mereka akan mulai menggunakannya sepanjang waktu!

temp2290
sumber
5

Saya seorang fisikawan yang bekerja di bidang fisika materi terkondensasi, membangun model klasik dan kuantum.

Bahasa:

  • C ++ - sangat serbaguna: dapat digunakan untuk apa saja, kecepatan yang bagus, tetapi bisa sedikit merepotkan jika menyangkut MPI
  • Oktaf - bagus untuk beberapa kalkulasi tambahan, sangat nyaman dan produktif

Perpustakaan:

  • Armadillo / Blitz ++ - abstraksi larik / matriks / kubus cepat untuk C ++
  • Eigen / Armadillo - aljabar linier
  • GSL - untuk digunakan dengan C
  • LAPACK / BLAS / ATLAS - sangat besar dan cepat, tetapi kurang nyaman (dan ditulis dalam bahasa FORTRAN)

Grafik:

  • GNUPlot - memiliki keluaran yang sangat bersih dan rapi, tetapi terkadang tidak produktif
  • Asal - sangat nyaman untuk merencanakan

Alat pengembangan:

  • Vim + plugin - sangat cocok untuk saya
  • GDB - alat debugging yang hebat saat bekerja dengan C / C ++
  • Code :: Blocks - Saya menggunakannya selama beberapa waktu dan merasa cukup nyaman, tapi Vim masih lebih baik menurut saya.
Roman
sumber
Jika c ++ Anda berjalan lebih lambat dari c Anda, Anda salah menggunakannya. Tentu saja, itu mudah dilakukan, tapi itu soal lain. :: Bekerja dengan c ++ selama sekitar 7 tahun sekarang, dan masih belajar hal-hal baru sepanjang waktu ::
dmckee --- ex-moderator kitten
Saya benar-benar mencatat penggemar berat C ++, tetapi sulit untuk melihat bagaimana itu bisa "jauh lebih lambat" daripada C atau Fortran. Kecuali jika Anda menyertakan varian C untuk HPC seperti UPC dan C untuk CUDA.
Suugaku
4

Saya bekerja sebagai fisikawan di universitas Inggris.

Mungkin saya harus menekankan bahwa area penelitian yang berbeda memiliki penekanan yang berbeda pada pemrograman. Fisikawan partikel (seperti dmckee) melakukan pemodelan komputasi hampir secara eksklusif dan dapat berkolaborasi dalam proyek perangkat lunak besar, sedangkan orang-orang di bidang seperti milik saya (materi padat) menulis kode relatif jarang. Saya menduga sebagian besar ilmuwan termasuk dalam kelompok terakhir. Saya akan mengatakan keterampilan pengkodean biasanya dipandang berguna dalam fisika, tetapi tidak penting, seperti keterampilan fisika / matematika dipandang berguna bagi pemrogram tetapi tidak penting. Dengan pemikiran ini ...

  • Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Umumnya analisis data dan plotting dilakukan dengan menggunakan paket analisis data umum seperti IGOR Pro , ORIGIN , Kaleidegraph yang dapat dianggap sebagai 'Excel plus'. Paket ini biasanya memiliki bahasa skrip yang dapat digunakan untuk mengotomatiskan. Analisis yang lebih spesialis mungkin memiliki utilitas khusus untuk pekerjaan yang umumnya telah ditulis lama sekali, tidak ada yang memiliki sumbernya dan cukup bermasalah. Beberapa tipe teknisi lainnya mungkin menggunakan bahasa yang telah disebutkan (Python, R, MatLab dengan Gnuplot untuk plotting).

Perangkat lunak kontrol biasanya dilakukan di LabVIEW, meskipun sebenarnya kami menggunakan Delphi yang agak tidak biasa.

  • Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?

Saya telah menghadiri seminar tentang komputasi grid, visualisasi 3D, peningkatan pembelajaran, dll. Yang diberikan oleh kedua universitas yang pernah saya ikuti. Sebagai seorang sarjana kami diajari VBA untuk Excel dan MatLab tetapi C / MatLab / LabVIEW lebih umum.

  • Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Tidak, meskipun orang memiliki pengaturan pengembangan pribadi. Basis kode kami ada di folder bersama di 'server' yang selalu diperbarui dengan alat sinkronisasi.

  • Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!)

Satu langkah pada satu waktu! Saya mencoba mengganti folder bersama dengan sesuatu yang sedikit lebih solid, mungkin menemukan klien SVN yang meniru perilaku alat sinkronisasi saat ini akan membantu.

Saya akan mengatakan meskipun secara keseluruhan, untuk sebagian besar proyek ilmu pengetahuan alam, waktu biasanya lebih baik dihabiskan untuk melakukan penelitian!

Brendan
sumber
Terima kasih telah membagikan pemikiran Anda! Saya setuju bahwa "waktu biasanya lebih baik dihabiskan untuk melakukan penelitian", tetapi melihat berapa banyak waktu yang sering hilang karena kurangnya hal-hal seperti kontrol versi dan pelatihan dasar dalam pemrograman, saya akan mengatakan para ilmuwan meremehkan masalah ini.
onnodb
4

Mantan fisikawan akademis dan sekarang fisikawan industri Inggris di sini:

Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Saya terutama menggunakan MATLAB hari ini (mudah untuk mengakses fungsi visualisasi dan matematika). Saya dulu sering menggunakan Fortran dan IDL . Saya telah menggunakan C (tapi saya lebih merupakan pembaca daripada penulis C), makro Excel (jelek dan membingungkan). Saat ini saya harus bisa membaca Java dan C ++ (tetapi saya tidak bisa memprogramnya) dan saya juga telah meretas Python. Untuk hiburan saya sendiri, saya sekarang melakukan beberapa pemrograman dalam C # (terutama untuk mendapatkan portabilitas / biaya rendah / antarmuka cantik). Saya dapat menulis Fortran dengan hampir semua bahasa yang saya gunakan ;-)

Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?

Kebanyakan (semua?) Kursus fisika sarjana akan memiliki kursus pemrograman kecil biasanya di C, Fortran atau MATLAB tetapi itu adalah dasar-dasar yang sebenarnya. Saya benar-benar ingin mendapatkan pelatihan di bidang rekayasa perangkat lunak di beberapa titik (kontrol revisi / pengujian / perancangan sistem skala menengah)

Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Saya mulai menggunakan Subversion / TortoiseSVN relatif baru-baru ini. Grup yang pernah saya tangani sebelumnya telah menggunakan kontrol revisi. Saya tidak tahu kelompok akademis mana pun yang menggunakan perangkat lunak pelacakan bug formal. Saya masih tidak menggunakan pengujian sistematis apa pun.

Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!)

Saya akan mencoba memperkenalkan beberapa ide rekayasa perangkat lunak di tingkat sarjana dan kemudian memperkuatnya dengan praktik di tingkat pascasarjana, juga memberikan petunjuk ke sumber daya seperti kursus Pertukangan Perangkat Lunak yang disebutkan di atas.

Saya berharap bahwa sebagian besar fisikawan akademis akan menulis perangkat lunak (meskipun tidak semuanya) dan mereka sangat membutuhkan setidaknya pengenalan ide dalam rekayasa perangkat lunak.

Ian Hopkinson
sumber
4

Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Python, NumPy dan pylab (plotting).

Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?

Tidak, tapi saya bekerja di lab penelitian multimedia, jadi hampir semua orang memiliki latar belakang ilmu komputer.

Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Ya, Subversion untuk kontrol versi, Trac untuk pelacakan bug dan wiki. Anda bisa mendapatkan hosting bug tracker / kontrol versi gratis dari http://www.assembla.com/ jika TOS mereka sesuai dengan proyek Anda.

Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!).

Pastikan infrastruktur disiapkan dan dipelihara dengan baik dan cobalah untuk menjual manfaat dari kendali sumber.

Aaron Maenpaa
sumber
3

Saya seorang ahli statistik di sebuah universitas di Inggris. Umumnya orang di sini menggunakan R untuk analisis data, sangat mudah mempelajarinya jika Anda tahu C / Perl. Kekuatan sebenarnya adalah cara Anda mengimpor dan memodifikasi data secara interaktif. Sangat mudah untuk mengambil beberapa file CSV (atau Excel) dan menggabungkannya, membuat kolom baru berdasarkan yang lain dan kemudian memasukkannya ke dalam GLM, GAM atau model lainnya. Plotting juga sepele dan tidak membutuhkan pengetahuan tentang bahasa baru (seperti PGPLOT atau GNUPLOT.) Tentu saja, Anda juga memiliki keuntungan memiliki banyak fitur bawaan (dari hal-hal sederhana seperti mean, deviasi standar, dll. jalan ke jaringan saraf, splines, dan plot GL.)

Karena itu, ada beberapa masalah. Dengan dataset yang sangat besar R bisa menjadi sangat lambat (saya hanya benar-benar melihat ini dengan> 50,000x30 dataset) dan karena itu ditafsirkan Anda tidak mendapatkan keuntungan dari Fortran / C dalam hal ini. Tapi, Anda bisa (dengan sangat mudah) memanggil R untuk memanggil pustaka bersama C dan Fortran (baik dari sesuatu seperti netlib atau yang Anda tulis sendiri.) Jadi, alur kerja yang biasa adalah:

  • Cari tahu apa yang harus dilakukan.
  • Prototipe kode di R.
  • Jalankan beberapa analisis awal.
  • Tulis ulang kode lambat ke C atau Fortran dan panggil dari R.

Yang bekerja sangat baik untuk saya.

Saya adalah satu-satunya orang di departemen saya (dari> 100 orang) yang menggunakan kontrol versi (dalam kasus saya menggunakan git dengan githuib.com.) Ini agak mengkhawatirkan, tetapi mereka sepertinya tidak tertarik untuk mencobanya keluar dan puas dengan melewatkan file zip (yuck.)

Saran saya adalah terus menggunakan LabView untuk akuisisi (dan mungkin mencoba membuat rekan kerja Anda menyetujui seperangkat alat untuk akuisisi dan membuatnya tersedia untuk semua) dan kemudian pindah untuk mengekspor data ke dalam CSV (atau serupa) dan melakukan analisis di R. Benar-benar tidak ada gunanya menemukan kembali roda dalam hal ini.

David Lawrence Miller
sumber
2

Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Departemen fisika sarjana saya mengajar kelas LabVIEW dan menggunakannya secara luas dalam proyek penelitiannya.

Alternatif lainnya adalah MATLAB , yang saya tidak punya pengalaman. Ada kamp untuk salah satu produk; masing-masing memiliki kelebihan / kekurangan. Bergantung pada jenis masalah yang perlu Anda selesaikan, satu paket mungkin lebih disukai daripada yang lain.

Mengenai analisis data, Anda dapat menggunakan pemecah angka apa pun yang Anda inginkan. Idealnya, Anda dapat melakukan kalkulasi keras dalam bahasa X dan memformat keluaran untuk dipetakan dengan baik di Excel, Mathcad , Mathematica , atau apa pun sistem ploting flavor du jour. Jangan berharap standarisasi di sini.

Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Melihat ke belakang, kami tidak melakukannya, dan akan lebih mudah bagi kami semua jika kami melakukannya. Tidak ada yang seperti merusak segalanya dan berjuang berjam-jam untuk memperbaikinya!

Gunakan kontrol sumber untuk kode umum apa pun. Dorong individu untuk menulis kode mereka dengan cara yang dapat dibuat lebih umum. Ini benar-benar hanya praktik terbaik pengkodean. Sungguh, Anda harus meminta mereka mengajar (atau mengambil) kelas ilmu komputer sehingga mereka bisa memahami dasar-dasarnya.

Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!)

Ada pemisahan yang jelas antara akuisisi data (DAQ) dan analisis data. Artinya, dimungkinkan untuk membakukan pada DAQ dan kemudian memungkinkan para ilmuwan untuk bermain-main dengan data dalam program pilihan mereka.

Busur daft
sumber
2

Pilihan bagus lainnya adalah Scilab . Ini memiliki modul grafis ala LabVIEW , memiliki bahasa pemrograman sendiri dan Anda juga dapat menyematkan kode Fortran dan C, misalnya. Ini digunakan di sektor publik dan swasta, termasuk perusahaan industri besar. Dan itu gratis.

Tentang pembuatan versi, beberapa lebih memilih Mercurial , karena memberikan lebih banyak kebebasan untuk mengelola dan menentukan repositori. Namun, saya tidak memiliki pengalaman dengannya.

Untuk merencanakan saya menggunakan Matplotlib . Saya akan segera membuat animasi, dan saya telah melihat hasil yang bagus menggunakan MEncoder . Berikut adalah contoh termasuk trek audio.

Terakhir, saya sarankan untuk menggunakan modular, yaitu mencoba menyimpan potongan kode utama di file yang berbeda, sehingga revisi kode, pemahaman, pemeliharaan, dan peningkatan akan lebih mudah. Saya telah menulis, misalnya, modul Python untuk pengujian integritas file, yang lain untuk urutan pemrosesan gambar, dll.

Anda juga harus mempertimbangkan pengembangan dengan menggunakan debugger yang memungkinkan Anda memeriksa konten variabel pada breakpoint yang dapat diatur dalam kode, alih-alih menggunakan baris cetak. Saya telah menggunakan Eclipse untuk pengembangan Python dan Fortran (meskipun saya mendapat bug palsu yang mengkompilasi program pendek Fortran dengannya, tetapi mungkin konfigurasi yang buruk) dan saya mulai menggunakan Eric IDE untuk Python. Ini memungkinkan Anda untuk men-debug, mengelola versi dengan SVN , memiliki konsol tertanam, dapat melakukan refactoring dengan Bicycle Repair Man (dapat menggunakan yang lain juga), Anda memiliki Unittest, dll. Alternatif yang lebih ringan untuk Python adalah IDLE , disertakan dengan Python sejak versi 2.3.

Sebagai sedikit petunjuk, saya juga menyarankan:

  • Tidak menggunakan variabel karakter tunggal. Ketika Anda ingin mencari penampilan, Anda akan mendapatkan hasil di mana-mana. Beberapa orang berpendapat bahwa IDE yang layak membuat ini lebih mudah, tetapi Anda akan bergantung pada memiliki akses permanen ke IDE. Bahkan menggunakan ii, jj dan kk sudah cukup, meskipun pilihan ini akan tergantung pada bahasa Anda. (Vokal ganda akan kurang berguna jika komentar kode dibuat dalam bahasa Estonia, misalnya).

  • Mengomentari kode dari awal.

  • Untuk aplikasi kritis terkadang lebih baik mengandalkan versi bahasa / kompiler yang lebih lama (rilis utama), lebih stabil dan lebih baik di-debug. Tentu saja Anda dapat memiliki kode yang lebih dioptimalkan di versi yang lebih baru, memperbaiki bug, dll, tetapi saya berbicara tentang menggunakan Fortran 95 daripada 2003, Python 2.5.4 daripada 3.0, atau lebih. (Khususnya ketika versi baru merusak kompatibilitas ke belakang.) Banyak perbaikan biasanya menimbulkan banyak bug. Namun, ini akan tergantung pada kasus aplikasi tertentu! Perhatikan bahwa ini adalah pilihan pribadi, banyak orang dapat membantahnya.

  • Gunakan cadangan yang berlebihan dan otomatis! (Dengan kontrol versi).

David
sumber
2

Tentunya, gunakan Subversion untuk menyimpan salinan snapshot kode sumber yang terkini, sedang dalam proses, dan stabil. Ini termasuk C ++, Java dll. Untuk perangkat lunak buatan sendiri, dan skrip kilat untuk pemrosesan satu kali.

Dengan kecenderungan kuat dalam sains dan teknik terapan ke arah metodologi pengembangan "koboi tunggal", praktik biasa mengatur repositori ke dalam trunk, tag, dan apa pun itu - jangan repot-repot! Ilmuwan dan teknisi lab mereka suka memutar kenop, menggoyangkan elektroda, dan mengejar kebocoran vakum. Pekerjaan yang cukup membuat semua orang setuju, katakan Python / NumPy atau ikuti beberapa konvensi penamaan; lupa mencoba membuat mereka mengikuti praktik dan konvensi pengembang perangkat lunak misterius.

DarenW
sumber
2

Untuk manajemen kode sumber, sistem terpusat seperti Subversion lebih unggul untuk penggunaan ilmiah karena titik kebenaran tunggal (SPOT) yang jelas. Pencatatan perubahan dan kemampuan mengingat versi file apa pun, tanpa harus mencari tahu di mana menemukan sesuatu, memiliki keuntungan penyimpanan catatan yang sangat besar. Alat seperti Git dan Monotone : ya ampun kekacauan yang bisa kubayangkan akan menyusul! Memiliki catatan yang jelas tentang versi skrip hack-job yang digunakan saat bermain-main dengan sensor baru ketika Higgs boson lewat atau supernova meledak, akan mengarah pada kebahagiaan.

DarenW
sumber
Pernahkah Anda mencoba menggunakan sistem kontrol versi terdistribusi?
Andrew Grimm
1
Hampir semua sistem terdistribusi membuatnya semudah yang terpusat. Anda hanya merekam ID komit (dalam istilah Git) sebagai ganti nomor revisi (seperti dalam SVN).
Phil Miller
2

Bahasa / lingkungan apa yang telah Anda gunakan untuk mengembangkan perangkat lunak ilmiah, khususnya. analisis data? Perpustakaan apa? (Misalnya, apa yang Anda gunakan untuk merencanakan?)

Bahasa yang saya gunakan untuk numerik dan hal-hal yang berhubungan dengan sicentific:

  • C (pengembangan lambat, terlalu banyak debugging, hampir tidak mungkin untuk menulis kode yang dapat digunakan kembali)
  • C ++ (dan saya belajar untuk membencinya - pengembangan tidak selambat C, tetapi bisa menyebalkan. Template dan kelas awalnya keren, tetapi setelah beberapa saat saya menyadari bahwa saya terus melawan mereka dan menemukan solusi untuk masalah desain bahasa
  • Lisp umum, yang OK, tetapi tidak banyak digunakan untuk komputasi Sci. Tidak mudah diintegrasikan dengan C (jika dibandingkan dengan bahasa lain), tetapi berfungsi
  • Skema. Yang ini menjadi pilihan pribadi saya.

Editor saya adalah Emacs, meskipun saya menggunakan vim untuk hal-hal cepat seperti mengedit file konfigurasi.

Untuk merencanakan, saya biasanya membuat file teks dan memasukkannya ke gnuplot.

Untuk analisis data, saya biasanya membuat file teks dan menggunakan GNU R.

Saya melihat banyak orang di sini menggunakan FORTRAN (kebanyakan 77, tetapi sekitar 90), banyak Java dan beberapa Python. Saya tidak suka itu, jadi saya tidak menggunakannya.

Apakah ada pelatihan untuk orang-orang yang tidak memiliki latar belakang pemrograman yang signifikan?

Saya pikir ini tidak berlaku untuk saya, karena saya lulus di CS - tetapi di tempat saya bekerja tidak ada pelatihan formal, tetapi orang-orang (Insinyur, Fisikawan, Matematikawan) saling membantu.

Apakah Anda memiliki sesuatu seperti kontrol versi, pelacakan bug?

Kontrol versi sangatlah penting! Saya menyimpan kode dan data saya di tiga mesin yang berbeda, di dua sisi dunia yang berbeda - dalam repositori Git. Saya menyinkronkannya sepanjang waktu (jadi saya memiliki kontrol versi dan cadangan!) Saya tidak melakukan kontrol bug, meskipun saya mungkin mulai melakukannya. Tapi kolega saya sama sekali tidak BTS atau VCS.

Bagaimana Anda mencoba menciptakan lingkungan yang layak untuk pemrograman, tanpa terlalu banyak menghalangi individu ilmuwan (khususnya fisikawan adalah orang yang keras kepala!)

Pertama, saya akan memberi mereka kebebasan sebanyak mungkin. (Di Universitas tempat saya bekerja, saya dapat memilih antara meminta seseorang menginstal Ubuntu atau Windows, atau menginstal OS saya sendiri - saya memilih untuk menginstal OS saya sendiri. Saya tidak mendapat dukungan dari mereka dan saya bertanggung jawab atas apa pun yang terjadi dengan mesin saya, termasuk masalah keamanan, tetapi saya melakukan apa pun yang saya inginkan dengan mesin tersebut).

Kedua, saya akan melihat apa yang biasa mereka gunakan, dan membuatnya berfungsi (perlu FORTRAN? Kami akan menyiapkannya. Perlu C ++? Tidak masalah. Mathematica? Oke, kami akan membeli lisensi). Kemudian lihat berapa banyak dari mereka yang ingin mempelajari "alat tambahan" untuk membantu mereka menjadi lebih produktif (jangan katakan alat "lain". Ucapkan "tambahan", sehingga tidak ada orang yang akan terlihat "kehilangan" atau "membiarkan pergi "atau apa pun). Mulailah dengan editor, lihat apakah ada grup yang ingin menggunakan VCS untuk menyinkronkan pekerjaan mereka (hei, Anda dapat tinggal di rumah dan mengirim kode Anda melalui SVN atau GIT - bukankah itu bagus?) Dan seterusnya. Jangan memaksakan - tunjukkan contoh betapa kerennya alat-alat ini. Buat analisis data menggunakan R, dan tunjukkan kepada mereka betapa mudahnya melakukannya. Tunjukkan grafik yang bagus, dan jelaskan bagaimana Anda membuatnya (tapi mulailah dengan contoh sederhana,

Jay
sumber
2

Saya akan menyarankan F # sebagai kandidat potensial untuk melakukan manipulasi yang berhubungan dengan sains mengingat ikatan semantiknya yang kuat dengan konstruksi matematika.

Selain itu, dukungannya untuk unit pengukuran, seperti yang tertulis di sini sangat masuk akal untuk memastikan terjemahan yang tepat antara model matematika dan kode sumber implementasi.

Norman H.
sumber
1

Pertama-tama, saya pasti akan menggunakan bahasa scripting untuk menghindari keharusan menjelaskan banyak hal tambahan (misalnya manajemen memori manual - kebanyakan - ok jika Anda menulis hal-hal yang sensitif kinerja tingkat rendah, tetapi untuk seseorang yang baru saja ingin menggunakan komputer sebagai kalkulator ilmiah yang ditingkatkan, itu pasti berlebihan). Selain itu, lihat-lihat apakah ada sesuatu yang spesifik untuk domain Anda (seperti R untuk statistik). Ini memiliki keuntungan karena sudah bekerja dengan konsep yang dikenal pengguna dan memiliki kode khusus untuk situasi tertentu (misalnya menghitung deviasi standar, menerapkan uji statistik, dll dalam kasus R).

Jika Anda ingin menggunakan bahasa skrip yang lebih umum, saya akan menggunakan Python. Dua hal yang terjadi di dalamnya adalah:

  • Shell interaktif tempat Anda dapat bereksperimen
  • Sintaksnya jelas (meski terkadang panjang)

Sebagai keuntungan tambahan, ia memiliki perpustakaan untuk sebagian besar hal yang ingin Anda lakukan dengannya.

Grey Panther
sumber