Araştırma yaparken hangi yazılım yöntemini izlemeliyim?


9

Genellikle deney verilerini analiz ediyorum ve yapmam gereken genel bir adım şemasına sahip olmama rağmen, deneylerin özelliklerine veya arkasındaki sorulara ince ayar yapmam gerekebilir. Genellikle tek kodlama benim.

Vikipedi baktım ama hangi metodolojiyi kullanabileceğimden emin değilim, kısmen hiç takip etmediğim için, kısmen de bazen sadece veriyi araştırdım, neye benzediğini görmek için, bazen de cevap istiyorum. (Ve kodumu test etmem veya belirli bir kaliteye sahip olmam beklenmediğinden)

Bir veya iki saat sonra, r fonksiyonunun tablevektörlerin sırasına bağlı olduğunu ve bunları karşılaştırmak için elemanların ismine bağlı olduğunu keşfettikten sonra bu soruyu sormam istendi . Sonra ben bazı sahte verilerle kullandığım davranış ve işlevleri test gerekirdi. Ancak diğer analizler bilgi eksikliğine yol açtıktan sonra tabloyu kullandım, bu yüzden test odaklı geliştirme metodolojisini takip edemezdim (eğer doğru anladıysam). Bununla birlikte, projeyle yüzleşmemdeki bazı iyileştirmelerle, hataları daha erken tespit etmenin yanı sıra daha verimli olabileceğimi, ancak bir sonuçtan şüphe duymam durumunda nasıl ve ne arayacağımı hissediyorum, bu yüzden lütfen sadece odaklanmayın bu örnek hata.

Hangi yazılım metodolojisi araştırmaya en uygun?

Temel olarak, araştırmanın özgüllüğünü korumanın yanı sıra kalite ve zamanlı ilerlemenin nasıl sağlanacağını soruyorum.

Nasıl çalıştığım örneği:

Bir biyologun bir sorusu vardır ve bir deney yapmanın ilgili verilere (yani, iki durumda gen ifadeleri seviyeleri) yol açacağını bilir, daha sonra deneyi belirler ve 10 kişi / fare / sıçandan örnekleri hatırlar. Şimdi, mevcut kütüphaneleri ve testleri kullanarak (veya yeni testler uygulayarak) bu 10 numune için verileri analiz etmeliyim, ancak biyologun aklında olan soruyu göz önünde bulundurarak (yani hangi genlerin bir durumda diğerinden daha fazla ifade edildiği). Yapı (6 koşul ve başka bir hayvanı içeren) önceki deneylerle aynıdır, ancak istatistiksel test, normalizasyonlar, veri yapısı değişebilir. Bu yüzden genellikle önceki bir sürümü kopyalarım ve mevcut ihtiyaçlara uyarlarım.


7
şimdi dong olduğun iyi. Hiçbir metodoloji hata yapmanıza engel olmaz! bir sürüm kontrol sistemi kullandığınızdan emin olun ve kod tabanlarınızı düzenli tutun.
gbjbaanb

Hiçbir metodoloji hataları durduramaz. Ama bazıları hataları daha erken yakalar! Sözleşme ile tasarım veya sözleşmeye dayalı tasarım.
Frank Hileman

Lütfen son cümlenizi hazırlar mısınız? Hiç anlamadım.
llrs

belki de en.wikipedia.org/wiki/Test-driven_development bir tür otomatik test çerçevesi ile - küçük testler hataları yakalamak için faydalıdır ve daha büyük testler hipotezlerinize (kabaca)
eşlenebilir

1
İlk kez bir test yazmak ideal @Llopis, başarısız, daha sonra kod yazmak, deney geçer, o zaman kodunuzu işlemek - satır aşağı bir hata daha sonra keşfetmek eğer, testi yazma olurdu hata yakaladı, başarısız , kodu düzeltin, test geçer, sonra kodunuzu taahhüt edersiniz - her şeyi geri alamazsınız, ancak aynı şeyin tekrar gerçekleşmeyeceğinden emin olabilirsiniz
david.libremone

Yanıtlar:


6

