Mengapa ada begitu banyak bahasa pemrograman?


130

Saya cukup lancar dalam C / C ++, dan dapat berjalan di berbagai bahasa scripting (awk / sed / perl). Saya sudah mulai menggunakan python lebih banyak karena menggabungkan beberapa aspek bagus dari C ++ dengan kemampuan scripting dari awk / sed / perl.

Tetapi mengapa ada begitu banyak bahasa pemrograman yang berbeda? Saya menduga semua bahasa ini dapat melakukan hal yang sama, jadi mengapa tidak hanya berpegang pada satu bahasa dan menggunakannya untuk pemrograman komputer? Secara khusus, apakah ada alasan saya harus tahu bahasa fungsional sebagai programmer komputer?

Beberapa bacaan terkait:


2
ada juga perbedaan antara OO dan non-OO. Plus, beberapa bahasa datang dengan paket yang bagus: R, Maple, Matlab, Mathematica yang sering kurang dari bahasa lain.
Artem Kaznatcheev


4
Sudah bertanya pada Programmer programmers.stackexchange.com/q/7551/45322
alain.janinm

2
Untuk menerapkan algoritma paralel, pemrograman fungsional lebih baik, secara umum ketika Anda memiliki objek yang bisa berubah, lebih baik menggunakan paradigma OO, jika tidak (jika Anda ingin berurusan dengan objek yang tidak dapat diubah ) lebih baik mengubahnya menjadi model fungsional. Skenario ini ada secara luas dalam pemrosesan paralel. Juga beberapa pola OO yang sangat baik, seperti antarmuka yang lancar dan metode chaining bekerja seperti paradigma fungsional.

4
Mengapa ada begitu banyak mobil? Mengapa ada begitu banyak pesawat terbang? Dan bagaimana dengan PERAHU! Maksudku, sungguh! Anda pergi ke laut dan ada, seperti, semua JENIS hal-hal dang! Apa gunanya semua hal yang berbeda itu?!?!? Itu tidak efisien! Itu sia-sia !! Dan apa gunanya semua pilihan yang berbeda itu?!?!? Ya ampun - orang bijak! Tidak ada yang mungkin membutuhkan apa pun kecuali Yugo, F-150, dan kapal laut! Oh, ya, pesawat - MD-80 akan bekerja dengan baik untuk hampir semua hal. Sana. Sekarang yang semua menetap ... :-)
Bob Jarvis

Jawaban:


116

Bahasa pemrograman berkembang dan ditingkatkan seiring berjalannya waktu (inovasi).

Orang mengambil ide dari berbagai bahasa dan menggabungkannya ke bahasa baru. Beberapa fitur ditingkatkan (mekanisme pewarisan, sistem tipe), beberapa ditambahkan (pengumpulan sampah, penanganan pengecualian), beberapa dihapus ( gotopernyataan, manipulasi pointer level rendah).

Pemrogram mulai menggunakan bahasa dengan cara tertentu yang tidak didukung oleh konstruksi bahasa apa pun. Desainer bahasa mengidentifikasi pola penggunaan tersebut dan memperkenalkan abstraksi / konstruksi bahasa baru untuk mendukung pola penggunaan tersebut. Tidak ada prosedur dalam bahasa majelis. Tidak ada kelas dalam C. Tidak ada pengecualian dalam penanganan (awal) C ++. Tidak ada cara aman memuat modul baru dalam bahasa awal (mudah di Jawa). Tidak ada utas bawaan (gampang di Jawa).

Para peneliti memikirkan cara-cara alternatif untuk mengekspresikan komputasi. Hal ini menyebabkan Lisp dan cabang bahasa fungsional pohon bahasa, Prolog dan cabang pemrograman logika, Erlang dan model pemrograman berbasis aktor lainnya, antara lain.

Seiring waktu, perancang / peneliti bahasa menjadi lebih memahami semua konstruk ini, dan bagaimana mereka berinteraksi, dan merancang bahasa untuk memasukkan banyak konstruk populer, semua dirancang untuk bekerja bersama dengan mulus. Ini menghasilkan bahasa yang luar biasa seperti Scala, yang memiliki objek dan kelas (dinyatakan menggunakan ciri-ciri alih-alih pewarisan tunggal atau ganda), fitur pemrograman fungsional, tipe data aljabar yang terintegrasi dengan baik dengan sistem kelas dan pencocokan pola, dan konkurensi berbasis aktor.

Peneliti yang percaya pada sistem tipe statis berusaha untuk meningkatkan ekspresif mereka, memungkinkan hal-hal seperti mengetikkan kelas generik di Jawa (dan semua hal indah di Haskell), sehingga seorang programmer mendapatkan lebih banyak jaminan sebelum menjalankan program yang tidak akan terjadi. salah. Sistem tipe statis sering membebankan beban besar pada programmer (mengetikkan tipe), jadi penelitian telah meringankan beban itu. Bahasa seperti Haskell dan ML memungkinkan pemrogram untuk menghilangkan semua jenis anotasi (kecuali mereka melakukan sesuatu yang rumit). Scala memungkinkan programmer untuk menghilangkan tipe-tipe dalam tubuh metode, untuk menyederhanakan pekerjaan programmer. Compiler menyimpulkan semua tipe yang hilang dan memberi tahu programmer tentang kemungkinan kesalahan.

Akhirnya, beberapa bahasa dirancang untuk mendukung domain tertentu. Contohnya termasuk SQL, R, Makefiles, bahasa input Graphviz, Mathmatica, LaTeX. Mengintegrasikan apa fungsi bahasa-bahasa ini ke dalam bahasa tujuan umum (langsung) akan cukup rumit. Bahasa-bahasa ini didasarkan pada abstraksi khusus untuk domain khusus mereka.

