Tiga paradigma

Halo, Habr!

Saya membawa kepada Anda terjemahan dari artikel โ€œ Tiga Paradigma โ€ oleh Robert C. Martin (Paman Bob).

gambar

Selama 40 tahun terakhir, teknologi perangkat keras telah meningkatkan daya komputasi perangkat kami hingga lebih dari dua puluh pesanan. Sekarang kita memainkan Angry Birds di ponsel kita, yang memiliki kekuatan pemrosesan superkomputer freon dari tahun 70-an abad lalu.

Tetapi selama 40 tahun yang sama, teknologi perangkat lunak tidak banyak berubah. Pada akhirnya, kami masih menggunakan operator if, while, dan assignment yang kami gunakan di tahun 60an. Jika saya mengambil seorang programmer dari tahun 1960 dan membawanya ke sini sehingga dia bisa duduk di laptop saya dan menulis kode, itu akan memakan waktu 24 jam untuk pulih dari keterkejutannya, tetapi dia bisa menulis kode ini. Prinsip-prinsipnya tidak banyak berubah.

Dalam proses penulisan program, tiga hal telah berubah. Saya tidak berbicara tentang perangkat keras, bukan tentang kecepatan komputer, dan bukan tentang alat luar biasa yang kami miliki. Maksud saya kode itu sendiri. Tiga hal telah berubah dalam kode. Anda bisa menyebutnya paradigma. Dan mereka semua "ditemukan" lebih dari satu dekade lebih dari 40 tahun yang lalu.

* 1968 - Pemrograman struktural . Edsger Dijkstra menulis artikelnya: โ€œTentang bahaya dari operator Go Toโ€ dan sejumlah dokumen dan artikel lainnya yang mengusulkan untuk meninggalkan pendekatan Go To yang tidak terkendali, menggantikannya dengan alat-alat seperti jika / kemudian / lain dan saat loop.

* 1966 - Pemrograman berorientasi objek . Ole-Johan Dahl dan Kristen Nyugor , mempelajari bahasa Algol , objek "Discover" dan menciptakan bahasa berorientasi objek pertama, Simula-67. Terlepas dari kenyataan bahwa pencapaian ini memiliki banyak prospek, ia belum membawa fitur baru ke kode kami. Selain itu, menghapus satu. Bagaimanapun, dengan munculnya polimorfisme, kebutuhan akan fungsi pointer menghilang, tetapi sebenarnya menghilang.

* 1957 - Pemrograman fungsional . John McCarthy menciptakan Lisp, bahasa fungsional pertama. Lisp didasarkan pada kalkulus lambda yang dibuat oleh Gereja Alonzo di tahun 30-an. Meskipun ada banyak prospek untuk pemrograman fungsional, ada satu batasan besar dalam semua program fungsional. Mereka tidak menggunakan tugas.

Tiga paradigma. Tiga batasan. Pemrograman struktural menetapkan aturan untuk transfer kontrol langsung. Pemrograman berorientasi objek memperkenalkan aturan untuk transfer kontrol tidak langsung. Pemrograman fungsional memperkenalkan pembatasan pada penugasan. Semua paradigma ini telah menghilangkan sesuatu. Tak satu pun dari mereka menambahkan fitur baru. Masing-masing dari mereka telah meningkatkan persyaratan dan mengurangi peluang.

Bisakah kita menciptakan paradigma lain? Apakah ada hal lain yang bisa dihapus?

Selama 40 tahun tidak ada paradigma baru, jadi mungkin ini adalah pertanda baik bahwa tidak ada lagi yang perlu dicari.

Haruskah kita menggunakan semua paradigma ini, atau bisakah kita memilih?

Seiring waktu, kami memutuskan untuk menerapkannya. Pengenalan pemrograman terstruktur pertama dimungkinkan oleh penghapusan prinsip Go To (seperti yang direkomendasikan Dijkstra dalam artikelnya). OOP telah berhasil diimplementasikan dengan mengganti pointer dengan fungsi dalam bahasa modern kita menggunakan polimorfisme (mis. Java, C #, Ruby). Oleh karena itu, setidaknya untuk keduanya, jawaban untuk pertanyaan ini adalah bahwa kita HARUS menggunakannya. Semua opsi lain dikecualikan atau setidaknya sangat terbatas.

Tetapi bagaimana dengan pemrograman fungsional? Haruskah kita menggunakan bahasa yang tidak memiliki operator penugasan? Mungkin ya! Kami sudah menulis kode yang harus bekerja dengan baik pada beberapa core, dan core ini berlipat ganda seperti kelinci. Laptop saya memiliki 4 core. Yang berikutnya saya kemungkinan besar akan memiliki 8. Yang setelah 16. Bagaimana Anda akan menulis kode yang dapat diandalkan dengan 4096 prosesor memperjuangkan hak untuk mengakses bus?
Kita hampir tidak bisa mendapatkan dua utas paralel untuk bekerja, belum lagi 2 ^ prosesor.

Mengapa pemrograman fungsional merupakan bagian penting dari pemecahan masalah ini? Karena program seperti itu tidak menggunakan penugasan, yang berarti bahwa mereka tidak memiliki efek samping dan, oleh karena itu, tidak memiliki masalah yang terkait dengan kemampuan pembaruan - setidaknya itulah teorinya.

Kami akan berbicara lebih banyak tentang pemrograman fungsional di blog mendatang. Apa yang menurut saya dalam tiga paradigma yang disebutkan di atas adalah tanggal mereka. Mereka kuno, hampir lebih tua dari saya. Dan sejak saya berusia 16, 42 tahun yang lalu, tidak ada yang baru.

Source: https://habr.com/ru/post/id475588/


All Articles