Mengapa Python digunakan untuk komputasi berkinerja tinggi / ilmiah (tetapi Ruby tidak)?

106

Ada kutipan dari ceramah PyCon 2011 yang berbunyi:

Setidaknya di toko kami (Argonne National Laboratory) kami memiliki tiga bahasa yang diterima untuk komputasi ilmiah. Dalam urutan ini mereka adalah C / C ++, Fortran dalam semua dialeknya, dan Python. Anda akan melihat kekurangan mutlak dan total dari Ruby, Perl, Java.

Itu dalam konteks yang lebih umum dari komputasi kinerja tinggi. Diberikan penawaran hanya dari satu toko, tetapi pertanyaan lain tentang bahasa untuk HPC , juga mencantumkan Python sebagai salah satu untuk dipelajari (dan bukan Ruby).

Sekarang, saya bisa mengerti C / C ++ dan Fortran yang digunakan dalam masalah-ruang (dan Perl / Java tidak digunakan). Tapi saya terkejut bahwa akan ada perbedaan besar dalam penggunaan Python dan Ruby untuk HPC, mengingat bahwa mereka cukup mirip. (Catatan - Saya penggemar Python, tetapi tidak menentang Ruby).

Apakah ada alasan khusus mengapa satu bahasa lepas landas? Apakah ini tentang perpustakaan yang tersedia? Beberapa fitur bahasa tertentu? Komunitas? Atau mungkin hanya keadaan darurat historis , dan bisa saja sebaliknya?

Cyclops
sumber
2
Saya menyarankan bahwa meskipun keduanya bahasa yang dinamis, Python dan Ruby sangat berbeda. Lebih berbeda dari yang serupa.
Adam Crossland
20
Saya tidak tahu ini adalah jawaban, tetapi - ingat bahwa Python memiliki lebih banyak 'traksi' sebelum Ruby lepas landas di luar komunitas kecil dengan Rails (sekitar 2005-2006). Google telah menggunakan Python untuk sementara waktu, yang meningkatkan profilnya (awal 2000-an). Sintaksis Python jelas dan mudah dipelajari dan dibaca (dan ingat ini adalah di masa ketika Perl benar-benar satu-satunya pilihan utama lainnya), jadi saya pikir itu benar-benar mendorong perhitungan ilmiah ke arah itu. Setelah itu, itu mungkin penguatan diri, karena orang menciptakan NumPy / SciPy, MatPlotLib, dan banyak paket komputasi ilmiah lainnya.
wkl
4
Orang-orang yang tertarik pada pertanyaan ini juga tertarik untuk melihat situs pertukaran stack Ilmu Komputasi .
Mark Booth
2
"jumlah keterbacaan"
jsbueno
1
Untuk menawarkan beberapa perspektif Kimia Komputasi, sepele untuk memparalelkan perhitungan dengan Python, dan juga murah. Mungkin keduanya juga benar di Ruby. Saya tidak tahu
Jonathan Landrum

Jawaban:

108

Saya akan memperluas komentar saya.

Saya pikir ada beberapa faktor yang mempengaruhi penggunaan Python dalam komputasi ilmiah, meskipun saya tidak berpikir ada poin sejarah yang pasti di mana Anda bisa mengatakan, "Ya, itulah alasan mengapa Python digunakan di atas Ruby / apa pun "

Sejarah awal

Python dan Ruby memiliki usia yang kira-kira sama - menurut Wikipedia, Python secara resmi pertama kali dirilis pada tahun 1991, dan Ruby pada tahun 1995.

Namun, Python menjadi terkenal lebih awal daripada Ruby, karena Google sudah menggunakan Python dan mencari pengembang Python pada pergantian milenium. Karena tidak seperti kami memiliki riwayat penggunaan bahasa pemrograman dan pengaruh mereka pada orang-orang yang menggunakannya, saya akan berteori bahwa adopsi awal Python oleh Google ini adalah motivator besar bagi orang-orang yang ingin berkembang lebih dari sekadar menggunakan Matlab, C ++, Fortran, Stata, Mathematica, dll.

Yaitu, maksud saya bahwa Google menggunakan Python dalam sistem di mana mereka memiliki ribuan mesin (pikirkan paralelisasi dan skala) dan terus-menerus memproses jutaan titik data (sekali lagi, skala).

Pertemuan acara

