Menulis pendekatan pemecahan masalah saya di atas kertas? [Tutup]

54

Saya mahasiswa baru Ilmu Komputer dan kami baru saja mulai melakukan beberapa proyek aktual dengan Python. Saya menemukan saya sangat efisien ketika saya menggunakan metode pena dan kertas yang disarankan profesor saya di kelas. Tetapi ketika saya tidak bisa menuliskan masalah saya dan menyelesaikan algoritme saya di atas kertas, saya sangat lambat. Selama lab, sepertinya aku selalu harus mengambil tugas kembali ke asramaku. Ketika saya sampai di sana dan menulisnya, saya memecahkan masalah yang membawa saya seluruh kelas dalam waktu 5 menit.

Mungkin karena saya merasa stres melihat orang-orang memecahkan laboratorium sebelum saya. Atau mungkin metode pena dan kertas.

Saya browsing melalui forum dan seseorang menulis bahwa jika Anda harus menulis program Anda di atas kertas maka Anda tidak harus menjadi seorang programmer. Saya benar-benar khawatir karena saya jauh lebih baik ketika saya bisa melihat apa yang sedang dilakukan program dan melacaknya sebelum mengetik kode yang sebenarnya. Apakah saya melakukan sesuatu yang salah?

Sunting: Maaf karena tidak jelas, tetapi ketika saya mengatakan menulis di atas kertas saya maksudkan pendekatan pemecahan masalah saya (misalnya menulis contoh, membuat tabel dengan nilai, dll.) Bukan kode saya yang sebenarnya. Saya hanya menggunakan kertas untuk mengeluarkan ide-ide saya.

ComicStix
sumber
28
Saya tidak bisa melihat ada yang salah dengan memikirkan masalah di atas kertas terlebih dahulu.
Julien Guertault
34
Orang itu salah. Sebagian besar menggunakan steno seperti UML atau pseudocode blok, tetapi metode apa pun yang Anda gunakan harus bekerja seperti pikiran Anda bekerja dan ternyata milik Anda membutuhkan kertas =) Saya kira Feynman tidak boleh menjadi ahli fisika karena ia menulis persamaan di papan tulis, kan?
Patrick Hughes
10
Tantangan bagi Anda kemungkinan besar adalah belajar menyelesaikan masalah di atas kertas saat Anda benar-benar di lab. Para insinyur dan ilmuwan terbiasa menggunakan notebook kertas untuk ini (dan sebagai jejak kertas) dan saya selalu bertanya-tanya mengapa begitu banyak orang IT meremehkan pendekatan itu. Saya seorang insinyur yang menghabiskan karir saya menulis kode, dan menggunakan notebook kertas sepanjang waktu.
Móż
4
@ ott - Saya dan rekan kerja saya semua menggunakan pena dengan buku catatan. Bagi saya, setidaknya, ini adalah trik bagus yang saya pelajari di perguruan tinggi - tidak dapat menghapus membantu memaksa saya untuk memikirkannya lebih lanjut, jadi saya tidak harus menyebarkannya ke halaman tambahan. Selain itu, godaan untuk menyimpan semuanya pada satu halaman dan kemampuan untuk menghapus membuatnya terlalu mudah untuk secara tidak sengaja menghapus sesuatu yang Anda inginkan. Pendekatan yang salah juga hanya dapat dicoret, tidak dihapus, sehingga Anda memiliki pengingat tentang apa yang Anda coba dan apa yang tidak berhasil. Kertas itu murah, jangan mempersulit diri sendiri.
Izkata

Jawaban:

70

Tidak ada yang salah dengan mengerjakan algoritme Anda di atas kertas terlebih dahulu. Tidak terlalu banyak untuk pengkodean sehari-hari, tetapi untuk algoritma yang lebih kompleks, pemrogram profesional mengerjakannya di atas kertas atau papan tulis sepanjang waktu, terutama jika format grafis membuatnya lebih jelas. Untuk seorang siswa, setiap program itu kompleks.

Jika Anda ingin menjadi lebih baik dalam mendesain algoritma di komputer, ada beberapa teknik yang bisa Anda praktikkan. Jangan hanya memulai dengan menuliskan kode, menulis hal-hal yang sama seperti yang Anda letakkan di atas kertas sebagai komentar, lalu mengembangkannya menjadi kode nyata atau komentar yang lebih rinci satu per satu.

