Haruskah orang menggunakan pseudocode sebelum pengkodean yang sebenarnya?


22

Pseudocode membantu kita memahami tugas dengan cara agnostik bahasa. Apakah ini praktik terbaik atau pendekatan yang disarankan untuk membuat kodesemu sebagai bagian dari siklus hidup pengembangan? Contohnya:

  • Identifikasi dan pisahkan tugas pengkodean
  • Tulis kodesemu
  • Dapatkan disetujui [oleh PL atau TL]
  • Mulai Coding berdasarkan Pseudocode

Apakah ini pendekatan yang disarankan? Apakah itu dipraktikkan di industri?


Apa itu "PL" dan "TL" yang akan menyetujui pseudocode Anda?
Andy Lester

@Andy PL / TL: Pimpinan Proyek atau Pimpinan Tim untuk pengembang yang menulis kodesemu.
Vimal Raj

Jawaban:


17

Menulis pseudocode sebelum pengkodean tentu lebih baik daripada hanya pengkodean tanpa perencanaan, tetapi jauh dari praktik terbaik. Pengembangan yang digerakkan oleh tes adalah peningkatan.

Yang lebih baik adalah menganalisis domain masalah dan merancang solusi menggunakan teknik seperti kisah pengguna, kasus penggunaan, kartu CRC, diagram, sebagaimana didukung oleh metodologi seperti Cleanroom, RUP, Lean, Kanban, Agile, dll.

Memahami hakikat masalah dan komponen yang Anda gunakan untuk mengimplementasikan solusi adalah prinsip di balik praktik terbaik.


Pengembangan Test Driven menghasilkan lebih sedikit jahitan dalam kode.

@ Thorbjørn, TDD tidak menentukan ke mana jahitannya harus pergi (tapi sekali lagi, pseudocode juga tidak). Ini digunakan untuk memastikan mereka memiliki antarmuka yang masuk akal, dan perubahan tindak lanjut pada basis kode diuji. Terserah programmer untuk mengikuti prinsip dan teknik desain suara untuk menentukan di mana jahitan harus pergi dan jenis mereka. Mungkin menggunakan, cerita pengguna, kasus penggunaan, kartu CRC, diagram aliran data, diagram urutan, pemodelan, dll.
Huperniketes

@huper, ini adalah pengalaman saya bahwa antarmuka mendapatkan yang terbaik ketika Anda melakukan tes pertama, dan kode yang sebenarnya nanti daripada harus retrofit implementasi yang bekerja ke API baru. Itu akan menjadi jahitan yang terlihat.

@ Thorbjørn, komentar terakhir itu tidak masuk akal bagi saya. Mengatakan "antarmuka mendapatkan yang terbaik ketika Anda melakukan tes pertama, dan kode aktual nanti" tampaknya pro-TDD. Dalam proyek baru tidak ada implementasi yang berfungsi untuk retrofit ke API baru. Dan tolong beri tahu saya apa yang Anda anggap sebagai keliman karena sepertinya kami tidak setuju dengan definisinya.
Huperniketes

1
Saya menerima jawaban ini, meskipun masalahnya masih dalam perdebatan. Saya menerima bahwa Pseudocodes lebih baik daripada hanya menulis kode tanpa perencanaan. Tapi itu tidak bisa dipraktikkan sebagai prosedur di sebuah perusahaan pengembangan, Mungkin boleh saja membiarkan para fresher melakukan pendekatan pseudocode terlebih dahulu, tetapi Anda tidak bisa mengharapkan orang-orang senior untuk pseudocode sebelum mereka mulai coding ...
Vimal Raj

19

Saya menggunakan komentar sebagai semacam kode pseudo tingkat sangat tinggi, dalam hal itu saya menulis komentar sebelum saya menulis kode. Saya menemukan bahwa memikirkan seluruh masalah, bahkan pada tingkat tinggi, sangat meningkatkan kode saya.