Komputasi ilmiah dulu dilakukan pada mesin khusus seperti SGI dan Crays (ingat?), Dan tentu saja FORTRAN (dan masih) banyak digunakan karena kesederhanaan relatifnya dan karena itu dapat dioptimalkan lebih mudah.

Dalam dekade terakhir ini, perangkat keras komoditas (barang-barang yang berarti Anda atau saya mampu tanpa jutawan) telah mengambil alih di bidang komputasi ilmiah dan besar-besaran. Lihatlah peringkat 500 teratas saat ini - banyak 'komputer super' peringkat teratas di dunia dibangun dengan perangkat keras Intel / AMD normal.

Python datang pada saat yang tepat karena, sekali lagi, Google mempromosikan Python, dan Google menggunakan perangkat keras komoditas, dan mereka memiliki ribuan mesin.

Plus jika Anda menggali beberapa artikel komputasi ilmiah lama, mereka mulai bermunculan sekitar era 2000-an.

Dukungan Sebelumnya

Inilah artikel yang ditulis untuk Perangkat Lunak dan Sistem Analisis Data Astronomi , yang ditulis pada tahun 2000, menyarankan Python sebagai bahasa untuk komputasi ilmiah.

Artikel ini memiliki kutipan tentang Python:

Python adalah bahasa pemrograman berorientasi objek yang ditafsirkan yang mulai menerima banyak perhatian dalam aplikasi ilmiah (Python, 1999). Ini karena Python, dan bahasa scripting pada umumnya, merupakan langkah logis berikutnya untuk banyak proyek ilmiah (Dubois 1994). Pertama, Python menyediakan bahasa pemrograman yang ditafsirkan yang dapat dilihat sebagai perpanjangan dari bahasa perintah sederhana yang sudah digunakan oleh program ilmiah

Kedua, Python mudah diintegrasikan dengan perangkat lunak yang ditulis dalam bahasa lain. Sebagai hasilnya, ini dapat berfungsi sebagai bahasa kontrol untuk mengarahkan program yang ada serta bahasa lem untuk menggabungkan sistem yang berbeda bersama-sama. Akhirnya, Python menyediakan banyak koleksi modul pihak ketiga, basis pengguna yang mapan, dan berbagai dokumentasi dalam bentuk buku dan referensi online. Untuk alasan ini, orang mungkin melihatnya sebagai versi yang sangat halus dan diperluas dari apa yang para ilmuwan sering coba capai ketika menulis penerjemah perintah mereka sendiri.

Jadi, Anda dapat melihat bahwa Python sudah memiliki daya tarik sejak 90-an, karena secara fungsional mirip dengan sistem yang ada pada saat itu, dan karena itu mudah untuk mengintegrasikan Python dengan hal-hal seperti C dan program yang ada. Berdasarkan isi artikel, Python sudah digunakan secara ilmiah sejak periode 1995-1996.

Perbedaan Pertumbuhan Popularitas

Popularitas Ruby meledak bersamaan dengan munculnya Ruby On Rails, yang pertama kali keluar pada tahun 2004. Saya masih kuliah ketika saya pertama kali mendengar desas-desus tentang Ruby, dan itu sekitar tahun 2005-2006. Django untuk Python dirilis sekitar jangka waktu yang sama (Juli 2005 menurut Wiki), tetapi fokus komunitas Ruby tampaknya sangat berpusat pada mempromosikan penggunaannya dalam aplikasi web.

Python, di sisi lain, sudah memiliki perpustakaan yang sesuai dengan komputasi ilmiah:

  • NumPy - NumPy secara resmi dimulai pada 2005, tetapi dua perpustakaan yang dibangunnya dirilis sebelumnya: Numeric (1995), dan Numarray (2001?)

  • BioPython - perpustakaan komputasi biologis untuk python, setidaknya sudah ada sejak tahun 2001, setidaknya

  • SAGE - Paket matematika dengan rilis publik pertama di awal 2005

Dan masih banyak lagi, meskipun saya tidak tahu banyak dari garis waktu mereka (selain hanya browsing situs unduhan mereka), tetapi Python juga memiliki SciPy (dibangun di atas NumPy, dirilis pada 2006), memiliki ikatan dengan R (bahasa statistik) di awal 2000-an, mendapat MatPlotLib, dan juga punya lingkungan shell yang sangat kuat di ipython.

