Di perguruan tinggi dan dalam buku teks algoritme, sangat umum bagi guru dan penulis untuk menjelaskan aliran kontrol dalam pseudo-code. Dengan munculnya bahasa yang lebih ekspresif seperti Python dan Haskell antara lain, apakah masuk akal bahwa perguruan tinggi beralih untuk menjelaskan algoritma melalui salah satu bahasa ini?
Satu-satunya keuntungan dari pseudo-code yang dapat saya pikirkan adalah bahwa konon itu bahasa-agnostik. Tapi ternyata tidak. Beberapa pseudo-code menggunakan pendekatan imperatif, pseudo-code lainnya terlihat fungsional. Penulis hanya meminjam semantik dari bahasa pemrograman apa pun yang mereka gunakan nyaman, atau lebih buruk hanya menggambarkan semantik dalam bahasa alami. Jadi, jika pseudo-code sebenarnya bukan bahasa-agnostik, lalu apa manfaatnya menggunakannya? Bukankah lebih baik menggunakan bahasa yang sudah ada?
sumber
Jawaban:
Tidak. Maksud dari pseudo-code adalah tidak harus dikompilasi. Saya dapat dengan cepat mengabaikan detail yang tidak relevan. Sebaliknya, bahkan bahasa yang terlihat seperti pseudocode pada pandangan pertama dapat memiliki detail yang sangat tidak intuitif yang hanya akan mengurangi algoritma. Mari kita ambil Quicksort misalnya di Haskell:
atau sama dengan Python:
Keuntungan dalam kedua kasus adalah bahwa ini adalah kode yang dapat dieksekusi, dan dengan demikian dapat diuji, diketik, dan dipermainkan oleh siswa. Namun, keduanya menyertakan detail sintaksis yang mengganggu. Siswa biasanya akan lebih baik dilayani oleh pseudocode yang menggambarkan maksud dari algoritma, bukan detail implementasi:
Perbedaan penting:
Saya hanya bisa membuat sintaks pemahaman daftar yang terlihat seperti matematika daripada harus menjelaskan mengapa Python memiliki
for
dan diif
sini.Saya tidak perlu menjelaskan sintaks bahasa itu untuk daftar gabungan. Mengapa Python menggunakan
+
tambahan? Apa yang ada:
di Haskell? Saya hanya bisa memilih sintaks yang mendapatkan titik lebih jelas.tipe tanda tangan
Ord a => [a] -> [a]
hanyalah detail implementasi. Meskipun mungkin bermanfaat dalam kasus ini, jenis tanda tangan yang kadang-kadang dibutuhkan oleh Haskell bisa menjadi tidak masuk akal.Saya tidak perlu menjelaskan mengapa Python menganggap koleksi kosong itu salah, dan apa
array[1:]
artinya.Saya menghindari siswa yang pandai menunjukkan bahwa saya harus benar-benar menggunakan
yield
contoh Python.Haskell menyebalkan karena menjelaskan struktur data yang bisa berubah seperti Hash Tables, RB tree,….
Hal-hal mulai menjadi sangat spesifik-bahasa begitu kita membutuhkan catatan yang rumit untuk mengekspresikan algoritme kita. Misalnya sistem objek Python memiliki beberapa kejutan yang hanya mengganggu.
Yang mengatakan, itu bisa sangat berharga untuk menggunakan salah satu dari bahasa ini selain pseudocode, cukup hati-hati memberi label apa itu.
sumber
I don't have to explain ... what array[1:] is supposed to mean.
, tetapi kemudian Anda benar-benar harus menjelaskanarray[1, ...] -- the rest of the array without the pivot
dalam komentar karena tidak ada yang tahu apaarray[1, ...]
artinya (adalah array pseudocode Anda berbasis 0 atau 1, apa artinya ellipsis artinya, dll). Saya pikir itu benar-benar mendukung penggunaan bahasa nyata sebagai dasar untuk pseudocode, karena Anda dapat mengarahkan orang ke dokumentasi / tutorial bahasa nyata alih-alih perlu mempelajari sintaks pseudocode Anda.Tidak.
Seluruh tujuan pseudo-code adalah untuk mengabstraksi detail dan kompleksitas masing-masing bahasa sehingga Anda fokus pada apa yang seharusnya dilakukan oleh program, daripada bagaimana melakukannya. Dengan pseudo-code Anda dapat membuat aturan arbitrer yang tidak perlu memenuhi persyaratan implementasi aktual seperti yang dilakukan bahasa dunia nyata, tetapi hanya dengan persyaratan topik aktual yang ada.
Lebih jauh, jika logika disajikan dengan cara yang Anda (sebagai siswa) tidak bisa hanya menyalin / menempelkan ke file, kompilasi dan lakukan, maka Anda dipaksa untuk mengimplementasikan solusi sendiri bahkan ketika solusi itu sendiri dijelaskan untukmu. Ini mendorong individu untuk memikirkan kecurangan copy / paste.
sumber
Apa itu nyata
Karena Real hanya dalam definisi untuk penerjemah .
Apakah bahasa Mandarin lebih atau kurang nyata daripada bahasa Inggris?
Jadi Real bahkan bukan pertanyaannya. Mari kita ulangi:
Mengapa Kode Pseudo digunakan alih-alih Bahasa Formal?
Diagram VENN sederhana dapat menyoroti masalah dengan mudah. Himpunan semua manusia yang berbahasa Inggris dan Mandarin adalah himpunan bagian dari Bahasa Inggris atau Mandarin. Karena dibutuhkan upaya untuk mendapatkan kemahiran dalam bahasa apa pun, persimpangan umumnya jauh lebih kecil daripada persatuan.
Buku teks tentang pemrograman dapat berasumsi bahwa Anda memahami setidaknya satu bahasa alami, bahasa buku teks itu ditulis. Secara umum aman untuk menganggap ini, karena jika tidak, buku teks yang lebih terbaca akan dipilih. Lagi pula, belajar satu bahasa cukup sulit - dua lebih sulit.
Ini memberikan alasan pertama untuk menggunakan kode pseudo. Ini memaksimalkan audiens yang bisa dengan mudah membaca buku. Ini dilakukan dengan mengikuti konvensi bahasa mapan yang sudah ditemukan dalam bahasa alami. Katakanlah resep dari masakan, rumus matematika, dll ... Setiap celah dapat dijembatani dengan penjelasan bahasa alami yang cepat, atau gagal untuk mencari solusi akhir untuk sistem visual kita dengan gambar.
Adapun mengapa bahasa umum tidak bisa menjadi bahasa pemrograman. Saya meninggalkan Anda untuk mempertimbangkan berapa banyak bahasa Mandarin (atau bahasa apa pun yang belum Anda ucapkan) yang telah Anda pelajari dengan membaca buku tentang pemrograman yang ditulis dengan contoh-contoh yang diberikan dalam bahasa pemrograman yang akrab.
What A Textbook Achieves
Adapun alasan kedua, pertimbangkan apa yang harus dicapai oleh buku teks:
Mengapa Diprogram?
Sebagian besar buku harus meyakinkan Anda mengapa Anda ingin belajar dan menggunakan bahasa asing ini, atau bahasa serupa lainnya. Ini berarti mendiskusikan inti dari pemrograman itu sendiri.
Sebagian besar ini tidak ada hubungannya dengan mesin itu sendiri, sebagian besar diskusi tentang bagaimana daging harus beroperasi untuk mewujudkan suatu program. Itu cukup rumit karena harus menunjukkan mengapa kita akan menghubungkan tujuan ruang manusia kita, dengan program masalah ruang dan berusaha untuk menyelesaikannya.
Menggambarkan Program
Prestasi buku teks kedua adalah menggambarkan Bahasa. Sekarang sebagian besar bahasa pemrograman dapat dijelaskan dengan Grammar dan beberapa aturan semantik. Di ujung dangkal adalah bahasa seperti JSON yang dapat didefinisikan dengan cukup lengkap dalam tiga atau lebih halaman. Bahasa yang lebih kompleks membutuhkan spesifikasi yang lebih besar, tetapi sebagian besar tidak memerlukan pemahaman total agar bermanfaat. Apa deskripsi ini adalah Kode Pseudo. Mereka menentukan bahasa formal dalam hal bahasa alami. Perbedaannya adalah bahwa kode pseudo ini ditentukan sebelumnya.
Sekarang mengingat bahwa bahkan Bahasa Formal sendiri adalah Kode Pseudo (Dapat Dieksekusi), pertanyaannya adalah apa yang paling penting ketika menggambarkan suatu algoritma? Konteks selanjutnya yang lebih besar.
Pada titik tidak ada bahasa yang penting ditulis dalam algoritma. Jika hanya beberapa operasi utama yang penting untuk keberhasilan algoritma. Jadi pertanyaannya kemudian menjadi:
Mengingat bahwa belajar bahasa itu Susah, dan pembaca harus sudah belajar / belajar bahasa untuk memahami algoritma, sebagai penulis buku teks apa yang harus Anda minta dari pembaca?
sumber
Saya akan menentang butir di sini dan berpendapat bahwa ya, buku dan tutorial harus menggunakan pseudocode yang didasarkan pada bahasa tingkat tinggi nyata daripada menciptakan sintaks pseudocode yang sama sekali baru.
Namun, saya juga memperingatkan setiap penulis dan pembaca bahwa ketika digunakan dalam konteks ini, ini harus menjadi versi semu dari bahasa nyata, dan penulis harus berhati-hati untuk tidak terlalu ketat dalam mengikuti sintaks dan batasan bahasa. Alih-alih, penulis harus berpikir dengan hati-hati tentang apa yang mereka coba komunikasikan dengan snippet, dan menyembunyikan detail yang tidak relevan di balik pemanggilan fungsi dan / atau komentar daripada berusaha untuk implementasi penuh atau kode yang benar-benar dapat dikompilasi yang idiomatis untuk bahasa dasar yang dipilih .
Penulis harus mengambil kebebasan kreatif pada bahasa untuk menyampaikan maksud mereka sehingga bahkan seseorang yang hanya tahu dasar-dasar bahasa masih dapat memahami inti dari cuplikan, sementara mereka yang mencari semantik yang lebih tepat dapat merujuk ke dokumentasi bahasa atau mundur ke pengetahuan mereka sebelumnya tentang bahasa untuk mengisi rincian.
sumber