Kapan pair programming bekerja? Kapan menghindarinya?

51

Daripada berpasangan secara kasar sepanjang waktu, kami menggunakan pemrograman berpasangan secara selektif di tim kami. Saya pikir ini bekerja paling baik dalam keadaan berikut:

  • Mengajak anggota tim baru dalam suatu proyek (alih-alih membiarkan mereka mengarungi dokumentasi atau kode sendiri).
  • Memiliki orang-orang junior dan senior bekerja bersama (membantu untuk menunjukkan beberapa keterampilan dan trik dari pengembang yang lebih berpengalaman, ditambah lagi memungkinkan anjing-anjing tua untuk belajar trik-trik baru kadang-kadang).
  • Ketika seseorang mencoba melacak cacat, sering membantu untuk memasangkan dengan sepasang mata yang baru.

Kapan harus menggunakan program pasangan dan mengapa?

Kapan harus menghindari pemrograman berpasangan? Mengapa?

Paddyslacker
sumber
11
Berusaha memahami nilai dan logika penutupan pertanyaan ini tiga tahun setelah itu jelas dijawab secara obyektif dengan referensi penelitian empiris. Dari semua praktik umum Agile, ini adalah salah satu yang paling banyak diteliti dan didokumentasikan. Apakah kata-kata dalam pertanyaan itu perlu diubah? Apakah harapan / standar berubah dalam tiga tahun sejak diterbitkan?
Michael

Jawaban:

44

Penelitian yang disusun oleh Laurie Williams menunjukkan bahwa pemrograman pasangan bekerja paling baik pada tim industri saat itu

  • Pasangan bekerja pada spesifikasi, desain, dan tugas pemrograman yang rumit - percobaan menunjukkan bahwa tidak ada peningkatan kualitas yang ditunjukkan saat mengerjakan tugas-tugas sederhana berpasangan tetapi mungkin ada peningkatan kecepatan. Perhatikan juga bahwa pasangan "pemrograman" sering kali menyertakan kegiatan selain menulis kode.
  • Setiap individu dalam suatu pasangan memiliki tingkat keahlian yang sama - sementara pemrograman pasangan sangat bagus untuk pelatihan, pasangan paling terlibat ketika mereka berada pada tingkat yang sama.
  • Peran berputar secara teratur - berputar secara teratur membantu menjaga kopilot saat ini tetap aktif karena individu cenderung berkontribusi paling besar ketika mereka mengemudi atau merasa mereka akan mengemudi.
  • Pasangan berputar secara teratur - tim telah menyatakan kenyamanan dalam mengetahui tentang berbagai bagian sistem yang sedang mereka bangun. Rotasi pasangan membantu dengan transfer pengetahuan yang mengurangi risiko tertentu dalam proyek. Dalam pengaturan akademik pasangan sering ditugaskan, namun industri mereka umumnya ditugaskan sendiri selama stand-up. Dalam kedua kasus, pasangan paling efektif ketika kedua individu adalah peserta yang bersedia yang melihat nilai dalam kegiatan pasangan.

Dalam pengalaman pribadi saya, saya telah menemukan bahwa rata-rata tim XP saya menghabiskan sekitar 60% dari pemrograman pasangan waktu pengembangan kami. Sisa waktu dihabiskan melakukan pengembangan individu. Tidak jarang berpasangan untuk membuat desain awal, bekerja sendiri pada desain selama beberapa jam, kemudian kembali bersama untuk menyelesaikan bagian kode yang sulit atau sulit.

Saya juga menemukan bahwa pemrograman pasangan paling efektif dalam sekitar 1,5 hingga 2,5 jam blok. Apa pun yang kurang cenderung membutuhkan terlalu banyak overhead untuk pengaturan sementara lebih banyak dan pasangan cenderung menjadi rewel dan lelah. Cranky dan lelah berarti Anda tidak berkomunikasi dengan baik dan mungkin membiarkan cacat masuk ke sistem.