ipython pertama kali dirilis pada awal 2000-an, dan telah memiliki banyak fitur yang ditambahkan sehingga membuatnya sangat bagus untuk komputasi ilmiah, seperti grafik matplotlib terintegrasi dan mampu mengelola cluster komputasi .

Dari artikel di atas:

Perlu juga dicatat sejumlah proyek komputasi ilmiah terkait Python lainnya. Ekstensi Python numerik menambahkan array cepat dan manipulasi matriks ke Python (Dubois 1996), MMTK adalah toolkit berbasis Python untuk pemodelan molekuler (Hinsen 1999), proyek Biopython sedang mengembangkan alat berbasis Python untuk penelitian sains kehidupan (Biopython 1999), dan Visualisasi Toolkit (VTK) adalah paket visualisasi canggih dengan Python bindings (VTK, 1999). Selain itu, proyek yang sedang berlangsung di komunitas Python sedang mengembangkan ekstensi untuk pemrosesan dan perencanaan gambar. Akhirnya, karya yang disajikan dalam (Greenfield, 2000) menjelaskan penggunaan Python dalam proyek-proyek di STScI.

Daftar baik paket ilmiah dan numerik untuk Python .


Jadi banyak dari itu mungkin karena sejarah awal, dan ketidakjelasan relatif Ruby hingga tahun 2000-an, sedangkan Python telah mendapatkan daya tarik berkat penginjilan Google.

Jadi jika Anda mengevaluasi bahasa scripting pada periode 1995 - 2000, apa yang sebenarnya Anda lihat? Ada Perl, yang mungkin cukup berbeda secara sintaksis sehingga orang tidak ingin menggunakannya, dan kemudian ada Python, yang memiliki sintaksis yang lebih jelas dan keterbacaan yang lebih baik.

Dan ya, mungkin ada banyak penguatan diri sendiri - Python sudah memiliki semua perpustakaan yang hebat dan berguna ini untuk komputasi ilmiah, sementara Ruby memiliki suara minoritas yang menganjurkan penggunaannya dalam sains, dan ada beberapa perpustakaan yang tumbuh, seperti SciRuby , tetapi Alat Python telah matang selama dekade terakhir.

Komunitas Ruby pada umumnya tampaknya jauh lebih tertarik untuk memajukan Ruby sebagai bahasa web, karena itulah yang benar-benar membuatnya dikenal, sedangkan Python memulai pada jalur yang berbeda, dan kemudian menjadi banyak digunakan sebagai bahasa web.

wkl
sumber
8
Saya lupa sedikit tentang integrasi c. Dalam banyak kasus, perhitungan ilmiah intensif secara komputasi, dan mampu menulis rutin ac hanya untuk bagian itu merupakan keuntungan penting.
Spencer Rathbun
1
@SpencerRathbun Artikel yang saya tautkan menyebutkan menggunakan Python dengan SWIG untuk menghasilkan pembungkus dan memungkinkan Python untuk interop dengan kode C / C ++. SWIG tidak mendapatkan dukungan Ruby resmi hingga Ruby 1.6, yang dirilis pada tahun 2004. Jadi Python sudah memiliki awal yang baik hanya dalam berbagi pikiran dan tooling di sekitarnya cocok untuk memungkinkan orang untuk mengunci Python ke dalam sistem mereka yang ada. Tidak harus membuang semua yang ada, kode FORTRAN / C yang dioptimalkan yang digunakan mungkin adalah driver terbesar.
wkl
3
Pada tahun 1991 kami menggunakan TCL untuk menghubungkan perpustakaan angka sebagai cara menganalisis data tanpa harus menulis massa C / Fortran. Python datang pada waktu yang tepat untuk mengganti TCL. Kemudahan berinteraksi dengan 'C' (dan oleh F2C dengan fortran) adalah masalah besar dibandingkan dengan PERL, antarmuka TCL ke 'C' sangat mudah
Martin Beckett
Proses Lampiran Preferensial menjelaskan banyak hal buruk tentang bahasa apa yang digunakan. Ini Zipfian! Lihat The Zipf Myatery "PAP" dijelaskan pada 12:50 di dalamnya.
radarbob
37

Saya telah menggunakan Python secara ekstensif untuk aplikasi teknik dan Ruby untuk aplikasi web.

