Praktik terbaik untuk bekerja dengan banyak programmer

9

Saya pikir sebagian besar programmer lebih suka bekerja solo pada proyek, meskipun itu tidak layak. Saya lebih suka bekerja sendiri, bahkan di luar proyek pemrograman. Ketika bekerja dengan pengembang lain, saya biasanya menemukannya

  • Saya tidak suka format atau konvensi mereka (seperti nama variabel atau metode)
  • Saya tidak memiliki pemahaman yang baik tentang bagaimana kode yang mereka tulis bekerja, yang akan saya miliki jika saya menulisnya sendiri
  • Saya pikir ada cara yang lebih baik atau lebih efisien untuk mengimplementasikan sesuatu yang mereka tulis

Apa cara terbaik untuk mengatasi masalah ini dan masalah tim serupa lainnya untuk proyek dengan 4-5 programmer?


sumber
Pertanyaan yang sangat bagus Saya telah memikirkan hal yang sama; terutama ketika Anda memiliki seseorang di atas Anda yang, karena kekurangan banyak istilah lain, tidak kompeten.
"lebih baik atau lebih efisien" - mungkin, tetapi mengapa Anda tidak mencari tahu sebelum mereka mulai melakukan implementasi yang lebih buruk, kurang efisien?
-1: Pertanyaan ini sangat luas.
Jim G.
Perhatikan juga, itu adalah tanggung jawab ANDA untuk melakukan upaya memahami kode orang lain.

Jawaban:

20

Hanya ada satu cara untuk mengatasi masalah itu. Itu adalah "Komunikasi". Masalah yang Anda jelaskan adalah karena Anda para programmer tidak berbicara satu sama lain. Jika Anda telah membahas apa yang akan menjadi cara terbaik atau paling efisien untuk menyelesaikan suatu tugas, itu akan dilaksanakan dengan cara yang Anda inginkan. Selanjutnya Anda bisa menyetujui pemformatan dan konvensi.

Untuk memahami bagian kode mereka, Anda perlu memiliki tinjauan kode mingguan di mana Anda mendiskusikan kode everyones. Kemudian Anda dapat mengajukan pertanyaan saat mereka mempresentasikan pekerjaan mereka dan ini sangat membantu dengan meningkatkan kualitas kode setiap orang juga.

mhenrixon
sumber
2
+1 untuk komunikasi. Begitu banyak pertanyaan di sini dapat dijawab dengan sederhana, "Bicaralah dengan mereka tentang hal itu"
Ian
menurut saya OP tidak hanya memiliki masalah komunikasi tetapi tampaknya tidak mampu menerima ada cara lain untuk melakukan hal-hal daripada yang dia sukai, dan menolak untuk bekerja pada sistem lain selain yang dia sukai.
jwenting
Pemrograman +1 (atau pekerjaan mental apa pun) adalah sekitar 5% produksi aktual, 35% pemecahan masalah logis dan 60% pemecahan masalah sosial.
JF Dion
9

Saya suka bekerja dengan tim. Kesulitannya adalah bahwa untuk bekerja secara efektif dengan tim, semua anggota tim harus benar-benar bekerja bersama, tidak hanya semua bekerja secara terpisah pada proyek yang sama.

Anda perlu mendiskusikan hal-hal seperti mengapa Anda lebih suka satu konvensi pengkodean daripada yang lain, dan kemudian semua setuju pada satu set konvensi, apakah itu favorit pribadi Anda atau tidak. Apa pun itu, Anda akan terbiasa dengannya, dan menghargai konsistensi.

Anda harus meninjau dan mengkritik kode masing-masing. Sebenarnya, Anda mungkin harus memprogram berpasangan sebagian besar waktu, tetapi saya ragu Anda akan mempercayai saya tentang hal itu, jadi tinjau saja kode masing-masing. Tidak boleh ada kode yang dianggap "selesai" sampai programmer lain meninjaunya dan memastikan bahwa hal itu dapat dimengerti oleh orang berikutnya yang perlu memeliharanya.

