Hesaplamalı bilim için hangi dili öğrenmeliyim?


11

Tamamen bilgisayar bilimi kavramında yeniyim ve iyi bir başlangıç ​​noktası arıyorum.

Nesnel olarak en iyi dilin olmadığını anlıyorum, ancak olağanüstü bir yetenek ve verimliliğe sahip olduğu düşünülen, hesaplama bilimi açısından tartışmasız güçlü ve belirgin bir varlığı olan bir dil öğrenmek istiyorum.

Başlamak için, grafiksel gösterimler / simülasyonlar için bir gereklilikle atom bağı ve etkileşimleri ile ilgili modellemeye doğru eğildim.

Bazı diller bazı alanlarda diğerlerinden daha iyi olma eğilimindedir mi (fizik ve saf matematik gibi)? Yoksa başka faktörlere dayalı bir dil mi seçiyorsunuz?

Fortran adının çok fazla atıldığını duydum.

Öneriler?


1
C ++ ve Fortran toplulukta iyi bilinen dillerdir. Son zamanlarda, dinamik dillerin kullanımında bir artış görebilirsiniz. Genellikle dilinizi değil kütüphanenizi seçersiniz.
vanCompute

9
Gerçek Programcıların Fortran'ı herhangi bir dilde yazabilecekleri sözünü hatırlattım.
hardmath

1
İşte birçok cevabı olan çok benzer bir soru: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Nesnel olarak en iyi dilin olmadığını anlıyorum" - tam olarak, neden dile agnostik olmayı öğrenmiyorsunuz, böylece size atılan herhangi bir dilde yazabilirsiniz?
JM

2
İngilizceye hakim olmalısınız. Onsuz, Hesaplamalı Bilimlerde hiçbir yere ulaşamazsınız.
Johannes

Yanıtlar:


15

Çoğunlukla görevinizi yerine getirmenize yardımcı olacak sayısal kütüphanelere gelir. C / C ++, kendileri için çok sayıda sayısal kitaplığa sahiptir, ancak düşük düzeyli diller olmak, bir şeyi hızlı bir şekilde prototiplemek için en iyisi değildir.

Çabucak bir çözüme doğru ilerlemeyi düşünüyorum, Matlab veya Mathematica gibi bir şey kullanmanızı tavsiye ederim. Büyük bir araç setine sahiptirler ve çok üst düzeydirler. Büyük olasılıkla, orada uygulamanız üretim kullanımı için ölçeklendirilmeyecektir, ancak farklı yöntemleri denemek için güzel bir oyun alanı olabilir. Bir yolu öğrendikten sonra, C / C ++ 'da her şeyi daha verimli bir şekilde uygulayabilirsiniz.


4
Akademinin içinde ve dışında birçok insan, en azından minimum otomatik test paketine sahip olmadıkça koda gerçekten güvenmiyor. Matlab ve mathematica'da bu tür şeyler için takımların nasıl olduğunu bilmiyorum, ancak Python ve C ++ gibi daha yaygın diller için birkaç güzel paket var.
cjordan1

3
MATLAB'ın MATLAB xUnit'i vardır, ancak Python ve C ++ daha fazla (ve bence daha iyi) test paketine sahiptir.
Geoff Oxberry

24

Python!

  1. Doğrudan numpy kütüphanesini, küçük komut dosyalarını ve ipython interaktif kabuğunu kullanarak başlayın .
  2. Çok sayıda ücretsiz kitap ve öğretici yardımıyla daha gelişmiş olun .
  3. Yüksek performanslı sayısal rutinler ve matplotlib için scipy'yi ön uç olarak kullanarak daha üretken olun görselleştirme için
  4. Krypy , FeNiCS ve bilimsel hesaplama için iyi geliştirilmiş ve güçlü modüllerden faydalanın diğerleri
  5. Düz ve nesne odaklı programlama ile Python'un doğal modülerliği arasındaki yumuşak geçişin daha büyük projelerin işlenmesini kolaylaştırdığına dikkat edin.
  6. Cython'daki kritik parçaları yeniden yazarak kodunuzu C veya Fortran kadar hızlı yapın . Fortran veya C ile yazılmış rutinleri de kolayca ekleyebilirsiniz .

Bu, bilimsel hesaplamadaki bir soruna yaklaşmanın en iyi yolu olduğunu düşündüğümü açıklıyor. Küçük senaryolarda oyuncak örnekleriyle oynayarak soruna yardım edin. Daha sistematik olun ve bir kod seti oluşturun. Sonra kod çalışması yapmak !!! Son olarak, gerekirse kod optimizasyonu yapın. Tekerleği yeniden icat etmeyin ve erken optimizasyon yapmayın.