Masalah yang saya lihat dengan Ruby sebagai bahasa ilmiah adalah bahwa ada terlalu banyak opsi sintaks untuk operasi yang diberikan.

Python dirancang dengan premis berikut "Seharusnya ada satu - dan lebih disukai hanya satu - cara yang jelas untuk melakukannya". Ini membuatnya JAUH lebih mudah untuk membaca kode seseorang dan menentukan tujuannya. Ini adalah kunci untuk ulasan sejawat untuk teknik, dll.

Saya suka Ruby dan itu bagus untuk tugas-tugas tertentu, tetapi kode Ruby saya bisa sepenuhnya berbeda secara sintaksis daripada kode programmer lain yang melakukan hal yang sama persis. Ini menyebabkan terlalu banyak ambiguitas dalam lingkungan ilmiah atau insinyur.

Joshua Shreve
sumber
3
Ya memang. Ruby dalam tradisi TIMTOWTDI, dan karena itu hanya Perl sedikit lebih baik. Perangkat lunak ditulis untuk programmer. Compiler / interpreter, dalam pengertian itu, adalah audiens sekunder. Para ilmuwan cenderung serius menyelesaikan pekerjaan mereka tanpa terlalu banyak campur tangan dari perangkat lunak yang sulit. QED
Dominic Cronin
4
Tidak yakin saya mengikuti argumen ini. Jika programmer dan bukan mesin adalah audiens utama, ada kalanya kata-kata berbeda meningkatkan kejelasan dan menyoroti niat. Tidakkah bahasa yang lebih fleksibel membantu pemahaman oleh otak manusia kita yang lembut?
Andrew Vit
10
Tapi C juga bisa terlihat seperti ledakan di Pabrik ASCII. Ingatlah bahwa dalam C, array adalah skin di sekitar pointer. Jadi array [5] dapat ditulis sebagai * (array + 5) yang dapat ditulis sebagai * (5 + array) yang dapat ditulis sebagai 5 [array]. Itu bodoh.
Jonathan Landrum
1
Saya seorang programmer perl jangka panjang, dan itu tetap bahasa favorit saya untuk sebagian besar tujuan. Tidak yakin tentang matematika. Saya tidak setuju dengan sikap ini terhadap pendekatan TIMTOWTDI. Memiliki banyak pendekatan yang tersedia tidak berarti semuanya baik tentu saja, tetapi penting untuk dapat menyesuaikan ekspresi Anda sehingga memetakan secara jelas dan langsung ke ide yang Anda ungkapkan, baik kepada manusia dan audiens mesin Anda. Kurangnya opsi sintaksis tidak membantu itu.
mc0e
@AndrewVit: Tidak harus. TIMTOWTDI berfungsi dengan baik jika Anda memiliki satu pengembang, atau jika Anda memiliki tim pengembang yang kecil dan terintegrasi erat. Tapi begitu Anda memiliki orang-orang yang belum pernah bertemu bekerja pada kode yang sama, Anda akan mulai bertanya pada diri sendiri "Oh, mengapa mereka melakukannya bahwa cara?" Atau, sebagai alternatif, Anda akan menulis panduan gaya untuk memaksa semua orang melakukannya dengan cara yang sama, dan kemudian Anda tidak melakukan TIMTOWTDI lagi.
Kevin
17

Pada tebakan, sebagian besar dari itu akan menjadi ketergantungan pada matlab oleh banyak peneliti. Python memiliki alternatif, seperti sage . Sedangkan ruby ​​tidak, atau setidaknya tidak ada yang jelas.

Kedua, menurut Ruby FAQ , python berorientasi pada prosedural dan objek, sedangkan ruby menyamar sebagai bahasa prosedural. Jika Anda menulis skrip kecil untuk tujuan matematika, seperti apa yang akan Anda lakukan di matlab, paradigma OO adalah sakit kepala. Bukan hanya itu, tetapi juga memaksa lompatan konseptual dari paradigma fungsional / prosedural yang digunakan para peneliti. Matematika bukan OO. Matematika fungsional, diikuti oleh prosedural (pikirkan bukti logika).

Akhirnya, perhatikan bahwa FAQ Ruby menyatakan bahwa ruby ​​lebih kompleks daripada python. Pemrograman menempati urutan kedua bagi para peneliti, bukan yang pertama seperti kita.

