Bilimsel bir ortamda programlama uygulamaları? [kapalı]


91

Arka fon

Geçen yıl bir üniversitede bir fizik araştırma grubunda staj yaptım. Bu grupta, kurulumlarımızı kontrol etmek, veri toplamak ve verilerimizi analiz etmek için programlar yazmak için çoğunlukla LabVIEW'i kullandık . İlk iki amaç için bu gayet iyi çalışıyor, ancak veri analizi için gerçek bir acı. Üstelik, herkes çoğunlukla kendi kendini eğitiyordu, bu nedenle yazılan kod genellikle oldukça karışıktı (her doktora derecesinin hızla her şeyi sıfırdan yazmaya karar vermesine şaşmamalı). Sürüm kontrolü bilinmiyordu ve BT departmanının katı yazılım ve ağ düzenlemeleri nedeniyle kurulması imkansızdı.

Şimdi, işler şaşırtıcı bir şekilde yolunda gitti, ancak doğa bilimlerindeki insanlar yazılım geliştirmelerini nasıl yapıyor?

Sorular

Bazı somut sorular:

  • Bilimsel yazılım geliştirmek için, özellikle veri analizi için hangi dilleri / ortamları kullandınız? Hangi kütüphaneler? (örneğin, çizim için ne kullanıyorsunuz?)
  • Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?
  • Sürüm kontrolü ve hata izleme gibi bir şeyiniz var mıydı?
  • Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır) çok fazla şey yapmadan programlama için iyi bir ortam yaratmaya nasıl çalışırsınız?

Şimdiye kadarki cevapların özeti

