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:
programming-languages
Suresh
sumber
sumber
Jawaban:
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 (
goto
pernyataan, 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.
sumber
tldr: Tidak ada bahasa peluru perak.
Saya berharap mereka tidak akan menuntut saya, tapi ini foto dari salah satu presentasi Stanford.
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;) )
sumber
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:
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.
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 .
sumber
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.
sumber
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:
Bahasa dan pemikiran wiki
Notasi sebagai alat untuk dipikirkan oleh Kenneth E. Iversion, ceramah Turing Award
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 . ;-)
sumber
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.
sumber
Karena orang lain sudah memberikan jawaban yang baik untuk pertanyaan ini, saya hanya akan mengutip Alan Perlis.
Juga, http://weblog.raganwald.com/2004/10/beware-of-turing-tar-pit.html , adalah bacaan yang bagus.
sumber
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.
sumber
Mengapa ada begitu banyak bahasa pemrograman yang berbeda?
Karena ada pilihan yang harus diambil:
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.)
sumber
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.
sumber
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.
sumber
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.
sumber