Michael
sumber
Jawaban yang bagus Michael. Menerima ini dari banyak jawaban yang baik karena memiliki campuran yang tepat dari pengalaman pribadi dan hubungan yang bagus dengan penelitian.
Paddyslacker
Meskipun, ironisnya, ketika tautan tersebut berfungsi ketika Anda mempublikasikan jawaban Anda, sekarang jawabannya adalah 404, doh!
Paddyslacker
Saya memperbaiki tautan di jawaban Anda Michael, jadi semuanya baik-baik saja.
Paddyslacker
bagian "kompleks" sangat penting. Jika Anda melakukan pekerjaan mengetik sepele, pasangan Anda akan bosan dengan sangat cepat.
Dave O.
3
@DaveO .: Saya hanya bisa melakukan hal-hal sederhana menggunakan pair-programming. Untuk tugas-tugas kompleks saya perlu berpikir, dan pemrograman pasangan hanyalah sumber gangguan (lihat jawaban Will Sargent). Saya masih merasa sangat berguna untuk membahas masalah kompleks dengan rekan kerja, tetapi ini berbeda dengan menulis seluruh kode bersama-sama.
Giorgio
29

Pemrograman pasangan telah bekerja untuk saya dalam situasi yang sangat, sangat sedikit.

Di mana Pemrograman Pair Gagal untuk Saya

Ceritanya adalah pemrograman pasangan tidak bekerja untuk saya sebagai cara utama pengembangan perangkat lunak. Saya dapat memasangkan program selama sehari, atau mungkin seminggu, terutama jika kita fokus pada masalah tertentu. Tetapi setelah itu? Saya selesai. Roti panggang. Saya tidak ingin melihat siapa pun, berbicara dengan siapa pun, dan saya perlu setidaknya beberapa hari di gua sampai saya cocok untuk ditemani manusia lagi.

Ini adalah kisah yang menyedihkan, tetapi lucunya saya sekarang jauh lebih bahagia dengan bagaimana akhirnya. Saya dengan senang hati bekerja di sebuah kontrak tempat saya bekerja dari rumah atau dari sebuah kedai kopi, dan saya telah menjalin pertemanan baru dan menjelajahi lebih banyak tentang San Francisco daripada yang pernah saya bayangkan. Saya memiliki sepeda dan laptop, dan selama saya memenuhi tenggat waktu saya dan memeriksa kode secara teratur, waktu saya adalah waktu saya sendiri.

Saya akan membuat daftar masalah besar yang saya miliki dengan pemrograman pasangan di muka dan memberi Anda detail dan anekdot nanti.

  1. Pisahkan fokus.
  2. Tidak ada eksperimen.
  3. Tidak ada nada tinggi.
  4. Tidak ada kebanggaan dalam kepemilikan.
  5. Tidak ada jalan keluar...

... Saya bertanya kepada rekan kerja saya apakah mereka melihat apa yang saya lihat, jika saya kehilangan sesuatu, apa saja - saya tidak melihat bagaimana ini bisa bekerja, bagaimana orang bisa terus melakukan ini. Mereka mengatakan saya baik-baik saja, bahwa hanya butuh waktu untuk menetap dan menyesuaikan diri. Sulit bagi semua orang pada awalnya.

Akhirnya, saya mundur ke diri sendiri. Di antara sakit kepala yang menyilaukan, insomnia, dan hentakan, kebutuhan yang tidak terpenuhi untuk menulis kode, saya berhenti merespons masukan. Saya bisa menatap layar dan tidak melihat apa pun. Seseorang dapat berbicara dengan saya secara tak terduga dan saya tidak akan mendengarnya. Saya memenuhi persyaratan hafalan pekerjaan saya, tetapi saya tidak ada di sana. Saya telah menggunakan semua yang baru saja saya tunjukkan untuk hari itu. Saya mulai memeriksa iPhone ketika mitra saya yang lain mengetik.