Şimdiye kadarki cevaplar (veya benim yorumlamam): (2008-10-11)

  • En yaygın kullanılan diller / paketler:
    • LabVIEW
    • Python
      • ile SciPy , numpy , PyLab vb (ayrıca yüklemeler ve bağlantılar için Brandon'ın yanıtını görün)
    • C / C ++
    • MATLAB
  • Sürüm kontrolü neredeyse tüm katılımcılar tarafından kullanılıyor; hata izleme ve diğer işlemler çok daha az yaygındır.
  • Yazılım Marangozluğu kursu, bilim insanlarına programlama ve geliştirme tekniklerini öğretmenin iyi bir yoludur.
  • Bir şeyler nasıl geliştirilir?
    • İnsanları katı protokollere uymaya zorlamayın.
    • Kendiniz bir ortam oluşturun ve faydalarını başkalarına gösterin. Sürüm kontrolü, hata izleme vb. İle kendilerinin çalışmaya başlamasına yardımcı olun.
    • Başkalarının kodunu gözden geçirmek yardımcı olabilir, ancak herkesin bunu takdir edemeyeceğini unutmayın.

Yanıtlar:


27

Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Ben çalışmak için kullanılan Enthought , birincil kurumsal sponsoru SciPy . Özel yazılım geliştirme için Enthought ile anlaşan firmalardan bilim adamları ile işbirliği yaptık. Python / SciPy, bilim adamları için rahat bir ortam gibi görünüyordu. Yazılım geçmişi olmayan bir bilim adamıysanız, başlamak için C ++ veya Java demekten çok daha az korkutucu.

Enthought Python Dağıtım tüm bilimsel bilgi işlem kütüphaneleri vb 3D visualation, komplo, analiz dahil ile geliyor

Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?

Enthought, SciPy eğitimi sunuyor ve SciPy topluluğu, posta listelerindeki soruları yanıtlama konusunda oldukça iyidir.

Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Evet ve evet (Subversion ve Trac). Bilim insanlarıyla (ve genellikle onlardan uzaktan) işbirliği içinde çalıştığımız için, sürüm kontrolü ve hata izleme çok önemliydi. Bazı bilim adamlarının sürüm kontrolünün faydalarını içselleştirmesini sağlamak biraz koçluk gerektirdi.

Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Alet zincirine aşina olduklarından emin olun. Bir yatırımı önceden alır, ancak daha tanıdık bir şey (Excel) lehine reddetme eğiliminde olduklarını hissetmelerini sağlar. Araçlar başarısız olduğunda (ve yapacaklar), yardım için gidecekleri bir yer olduğundan emin olun - posta listeleri, kullanıcı grupları, kuruluştaki diğer bilim adamları ve yazılım geliştiricileri. Onları fizik yapmaya geri döndürmek için ne kadar çok yardım olursa o kadar iyidir.


21

Yazılım Marangozluğu kursu , özellikle bilimsel bilgi işlem yapan kişilere yöneliktir ve yazılım mühendisliğinin temellerini ve derslerini ve bunları projelere en iyi şekilde nasıl uygulayacaklarını öğretmeyi amaçlamaktadır.

Sürüm kontrolü, hata ayıklama, test etme, komut dosyası oluşturma ve diğer çeşitli konular gibi konuları kapsar.

Yaklaşık 8 veya 9 dersi dinledim ve şiddetle tavsiye edilmesi gerektiğini düşünüyorum.

Düzenleme: Derslerin MP3'leri de mevcuttur .


16

Nükleer / parçacık fiziği burada.

  • Başlıca programlama çalışmaları çoğunlukla yapılması için kullanılan Fortran kullanarak CERNLIB (PAW, MINUIT, ...) ve GEANT3 ile, son zamanlarda çoğunlukla C ++ yapılmıştır KÖK ve Geant4 . Özel kullanımda bir dizi başka kitaplık ve araç vardır ve LabVIEW burada ve orada biraz kullanım görür.
  • Bu işin sonunda veri toplama, genellikle oldukça düşük seviyeli çalışma anlamına geldi. Çoğunlukla C'de, bazen montajda bile, ancak donanım daha yetenekli hale geldikçe bu yok oluyor. Öte yandan, anakartlarından şimdi ile inşa edilmiştir FPGA ler hangi ihtiyaç kapısı twiddling ...
  • Tek seferlik, grafik arayüzler vb. Hemen hemen her şeyi kullanır ( Tcl / Tk eskiden büyüktü ve son zamanlarda daha fazla Perl / Tk ve Python / Tk görüyorum) çoğunlukla parçacık fiziği topluluğunda bulunan bir dizi paket dahil .
  • Kod yazan birçok kişinin resmi eğitimi çok azdır veya hiç yoktur ve süreç sözlü gelenek tarafından çok düzensiz bir şekilde aktarılır, ancak yazılım grubu liderlerinin çoğu süreci ciddiye alır ve bu alandaki eksikliklerini gidermek için gerektiği kadar okur.
  • Ana araçlar için sürüm kontrolü her yerde bulunur. Ancak birçok programcı, daha küçük görevleri için bunu ihmal ediyor. Resmi hata izleme araçları, gecelik derlemeler, birim testleri ve regresyon testleri gibi daha az yaygındır.

İşleri iyileştirmek için:

  1. Yerel yazılım liderlerinin iyi tarafına geçin
  2. Kullanmak istediğiniz süreci kendi alanınızda uygulayın ve izin verdiklerinizi de kullanmaya teşvik edin.
  3. Bekle. Fizikçiler deneysel insanlardır. Eğer yardımı dokunursa, (sonunda!) Fark edeceklerdir.

İşleri iyileştirmek için bir öneri daha.

  1. Doğrudan birlikte çalıştığınız kişilere yardım etmek için biraz zaman ayırın. Kodlarını inceleyin. Onlara algoritmik karmaşıklık / kod üretme / DRY veya hiç öğrenmedikleri temel şeylerden bahsedin çünkü bir profesör onlara bir Fortran kitabı fırlattı ve "çalışmasını sağla" dedi. Onlara süreç meselelerini telkin edin. Onlar akıllı insanlar ve onlara bir şans verirsen öğrenecekler.

11

Bu biraz teğetsel olabilir, ancak umarız alakalı.

NI RF ve İletişim araç takımları için yazılım yazdığım National Instruments, Ar-Ge için çalışıyordum. LabVIEW'i epeyce kullandık ve işte takip ettiğimiz uygulamalar:

  1. Kaynak kontrolü. NI, Perforce kullanıyor. Normal olanı yaptık - dev / trunk dalları, sürekli entegrasyon, işler.
  2. Otomatik test paketleri yazdık.
  3. Sinyal işleme ve iletişim konusunda geçmişe sahip birkaç kişi geldi. Kodlarının uygun olduğundan emin olmak için düzenli kod incelemeleri ve en iyi uygulama belgelerine sahiptik.
  4. Kod incelemelerine rağmen, benim gibi "yazılımcıların" verimlilik için bu kodun bir kısmını yeniden yazmak zorunda kaldığı birkaç durum vardı.
  5. İnatçı insanlar hakkında ne demek istediğini tam olarak biliyorum! Kodlarında potansiyel bir performans artışına işaret etmenin doğrudan kişisel bir hakaret olduğunu düşünen arkadaşlarımız vardı! Bunun iyi bir yönetim gerektirdiğini söylemeye gerek yok. Bu insanlarla başa çıkmanın en iyi yolunun yavaş gitmek, değişiklikler için zorlamak ve gerekirse kirli işleri yapmaya hazır olmak olduğunu düşündüm. [Örnek: kodları için bir test paketi yazın].

9

Ben tam olarak 'doğal' bir bilim adamı değilim (ulaşım üzerine çalışıyorum) ama veri analizi için kendi yazılımımın çoğunu yazan bir akademisyenim. Python'da elimden geldiğince yazmaya çalışıyorum, ancak bazen mevcut bir yazılım aracını genişletmek veya özelleştirmek için çalışırken başka diller kullanmak zorunda kalıyorum. Alanımda çok az programlama eğitimi var. Çoğu insan ya kendi kendine öğrenilir ya da programlama becerilerini daha önce veya disiplinin dışında alınan derslerden öğrenir.

Sürüm kontrolünün büyük bir hayranıyım. Tezimin tüm kodu için ev sunucumda çalışan Apps Kasası'nı kullandım. Şu anda departmanın bir Subversion sunucusu kurmasını sağlamaya çalışıyorum, ancak tahminimce en azından ilk başta onu kullanan tek kişi ben olacağım. FogBugs ile biraz oynadım, ancak sürüm kontrolünün aksine, bunun tek kişilik bir takım için neredeyse faydalı olduğunu düşünmüyorum.

Başkalarını sürüm kontrolü ve benzerlerini kullanmaya teşvik etmeye gelince, gerçekten şu anda karşılaştığım sorun bu. Mezun öğrencilerimi benim için yaptıkları araştırma projelerinde kullanmaya zorlamayı ve onları kendi araştırmaları için kullanmaya teşvik etmeyi planlıyorum. Programlamayı içeren bir sınıfa öğretirsem, muhtemelen öğrencileri orada da sürüm kontrolünü kullanmaya zorlayacağım (arşivdekilere göre derecelendirme). Meslektaşlarım ve mezun öğrencilerine gelince, gerçekten yapabileceğim tek şey, bir sunucuyu kullanılabilir hale getirmek ve nazik ikna ve iyi bir örnek oluşturmaya güvenmek. Açıkçası, bu noktada, kaynak kontrolüne almaktansa düzenli yedekleme yapmalarını sağlamanın daha önemli olduğunu düşünüyorum (bazı insanlar araştırma verilerinin tek kopyasını USB flash sürücülerde taşıyorlar).


7

1.) Komut dosyası dilleri, daha iyi donanım nedeniyle çoğu şey için bugünlerde popüler. Perl / Python / Lisp, hafif uygulamalarda (otomasyon, hafif hesaplama) yaygındır; Unix / Linux'u sevdiğimiz için işimde (hesaplamalı EM) çok fazla Perl görüyorum. Performans için genellikle C / C ++ / Fortran kullanılır. Paralel hesaplama için, bir programın bunu örtük olarak yapması yerine genellikle EM'deki işlemleri manuel olarak paralel hale getiririz (yani işleri radar kesitlerini hesaplarken bakış açısına göre ayırırız).

