Saya suka pemrograman dalam bahasa yang tampaknya diarahkan untuk para programmer hardcore. (Favorit saya adalah Python dan D.) MATLAB diarahkan untuk insinyur dan R diarahkan untuk ahli statistik, dan sepertinya bahasa-bahasa ini dirancang untuk orang-orang yang bukan programmer hardcore dan tidak berpikir seperti programmer hardcore. Saya selalu menemukan mereka agak canggung untuk digunakan, dan sampai batas tertentu saya tidak tahu mengapa. Berikut adalah beberapa masalah yang berhasil saya identifikasi:
- (Keduanya): Penekanan ekstrem pada vektor dan matriks sejauh tidak ada primitif sejati.
- (Keduanya): Kesulitan manipulasi string dasar.
- (Keduanya): Kurang atau canggung dalam mendukung struktur data dasar seperti tabel hash dan "nyata", yaitu tipe-parametrik dan nestable, array.
- (Keduanya): Mereka sangat, sangat lambat bahkan oleh standar bahasa yang ditafsirkan, kecuali Anda membungkuk ke belakang untuk membuat vektor kode Anda.
- (Keduanya): Mereka tampaknya tidak dirancang untuk berinteraksi dengan dunia luar. Sebagai contoh, keduanya adalah program yang cukup besar yang membutuhkan waktu cukup lama untuk diluncurkan dan tampaknya tidak dirancang untuk membuat program filter teks sederhana mudah untuk ditulis. Selain itu, kurangnya pemrosesan string yang baik membuat file I / O dalam bentuk apa pun tetapi sangat standar hampir mustahil.
- (Keduanya): Orientasi objek tampaknya memiliki perasaan yang sangat melesat. Ya, Anda bisa melakukannya, tetapi tidak terasa jauh lebih idiomatis daripada OO dalam C.
- (Keduanya): Tidak ada cara yang jelas dan sederhana untuk mendapatkan jenis referensi. Tidak ada referensi kelas atau referensi. Misalnya, saya tidak tahu bagaimana Anda menggulung daftar tertaut Anda sendiri dalam salah satu bahasa ini.
- (MATLAB): Anda tidak dapat menempatkan beberapa fungsi tingkat atas dalam satu file, mendorong fungsi yang sangat panjang dan pengkodean cut-and-paste.
- (MATLAB): Integer tampaknya tidak ada sebagai tipe kelas satu.
- (R): Struktur data dasar yang dibangun tampaknya terlalu tinggi dan tidak terdokumentasi dengan baik, dan tampaknya tidak pernah melakukan apa yang saya harapkan mengingat pengalaman saya dengan struktur data yang serupa tetapi tingkat lebih rendah.
- (R): Dokumentasi tersebar di semua tempat dan hampir mustahil untuk dijelajahi atau dicari. Bahkan D, yang sering mengetuk untuk dokumentasi yang buruk dan masih cukup alpha-ish, jauh lebih baik sejauh yang saya tahu.
- (R): Setidaknya sejauh yang saya ketahui, tidak ada IDE yang bagus untuk itu. Sekali lagi, bahkan D, bahasa yang cukup alfa-ish dengan komunitas kecil, lebih baik.
Secara umum, saya juga merasa seperti MATLAB dan R dapat dengan mudah digantikan oleh perpustakaan lama biasa dalam bahasa yang lebih umum, jika ada perpustakaan yang cukup komprehensif. Ini terutama benar dalam bahasa tujuan umum yang lebih baru yang mencakup banyak fitur untuk penulis perpustakaan.
Mengapa R dan MATLAB tampak aneh bagi saya? Adakah masalah besar lain yang Anda perhatikan yang mungkin membuat bahasa-bahasa ini terasa aneh bagi para programmer hardcore? Ketika penggunaannya diperlukan, apa saja kiat bertahan hidup yang baik?
Sunting: Saya melihat satu masalah dari beberapa jawaban yang saya dapatkan. Saya memiliki preferensi pribadi yang kuat, ketika saya menganalisis data, untuk memiliki satu skrip yang menggabungkan seluruh pipa. Ini menyiratkan bahwa bahasa tujuan umum perlu digunakan. Saya benci harus menulis skrip untuk "membersihkan" data dan meludahkannya, lalu yang lain untuk membacanya kembali di lingkungan yang sama sekali berbeda, dll. Saya menemukan gesekan menggunakan MATLAB / R untuk beberapa pekerjaan saya dan sepenuhnya bahasa yang berbeda dengan ruang alamat yang sama sekali berbeda dan cara berpikir untuk yang lain menjadi sumber gesekan yang sangat besar. Selain itu, saya tahu ada lapisan lem yang ada, tetapi mereka selalu tampak sangat rumit dan sumber gesekan.
Jawaban:
Mungkin ide yang buruk untuk mendekati bahasa-bahasa khusus domain dengan pola pikir yang diperlukan untuk pemrograman pada umumnya, atau untuk pemrograman program umum dengan bahasa tujuan umum. Menjadi spesifik domain, mereka kemungkinan akan membutuhkan kurva belajar yang lebih curam dan pola pikir yang tidak nyaman agar digunakan paling efisien. Saya menganggap menulis kode dalam Matlab setara dengan menulis kode khusus domain yang sangat dioptimalkan (setara dengan, misalnya, menulis kode OpenGL yang efisien dan bersih). Saya juga melihat mereka bergerak semakin ke arah menjadi berguna sebagai perpustakaan untuk digunakan dalam bahasa lain - lihat, misalnya, http://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c
Saya akan mengatakan, gunakan proses yang sama untuk DSL ini seperti yang Anda lakukan untuk orang lain:
sumber
Saya akan mengawali ini dengan mencatat bahwa saya akrab dengan MATLAB, tetapi tidak R.
Alasan MATLAB tidak bekerja dengan baik dengan OO, pemrosesan string, atau struktur data khusus adalah bahwa itu tidak dimaksudkan untuk melakukan hal-hal itu. Ada banyak bahasa untuk OO, banyak yang melakukan pekerjaan dengan baik dengan pemrosesan string, dan banyak lagi yang mendukung tipe data kustom gila. Tidak ada dari mereka yang bagus dalam perkalian matriks, karena mereka tidak dirancang untuk itu
Hanya mengoptimalkan operasi vektor dan matriks yang dilakukan MATLAB cukup sulit tanpa berurusan dengan tipe atau pointer yang ditentukan pengguna atau apa yang tidak (jika tidak sulit, mereka tidak akan dapat membebani biaya terlalu banyak untuk itu). Menambahkan dukungan vektor cepat ke bahasa tujuan umum yang ada juga sulit dilakukan --- itu menambahkan overhead besar untuk fitur yang beberapa programmer akan pernah menggunakan (terlalu sedikit programmer memahami daftar terkait, bagaimana mereka diharapkan untuk menggunakan dekomposisi nilai eigen? ).
MATLAB sangat asing bagi Anda karena dirancang untuk memungkinkan para ilmuwan dan insinyur melakukan perkalian matriks dan perhitungan ODE dengan sangat cepat. MATLAB tidak sesuai dengan definisi Anda tentang bahasa "hardcore" karena tidak pernah seharusnya. Mencoba untuk berpikir tentang MATLAB dalam hal Python atau D seperti mencoba untuk berpikir tentang LISP atau Haskell dalam hal C atau tentang Verilog dan VHDL dalam hal JavaScript --- mereka memecahkan masalah yang berbeda dan mendekati pemecahan masalah dengan cara yang sangat berbeda. Agar adil, MATLAB membuat beberapa (aneh, banyak) pilihan desain bahasa yang aneh yang saya tidak bisa membungkus kepala saya, bahkan dari perspektif bahasa khusus domain. Tetapi tidak ada alasan khusus mengapa seorang astronom harus peduli bahwa benda langit X persis 48 AU dari benda langit Y dibandingkan dengan 48,0 AU.
Sekarang, untungnya, beberapa perpustakaan datang ke lokasi yang melakukan persis seperti yang Anda sarankan: dukungan yang baik untuk perhitungan ilmiah dalam bahasa tujuan umum. Untuk Python, ada NumPy / Matplotlib yang memiliki beberapa tepi kasar tetapi menyediakan fungsionalitas MATLAB yang wajar di dalam Python. Alasan belum ada proyek lain seperti ini adalah bahwa perpustakaan sangat sulit untuk menulis dan melayani pasar yang sudah dicakup oleh MATLAB dan FORTRAN.
Jika Anda benar-benar harus menggunakan MATLAB atau R, Anda tidak dapat mendekati pemrograman di dalamnya seperti programmer "hardcore", Anda harus mendekatinya seperti ilmuwan atau insinyur "hardcore". Untuk LISP, Anda harus berpikir dalam rekursi. Di MATLAB, Anda hanya perlu berpikir dalam matriks. Memoles aljabar linier ( kuliah MIT tentang topik ini adalah ulasan yang bagus). Kalau tidak, satu-satunya cara untuk "bertahan" MATLAB adalah dengan praktik untuk mengenali kapan loop dapat diganti dengan operasi vektor atau ketika masalah Anda berkurang untuk menemukan nilai eigen dari produk luar.
sumber
Penggunaan berulang Anda atas istilah "programmer hardcore" mengacu pada diri Anda sendiri. bersama dengan sindiran Anda bahwa perancang R dan MATLAB tidak , menurut saya sangat konyol dan mendorong orang untuk tidak menganggap kritik Anda serius.
Jika Anda ingin membaca beberapa kritik serius terhadap R, Anda sebaiknya membaca bagian ini oleh Ross Ihaka, salah satu desainer R. Sepertinya inti yang lebih sulit bagi saya untuk merancang R daripada menggunakan D atau Python.
sumber
Itu tergantung apa yang Anda sebut primitif sejati. Dalam R, vektor adalah primitif sejati; yaitu, semua variabel adalah vektor. Demikian juga, dalam MATLAB semua variabel adalah matriks.
Dalam MATLAB, manipulasi string sangat kuat tetapi saya setuju bahwa kode tersebut sering jelek dan tidak intuitif (setidaknya untuk saat ini). Untuk R, ada
stringr
paketnya, yang sama bagusnya dengan alat dalam bahasa lain.Di R, vektor memiliki nama yang berfungsi seperti hash. Ada juga paket
hash
danfilehash
. Tidak yakin tentang implementasi MATLAB, tetapi Anda dapat memanggil versi JAVA atau .NET dengan mudah jika Anda mau.Setelah Anda terbiasa dengan vektorisasi (saya yakin Anda akan melakukannya, jika Anda benar-benar hardcore) Anda akan mengutuk harus menggunakan loop ketika Anda kembali ke bahasa lain. Kecepatan eksekusi adalah tradeoff untuk kecepatan pemrograman.
Mereka berdua dapat membaca dan menulis data dalam format apa pun. Keduanya dapat dipanggil dari sebagian besar bahasa pemrograman lainnya. Atau dari prompt perintah. Anda dapat membuat GUI dengan mereka. Bagaimana itu tidak berinteraksi dengan dunia luar? Jika Anda kesulitan dengan program filter teks Anda, tanyakan pada stackoverflow.
Sepakat; mereka terutama bahasa prosedural.
Disetujui dalam R. Dalam MATLAB, referensi disebut pegangan.
Omong kosong. Cukup buat beberapa file.
Mereka melakukannya. Lihat
int8
,int16
,int32
danint64
.Mereka cocok untuk melakukan analisis data. Tolong beri contoh spesifik perilaku yang tidak terduga.
Ada banyak jenis dokumentasi. Mulailah dengan
?some_function
,RSiteSearch('some concept')
, rseek.org , dansos
paket. Belum lagi manual yang datang dengan instalasi. Atau buku yang bagus .Coba Arsitek atau RStudio atau IDE Analytics Revolusi. Lihat bagian "IDE dan editor untuk R" pada halaman info Stack Overflow untuk tautan dan lebih banyak opsi.
sumber
MATLAB dapat berintegrasi dengan Java dan C / C ++. Anda dapat menerapkan semua beban kerja non-numerik Anda dalam bahasa-bahasa ini, dan memintanya dari MATLAB.
Apakah ada alasan mengapa itu perlu? Apakah Anda mengerjakan basis kode MATLAB yang ada yang ditulis oleh orang lain? Apakah ini persyaratan kerja? (atau persyaratan kelas jika Anda di sekolah) Jika tidak, Anda dapat menggunakan SciPy atau NumPy sebagai gantinya.
Sayangnya, menurut pendapat pribadi saya, jika situasi ini dipaksakan pada seseorang, itu tidak selalu bisa bertahan. Bahkan di perguruan tinggi, tidak semua mahasiswa teknik dapat terbiasa dengan cara berpikir komputasi MATLAB.
sumber
Saya bekerja dengan MATLAB, Python dan C (dan kadang-kadang C ++), dan saya menganggap diri saya (terutama) pengembang perangkat lunak, duduk di hadapan rekan kerja yang cenderung ilmuwan data, ahli matematika, atau spesialis domain lainnya.
Walaupun saya akan menjadi orang pertama yang mengakui bahwa itu bukan bahasa pemrograman untuk tujuan umum dalam arti C atau Python, saya sebenarnya sangat suka menulis skrip dalam MATLAB, terutama untuk hal-hal seperti analisis deret waktu atau pemrosesan gambar.
Ada beberapa fitur bahasa yang, meskipun secara umum diimplementasikan dengan sangat tidak efisien, adalah sukacita untuk digunakan. Misalnya, ambil pengindeksan logis: Saya dapat membuat vektor atau matriks logis yang memilih kawasan yang menarik, dan beri nama "isInROI", melakukan operasi filter untuk memilih elemen dari vektor atau matriks "data" di wilayah tersebut. maka cukup masalah penulisan: "roiData = data (isInROI)".
Saat-saat seperti inilah yang benar-benar membuat saya menghargai MATLAB, dan memungkinkan saya mengabaikan dosa-dosanya yang lain, banyak dan banyak dibahas.
sumber