Baru-baru ini, saya harus memahami desain program kecil yang ditulis dalam bahasa yang saya tidak tahu tentang ( ABAP , jika Anda harus tahu). Saya bisa mengetahuinya tanpa terlalu banyak kesulitan.
Saya menyadari bahwa menguasai bahasa baru adalah permainan bola yang sama sekali berbeda, tetapi murni memahami maksud kode (khususnya kode standar produksi, yang tidak harus rumit) dalam bahasa apa pun adalah langsung, jika Anda sudah tahu beberapa bahasa (lebih disukai satu prosedural / OO dan satu fungsional).
Apakah ini secara umum benar? Apakah semua bahasa pemrograman terdiri dari konstruksi yang serupa seperti loop, pernyataan kondisional dan pesan yang lewat di antara fungsi? Apakah ada bahasa non-esoterik yang tidak bisa dipahami oleh programmer Java / Ruby / Haskell yang khas? Apakah semua bahasa memiliki asal yang sama?
sumber
Jawaban:
Dasar-dasar sebagian besar bahasa prosedural hampir sama.
Mereka menawarkan:
Jika Anda memahami hal ini, Anda memiliki pemahaman yang baik tentang 90% bahasa di planet ini. Apa yang membuat bahasa ini sedikit lebih sulit untuk dipahami adalah variasi sintaksis aneh yang digunakan orang untuk mengatakan hal-hal dasar yang sama. Beberapa menggunakan notasi singkat yang melibatkan tanda baca aneh (APL menjadi ekstrem). Beberapa menggunakan banyak kata kunci (COBOL menjadi perwakilan yang sangat baik). Itu tidak masalah. Yang penting adalah jika bahasa itu cukup lengkap dengan sendirinya untuk melakukan tugas-tugas kompleks tanpa menyebabkan Anda merobek rambut Anda. (Cobalah mengkode beberapa peretasan string serius dalam skrip shell Window DOS: Turing mampu tetapi sangat buruk dalam segala hal).
Bahasa prosedural yang lebih menarik menawarkan
Meskipun secara teknis bukan properti dari langauge, tetapi properti ekosistem di mana bahasa tersebut hidup, adalah perpustakaan yang mudah diakses atau disediakan dengan bahasa sebagai bagian dari alat pengembangan. Memiliki berbagai fasilitas perpustakaan menyederhanakan / mempercepat penulisan aplikasi hanya karena kita tidak perlu menemukan kembali apa yang dilakukan perpustakaan. Sementara Java dan C # secara luas dianggap sebagai bahasa yang baik di dalam dan dari diri mereka sendiri, apa yang membuatnya benar-benar bermanfaat adalah perpustakaan besar yang menyertainya, dan perpustakaan ekstensi yang mudah didapat.
Bahasa yang lebih sulit untuk dipahami adalah yang non-prosedural:
Ada dua gaya representasional utama untuk bahasa:
Bahasa grafis sering memungkinkan sub teks Bahasa sebagai anotasi dalam node dan pada busur. Bahasa grafis yang lebih aneh secara rekursif memungkinkan grafik (dengan teks :) di node dan pada arc. Bahasa grafis yang benar-benar aneh memungkinkan grafik penjelasan menunjuk ke grafik yang diberi keterangan.
Sebagian besar bahasa ini didasarkan pada sejumlah kecil model perhitungan:
Mengingat fokus oleh sebagian besar industri pada bahasa prosedural dan struktur kontrol yang kompleks, Anda dilayani dengan baik jika Anda mempelajari salah satu bahasa yang lebih menarik dalam kategori ini dengan baik, terutama jika itu mencakup beberapa jenis orientasi objek.
Saya sangat merekomendasikan mempelajari Skema, khususnya dari buku yang sangat indah: Struktur dan Interpretasi Program Komputer . Ini menjelaskan semua konsep dasar ini. Jika Anda mengetahui hal ini, bahasa lain akan tampak sangat mudah kecuali untuk sintaks yang konyol.
sumber
Bahasa deskripsi perangkat keras adalah bahasa pemrograman, tetapi mereka secara konseptual sangat berbeda. Coba VHDL atau Verilog untuk ukuran. Mereka umum untuk pemrograman FPGA. (Ok, jadi mereka bukan prosesor, tetapi mereka adalah perangkat komputasi tujuan umum. Dan itu harus dianggap perangkat keras yang valid untuk topik ilmu komputer.) Anda harus secara eksplisit membuat hal-hal terjadi secara serial. Ini model yang sama sekali berbeda. Anda telah memikirkan hal-hal yang terjadi secara paralel sebagai aturan bukan pengecualian. Untuk loop di Verilog, ekspansi ke perangkat paralel. Jadi perilaku "yang diharapkan" mungkin tidak seperti yang Anda harapkan.
sumber
Tergantung pada apa yang Anda maksud dengan "pada dasarnya." Semua bahasa dengan fleksibilitas apa pun adalah Turing-complete. Dalam pengertian itu: ya, mereka semua pada dasarnya sama.
Pada level rendah, mereka semua melakukan urutan operasi yang sama dan semua Windows, Linux, dan hal-hal OS X (baru-baru ini) semuanya berjalan pada prosesor yang kompatibel dengan Intel menggunakan set instruksi yang sama. Dengan cara itu mereka pada dasarnya juga sama.
Saya menyadari bahwa Anda agak mendefinisikan "pada dasarnya" dalam pertanyaan Anda, tetapi untuk benar-benar menjawabnya, definisi itu harus lebih disempurnakan. Dalam banyak hal mereka semua sama. Dalam banyak hal mereka berbeda. Terlalu mudah untuk mengatakan "itu tergantung." Jika Anda memilih salah satu dari yang ekstrem, pertanyaan tersebut kemungkinan tidak akan menjawab apa yang Anda inginkan sehingga ke mana garis itu ditarik sangat penting untuk menjawab pertanyaan Anda saat Anda menginginkannya.
sumber
Saya akan mengatakan bahwa suatu bahasa mengkodekan makna. Jika maknanya memiliki arti dalam konteks tertentu maka semua bahasa yang dapat mengekspresikan maknanya dapat dikatakan setara dibatasi oleh maknanya dan konteksnya.
Jika Anda membatasi konteks itu pada mesin Von Neumann standar, maka makna komputasi dari mengubah memori dan komputasi dalam cpu dapat dikatakan sebagai asal - dan mungkin satu-satunya makna yang dimiliki semua bahasa. Semua hal lain dibangun berdasarkan ini.
sumber
Bahasa pemrograman juga merupakan alat untuk berpikir. Dengan perspektif pemikiran lain, beberapa masalah hilang atau ditransformasikan ke jenis yang berbeda dan lebih mudah dikelola (misalnya, banyak pola desain gaya C ++ hilang begitu saja ketika Anda berpikir dalam Lisp (lihat misalnya presentasi Peter Norvik ini ), dan Erlang membebaskan Anda dari berpikir dari beberapa konkurensi tingkat rendah atau konstruksi komputasi terdistribusi dan memungkinkan Anda hanya berkonsentrasi pada logika aplikasi).
Namun, perlu diketahui bahwa kadang-kadang paradigma "baru" sebagian dapat diterapkan ke bahasa pemrograman "lama" yang menjelaskan mengapa kita misalnya memiliki buku yang mengajarkan pemrograman fungsional untuk programmer Java . Tetapi secara alami mendukung dan mengintegrasikan paradigma yang lebih kuat di tingkat bahasa memungkinkan penerapan paradigma yang lebih alami (dan akibatnya membuatnya tidak mungkin untuk memahami program dalam bahasa yang mendukung paradigma asing, seperti yang ditunjukkan oleh jawaban lain - @Ira Baxter mendaftar bahasa-bahasa non-prosedural) dan @kwatford merujuk pada Paul Graham ).
sumber
Pada level terendah, setiap bahasa pemrograman adalah "sama," tetapi itu tidak berarti bahwa mereka sama pada level di mana Anda benar-benar berinteraksi. Mereka abstrak masalah untuk Anda; itu tidak berarti bahwa mereka mengabstraksi masalah yang sama atau bahwa mereka mengabstraksi setiap masalah dengan cara yang sama.
sumber
Bahasa dewasa umumnya memiliki beberapa tujuan, dan mereka membuat pengorbanan di mana mereka mengorbankan satu hal untuk yang lain. Bahasa tujuan umum dapat digunakan untuk apa saja, tetapi tidak ada bahasa yang bisa unggul di setiap bidang. Beberapa contoh:
C berusaha untuk menjadi bahasa pemrograman sistem yang ideal. Untuk tujuan ini ia mengorbankan keterbacaan dan keamanan untuk kontrol dan kecepatan tingkat rendah.
Python bertujuan untuk menjadi bahasa scripting yang ideal. Untuk tujuan ini mengorbankan kecepatan dan verifikasi untuk produktivitas dan portabilitas.
Haskell mencoba menjadi bahasa yang aman, murni secara matematis. Untuk tujuan ini ia mengorbankan kemampuan belajar dan konvensi untuk verifikasi dan keandalan.
Pengorbanan dan manfaat ini membuat perbedaan besar dalam bahasa. Ya, kebanyakan bahasa pemrograman dapat digunakan untuk apa saja yang bisa dilakukan oleh komputer, namun tidak satupun dari bahasa-bahasa yang sama harus digunakan untuk semuanya. Semua bahasa di atas adalah yang saya pilih untuk tugas-tugas tertentu tetapi tidak untuk yang lain. Jika saya sedang memprogram sistem operasi saya akan memilih C. Jika saya menulis backend untuk sebuah situs web, saya akan menggunakan Python. Dan jika saya sedang menulis sistem keuangan saya akan menggunakan Haskell.
Pada akhirnya, pilihan Anda sebagai programmer adalah alat yang tepat untuk pekerjaan itu.
sumber