Teknik pemrograman umum untuk mempercepat waktu pengkodean

20

Saya sedang mempersiapkan untuk kontes pemrograman di mana kita harus kode dalam C ++ dan ini semua tentang menghasilkan kode kerja dalam waktu singkat. Contohnya adalah dengan menggunakan makro untuk mendapatkan minimum dua int atau menggunakan memsets untuk menginisialisasi array (tapi saya diberitahu bahwa Anda tidak boleh menggunakan salah satu di sini ).

Ini mengarah pada pertanyaan, apa jenis teknik pengkodean yang ada untuk digunakan pada pekerjaan nyata?

marktani
sumber
26
Saya kira teknik yang Anda gunakan dalam kompetisi pengkodean mungkin tidak ada hubungannya dengan teknik yang Anda gunakan pada pekerjaan nyata.
Doug T.
1
Saya tidak meminta teknik di pekerjaan nyata, saya meminta teknik dalam kompetisi coding.
marktani
1
@ DougT. Saya setuju, trik untuk kompetisi pengkodean tidak pada topik, tetapi saya juga berpikir Anda dapat memperluas untuk berbicara tentang produktivitas dalam lingkungan kerja, dan bagaimana cara terbaik Anda mengurangi waktu yang dihabiskan untuk kode monyet
James
1
Mengapa Anda tidak menggunakan memo untuk menginisialisasi array dinamis?
James
3
Jangan gunakan c ++. Gunakan bahasa tingkat tertinggi yang Anda bisa.
Kevin

Jawaban:

52

Cara menghasilkan kode yang berfungsi cepat adalah ... melambat. Ambil langkah yang sangat kecil. Pastikan Anda tahu untuk setiap langkah apa. Pastikan bahwa setelah setiap langkah, kode Anda dikompilasi dan dijalankan.

Terbaik dari semua, gunakan Pengembangan Test-Driven. Tulis tes yang gagal. Tulis kode yang cukup untuk lulus ujian. Refactor untuk membuat kode bersih, pastikan masih melewati semua tes. Ulang.

Jika Anda tidak melakukan ini, maka sangat mudah untuk menulis tumpukan kode besar, yang tidak berfungsi. Maka Anda akan membutuhkan waktu yang sangat lama untuk mencari tahu mengapa itu tidak berhasil.

Dima
sumber
21
Apakah kamu serius? TDD untuk kontes pemrograman?
Codism
1
@Codism: pertanyaan diperluas untuk mencakup teknik yang berlaku untuk pengembangan perangkat lunak normal.
Dima
2
TDD pasti membantu membuat kode saya lebih baik, tetapi tidak pernah membantu saya menulis kode lebih cepat. Lingkungan pemrograman interaktif (misalnya konsol Groovy, Lisp REPL, dll) telah menjadi penghemat waktu terbesar dalam pengalaman saya.
erturne
3
-1 untuk TDD. Masuk akal jika proyek itu jangka panjang, bukan hackathon pendek.
TheLQ
1
@TheLQ Hanya karena Anda lebih suka menghabiskan seluruh waktu Anda menggunakan debugger tidak berarti bahwa TDD adalah saran yang buruk.
byxor
29

Tinjau perpustakaan standar secara intens, terutama algoritma STL. Ini akan menghemat banyak baris kode dan banyak waktu. Kunci untuk memenangkan kontes pemrograman adalah dalam pemrograman setinggi mungkin. Di C ++, tanpa pustaka eksternal, ini berarti panggilan STL bukan untuk loop.

kevin cline
sumber
+1 - Saya sepenuhnya setuju dengan ini. Mengetahui cara cepat menulis kode dalam STL sangat besar dalam kompetisi semacam ini.
Jordan Parmer
23