(Ek artılar: Python ücretsiz olarak gelir - lisans sorunu yoktur, yığın akışı gibi büyük topluluklar, birim testi veya günlük kaydı olarak iyi programlama modülleri ...)




5

Fortran: Matlab gibi, öğrenmesi ve kullanımı kolay ve hızlı bir şekilde üretken olun, ancak sadece sayısal hesaplama için iyi

C ++: Ustalaşmak zor (yıllarca sürecek) ama sayısal hesaplama dışında çok kullanıldı (iş güvenliği)

Python: Bugünlerde çok önerilen ama önemsiz olmayan işler için çok yavaş. Hesaplama açısından pahalı olan tüm çekirdeklerinizi C'ye yazacak ve Python'dan arayacaksınız, yani (en azından) iki dil öğrenmek zorunda kalacaksınız


1
Fortran ve C ++ için öğrenme eğrisinin biraz benzer olduğunu iddia ediyorum. Her ikisi de java, matlab ve c # arka planından gelen birkaç ay içinde sorunların daha basit sonunu çözmek için yeterli becerileri aldım. Birinin bildiği dillere bağlı olarak, c ++ 'ın öğrenmesi çok daha kolay olduğunu görebiliyordum, çünkü en büyük kodlar tarihli sürümlerde yazılmıştır.
Godric Seer

@Godric: ~ 600 sayfada Fortran 2008 standardı C ++ 11'in (~ 1300 sayfa) yarısından daha az
stali

1
@stali, Evet, ama örneğin Fortran77'de yazılmış yaklaşık çeyrek milyon satır eski kodla çalışıyorum. Bu yüzden onunla çalışabilmek için 77 tarzını, üzerinde yaygın değişiklikler yapmak için 90-95 (ortak bloklar iğrenç olduğu için) ve daha sonra geçmişte on yıl boyunca sıkışıp kalmamak için '08 'stilini öğrenmek zorunda kaldım. Fortran, eski bir dil olsa da, son on yılda muazzam değişiklikler geçirdi ve sıfırdan başlamazsanız, mirasını öğrenmek önemsiz değil.
Godric Seer

2
Python'un "önemsiz işler için çok yavaş" olduğu fikrine katılmıyorum. Gerçekten de, matris-vektör çarpımlarınızı (ve benzerlerini) tamamen Python'a yazarsanız, kötü bir zaman geçireceksiniz. Yine de bazı daha verimli dillerin soyutlanması sizin için zaten yapılmıştır: NumPy, Scipy muhtemelen ihtiyacınız olan her şeye sahiptir. Veya diğer 50.000 paketten biri.
Nico Schlömer

1
@ NicoSchlömer "önemsiz olmayan işler için çok yavaş" fikrine katılıyorum. Fortran90 sürümünde 10x civarında Python'daki (Numpy / Scipy) simülasyonum aynı koddan daha yavaş. Fortran90 veya C ++ öneririm.
fronthem

4

Kısa cevap
Python ile nesne yönelimli kodun temellerini öğrenin ve C aracılığıyla bilgisayar biliminin temellerini öğrenin. En azından bu iki dille oldukça iyi olduğunuzda C ++ öğrenebilirsiniz, çünkü C ++ 'da hemen hemen her şeyi yapabilirsiniz ve hızlı bir şekilde çalışmasını sağlayın (yazmanın sonsuza dek sürmesine rağmen).

Daha uzun cevap
İşte, işte: ilk projeniz için birinin laboratuvarında başka birinin kodu üzerinde çalışacaksınız. Bu durumda programlama dilini seçeceklerdir. Şahsen bence harika bir şey!

Demek istediğim, yeni başlayan biri olarak bir süre dirsekten kıçını gerçekten tanımayacaksın ve özellikle ne yaptığını bilmediğin zaman, programlamayı öğrenmek sıkıcı olabilir. Bu nedenle, başka birinin kodu üzerinde çalışmanın getirdiği yapıya ve sınırlara sahip olmak iyidir ve sadece gerçek bir proje üzerinde çalışmaktan gelebilecek motivasyona ve heyecana sahip olmak iyidir.

Yine de, laboratuvarınız hangi dili kullanırsa kullansın (özellikle Matlab ise), muhtemelen python, C ve C ++ öğrenmelisiniz. Özellikle, bir bilgisayar bilimi geçmişinden gelmiyorsanız Kernighan ve Ritchie'nin "C Programlama Dili" ni okumalısınız. 35 yaşında ve yazarlarının delikli kartlar üzerinde programladığı konusunda farklı bir izlenim veriyor, ancak kuşların en nadiridir: zamansız bir bilgisayar bilimi kitabı. Birçok şeyi daha net hale getirecektir.

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.