İhtiyaç duyulan şey belki de bir yazılım metodolojisi değil, akademide bilimde yazılım geliştirmenin oynadığı rolün tanınmaması sorununu çözen politik bir değişikliktir.

Yazılım Sürdürülebilirlik Enstitüsü (UK) bilimsel araştırmalarda bilgisayar programlama daha vicdani kullanımı için tartışmaya nasıl: Aradığınız ne örgüt en yakın olanı.

Ayrıca, yazılım geliştirme metodolojileri ile ilgilenenler için bilgi göstericileri de sağlar.

Bununla birlikte, metodolojilerin tipik olarak yazılım programcılarının ekiplerini, yinelemeler ve proje hedeflerinin kademeli olarak iyileştirilmesi ile yönettiğini ve uzun süre dayanan istikrarlı kod tabanlarıyla çalıştığını belirtmeliyim. Bunlar, yaptığınızdan daha karmaşık büyüklükteki projeler içindir.


Açıkça doğru olan bu şeyin (bilimsel araştırmalarda bilgisayar programlamasının daha vicdani kullanımı) neden başarılmadığına ve her zaman desteklendiğine gelince, işte rahatsız edici gerçek: akademik idari ortamlarda, bilim adamlarının bilgisayar tarafından oynanan önemi azalttığı görülebilir. programlama. Bazen bu katkının doğası bilimsel disipline uysa bile, yazılıma dahil olan kişilerin katkılarının tanınmasını reddetmek için bir araya geldikleri görülebilir.


İşyerinizde eksik olan şeyler ve yapabileceğiniz şeyler var.

Eksik olan şeyler:

  • Kılavuz eksikliği
  • Soru sormak için denetim eksikliği veya kişi
  • Kullandığınız araçlarla ilgili bilgili mentor veya bilgisayar programcısı eksikliği (örn. R)
  • Tekrarlanabilirlik ve öğrenme amacıyla yazılımın yeniden kullanımı, arşivlenmesi, sürüm kontrolü veya önceden geliştirilmiş yazılımların belgelenmemesi

Kısacası, genel kültür, katılan insanların gerçekten ilgilenmediği ... tahmin ettiniz ... bilimsel araştırmalarda bilgisayar programlamanın daha vicdani kullanımı.


Yapabileceğin şeyler:

  • Araçlarınızı öğrenmek için daha fazla zaman ayırın.
    • Programlama dillerinizin belgelerini ve kod örneklerini okumak için daha fazla zaman harcayın
    • Kullandığınız araçları sevmeyi öğrenmeniz gerekecek.
  • Önümüzdeki birkaç yıl boyunca aynı gruba köleleştirilecek bir sonraki bilgisayar programcısının yararına bir şeyler yazmaya çalışın
    • Wiki mükemmel olacak.
  • Kaynak sürüm kontrolünü ayarlamaya çalışın
    • Sık kullanılan yeniden kod parçacıklarını alabilir
    • Belirli bir denemede kullanılan kodun anlık görüntüsünü kaydedebilme

Kariyer yazılımı geliştiricileri için, bu türden yönergeler şu adreste bulunabilir:

Bunlar, bir yazılım geliştirme işi yürütmek için temel gereksinimler olarak kabul edilir. Bununla birlikte, tek başına bir ilgisizlik savaşıyla savaşırken, öncelik vermeniz gerekir. Araçlarla daha iyi olmak, bilgileri yazmak ve saklamak, kaynak kodlarının sürümlerini korumak tek bir ortam için minimumdur.


Yazılım Sürdürülebilirlik Enstitüsü'ne ilginç kaynak teşekkürler! Kod ve veri yönetimi konusunda kendi yönergelerimi yazacağım, bir süpervizörüm var ama "araçlar hakkında bilgili" görünmüyor, git kullanıyorum, ancak dokümantasyondaki tavsiyelerinizi takip etmeye çalışacağım
llrs

ha evet, bir wiki ... birkaçını denediğim için burada dokuwiki.org/dokuwiki# öneriyoruz . Kurulumu basit ve belgeleri bir veritabanı yerine metin dosyaları olarak tutar. Kurulum kolaylığı, kullanım kolaylığı ve verilerin sürdürülebilirliği arasındaki en iyi dengeyi buldum.
Newtopian