Tanpa evolusi dalam desain bahasa pemrograman, kita semua masih akan menggunakan bahasa assembly atau C ++.

Sedangkan untuk mengetahui bahasa pemrograman fungsional : bahasa fungsional memungkinkan Anda untuk mengekspresikan komputasi secara berbeda, seringkali lebih ringkas daripada menggunakan bahasa pemrograman lain. Pertimbangkan tentang perbedaan antara C ++ dan Python dan kalikan dengan 4. Lebih serius, seperti yang telah disebutkan dalam jawaban lain, pemrograman fungsional memberi Anda cara berpikir yang berbeda tentang masalah. Ini berlaku untuk semua paradigma lain; beberapa lebih cocok untuk beberapa masalah, dan beberapa tidak. Inilah sebabnya mengapa bahasa multi-paradigma menjadi lebih populer: Anda dapat menggunakan konstruksi dari paradigma yang berbeda jika Anda perlu, tanpa mengubah bahasa, dan, yang lebih menantang, Anda dapat mencampuradukkan paradigma dalam satu perangkat lunak.


1
Sangat setuju. Saya tertarik di mana bahasa multi-paradigma (misalnya Scala) akan ada dalam beberapa tahun. Jika mereka memungkinkan integrasi DSL yang mudah, kita mungkin benar-benar melihat penurunan bertahap dalam jumlah bahasa.
Raphael

2
Jawaban yang sangat rinci! Kami dapat mengakui bahwa sebagian besar bahasa pemrograman mungkin Turing Equivalent, tetapi itu tidak berarti bahwa abstraksi yang mereka dukung cocok untuk setiap domain masalah.
CyberFonic

Menempatkan perakitan dan C ++ dalam kotak yang sama menyakiti hati saya. C ++ telah banyak berkembang !! Khususnya sejak C ++ 11 dan seterusnya.
Peregring-lk

66

tldr: Tidak ada bahasa peluru perak.

Saya berharap mereka tidak akan menuntut saya, tapi ini foto dari salah satu presentasi Stanford.

masukkan deskripsi gambar di sini

Ketika Anda memutuskan untuk memilih bahasa, Anda hanya dapat memilih 2 dari 3 fitur ini .

Dan itulah sebabnya orang sedih dan ingin menciptakan bahasa super yang akan mencakup ketiganya.

Sebenarnya, ada daftar besar persyaratan (beberapa dari mereka dapat Anda lihat di jawaban lain) tetapi mereka hanya menambahkan detail ke fitur inti. Selain itu, ada alasan historis dan politis untuk memilih satu bahasa daripada yang lain.

Kombinasi faktor-faktor tersebut menghasilkan bahasa baru.

( Dan saya pernah mendengar bahwa setiap programmer yang baik harus membuat bahasa baru mereka sendiri;) )


11
Seiring waktu, segitiga menyusut, dalam arti bahwa sudut semakin dekat ..... Saya harap / mimpi.
Dave Clarke

1
Performa dan Generalitas, dapat lebih sedikit dibandingkan tetapi saya akan menambahkan bahwa pengalaman dalam suatu bahasa memberi Anda lebih banyak produktivitas daripada bahasa tertentu itu sendiri, itu tidak adil untuk membandingkan "produktivitas bahasa" saja, karena Anda memerlukan anggapan tentang pengetahuan dan keahlian semuanya, hipotesis yang sangat tidak mungkin.
Hernan_eche

Ini adalah pernyataan yang menarik dan mengingatkan saya pada teorema CAP. Apakah ini hanya argumen informal, atau dapatkah segitiga itu dibuktikan?
evnu

1
@evnu, ini argumen quasiformal dari satu bagian: dengan asumsi generalitas berarti bahwa program yang valid dengan panjang apa pun dalam bahasa L mencakup ruang masalah yang lebih besar, setiap subruang masalah hanya ditutupi oleh sebagian kecil dari panjang n program. Jika program dengan panjang n di luar subruang khusus Anda ada di dalam subruang Anda, Anda akan memiliki peluang lebih besar untuk menemukan program yang lebih pendek yang memecahkan masalah Anda (jadi Anda mungkin akan lebih produktif), tetapi bahasanya akan kurang umum- --it akan memecahkan masalah di ruang bagian lain dengan kurang baik (yaitu dengan program yang lebih lama).
Jonas Kölker

Ini adalah argumen yang bagus bahwa Anda memerlukan setidaknya dua bahasa pemrograman, serta sejumlah besar bahasa khusus domain, sehingga mencakup ketiga sisi segitiga. Kami memiliki banyak, banyak, lebih banyak dari itu. (Dan saya akan meletakkan c di puncak puncak segitiga, tapi itu niggle yang cukup kecil.)
Peter Shor

25

Dunia dipenuhi dengan hal-hal yang memiliki banyak variasi berbeda: pengolah kata, mobil, desain rumah, minuman, permen, pena, sekop, dll. Alasan mengapa kita memiliki begitu banyak dapat diringkas menjadi beberapa prinsip:

  • Seseorang berpikir mereka dapat meningkatkan produk yang sudah ada
  • Desain yang berbeda diperlukan oleh pertimbangan lokal (pikirkan: rumah panggung vs rumah pada pelat beton)
  • Kategori produk baru memenuhi kebutuhan yang sebelumnya tidak ada