2.) Biz sadece insanları burada karışıma dahil ediyoruz. Sahip olduğumuz kodların çoğu çok dağınık, ancak bilim adamları genellikle bu tür şeyleri umursamayan dağınık beyinli bir gruptur. İdeal değil, ama teslim etmemiz gereken şeyler var ve personelimiz ciddi şekilde yetersiz. Yavaş yavaş iyileşiyoruz.

3.) SVN kullanıyoruz; ancak, hata izleme yazılımımız yok. Bizim için ne kadar iyi olursa olsun, hatalara özgü hataların nerede olduğunu size söyleyen bir txt dosyasıdır.

4.) Bilim adamları için en iyi uygulamaları uygulamaya yönelik önerim: bunu yavaşça yapın . Bilim adamları olarak genellikle ürün göndermeyiz. Bilimde hiç kimse temiz, sürdürülebilir koda sahip olarak kendisine bir isim vermez . Genellikle bu kodun sonuçlarından tanınırlar. Yazılım uygulamalarını öğrenmek için zaman harcamanın gerekçelerini görmeleri gerekir. Yavaş yavaş yeni kavramları tanıtın ve onları takip etmeye çalışın; onlar bilim insanları, bu yüzden kendi deneysel kanıtları sürüm kontrolü gibi şeylerin yararlılığını onayladıktan sonra, onu her zaman kullanmaya başlayacaklar!



5

Yoğun madde fiziği alanında çalışan, klasik ve kuantum modelleri oluşturan bir fizikçiyim.

Diller:

  • C ++ - çok yönlü: her şey için kullanılabilir, iyi hız, ancak MPI söz konusu olduğunda biraz rahatsız edici olabilir
  • Oktav - bazı ek hesaplamalar için iyi, çok kullanışlı ve üretken