@Rwong'un tanımladığı bilgisayar destekli bilimdeki problemler, çalıştığım çoğu enstitüde mevcut (fizik ve astronomi)
steffen

2

Metodolojiyi çok fazla rahatsız etmeyin, ancak yazılım geliştirmenin kendisi için gereksinimlerinizi takip etmeniz için daha fazla odaklanmaya çalışın.

Sizinkine nispeten benzer bir konumda kısa bir konaklama yapmış olmak, kişisel deneyimimden çıkarabileceğim şey.

Algoritmik kesinlik

Muhtemelen en önemli yönü, yazılımınızın yapmak için tasarlandığını yaptığını kanıtlayabilmeniz gerekir. Burada otomatik test en iyi müttefikinizdir. Doğru bir veri seti olmadan yapmanın zor olabileceğinin farkındayım, ancak aslında kendi veri setlerinizi oluşturma alışkanlığı edinmelisiniz. Ancak amaçları biraz farklıdır, verilerden eğilim çıkarmaya çalışmıyorsunuz, ancak yazılımın bilinen bir veri kümesinden tahmin edilebilir ve doğru sonuçlar üretmesini sağlıyorsunuz. Bu nedenle, örneğin desen tanıma için çoklu konser genetik yapısına ihtiyacınız yoktur, algoritmanın deseni algılamasını sağlamak için sadece birkaç satır metin yeterli olabilir.

Verilerimi köşe vakalarını, imkansız vakaları temsil edecek şekilde yapardım. Beklenen normdan çok uç noktalara odaklanma eğilimindeydim. Çoğu zaman sadece bu durumun gerçek veri setinde ortaya çıktığını görmek imkansız bir şeyi test etmeyi hatırlıyorum. Bunun için test olmasaydı, veri setindeki olası bozulmaları veya hataları tanımlamak için gerekli olan hata tespitlerini ve günlük kaydını koyamazdım. TDD bu bölüm için iyi bir seçim olsa da, iyi bir test seti oluşturmak gerçek kod önce veya sonra ne olursa olsun daha önemli olduğunu düşünüyorum olduğunu.

Sürüm

Çok sık bu kısım dışarıda. Kodunuz ve üretilen paketler / yürütülebilir dosyalar için iyi bir sürüm şeması, ilerlemenizi düzenli tutmanıza yardımcı olacaktır. Daha önce elde edilen sonuçları oluşturmak için kullanılan kodu tam olarak kurtarabilmek, hataları veya tutarsızlıkları izlemeye yardımcı olabilir. Dallanma, farklı yaklaşımlar veya algoritmalar üzerinde denemeler yaparken de yardımcı olabilir.

Gerçek hesaplamalarda kullanılan kodu etiketlediğinizden emin olun , Sürümleri adlandırma konusunda yardıma ihtiyacınız varsa anlamsal sürümlere göz atın .

Otomatik yapı

Yukarıdaki noktaya bir sonuç. Yazılımınızı oluşturma ve paketleme işlemini mümkün olduğunca otomatikleştirdiğinizden emin olun. Tam paraya gitmenize gerek yok, sadece nihai sistemi kaynak ve bağımlılıklardan yaratmayı önemsiz kılacak kadar yeterli. Buradaki amaç size zaman kazandırmak, aynı zamanda bağımlılıkları ve diğer dışsalları da içeren yazılımı kaynaktan yeniden oluşturmak için tekrarlanabilir bir ortama sahip olmaktır. Groovy, Maven, ant, Scons, cmake, yardımcı olabilecek küçük bir yapı otomasyon araçları ve komut dosyası sistemi örneğidir.

Ekstra yol kat etmek istiyorsanız, Jenkins veya teamcity veya başka bir sürekli entegrasyon sistemi kurun. Dağıtılmış bilgi işlem için birden fazla sunucuyu veya çalışanı korumanız gerekiyorsa bonus eklenir. Bu sistemlerin çoğunun bakımda yardımcı olacak araçları olacaktır. Ayrıca, test çalışmalarını tam olarak otomatik hale getirebileceksiniz, böylece devam etmeden önce sonuçları beklemenize gerek yok, sadece daha sonra bir posta alıp gönderin. Test setlerinden geçmesi saatler süren bir sistemim vardı. Bu otomasyonu hayata geçirmek zamanımın en iyi yatırımıydı. Özellikle de her şeyi oluşturmak için zaten komut dosyalarınız varsa.