Saya berpartisipasi secara teratur dalam kompetisi ACM, semoga beberapa tips ini akan membantu Anda:

  • Seperti yang orang lain katakan, biasakan diri Anda dengan bahasa tersebut , dalam C ++ terutama STL, ia memiliki kedua fungsi umum yang ingin Anda gunakan (binary_search, min, max) dan struktur data yang kuat untuk menghemat waktu Anda (tumpukan untuk menghindari rekursi langsung , antrian untuk BFS, bahkan priority_queue untuk Dijkstra jika Anda suka seperti itu).

  • Identifikasi kategori masalah, apakah itu matematis, pemrograman dinamis, teori grafik, dll. Tanyakan pada diri sendiri: Seberapa familiar Anda dengan jenis masalah itu? Setelah melakukan ini, Anda harus membuat keputusan mengenai urutan penyelesaiannya , yang sejalan dengan poin berikutnya ...

  • Anda ingin memahami masalah sepenuhnya sebelum mengetik, menyelesaikan masalah yang tepat , dalam kompetisi pertama saya, saya berpikir bahwa jika saya tidak mengetik, saya membuang-buang waktu; Saya kemudian menemukan bahwa ini adalah kesalahan.

  • Jangan berpikir komentar itu buang-buang waktu, setidaknya dalam kode "pintar", Anda tidak ingin melakukan debugging baris demi baris untuk melihat apa yang salah (yaitu buang-buang waktu), kejelasan nilai .

  • Selamat bersenang-senang .

lccarrasco
sumber
6
+1 untuk memahami masalah sepenuhnya sebelum mengetik. Kalau tidak, Anda membuang-buang waktu tim (kompetisi ACM adalah 3 orang satu komputer)
Codism
Jawaban bagus. :)
Jared Farrish
13

Bagi saya, sepertinya Anda hanya tahu C dan bukan C ++ sama sekali. Pertanyaan-pertanyaan ini mudah dijawab oleh seseorang dengan pengetahuan dasar bahasa.

Contohnya adalah dengan menggunakan makro untuk mendapatkan minimum dua int

Cukup gunakan fungsi? std::minsudah ada.

atau menggunakan memsets untuk menginisialisasi array

std::array<T, N> sudah menginisialisasi isinya.

apa jenis teknik pengkodean yang ada untuk digunakan pada pekerjaan nyata?

Langkah pertama adalah mengetahui bahasa yang Anda gunakan.

DeadMG
sumber
Saya mencoba mengenal bahasa yang saya gunakan, itu sebabnya saya menanyakan pertanyaan ini! Terima kasih atas masukannya tentang ini .
marktani
7
Oh Saya pasti salah mengerti pertanyaan Anda kalau begitu. Saya akan merekomendasikan buku . Kami dengan baik hati hanya menyajikan buku-buku yang layak dibaca, bukan buku-buku yang mengajarkan sampah C.
DeadMG
10

Selain mengetahui bahasa, ketahui alat Anda, terutama editor Anda. Saya telah mengkode selama lebih dari 15 tahun secara profesional, dan saya telah melihat bahwa programmer yang hebat melambat karena satu-satunya perintah editor yang mereka gunakan adalah kunci kursor dan crtl-x / c / v ..

Apakah editor Anda mendukung satu penekanan tombol untuk menghapus satu baris? Untuk memasang kembali garis? Pindah antar fungsi / metode? blokir pilih / tempel? penanda buku? Pindah demi kata? Bisakah editor otomatis menghasilkan kelas / metode / fungsi? Apakah itu mendukung template yang dapat Anda buat sebelumnya? Refactoring cepat? Rekaman makro?

Mengetahui editor Anda dapat sangat mempercepat waktu pengembangan.

Garion911
sumber
1
Amin. Saya hanya bekerja dengan seorang pria baru yang sangat cepat ... dan menggunakan vim. Ini bekerja untuknya karena dia meluangkan waktu untuk belajar bagaimana menggunakannya.
gbjbaanb
Juga ... jika editor Anda tidak mendukung hampir setiap fitur yang tercantum di sini - temukan editor yang lebih baik.
Abhi Beckert
wawancara di google docs ... pengalaman terburuk karena alasan ini.
UmNyobe
6

Berpikirlah sebelum bertindak. Lebih baik berpikir dan merencanakan sebelum menulis implementasi kelas daripada setelah tiga yang gagal. Juga, pikirkan saat Anda bertindak - melakukan hal-hal dalam langkah-langkah kecil sangat menyederhanakan proses pengembangan.

Tulis hanya kode yang Anda butuhkan saat ini. Artinya, jangan mulai menulis kode dengan mentalitas seperti: " Saya akan membutuhkan fungsi-fungsi ini nanti jadi saya mungkin juga menulis prototipe mereka sementara saya melakukannya ". Banyak hal berubah, rencana berubah. Anda akan berakhir dengan kode yang bahkan mungkin tidak dapat digunakan. Buang-buang waktu.

Ketahuilah apa yang Anda lakukan. Tidak ada yang lebih buruk daripada mencoba mengingat bagaimana fungsi dan fitur dasar bahasa dan / atau perpustakaan bekerja. Kenali alat yang Anda gunakan.

