Hesaplama yöntemlerini öğrenmek için öncelikler, ne zaman kendi kodumu yazmalı mıyım yoksa kütüphaneleri yeni mezun öğrenci olarak kullanmalıyım?


10

Mühendislik alanında lisansüstü eğitimime başlıyorum ve hesaplamalı bilim projeleri üzerinde çalışacağım. Burada kendi algoritmalarınızı uygulamanın avantajları ve dezavantajları hakkında bazı tartışmalar olduğunu fark ettim . Lisansüstü öğrencisi olduğunuzda, kendi algoritmalarınızı kütüphanelere karşı kullanmanın maliyet-fayda analizi farklı mıdır?


2
Uzun bir cevabım vardı, ancak başka bir modla tartıştıktan sonra, silmeye ve sorunuz hakkında açıklama istemeye karar verdim. Sorunuzun ana noktası nedir? "Öğrenmemi nerede vurgularım?", "Modellemenin ilerlemesine karşı öğrenmeye öncelik vermeyi nasıl öneriyorsunuz?" kariyerimde çok daha erken bir aşamada kendi algoritmalarımı kodlamanın dezavantajları nelerdir? ". Cevabım çok genişti ve size daha odaklı bir soruya odaklanmış bir cevap vermek daha iyi olurdu.
Geoff Oxberry

Tam olarak ne istediğimi açıklığa kavuşturmak için cesur bölümü ekledim ama gerisini sağlam bıraktım. Diğer parçalardan herhangi birinin çıkarılması gerektiğini düşünüyorsanız, çekinmeyin.
Godric Seer

Teşekkür ederim. Soruyu odaklamak için bazı düzenlemeler yapacağım ve sonra bir cevap göndereceğim.
Geoff Oxberry

Yanıtlar:


10

Bence, bir başlangıç lisans öğrencisi David Ketcheson tarafından cevap değişmez varlık burada yayınınızda bağladıktan soruya.

Öğrenmek istediğiniz algoritmaların minimum sürümlerini kodlayın. Sonra onları bir kenara koyun. Kendi algoritmalarınızı kodlamak en çok öğrenim için yararlıdır, ancak araştırma (veya üretim) kodu için, araştırma hedefleriniz orada en yeni kütüphaneleri geliştiren bir yazılım yazmak olmadığı sürece (eğer varsa), ' kütüphaneleri kullanarak daha iyi olur. Kodlama konusunda gerçekten iyi olmadıkça (veya olmadıkça) kütüphanelerin, kendiniz kodladığınızdan daha iyi belgelenmiş, daha ölçeklenebilir ve daha sağlam olması muhtemeldir. Ayrıca, kütüphanelerin sizin için test edilmesi ve hata ayıklanması muhtemeldir (elbette, bu kütüphaneyi kimin yazdığına bağlıdır ...). Teziniz için yazdığınız herhangi bir kodu desteklemek, hata ayıklamak ve test etmekle sorumlu olacaksınız ve zamandan tasarruf etmek, yazmanız gereken kod miktarını en aza indirmeye yardımcı olacaktır.

Düşünebileceğim diğer senaryolar (başkaları da olabilir):

  • İhtiyacınız olan özellikleri sağlayan herhangi bir kütüphane yok. Mevcut açık kaynak kitaplıklarına katkıda bulunmayı veya başkalarının yararlanabilmesi için kendi açık kaynak kitaplığınızı yazmayı düşünün.
  • Ek performansa ihtiyacınız var ve bunu elde etmek için özel sorun yapısından yararlanabilirsiniz. Ardından, mevcut bir kitaplığı belgeleyin ve değiştirin veya daha yüksek performanslı bir uygulamayı kendiniz yazın.
  • Bir süpervizör kendi yazılımınızı devrettiğinizde ısrar eder. Orada tek başınasınız, ancak kütüphaneleri kullanmaktan daha iyi olacağınıza ikna etmek için yukarıdaki noktaları getirmenizi öneririm (eğer durumunuzda bu mümkün ise).

10

Geoff'un düşünceli cevabına biraz daha genişlik vermek istiyorum . Özellikle, bir akademik olarak erken kariyerinizdeki araştırma çabalarınızın aksine, programlama çabalarınızın değeri hakkında biraz daha perspektif vermek istiyorum.

Bilimsel araştırmanızı artırmak için yazılım yazabilmenin sizi neredeyse her araştırma ekibinin değerli bir üyesi haline getireceğini göreceksiniz. Ancak, bu kez akademik akranlarınız veya akademik görevler için çalışanlar tarafından mutlaka “değerli” olarak değerlendirilmeyecektir.

Princeton'da yapılan "Araştırma Bilimi Uygulaması Araştırması" başlıklı 2011 araştırma anketinden :

Bilim adamları önemli miktarda araştırma süresi programlama harcıyorlar. Bilim adamları, araştırma sürelerinin% 35'inin yazılım programlama / geliştirme için harcadığını tahmin ediyorlar. Başlangıçta kodun yeniden yazılması için biraz zaman harcanırken, birçok sıkıcı aktivitede zamanın önemli bir kısmı harcanır. Örneğin, Politika ve Sosyoloji alanında R / Stata kullanan araştırmacılar, nüfus sayımı verilerini R / Stata'daki bireysel paketlerin anladığı formatlara uyarlamak için hatırı sayılır bir programlama yapmak zorundaydı. Kimya Mühendisliği'ndeki bazı araştırmacılar, orijinal yazarlar mezun olduktan sonra, kodu daha yeni yakıtlara uyarlamak için alev simülasyonu yapan belgesiz eski kodu tersine çevirmek zorunda kaldı ... Buna rağmen, bu araştırmacıların büyük bir çoğunluğu " programlama gereğinden daha fazla zaman harcamak, "