Spencer Rathbun
sumber
22
Saya pikir hal OO adalah sedikit ikan haring merah. Apa yang menjadi perhatian peneliti apakah ekspresi 1 + 1mengirim pesan +ke objek 1? Itu tidak mengubah struktur program Anda sedikit pun.
sepp2k
1
@ sepp2k, saya pikir Spencer menyarankan bahwa Ruby akan membutuhkan ilmuwan untuk memprogram secara berbeda. Saya tidak tahu Ruby, tetapi seandainya Anda harus membuat objek untuk menulis sebuah program di Ruby, sedangkan Python mengizinkan prosedur - ini akan menambah overhead mental. Memang tidak banyak, tetapi bagi non-programmer, setiap pekerjaan ekstra akan menjadi alasan untuk menggunakan bahasa lain.
Cyclops
7
@ Cyclops, saya mendapatkan apa yang dia sarankan. Saya katakan itu salah. Inti dari kutipan tentang ruby ​​yang menyamar sebagai bahasa prosedural adalah Anda tidak perlu menyusun program dengan cara yang berorientasi objek. Jika Anda mengetikkan sesuatu seperti "2 + 2", Anda membuat dua objek Integer dan memanggil metode pada satu (melewati yang lain sebagai argumen). Namun itu tidak membuat mengetik "2 + 2" di ruby ​​membutuhkan usaha lebih dari mengetik "2 + 2" dalam bahasa lain.
sepp2k
5
Saya dengan sepp2k, saya juga tidak membeli argumen itu. Beberapa bahasa, seperti Java, memang memaksakan paradigma OO pada Anda - tidak demikian halnya dengan Ruby. Apa yang menghentikan Anda dari menulis program murni prosedural atau fungsional di Ruby?
Mike Baranczak
2
@ Cyclops tepatnya. Meskipun Ruby dapat berpura - pura menjadi prosedural, dalam konteks non-sepele Anda akan mengalami situasi di mana paradigma OO membuat bahasa bekerja dengan cara tertentu. Jika Anda tidak mengerti atau mengabaikannya, maka Anda tidak dapat melakukan apa yang Anda inginkan atau berakhir dengan peretasan yang berantakan.
Spencer Rathbun
14

Ketika BDFL (Guido van Rossum) pertama kali menulis Python tujuannya adalah agar dapat dimengerti seperti bahasa Inggris biasa (proposal pendanaan DARPA) yang akan menghilangkan kesalahan pengkodean yang umum.

Salah satu masalah yang sangat terlihat adalah penggunaan indent untuk membatasi blok. Dalam bahasa yang memiliki pembatas pernyataan kompleks yang eksplisit (mis. C kawat gigi, Pascal BEGIN / END) spasi putih akan diciutkan menjadi satu karakter spasi sebelum memasukkan kode ke lexer. Ini akan memungkinkan variasi besar dalam bagaimana kode ditata.

Untuk programmer profesional, ini bukan masalah karena mereka telah melatih diri untuk menghadapinya dari 30 jam atau lebih praktik dalam seminggu.

Untuk profesional lain di mana pemrograman adalah alat, masalah ini menjadi masalah besar. Grup ini termasuk ahli matematika, ahli fisika, ahli kimia, insinyur, dll.

Karena Python mengurangi kesalahan untuk programer non-profesional itu memungkinkan mereka untuk memikirkan masalah yang mereka coba selesaikan dan tidak harus berurusan dengan mekanisme bahasa sebanyak itu.

Ini adalah contoh tunggal mengapa itu populer di luar profesi pemrograman. Ada contoh lain yang bisa digunakan untuk menggambarkan titik yang sama seperti baterai yang disertakan, The Zen of Python ( import this), penggunaan humor Monty Python, dan sebagainya.

Lance Helsten
sumber
Saya tidak dapat menemukan referensi untuk disertasi atau program doktoral pada daftar riwayat hidup Guido atau daftar publikasi. Apakah Anda memiliki kutipan untuk itu? Wawancara ini hanya mengatakan dia adalah seorang peneliti di CWI.
M. Dudley
Saya benar-benar mengacaukan hal itu: Saya telah membaca bahwa yang dilakukannya adalah disertasi tentangnya, tetapi tidak melakukan penelitian yang tepat mengenai hal itu. Saya menemukan kesalahan saya setelah saya menulis posting ini, tetapi kemudian tidak pernah membuat koreksi di sini. Terima kasih.
Lance Helsten
5