Akhirnya - hanya tiga bulan kemudian, dan untuk pertama kalinya - saya dipecat karena tidak cocok dengan tim saat memasangkan pemrograman.

Tidak sendiri

Saya menulis ini bukan hanya untuk memahaminya, tetapi juga untuk dapat membicarakannya. Sudah ada anggapan bahwa pemrograman pasangan bekerja untuk kebanyakan orang dan jauh lebih mudah dan lebih cepat daripada pemrograman solo. Ini mungkin atau mungkin tidak demikian, tetapi sebagai praktik jangka panjang, pemrograman pasangan tidak bekerja untuk saya. Ada banyak orang lain yang membuat pemrograman berpasangan juga tidak berfungsi. Kami juga penting ...

Will Sargent
sumber
2
Saya juga. Cukup banyak hanya dalam pelacakan cacat dan bahkan kemudian itu lebih banyak brainstorming dan filsafat daripada pemrograman yang sebenarnya.
hplbsh
4
+1 Jawaban berwawasan. Tampaknya kadang-kadang pendukung Program Pairing melupakan kita penyendiri dan introvert. Dan kebetulan, banyak orang yang tertarik dalam pemrograman juga introvert ...
Andres F.
6
@AndresF .: Selain penyendiri dan introvert, ada juga orang yang mandiri dan hanya membutuhkan ruang mereka untuk mengatur pikiran mereka. Untuk menyebarkan pengetahuan di antara anggota tim, ulasan kode setidaknya sama efektifnya dengan pemrograman pasangan.
Giorgio
2
@Iorgio Setuju. Saya sebenarnya mendukung Pemrograman Pasangan parsial : mengatasi beberapa masalah sulit berpasangan. Tetapi beberapa advokat berpikir itu harus digunakan sebagian besar waktu untuk sebagian besar tugas pemrograman, yang saya tidak setuju.
Andres F.
4
@AndresF .: Saya setuju dengan Anda. "Pemrograman pasangan parsial" atau, menggunakan kata-kata yang kurang modis, "mendiskusikan beberapa masalah sulit bersama saat dibutuhkan" adalah pendekatan yang sangat masuk akal, digunakan tidak hanya untuk pemrograman, tetapi juga ketika belajar di sekolah, dll. Namun, saya tidak mempertimbangkan praktik ini peluru perak yang harus digunakan setiap saat.
Giorgio
10

Tim saya telah melakukan pemrograman berpasangan sejak awal, jauh sebelum saya bekerja di sana, sebagai bagian dari sebagian besar toko gaya "pemrograman ekstrim". Pemrograman pasangan adalah kondisi default ; orang hanya benar-benar pergi sendiri jika ada angka ganjil, atau kadang-kadang untuk investigasi, terutama yang akan melibatkan bermain-main dengan peralatan bermusuhan dan mencoba membuatnya bekerja.

"Junior / senior" bukan satu-satunya cara untuk pergi. "Menengah / junior" berguna; itu membantu pria tingkat menengah mensintesis pengetahuan yang diperolehnya dengan memaksanya untuk mengkomunikasikannya kepada orang lain. "Menengah / Menengah" menantang dua orang bekerja bersama untuk berbagi pengetahuan, berkomunikasi, dan bekerja sebagai bagian dari tim. Dan bahkan jika Anda memiliki dua orang yang benar-benar senior, kemungkinan mereka memiliki bidang keahlian yang berbeda dan dapat menghasilkan pendekatan yang berbeda. Aspek-aspek berbagi pengetahuan tidak berakhir begitu seseorang dengan samar "mempercepat" proyek. Sebaliknya, pemrograman pasangan adalah lambang organisasi pembelajaran . Teknik dan praktik terbaik baru menyebar dengan cepat.

