Bahasa terbaik untuk komputasi ilmiah [ditutup]

10

Sepertinya sebagian besar bahasa memiliki sejumlah perpustakaan komputasi ilmiah yang tersedia.

  • Python memiliki Scipy
  • Rust telah SciRust
  • C++memiliki beberapa termasuk ViennaCLdanArmadillo
  • Javamemiliki Java Numericsdan Coltjuga beberapa lainnya

Belum lagi bahasa seperti Rdan Juliadirancang secara eksplisit untuk komputasi ilmiah.

Dengan begitu banyak pilihan, bagaimana Anda memilih bahasa terbaik untuk suatu tugas? Selain itu bahasa apa yang akan paling berhasil? Pythondan Rtampaknya memiliki daya tarik paling besar dalam ruang, tetapi secara logis bahasa yang dikompilasi sepertinya itu akan menjadi pilihan yang lebih baik. Dan akankah ada yang lebih baik dari itu Fortran? Selain itu bahasa yang dikompilasi cenderung memiliki akselerasi GPU, sementara bahasa yang ditafsirkan menyukai Rdan Pythontidak. Apa yang harus saya perhitungkan ketika memilih bahasa, dan bahasa mana yang memberikan keseimbangan utilitas dan kinerja terbaik? Juga ada bahasa dengan sumber daya komputasi ilmiah yang signifikan yang saya lewatkan?

ragingSloth
sumber
12
Tidak ada pertanyaan di sini. Jika Anda perlu melakukan riset dasar tentang bahasa pemrograman, Anda lebih baik membaca Wikipedia daripada menunggu seseorang muncul di sini untuk mendorong hobinya.
Dirk Eddelbuettel
@DirkEddelbuettel Poin yang sangat bagus. Berpikir itu lebih baik untuk mencoba memproduksi konten daripada memperbaikinya pada saat ini dalam Beta, tapi saya tidak tahu banyak tentang beta SE. Apakah itu langkah yang baik di pihak saya atau tidak?
indico
1
Lihatlah angka - angka ini .
Emre
@DirkEddelbuettel Anda tidak salah, tetapi harapan saya adalah untuk mendorong diskusi tentang karakteristik dan alat yang berguna yang terkait dengan berbagai bahasa. Bahasa yang Anda gunakan adalah alat yang penting dalam ilmu data, jadi pemikiran saya adalah bahwa orang dapat mendiskusikan alat yang mereka sukai dan memberikan manfaat obyektif di sini, sebagai sumber daya bagi mereka yang ingin mencoba pekerjaan serupa.
ragingSloth
1
@ indo Coba cran.r-project.org/web/packages/overlap/index.html yang merupakan yang pertama saya pilih secara acak. Tapi sungguh, saya pribadi kenal banyak ahli statistik yang telah menulis paket R. Belum satu pun dari mereka yang menulis python. Untuk sedikit memperluas percakapan, kdnuggets.com/2013/08/... menarik.
Lembik

Jawaban:

12

Ini adalah pertanyaan yang cukup besar, jadi ini tidak dimaksudkan untuk menjadi jawaban penuh, tetapi mudah-mudahan ini dapat membantu untuk menginformasikan praktik umum tentang menentukan alat terbaik untuk pekerjaan ketika datang ke ilmu data. Secara umum, saya memiliki daftar kualifikasi yang relatif singkat yang saya cari ketika datang ke alat apa pun di ruang ini. Tanpa urutan tertentu mereka adalah:

  • Kinerja : Pada dasarnya bermuara pada seberapa cepat bahasa melakukan perkalian matriks, karena itu lebih atau kurang tugas yang paling penting dalam ilmu data.
  • Skalabilitas : Setidaknya bagi saya pribadi, ini terjadi karena kemudahan membangun sistem terdistribusi. Ini adalah suatu tempat di mana bahasa seperti Juliabenar - benar bersinar.
  • Komunitas : Dengan bahasa apa pun, Anda benar-benar mencari komunitas aktif yang dapat membantu Anda ketika Anda terjebak menggunakan alat apa pun yang Anda gunakan. Di sinilah pythonmenarik sangat jauh di depan sebagian besar bahasa lain.
  • Fleksibilitas : Tidak ada yang lebih buruk daripada dibatasi oleh bahasa yang Anda gunakan. Itu tidak terlalu sering terjadi, tetapi mencoba merepresentasikan struktur grafik haskelladalah sebuah rasa sakit yang terkenal, dan Juliadipenuhi dengan banyak sakit kode arsitektur sebagai hasil dari bahasa yang begitu muda.
  • Kemudahan Penggunaan : Jika Anda ingin menggunakan sesuatu di lingkungan yang lebih besar, Anda ingin memastikan bahwa pengaturannya mudah dan bisa otomatis. Tidak ada yang lebih buruk daripada harus membangun sebuah pabrik dengan setengah lusin mesin.

Ada banyak artikel di luar sana tentang kinerja dan skalabilitas, tetapi secara umum Anda akan melihat perbedaan kinerja mungkin 5-10x antara bahasa, yang mungkin atau mungkin tidak masalah tergantung pada aplikasi spesifik Anda. Sejauh akselerasi GPU berjalan, cudamatadalah cara yang benar-benar mulus untuk membuatnya bekerja python, dan cudaperpustakaan secara umum telah membuat akselerasi GPU jauh lebih mudah diakses daripada dulu.