Ini adalah diskusi yang hebat di sini, saya pikir posting di sini benar-benar menjawab mengapa python lebih populer di komunitas ilmiah. Namun, ada beberapa argumen konter untuk ilmu ruby:

  • ruby dapat lebih intuitif dikodekan daripada python (DSL dll): diberi paket yang tepat digunakan:

    periksa bioruby: http://bioruby.org/ cadangan urutan dapat berupa: s.reverse dll. jika Anda menggunakan database: ruby ​​database binding API bisa dibilang lebih baik daripada python.

  • ruby memungkinkan tingkat abstraksi yang lebih tinggi pada saat yang bersamaan.

  • sistem manajemen paket yang lebih baik: permata ruby ​​lebih mudah dibandingkan dengan: setuptools, pip dll

Namun, adopsi ruby ​​adalah / akan / akan terhalang oleh kompleksitasnya. Saya pikir Lisp adalah bahasa yang hebat / kuat, tetapi mengapa itu tidak lepas landas sebagai bahasa umum? situasi yang sama ada di sini dengan ruby ​​- mewarisi banyak kekuatan dari cadel, obrolan ringan, dan perl !: tetapi hanya beberapa orang yang benar-benar akan menggunakannya untuk mendapatkan manfaat. Pada akhirnya, itu mungkin tetap kuat di ceruk / area khusus tertentu (seperti rel di web, boneka dalam konfigurasi), sulit bagi 'non'programmer untuk sepenuhnya menikmatinya, tetapi mungkin teman baik programmer (melihat komputer tertentu) ilmuwan menikmati bahasanya: http://www.cleveralgorithms.com/nature-inspired/index.html )

Beberapa pembaruan terbaru: sepertinya python sudah mengambil alih lanskap. Baru-baru ini buku-buku seperti: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 dan banyak buku lainnya (analisis data, pembelajaran mesin dll), semuanya ditulis dengan python sebagai bahasa yang digunakan . Jika ruby ​​ingin mengejar ketinggalan, perlu upaya serius. Mempertimbangkan matplotlib dengan python, mungkin diperlukan beberapa tahun untuk mendapatkannya ke keadaan di mana sekarang. Kecuali beberapa upaya serius dimasukkan ke dalam ruby, itu mungkin tidak dapat mengejar ketinggalan dengan tahap analisis data python / perhitungan ilmiah dalam 2-3 tahun ke depan.

Isaac Pei
sumber
3

Setelah menggunakan python untuk analisis data untuk sementara waktu (berasal dari pengalaman bekerja dengan ruby, lua, dan R), paket numpy (dan banyak perpustakaan ilmiah terkait) memungkinkan 'menjalankan' perhitungan cepat (kecepatan mirip dengan C, seperti numpy ditulis / terintegrasi dengan kode C) dengan kemudahan pemrograman dalam python.

