Baru-baru ini saya menemukan konsep pemrograman terpelajar . Dan saya menemukan itu agak menarik. Namun saya belum menemukan klaim bahwa itu adalah cara yang buruk untuk menyusun program. Sepertinya tidak banyak tempat tertutup. Bahkan di sini pun saya tidak dapat menemukan pertanyaan mengenai hal ini.
Pertanyaan saya bukan tentang kekurangannya atau cara menangani dokumentasi. Saya menganggap dokumentasi efek samping dari apa artinya bagi aliran pemrograman melek. Saya tahu bahwa desain awalnya dimaksudkan untuk dokumentasi yang mudah serta konsep aliran pemrograman ke depan .
Konsep membagi masalah menjadi masalah berbasis kalimat kecil tampaknya benar-benar ide yang brilian. Dengan demikian akan memudahkan pemahaman tentang aliran program.
Konsekuensi dari metode desain melek juga adalah bahwa jumlah fungsi yang diperlukan akan terbatas pada imajinasi programmer. Alih-alih mendefinisikan fungsi untuk tugas tertentu, itu bisa dibuat sebagai scrap
metode literate. Ini akan menghasilkan penyisipan otomatis kode, alih-alih kompilasi fungsi terpisah dan persyaratan berikutnya dari langkah optimasi kompilasi antar-prosedural untuk mendapatkan kecepatan yang setara. Faktanya, percobaan pertama Donald E. Knuth menunjukkan waktu eksekusi yang lebih rendah, karena fakta ini. Saya tahu bahwa banyak kompiler dapat dibuat untuk ini, namun ini bukan urusan saya.
Jadi saya ingin mendapatkan umpan balik mengapa seseorang harus menganggap ini metodologi desain yang buruk / baik?
literate-programming
tag di StackOverflow juga. Ada lebih banyak konten di sana, meskipun masih tidak banyak.Jawaban:
Ini tidak relevan. Sudah puluhan tahun. Anda dapat menghapusnya dari pertanyaan, karena tidak masuk akal dengan kompiler modern untuk menumbangkan pengoptimal mereka.
Tidak ada downside ke pemrograman melek. (Saya mengharapkan puluhan suara untuk sentimen itu.) Sebagai seorang praktisi, saya tidak pernah melihat masalah.
Ada beberapa argumen yang menentang semua "pemrograman dalam bahasa tingkat yang lebih tinggi ditumbangkan dengan mengubah kode yang dihasilkan." Baik. Dengan cara yang sama pemrograman di C ++ ditumbangkan dengan mengutak-atik
.o
file yang dihasilkan. Memang benar, tetapi tidak relevan.Menulis program melek huruf semata-mata berarti menggabungkan desain tingkat tinggi dan terperinci (level kode) ke dalam satu dokumen, ditulis dengan toolset yang sesuai yang menghasilkan file ramah-kompiler dan file ramah-orang.
Ketika Knuth menemukan pemrograman melek huruf, bahasa OO mainstream tidak ada. Oleh karena itu banyak web asli dan alat tenun memungkinkan dia untuk membuat definisi seperti kelas untuk tipe data abstrak.
Banyak dari itu tidak relevan saat ini. Alat Pemrograman Literate bisa sangat sederhana jika mereka berfokus pada bahasa pemrograman modern, berorientasi objek tingkat tinggi (atau fungsional). Ada sedikit kebutuhan untuk penyelesaian yang rumit karena keterbatasan C (atau Pascal atau Assembler).
Pendekatan untuk menulis program melek huruf tidak berbeda dari pendekatan untuk menulis program buta huruf. Itu masih membutuhkan desain yang hati-hati, pengujian unit, dan pengkodean yang rapi. Satu-satunya pekerjaan tambahan adalah menulis penjelasan selain menulis kode.
Untuk alasan ini saja - kebutuhan untuk menulis penjelasan yang koheren - pemrograman melek huruf sulit bagi beberapa programmer. Ada cukup banyak programmer yang berhasil (kode mereka melewati semua tes unit, rapi dan mudah dimengerti) tetapi sepertinya tidak bisa menulis kalimat yang koheren dalam bahasa ibu mereka. Tidak tahu mengapa ini benar.
Ada sejumlah besar programmer yang tampaknya hanya sedikit berhasil dan kemudian hanya karena kecelakaan. (Ada cukup banyak pertanyaan buruk di Stack Overflow yang menunjukkan bahwa banyak programmer berjuang untuk memahami fundamentalnya.) Untuk programmer yang mengajukan pertanyaan stack overflow yang tidak koheren, kami tahu mereka tidak bisa melakukan pekerjaan pemrograman literasi yang baik, karena mereka dapat dapat melakukan pekerjaan pemrograman dengan baik.
sumber
Aspek yang paling penting dari pemrograman melek (atau bahkan hanya komentar yang baik) bagi saya adalah tidak begitu banyak memberikan dokumentasi, tetapi lebih tepatnya menyatakan maksud dari programmer. Dalam mengetahui maksud yang dinyatakan, Anda dapat segera menilai apakah kode yang mengikutinya benar-benar melakukan apa yang seharusnya. Tanpa niat, Anda harus mulai dengan asumsi bahwa kode itu benar dan kemudian membuktikannya benar atau salah dengan induksi - yang lebih melelahkan dan memakan waktu karena sering memerlukan membiasakan diri dengan semua kode di sekitarnya juga.
Jadi, niat yang disebutkan sering memungkinkan orang lain yang tidak terbiasa dengan kode untuk dengan cepat masuk dan menemukan kesalahan tanpa harus mengetahui konteks yang lebih luas di sekitarnya.
Dan tentu saja, ini membantu Anda untuk mempelajari aliran dasar dan desain kode lebih cepat juga, karena bahasa Inggris biasa sering lebih intuitif daripada aritmatika pointer untuk kebanyakan orang.
sumber
Meskipun agak baru dengan konsep pemrograman sampah sembarangan (dan karena itu sepertinya saya kehilangan kapalnya sepenuhnya), tampaknya sangat sejalan dengan konsep DSL .
Gagasan di balik DSL adalah untuk menyaring domain masalah menjadi tata bahasa sederhana, berorientasi bahasa yang dapat digunakan untuk membangun algoritma untuk memecahkan masalah tersebut.
Bagi saya, gagasan yang sama, atau paling tidak fondasi inti dari itu, adalah sama atau setidaknya terkait erat dengan pemrograman melek.
Di dunia asyik, misalnya, ada dorongan kuat untuk menggunakan DSL lebih teratur dan membuat DSL baru untuk memecahkan masalah umum. Dorongan ini datang dari kedua alat dalam bahasa (pembangun mudah), serta pustaka inti yang mendukung API berbasis DSL.
Mengingat bahwa tren, setidaknya di sudut dunia itu, adalah menuju pemrograman melek, saya akan mengatakan bahwa itu adalah metodologi yang baik untuk diperjuangkan.
Sayangnya, tingkat pemikiran yang diperlukan untuk membuat dsl yang baik sering melampaui kebanyakan programmer, dari apa yang saya lihat. Saya tahu saya secara pribadi berjuang dengan beberapa konsep yang dibutuhkan dari waktu ke waktu. Mungkin kesulitan ini yang mencegah teknik seperti itu untuk mendapatkan adopsi yang lebih luas.
Ini adalah kasus klasik Anda ketika menggunakan alat adalah satu hal, tetapi menciptakannya ada pada tingkat yang sama sekali berbeda.
Untuk memperluas sudut pandang saya sedikit, itu tidak banyak yang DSLs adalah hal yang sama dengan pemrograman melek huruf, melainkan bahwa mereka membuat pemrograman melek huruf jauh lebih mungkin . Terutama ketika mereka DSL bahasa alami .
Dalam versi 1.8 groovy, kemampuan DSL bahasa alami secara substansial ditingkatkan dengan penambahan rantai perintah yang lebih kuat.
Misalnya, baris kode berikut adalah pemrograman , bukan hanya kalimat semu:
Catatan: Contoh kode berasal dari blog Guillaume Laforge
Gagasan inti di balik pemrograman melek huruf adalah bahwa bahasa alami lebih mudah dipahami oleh manusia dan itulah yang penting. Menurut saya, kemampuan DSL bahasa alami Groovy menjadikan kenyataan itu lebih dekat. Terutama ketika mereka DSL digunakan untuk membuat aturan bisnis untuk suatu aplikasi.
Mampu "menyandikan" komponen-komponen penting dari suatu sistem menggunakan bahasa alami adalah inti dari pemrograman melek. Harus menyelingi bahasa alami dengan potongan kode adalah bentuk pemrograman literat yang terbastardisasi. Meskipun bermanfaat, saya percaya bahwa DSL bahasa alami yang memungkinkan Anda untuk menggunakan bahasa alami sebagai kode itu sendiri adalah lompatan besar ke depan.
Memperluas kemampuan pemrograman secara umum adalah langkah selanjutnya dalam proses, tetapi sebagian besar alat untuk melakukannya sudah ada. Ya, belum ada DSL "umum", tetapi untuk domain yang lebih kecil, kemampuannya ada.
Untuk lebih banyak contoh tindakan ini (tanpa urutan tertentu):
sumber
turn left then right
ataupaint wall with red, green and yellow
: docs.codehaus.org/display/GROOVY/…Saya pikir ini adalah kesalahan untuk berpikir bahwa LP adalah semacam DSL. Karena LP adalah - jurnal (dengan diagram, skema, fragmen kode semu, yaitu bongkahan) dari program yang dikembangkan, arsitekturnya dan sebagainya ... Ini benar-benar analog dari notebook kertas - banyak pengembang yang menggunakannya tetapi setelah menyelesaikan program - jatuhkan buku catatan, kertas ...
Dahulu kala masing-masing ahli fisika, astonomer, ahli kimia / alkemis, ahli matematika memiliki buku catatan, manuskrip dengan banyak skema, informasi yang diperlukan, tabel, dan tanpa mereka Anda dapat memahami atau mengulangi pengalaman sukses mereka, hasilnya. Dan selalu antara orang-orang seperti itu ada manuscreepts / notebook berburu.
Saat ini banyak programmer menulis kode, dan terkadang mereka menambahkan komentar! Program Byt bukan hanya kode - itu pikiran, ide, imajinasi, konsep, dan ketika pengembang baru mewarisi kode asing - ia sering menemukan semua ide dan konsep, membuat "celah" dan "jalan belakang" yang berbeda, saya harap Anda mengerti saya :)
Jadi, persyaratan utama untuk LP (sebagai alat!) Juga memungkinkan semua ini dengan sintaks yang sederhana, mudah dibaca. Saya mencoba banyak alat LP, tetapi hari ini saya sedang mengembangkan sendiri - NanoLP ( http://code.google.com/p/nano-lp/ ) yang bertujuan untuk memenuhi permintaan ini.
sumber