zxcdw
sumber
+1 untuk YAGNI .
Pasang kembali Monica
4

Sudah banyak jawaban, masih saya ingin menambahkan pendapat saya.

Untuk mempercepat pengkodean Anda, Menjadi pengetik sentuh hingga kecepatan yang saat mengetik Anda dapat berkonsentrasi pada logika dan kode. Ada banyak perangkat lunak untuk belajar mengetik (Typing Master, Rapid Typing, KTouch, gTypist misalnya), menggunakannya

Saya telah melihat banyak programmer berpengalaman yang masih mengetik dua jari. Ini mengarah ke kode jahat tanpa dokumentasi dan kode benar-benar samar dengan makro dan nama jenis disingkat.

Sarvex
sumber
Turun dengan jari telunjuk :)
mlvljr
Jawaban yang bagus Saya akan menambahkan bahwa orang-orang yang melihat keyboard bukannya layar sering mengetik sampah sebelum mereka menyadarinya dan harus mundur. Atau mereka akan mengetik di jendela yang salah. Dan yang menyedihkan adalah, mereka tidak menyadari betapa ini memperlambat mereka.
Dave Markle
2

Pengembangan perangkat lunak adalah salah satu dari 80-20 aktivitas klasik - yaitu di mana 80% pertama dari pekerjaan membutuhkan 20% dari waktu, dan 20% terakhir dari pekerjaan membutuhkan 80% dari waktu.

Oleh karena itu, kunci untuk mempercepat pekerjaan Anda adalah bekerja untuk meningkatkan kinerja Anda selama 20% dari upaya terakhir. Ini biasanya tahap debugging dan pekerjaan untuk menyatukan semuanya dan membuatnya dapat digunakan.

Anda dapat meningkatkan ini dengan lebih berhati-hati pada tahap awal. Perencanaan dan desain pekerjaan pada permulaan proyek mungkin tampak seperti buang-buang waktu ketika Anda tergoda untuk terjun ke dalam pemrograman hardcore, tetapi mereka dapat menghemat banyak waktu di kemudian hari.

Orang akan berbicara tentang metodologi tertentu seperti TDD atau BDD. Ini bagus, tetapi jika Anda tidak melakukannya sekarang, Anda akan butuh sedikit waktu untuk menyesuaikan diri, jadi mereka mungkin bukan sesuatu yang Anda ingin mulai dengan kontes pemrograman. Tetapi berhenti untuk merencanakan apa yang Anda lakukan sebelum menyelam dan melakukannya akan menuai hasilnya, apa pun yang terjadi. Dan mereka adalah langkah pertama menuju TDD dan BDD. Di sinilah Anda ingin memulai.

SDC
sumber
-2

Jika ini untuk kompetisi pemrograman yang sebenarnya, jangan gunakan C ++. Gunakan bahasa scripting RAD yang cepat, interaktif, dan cepat. Ini adalah sesuatu yang sangat mendominasi VB6. Pra-dipersenjatai dengan perpustakaan yang Anda prewrote. Pemisahan string, pembalikan array, pencarian, pengurutan, grafis dasar, kontrol konsol.

Jika itu untuk pekerjaan, lakukan yang sebaliknya. Pelajari apa yang ada di sana, gunakan bahasa yang solid (C ++ baik-baik saja), komentar semuanya, dan sebagainya. Dua jenis lingkungan tidak bisa terpisah lebih jauh.

Bryan Boettcher
sumber
3
Saya bukan salah satu dari downvoters, tapi saya berasumsi mereka mungkin memberi Anda karena pertanyaannya adalah tentang pemrograman lebih cepat di C ++ .
Gordon Gustafson
9
VB6? Serius? Apakah kamu dari masa lalu?
Konamiman
2
@Kamamiman: heh, ya saya. Saya tidak tahu apakah maksudnya "Saya sedang mempersiapkan, dalam C ++, untuk kontes pemrograman" atau "Saya sedang mempersiapkan untuk kontes pemrograman C ++". Oh well, keripik terletak di mana mereka mungkin. Namun, tidak ada yang mengalahkan lingkungan RAD yang sangat cepat untuk kompetisi pemrograman, di mana secara harfiah setiap detik diperhitungkan.
Bryan Boettcher
Saya mengedit pertanyaan untuk klarifikasi.
marktani
Di RAD: Delphi 6 akan menjadi taruhan terbaik, mungkin.
mlvljr