Tolong, tetap pada masalah teknis , menghindari masalah perilaku, budaya, karir atau politik.
Tolong, tetap pada masalah teknis , menghindari masalah perilaku, budaya, karir atau politik.
Jawaban:
Bug ada dalam kode Anda , bukan kompiler atau pustaka runtime.
Jika Anda melihat bug yang tidak mungkin terjadi, periksa apakah Anda telah membangun dan menyebarkan program Anda dengan benar. (Terutama jika Anda menggunakan IDE rumit atau kerangka kerja yang mencoba menyembunyikan detail berantakan dari Anda ... atau jika build Anda melibatkan banyak langkah manual.)
Program bersamaan / multi-utas sulit untuk ditulis dan sulit untuk diuji dengan benar. Cara terbaik adalah mendelegasikan sebanyak yang Anda bisa ke perpustakaan dan kerangka kerja konkurensi.
Menulis dokumentasi adalah bagian dari pekerjaan Anda sebagai programmer. Jangan biarkan "orang lain" melakukannya.
SUNTING
Ya, poin saya # 1 dilebih-lebihkan. Bahkan platform aplikasi terbaik yang direkayasa memiliki bagian bug, dan beberapa yang kurang direkayasa penuh dengan hal itu. Namun demikian, Anda harus selalu mencurigai kode Anda terlebih dahulu , dan mulai menyalahkan bug kompiler / pustaka saat Anda memiliki bukti jelas bahwa kode Anda tidak bersalah.
Kembali pada hari-hari ketika saya melakukan pengembangan C / C ++, saya ingat kasus di mana seharusnya "bug" optimizer ternyata menjadi karena saya / beberapa programmer lain telah melakukan hal-hal yang menurut spesifikasi bahasa memiliki hasil yang tidak ditentukan. Ini berlaku bahkan untuk bahasa yang dianggap aman seperti Jawa; mis. perhatikan model memori Java (JLS bab 17).
Perhitungan titik apung tidak tepat.
Jangan berhenti belajar.
Hal # 1 yang dapat Anda lakukan untuk meningkatkan kualitas dan pemeliharaan kode Anda adalah MENGURANGI DUPLIKASI.
Keterampilan Pemecahan Masalah dan Debugging
Mereka hampir tidak menghabiskan waktu pada topik ini di salah satu program pemrograman yang saya ambil, dan dalam pengalaman saya itu adalah salah satu penentu terbesar seberapa produktif seorang programmer. Suka atau tidak, Anda menghabiskan lebih banyak waktu dalam fase pemeliharaan aplikasi Anda daripada fase pengembangan baru.
Saya telah bekerja dengan soooooo banyak programmer yang melakukan debug dengan mengubah hal-hal secara acak tanpa strategi untuk menemukan masalah apa pun. Saya sudah melakukan percakapan ini puluhan kali.
Pemrogram Lainnya: Saya pikir kita harus mencoba untuk melihat apakah itu memperbaikinya.
Saya: Oke, anggap itu memang memperbaikinya. Apa artinya itu memberi tahu Anda di mana sumber masalahnya?
Programmer Lainnya: Saya tidak tahu, tetapi kita harus mencoba sesuatu .
Dasar. Saat ini programmer mempelajari teknologi bukan konsep. Itu salah.
Its wrong
seharusnya it's wrong
, misalnya.
Setiap programmer harus tahu bahwa dia selalu memasukkan asumsi dalam kode, misalnya "angka ini akan positif dan terbatas", "kode ini akan dapat terhubung ke server setiap saat dalam sekejap mata".
Dan dia harus tahu bahwa dia harus bersiap ketika asumsi itu hancur.
assert()
- di mana-mana. assert()
akan membantu Anda mendokumentasikan asumsi Anda dan menyelamatkan Anda ketika Anda salah.
Setiap programmer harus tahu tentang pengujian.
Pelajari konsep . Anda dapat Google sintaksisnya.
Berpikir kritis dan logis. Anda tidak dapat melakukan sesuatu yang baik tanpanya.
Itu lebih sulit daripada yang Anda pikirkan.
Meskipun mudah (ish) untuk menyatukan sesuatu yang berfungsi saat digunakan secara normal, mengatasi input yang salah, semua casing tepi dan sudut, kemungkinan mode kegagalan, dll. Memakan waktu dan mungkin akan menjadi bagian tersulit dari pekerjaan.
Maka Anda harus membuat aplikasi terlihat bagus juga.
Pengetahuan domain. Spesifikasi tidak pernah 100%; mengetahui domain sebenarnya yang Anda kembangkan akan SELALU meningkatkan kualitas produk.
Notasi O besar dan implikasinya.
Beberapa referensi bermanfaat
Pointer, tentu saja. :)
Kode Lengkap 2 - penutup ke penutup
Data lebih penting daripada kode.
Jika data Anda cerdas, kodenya bisa bodoh.
Kode bodoh mudah dimengerti. Begitu juga data cerdas.
Hampir setiap kesedihan algoritmik yang pernah saya alami disebabkan oleh data yang berada di tempat yang salah atau disalahgunakan arti sebenarnya. Jika data Anda memiliki makna, masukkan makna itu ke dalam sistem tipe .
Memecah dan menaklukkan. Ini biasanya cara terbaik untuk menyelesaikan semua jenis masalah praktis mulai dari penjadwalan hingga debugging.
Keahlian sejati tercermin dalam kemampuan mengeksekusi desain sederhana dengan baik, bukan pada kemampuan membuat desain yang rumit bekerja sama sekali.
Keterampilan ini berasal dari penguasaan yang lebih besar dari fundamental, bukan dalam penguasaan yang misterius. Seorang programmer berkaliber tinggi tidak ditentukan oleh kemampuan mereka untuk mengkodekan apa yang orang lain tidak bisa (menggunakan fungsi tingkat yang lebih tinggi, pemrograman fungsional lanjutan, apa-apa-Anda) tetapi lebih pada kemampuan mereka untuk memperbaiki pengkodean biasa yang sempurna. Memilih dekomposisi fungsionalitas yang sesuai antar kelas; membangun ketahanan; menggunakan teknik pemrograman defensif; dan menggunakan pola dan nama yang mengarah ke dokumentasi diri yang lebih besar, ini adalah roti dan mentega dari pemrograman kaliber tinggi.
Menulis kode yang baik yang Anda, atau orang lain, dapat kembali dalam seminggu sebulan atau setahun dan memahami cara menggunakan, memodifikasi, meningkatkan, atau memperluas kode itu sangat penting. Ini menghemat waktu dan tenaga Anda. Ini melumasi roda-roda produktivitas dengan menghilangkan penghalang jalan yang akan Anda temukan sebelumnya (mungkin mengganggu jalan pikiran Anda, atau mungkin mengambil berjam-jam atau berhari-hari usaha dari pekerjaan lain, dll.) Membuatnya lebih mudah untuk berkonsentrasi pada masalah-masalah sulit , dan terkadang itu membuat masalah sulit hilang.
Dalam satu kata: keanggunan. Setiap kelas, setiap metode, setiap kondisi, setiap blok, setiap nama variabel: berjuang untuk keanggunan.
Jangan pernah menyalahkan pengguna apa yang bisa diperbaiki dengan pengalaman pengguna yang lebih bersih atau dokumentasi yang lebih baik. Seringkali, programmer secara otomatis menganggap pengguna adalah idiot yang tidak dapat melakukan sesuatu dengan benar, ketika masalahnya adalah pengalaman keseluruhan yang buruk atau kurangnya komunikasi. Program yang dimaksudkan untuk digunakan, dan memperlakukan pengguna dengan jijik berarti melewatkan titik pemrograman sejak awal.
Setiap programmer harus tahu cara menggunakan debugger, dan tahu cara menggunakannya dengan baik .
Evaluasi hubungan pendek, meskipun itu adalah salah satu hal pertama yang mereka ajarkan tentang operator boolean.
Cara memperkirakan secara akurat berapa banyak waktu yang dibutuhkan fitur untuk mengimplementasikan. Lebih penting lagi, bagaimana cara menyampaikan bahwa Anda tidak membohongi diri sendiri saat mengirimkan perkiraan itu.
Masalah gaya pengkodean:
... dan masalah desain yang baik.
Idealnya, programmer mempelajari hal-hal ini sebelum (atau selama) ulasan kode pertamanya. Dalam kasus terburuk, programmer mempelajarinya ketika bos mengatakan kepadanya untuk membuat beberapa perubahan non-sepele untuk beberapa kode mengerikan terburu-buru.