Belum lagi itu sangat membantu untuk memindai kode nanti.
kubi

Ide yang menarik - saya belum pernah mendengar itu sebelumnya. Saya harus mencoba yang itu.
Michael K

8

Tidak, jangan pseudo-code terlebih dahulu

Ini terlalu banyak overhead. Anda sedang melakukan pekerjaan menulis logika tanpa manfaat. Saya menyarankan salah satu dari yang berikut sebagai gantinya:

  1. Prototipe dalam bahasa yang akan Anda kirimi (AKA Tulis satu untuk dibuang )
  2. Diagram arsitektur dengan potongan kode untuk menguji asumsi / desain utama
  3. Pengembangan Didorong Tes di mana Anda menulis antarmuka / struktur kode Anda terlebih dahulu, diikuti oleh tes, diikuti dengan menerapkan kode.

Ketiga hal ini menggerakkan Anda langsung ke solusi Anda, tidak seperti pseudo-code. Secara pribadi saya cenderung menggunakan teknik 1 atau 2 tergantung pada ukuran tim. Untuk tim yang lebih kecil (mis. 5 orang atau kurang), pembuatan prototipe berjalan sangat baik. Untuk tim yang lebih besar yang memiliki beberapa kelompok pengembang yang bekerja secara paralel, saya telah menemukan bahwa dokumentasi yang dihasilkan sejak awal dengan teknik 2 berfungsi dengan baik karena memberi Anda sesuatu untuk didiskusikan lebih awal dan membantu Anda menentukan batas-batas komponen yang lebih baik. Saya yakin TDD akan bekerja dengan sangat baik juga, tetapi saya belum bekerja pada tim yang telah berkomitmen untuk proses ini.


Seseorang berkata "Jika Anda menulis untuk membuang satu, Anda akan membuang dua" ... Saya tidak tahu apakah itu benar.

Saya akan mengatakan risiko yang lebih besar adalah Anda menulis satu untuk dibuang dan akhirnya mengirim prototipe. Saya tentu pernah mendengar beberapa kali hal itu terjadi ...
glenatron

+1. IMO (2) dan (3) kemungkinan akan memberikan nilai tertinggi di sini.
JBRWilkinson

TETAPI, jika Anda membuat kode di atas kertas, Anda dapat membuangnya tanpa bahaya mengirimkannya ...
Michael K

"Menulis satu untuk dibuang" melanggar KERING.
StuperUser

7

Menurut pendapat saya, pseudo-code hanya memiliki dua tujuan yang valid:

(1) Untuk siswa pemrograman yang perlu mempelajari konsep modularitas dan algoritma, tetapi belum lancar dalam bahasa pemrograman.

(2) Untuk mengkomunikasikan bagaimana sesuatu akan bekerja pada orang non-teknis, atau hanya demi kepentingan dalam pertemuan jenis papan tulis.


5

Apakah pseudo-code pendekatan yang disarankan? Untuk programmer pemula, saya katakan ya. Ini membantu programmer baru belajar bagaimana menerjemahkan masalah ke dalam kode tanpa khawatir tentang sintaks yang tepat dari bahasa tersebut. Ini membentuk proses pemikiran dan dapat membantu menanamkan kebiasaan yang berguna (dan saya kira kebiasaan buruk juga). Inilah sebabnya mengapa digunakan di sekolah begitu banyak.

Apakah itu dipraktikkan dalam industri? Dalam pengalaman saya, tidak. Tidak ada yang punya waktu untuk menyelesaikan proyek antara dokumentasi (persyaratan, spesifikasi, papan cerita, kasus penggunaan atau apa pun yang mereka gunakan) dan kode aktual. Secara umum diasumsikan bahwa pemikiran yang cukup telah dimasukkan ke dalam masalah sebelum lampu hijau untuk kode. Pada titik itu, pengkodean proyek lebih penting daripada menambahkan satu lapisan lagi persiapan desain.


