Saya menemukan diri saya di tempat yang sulit akhir-akhir ini. Sudah mengerjakan game dengan teman pemrograman selama hampir 8 bulan sekarang. Kami berdua mulai sebagai pendatang baru dalam pemrograman sekitar Agustus tahun lalu, ia adalah siswa CS tahun ke-2, saya seorang IT support technology by trade dan seorang programmer otodidak dengan banyak buku dan langganan online.
Masalah yang terus-menerus saya lihat adalah bahwa ketika kita menulis sejumlah kode, sering kali akan sedikit diretas bersama, mengalami banyak kegagalan, dan jika itu adalah konsep baru bagi salah satu dari kita, penuh dengan solusi naif. Ini baik-baik saja, kita sedang belajar, saya berharap kedua kode kita menjadi sedikit diretas bersama pada firs atau pass kedua. Masalahnya muncul dengan sendirinya ketika benar-benar memperbaiki dan refactoring perilaku yang diretas bersama.
Pasangan saya akan berpegang teguh pada perilakunya yang baru saja dirakit, dengan terang-terangan menolak untuk melihat kesalahan pada saat itu mulai bekerja. Mengakui kesempurnaan dari sepotong struktur yang bahkan tidak dapat saya coba gunakan meskipun memiliki komentar dan dengan tepat menyebut metode & bidang. Tidak peduli sekeras apa pun saya berusaha, saya tidak bisa membuatnya melihat kelemahan yang jelas yang akan mencegah setiap perubahan lebih lanjut atau perluasan perilaku tanpa sepenuhnya merusaknya dan segala sesuatu yang begitu erat dipasangkan dengan mereka mungkin berada di kelas yang sama. Solusi yang diretas terus-menerus diretas, desain yang dipikirkan dengan buruk akan tetap seperti saat pertama kali disusun dan diuji.
Saya menghabiskan banyak waktu menjaga kode baru seperti halnya saya menulis sendiri, saya bingung apa yang harus dilakukan. Rekan saya kehilangannya malam ini, dan memperjelas bahwa apa pun yang terjadi, apa pun patokannya, tidak peduli praktik umum, tidak peduli bukti yang tak terbantahkan, kode-kodenya akan tetap seperti yang pertama kali ia lakukan. Bahkan jika seluruh buku telah ditulis tentang mengapa Anda ingin menghindari melakukan sesuatu, ia akan menolak untuk mengakui validitasnya dengan mengklaim itu hanya pendapat seseorang.
Saya memiliki kepentingan dalam proyek kami, namun saya tidak yakin apakah saya dapat terus bekerja dengan mitra saya. Sepertinya saya punya tiga opsi terbuka untuk saya.
- Berhenti peduli tentang basis kode yang berfungsi melewati titik kompilasi, dan hanya berurusan dengan mencoba mempertahankan dan mengurai perilaku yang hampir tidak tertatih-tatih. Berharap bahwa sekali hal-hal mulai serius pecah dia akan melihat itu dan mencoba melakukan lebih dari sekedar meletakkan bandaid di atas desain cacat mendasar.
- Pertahankan argumen tak berujung tentang masalah yang telah ditemukan satu dekade yang lalu oleh individu yang jauh lebih mampu.
- Hentikan pemrograman pada proyek ini, tinggalkan hampir 10.000 baris kode saya dan banyak waktu yang harus saya habiskan untuk merancang dan coba dan temukan proyek baru sendiri.
Pendekatan apa yang bisa saya ambil untuk menentukan apakah layak melanjutkan proyek ini dengan orang ini? Atau faktor apa yang harus memengaruhi keputusan saya? Kami telah menulis banyak kode dan saya tidak ingin menyerah kecuali diperlukan.
sumber
Jawaban:
Dikirim, kode tidak sempurna lebih baik daripada kode sempurna di papan tulis yang tidak pernah dikirimkan.
Yang telah dibilang...
Saya akan mempertimbangkan yang berikut ini.
Pertimbangkan hal di atas, cobalah untuk memikirkan pekerjaan tambahan yang diperlukan.
Anda perlu mengetahui prioritas Anda dan menentukan apakah masalah yang berhubungan dengan bekerja dengan orang ini layak dilakukan. Kami tidak dapat menemukan ini untuk Anda.
Anda tahu Anda tidak ingin bekerja dengan orang seperti ini.
Anda sedang melakukan proyek seperti ini mungkin karena Anda ingin belajar pemrograman dan menemukan keanggunan dalam kerajinan itu sendiri.
sumber
Ini mungkin hal budaya. Dalam beberapa budaya, mengakui bahwa Anda melakukan kesalahan adalah hal yang tidak pernah terdengar, dan meminta seseorang untuk mengaku melakukan kesalahan adalah hal paling kasar yang dapat Anda lakukan. Jika itu situasinya, larilah.
Dalam pengalaman saya dengan orang-orang yang sangat pintar, jika Anda memberi tahu mereka bahwa sesuatu yang mereka lakukan kurang sempurna, mereka akan (1) memberi Anda alasan yang benar dan mudah dimengerti mengapa apa yang mereka lakukan sebenarnya benar, (2) memberi tahu Anda yang mereka tahu itu salah, tetapi mereka tidak punya waktu untuk memperbaikinya karena prioritas, atau (3) terima kasih telah menunjukkan dan memperbaikinya.
Menolak untuk belajar adalah tentang atribut terburuk yang bisa dimiliki oleh pengembang perangkat lunak. Biarkan dia melakukannya. Hidup ini terlalu singkat dan berharga untuk menghabiskan waktu Anda dengannya.
sumber
Mungkin cara termudah adalah membawa orang lain ke dalam proyek - entah Anda salah dan basis kode-nya terlalu pintar untuk Anda, atau Anda benar dan terlalu pintar untuk semua orang. Anda akan segera mengetahuinya, dan akan mendapatkan cadangan jika ternyata itu adalah kode tingkat junior-sampah, berbelit-belit.
Di sisi lain, produk yang bekerja bernilai beberapa tahun dengan kode yang disetel halus, elegan, dan jelas. Buat gim, kirimkan, berjalan pergi - tinggalkan dia untuk mempertahankannya dan jangan bekerja pada v2.
sumber
Berikut adalah beberapa ide walaupun beberapa dari mereka saling eksklusif.
Pisahkan tanggung jawab sumber. Jika Anda mengerjakan Modul A dan dia di Modul B Anda dapat bersaing dengan gaya Anda yang berbeda. Apakah dia sering merilis fitur yang berfungsi? Apakah dia mencapai titik di mana dia perlu menulis ulang kodenya dari awal? Perbaiki kode dari modul Anda dan jangan sentuh dia,
Biarkan dia melakukan pemeliharaan kode terburuknya. Jika dia berhasil, Anda telah menghindari tugas yang mengerikan. Jika dia tidak mampu, dia akan merasakan sakitnya.
Pertimbangkan dari sudut pandang pengguna atau bisnis. Dalam beberapa kasus, Anda hanya perlu produk yang dapat dibeli oleh google atau Microsoft. Di lain Anda meluncurkan produk ke pasar dan mendukung ribuan klien dengan kode kereta atau diretas akan menjadi neraka. Tidak sama jika kode Anda mengontrol drone dengan rudal nuklir atau membuat video yang menyenangkan untuk remaja.
Dia melakukan kelas, Anda melakukan tes. Kode refactoring dengan tes lebih mudah dan aman. Dengan cara ini Anda tidak perlu melihat ke dalam kode hanya di bar Junit. Ini mengasumsikan bahwa A) Anda memprogram tes, B) kode kolega Anda dapat diuji. Jika Anda merasa sulit untuk membangun tes selama fase pengkodean yang terakhir akan lebih buruk.
Pergi bersama ke pelatihan atau acara. Ketika Anda tidak tahu cara yang benar adalah wajar gunakan satu-satunya cara Anda tahu. Melihat kode orang lain mungkin tidak menyelesaikan semuanya tetapi tidak ada salahnya untuk mencoba.
Temukan kekuatan pelengkap Anda. Refactoring terkadang menyenangkan. Jika dia menulis hal-hal yang paling tidak berhasil, Anda bisa melakukan refactoring. Dia dapat melakukan paku untuk mengeksplorasi solusi yang tidak berakhir pada kode produksi.
Dia mungkin tidak ingin menulis ulang kode tetapi dia mungkin setuju untuk menulis kode baru dengan lebih baik. Saya mengerti bahwa menulis ulang itu sulit, membosankan dan dapat merusak banyak hal. Tumbuhkan beberapa pulau berkualitas. Dengan cara ini ia akan memiliki contoh yang baik tentang bagaimana melakukan sesuatu.
Gunakan aturan pramuka . Jangan biarkan barang-barang tersentuh kecuali Anda perlu mengusahakannya. Jika modul ditulis dengan buruk tetapi berfungsi dan tidak perlu diubah biarkan seperti itu. Jika Anda perlu memperbaiki bug atau menyelesaikan fitur, tingkatkan sedikit. Setelah beberapa waktu, 20% kelas yang Anda ubah 80% dari waktunya akan meningkat. Lebih banyak pulau berkualitas.
Kami tidak dapat menyarankan solusi apa yang terbaik tanpa mengetahui Anda berdua. Semoga berhasil.
sumber
Oke, ini jawaban yang mungkin tidak Anda sukai.
Inilah alasan saya. Anda mungkin mencoba menghasilkan uang. Untuk menghasilkan uang, Anda harus mengirimkan fitur yang sudah selesai dengan cepat. Tidak ada yang akan membayar Anda lebih banyak untuk game komputer yang 'dikodekan dengan baik'.
Sebagian besar perusahaan memiliki masalah yang sama. Refactor kode yang ada untuk membuatnya lebih baik, kadang-kadang bahkan secara objektif lebih baik dalam hal kecepatan atau keandalan ATAU menulis fitur baru.
99% dari waktu mereka memilih untuk menulis fitur baru karena hasil analisis manfaat biaya yang sederhana.
sumber
Saya suka semua jawaban sejauh ini. Mengambil salah satu poin dari jawaban enderland :
Saya ingin mengambil waktu ini untuk plug untuk pertukaran kode ulasan . Ini adalah tempat yang indah di mana Anda bisa mendapatkan kode Anda dikritik oleh para profesional. Dan jujur, banyak ulasan kode ada sangat membantu bagi mereka yang terlibat - para penanya, penjawab, dan mereka yang tersandung oleh dan membacanya. Anda jarang mendapatkan ulasan yang bermanfaat dalam pengaturan profesional (yang mungkin hanya terjadi di tempat saya bekerja karena alasan apa pun).
Saran saya adalah memposting beberapa kode Anda untuk ditinjau. Saya tidak akan menyarankan menggunakannya sebagai amunisi untuk membuktikan orang ini salah - saya ragu dia akan membawanya ke hati - tetapi Anda bisa mendapatkan informasi yang sangat berguna baik pada kode yang Anda tulis dan kode yang ditulisnya. Saya akan merekomendasikan mengirimkan potongan-potongan kode yang paling Anda pertengkarkan. Dalam semua kemungkinan, Anda berdua salah sampai taraf tertentu dan Anda dapat menggunakan ulasan ini sebagai cara untuk melibatkan pihak ketiga yang objektif. Ini akan mencapai beberapa hal:
Anda dapat memutuskan hubungan dari ketegangan emosional situasi.
Anda mendapatkan saran profesional waktu nyata. Sebuah dorongan besar untuk apa yang Anda pelajari.
Seseorang akan memberi tahu Anda bahwa Anda salah. Itu bagus, karena siapa pun yang melakukan pemrograman untuk waktu yang lama akan mendengar ini. Anda bisa menanganinya dengan buruk seperti orang yang bekerja sama dengan Anda, atau Anda bisa belajar menghadapinya.
Saya pikir jika Anda menggunakan ulasan kode dengan cara yang benar, Anda memiliki banyak keuntungan dengan berurusan dengan orang yang sangat frustasi ini. Dan itu jauh lebih interaktif daripada buku atau situs web yang mengatakan "lakukan ini, karena itu adalah cara yang benar sebagian besar waktu".
Demikian pula, ada pertukaran stack pengembang game . Bukan tempat untuk memposting kode untuk ditinjau, tetapi untuk bertanya tentang konsep / ide yang Anda perjuangkan. Sekali lagi, tempat itu sangat membantu semua yang terlibat.
Anda mungkin pernah melihat kedua situs ini sebelumnya; Saya hanya ingin memastikan mereka bagian dari perangkat Anda.
sumber
Kedengarannya tidak ada harapan. Saya mungkin akan menyerah dan terus maju jika saya merasakannya seperti Anda; pasti ada saatnya untuk pergi dan Anda mungkin ada di sana.
Jika Anda belum siap untuk pergi, Anda perlu menemukan cara untuk mencapai kesepakatan yang lebih baik tentang proses Anda. Sepertinya Anda memiliki standar pengkodean, tetapi tidak standar yang disepakati. Lain kali Anda datang ke persimpangan jalan, lain kali Anda ingin monyet dengan sedikit kode dan teman Anda ingin meninggalkannya sendirian, tembak untuk percakapan di sepanjang baris berikut:
douglas: Saya ingin mengubahnya karena X, yang ada di sini di pedoman kami.
sobat: Tidak masalah bagaimana itu.
douglas: Jadi maksudmu kita harus mengubah pedoman?
sobat: Tidak, saya pikir tidak apa-apa.
douglas: Jadi untuk apa pedomannya?
Sobat: Saya tidak tahu - Anda yang menulisnya.
douglas: Pedoman apa yang akan Anda tulis?
Sobat: Saya tidak akan menulis pedoman. Buang-buang waktu.
douglas: Jadi kita harus membuang pedoman dan menulis omong kosong apa pun yang kita pikirkan saat itu?
sobat: Ini bukan omong kosong.
Douglas: Apakah sempurna? Apakah ini ideal?
sobat: Ini menyelesaikan pekerjaan; mari beralih ke fitur selanjutnya.
douglas: Adakah yang bisa kita sepakati, bahwa X adalah kode yang baik dan Y adalah kode yang buruk?
teman: tinggalkan aku sendiri; Saya hanya ingin kode!
Ya, itu tidak berjalan dengan baik, bukan? Saya kira perasaan yang saya miliki adalah bahwa Anda dan Buddy menginginkan hal yang berbeda. Jika ada yang bisa Anda setujui, bagus; mulai dari sana dan bangunlah. Tetapi Anda tidak dapat membuatnya setuju untuk menginginkan apa yang Anda inginkan - lebih dari Anda dapat membuat diri Anda menginginkan apa yang tampaknya diinginkannya. Jika Anda dapat menemukan keinginan bersama itu, dan mencapai kesepakatan bersama dari sana, mungkin Anda dapat bekerja sama.
douglas: Apa yang kamu inginkan?
Sobat: Saya hanya ingin kode.
Douglas: Saya ingin kode juga, tapi saya ingin merasa bangga dengan kode saya.
sobat: Saya bangga dengan kode saya.
douglas: Inilah fungsi yang saya banggakan - apa pendapat Anda tentang itu?
sobat: Baiklah, tidak apa-apa, tetapi Anda tidak harus menghitung ulang X di dalam loop; itu tidak efisien.
douglas: Jadi, apakah Anda mengatakan kami harus selalu menghitung nilai konstan di luar loop?
teman: ya, duh!
douglas: Apakah menurut Anda itu ada dalam pedoman kami?
sobat: tentu saja.
douglas: Oke, saya akan menambahkannya ke pedoman kami, dan saya akan memperbarui kode saya ...
Douglas: Bagaimana sekarang?
sobat: Baik.
Sekarang Buddy berkontribusi pada pedoman (namun secara tidak langsung), dan dia punya sedikit rasa kepemilikan. Mungkin - mungkin saja - dia akan mulai menganggap mereka lebih serius. Saya pikir saya akan cenderung untuk menghapus batu tulis dan memulai kembali dengan pedoman, membiarkan sebagian besar atau semuanya berasal dari Buddy pada awalnya. Silakan tulis kode omong kosong sehingga dia merasa perlu menambahkan pedoman; biarkan mereka datang darinya. Mungkin kemudian dia akan mulai memahami alasan mereka.
Tetapi jika Anda lebih suka menyerah dan melanjutkan - itu mungkin bukan opsi yang buruk juga.
sumber
Dengan asumsi Anda memutuskan untuk meninggalkan proyek:
sumber
tl; dr Anda harus meninggalkan proyek ini.
Tanpa mengetahui lebih banyak tentang ini maka Anda sudah memberi tahu kami, saya berspekulasi bahwa gesekan yang Anda alami terkait dengan pengalaman.
Meskipun Anda bukan seorang programmer yang berprofesi sebagai seorang profesional TI, Anda mungkin telah belajar cara paling sulit untuk melakukan hal-hal dengan benar pertama kali, referensi Anda ke diri masa depan Anda menunjukkan Anda telah mengacaukannya di masa lalu dan belajar tidak untuk.
Siswa CS tahun ke-2 Anda, meskipun cukup berbakat, mungkin tidak memiliki perspektif untuk melakukan itu (jika Anda seperti saya, berulang kali :).
Dia tidak akan pernah benar - benar percaya pada nilai memperbaiki hal-hal saat Anda pergi sampai dia membakar bekas luka dari kegagalan untuk melakukannya atau dibimbing dalam budaya dengan disiplin teknik yang luar biasa, atau keduanya.
Orang ini mungkin rekan pemrograman Anda, tetapi bukan rekan proyek Anda, jadi melakukan permainan ini sebagai proyek rekan mungkin merupakan penyebab yang hilang. Kecuali Anda siap untuk hanya memakan biaya masa depan. Mungkin hubungan itu cukup berharga bagi Anda. Dalam hal ini berikan hem / tali yang cukup untuk menggantung dirinya sendiri dan masuk untuk membantu membersihkan kekacauan ketika orang itu dipaksa untuk mengakui masalahnya.
Kalau tidak menjamin dan melakukan proyek dengan rekan, atau melakukan proyek mentor / mentee di mana itu dinamika dari awal.
sumber
Untuk menambahkan poin tambahan ke semua jawaban hebat:
sumber
Anda harus terus melakukan kode Anda dengan cara yang Anda anggap benar, dengan komentar dan semacamnya dan membuat salinan kode versi Anda (jika dia mengubah kode Anda).
Jangan berkelahi, jangan marah, hanya tersenyum ketika Anda melihat keputusannya yang buruk.
Hanya mengeluh sebagai pengguna, jika berfungsi jangan mengeluh.
Jangan menyerah, penting untuk membiasakan diri dengan orang yang berbeda dari Anda, yang akan terjadi dalam pekerjaan nyata.
sumber