Masuklah ke toko peralatan kantor dan lihat bagian "alat tulis" - ada ratusan jenis pena. Mereka semua melakukan hal yang kurang lebih sama: mengantarkan tinta ke permukaan tulisan. Tetapi setiap pena yang Anda lihat ditampilkan untuk dijual ada karena salah satu dari tiga alasan di atas.

  • Pulpen air mancur cartridge merupakan peningkatan pada pulpen yang dicelupkan, yang merupakan perbaikan pada bulu bulu.
  • NASA membutuhkan pena yang bisa menulis tanpa adanya gravitasi, sehingga pena bolpoin bertekanan itu ditemukan.
  • Pena pertama itu sendiri mungkin adalah tongkat runcing yang dicelupkan ke dalam tar atau darah; sebelum itu orang-orang menggoreskan batu atau mengolesi pigmen di dinding dengan bulu. (Hanya tebakan.)

Evolusi pena akan terus berlanjut karena tidak ada produk yang sesuai dengan kebutuhan setiap pengguna. Beberapa pena murah dan sekali pakai, ada yang mahal dan terbuat dari bahan berkualitas tinggi; beberapa menggunakan gel, beberapa menggunakan tinta, beberapa menggunakan pigmen; beberapa memiliki topi putar, beberapa tidak memiliki topi sama sekali; barel lebar, barel sempit, barel bundar, barel persegi; pendek panjang; merah, putih, hitam, biru. Dll.

Tapi cukup tentang pena.

Segudang bahasa pemrograman kami saat ini dapat ditelusuri kembali ke yang pertama: kode mesin numerik untuk komputer awal di tahun 1940-an. Primitif, sulit digunakan, dan sulit untuk masuk ke dalam komputer, tetapi mereka melakukan pekerjaan itu. Tidak lama setelah itu pemrogram menetapkan kata-kata mnemonik (seperti ADD, CALL, LOAD) ke kode mesin, sehingga melahirkan kelas bahasa yang disebut "bahasa assembly."

Arsitektur prosesor yang berbeda memerlukan kode mnemonik yang berbeda, tergantung pada fitur spesifik dari mesin yang mendasarinya. Mempertimbangkan perbedaan-perbedaan ini berarti menciptakan bahasa majelis yang berbeda.

(Mungkin sekarang Anda bisa melihat ke mana arahnya ...)

Pemrogram melihat program bahasa assembly mereka dan melihat pola: urutan instruksi yang sama akan digunakan untuk membentuk loop, kondisional, penugasan variabel, pemanggilan fungsi, dan sebagainya. Dengan demikian, bahasa pemrograman prosedural lahir. Bahasa-bahasa ini merangkum kelompok instruksi di bawah istilah payung seperti "jika", "while", "let", dll

Dari analisis matematis pemrograman komputer muncul bahasa-bahasa fungsional - cara baru dalam memandang komputasi. Tidak lebih baik, tidak lebih buruk, hanya berbeda.

Dan kemudian ada berorientasi objek, diketik secara statis, diketik secara dinamis, pengikatan lanjut, pengikatan awal, penggunaan memori rendah, penggunaan memori tinggi, dapat diparalelkan, bahasa untuk penggunaan khusus, dan seterusnya.

Pada akhirnya, kami memiliki bahasa pemrograman yang berbeda karena kami ingin bahasa pemrograman yang berbeda. Setiap perancang bahasa memiliki ide mereka sendiri tentang bagaimana bahasa "mimpi" mereka akan terlihat dan beroperasi. Keragaman adalah hal yang baik .


Saya tidak melihat alasan kuat yang diberikan di sini mengapa kami harus memiliki beberapa bahasa selain yang orang inginkan karena alasan apa pun.
Raphael

Tepat seperti itu. Pemrogram pada dasarnya adalah pemecah masalah. Untuk mengatasi masalah, mereka membutuhkan alat yang sering mengambil bentuk bahasa pemrograman. Jika alat tidak dapat membantu mereka memecahkan masalah mereka seperti yang mereka inginkan, mereka menciptakan alat baru. Pikirkan seperti ini: karena alatnya adalah perangkat lunak dan perangkat lunak baru ditulis untuk menyelesaikan masalah baru, alat itu sendiri bisa menjadi masalah yang harus dipecahkan. Masalah-masalah itu diselesaikan dengan membuat alat baru.
Barry Brown

Hanya satu hal: Cabang fungsional bahasa adalah contoh ide-ide ahli matematika tentang bagaimana mengekspresikan apa yang sekarang kita sebut "komputasi", yang mulai dipertimbangkan sekitar 50 tahun sebelum komputer pertama. Bukan untuk apa-apa bahwa LISP (dalam beberapa bentuk) adalah bahasa tertua kedua yang masih ada, yang pertama adalah FORTRAN.
vonbrand

20

Bahasa pemrograman fungsional biasanya didasarkan pada model perhitungan yang berbeda (tetapi setara dalam kekuatan): lambda-calculus . Ada beberapa bahasa yang tidak diketik (memiliki pengetikan mirip Python) seperti LISP, Skema (digunakan dalam buku / kursus Struktur dan Interpretasi Program Komputer yang dapat dikenali secara luas ) dan bahasa yang diketik secara statis seperti Haskell, ML, F #.

SICP adalah apa yang membuat saya dalam pemrograman fungsional, tetapi orang lain merekomendasikan makalah ini oleh John Hughes dan wawancara ini dengannya.

Pemrograman fungsional sekarang sedang didorong oleh Microsoft, misalnya, yang telah memasukkan F # (bahasa fungsional mereka untuk .NET) di VS2010 dan 11; mereka juga mempekerjakan beberapa pengembang Haskell di MSR, IIRC.

Perhatikan, bahwa ada juga beberapa bahasa pemrograman fungsional non-lambda-kalkulus, seperti Refal , yang didasarkan pada pencocokan pola dan penulisan ulang.