Çevre Yalıtımı

Araştırmacı, karmaşık sistemlerden kendi protokolleri aracılığıyla tek veya küçük bir değişken grubunu izole etmek için çok fazla zaman harcıyor. Bu ayrıca yazılım geliştirme uygulamalarınıza da yayılmalıdır. Docker veya Vagrant ile konteynırlamayı da kontrol edebilirsiniz. Yazılımın çalıştığı ortam üzerinde daha iyi kontrol sahibi olmanızı sağlar.

Bu işe yaramadan önce büyük bir ekibe sahip olmanıza gerek yok, çoğu zaman yalnızdım, ancak bunları yerine koymaktan büyük fayda gördüm. Zihin ve zamandan tasarruf sağladım, bunu yaparken bana pahalıya mal olan yükü çok ağır bastı.


Ben genellikle onunla bittiğimde olduğu gibi kod bıraktı, bu yüzden son sürümü hesaplamalar için kullanılan bir, bu yüzden bunu geliştirmek gerekebilir. Ayrıca algoritmik doğruluk hakkında, kullandığım kütüphanelerin düzgün çalıştığını varsaymam gerekir mi?
llrs

daha önce harici bağımlılıklar üzerinde testler yaptım ama bu nadirdi ... test etmeniz gereken kendi kodunuz, kütüphaneleri doğru kullandınız mı? Tekrar tekrar başarısız mı (kodunuz)? vs
Newtopian

0
  1. R kullanabilir misin? Bunun için.

  2. Kodunuzu basit tutun . Okunabilirliği tercih edin ve sorun olmadıkça performans konusunda endişelenmeyin. Takım bir kişi olsa bile, programcı ekiplerinin birbirlerinin koduna hata koymasını önlemek için yöntemler vardır.

  3. Bununla birlikte, kodlama disiplini çok önemlidir. Yüksek eğitimli ileri düzey bilim adamları ve matematikçilerin kodlarını gördüm ve korkunç . Biçimlendirmeyi tamamen görmezden gelirler. Vakum dolu gibi kodu birlikte eziyorlar. Değişken isimleri tamamen gizemlidir. Yorum yazmıyorlar veya anlaşılmaz yorumlar yazıyorlar ya da kod başka bir şey söylerken yorumlar bir şey söylüyor. Bunları yapma. Her zaman sizin veya başkalarının yapmak zorunda olabileceği gelecekteki değişikliklere dikkat edin.


1
Ben R kullanıyorum, benim kod yazmış olabilir hataları ve ben yapmış olabilir herhangi bir hata tespit için basit olduğunu umuyoruz. Google R kod biçimlendirme stilini izliyorum ve yorumların kodda neden bu tür kararları aldığımı açıklamak için yararlı olduğunu düşünüyorum.
llrs

@Llopis: O zaman doğru yolda olduğunuzu söyleyebilirim.
Mike Dunlavey

Takım tabanlı yazılım geliştirmede @Llopis, daha fazla gözün daha fazla hata yakalayabileceği varsayımına dayanarak ekip üyelerinden başka bir kişinin kodu gözden geçirmesini istemek rutin bir işlemdir. Maalesef sizin durumunuzda sizinkini inceleyecek kimse yoktur ve araştırmadaki gizlilik kültürü, başkalarının (işyeri izinlerinizin dışında) kodunuzu incelemesine izin vermenizi engellemiş olacaktır.
rwong

1
@rwong Aslında şimdi araştırma kodumu paylaşmasına izin verildi, bu yüzden herkes github üzerinde inceleyebilir
llrs

@Llopis: Okunabilir hale getirmek için daha fazla neden. Yapmaya çalıştığım bir şey, konu hakkında çok küçük bir öğretici (yorumlarda) vermektir, çünkü okuyucunun uzmanlığı benimkinden farklı olacaktır.
Mike Dunlavey
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.