C ++ için doğrusal cebir paketi kullanmam tembel kabul edilir mi?


11

İlk olarak, soruyu belirtmeden önce biraz bilgi vereyim. Fizik okuyorum ve tüm programlama derslerim MATLAB gibi kolay programlama dillerinde oldu. Demek istediğim, dilin sizin için düşünmenin çoğunu yapması ... Gelecek yıllar için bilgisayar bilimi dersleri alacağım ve programlama konusunda kariyer yapmayı düşünüyorum.

Birçok kolej dersinin C ++ 'da olduğu düşünüldüğünde, MATLAB ile benzer sözdizimine sahip doğrusal bir cebir paketi (Armadillo) kullanmak tembel sayılır mı?

Şu anda genetik bir algoritma kodluyorum ve MATLAB'da hızlı ilerlerken, bu paketlerin yardımı olmadan C ++ 'da çok zaman alıyor.

Gerçek hayatta nasıl çalışır? Hangi paketleri kullanmanıza izin verilir?

Örneğin, C ++ bilgimi armadillo ile oluşturmak istemiyorum ve "vector.h" "algoritma" "listesi" vb.


9
Projenize uygun bir lisansı olan herhangi bir şeyi kullanmanıza izin verilir. Yoksa sadece zamanını boşa harcıyorsun. (Doğru tür) tembellik iyidir
Richard Tingle


Müfredatınızın bunları içerdiğini varsayarsak, kendi içinde doğrusal bir cebir paketi kullanmak <vector>, <algoritma> ve <list> öğrenmenizi engelleyecektir.
Brandin

@RichardTingle: Üstlerin yasaklamadığı sürece bir şey kullanmasına izin verilir ;-)
Doc Brown

Değişim lazyiçin sensiblebaşlığınızdaki ve cevabı "evet" (tabii, lineer cebir içeren bir görev yapıyoruz varsayarak) 'dir.
Jerry Coffin

Yanıtlar:


21

Richard'ın yorumu zaten cevabın çoğu. Bir sınıf egzersizi dışında herhangi bir şey için programlama yaptığınızda, dengelemek için sadece birkaç noktayı göz önünde bulundurarak mevcut kodu mümkün olduğunca tekrar kullanmak istersiniz.

Kodun yeniden kullanılmasının avantajları:

  • Daha hızlı çalışıyorsunuz, çünkü bazı işler zaten yapıldı.
  • Mevcut kod, sıfırdan yazacağınız her şeyden daha iyi olma şansına sahiptir, çünkü muhtemelen daha uzun süredir, daha iyi test edilmiş ve daha iyi optimize edilmiştir.
  • Genellikle, mevcut kod size aşina olmadığınız bir alandadır. Örneğin, fizik simülasyonları yapıyorsunuz, ancak bu, lineer cebiri hesaplamak için nasıl verimli hale getireceğiniz hakkında çok fazla şey bildiğiniz anlamına gelmez. Başkaları tarafından yazılan kodu kullanmak, uzmanlıklarına güvenebileceğiniz anlamına gelir.

Dikkate alınması gereken bazı şeyler var:

  • Lisanslama. Yeniden kullanmak istediğiniz kodun yazarı, telif hakkına sahiptir ve izni olmadan kodu kullanamazsınız. Kütüphaneler, onlarla neler yapabileceğinizi söyleyen bir lisansla birlikte gelir ve kütüphaneyi kullanmak istiyorsanız, lisansa uymanız gerekir. Armadillo, Mozilla Kamu Lisansı 2.0 altındadır, yani özgürce kullanabilirsiniz.
  • Entegrasyon. Projeniz daha büyükse, üçüncü taraf kitaplıklarını entegre etmek oldukça karmaşık olabilir. Kütüphaneden aldığınız kullanım miktarına bağlı olarak buna değmeyebilir.
  • Dağıtım. Bir kitaplık yalnızca DLL olarak mevcutsa veya sistemle ilgili bazı kayıtlara ihtiyaç duyuyorsa, ancak dağıtım yönteminizin "bu yürütülebilir dosyayı bir yere kopyalaması" ndan oluşması gerekiyorsa, kitaplığı kullanamayabilirsiniz.

Söylediği gibi, bir programcıda tembellik bir erdemdir.


1
Üzerinde dokunun ama soru söz classwork yapar çünkü, çok önemli değil öğrenmeye çalışıyoruz parça için bir paket veya kütüphaneyi kullanmak. Bir sinir ağının nasıl kurulacağını öğrenmeye çalışıyorsanız, argüman ayrıştırma, dosya dosyalama için bir kütüphane kullanmaktan çekinmeyin, ancak sinir ağını kendiniz yazın.
Alan Shutko

3
Listenizde eksik olan önemli bir nokta gelecekteki bakımdır. Bir üçüncü taraf lib'i kullanmayı düşünürken ve kapalı kaynak veya açık kaynaktır, ancak kendi organizasyonunun gelecekteki bakımına izin vermek için çok karmaşıktır, kütüphane satıcısının gelecekteki bakım hizmetlerini (lib'in gelişimi dahil) sağlayacağından emin olmak gerekir. ) belirli bir süre için. Bu, belirli yazılım şirketlerinin belirli kütüphaneleri kullanmamalarının ve ilk bakışta savurgan görünseler bile kendileri oluşturmayı tercih etmelerinin en büyük nedenlerinden biridir.
Doc Brown

1

"İzin verilen" ile ne demek istiyorsun? Sanırım buraya bazı yeni başlayan öğrencilerin yanlış algısını açıklığa kavuşturabilecek bir şey ekleyebilirim: üniversitede kendi kodunuzu, algoritmalarınızı vb. Yazmanız isteniyor, çünkü bir kurs öğreniyorsunuz ve neyi pekiştirmek istiyorsunuz kodu kendiniz yazarak sınıflarda öğrendiniz. Böyle bir kodlama, öğrenme sürecinize bir yardımcıdır . Örneğin, belirli bir veri yapısını / algoritmayı öğrendikten sonra, aslında nasıl çalıştığını görmek ve anlayışınızı derinleştirmek için kendi kodunuzu yazarsınız. Bu mantıklı.

Gerçek hayattaki bir programlama projesi yaparken, bazı kavramları / bilgileri öğrenmeye yardımcı olarak kod yazmazsınız; bir mühendislik ürünü üretmeye çalışıyorsunuz. Mühendislik gerçekten icatla ilgili değildir, ancak belirli bir pratik ihtiyaca hitap etmek için zaten başkaları tarafından ortaya konan temellerin üzerine inşa edilir. Programlamanın% 80'inin başkalarının kütüphanelerini / kodlarını okuyup / yeniden kullandığını ve% 20'sinin kendinizinkini yazdığını söyler. Biraz abartılı olabilir ama ruhu elde edersiniz.

Sizin durumunuzda, bir kurs için bir programlama projesi yapıyorsanız ve açıkça kendi algoritmanızı kodlamanızı istiyorsa, harici kütüphaneler kullanmak istemezsiniz. Kendi mühendislik projenizi yapıyorsanız, kendi projenizi bulmaya çalışmadan önce mümkün olduğunca çok kütüphane kullanın.

Bu ayrımı netleştirin ve ne yaptığınızı anlayacaksınız.

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.