3

Saya pasti akan merekomendasikan pseudocode. Ini membantu Anda mengklarifikasi apa yang akan Anda lakukan dan mengidentifikasi item yang mungkin Anda lupakan atau potensi masalah. Jauh lebih mudah / lebih cepat untuk memperbaiki kode Anda ketika masih dalam tahap perencanaan daripada menunggu sampai Anda sudah mengkodekan sebagian besar kode Anda.


3

Pseudocode dapat berguna jika Anda tidak terbiasa dengan bahasa tersebut, atau jika Anda perlu mengubah konteks mental. Pada kesempatan langka yang saya tulis kodesemu, itu di atas kertas. Kadang-kadang melepaskan tangan Anda dari keyboard dan mencoret-coret kertas dapat membantu mengatasi gangguan mental.

Tetapi sebagai bagian formal dari proses pembangunan? Tidak mungkin. Ini adalah alat yang secara sporadis bermanfaat bagi individu. Ada cara yang lebih baik untuk "tahu apa yang Anda tulis sebelum Anda menulisnya", seperti:

  1. mendefinisikan kontrak (kondisi sebelum / sesudah / invarian) dari metode ini sebelum Anda mulai
  2. TDD
  3. 1 dan 2 gabungan (tes tertulis untuk menjalankan kontrak)

Saya juga menyarankan agar mendapatkan segala jenis persetujuan sebelum Anda mulai menulis kode cenderung menyebabkan lebih banyak kerumitan daripada nilainya. Ulasan desain (pra-implementasi) dapat berguna, tetapi harus pada tingkat yang lebih tinggi daripada algoritma individu.


Memberi +1 untuk mengatakan ini bermanfaat untuk individu, bukan sebagai proses.
Michael K

2

Saya akan tidak setuju dengan jawaban sebelumnya dan mengatakan tidak, tetapi dengan peringatan: Anda dapat menyingkirkan psuedocode hanya jika Anda dengan tergesa-gesa mencurahkan isi ulang kode Anda untuk menangani masalah yang muncul. Psuedocode, pada intinya, adalah cara mendefinisikan kode Anda sebelum Anda mendefinisikan kode Anda; ini adalah abstraksi yang tidak perlu dalam banyak keadaan, dan karena kode Anda tidak akan pernah sempurna pertama kali (dan kemungkinan, tidak mengikuti desain psuedocode sampai selesai), sepertinya tidak cocok bagi saya.


2

Jika Anda menulis COBOL atau C, pseudocode mungkin bermanfaat karena menulis kode sebenarnya akan memakan waktu lebih lama, dan jika Anda dapat memverifikasi algoritma / persyaratan Anda dari pseudocode, Anda dapat menghemat waktu.

Dalam bahasa yang lebih modern, pseudocode tidak masuk akal. Apa yang akan bekerja lebih baik adalah menulis metode bertopik, dan mengisi logika tingkat atas, dan sedetail yang diperlukan untuk memverifikasi algoritma dan persyaratan, semua ini dalam kode aktual. Anda kemudian dapat menunjukkan kode itu kepada Ketua Tim untuk disetujui, dan kode asli Anda sudah dimulai.


2

Satu-satunya waktu saya menggunakan kodesemu dalam 10 tahun terakhir adalah wawancara ketika kami mengerjakan papan tulis dan bahasa tertentu tidak masalah.

Ini tentu membantu untuk berbicara melalui proses / algoritma dalam istilah yang longgar tanpa macet dengan sintaks. Misalnya menulis kelas C ++ yang memiliki properti C #, hanya untuk menggambarkan intinya.

Ini memiliki tempat, tetapi hanya boleh digunakan di mana diperlukan (itu adalah pekerjaan yang Anda akan membuang) dan tentu saja bukan bagian dari proses formal, kecuali jika Anda memiliki standar tipe ISO yang bersikeras itu.


2