Misalnya, jika saya menghapus elemen dari tengah daftar tertaut, saya mungkin mulai dengan sesuatu seperti:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

Maka saya mungkin mengganti // find the elementdengan fungsi dengan lebih banyak pseudocode, dan terus berjalan sampai saya memiliki solusi lengkap. Jangan berpikir kode harus ditulis secara linear.

Karl Bielefeldt
sumber
Saran bagus, Karl.
andy256
2
Saya menggabungkan metode di atas dengan pemecahan masalah Bebek Karet (saya adalah mewah SuSE) untuk melakukan sebagian besar pekerjaan kompleks saya. Saya juga memiliki kemewahan papan tulis untuk menulis banyak hal.
Deco
+1. Menulis pertanyaan dan kemudian menjawab adalah bagaimana saya sering menyelesaikan berbagai hal. Itu memaksa saya mencari jebakan dan gotcha dalam rencana saya.
Andy Hunt
1
Anda akan menemukan sejumlah bisnis yang didorong pengembangan perangkat lunak akan memiliki permukaan yang dapat ditulisi di mana-mana. Biasanya diisi dengan diagram, kodesemu, catatan, karya-karya. Saya memiliki preferensi yang sangat kuat untuk menuliskan semuanya. Jika saya membuat ulang kode anjak piutang, saya menyukainya jika saya benar-benar dapat mencetak kode dan membubuhi keterangan. Saya merasa jauh lebih baik daripada membaca dan membuat catatan.
Twirrim
1
Teknik ini sebenarnya memiliki nama: Proses Pemrograman Pseudocode
roufamatic
15

Lakukan itu! Jika kami menyebut apa yang Anda lakukan dengan memikirkan dan merancang solusi Anda, maka masuk akal jika proses Anda akan jauh lebih cepat daripada hanya sekedar mengeluarkan kode.

Orang suka berpikir (dan orang yang berisik suka memberi tahu kami) bahwa cara mereka melakukan lebih baik. Tetapi campuran kemampuan dan keterampilan setiap orang berbeda. Jadi lakukan apa yang berhasil untuk Anda. Ketika Anda mulai berlatih, Anda mungkin akan beralih untuk melakukan lebih banyak pekerjaan desain di kepala Anda, dan menggunakan kertas untuk masalah yang lebih besar.

Satu hal yang harus diwaspadai adalah bentuk ujian yang akan diambil. Apakah mereka di atas kertas, atau apakah mereka berbasis komputer? Jika mereka berbasis kertas, maka cara Anda akan memberi Anda keuntungan. Jika berbasis komputer, maka itu juga tidak masalah: lakukan desain apa pun di atas kertas, kemudian tulis kodenya. Apapun yang terbaik!

andy256
sumber
1
Saya dapat menjamin untuk berpikir dan merancang solusi yang memakan waktu lebih sedikit dalam jangka panjang. Terlalu sering, di universitas, saya akan melihat orang-orang (termasuk saya) diluncurkan dalam waktu 2 jam, hanya untuk menemukan bahwa solusi mereka rusak. Meluangkan waktu untuk merancang dan menyelesaikan masalah akan membantu menemukan solusi sederhana. Kami memiliki papan tulis, buku catatan, dan "konsultasi" tempat saya bekerja karena alasan ini.
Jamie Taylor
6

Saya tidak menuliskan kode aktual di atas kertas, tetapi untuk hal-hal yang tidak sepele, saya hampir selalu memulai dengan papan tulis atau buku catatan. Saya biasanya membuat sketsa:

  • Algoritma / proses / aliran kendali
  • Struktur data
  • Hubungan
  • Komponen (bagaimana cara memecahkan masalah ini)

Biasanya merupakan kombinasi sketsa, kodesemu dan bahasa Inggris.

Saya menemukan bahwa dengan melakukan ini, lebih mudah untuk divisualisasikan ketika saya mulai coding. Saya juga akan melihat kekurangan sebelum saya mulai masuk ke kode karena saya bisa melihat semua yang ada di depan saya (bukannya gulir yang tak henti-hentinya dan lompatan jendela). Tidak hanya itu, setelah ditulis, saya dapat membiarkan hal-hal terbentuk di benak saya ketika saya sedang mengerjakan tugas-tugas lain. Saya juga dapat bekerja dengan cara yang tidak linier, membuat ide di atas kertas ketika ide itu mengenai saya dan kemudian kembali ke situ ketika saya mencapai titik di mana saya membutuhkannya.