Kitaplıklar:

  • Armadillo / Blitz ++ - C ++ için hızlı dizi / matris / küp soyutlamaları
  • Eigen / Armadillo - doğrusal cebir
  • GSL - C ile kullanmak için
  • LAPACK / BLAS / ATLAS - son derece büyük ve hızlı, ancak daha az kullanışlı (ve FORTRAN ile yazılmış)

Grafikler:

  • GNUPlot - çok temiz ve düzgün bir çıktıya sahiptir, ancak bazen o kadar üretken değildir
  • Menşei - çizim için çok uygun

Geliştirme araçları:

  • Vim + eklentileri - benim için harika çalışıyor
  • GDB - C / C ++ ile çalışırken harika bir hata ayıklama aracı
  • Code :: Blocks - Bir süredir kullandım ve oldukça rahat buldum, ancak Vim hala bence daha iyi.

Eğer c ++ 'nız sizin c'nizden daha yavaş çalışıyorsa, yanlış kullanıyorsunuz demektir. Tabii ki, bunu yapmak kolay, ama bu başka bir mesele. :: yaklaşık 7 yıldır c ++ ile çalışıyor ve her zaman yeni şeyler öğrenmeye devam ediyor ::
dmckee --- eski moderatör kedicik

Gerçekten büyük bir C ++ hayranı olduğumu fark ediyorum, ancak C veya Fortran'dan nasıl "çok daha yavaş" olabileceğini görmek zor. HPC için UPC ve CUDA için C gibi C varyantlarını eklemediğiniz sürece.
Suugaku

4

İngiltere'deki bir üniversitede fizikçi olarak çalışıyorum.

Belki de farklı araştırma alanlarının programlamaya farklı vurgu yaptığını vurgulamalıyım. Parçacık fizikçileri (dmckee gibi) neredeyse yalnızca hesaplamalı modelleme yaparlar ve büyük yazılım projelerinde işbirliği yapabilirler, oysa benimki gibi alanlardaki insanlar (yoğun madde) nispeten nadiren kod yazarlar. Çoğu bilim adamının ikinci kampa düştüğünden şüpheleniyorum. Kodlama becerilerinin genellikle fizikte yararlı olarak görüldüğünü, ancak gerekli olmadığını söyleyebilirim, tıpkı fizik / matematik becerilerinin programcılar için yararlı olarak görüldüğü ancak gerekli olmadığı gibi. Bu düşünceyle birlikte...

  • Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Genellikle veri analizi ve çizim, IGOR Pro , ORIGIN , Kaleidegraph gibi genel veri analizi paketleri kullanılarak yapılır. gibi 'Excel plus' olarak düşünülebilecek . Bu paketler genellikle otomatikleştirmek için kullanılabilen bir komut dosyası diline sahiptir. Daha uzman analizler, iş için genellikle uzun zaman önce yazılmış olan özel bir yardımcı programa sahip olabilir, hiç kimsenin kaynağı yoktur ve oldukça hatalı. Daha fazla teknik bilgi türü, bahsedilen dilleri kullanabilir (Python, R, MatLab ve Gnuplot ile çizim için).

Kontrol yazılımı genellikle LabVIEW'de yapılır, ancak aslında biraz sıra dışı olan Delphi'yi kullanıyoruz.

  • Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?

Bulunduğum her iki üniversite tarafından verilen grid computing, 3B görselleştirme, Learning Boost vb. Seminerlere katıldım. Bir lisans öğrencisi olarak Excel ve MatLab için VBA öğretildi, ancak C / MatLab / LabVIEW daha yaygın.

  • Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Hayır, insanların kişisel gelişim kurulumları olmasına rağmen. Kod tabanımız, bir senkronizasyon aracıyla güncel tutulan bir 'sunucuda' paylaşılan bir klasördedir.

  • Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Adım adım! Paylaşılan klasörü biraz daha sağlam bir şeyle değiştirmeye çalışıyorum, belki de mevcut senkronizasyon araçları davranışını taklit eden bir SVN istemcisi bulmak yardımcı olabilir.

Genel olarak, çoğu doğa bilimi projesi için zamanın genellikle araştırma yapmak için daha iyi olduğunu söyleyebilirim!


Düşüncelerinizi paylaştığınız için teşekkürler! "Zamanın genellikle araştırma yapmak için daha iyi harcandığına" katılıyorum, ancak sürüm kontrolü ve programlamada temel eğitim gibi şeylerin eksikliğinden dolayı ne kadar zaman kaybedildiğini görünce, bilim adamlarının bu konuyu hafife aldıklarını söyleyebilirim.
onnodb

4