Karena tingkat abstraksi dalam bahasa fungsional berbeda, sikap Anda untuk memecahkan masalah berubah, ketika Anda menggunakan teknik pemrograman fungsional. Ada yang bilang itu bisa membuat Anda menjadi programmer yang lebih baik secara umum.


1
Kelas bahasa lain yang menarik adalah bahasa pemrograman logika, seperti Prolog. Saya hanya punya pengalaman yang sangat terbatas dengan DataLog jadi mungkin orang lain bisa menulis jawaban tentang itu?
Daniil

2
Saya setuju bahwa kita memerlukan bahasa pemrograman untuk setiap paradigma pemrograman: imperatif, OO, deklaratif, fungsional, dll. Tapi ini tidak menjelaskan mengapa kita memiliki begitu banyak, katakanlah, bahasa OO.
Dai

@Ai, yah, benarkah? Fondasi teoretis bukan satu-satunya karakteristik bahasa. Sebagai contoh, dapat dikatakan bahwa fitur utama Java atau C # adalah (membandingkan dengan C ++) mesin virtual, yang membuat Java berbeda secara signifikan.
Daniil

Tetapi kemudian jika C # dan Java keduanya menggunakan konsep mesin virtual, mengapa kita tidak menggunakan sintaksis yang identik untuk kedua bahasa? Saya pikir setiap desainer memiliki ide yang kuat tentang bagaimana bahasanya seharusnya, dan memiliki kecenderungan untuk menciptakan standarnya sendiri.
Dai

@ Hai, ada banyak perbedaan kecil antara C # dan Java, setelah semua. Plus, saya pikir ada beberapa perselisihan hukum tentang Java VM untuk Windows atau semacamnya.
Daniil

19

Secara khusus, apakah ada alasan saya harus tahu bahasa fungsional sebagai programmer komputer?

Iya. Karena haskell mengubah cara saya berpikir. Itu mungkin mengubah cara Anda berpikir juga.

Cerita: Saya dulu berpikir bahwa saya bisa belajar bahasa pemrograman apa pun dalam sehari. Suatu hari saya memulai Haskell. Saya menyelesaikan semua yang datang sebelum monad dalam setengah hari. Sekarang sudah setahun sejak hari itu dan saya masih terjebak di Monads.

Baca:

  1. Bahasa dan pemikiran wiki

  2. Notasi sebagai alat untuk dipikirkan oleh Kenneth E. Iversion, ceramah Turing Award

Tetapi mengapa ada begitu banyak bahasa pemrograman yang berbeda?

Notasi adalah alat untuk berpikir. Kita membutuhkan notasi yang dibuat khusus untuk menangani pikiran yang berbeda dengan nyaman. Jadi kami membuat bahasa baru.

Juga, membaca . ;-)


5
Berulang adalah ilahi!
Pratik Deoghare

4
untuk beralih adalah manusia?
Suresh

1
Tidak yakin apakah itu iklan yang bagus untuk Haskell. ;)
Barry Brown

@Pratik Deoghare. Mempelajari Haskell dalam sehari mungkin bukan ide yang baik. Saya akan mengatakan, baca buku teks yang bagus tentang pemrograman fungsional, seperti Bird dan Wadler, dan luangkan waktu Anda untuk melakukannya. Maka monad mungkin tidak begitu sulit.
Uday Reddy

"Aku menyelesaikan semua yang datang sebelum monad dalam setengah hari." Benarkah? Anda mempelajari kacamata, fungsi, ADT, jenis, dll dalam setengah hari? Itu tidak mungkin. LYAH memiliki monad di bab 12 dari 14. RWH tidak memiliki monad sampai bab 6, dan mereka diperkenalkan secara bertahap - definisi penuh ada di bab 14.
sdcvvc

13

Hampir tidak mungkin ada seorang programmer yang pada suatu saat tidak menjadi frustrasi oleh kendala bahasa yang mereka gunakan dan memutuskan untuk menggaruk gatalnya. Jadi bahasa baru - atau dialek dari yang sudah ada - lahir.

Abadi dan Cardelli dalam "A Theory of Objects" mengembangkan seluruh keluarga bahasa pemrograman dari yayasan berorientasi objek. Mereka membuktikan bahwa pemrograman fungsional adalah kasus khusus OO tetapi bukan sebaliknya.

Menemukan sesuatu yang baru itu menyenangkan, itu sebabnya orang lebih cenderung membuat bahasa lain daripada berkontribusi untuk membuat bahasa yang lebih baik. Tentu saja, ada penjaga bahasa yang tidak menerima perubahan pada visi mereka. Contoh terbaik adalah jurang antara pendukung Common Lisp dan Scheme.


3
Theory of Objects tidak menyajikan seluruh keluarga bahasa pemrograman yang dapat digunakan. Ini menyajikan dasar untuk bahasa pemrograman berorientasi objek, dan yang aneh pada saat itu, tidak didasarkan pada kelas. Saya tidak melihat hubungan antara "A Theory of Objects" dan pemrograman fungsional. Kalkulus objek tidak memiliki gagasan kemalasan, misalnya. Ada juga penelitian yang mengkode konsep OO dalam hal fungsi dan catatan, misalnya, karya Pierce di akhir tahun 90-an.
Dave Clarke


11

Mengapa ada begitu banyak negara di dunia? Bukankah lebih mudah jika kita hanya memiliki 5 atau 6 negara adidaya, atau bahkan satu kerajaan Bumi yang universal? Sangat mudah untuk berdebat mengapa itu tidak akan lebih baik --- untuk permulaan, persaingan berbagai negara dapat mengarah pada kemajuan, dan dari sudut pandang demokrasi, hak asasi manusia, dll., Banyak negara mungkin lebih baik dari satu - - tetapi ini tidak menjelaskan, mengapa kita memiliki banyak negara. Itu hanya menjelaskan mengapa banyak negara lebih baik .