Numpy telah ada untuk sementara waktu, ketersediaannya membantu banyak paket ilmiah terkait lainnya untuk dibangun, seperti scipy, panda ... dll. Di sana alat-alat hebat membuat python ekosistem yang hebat untuk komputasi ilmiah, sedangkan di Ruby, matriks lebih cepat serupa perpustakaan perhitungan sedang dikembangkan (NMtrix: https://github.com/SciRuby/nmatrix ). Perbedaan waktu yang sangat besar ini menjadikan python pilihan yang jelas untuk komputasi ilmiah.

Ipstone
sumber
5
"Pada akhirnya, python seperti bahasa semua orang", Anda harus menyediakan sumber untuk mendukung ini.
Walter
2

Saya sudah bertanya-tanya hal yang sama ini. Saya pikir itu, seperti yang dikatakan Spencer Rathbun, karena aspek prosedural dari Python. Menjadi "non-programmer" sendiri, saya merasa cantik dengan cara Anda dapat kode di Ruby dan kerangka Rails sangat baik untuk kemudahan penggunaan. Namun, ketika mengkode untuk tujuan ilmiah (matematika, biologi, dll), Anda biasanya berpikir dalam bahasa "matematika", yaitu, Anda tidak peduli dengan pernyataan seperti

Person.find_by_name 'Juanito'

tetapi Anda lebih peduli

A = B*C + D

Jadi saya pikir Ruby sangat kuat sehingga banyak fitur itu tidak akan digunakan dalam program ilmiah. Lebih mudah hanya berpikir dalam prosedur.

juandiego
sumber
0

Python memiliki dukungan yang lebih baik untuk array N-dimensional dengan paket Numpy. Saya belum melihat yang serupa untuk Ruby.

Python tampaknya lebih cepat dalam komputasi numerik / komputasi ilmiah yang telah saya lakukan. Saya tidak punya bukti selain ketika saya telah menulis algoritma serupa di Python dan Ruby, algoritma Python berjalan lebih cepat (YMMV).

Josh Petitt
sumber
2
Ini tidak banyak berkontribusi dalam diskusi. Efektivitas Numpy sudah dibahas (lebih terinci) dalam jawaban yang diterima . Argumen kinerja Anda tetap tidak meyakinkan; Saya tidak suka mengandalkan anekdot ketika membahas kinerja historis, terutama ketika argumen seperti itu mungkin sudah tertutup dengan baik (well, lebih dapat dipercaya daripada tolok ukur bebas konteks).
Brian
@ Brian, setuju.
Josh Petitt
@ Brian, kontribusi spesifik saya adalah komentar pada array N-dimensional. Ini adalah inti dari apa yang dibangun Numpy, ya, tapi saya tidak melihat penyebutan array ND. Ini adalah inti dari aljabar linear dan apa yang dilakukan Matlab dan Numpy dengan baik. Ruby menggunakan array seperti programmer menggunakan array, tidak seperti insinyur dan ilmuwan menggunakan array (yaitu matriks). Jika menurut Anda itu akan membantu, saya akan menambahkan komentar tentang array ND ke jawaban yang diterima.
Josh Petitt
@Brian, dan saya masih mendukung komentar saya bahwa saya belum melihat dukungan array ND yang baik untuk Ruby untuk komputasi ilmiah.
Josh Petitt
0

Salah satu alasannya adalah bahwa Python memiliki dukungan yang baik untuk menggunakan / mengintegrasikan / memanggil kode C / C ++, sedangkan setahu saya Ruby tidak menawarkan tingkat integrasi (kemudahan) yang sama. Ini berarti bahwa Anda dapat menulis komponen kode berkinerja tinggi dalam C / C ++, dan kemudian menggunakan Python (yaitu bahasa tingkat tinggi / lebih mudah dilihat) untuk merekatkan semuanya menjadi satu. Saya membayangkan bahwa ini juga salah satu alasan adopsi institusional awalnya oleh Google.

david.barkhuizen
sumber
0

Saya pikir salah satu alasan utama Python menjadi begitu populer untuk ilmu data adalah karena jumlah waktu / usaha (yaitu, uang) yang bisa kami hemat untuk memperluas skrip kami untuk solusi nyata (misalnya, sistem perangkat lunak). Dengan Python, kita bisa lebih mudah membangun solusi sistem berdasarkan kode yang telah kita tulis untuk ilmu data.

Saya memiliki pengalaman dalam mencari bahasa juru bahasa dengan fitur ini sekitar 15 tahun yang lalu. Pada saat itu, Python dipilih untuk menjadi satu, bukan karena itu adalah bahasa yang sempurna untuk ilmu data, tetapi karena itu adalah bahasa OOP yang jarang dengan penerjemah cepat / portabel yang juga dapat diperluas untuk berinteraksi dengan bahasa lain seperti C / C ++ / Jawa. Tidak seperti saat ini, itu adalah fitur yang luar biasa tetapi jarang untuk secara langsung membangun solusi dari kode dasar yang sudah diterapkan untuk ilmu data.

Waktu mungkin merupakan faktor penting lain untuk membuat data-ilmu bahasa. 15 tahun yang lalu, kami menemukan sudah ada paket dasar seperti numerik dan scipy untuk perhitungan numerik dengan Python, tetapi kami bahkan tidak tahu keberadaan Ruby sebagai bahasa pemrograman. Pada akhir 2018, saya dapat menemukan beberapa proyek menggunakan Ruby untuk ilmu data. Mungkin 10 tahun kemudian, orang mungkin bertanya mengapa Ruby sangat populer untuk AI.

Tae-Sung Shin
sumber