Eski akademik fizikçi ve şimdi endüstriyel fizikçi İngiltere burada:

Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Bugünlerde ağırlıklı olarak MATLAB kullanıyorum (görselleştirme fonksiyonlarına ve matematiğe erişimi kolay). Ben kullanmayı kullanılan FORTRAN çok ve IDL . C kullandım (ama bir C yazarından çok okuyucuyum), Excel makroları (çirkin ve kafa karıştırıcı). Şu anda Java ve C ++ okuyabilmeye ihtiyacım var (ama onları gerçekten programlayamıyorum) ve Python'u da hackledim. Kendi eğlencem için şimdi C # ile bazı programlama yapıyorum (özellikle taşınabilirlik / düşük maliyetli / güzel arayüzler elde etmek için). Fortran'ı bana sunulan hemen hemen her dilde yazabilirim ;-)

Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?

Çoğu (tümü?) Lisans fizik dersi, genellikle C, Fortran veya MATLAB üzerine küçük bir programlama kursuna sahip olacaktır, ancak bu gerçek temeldir. Bir noktada yazılım mühendisliğinde biraz eğitim almış olmayı gerçekten çok isterdim (revizyon kontrolü / test etme / orta ölçekli sistemleri tasarlama)

Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Subversion / TortoiseSVN'yi nispeten yakın zamanda kullanmaya başladım. Geçmişte çalıştığım gruplar revizyon kontrolü kullandı. Resmi hata izleme yazılımı kullanan herhangi bir akademik grup tanımıyorum. Hala herhangi bir sistematik test kullanmıyorum.

Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Lisans düzeyinde bazı yazılım mühendisliği fikirlerini tanıtmaya ve ardından bunları yüksek lisans düzeyinde pratik yaparak pekiştirmeye çalışacak, ayrıca yukarıda bahsedilen Yazılım Marangozluğu dersi gibi kaynaklara işaretler sunacaktım.

Akademik fizikçilerin önemli bir kısmının yazılım yazacağını umuyorum (her halükarda değil) ve yazılım mühendisliğindeki fikirlere en azından bir giriş yapmaya çok ihtiyaçları var.


4

Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Python, NumPy ve pylab (çizim).

Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?

Hayır, ama bir multimedya araştırma laboratuarında çalışıyordum, bu yüzden neredeyse herkesin bilgisayar bilimleri geçmişi vardı.

Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Evet, sürüm kontrolü için Subversion , hata izleme için Trac ve wiki. TOS'ları projenize uyuyorsa, http://www.assembla.com/ adresinden ücretsiz hata izleyici / sürüm kontrolü barındırma hizmeti alabilirsiniz .

Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Altyapının kurulduğundan ve bakımlı olduğundan emin olun ve kaynak kontrolünün faydalarını satmaya çalışın.


3

Birleşik Krallık'taki bir üniversitede istatistikçiyim. Genellikle buradaki insanlar veri analizi için R kullanırlar, C / Perl'i biliyorsanız öğrenmek oldukça kolaydır. Gerçek gücü, verileri etkileşimli olarak içe aktarabilmeniz ve değiştirebilmenizdir. Bir dizi CSV (veya Excel) dosyasını alıp birleştirmek, diğerlerine göre yeni sütunlar oluşturmak ve bunu bir GLM, GAM veya başka bir modele atmak çok kolaydır. Çizim yapmak da önemsizdir ve tamamen yeni bir dil bilgisi gerektirmez (PGPLOT veya GNUPLOT gibi.) Elbette, bir sürü yerleşik özelliğe sahip olma avantajına da sahipsiniz (ortalama, standart sapma vb. Gibi basit şeylerden). sinir ağlarına, spline'lara ve GL grafiğine giden yol.)

Bunu söyledikten sonra, birkaç sorun var. Çok büyük veri kümeleriyle R çok yavaşlayabilir (bunu yalnızca> 50.000x30 veri kümelerinde gördüm) ve yorumlandığı için bu açıdan Fortran / C avantajını elde edemezsiniz. Ancak, (çok kolay bir şekilde) R'nin C'yi ve Fortran paylaşılan kitaplıklarını çağırmasını sağlayabilirsiniz (ya netlib gibi bir şeyden veya kendi yazdığınız kitaplıklardan). Yani, olağan bir iş akışı şu şekilde olacaktır:

  • Ne yapacağına karar ver.
  • Kodu R olarak prototipleyin.
  • Bazı ön analizler yapın.
  • Yavaş kodu C veya Fortran'a yeniden yazın ve bunu R'den arayın.

Benim için çok iyi çalışıyor.