Demikian pula, Anda dapat bertanya, mengapa begitu banyak bahasa manusia yang berbeda? Bahasa Polandia, Bahasa Arab, Bahasa Mandarin ... Bukankah lebih mudah jika hanya ada satu bahasa? Anda bisa berdebat dengan cara apa pun, tetapi itu akan menjadi alasan mengapa akan lebih baik jika hidup itu satu atau lain cara. Itu tidak akan menjelaskan penyebab di balik ada begitu banyak bahasa manusia yang berbeda.

Masalahnya adalah, ada banyak orang di planet ini, dan kita semua melakukan hal kita, kita semua memiliki pendapat, kita semua ingin bertanggung jawab dan memiliki negara atau bahasa pemrograman kita sendiri, dan kita sering berpikir bahwa kita tahu lebih baik daripada yang lain, atau setidaknya tidak peduli untuk memahami apa yang orang lain tawarkan.

Baca posting blog yang sangat mencerahkan ini, Mengapa banyak kerangka kerja web Python? Ternyata, ada sekitar 50 kerangka kerja web dengan Python. Ini hanya konyol; sama sekali tidak ada alasan rasional yang masuk akal untuk itu. Tetapi penulis posting menjawab: ada begitu banyak kerangka kerja web Python karena begitu mudah untuk membuatnya . Anda tidak perlu alasan rasional karena ada lebih banyak kerangka kerja web python atau lebih banyak bahasa pemrograman. Orang akan terus membuat yang baru karena mereka tidak tahu apa yang sudah tersedia, atau karena mereka berharap dapat menghasilkan uang, atau hanya karena menciptakan hal-hal baru itu menyenangkan!

Izinkan saya menggambarkan contoh pribadi. Sekitar 10 tahun yang lalu saya menulis beberapa kode C ++ untuk sebuah perusahaan Finlandia. Anda tahu, di Finlandia mereka memiliki truk-truk besar yang, yah, melakukan perjalanan jarak jauh dan mengirimkan banyak barang dari satu tempat ke tempat lain. Saya yakin, ada truk semacam itu di Amerika juga. Jadi masalah yang umum adalah memastikan bahwa ke-24 ban tersebut baik-baik saja. Tentu saja, ada teknologi yang telah teruji oleh waktu: tekanan dan suhu dapat dipantau, dan perubahan drastis akan menunjukkan bahwa ada sesuatu yang salah. Tentu saja, semua teknologi ini adalah milik, dipatenkan, dengan semua implikasinya. (Ingat: paten seharusnya mempromosikan inovasi!) Jadi, perusahaan Finlandia ini ingin mendeteksi keadaan ban dengan ... suara. Idenya adalah untuk menginstal mikrofon untuk mendengarkan suara yang datang dari semua ban dan untuk melakukan semacam sihir pemrosesan sinyal pada suara-suara itu untuk melihat apakah salah satu ban memiliki masalah, dan saya melakukan prototipe kegilaan ini. (Mereka bahkan memiliki laboratorium khusus untuk merekam suara sampel; begitu mereka mengirimi saya rekaman video yang mengesankan pada kesempatan tertentu ketika mereka berhasil meledakkan ban sampel setelah mengalami tekanan 5 atau 10 ton dan memanaskannya hingga suhu yang menggelikan. .) Jelas sekali lagi, tidak ada alasan rasional tertentu untuk perkembangan ini, kecuali bahwa itu menyenangkan dan beberapa orang ingin menghasilkan uang. Jadi, pahami juga bahwa ada begitu banyak alasan mengapa seseorang akan mulai mengembangkan bahasa pemrograman baru. Tidak perlu atau bahkan kemungkinan untuk mempelajari semuanya. (Mereka bahkan memiliki laboratorium khusus untuk merekam suara sampel; begitu mereka mengirimi saya rekaman video yang mengesankan pada kesempatan tertentu ketika mereka berhasil meledakkan ban sampel setelah mengalami tekanan 5 atau 10 ton dan memanaskannya hingga suhu yang menggelikan. .) Jelas sekali lagi, tidak ada alasan rasional tertentu untuk perkembangan ini, kecuali bahwa itu menyenangkan dan beberapa orang ingin menghasilkan uang. Jadi, pahami juga bahwa ada begitu banyak alasan mengapa seseorang akan mulai mengembangkan bahasa pemrograman baru. Tidak perlu atau bahkan kemungkinan untuk mempelajari semuanya. (Mereka bahkan memiliki laboratorium khusus untuk merekam suara sampel; begitu mereka mengirimi saya rekaman video yang mengesankan pada kesempatan tertentu ketika mereka berhasil meledakkan ban sampel setelah mengalami tekanan 5 atau 10 ton dan memanaskannya hingga suhu yang menggelikan. .) Jelas sekali lagi, tidak ada alasan rasional tertentu untuk perkembangan ini, kecuali bahwa itu menyenangkan dan beberapa orang ingin menghasilkan uang. Jadi, pahami juga bahwa ada begitu banyak alasan mengapa seseorang akan mulai mengembangkan bahasa pemrograman baru. Tidak perlu atau bahkan kemungkinan untuk mempelajari semuanya. begitu mereka mengirimi saya rekaman video yang mengesankan tentang peristiwa tertentu ketika mereka berhasil meledakkan ban sampel setelah mengalami tekanan 5 atau 10 ton dan memanaskannya hingga suhu yang menggelikan.) Jelas sekali lagi, sekali lagi, tidak ada alasan rasional tertentu. alasan untuk perkembangan ini, kecuali bahwa itu menyenangkan dan beberapa orang ingin menghasilkan uang. Jadi, pahami juga bahwa ada begitu banyak alasan mengapa seseorang akan mulai mengembangkan bahasa pemrograman baru. Tidak perlu atau bahkan kemungkinan untuk mempelajari semuanya. begitu mereka mengirimi saya rekaman video yang mengesankan tentang peristiwa tertentu ketika mereka berhasil meledakkan ban sampel setelah mengalami tekanan 5 atau 10 ton dan memanaskannya hingga suhu yang menggelikan.) Jelas sekali lagi, sekali lagi, tidak ada alasan rasional tertentu. alasan untuk perkembangan ini, kecuali bahwa itu menyenangkan dan beberapa orang ingin menghasilkan uang. Jadi, pahami juga bahwa ada begitu banyak alasan mengapa seseorang akan mulai mengembangkan bahasa pemrograman baru. Tidak perlu atau bahkan kemungkinan untuk mempelajari semuanya.