Melakukan sesuatu pada kertas adalah bantuan luar biasa untuk penyimpanan memori. Tagline untuk merek notebook Field Notes adalah ini:

Saya tidak menuliskannya untuk mengingatnya nanti, saya menuliskannya untuk mengingatnya sekarang.

Setelah mengambil pendekatan yang lebih fokus untuk menuliskan segala sesuatu di atas kertas, bahkan jika saya membuat entri di aplikasi ToDo di ponsel saya beberapa saat kemudian, saya menemukan bahwa pikiran itu disemen di kepala saya jauh lebih baik daripada hanya membuat catatan elektronik. TKI, dengan merencanakan pengkodean saya di atas kertas / papan tulis, ide-idenya tetap di kepala saya lebih baik.

Ini juga berfungsi sebagai referensi praktis ketika saatnya untuk mendokumentasikan apa yang saya tulis.

alroc
sumber
5

Saya tidak berpikir ada sesuatu yang salah secara inheren dengan penyusunan kode (semu atau sebaliknya) di atas kertas terlebih dahulu - itu benar-benar tidak berbeda dengan menuliskannya di papan tulis, yang dilakukan banyak orang ketika membahas cara mengatasi masalah.

Apakah Anda menulis draf esai pertama untuk kelas non-CS di atas kertas terlebih dahulu sebelum mengetiknya? Sebenarnya, saya pernah melakukan itu bertahun-tahun yang lalu ketika saya masih mahasiswa, tetapi setelah tahun pertama saya, saya memaksa diri saya untuk menulis semua draft di layar, karena itu membuat menulis draft berikutnya jadi lebih mudah, dan ide yang sama berlaku untuk menulis kode.

Saya sarankan Anda mencoba mengetik algoritma Anda, bahkan jika itu hanya di editor teks seperti Word. Semakin banyak Anda melakukannya, semakin nyaman Anda untuk tidak bergantung pada kertas dan pena. Dan jika keterampilan mengetik Anda agak kurang dan itu sebenarnya sumber frustrasi Anda, ikuti kursus mengetik! Itu akan menjadi hal terbaik yang dapat Anda lakukan untuk karier masa depan Anda.

Derek
sumber
3

Memecahkan masalah dan menulis kode yang mengimplementasikan solusi Anda adalah dua aktivitas yang berbeda.

Jika Anda tidak terbiasa dengan bahasa, Anda akan menghabiskan banyak waktu pada kode itu sendiri - dan tidak cukup untuk menemukan solusi yang baik. Jika kertas, papan tulis atau mulai di langit-langit membantu Anda dalam hal itu, maka lakukanlah.

(Secara pribadi, saya menemukan diri saya turun dari komputer dan berjalan berputar-putar mencoba membangun solusi dalam pikiran saya)

ptyx
sumber
2

Anda akan ace wawancara! Mereka membuat Anda menulis kode di atas kertas atau papan tulis. Saya justru sebaliknya. Mencoba menulis kawat gigi atau memotong & menempel dengan pena sangat membosankan!

Ayah saya menggunakan banyak kertas ketika memprogram COBOL. Saya pikir itu hanya gaya berpikir Anda.

Chloe
sumber
0

Kami dulu memiliki kelas dua semester bernama The Basics of Programming. Tes tengah semester dan ujian pada akhirnya dilakukan di atas kertas. Jika Anda membuat kesalahan kompilasi, Anda kehilangan banyak poin. Jika Anda membuat kesalahan kompilasi yang besar, Anda gagal. Namun saya merasa itu mengembangkan kemampuan dalam diri kita untuk melihat kode apa saja dan menemukan garis kereta dalam jumlah waktu yang relatif lebih pendek.

András Hummer
sumber
0

Tidak ada yang salah dengan apa yang Anda lakukan, saya belajar memprogram menggunakan kertas dan pena juga.