Bagi saya dan orang-orang yang telah bekerja dengan saya selama beberapa tahun terakhir, kodesemu telah berubah menjadi kode nyata yang tidak sepenuhnya sempurna. kecuali jika Anda bekerja dengan banyak bahasa pada saat yang sama, kebanyakan orang tampaknya mulai berpikir dalam pola umum bahasa utama mereka. Saya telah bekerja di .net toko untuk sementara waktu sehingga coretan papan tulis kebanyakan orang di sekitar kantor cenderung terlihat seperti vb atau c # dengan beberapa tanda baca hilang.

Latihan ini masih berharga ketika memperdebatkan pilihan dan semacamnya, tetapi bahasa agnostiknya cenderung melayang ketika Anda menghabiskan lebih banyak waktu dengan beberapa bahasa.


Tentu saja akan. Saya pikir itu tidak penting. Saya melihat nilai untuk dapat berkonsentrasi pada aliran logika daripada semantik bahasa Anda. Anda tidak memiliki kompiler yang memeriksa pseudocode Anda!
Michael K

Tentu saja tidak masalah bagi saya, tetapi saya memiliki orang-orang di tim saya yang bersikeras bahwa hal itu dapat diterima untuk meletakkan hal-hal dalam langkah kodesemu yang tidak memiliki implementasi yang realistis / efisien / aman dalam bahasa yang kita gunakan. Saya menemukan itu bermasalah. Saya bisa setuju secara teori, tapi saya bekerja di perusahaan, kita tidak akan beralih bahasa hanya untuk mendapatkan satu atau dua fitur, jadi saya lebih suka tetap dekat dengan implementasi yang dimaksud.
Bill

2

Semakin banyak, pseudocode ditulis secara grafis dengan alat-alat seperti UML. Misalnya, coba yUML .

alat online untuk membuat dan menerbitkan diagram UML sederhana. Ini membuatnya sangat mudah bagi Anda untuk:

  • Sematkan diagram UML di blog, email, dan wiki.
  • Posting diagram UML di forum dan komentar blog.
  • Gunakan langsung dalam alat pelacakan bug berbasis web Anda.
  • Salin dan tempel diagram UML ke dokumen MS Word dan presentasi Powerpoint ...

... YUML menghemat waktu Anda. Ini dirancang untuk mereka yang suka membuat diagram dan sketsa UML kecil.

Tanpa yUML, membuat diagram UML mungkin melibatkan memuat alat UML, membuat diagram, memberinya nama, mengutak-atik tata letak, mengekspornya ke bitmap, dan kemudian mengunggahnya secara online di suatu tempat. kamu tidak membuat kamu melakukan semua itu ...


1

Kerja bagus. Anda memulai diskusi yang bagus. Pada saya, saya biasa menulis kode pseudo ketika saya sedang belajar pemrograman untuk memahami berbagai loop dan algoritma. Ini lebih dari satu setengah dekade yang lalu. Hari-hari itu, bahkan bahasa pemrograman pun tidak begitu kuat ... dan pemrograman berbasis acara adalah masa depan. Sekarang dengan 4GL dan 5GL, kami berpikir dalam bahasa itu sendiri daripada bahasa Inggris biasa. Ketika kita memikirkan masalah, kita berpikir dalam hal objek dan operasi. Dan sampai itu adalah algo yang kompleks, menulis kode pseudo (atau PSEU-DO-Codes, hanya bercanda) tidak masuk akal. Lebih baik, mewakili solusi secara grafis.


0

Tergantung pada bahasa yang digunakan, dan keakraban Anda dengannya.

Banyak bahasa modern seperti Python atau Java sudah sangat dekat dengan pseudocode sehingga menulis beberapa pseudocode ad hoc terlebih dahulu adalah pemborosan, IMHO. Lebih baik lakukan segera menggunakan pendekatan tracer bullet .