Tentu saja, semua ini hanya berlaku jika Anda percaya pada evolusi. Jika Anda percaya pada beberapa bentuk desain cerdas, bahwa Tuhan juga telah menciptakan semua bahasa pemrograman, maka Anda harus menemukan tujuan di balik kerumunan ini. Mungkin Tuhan ingin mempromosikan persaingan antara bahasa pemrograman yang berbeda sehingga seni pengembangan perangkat lunak akan mencapai kondisi setinggi mungkin.

Kesimpulannya, ada banyak orang, banyak negara, banyak bahasa pemrograman. Inilah sifat kehidupan! Mari kita bersyukur untuk itu: ini hanya berarti bahwa bidang pemrograman / ilmu komputer sangat hidup dan berkembang.


jawaban yang sangat sempurna, saya tidak tahu mengapa itu tidak diterima!
Am_I_Helpful

8

Mengapa ada begitu banyak bahasa pemrograman yang berbeda?

Karena ada pilihan yang harus diambil:

  • Mode spesifikasi: Imperatif vs fungsional
  • Pengetikan: diketik secara statis vs. diketik secara dinamis
  • Urutan evaluasi: call-by-value vs call-by-name
  • Modularitas: berbasis tipe vs abstrak tipe data
  • Model eksekusi: berurutan vs bersamaan

Untungnya, dua yang terakhir adalah dikotomi yang tidak penting, yaitu, seseorang dapat menempatkan kedua pilihan ke dalam satu bahasa pemrograman. Tapi, tiga dikotomi pertama memunculkan 8 kombinasi. Jadi, bahkan di dunia yang ideal, akan ada setidaknya 8 bahasa pemrograman. Saat Anda menelusuri, akan ada lebih banyak pilihan desain bernuansa dalam paradigma tertentu. Misalnya, jika seseorang memutuskan untuk melakukan bahasa yang diketik secara statis berbasis kelas, ada beberapa cara berbeda dalam mendesain sistem tipe. Belum ada cara kanonik untuk melakukannya. Jika seseorang memutuskan untuk melakukan bahasa pemrograman konkuren, ada berbagai cara untuk mewakili konkurensi: semaphores, wilayah kritis bersyarat, monitor, penyampaian pesan (sinkron vs. asinkron). Dalam penyampaian pesan yang sinkron,

Bagian dari penelitian yang kami lakukan dalam teori bahasa pemrograman dikhususkan untuk menyelesaikan dikotomi ini. Sebagai contoh, saya bekerja untuk menyelesaikan dikotomi antara pemrograman imperatif dan fungsional dalam sebuah makalah yang disebut " Penugasan untuk bahasa aplikasi " dan metode kami sekarang telah diadopsi oleh Haskell, menjadikannya bahasa fungsional dan imperatif. Itu tidak berarti bahwa dikotomi sepenuhnya diselesaikan. Seorang programmer Haskell masih dihadapkan dengan pilihan apakah akan menyelesaikan masalahnya secara fungsional atau imperatif. Luca Cardelli bekerja untuk menyelesaikan dikotomi pengetikan statis dan dinamis. Paul Levy berupaya menyelesaikan dikotomi panggilan-menurut-nilai vs panggilan-dengan-nama . Tidak semua hasil ini belum diimplementasikan dalam bahasa pemrograman kehidupan nyata.


Jika semua bahasa ini dapat melakukan hal yang sama, mengapa tidak hanya berpegang pada satu bahasa dan menggunakannya untuk pemrograman komputer?

Karena bagi seorang programmer di dunia nyata, tidak cukup hanya melakukan sesuatu. Itu juga penting bagaimana hal itu dilakukan. Ketika dilakukan dengan benar, domain masalah diwakili dengan setia dalam program, modularitas masalah dipertahankan, dan program menjadi mudah untuk dipahami, dimodifikasi, dan dipelihara. Semua hal ini mempengaruhi biaya pengembangan dan pemeliharaan program. Mereka juga mempengaruhi keandalan dan keamanan perangkat lunak.

Misalnya, banyak orang menggunakan program yang disebut " Quicken " untuk akun keuangan. Program asli dikembangkan dalam beberapa versi Visual Basic, dan itu cukup bagus. Namun, sulit untuk memperpanjang dan mempertahankannya. Selama bertahun-tahun, ketika perusahaan berusaha memperluasnya untuk fitur yang lebih baru, program ini menjadi semakin bermasalah dengan jutaan pelanggan yang tidak puas di mana-mana. Mereka mungkin akan mendapat manfaat dari rekayasa ulang perangkat lunak dalam bahasa pemrograman berorientasi objek yang diketik dengan kuat.