Seperti yang orang lain sarankan lakukan apa yang cocok untuk Anda. Saya ingat program Java pertama yang saya tulis terutama di atas kertas dan kemudian saya menghabiskan dua jam mengetiknya dan lima belas menit menangis ketika saya melihat lebih dari 200 kesalahan kompiler. Ada lebih banyak tetapi kompiler hanya akan menampilkan 200 yang pertama! Yang saya maksudkan adalah bahwa dengan menulis kode di atas kertas saya dapat memikirkan algoritma dasar dan fungsionalitas untuk apa yang perlu dilakukan oleh program. Kompiler menunjukkan alasan mengapa program saya tidak dapat berjalan. 90% dari masalah berada di luar batas pengecualian dengan array.

Saat Anda mendapatkan lebih banyak pengalaman dan kepercayaan diri, Anda akan lebih sedikit menggunakan pena dan kertas. Anda sudah tahu cara menggunakan konsep dasar seperti untuk loop dan sebagainya. Anda akan memiliki contoh di program lain, yang dapat Anda gunakan kembali. Anda akan menggunakan kompiler dan IDE untuk menemukan bug yang jelas selama penulisan program. Meskipun sekarang Anda tidak memiliki pengalaman itu.

Membaca pertanyaan Anda, saya ingin tahu apakah beberapa masalah Anda mungkin karena fokus. Jika menggunakan pena dan kertas di lingkungan yang tenang membantu Anda fokus, maka hebat.

Anda masih kuliah dan masih belajar. Pada akhirnya, semua yang Anda lakukan adalah yang bekerja untuk Anda. Jika dengan menggunakan kertas dan pena Anda memesan pikiran Anda dan berpikir jernih dan tenang maka Anda pemrograman.

Daniel Hollinrake
sumber
1
bagaimana ini menjawab pertanyaan yang diajukan?
nyamuk
OP bertanya apakah boleh menggunakan pena dan kertas karena dia membaca 'seseorang menulis bahwa jika Anda harus menuliskan program Anda di atas kertas, Anda tidak boleh menjadi seorang programmer.' Dia juga menyatakan bahwa dia kuliah, jadi masih belajar. Niat saya adalah untuk menunjukkan bahwa tidak ada yang salah dengan apa yang dia lakukan dan saya belajar memprogram menggunakan kertas dan pena juga.
Daniel Hollinrake
-1

Kode saya jauh lebih terorganisir ketika saya mencoret-coret catatan dan pendekatan pada buku catatan, memeriksa buku, memeriksa web, dan memikirkannya. Saya juga jauh lebih dari orang visual, jadi menggambar gambar dengan struktur data sangat membantu. Saya tidak menuliskan setiap baris, tetapi saya menuliskan apa yang saya anggap sebagai fragmen "penting" atau fungsi utama. Untuk proyek yang lebih besar saya menjalankan Visio. Saya tidak yakin mengapa seseorang menganjurkan untuk melompat ke keyboard kecuali mereka jauh lebih efisien, atau dibayar per jam.

mnemotronik
sumber
-1

Lakukan apa yang berhasil untuk Anda. Saya tidak akan menulis kode di atas kertas. Saya menulis pseudocode dan menggambar diagram alur di atas kertas, tetapi menulis kode lengkap sepertinya membuang-buang waktu.

Liftarn
sumber
-2

Saya juga menghadapi masalah yang sama pada hari pertama saya belajar keterampilan teknis.

Tetapi praktik jenis ini seharusnya tidak memberikan kesuksesan 100% karena jika kita menulis kode di atas kertas maka tidak ada kesempatan untuk memperbaiki bug, ada kemungkinan untuk menyelesaikan kesalahan dan pengecualian selama melakukan pekerjaan kertas.

Jadi pekerjaan kertas tidak memberikan navigasi apa pun untuk menyelesaikan masalah. Dan kita bisa mendapatkan kecepatan ketik sebagai bonus karena praktik sistem.

Saya juga melakukan pekerjaan kertas tetapi ketika sebelum menerapkan fungsi saya hanya melakukan estimasi kasar setelah ini saya akan memulai implementasi saya pada sistem.

Cobalah menghabiskan lebih banyak waktu untuk latihan sistem. Ini akan memberikan kepercayaan diri dan hasil 100%.

Venki
sumber