Cari alasan berbicara satu sama lain dan ajukan pertanyaan saat Anda mengkode. Jika Anda menemukan diri Anda mencoba untuk memilih antara 2 atau lebih cara untuk menyerang suatu masalah, bahkan jika Anda pikir Anda tahu kemungkinan jawaban terbaik, dapatkan cek kewarasan dari salah satu pengembang lain. Anda berdua akan belajar sesuatu dari percakapan, dan Anda akan mendapatkan lebih banyak konsep bersama tentang bagaimana kode disatukan.

Adakan pertemuan singkat setiap hari, sehingga semua orang dapat mengatakan apa yang telah mereka lakukan dan bagaimana hasilnya. Dengan begitu, semua orang akan memiliki perasaan yang lebih baik tentang status semua bagian pekerjaan yang sedang terjadi dan bagaimana hal itu sedang dilakukan.

Steve Jorgensen
sumber
7

Anda tidak memiliki kode - sebagai grup Anda dapat memilih konvensi pengkodean atau tidak. Anda tidak akan selalu mendapatkan apa yang Anda inginkan, hanya belajar untuk beradaptasi.

Anda tidak akan pernah merasa nyaman dengan kode orang lain. Di XP inilah alasan pemrograman pasangan push. Tetapi biasanya cara terbaik (seperti yang lainnya) adalah menggali dan mempelajarinya.

Jika Anda memiliki kode yang lebih efisien atau lebih baik (Readable is WAY lebih penting daripada efisien - lihat poin sebelumnya) maka Anda harus mendiskusikannya dengan mereka.

Ini adalah karir dan Anda tidak memiliki apa yang Anda lakukan. Anda harus bekerja dengan banyak orang, membiasakan diri atau menjadi begitu baik sehingga Anda dapat melakukan semuanya sendiri dan mendanai proyek Anda sendiri.

Ini adalah karir, bukan kesenangan - jika pekerjaan Anda memperbaiki atap di tengah musim panas dan mereka menyuruh Anda melakukannya dengan cara yang tidak Anda sukai karena lebih mudah melakukannya dengan cara seperti kru, Anda cukup melakukannya Itu. Titik.

Bill K.
sumber
Saya setuju dengan segala sesuatu kecuali "Dibaca adalah CARA yang lebih penting daripada efisien" ini TIDAK berlaku untuk basis data kode sql, efisien dalam suatu basis data sangat penting. Jika Anda terbiasa menulis kode efisien, itu menjadi lebih mudah dibaca dengan sangat cepat.
HLGEM
@HLGEM Kode DB yang tidak efisien mengerikan, tetapi apakah kode tersebut harus tidak dapat dibaca agar efisien, atau dapatkah Anda membuatnya mudah dibaca dan efisien? Saya tidak mengatakan mengabaikan efisiensi dalam semua kasus, dan saya juga tidak mengatakan menjadi programmer bodoh (Seperti menggunakan array untuk jenis penyisipan).
Bill K
Saya tidak akan mengatakan itu tidak dapat dibaca tetapi sebagian besar cara paling efisien untuk menulis kueri sering kali tampak lebih kompleks bagi orang yang bukan spesialis basis data, sehingga mereka cenderung menulis kode yang terlihat lebih "elegan" dan mendapat masalah dengan kinerja.
HLGEM
@HLGEM Saya tidak suka istilah "Elegan" karena umumnya berarti singkat yang sama sekali tidak terkait dengan dibaca. Saya kira itu yang terbaik untuk mengatakan itu akan menjadi "Solusi yang paling mudah dibaca yang sesuai dengan persyaratan masalah" di mana kinerja dapat dimasukkan dalam persyaratan. Maksud saya adalah bahwa jika kinerja tidak dalam persyaratan (jika memenuhi persyaratan) keterbacaan harus diutamakan daripada yang lain, tetapi harus, tentu saja, memenuhi persyaratan.
Bill K
Lucu saya tidak suka istilah elegan juga. Saya pikir kita terlalu sering mengorbankan efisiensi dan keefektifan pengguna untuk memuaskan visi seseorang tentang betapa cantiknya kode itu. Keanggunan tidak seharusnya menghasilkan efisiensi dan efektivitas. Dev melihat kode itu mungkin beberapa jam dalam setahun, pengguna menjalankan kode itu setiap hari beberapa kali sehari. Kita seharusnya tidak menulis hanya untuk nilai estetika pengembang. Saya suka definisi Anda jauh lebih baik. Dengan penjelasan Anda lebih lanjut, saya sepenuhnya setuju dengan Anda.
HLGEM
5

