Terutama ketika menulis kode baru dari awal dalam C, saya menemukan diri saya menulis kode selama berjam-jam, bahkan berhari-hari tanpa menjalankan kompiler untuk apa pun kecuali pemeriksaan sintaksis sesekali.
Saya cenderung menulis potongan kode yang lebih besar dengan hati-hati dan menguji secara menyeluruh hanya ketika saya yakin bahwa kode melakukan apa yang seharusnya dilakukan dengan menganalisis aliran di kepala saya. Jangan salah paham - saya tidak akan menulis 1000 baris tanpa pengujian sama sekali (itu akan menjadi judi), tapi saya akan menulis seluruh subrutin dan mengujinya (dan memperbaikinya jika perlu) setelah saya pikir saya sudah selesai.
Di sisi lain, saya telah melihat sebagian besar pemula yang menjalankan & menguji kode mereka setelah setiap baris yang mereka masukkan dalam editor dan berpikir bahwa para penipu bisa menjadi pengganti untuk kehati-hatian dan kewarasan. Saya menganggap ini banyak gangguan setelah Anda mempelajari sintaks bahasa.
Menurut Anda apa keseimbangan yang tepat antara kedua pendekatan tersebut? Tentu saja yang pertama membutuhkan lebih banyak pengalaman, tetapi apakah itu memengaruhi produktivitas secara positif atau negatif? Apakah yang kedua membantu Anda menemukan kesalahan pada tingkat yang lebih baik?
sumber
#define h for(int c=y-3; y; c++/(randomTypeIDefinedEarlier)s*(float)4*(lol)sin((helloWorld)mysub(2,1,++a,*(r+z))); goto xkcd)
Dan itu hanya satu baris.Jawaban:
Ini BENAR-BENAR tergantung pada aspek proyek yang sedang Anda kerjakan.
Ketika saya melakukan sesuatu dengan OpenGL (yang bekerja seperti mesin negara), saya terus-menerus mengkompilasi dan menjalankan untuk memastikan bahwa saya tidak sengaja mengacaukan apa pun. Menyetel satu nilai tanpa mengingat untuk meresetnya di akhir suatu fungsi dapat dengan mudah membuat aplikasi hanya membuat layar hitam.
Untuk pengembangan "bawah kap" skala yang lebih besar, saya mencoba untuk mendapatkan sebanyak mungkin tes sebelumnya. Karena tes dapat dengan lebih mudah memberi tahu saya apa yang rusak, saya bisa pergi sebentar tanpa harus menunggu kompilasi yang biasanya panjang.
Untuk desain UX, saya menggunakan semacam perancang visual, yang selalu terlihat seperti itu akan berjalan (atau dekat dengan itu). Ini pada dasarnya selalu mengkompilasi kode desain.
sumber
Secara pribadi, saya harus bekerja dalam potongan-potongan kecil karena saya tidak cukup pintar untuk menjaga jam bernilai coding dalam cache L1 biologis saya. Karena kemampuan saya yang terbatas, saya menulis metode yang kecil dan kohesif dan mendesain objek agar koplingnya sangat longgar. Alat dan bahasa yang lebih kuat membuatnya lebih mudah untuk kode lebih lama tanpa membangun, tetapi masih ada batas bagi saya.
Preferensi saya adalah menulis sepotong kecil, memverifikasi bahwa itu berfungsi seperti yang saya harapkan. Kemudian, secara teori, saya bebas untuk melupakan detail potongan itu dan memperlakukannya sebagai kotak hitam sebanyak mungkin.
sumber
Saya suka menulis tes saya sebelum saya menulis kode implementasi saya. Saya suka ini karena tiga alasan:
sumber
Jam ke hari - itu pertanda jelas bahwa Anda kehilangan kemampuan untuk memecah kode menjadi potongan-potongan kecil yang dapat diverifikasi dan diuji sendiri. Anda pasti harus mengerjakannya.
Alih-alih menulis potongan kode yang lebih besar - dan karenanya rumit - yang membutuhkan jam untuk dianalisis di kepala Anda, Anda harus mencoba membuat blok bangunan yang lebih kecil, tidak terlalu besar. Ini disebut membangun abstraksi - dan itulah inti dari pemrograman yang baik, jelas bukan pertanda menjadi pemula.
Pemrograman yang baik seperti bermain Billard yang sangat baik - pemain yang bagus tidak memainkan pukulan keras. Sebaliknya, ia bermain dengan cara di mana setelah setiap pukulan bola berhenti di posisi di mana pukulan berikutnya mudah lagi. Dan seorang programmer tidak baik karena dia dapat menulis kode yang rumit - dia baik karena dia dapat menghindari penulisan kode yang rumit.
sumber
Saya mengkompilasi & menguji jika salah satu dari kondisi berikut dipenuhi:
sumber
Seberapa sering saya menjalankan dan menguji kode tergantung pada bahasa apa yang saya gunakan saat itu. Jika saya mengkode prosedur tersimpan, saya biasanya akan menunggu sampai semuanya ada di sana.
Di sisi lain, jika saya mengkode dalam Lisp, saya akan mencoba setiap fungsi setelah saya mengetiknya.
Jika saya mengkode di Haskell, saya biasanya akan melakukan kompilasi setelah setiap fungsi untuk menangkap kesalahan tipe apa pun, dan menjalankan kode setelah semuanya selesai.
sumber
Saya menulis kode yang cukup untuk mendapatkan tes hijau. Itu berarti saya menjalankan tes setiap beberapa menit. Itu gaya C ++ saya. Namun di Ruby saya menggunakan autotest, jadi setiap kali saya menekan save, saya mendapatkan umpan balik tes melalui popup yang bagus. Saya bahkan tidak berhenti menulis kode, itu hanya terjadi di latar belakang.
sumber
Tiga kali satu jam, apakah itu perlu atau tidak.
Kami melakukan pemrograman pengujian pertama dan hanya mengkomit kode kerja ke VCS. Smolderbot pergi dan memeriksa repo setiap 20 menit dan menjalankan test suite. Setiap kegagalan segera dikirim ke seluruh tim pemrograman untuk segera diperbaiki.
sumber
Bagi saya ini bukan tentang seberapa banyak saya menulis. Saya dapat menulis ribuan baris kode sederhana tanpa harus mengujinya. Tetapi ketika saya menulis kode yang lebih sulit saya cenderung menguji setiap fungsi secara individual setelah menulis satu set yang kohesif.
Namun kadang-kadang, melihat kode Anda berjalan adalah dorongan motivasi yang sangat besar, ketika Anda belum menjalankan apa-apa dalam beberapa saat, ada baiknya melihatnya berfungsi.
sumber
Bagi saya; -
Garis waktu pendek (tidak banyak waktu untuk berpikir) - menulis kode, kompilasi, tes. debug
Waktu yang cukup - selagi (selesai) {tulis kode kecil, kompilasi}, tes, debug
sumber
Saya menguji untuk setiap konsep pengkodean. Terkadang ini adalah fungsi atau kelas dan terkadang itu tidak lebih dari pernyataan if. Setelah konsep bekerja, lanjutkan ke yang berikutnya.
sumber
Saya mencoba dan menulis tes sebelum kode. Saya menjalankan tes saya setidaknya dua kali sebelum komit. Kemudian berjalan lagi dengan server Integrasi Berkelanjutan.
sumber