Bu, çekirdek bir kitaplığı veya uygulamaları uygulamanın veya yeniden tasarlamanın iyi bir fikir olmadığı anlamına gelmez, ancak ciddi bir yazılım geliştirmeye (zamanınızın% 25'inden fazlasıyla kodla çalışacaksanız) bu üçünü saklayın düşünceler akılda.

  • Karmaşıklık ve risk, proje büyüklüğü ve geliştirici sayısı ile katlanarak artar. Laboratuvarınızın ötesine uzanan daha büyük yazılım parçaları veya geliştirici ekipleri yazana veya üzerinde çalışana kadar, bunun iyi bir şekilde takdir edilmesi ve çabaların doğru bir şekilde tahmin edilmesi zor olacaktır.

  • İyi olmalısın. Yararlı yazılımlar yazmak hem programcı hem de uygulama bilimcisi olarak belirli bir olgunluk gerektirir . Önemli özelliklerin ne olduğunu, sayısal risklerin nerede olduğunu bilmeniz ve belirli bir özellik ve sağlamlık için programlama çabasını tahmin edebilmeniz gerekir. Tabii ki, iyi olmanın tek yolu, lider olmadığınız veya güvenli bir şekilde başarısız olabileceği veya geciktirilebilecek projelere zaman harcamaktır ve bu da beni son noktaya getiriyor.

  • Birçok araştırma laboratuvarı ve endüstriyel pozisyon çok değerli programlama deneyimine sahip olsa da, bilimsel programlama, yazılımınız bilimden makalelerinizden daha fazla yarar sağlasa bile akademik kariyeriniz için potansiyel bir zarar görevi görebilir. Bunca zaman, iyi programlamayı, programlamayı, kodunuzu belgelemeyi ve sağlamlaştırmayı öğrenmek için harcarsınız, yazılmamış makalelere dönüşür. Bir danışman, öğrencilerinin her zaman çıkarlarını göz önünde bulundurmayacaktır, çünkü bu, öğrencinin atıf sayısından faydalanmadan danışman grubuna fayda sağlayan iş sağlayabileceği durumlardan biridir. İlgilendiğiniz alanda bir veya daha fazla güvenilir mentor arayın ve hangi katkıların değerli olduğu konusunda net bir anlayışa sahip olduğunuzdan emin olun. academia.stackexchange.com bu konuda bir soru sormak için mükemmel bir yerdir.


Bir dipnot olarak: herhangi bir hesaplama alanını önemli ölçüde ilerleten tek kişilik çaba projelerinin sayısı, bir uygulama alanı veya yoğun doğrusal cebir gibi daha teknik bir şey olsun, sürekli olarak azalmaktadır. Hesaplamalı araştırmanın "ekmek ve tereyağı" nı oluşturan yazılım paketlerinin sayısı 10 yaş ve üzerindedir. Bu olgunluk düzeyine ulaşmamış bilimsel kodlar daha fazla hataya, daha az özelliğe ve seyrek belgelere sahip olma eğilimindedir. Kaç yaşında olduğuna bakılmaksızın aktif olarak desteklenmeyen olgunlaşmamış kodlarla çalışmaktan kaçının.


Kağıt sayım konusunda zaten endişeliydim. Çok sayıda deney öğrencisi için hesaplama öğrencisi olacağımdan, muhtemelen birçok 2. ve 3. yazarlığa sahip olacağım. Aynı zamanda sadece başlangıçta farklı programları birleştireceğim (laboratuvarımdan 0D kodu, başka bir üniversiteden 2D kodu, üniversitemdeki başka bir laboratuvardan Meshing yazılımı). Buna girmeyi düşünecek çok şey var.
Godric Seer

6

Maliyet-fayda analizinin, çalışmalarınız sırasında elde etmek istediğiniz bilimsel hesaplama okuryazarlığına bağlı olduğunu düşünüyorum.

Bilimsel bilgi işlem konusunda uzman bilgisayarlarla çalışan çoğu bilim adamı için bu yeterlidir: kullanılan ana algoritmaların üst düzey (soyut) bir şekilde anlaşılması ve yazılım kitaplıklarını (bina yazılımı, bağlantı oluşturma, kullanma) etkili bir şekilde kullanmanıza izin veren programlama becerileri posta listeleri).

Bunun aksine, bilimsel bilgi işlem alanında uzman olmayı planlıyorsanız, sayısal yöntemler, kayan nokta aritmetiği ve bilgi işlem teknolojisini derinlemesine anlamanız gerekir. Bu konuların teorisini kitaplardan öğrenebilirsiniz, ancak ileri beceriler geliştirmek ve sürdürmek için deneyim yoluyla uygulamaya ihtiyaç vardır. Bu nedenle, öğrenirken kullandığınız her şeyi programlamak harika bir fikir olabilir (örneğin bir Şef gibi yemek yapmak istiyorsanız: pişirdiğiniz şeyi yiyerek ve sık sık yemek yaparak öğrenirsiniz!)

Doğru yeterlilik seviyesi nedir kariyerinize bağlıdır. Alanınızdaki çalışan insanlar tarafından hangi becerilerin kullanıldığını görün.

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.