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?
sumber
Jawaban:
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:
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:
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.
sumber
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.
sumber
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.
sumber
1 + 1
mengirim pesan+
ke objek1
? Itu tidak mengubah struktur program Anda sedikit pun.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.sumber
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.
sumber
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.
sumber
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
tetapi Anda lebih peduli
Jadi saya pikir Ruby sangat kuat sehingga banyak fitur itu tidak akan digunakan dalam program ilmiah. Lebih mudah hanya berpikir dalam prosedur.
sumber
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).
sumber
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.
sumber
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.
sumber