Tanyakan kepada mereka "mengapa" , tetapi dengan sopan. Programmer biasanya lebih dari senang untuk menguraikan alasan mereka, dan kecuali jawabannya adalah "Saya selalu melakukannya," Anda kemungkinan akan belajar sesuatu yang bermanfaat. Misalnya perbedaan antara notasi Hungaria "baik" dan "buruk", kebajikan dari konvensi penamaan yang berbeda, dan mengapa algoritme yang dipilih cukup baik untuk tugas yang dihadapi.

l0b0
sumber
3

Saya hanya punya beberapa pemikiran. Sebagian besar jawaban lain tampaknya telah mencakup aspek komunikasi dari masalah ini dengan cukup baik, tetapi saya ingin membahas setiap poin yang Anda buat dengan pemikiran saya sendiri:

Saya tidak suka format atau konvensi mereka (seperti nama variabel atau metode)

Ini adalah keangkuhan yang Anda tidak mampu lakukan. Mungkin ada 20 orang di luar sana yang tidak suka pemformatan atau konvensi Anda. Jika Anda bukan bagian dari proses dalam memutuskan hal-hal ini, maka Anda perlu mengatasinya dan belajar bagaimana beradaptasi. Jika Anda adalah bagian dari proses (atau bisa jadi di masa depan), maka bawa kekhawatiran Anda ke pengembang lain. Tapi jangan hanya mengeluh. Sudah ada solusi / alternatif yang sudah dipetakan dan siap berangkat.

Saya tidak memiliki pemahaman yang baik tentang bagaimana kode yang mereka tulis bekerja, yang akan saya miliki jika saya menulisnya sendiri

Tidak, kamu tidak akan. Jika Anda mengajukan klaim ini, maka Anda tidak terlalu banyak bekerja di lingkungan yang berubah dengan kecepatan tinggi. Saya mendapatkan kode yang saya tulis 6 bulan lalu yang tidak dapat saya pahami hanya dengan melihatnya sekilas. Kalau bukan karena fakta bahwa itu ditulis dengan beberapa kebiasaan pribadi saya, saya bahkan tidak akan tahu itu milik saya. Mungkin membutuhkan lebih banyak upaya untuk merekayasa ulang pekerjaan orang lain, tetapi jangan salah, Anda akan merancang ulang untuk memahaminya nanti pada siapa pun yang menulisnya.

Saya pikir ada cara yang lebih baik atau lebih efisien untuk mengimplementasikan sesuatu yang mereka tulis

Luar biasa. Setiap tim menyukai peningkatan dan efisiensi. Bawa ke sesama pengembang Anda. Jika ada pengembang atau arsitek senior yang ditunjuk di atas Anda, beri tahu dia. Bagikan ide Anda dengan tim secara terbuka dan bebas. Bersiaplah untuk menerima ide orang lain juga. Saya menemukan banyak orang mengatakan hal yang sama dengan yang Anda katakan di sini, tetapi makna sebenarnya adalah "Cara saya lebih baik dan Anda semua bisa menghisapnya. Lakukan dengan cara saya atau Anda semua adalah puding kepala." Jangan menjadi pria itu. Bersedialah untuk berubah seperti yang Anda harapkan dari orang lain.

Joel Etherton
sumber
1