Pemrograman pasangan juga membantu menjaga kualitas kode (lebih sedikit cacat) dan kewarasan kode (tidak hanya melakukan apa yang ingin, tetapi melakukan apa yang seharusnya ... idealnya tanpa turun kelinci multi-minggu - lubang melakukan hal yang salah, atau dua hal benar berbeda yang akan konflik dengan liar). Ini membantu para programmer mempertahankan fokus mereka: di sini di jantung Silicon Valley, rumah dari 80 jam kerja seminggu, kita dapat bekerja hanya selama 40 jam seminggu karena kita melakukan pengodean intensif selama delapan jam sehari, mengubah berbagai hal satu sama lain. (Juga, jika Anda pergi lebih lama melakukan pemrograman berpasangan, Anda mungkin akan mundur. Atau setidaknya terbakar.) Ini bagus untuk keseimbangan kerja / kehidupan, dan juga membantu organisasi Anda ketika penting untuk melakukan perputaran cepat (perputaran latensi rendah, khususnya).

Ini tidak semua, sepenuhnya, 100% buah persik dan krim; Saya menemukan bahwa pemrograman berpasangan kadang-kadang merupakan hambatan bagi aplikasi proses otak intuitif saya yang berguna pada masalah-masalah tertentu. Baru-baru ini, pada tugas kebocoran memori, saya menghabiskan beberapa waktu baik dengan dan tanpa pasangan; tanpa satu, saya merasa lebih bebas untuk main-main dan mencoba eksperimen tanpa benar-benar tahu persis bagaimana menjelaskan apa yang saya lakukan pada suatu saat. Ada juga beberapa keuntungan dalam bekerja secara tunggal, mampu melakukan tangen dan melakukan refactoring liar tertentu (dihargai dalam metodologi XP) dengan kemauan.

Tetapi semua mengatakan, manfaatnya jauh lebih besar daripada biaya, dan pemasangan pasangan telah berhasil dengan baik bagi kami: dari tahap awal hingga akuisisi oleh perusahaan yang lebih besar, dan integrasi kami selanjutnya. (Omong-omong, pemrograman pasangan telah membantu kami menjaga kesinambungan budaya melalui ekspansi dan meskipun ada sedikit pergantian).

(Kami mengembangkan alat perangkat lunak di Perl, ~ $ 4.000 - $ 40.000 daftar harga.)


sumber
4

Saya belum pernah bekerja dalam pengaturan "Pair Programming", namun saya dapat mengklaim telah menjadi bagian dari tiga keadaan yang Anda daftarkan. Skenario yang Anda sebutkan tampaknya lebih "pemrograman biasa" dengan fase membantu / pelatihan dilemparkan. Apakah kita tidak melakukan semua ini sebelum "pemrograman berpasangan" muncul? Pemrograman Berpasangan, saya anggap akan membutuhkan pendekatan yang lebih berkomitmen di mana proses berbagi dalam tim tidak berhenti begitu Anda menangani tugas atau masalah langsung yang dihadapi. Tapi kemudian inilah yang saya "pikirkan" bukan yang saya "tahu".

Secara Pribadi untuk Pemrograman Pasangan Saya ingin bekerja dalam sebuah tim di mana saya mendapat kesempatan untuk belajar dan berbagi pengetahuan saya. Tim yang tidak seimbang di mana semua orang yang bekerja bersama Anda berada beberapa mil di depan Anda, atau kemudian jauh di bawah par bisa menjadi sangat tidak menarik dengan cukup cepat. Juga, saya akan takut untuk bekerja dengan orang-orang yang memiliki keyakinan dan sulit diyakinkan.

Preet
sumber
Anda benar, kita bisa memecahkan keadaan yang saya sebutkan tanpa pemrograman pasangan, tetapi kami menggunakan teknik pemrograman pasangan dari satu orang yang menggerakkan orang lain mengamati dan mematikannya secara berkala. Ini sedikit lebih formal daripada sekadar membantu / melatih. Banyak toko XP melakukan pemrograman pasangan lebih dari ini - saya bertanya-tanya apa jumlah pasangan yang "tepat" bagi orang-orang.
Paddyslacker
Yup, saya juga ingin mendengar dari orang-orang yang telah bekerja dengan PP untuk waktu yang lama. Saya dapat memahami bagaimana konsultan yang bekerja dengan banyak perusahaan atau tim dapat memperoleh manfaat dari PP, tetapi penugasan ini biasanya berlangsung selama beberapa bulan. Akan menarik untuk mengetahui bagaimana PP bekerja di perusahaan perangkat lunak biasa di mana proyek-proyek umumnya bertahan lebih dari setahun.
Preet
2