Secara khusus, apakah ada alasan saya harus tahu bahasa fungsional sebagai programmer komputer?

Secara historis, "pemrograman fungsional" ditemukan oleh Godel, Kleene dan Gereja mengikuti praktik matematika standar, dan "pemrograman imperatif" diciptakan oleh Turing untuk menjabarkan gagasan perhitungan mekanis. Sebelum Turing, tidak ada bukti matematika yang pernah menganalisis ide-ide pemrograman imperatif. (Sementara semua algoritma matematika tradisional diekspresikan dalam "gaya imperatif," konten esensial mereka masih berfungsi.) Jadi, pemrograman imperatif sangat baru bagi peradaban manusia, dan matematikanya masih belum dipahami dengan baik. Alasan No. 1 mengapa setiap orang harus mengetahui beberapa pemrograman fungsional adalah untuk memahami bagaimana pemrograman dapat menjadi matematika. (Saya tidak mengakui bahwa pemrograman imperatif adalah non-matematika, itulah yang akan Anda yakini oleh programmer fungsional. Tetapi saya akan setuju bahwa, dengan keadaan seni saat ini, kita belum tahu bagaimana melakukan pemrograman imperatif secara matematis. Banyak dari kita yang mengerjakan masalah itu dengan tepat.)


1

Anda mungkin melihatnya sebagai evolusi.

Pada awalnya, komputer diprogram sepenuhnya dengan kode biner. Setelah itu mnemonik diperkenalkan dan bahasa assembly diperkenalkan, sebagian besar sangat bergantung pada CPU yang digunakan.

Setelah itu bahasa tingkat yang lebih tinggi (tingkat 3) diperkenalkan (Pascal, C, ADA, Cobol), beberapa sangat generik (seperti C), beberapa lebih cocok untuk penanganan data (Cobol), beberapa untuk perhitungan (Fortran).

Setelah itu bahasa tingkat 4 muncul, seperti bahasa logika (seperti Prolog). Bahasa yang paling umum adalah penerus dari bahasa tingkat ketiga; beberapa di antaranya adalah Java, C #.

Kami juga melihat bahasa khusus untuk internet / web, seperti ASP.NET, PHP.

Dan bahasa untuk domain tertentu (DSL), yang sebagian besar bekerja sama dengan bahasa umum.

Lalu ada bahasa untuk anak-anak untuk belajar pemrograman, seperti LOGO.

Juga bahasa untuk menulis kode dengan cepat, seperti Python, Ruby dll, bahasa untuk menangani XML (XSLT).

Dan saya mungkin sudah lupa banyak bahasa dan bahkan kategori bahasa.


1
Kronologi Anda bingung. Prolog berasal dari tahun 1972, yang lebih muda dari Ada (1983). Saya tidak tahu apa yang Anda maksud dengan "penerus bahasa tingkat ketiga"; beberapa bahasa bukan keturunan Fortran, termasuk C dan Pascal (yang memperanakkan Ada).
prosfilaes

1
@prosfilaes, cara bingung. FORTRAN adalah bahasa pertama yang masih digunakan, kemudian datang LISP, lalu COBOL. Algol didefinisikan untuk algoritme penerbitan, bukan penggunaan mesin (tapi kompiler sejenis tetap ada), dengan ofshots Pascal dan kemudian C. PL / 1 adalah campuran aneh FORTRAN dan COBOL dengan struktur kontrol Algol-ish.
vonbrand

1

jawaban lain yang bagus, akan menambah beberapa sudut baru. DC menulis bahasa berevolusi seperti bahasa manusia nyata! dan mereka meminjam konsep dan sintaksis satu sama lain lagi seperti bahasa manusia nyata. dengan kata lain ada juga studi etimologi bahasa komputer yang cukup nyata .

ini juga berarti ada sejarah panjang dan garis waktu yang terutama dimulai sekitar tahun 1930-an dengan kalkulus lambda .

ada interaksi / sinergi / simbiosis yang kuat antara teori dan aplikasi dengan bahasa pemrograman. aplikasi baru ditemukan yang mengarah pada teori baru dan sebaliknya. bahasa pemrograman dalam banyak hal menjembatani antara teori dan aplikasi .

studi kasus yang menarik dari sejarah adalah Fortran. tidak dikenal tetapi versi Fortran sebelumnya (kebanyakan sebelum Fortran77) memiliki tata bahasa yang ambigu . ini berarti bahwa perintah yang sama dapat "ditafsirkan" secara sah / dikompilasi dengan cara yang berbeda oleh kompiler karena ada beberapa "interpretasi" yang valid (ini bukan pengertian teknis yang sama dari bahasa "ditafsirkan").

jadi teori tentang tata bahasa formal sedang dikembangkan sekitar waktu ketika Fortran ditemukan, dan itu adalah krisis kecil ketika masalah ambiguitas bahasa ditemukan. Sintaks Fortan dirumuskan ulang untuk menghindari ambiguitas ini dan bahasa-bahasa selanjutnya memiliki sensitivitas yang lebih besar terhadap ambiguitas tata bahasa dalam desain mereka. OOP juga merupakan contoh yang sangat penting / terpenting dari konsep teoretis / kemajuan dalam bahasa pemrograman yang "berdampak" atau "riak" ke banyak bahasa yang ada, mentransformasikannya.