Saya sudah memikirkan pertanyaan-pertanyaan ini untuk sementara waktu sekarang. Saya seorang pemimpin tim dan saya bekerja dengan 2 programmer lain. Salah satu programmer memiliki gaya yang sangat mirip dengan saya - tidak sama, tetapi cukup dekat. Saya tidak merasa itu menjamin perubahan apa pun di pihaknya. Apa gunanya memulai sesuatu demi konvensi tabing yang berbeda atau nama variabel.

Pengembang lainnya adalah ac programmer (kami adalah programmer vb.net yang mengerjakan proyek .net). Dia menulis kode vb seolah-olah itu adalah kode c (saya kira jika perannya terbalik, kita akan menulis kode c seolah-olah itu adalah vb). Saya punya beberapa masalah dengan ini. Tetapi setelah saya memikirkannya sebentar. Masalah yang saya miliki benar-benar hanya perasaan tidak nyaman yang diberikan kode aneh kepada saya. Benar-benar tidak ada yang salah dengan kodenya. Kodenya bersih dan berfungsi dengan baik. Selain itu, kode akan diabstraksi di belakang antarmuka kelas yang ia tampilkan ke seluruh program. Jadi pada akhirnya gaya pengkodean tidak terlalu penting bagi kami. Selama programnya benar dan komentarnya masuk akal. Kita semua cukup pintar (setidaknya saya harap), bahwa debugging seharusnya tidak sesulit itu.

Sekarang akan menjadi cerita yang berbeda jika dia mengkode dalam c # dan kami mengkode di vb.net. Kami masih bisa mengelola, tetapi itu akan lebih sulit.

Secara pribadi saya pikir jauh lebih penting bahwa anggota tim individu menggunakan konvensi pengkodean yang membuat mereka senang dan nyaman. Ini berarti bahwa mereka mengkode secara produktif alih-alih merujuk ke beberapa panduan gaya yang memberi tahu mereka berapa banyak tab yang mereka butuhkan untuk membuat indentasi suatu fungsi.

Itu tidak berarti bahwa mereka bebas untuk melakukan apa yang mereka inginkan dengan kasus penggunaan aplikasi atau persyaratan - mereka ditetapkan oleh pelanggan.

bluebill
sumber
1

Bisa aja! Standar pengkodean seperti argumen aborsi: setiap orang memiliki satu (kecuali saya, saya tidak memiliki pendapat nyata tentang aborsi selain jika Anda tidak menginginkannya, tidak memilikinya), semua orang mengira standar mereka adalah yang benar mutlak, dan semua orang berpikir bau semua orang.

Saya menggunakan metode yang berbeda karena saya menemukan mereka lebih mudah dibaca. Misalnya, blok uji dalam PHP yang akan saya tulis seperti ini:

if (kondisi) {
  pernyataan;
} [opsional lain atau lain jika]

Tetapi jika saya menulis blok di Pascal saya akan melakukan ini:

jika (kondisi)
  dimulai

  akhir;