Dua metrik utama yang saya gunakan untuk komunitas dan fleksibilitas adalah untuk melihat pengelola paket bahasa, dan pertanyaan bahasa di situs seperti SO. Jika ada sejumlah besar pertanyaan dan jawaban berkualitas tinggi, itu pertanda baik bahwa komunitas tersebut aktif. Jumlah paket dan aktivitas umum pada paket tersebut juga dapat menjadi proksi yang baik untuk metrik ini.

Sejauh kemudahan penggunaan berjalan, saya sangat percaya bahwa satu-satunya cara untuk benar-benar tahu adalah benar-benar mengaturnya sendiri. Ada banyak takhayul di sekitar banyak alat Data Science, khususnya hal-hal seperti database dan arsitektur komputasi terdistribusi, tetapi tidak ada cara untuk benar-benar tahu apakah ada sesuatu yang mudah atau sulit untuk disiapkan dan dipasang tanpa hanya membangunnya sendiri.

indico
sumber
Untuk menambah jawaban ini: dalam hal skalabilitas, Scaladan Golayak disebut.
Marc Claesen
Saya akan menambahkan kejelasan dan singkatnya (terkait dengan sintaks dan arsitektur bahasa, tetapi tidak hanya). Mampu menulis cepat dan membaca tanpa rasa sakit membuat perbedaan besar (karena waktu programmer lebih mahal daripada waktu mesin).
Piotr Migdal
5

Bahasa terbaik tergantung pada apa yang ingin Anda lakukan. Komentar pertama: jangan membatasi diri Anda pada satu bahasa. Mempelajari bahasa baru selalu merupakan hal yang baik, tetapi pada titik tertentu Anda harus memilih. Fasilitas yang ditawarkan oleh bahasa itu sendiri adalah hal yang jelas untuk dipertimbangkan tetapi menurut saya yang berikut ini lebih penting:

  • perpustakaan yang tersedia : apakah Anda harus mengimplementasikan semuanya dari awal atau dapatkah Anda menggunakan kembali barang yang ada? Perhatikan bahwa ini perpustakaan ini tidak perlu dalam bahasa apa pun yang Anda pertimbangkan, selama Anda dapat antarmuka dengan mudah. Bekerja dalam bahasa tanpa akses perpustakaan tidak akan membantu Anda menyelesaikan sesuatu.
  • sejumlah pakar : jika Anda ingin pengembang eksternal atau mulai bekerja dalam tim, Anda harus mempertimbangkan berapa banyak orang yang benar-benar tahu bahasa tersebut. Sebagai contoh ekstrem: jika Anda memutuskan untuk bekerja di Brainfuck karena Anda menyukainya, ketahuilah bahwa Anda kemungkinan akan bekerja sendiri. Ada banyak survei yang dapat membantu menilai popularitas bahasa, termasuk jumlah pertanyaan per bahasa di SO.
  • toolchain : apakah Anda memiliki akses ke debugger yang baik , profiler, alat dokumentasi dan (jika Anda suka) IDE?

Saya sadar bahwa sebagian besar poin saya mendukung bahasa yang sudah mapan. Ini dari perspektif 'selesaikan'.

Yang mengatakan, saya pribadi percaya bahwa jauh lebih baik menjadi mahir dalam bahasa tingkat rendah dan bahasa tingkat tinggi:

  • tingkat rendah: C ++, C, Fortran, ... menggunakan mana Anda dapat menerapkan hot spot profil tertentu hanya jika Anda perlu karena pengembangan dalam bahasa-bahasa ini biasanya lebih lambat (meskipun ini dapat diperdebatkan). Bahasa-bahasa ini tetap menjadi raja bukit dalam hal kinerja kritis dan cenderung tetap di atas untuk waktu yang lama.
  • level tinggi: Python, R, Clojure, ... untuk 'merekatkan' hal-hal bersama dan melakukan hal-hal penting non-kinerja (preprocessing, penanganan data, ...). Saya menemukan ini penting hanya karena jauh lebih mudah untuk melakukan pengembangan dan pembuatan prototipe cepat dalam bahasa-bahasa ini.
Marc Claesen
sumber
4

Pertama, Anda perlu memutuskan apa yang ingin Anda lakukan, kemudian mencari alat yang tepat untuk tugas itu.

Pendekatan yang sangat umum adalah menggunakan R untuk versi pertama dan untuk melihat apakah pendekatan Anda benar. Tidak memiliki sedikit kecepatan, tetapi memiliki perintah yang sangat kuat dan addon libraries, yang dapat Anda coba hampir apa saja dengan itu: http://www.r-project.org/

Gagasan kedua adalah jika Anda ingin memahami algoritma di belakang perpustakaan, Anda mungkin ingin melihat pada Numerical Recipies. Mereka tersedia untuk berbagai bahasa dan bebas digunakan untuk belajar. Jika Anda ingin menggunakannya dalam produk komersial, Anda perlu membeli lisensi: http://en.wikipedia.org/wiki/Numerical_Recipes

Sebagian besar kinerja waktu tidak akan menjadi masalah tetapi menemukan algoritma dan parameter yang tepat untuk mereka, jadi penting untuk memiliki bahasa skrip cepat alih-alih program monster yang pertama-tama harus dikompilasi 10 menit sebelum menghitung dua angka dan mengeluarkan hasil.

Dan nilai tambah yang besar dalam menggunakan R adalah ia memiliki fungsi atau pustaka bawaan untuk hampir semua jenis diagram yang Anda mungkin perlu memvisualisasikan data Anda.

Jika Anda kemudian memiliki versi yang berfungsi, hampir mudah untuk porting ke bahasa lain yang menurut Anda lebih berkinerja baik.

Armin
sumber