Kami telah bereksperimen dengan pemrograman Pair di tim kami selama beberapa bulan terakhir. Saya merasa ini cukup berguna ketika Anda mengerjakan sesuatu yang baru (teknologi baru, fitur baru dll) karena Anda dapat dengan cepat memantulkan ide dengan orang lain dari tim dan membuatnya divalidasi / tidak valid. Juga, tinjauan sejawat berdampingan membantu mencegah bug keluar.

Rekan satu tim lain mencoba menggunakan pemrograman berpasangan dengan tes untuk melakukan ATDD dan mereka cukup senang dengan hasilnya (menurut perhitungannya peningkatan biaya dev 20% menyebabkan penurunan sekitar 50% dalam waktu pengujian)

Amit Wadhwa
sumber
1

Selamat malam

banyak kali kami berdebat tentang praktik Pemrograman Ekstrim dan pemrograman pasangan . Kembali ke masa lalu, kita dapat memahami bahwa pemrograman adalah kegiatan solo karena programmer membutuhkan konsentrasi dan isolasi. Pemrogram pada waktu itu berada di zona , keadaan mental di mana mereka dapat secara efisien fokus pada kode dan membuat keputusan yang bagus dan kreatif.

Pemrograman pasangan tampaknya juga berisiko jika Anda menganggap satu programmer saling mengganggu. Di sisi lain, lebih sulit untuk menyela dua programmer yang bekerja bersama. Pada pemrograman Solo misalnya, akan lebih mudah untuk terganggu, sehingga hampir tidak mungkin bagi programmer solo untuk tinggal di "zona".

Kualitas kode adalah hal lain ketika batas waktu hampir tiba. Orang-orang akan selalu tergesa-gesa, menjadi pasangan programmer atau programmer tunggal: mereka tidak akan menerapkan praktik terbaik tertentu dan hanya akan melupakan pengujian unit.

Saya akan tetap dengan pemrograman pasangan. Karena ketika itu beresiko, ketika satu programmer hilang, Anda akan selalu memiliki orang lain untuk mendokumentasikan proses dan mengajar semua orang bagaimana cara kerjanya.

Junior M
sumber
1

Mengerjakan sesuatu dari kompleksitas non-sepele cenderung menjadi kandidat yang baik untuk pemrograman pasangan sehingga banyak orang memahami kode daripada hanya satu pengembang yang mengetahui bagian dari basis kode. Kasus lain adalah ketika seseorang ingin mentransfer beberapa keterampilan. Sebuah contoh di sini mungkin memiliki seseorang yang benar-benar hebat dalam tes unit berpasangan dengan seseorang yang tidak begitu akrab dengan konsep dan dengan demikian membantu untuk mendapatkan kebiasaan awal pada sesuatu.

Adapun di mana untuk menghindari pemrograman pasangan, tugas-tugas pekerjaan kasar yang langsung di mana akan lebih baik untuk membagi pekerjaan menjadi dua kelompok dan biarkan masing-masing pengembang melakukan beberapa pekerjaan secara terpisah untuk menyelesaikan pekerjaan. Beberapa tugas hanya memerlukan sedikit pengetikan tetapi tidak terlalu besar sehingga layak untuk menghabiskan beberapa jam mencoba menemukan cara yang lebih baik untuk melakukannya seperti yang bisa dilakukan jika setiap pengembang mengambil pendekatan brute force untuk beberapa orang. jam.

JB King
sumber