Bölümümde sürüm kontrolünü kullanan (> 100 kişiden oluşan) tek kişiden biriyim (benim durumumda git githuib.com ile) Bu oldukça endişe verici, ancak denemeye pek hevesli görünmüyorlar dışarı ve etrafta zip dosyalarını iletmekten memnun (iğrenç.)

Benim önerim, satın alma için LabView kullanmaya devam etmek (ve belki de iş arkadaşlarınızın edinme ve oluşturma için herkes için mevcut olan bir araç seti üzerinde anlaşmasını sağlamaya çalışmak) ve ardından verileri bir CSV'ye (veya benzerine) aktarmaya geçmek ve Analizin R'de yapılması Bu açıdan tekerleği yeniden icat etmenin gerçekten çok az anlamı var.


2

Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Lisans fizik bölümüm LabVIEW dersleri verdi ve araştırma projelerinde yoğun bir şekilde kullandı.

Diğer alternatif ise MATLAB deneyimim olmayan . Her iki ürün için de kamplar var; her birinin kendi avantajları / dezavantajları vardır. Ne tür sorunları çözmeniz gerektiğine bağlı olarak, bir paket diğerinden daha çok tercih edilebilir.

Veri analizi ile ilgili olarak, istediğiniz türden bir sayı ayırıcı kullanabilirsiniz. İdeal olarak, zor hesaplamaları X dilinde yapabilir ve çıktıyı Excel, Mathcad , Mathematica ya da çeşni çizim sistemi ne olursa olsun güzel bir şekilde çizecek şekilde biçimlendirebilirsiniz . Burada standardizasyon beklemeyin.

Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Geriye dönüp baktığımızda, yapmadık ve yapsaydık, hepimiz için daha kolay olurdu. Her şeyi kırmak ve düzeltmek için saatlerce uğraşmak gibisi yok!

Herhangi bir ortak kod için kesinlikle kaynak kontrolünü kullanın. Bireyleri, kodlarını daha genel hale getirilebilecek bir şekilde yazmaya teşvik edin. Bu gerçekten en iyi uygulamaları kodlamaktır. Gerçekten, temel bilgileri alabilmeleri için bir bilgisayar bilimi dersi vermelerini (veya almalarını) sağlamalısınız.

Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Veri toplama (DAQ) ve veri analizi arasında net bir ayrım vardır. Yani, DAQ'da standartlaşmak ve ardından bilim adamlarının seçtikleri programdaki verilerle oynamasına izin vermek mümkündür.


2

Bir başka iyi seçenek de Scilab . LabVIEW'de grafik modülleri vardır, kendi programlama dili vardır ve örneğin Fortran ve C kodunu da yerleştirebilirsiniz. Büyük sanayi şirketleri dahil olmak üzere kamu ve özel sektörde kullanılmaktadır. Ve ücretsizdir.

Sürüm oluşturma konusunda, bazıları depoları yönetme ve tanımlama konusunda daha fazla özgürlük sağladığı için Mercurial'ı tercih eder . Bununla birlikte, hiçbir tecrübem yok.

Çizim için Matplotlib kullanıyorum . Yakında animasyonlar yapmam gerekecek ve MEncoder kullanarak iyi sonuçlar aldım . İşte bir ses parçası içeren bir örnek .

Son olarak, modüler olmayı öneriyorum, bu, ana kod parçalarını farklı dosyalarda tutmaya çalışmaktır, böylece kod revizyonu, anlayışı, bakımı ve iyileştirmesi daha kolay olacaktır. Örneğin, dosya bütünlüğü testi için bir Python modülü, görüntü işleme dizileri için başka bir modül yazdım.

Ayrıca, baskı satırlarını kullanmak yerine, koddaki ayarlanabilir kesme noktalarında değişken içerikleri kontrol etmenize olanak tanıyan bir hata ayıklayıcı kullanarak geliştirmeyi de düşünmelisiniz. Python ve Fortran geliştirmek için Eclipse kullandım (onunla bir Fortran kısa programını derlerken yanlış bir hata alsam da, ancak kötü bir konfigürasyon olabilir) ve Python için Eric IDE'yi kullanmaya başlıyorum . Bu hata ayıklamak için izin verir ile sürüm yönetmek SVN , gömülü bir konsol vardır, (o da başka birini kullanabilirsiniz) Bisiklet Tamir Man ile üstlenmeden yapmak, sen UnitTest olabilir, Python vb Daha hafif bir alternatiftir BOŞTA , dahil Python ile sürüm 2.3'ten beri.

