Saya tidak punya banyak pengalaman dalam bekerja di industri perangkat lunak, otodidak dan pernah berpartisipasi dalam open source sebelum memutuskan untuk mengambil pekerjaan. Sekarang saya bekerja untuk uang, saya juga harus berurusan dengan beberapa hal yang tidak menyenangkan, yang tentu saja normal.
Baru-baru ini saya ditugaskan untuk menambahkan logging ke proyek SharePoint besar yang ditulis oleh beberapa programmer yang jelas sedang belajar kode pada pekerjaan. Setelah 2 tahun berkolaborasi, klien beralih ke perusahaan kami, tetapi kerusakan telah terjadi, dan sekarang entah bagaimana saya perlu mempertahankan kode ini.
Bukan berarti kode itu terlalu sulit dibaca. Terlepas dari masalah-setiap proyek memiliki satu kelas dengan beberapa metode copy-paste, if
sarang besar , Sistem Hungaria, koneksi yang tidak diinginkan - itu masih dapat dibaca.
Namun, saya mendapati diri saya benar-benar tidak produktif meskipun mengerjakan sesuatu yang sederhana seperti menambahkan logging. Pada dasarnya, saya hanya perlu melalui kode langkah demi langkah dan menambahkan beberapa panggilan jejak. Namun, kebodohan kode ini sangat menjengkelkan sehingga saya lelah dalam 10 menit setelah mulai . Pada awalnya, saya biasa menambahkan using
konstruk, mengurangi bersarang dengan membalikkan if
, mengubah nama variabel menjadi nama yang dapat dibaca — tetapi proyek ini besar, dan akhirnya saya menyerah. Saya tahu ini bukan tugas yang harus saya lakukan, tetapi setidaknya mengurangi kekacauan memberi saya semacam penghargaan psikologis sehingga saya bisa terus berjalan. Sekarang triknya berhenti bekerja, dan saya masih memiliki 60% dari pekerjaan saya untuk dilakukan.
Saya mulai mengalami sakit kepala setelah bekerja, dan saya tidak lagi merasakan kepuasan yang biasa saya dapatkan — yang biasanya memungkinkan saya membuat kode selama 10 jam berturut-turut dan masih terasa segar.
Ini bukan hanya kata-kata kasar, karena saya benar-benar memiliki pertanyaan aktual:
Apakah ada cara untuk tetap produktif dan tidak melawan kincir angin?
Apakah ada semacam trik psikologis untuk tetap fokus pada tugas, alih-alih berpikir "Seberapa bodoh itu ?" Setiap kali saya melihat trik pintar lain oleh programmer sebelumnya? Masalah dengan menambahkan logging adalah bahwa saya benar-benar harus memahami apa yang dilakukan kode, dan hal itu menyakiti otak saya dengan cara yang tidak menyenangkan.
obj
menakutkan karena pada dasarnya tidak dapat dibaca.Jawaban:
Maaf untuk memberitahu Anda, tetapi tidak semua pekerjaan penuh dengan sinar matahari dan glamor. Sebagian besar tugas pengembangan melibatkan pekerjaan membanting tulang seperti ini. Sedih, tapi benar.
Anda ditugasi dengan pekerjaan penting, meskipun membosankan sampai-sampai menonton cat kering. Ini penting karena dua alasan: 1. Ia menambahkan logging yang sangat dibutuhkan ke sistem besar sehingga ketika terjadi kesalahan Anda akan memiliki alat untuk membantu Anda menemukannya. dan 2. Ini membuat Anda terbiasa dengan basis kode sehingga jika dan ketika ada masalah Anda bisa melompat dan memperbaikinya.
Anda pada dasarnya membuat jaring pengaman Anda sendiri di sini. Glamour, tidak, tapi penting ya!
Jadi, itu dikatakan bagaimana Anda harus memotivasi diri sendiri? Ketika saya memiliki tugas yang mematikan pikiran di tempat kerja, saya menetapkan tujuan untuk diri saya sendiri. Selesai melakukan tugas x pada akhir minggu. Jika saya membuat tujuan saya, saya menghargai diri saya sendiri. Restoran baru yang ingin saya coba? Pergi Jumat malam jika saya selesai. Film baru saja keluar? Lihat di akhir pekan jika saya selesai.
Saya menemukan berbicara dengan penyelia saya dan membiarkan dia tahu di mana saya berada dan bagaimana saya maju membuat saya bertanggung jawab. Jika saya mengatakan kepada mereka bahwa saya akan selesai pada hari Jumat, saya merasa lebih cenderung untuk menyelesaikannya pada hari Jumat. Saya mengatakan kepada mereka bahwa saya akan menyelesaikannya.
Pertahankan keyakinan bahwa begitu Anda menyelesaikan tugas ini dan Anda telah melakukannya dengan baik, tepat waktu dan sesuai anggaran yang orang akan perhatikan dan ketika proyek baru yang menyolok itu datang, nama Anda mungkin hanya disarankan sebagai orang yang mendapatkannya. :)
sumber
I didn't finish my under-estimated task by Friday - so I need to stay at home and feel bad.
Simpan file cuplikan kode kandidat untuk dikirim ke thedailywtf.com. Bahkan jika Anda tidak benar-benar bermaksud untuk mengirimkannya, itu memberi Anda sisi positif untuk menemukan beberapa kode yang bahkan lebih buruk daripada rata-rata.
sumber
Saya berada dalam situasi yang sama, bertugas membersihkan tubuh besar kode yang ditulis dengan buruk, disalin dan ditempel secara masif.
Untuk mempertahankan motivasi dan kewarasan saya, saya menulis sebuah skrip yang berjudul
current_score
menghitung LOC dalam proyek (yang terus menurun, ketika saya menghilangkan duplikasi dan beralih ke algoritma yang lebih baik) dan membandingkannya dengan LOC ketika saya mulai. Setiap kali saya berkecil hati atau frustrasi dengan tumpukan kode yang saya hadapi, berlaricurrent_score
akan memberi saya perasaan kemajuan yang nyata dan akan mengingatkan saya pada seberapa banyak yang telah saya capai. Dan sangat menyenangkan melihat seberapa tinggi skor yang bisa saya dapatkan ketika menangani bagian kode yang sangat buruk.Saya akan mencari metrik serupa yang dapat Anda skrip dengan mudah untuk memberi Anda rasa kemajuan dan mengubahnya menjadi semacam permainan. Baris kode (jalankan
wc -l
), kompleksitas siklomatik (yang seharusnya turun saat Anda membersihkan "ifs" yang bersarang), baris kode yang telah Anda sentuh alih-alih oleh pendahulu Anda (saya pikir FishEye dapat memberi tahu Anda ini untuk $ 10), dll. Anda bahkan dapat menulis skrip Perl tanpa banyak kesulitan untuk menghitung jumlah blok kode yang belum memiliki pernyataan logging.sumber
Saya telah melihat buku ini direkomendasikan: Bekerja Efektif dengan Legacy Code , tetapi untungnya tidak perlu membacanya.
Seperti yang Anda lakukan, perbaiki apa yang perlu Anda lakukan sehingga Anda dapat memahami kode dan ingat bahwa Anda menghidupkan kembali suatu sistem, yang akan terbayar ketika Anda mempertahankannya.
Mudah-mudahan itu akan membuat langkah Anda dalam perjalanan pulang.
sumber
Cobalah untuk memecah proyek menjadi potongan-potongan. Setiap hari pelajari cara kerja bongkahan tertentu. Mencoba memahaminya sekaligus mungkin adalah hal yang membuat Anda stres.
Banggalah dalam membuat proyek lebih baik. Adakah coders lain yang bisa Anda ajak bicara? Membantu berdiri di sekitar pendingin air mendiskusikan / menertawakan logika terbaru yang Anda temukan. Saya mencoba melakukan ini untuk menjaga suasana riang di tempat kerja.
sumber
Buat catatan luas untuk mengatur pertanyaan, pemikiran, dan pemahaman sistem Anda. Ini telah bekerja dengan baik bagi saya ketika berhadapan dengan sistem warisan yang besar. Ini membantu mengkristalisasi pemahaman Anda, membantu memasukkan pertanyaan terbuka menjadi kata-kata, dan karena pikiran Anda sudah disatukan, membuatnya lebih mudah untuk berkomunikasi secara spontan dengan orang lain tentang masalah / pertanyaan / ide / dll.
Sebagai contoh, saat saya membaca sepotong kode, saya akan terus membuat catatan untuk diri saya sendiri. Ini adalah percakapan saya dengan diri saya sendiri. Tindakan menulis semata membantu lebih banyak pikiran keluar dan membantu saya memahami hal-hal dengan lebih baik. Setelah beberapa saat saya mungkin memiliki Eureka dan perlu menggambar diagram kecil dengan "gambar lebih besar" di atas kertas untuk menggambarkan apa yang baru saja saya pikirkan atau potongan apa yang baru saja saya kumpulkan. Saya selalu melakukan ini di atas kertas saja, menyingkirkan semua gangguan komputer. Ini membuat saya menjadi lebih metodis dan bijaksana tentang apa yang saya lakukan.
Ini pada dasarnya adalah cara yang nyaman untuk melakukan percakapan abadi dengan pakar domain :)
sumber
Saya tahu Anda mungkin merasa tidak produktif karena Anda melihatnya dari perspektif 'Saya hanya menambahkan logging' padahal sebenarnya, Anda menambahkan logging dan melakukan banyak refactoring. Atasan Anda mungkin mengetahui situasi kode. Semua orang mungkin tidak menghargainya sekarang, tetapi ketika Anda mendapat permintaan untuk menambahkan fitur yang benar-benar menarik dan menantang, Anda akan senang membersihkan kode.
sumber
Dalam Kasus ini saya cenderung menulis ulang bagian kode. Untuk membuat satu area kurang menyedot dan kemudian saya hanya menambahkan logging beberapa tempat lain Kemudian bersihkan beberapa kode lagi. Kode buruk hanya buruk jika Anda membiarkannya di sana.
sumber
Gamify pekerjaan Anda. Misalnya, beri diri Anda 5 poin setiap kali Anda mengajukan pertanyaan yang bagus tentang kode, dan 10 poin setiap kali Anda menjawabnya. Beri diri Anda lencana setiap kali Anda melakukan refactor suatu metode atau menambahkan fitur baru. Setelah Anda mendapatkan poin yang cukup, Anda mendapatkan hak istimewa seperti rehat kopi atau biskuit. Setelah Anda menyelesaikan seluruh proyek, Anda mendapat hak istimewa untuk memperlakukan diri sendiri untuk sesuatu yang benar-benar Anda inginkan.
sumber
Trik untuk tidak bosan atau marah sehingga Anda tetap produktif adalah menerima bahwa kode tersebut dirancang dengan buruk. Menerima posisi Anda karena harus memahami dan memperbarui kode akan memungkinkan Anda untuk tidak terus mengomentari "betapa bodohnya itu" dan sebaliknya dengan diam-diam menerimanya dan melanjutkan.
Trik lain adalah memiliki kehidupan rumah tangga yang baik untuk dinanti pada akhir hari. Pacar, teman, permainan apa pun akan berhasil, untuk memberi Anda tujuan untuk melewati hari dan membuat kode susah payah meskipun buruk semua bernilai sementara.
sumber
"Bekerja Efektif dengan Kode Warisan" oleh Michael Feathers dapat membantu.
Jika Anda khawatir akan merusak sesuatu saat Anda mengubahnya, tulis beberapa tes terlebih dahulu, pastikan semuanya lulus sebelum dan setelah Anda melakukan perubahan. Menulis tes akan membantu Anda merangkum dan memahami apa yang dilakukan oleh sepotong kode dan akan memungkinkan Anda untuk mengedit dengan percaya diri.
sumber