Tergantung pada bahasanya, bagi saya lebih mudah membaca cara ini untuk keduanya. Tetapi jika seseorang ingin meletakkan {on the line setelah if dalam PHP saya tidak benar-benar memiliki masalah.

Paul Robinson
sumber
1
Anda ingin semua orang di tim Anda menggunakan standar yang sama untuk menghindari mencemari perbedaan kontrol versi dengan tanda kurung yang melompat di antara garis.
0

Meskipun saya dapat memahami frustrasi yang terkait dengan memiliki kode "asing", ada dua peluang bagi Anda untuk matang dengan "rintangan" ini.

  1. Setiap pengembang harus belajar untuk melalui "perang penjepit keriting", dan maksud saya menemukan cara untuk mendapatkan standar pengkodean umum. Belajar mengartikulasikan dengan jelas mengapa Anda lebih suka teknik tertentu, tetapi yang lebih penting belajar mendengarkan mengapa orang lain memiliki pandangan yang berbeda. Kemudian belajar meletakkan beberapa milikmu demi kebaikan tim / proyek.

  2. Namun apa yang akan jauh lebih bernilai bagi Anda dalam jangka panjang adalah belajar membaca kode orang lain. Untuk yang ini, Anda hanya perlu mendorong dan tidak menghindarinya. Anda bahkan mungkin menemukan bahwa Anda belajar banyak.

Stephen Bailey
sumber
0

Saya percaya bahwa semakin besar suatu tim, semakin penting unit testing menjadi.

  • Pastikan kode yang Anda tulis sendiri dicakup oleh unit test.
  • Cobalah meyakinkan anggota tim lainnya untuk menulis tes.

Hidup dengan kode (Anda sendiri dan orang lain) lebih mudah ketika Anda memiliki tes yang mencakup kode. Ini berlaku bahkan untuk kode yang tidak Anda sukai.

kode kode
sumber
0

The terbaik Jawabannya adalah untuk menemukan tim yang proses berpikir cocok Anda sendiri, sehingga Anda tidak perlu kompromi.

Sebuah realistis jawabannya adalah untuk menghadapinya sebaik mungkin. Jika itu hanya masalah gaya kode yang berbeda (misalnya kawat gigi baris yang sama vs baris berikutnya) itu bukan masalah besar, meskipun saya mengerti bagaimana itu membuat frustasi jika orang tidak mengikuti pedoman untuk bahasa yang mereka gunakan. Jika itu sesuatu seperti standar pengkodean yang benar-benar tidak masuk akal yang tidak masuk akal (mis. Notasi Hungaria di mana itu tidak diperlukan, SoMeWeIrDnAmInGsTyLe, semua variabel harus tidak lebih dari 8 karakter, dll.) Maka cobalah untuk mengubahnya, karena jelas bahwa orang yang menulis kode tidak memiliki petunjuk atau hanya pemujaan kargo dengan apa yang ada di sana daripada menjadi cukup cerdas untuk ingin memperbaikinya.

Wayne Molina
sumber
-1

Pertama, sesuaikan gaya pengkodean saya: ruang putih. Dahulu, beberapa badut menulis artikel lelucon tentang praktik terbaik yang memberikan contoh kode dengan sekitar 12 tab ruang putih di mana pun dia bisa; membuat kode mustahil dibaca tanpa layar selebar 12 kaki atau dalam ukuran font .0001. Banyak programmer menganggap itu kredibel dan mulai melakukannya - meskipun itu jelas bukan praktik yang baik. Itu membuatku gila. Ayolah, kataku, kamu lebih pintar dari itu. 50% atau lebih ruang kosong pada halaman 240 kolom tidak masuk akal. Letakkan kurung kurawal pertama pada baris yang sama dengan fungsi atau tanda tangan kelas (dengan satu atau dua spasi, bukan satu atau dua tab di antaranya). Gunakan 3 spasi untuk membuat indentasi tingkat kode (5 jika Anda memiliki anggota tim yang sebagian buta). Kemudian gunakan baris kosong di sana-sini dalam kode untuk meletakkan segala sesuatu di blok logis yang lebih kecil.

Berikut ini contoh lain dari sesuatu yang berkepala tebal. Pertama-tama saya akan memberi tahu Anda ini tidak datang dari setengah akal yang tidak berpengalaman. Ada dalam kode yang sangat bagus oleh seorang pria yang bisa mendapatkan teknik yang sangat canggih bekerja sementara sebagian besar dunia masih menggaruk-garuk kepala mereka tentang hal itu. Inilah yang membuat saya frustasi. Mengapa pemrogram yang baik sangat berpikir tentang pemformatan kode mereka?

    for (Iterator<Byte> iterator = collection.iterator(); iterator
            .hasNext();) {
        byteArray[i++] = iterator.next();
    }

Sekarang lihat saja format untuk kondisi. Jika Anda benar-benar memikirkannya, bukankah itu tempat yang sama sekali tidak masuk akal untuk memutuskan hubungan? Pertama, saya punya banyak ruang untuk melihat keseluruhan untuk ... {pada satu baris. (Untungnya, orang ini tidak menggunakan banyak tab untuk indentasi.) Tetapi jika dia benar-benar tidak bisa hidup tanpa memecahnya, mengapa ada di tengah spec fungsi? Ada pembatas yang sangat baik tepat sebelum itu - titik koma - yang akan lebih masuk akal sebagai titik istirahat. Pilihan saya adalah meletakkan seluruh kondisi dan pembukaan {(sesuai dengan untuk) pada baris yang sama. Dia juga berakhir dengan baik - mudah untuk mencocokkan penjepit penutup dengan "untuk" yang dibuka. (Beberapa orang - dan alat (Apakah itu berlebihan?) - Ingin meletakkannya di tempat-tempat aneh juga.)

Kedua - catat fokus dari keahlian masing-masing programmer dan jika ada perbedaan yang signifikan, pastikan itu tercermin pada bagian kode mana setiap programmer bekerja. Seorang ahli dalam kontrol industri dalam robotika, seorang insinyur yang terutama bekerja pada bit matematika yang kompleks, dan pria dengan gelar CS yang membuat dirinya terkesan dengan konstruksi kode yang sama sekali tidak jelas (semakin kurang dimengerti, semakin canggih tampaknya, kan?) Semuanya akan menulis kode secara berbeda. Di mana ada perbedaan-perbedaan yang signifikan ini, pisahkan pekerjaan sehingga setiap kekuatan individu cocok dengan pekerjaan itu.

Ketika tidak ada perbedaan seperti itu, sepakati gaya pengkodean dan dalam hal apa pun - tinjauan kode, tinjauan kode, tinjauan kode. Sejujurnya, saya telah melalui banyak kode spaghetti ceroboh dalam hidup saya (12 kali di baris dalam debugging dan perubahan oleh kelompok pemeliharaan, atau hasil integrasi bermata ayam) dan sedang dalam perjalanan untuk menjadi seorang ahli kode setelah 2 menit berbicara dengan orang terakhir yang mengerjakannya. (Catatan: Sebenarnya, ada titik di mana lebih baik menulis ulang kode daripada terus beradaptasi.)

Secara pribadi, saya lebih suka bekerja di rumah sendiri juga. Saya belum pernah bertemu seorang programmer yang lebih suka atau bekerja lebih baik di sebuah kubus yang dikelilingi oleh banyak programmer, diskusi, dan interupsi. Tetapi Anda harus terbiasa bekerja dalam sebuah tim, dan itu berarti meluangkan waktu untuk berkumpul dan mendiskusikan (tidak melawan) apa yang Anda lakukan. Itu sebenarnya bagian dari pekerjaan - sebenarnya. Jauh lebih baik untuk menerimanya dan melakukannya secara sistematis, efisien, dan efektif. Dan sementara kita melakukannya - itu juga bagian dari pekerjaan untuk menghabiskan waktu mentransfer pengetahuan dan informasi kepada orang-orang yang menulis dokumentasi (beberapa di antaranya Anda mungkin perlu menulis sendiri). Dan ketika Anda cukup berpengalaman untuk meningkatkan tingkat tanggung jawab Anda, Anda bahkan mungkin lebih sering mengobrol dengan manajer dan orang-orang dalam pemasaran, dll.

Pengodean sendiri adalah hobi. Rekayasa perangkat lunak profesional adalah pekerjaan multi-faceted.

Roger F. Gay
sumber
Dan hal lainnya; ketika Anda hanya memiliki serangkaian kawat gigi penutup, tidak masuk akal untuk menempatkan garis kosong di antara mereka.
Roger F. Gay
1
"serangkaian kurung kurawal" -> kandidat untuk memfaktorkan metode bernama.
Mengapa? Sangat mudah untuk menghasilkan 3; seperti ketika bit terakhir dari sebuah metode adalah bersyarat dan kemudian tutup metode dan kelas Anda.
Roger F. Gay
@Roger, apakah Anda akan menyebutkan "tiga berturut-turut" satu seri?
Ya, dan sudah saya miliki.
Roger F. Gay