studi kasus lainnya adalah penemuan teknologi baru. misalnya penemuan database relasional memiliki dampak besar pada bahasa komputer misalnya dengan SQL dan antarmuka bahasa komputer (misalnya misalnya di java, "JDBC"). juga web di seluruh dunia dengan dampak yang bahkan lebih besar. tampaknya ada ledakan bahasa yang terjadi tepat di sekitar ledakan dotcom yang sebagian besar bertepatan dengan pertumbuhan awal WWW dan mungkin dibandingkan dengan ledakan evolusioner .

ada juga tampaknya menjadi tren panjang kenaikan bahasa pemrograman baru dalam hubungannya dengan kekuatan pemrosesan besar-besaran meningkat hukum Moor yang beberapa orang berpikir mungkin melambat.

tren jangka panjang saat ini dalam bahasa pemrograman tampaknya menuju Big Data dan Paralelisasi misalnya dengan MapReduce . ada juga minat saat ini dalam penutupan .

aspek kunci lain dari bahasa adalah bahwa mereka mewakili peningkatan level abstraksi . mereka membangun di atas abstraksi level yang lebih rendah untuk membuat abstraksi level yang lebih tinggi (mirip dengan piramida). dengan cara ini kemajuan evolusi bahasa komputer mungkin tidak ada habisnya dan kita dapat secara relatif yakin bahwa yang baru akan terus ditemukan jauh di masa depan. ini mungkin analog dengan konsep serupa dalam psikologi yang disebut chunking — secara keseluruhan dinyatakan, membangun konsep mental tingkat tinggi dari blok-blok bangunan tingkat rendah.

siapa pun yang telah mempelajari banyak bahasa komputer harus mengakui bahwa mentalitas kawanan dapat diamati di mana beberapa aspek dari mereka berubah menjadi mode overhyped, yaitu tidak begitu penting seperti yang dianjurkan, atau bahkan mati (digunakan) dari waktu ke waktu! beberapa ide inti / perubahan tetap ada tetapi sensasi (over-) memudar. dalam hal ini bahasa pemrograman juga keluar masuk mode . dua kasus menurut saya dari setengah dekade terakhir yang memang berguna tetapi overhyped:

semakin banyak kemiripan diri dapat diamati di banyak bahasa utama sehingga mereka semua cenderung konvergen menuju penerapan banyak fitur serupa dengan cara mereka sendiri, yaitu seperti dengan grafik perbandingan produk yang "memeriksa" banyak fitur dalam kotak.


lihat juga pola desain yang sering lintas bahasa dan diimplementasikan dalam bahasa. Aspek kunci lain dari studi bahasa / fungsionalitas adalah fitur yang diimplementasikan di perpustakaan
vzn

FORTRAN tidak pernah memiliki deskripsi formal, apalagi kompleksitas ekspresi yang dapat menyebabkan ambiguitas tata bahasa (ya, saya memang memulai pemrograman dalam kekejian yang disebut PDQ FORTRAN, dan kemudian FORTRAN IV) bahasa di mana ambiguitas (sangat memalukan) dalam tata bahasa terungkap memiliki Algol, bahasa pertama yang didefinisikan dengan tata bahasa.
vonbrand

Poin diambil wrt asli / awal FORTRAN tetapi versi kemudian lebih diformalkan dengan definisi tata bahasa yang lebih ketat. ini adalah studi kasus yang menunjukkan evolusi bahasa bersama dengan teori bahasa.
vzn

FORTRAN mendapat makan paksa tata bahasa, tetapi tidak pernah dirancang sekitar satu. Algol memulai tren itu, yang dilanjutkan oleh Pascal, keluarga Modula, Oberon, C dan itu ofpring, PL / 1, Ada dan semacamnya. Mengingat konteks teknologi tata bahasa gratis dan pemahaman tentang parsing, hari ini mendefinisikan tata bahasa dan menerjemahkannya ke dalam parser bebas kesalahan hampir sepele, tidak ada bahasa yang lebih baru tanpa itu.
vonbrand

tambahan, studi kasus dalam bahasa yang lebih baru / muncul: Google go , node.js , Apple swift
vzn

-3

Mereka tidak, itu hanya tipu muslihat pemasaran - jika Anda membuat bahasanya agak seperti "C", maka itu menurunkan penghalang masuk.

Beberapa yang tidak memiliki pengaruh C sama sekali: SQL, Pascal, Delphi, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Algol, Algol-68, SNOBOL, Modula, Visual BASIC, Tutor, logo, Forth, DIBOL, Helix, AppleScript, Python, Erlang, Ruby, Pick, Inggris, RPG, PL / SQL, ASP, Prolog, SmallTalk, Perl, bash, BASIC tongkat, REXX, bahasa batch DOS.

Yang agak mirip dengan C, tetapi memiliki sedikit kesamaan dengan itu: JavaScript, Java, C #, (bisa dibilang) Objective-C.

Itu semua pemasaran, Java, C ++, dan JavaScript agak mirip dengan C, tetapi hampir tidak bisa lebih berbeda di bawah selimut.


5
"Mereka tidak" - apa bukan apa? Bagaimanapun, saya tidak melihat bagaimana ini menjawab pertanyaan. Ini hanya daftar bahasa, bersama dengan klaim yang sepenuhnya tidak berdasar bahwa pemasaran entah bagaimana terlibat.
David Richerby

2
"Beberapa yang tidak memiliki pengaruh C sama sekali: ... Algol, Algol-68, ..." - Lucu Anda harus mengatakan itu, mengingat bahwa C muncul dari Algol. "Jika Anda membuat bahasanya agak seperti" C ", maka itu menurunkan penghalang masuk" - iirc, ini telah terbukti salah. Siswa tanpa paparan pemrograman sebelumnya belajar lebih cepat dengan bahasa lain (saya pikir mereka menggunakan Haskell dalam studi itu).
Raphael
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.