Birkaç ipucu olarak şunu da öneriyorum:

  • Tek karakterli değişkenler kullanmamak. Görünümleri aramak istediğinizde, her yerde sonuç alacaksınız. Bazıları, iyi bir IDE'nin bunu kolaylaştırdığını iddia ediyor, ancak o zaman IDE'ye kalıcı erişiminiz olacağına güveneceksiniz. İi, jj ve kk kullanmak bile yeterli olabilir, ancak bu seçim dilinize bağlı olacaktır. (Örneğin, Estonca kod yorumları yapılıyorsa, çift ünlüler daha az kullanışlı olacaktır).

  • Kodu en başından yorumlamak.

  • Kritik uygulamalar için bazen daha eski dil / derleyici sürümlerine (ana sürümler), daha kararlı ve daha iyi hata ayıklanmış sürümlere güvenmek daha iyidir. Elbette sonraki sürümlerde, düzeltilmiş hatalarda vb. Daha optimize edilmiş kodlara sahip olabilirsiniz, ancak 2003 yerine Fortran 95, 3.0 yerine Python 2.5.4 kullanmaktan bahsediyorum. (Özellikle yeni bir sürüm geriye dönük uyumluluğu bozduğunda.) Pek çok geliştirme genellikle çok sayıda hataya neden olur. Yine de bu, belirli uygulama durumlarına bağlı olacaktır! Bunun kişisel bir seçim olduğunu unutmayın, birçok kişi buna karşı çıkabilir.

  • Yedekli ve otomatik yedeklemeyi kullanın! (Versiyonlama kontrolü ile).


2

Kesinlikle Subversion kullanın kaynak kodun güncel, devam eden ve kararlı anlık görüntü kopyalarını tutmak kullanın. Bu, evde üretilen yazılım araçları için C ++, Java vb. Ve tek seferlik işlem için hızlı komut dosyalarını içerir.

Bilimdeki güçlü eğilimler ve "yalnız kovboy" geliştirme metodolojisine yönelik uygulamalı mühendislikle, depoyu ana hat, etiket ve başka her neyse, organize etme olağan uygulaması - zahmet etmeyin! Bilim adamları ve laboratuvar teknisyenleri düğmeleri döndürmeyi, elektrotları kıpırdatmayı ve vakum kaçaklarını takip etmeyi severler. Python / NumPy gibi herkesin kabul etmesi veya bazı adlandırma kurallarını takip etmesi için yeterli bir iş ; Onlara gizli yazılım geliştirici uygulamalarını ve kurallarını takip ettirmeye çalışmayı unutun.


2

Kaynak kodu yönetimi için, Subversion gibi merkezi sistemler , net tek nokta gerçeği (SPOT) nedeniyle bilimsel kullanım için üstündür. Değişikliklerin günlüğe kaydedilmesi ve herhangi bir dosyanın sürümlerini, bir şeyi nerede bulacağınızı araştırmadan geri çağırma yeteneği, büyük kayıt tutma avantajlarına sahiptir. Git ve Monotone gibi araçlar : aman tanrım, ardında geleceğini tahmin edebileceğim kaos! Higgs bozonu geçtiğinde veya süpernova patladığında yeni sensörle oynarken hangi hack-job komut dosyalarının hangi versiyonunun kullanıldığına dair net kayıtlara sahip olmak, mutluluk getirecektir.


Hiç dağıtılmış bir sürüm kontrol sistemi kullanmayı denediniz mi?
Andrew Grimm