Ini masalah yang berbeda jika Anda membuat beberapa level rendah, dekat dengan hal-hal logam, atau belum nyaman dengan bahasa yang Anda gunakan. Maka pseudocode pasti bisa bermanfaat.


0

Ada beberapa keadaan di mana pseudocode cenderung pecah dalam pekerjaan saya, yaitu di dunia akademis di mana pemrograman cenderung digunakan sebagai alat atau "dan sekarang kita menyelesaikannya" mengisi di tengah-tengah proyek:

  1. Ketika kode akan menjadi lebih kontra-produktif untuk pemahaman yang sebenarnya tentang apa yang akan terjadi daripada pseudo-code. SAS misalnya, akan mengambil setengah papan tulis melakukan beberapa tugas pemrograman yang cukup mendasar. Lihat juga C, yang telah dibicarakan oleh beberapa poster lainnya.
  2. Dengan banyak analisis data dan pengkodean statistik, ada kecenderungan untuk mengutak-atik kode ketika hasilnya dihasilkan. Pseudocode agak lebih mudah digunakan untuk "di sini terletak proses bolak-balik, jika plot diagnostik tidak terlihat benar, coba X".
  3. Siswa belajar banyak bahasa pemrograman yang berbeda. Misalnya, di antara orang yang saya kenal, masalah statistik mungkin dianalisis dalam SAS, R atau Stata. Sesuatu yang memerlukan sesuatu yang lebih dekat dengan pemrograman tradisional mungkin dilakukan dalam R, Matlab, C, C ++, Java, Python ... itu benar-benar tergantung pada apa yang siswa tertentu sedang mengimplementasikan program, dan untuk tujuan apa. Tapi itu masih berguna bagi orang-orang Jawa dan orang-orang Python dan orang-orang Matlab untuk memiliki ide bersama tentang apa yang dilakukan orang lain, dan bagaimana pendekatan , daripada kode itu sendiri, bekerja.

0

Ini bukan pertanyaan ya / tidak. Sebaliknya, kita harus bertanya-tanya kapan harus menggunakan pseudo-code. Penting untuk memahami masalah sebelum merancang solusi, dan penting untuk memiliki pandangan yang jelas tentang solusi sebelum Anda mengimplementasikannya. Kode semu dapat digunakan dalam langkah-langkah berikut:

  1. Saat mendefinisikan masalah, adalah umum untuk menuliskan use case, terkadang menggunakan urutan tindakan.
  2. Saat merancang solusi. Diagram kelas bagus, tetapi mereka hanya menggambarkan bagian "statis", yaitu data. Untuk bagian dinamis, segera setelah Anda perlu berurusan dengan loop dan data non-sepele, saya menemukan kode semu untuk menjadi metode terbaik yang tersedia. Alternatif grafis termasuk mesin negara (baik untuk aliran kontrol kompleks dengan sedikit data) dan diagram aliran data (baik untuk aliran sederhana dengan data kompleks).
  3. Saat menerapkan solusi (atau sebelum). Beberapa bahasa pemrograman sulit dibaca (pikirkan, rakitan). Representasi alternatif dapat bermanfaat dalam kasus ini. Jika Anda tidak terbiasa dengan bahasa, itu juga layak dilakukan.

Pseudo-code yang sebenarnya adalah kode yang tepat dalam bahasa tingkat tinggi juga digunakan, biasanya disebut prototyping.

Selain mencapai pemahaman, pseudo-code juga baik untuk komunikasi.

Jika Anda bertanya-tanya apakah Anda harus menggunakan pseudo-code secara teratur, saya pribadi menentang semua jenis aturan kaku. Ini dapat dengan mudah berubah menjadi pemborosan waktu yang membosankan jika digunakan untuk masalah sepele yang dipahami semua orang dalam tim. Menggunakan pseudo-code untuk spesifikasi yang Anda pertahankan sepanjang umur proyek juga bisa mahal dan menawarkan sedikit nilai.

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.