1
Neredeyse tüm dağıtılmış sistemler, merkezi sistemler kadar kolaylaştırır. Revizyon numarası yerine (SVN'deki gibi) sadece bir kayıt kimliği (Git açısından) kaydedersiniz.
Phil Miller

2

Bilimsel yazılım geliştirmek için hangi dilleri / ortamları kullandınız, özellikle. veri analizi? Hangi kütüphaneler? (Örneğin, çizim için ne kullanıyorsunuz?)

Sayısal ve sicentific ile ilgili şeyler için kullandığım diller:

  • C (yavaş geliştirme, çok fazla hata ayıklama, yeniden kullanılabilir kod yazmak neredeyse imkansız)
  • C ++ (ve bundan nefret etmeyi öğrendim - geliştirme C kadar yavaş değil, ancak bir acı olabilir. Şablonlar ve sınıflar başlangıçta harikaydı, ancak bir süre sonra onlarla her zaman savaştığımı ve bunun için geçici çözümler bulduğumu fark ettim. dil tasarım problemleri
  • Tamam olan, ancak Bilimsel hesaplamada yaygın olarak kullanılmayan Common Lisp. C ile entegrasyonu kolay değil (diğer dillerle karşılaştırıldığında), ancak çalışıyor
  • Şema. Bu benim kişisel seçimim oldu.

Düzenleyicim Emacs, ancak yapılandırma dosyalarını düzenlemek gibi hızlı şeyler için vim kullanıyorum.

Çizim için genellikle bir metin dosyası oluşturur ve onu gnuplot'a beslerim.

Veri analizi için genellikle bir metin dosyası oluşturuyorum ve GNU R kullanıyorum.

Burada FORTRAN (çoğunlukla 77, ancak 90 kadar), çok Java ve biraz Python kullanan birçok insan görüyorum. Bunları sevmiyorum, bu yüzden kullanmıyorum.

Programlamada önemli bir geçmişi olmayan insanlar için herhangi bir eğitim var mıydı?

Bilgisayar biliminden mezun olduğum için bunun benim için geçerli olmadığını düşünüyorum - ancak çalıştığım yerde resmi bir eğitim yok, ancak insanlar (Mühendisler, Fizikçiler, Matematikçiler) birbirlerine yardım ediyor.

Sürüm kontrolü, hata izleme gibi bir şeyiniz var mıydı?

Sürüm kontrolü kesinlikle önemlidir! Kodumu ve verilerimi üç farklı makinede, dünyanın iki farklı tarafında - Git depolarında saklıyorum. Onları her zaman senkronize ediyorum (bu yüzden sürüm kontrolüm ve yedeklerim var!) Hata kontrolü yapmıyorum, ancak bunu yapmaya başlayabilirim. Ancak meslektaşlarım BTS veya VCS hiç yok.

Bireysel bilim adamlarının (özellikle fizikçiler inatçı insanlardır!)

Birincisi, onlara olabildiğince fazla özgürlük verirdim. (Çalıştığım üniversitede birinin Ubuntu veya Windows yüklemesini veya kendi işletim sistemimi yüklemesini seçebilirdim - kendi işletim sistemimi kurmayı seçtim. Onlardan destek alamıyorum ve herhangi bir şeyden sorumluyum güvenlik sorunları da dahil olmak üzere makinelerim, ancak makine ile ne istersem onu ​​yaparım).

İkinci olarak, neye alıştıklarını görüyorum ve çalışmasını sağlayacağım (FORTRAN'a mı ihtiyacınız var? Kuracağız. C ++ mı gerekiyor? Sorun değil. Mathematica? Tamam, bir lisans satın alacağız). Ardından, daha üretken olmalarına yardımcı olmak için kaçının "ek araçlar" öğrenmek istediğini görün ("farklı" araçlar demeyin. "Ek" deyin, böylece kimse "kaybedecek" veya "izin vermeyecek" git "ya da her neyse). Editörlerle başlayın, çalışmalarını senkronize etmek için VCS kullanmak isteyen gruplar olup olmadığına bakın (hey, evde kalıp kodunuzu SVN veya GIT aracılığıyla gönderebilirsiniz - bu harika olmaz mıydı?) Vb. Zorlama - bu araçların ne kadar havalı olduğuna dair örnekler gösterin. R kullanarak veri analizi yapın ve onlara ne kadar kolay olduğunu gösterin. Güzel grafikler gösterin ve bunları nasıl oluşturduğunuzu açıklayın (ancak basit örneklerle başlayın,


2

Matematiksel yapılara olan güçlü anlamsal bağları göz önüne alındığında, F # 'yi bilimle ilgili manipülasyonlar yapmak için potansiyel bir aday olarak öneririm.

Ayrıca, burada yazıldığı gibi ölçü birimleri desteği, matematiksel model ile uygulama kaynak kodu arasında doğru çeviriyi sağlamak için çok mantıklıdır.


1

Her şeyden önce, fazladan birçok şeyi açıklamak zorunda kalmamak için kesinlikle bir betik dili kullanırım (örneğin, manuel bellek yönetimi - çoğunlukla - eğer düşük seviyeli, performansa duyarlı şeyler yazıyorsanız, ancak sadece bir bilgisayarı yükseltilmiş bir bilimsel hesap makinesi olarak kullanmak istiyor, bu kesinlikle aşırıya kaçıyor). Ayrıca, etki alanınız için belirli bir şey olup olmadığına bakın ( istatistikler için R olduğu gibi ). Bu, kullanıcıların aşina oldukları kavramlarla halihazırda çalışma ve belirli durumlar için özel koda sahip olma avantajına sahiptir (örneğin, R durumunda standart sapmaları hesaplama, istatistiksel testler uygulama, vb.).

Daha genel bir betik dili kullanmak isterseniz, Python ile giderim. Yaptığı iki şey:

  • Deney yapabileceğiniz etkileşimli kabuk
  • Açık (bazen uzun olsa da) sözdizimi

Ek bir avantaj olarak, onunla yapmak isteyeceğiniz şeylerin çoğu için kitaplıklara sahiptir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.