การแลกเปลี่ยนคู่: อะไรคือข้อดีและข้อเสีย?


15

แนวคิดทั่วไปที่นักทฤษฎีAgile / XPส่วนใหญ่ดูเหมือนจะเป็นคู่นั้นควรเปลี่ยนเป็นประจำ ตัวอย่างเช่นโปรแกรมเมอร์แต่ละคนควรสลับคู่วันละครั้ง ครึ่งคนเปลี่ยนไปในช่วงเริ่มต้นของวันครึ่งคนเปลี่ยนไปหลังอาหารกลางวันเนื่องจากปัจจัยภายนอกเช่นการประชุมวันหยุดและคนส่วนใหญ่มักจะพลิกเวลาสลับครั้งเดียวหรือสองครั้งต่อสัปดาห์เพื่อให้การกำหนดค่าคู่กระจาย ทั่วทั้งทีมอย่างเท่าเทียมกัน

เหตุผลหนึ่งที่อยู่เบื้องหลังการแลกเปลี่ยนบ่อยครั้งคือความรู้นั้นแพร่กระจายไปในหมู่ทีมอย่างรวดเร็วและสม่ำเสมอแทนที่จะมีทักษะเฉพาะและความรู้ที่เข้มข้นในแต่ละบุคคลโดยเฉพาะนั่นหมายความว่างานสามารถดำเนินต่อไปได้อย่างราบรื่นหากผู้คนไม่อยู่หรือออกจาก บริษัท เหตุผลอีกประการหนึ่งซึ่งเป็นข้อพิสูจน์ถึงความเชื่อของการเขียนโปรแกรมคู่โดยรอบคือทุกครั้งที่มีคนสลับสับเปลี่ยนกับคุณคุณจะได้รับการตรวจสอบโค้ดใหม่ด้วยสายตาสดใหม่ดังนั้นมันจึงสามารถปรับปรุงคุณภาพรหัสได้เท่านั้น

คำยืนยันทั้งสองฟังดูสมเหตุสมผล จากมุมมองของผู้บริหารดูเหมือนว่าคุณจะได้รับทั้งความมีเสถียรภาพและคุณภาพที่เพิ่มขึ้นและการแลกเปลี่ยนบ่อยครั้งนั้นเป็นทฤษฎีมาตรฐานที่ค่อนข้างดีในหนังสือAgile / XPส่วนใหญ่ที่ฉันเคยดู

ดังนั้นเมื่อนำมาใช้จริงคนจริงๆคิดอย่างไรเกี่ยวกับการแลกเปลี่ยนคู่จาก

  • มุมมองของโปรแกรมเมอร์?
  • มุมมองของผู้จัดการ?

และ

  • สิ่งที่ควรพิจารณาเมื่อมีคนแลกเปลี่ยน / เข้าสู่คู่?

นี่เป็นสิ่งเดียวกันกับ "การเขียนโปรแกรมจับคู่หรือไม่"
Robert Harvey

@ Robert Harvey - มันเป็นแง่มุมหนึ่งของการเขียนโปรแกรมคู่ เมื่อทีมตัดสินใจว่าพวกเขาจะเขียนโปรแกรมเป็นคู่ (สำหรับสัดส่วนของวันทำงาน) พวกเขาจำเป็นต้องตัดสินใจว่าจะจัดการโปรแกรมเมอร์ให้เป็นคู่อย่างไรเมื่อโปรแกรมเมอร์คนหนึ่งควรออกจากคู่ (อีกคนควรเข้าร่วมในเวลาเดียวกัน ) นั่นคือ "การแลกเปลี่ยนคู่"

+1 สำหรับคำถามที่ยอดเยี่ยม น่าเศร้าที่ฉันคิดว่ามันยากพอที่จะหาร้านค้าที่จับคู่เป็นประจำปล่อยให้อยู่คนเดียวพอที่จะมีข้อมูลเกี่ยวกับการแลกเปลี่ยนคู่ หวังว่าฉันผิดเกี่ยวกับเรื่องนี้และคุณได้รับคำตอบที่ดีฉันมีความสนใจในการได้ยินมาก
Jesse McCulloch

2
โดยส่วนตัวแล้วฉันจะพบว่าการแลกเปลี่ยนคู่เป็นการเบี่ยงเบนความสนใจอย่างมาก การพยายามรับมือกับบุคลิกและระดับทักษะที่แตกต่างกันจำนวนมากในช่วงเวลาใกล้ ๆ นี้จะทำให้เกิดความไม่ลงรอยกันทางปัญญามากเกินไป
Robert Harvey

@Jesse McCulloch - ฉันทำงานในสถานที่ที่มีเฉพาะโปรแกรมจับคู่และแลกเปลี่ยนค่อนข้างมากตามที่หนังสือบอกว่าทีมควรทำ ฉันยังทำงานในสภาพแวดล้อมเดี่ยวที่บริสุทธิ์และมีมุมมองที่ดีพอสมควรในทางตรงกันข้าม อย่างไรก็ตามฉันต้องการฟังความคิดเห็นของคนอื่นเพราะฉันต้องการดูว่าตรงกับตัวเองหรือไม่โดยไม่มีอิทธิพลต่อพวกเขามากเกินไป

คำตอบ:


4

การเขียนโปรแกรมคู่เป็นเรื่องยาก

มันยากเพราะมันทำงานได้ดีที่สุดเมื่อคน 2 คนที่เกี่ยวข้องอยู่ในระดับทักษะและอาจเป็นเรื่องยากในสภาพแวดล้อมการทำงานบางอย่าง มันอาจเป็นเรื่องยากมากขึ้นเมื่อคุณสลับออกเพราะคุณต้องการหาคนที่มีระดับทักษะที่เหมาะสมจากนั้นนำพวกเขาไปสู่ความเร็วในการแก้ไขปัญหาในปัจจุบัน ประโยชน์คือผู้คนจำนวนมากมีการสัมผัสกับส่วนใด ๆ ของรหัสที่ได้รับการจับคู่ สิ่งนี้จะนำไปสู่เวลาที่น้อยลงที่รหัสไม่สามารถแก้ไขได้เนื่องจากไม่มีใครรู้เรื่องนี้เพียงพอ นอกจากนี้ยังควรเผยแพร่ความเป็นเจ้าของกลุ่มและความสามารถสำหรับทุกคนในการรับงานใด ๆ

ฉันพบว่าแม้ในสภาพแวดล้อมที่การจับคู่เสร็จสิ้นการแลกเปลี่ยนคู่ไม่คุ้มค่ากับราคา อย่างไรก็ตามนี่อาจเป็นเพราะงานของเราไม่เคยใช้เวลามากกว่า 1.5 วัน เราพบว่ามีประโยชน์อย่างมากในการแบ่งงานออกเป็นงานที่มีมูลค่าไม่เกิน ~ 1.5 วัน การสลับคู่อาจทำให้เข้าใจได้ง่ายขึ้นในบริบทของการทำงานที่ยาวนานขึ้น


ส่วนตัวผมสนุกกับการจับคู่กับผู้คนในทุกระดับ บางครั้งฉันกำลังเรียนรู้บางครั้งฉันกำลังสอนและบางครั้งเราก็ทำเสร็จแล้ว แต่การเรียนรู้และการสอนสร้างความสามารถของทีมในระยะยาวซึ่งฉันคิดว่าสำคัญพอ ๆ กับการตรวจสอบคุณสมบัติ
William Pietri

คุณอาจจะคิดอย่างนั้น แต่ผู้จัดการโครงการที่เห็นกำหนดเวลาของเขาระเหยไปเนื่องจากความเชี่ยวชาญของคุณจะคุ้นเคยกับการฝึกอบรมผู้คนในเวลาของเขาแทนที่จะปั่นป่วนโค้ดให้เร็วที่สุดเท่าที่คุณจะไม่เห็นด้วย และนั่นคือวิธีที่โครงการส่วนใหญ่ดำเนินการไม่มีเวลาฝึกอบรมผู้คนให้มีทักษะที่จำเป็นในการทำงานดังนั้นเยาวชนรุ่นใหม่จึงต้องตกอยู่ในความสงบซึ่งเหมาะสำหรับการกล่าวโทษเรื่องงบประมาณที่มากเกินไป
jwenting

@William Pietri: จากประสบการณ์ของฉันการจับคู่ไม่ได้เป็นรูปแบบที่ดีสำหรับการสอน ฉันไม่มีปัญหาในการพาใครสักคนและพาพวกเขาผ่านโค้ดเพื่ออธิบายให้พวกเขารู้ว่าเกิดอะไรขึ้น อย่างไรก็ตามนั่นไม่ใช่การเขียนโปรแกรมคู่
dietbuddha

@ jwenting: ถ้าคุณบอกว่าการเขียนโปรแกรมแบบคู่ไม่ได้ผลดีในร้านค้าที่มุ่งเน้นไปที่กำหนดเวลาพล่ามมากกว่าคุณภาพและความยั่งยืนฉันจะไม่เถียง เคล็ดลับของฉัน: ทำงานที่ไหนสักแห่งที่ไม่ได้บ้า
William Pietri

@dietbuddha: เหมาะสำหรับฉัน! วิธีที่เร็วที่สุดสำหรับฉันในการเรียนรู้ภาษาใหม่กรอบหรือไลบรารีคือการจับคู่กับคนที่รู้ดี และฉันก็รู้ว่าจะไม่มีวิธีไหนที่ดีไปกว่าการเพิ่ม noob ให้เร็วกว่าการจับคู่ เช่นนี้ใช้กับประสบการณ์: slesinsky.org/brian/code/starting_xp.html
William Pietri

3

ฉันเป็นทั้งโปรแกรมเมอร์และผู้จัดการ นี่คือของฉัน:

การแลกเปลี่ยนปกติดีมาก ฉันชอบการแลกเปลี่ยน 2-4 ครั้งต่อวันซึ่งเร็วพอ ๆ กับที่ฉันคิดว่าคุณสามารถไปได้ สำหรับเรานั้นมาจากจุดแตกหักตามธรรมชาติ: โดยทั่วไปกลางวันและกลางบ่าย การเปลี่ยนแปลงทุกวันหรือสองวันอาจเป็นเรื่องปกติ แต่ฉันกังวลว่าจะต้องใช้เวลานานกว่านั้นอีกมาก (ฉันเคยได้ยินว่ามีสถานที่หนึ่งที่แลกเปลี่ยนได้น้อยมากเหมือนกับทุก ๆ หกสัปดาห์ซึ่งฉันคิดว่าไม่ดี; หลังจากนั้นคุณก็พร้อมที่จะแทงนักบุญ)

ในฐานะโปรแกรมเมอร์ฉันรักมันเพราะฉันได้มุมมองใหม่ ๆ ลองดูส่วนอื่น ๆ ของรหัสและสามารถติดหรือย้ายจากอะไรก็ได้ตามที่ฉันต้องการ ฉันเพิ่งจากการเข้ารหัสเดี่ยวกลับไปสู่การจับคู่และฉันตื่นเต้น: ฉันเรียนรู้เพิ่มเติมมีความสนุกสนานมากขึ้นและทำงานได้มากขึ้น

ในฐานะผู้จัดการฉันคิดว่ามันยอดเยี่ยมเพราะมันแก้ปัญหารถบรรทุกและปัญหาคอขวดมากมาย เช่นวันหยุดสุดสัปดาห์นี้ฉันใช้เวลาช่วงวันหยุดยาวในการจัดงานแต่งงานของเพื่อนและฉันก็ไม่กังวลเลย: ทุกสิ่งที่ฉันทำงานอยู่ก็ถูกคนอื่นทำเช่นกัน ฉันยังคิดว่ามันช่วยให้สมาชิกในทีมชื่นชมจุดแข็งและจุดอ่อนของกันและกันและกระตุ้นการเป็นเจ้าของรหัสโดยรวม

สำหรับคนที่อยู่กับงานปัจจุบันฉันรู้สึกว่ามันขึ้นอยู่กับคนที่เกี่ยวข้องเป็นหลัก บางครั้งคุณต้องการเห็นบางสิ่งผ่านและบางครั้งคุณก็พร้อมสำหรับการเปลี่ยนแปลง บางครั้งเราสลับเพื่อนำความเชี่ยวชาญมาใช้หรือเพื่อให้ใครบางคนสามารถเรียนรู้สิ่งที่พวกเขาสนใจเราพยายามทำให้หน่วยงานของเรามีขนาดเล็กมาก (0.5-2.0 คู่ต่อวัน) ดังนั้นจึงไม่ใช่เรื่องใหญ่ .


สำหรับฉันฉันต้องบอกว่าการปิดการแลกเปลี่ยนเป็นสิ่งที่ดีเมื่อก) ฉันไม่สนุกกับการเขียนโปรแกรมกับผู้ชายที่ฉันกำลังเขียนด้วยข) ฉันไม่ชอบเรื่องราวที่ฉันกำลังทำอยู่ (เช่นการซ่อม ropey ข้อผิดพลาดของหน่วยความจำเก่า) มิฉะนั้นฉันต้องการที่จะอยู่ตั้งแต่ต้นจนจบ โดยส่วนตัวแล้วฉันคิดว่าการสลับคู่จะลดคุณภาพของรหัสเพราะรหัสที่ดีควรมีวิสัยทัศน์ที่ชัดเจนเพียงครั้งเดียวยิ่งมีคนทำงานในส่วนเดียวมากเท่าไหร่ สำหรับการแบ่งปันความรู้ฉันจะบอกว่าคนส่วนใหญ่เข้าใจแนวคิดของสิ่งที่เกิดขึ้น แต่ไม่มีใครเข้าใจอะไรได้เลย

@B Tyler - ฉันคิดว่ารหัสฐานเป็นงานทางปัญญาร่วมกันดังนั้นคุณต้องมีวิสัยทัศน์ที่ชัดเจนและเป็นวิสัยทัศน์ทั่วไป นั่นเป็นส่วนหนึ่งของเหตุผลที่ฉันคิดว่ามันสำคัญที่จะต้องแลกเปลี่ยน: มันต้องอาศัยการโต้ตอบและการอภิปรายจำนวนมากเพื่อพัฒนาวิธีการแบ่งปันที่มั่นคง
William Pietri

1

โอเคต่อไปนี้เป็นคำตอบจากโปรแกรมเมอร์ที่เน้นการปฏิบัติในทางปฏิบัติ / xp ที่ประกาศตัวเอง ฉันได้รับการเขียนโปรแกรมคู่มานานกว่าสองปีแล้ว หากการเขียนโปรแกรมคู่ดีแลกเปลี่ยนคู่บ่อย ๆ (นึกคิดทุก ๆ สองชั่วโมงถ้าไม่ใช่ทุกครึ่งวัน) ในที่ตั้งสำนักงานของเราเราทำให้จุดเปลี่ยนคู่ทุกวัน (ปกติ) หรือทุก ๆ สองวัน (ในกรณีที่แย่กว่านั้น) การทำเช่นนี้ในตัวมันเองสามารถทำให้เรามีความมั่นใจในคุณภาพของรหัสที่เรามอบให้และเรียนรู้หรือเรียนรู้สิ่งที่เรามีกับการหมุนทุกคู่ (เรารู้ว่าการตรวจสอบโค้ดนั้นดีมากยิ่งดี นี่คือสิ่งที่"การเขียนโปรแกรมคู่รวมถึงการฝึกฝนการแลกเปลี่ยนคู่" ได้ )

ทำไมเราไม่เปลี่ยนคู่ทุกสอง / สี่ชั่วโมง ที่จริงฉันอยู่ในทีมที่ฝึกฝนสิ่งนี้เช่นกัน แน่นอนมันเป็นวิธีที่เย็นกว่าและมีประสิทธิผลมากขึ้น แต่นี่คือข้อตกลงช่วงเวลาของการแลกเปลี่ยนคู่ไม่ควรเป็นกฎมันควรเกิดขึ้นด้วยตัวเอง จากนั้นผู้จัดการหรือธุรกิจจะเห็นประโยชน์ของมัน

ฉันได้เห็นและพบสิ่งนี้ ตอนนี้ฉันเป็นผู้เผยแพร่ศาสนา ไม่มีทฤษฎี ค่อนข้างในทางปฏิบัติอย่างละเอียด :) มีความสุขจับคู่ปิงปองและแลกเปลี่ยนคู่


1
อนิจจาตอนนี้ฉันเปลี่ยนความคิดเห็นโดยสิ้นเชิงว่าการเขียนโปรแกรมคู่โดยทั่วไปเป็นความคิดที่ไม่ดี การสลับคู่บ่อย ๆ ในการเขียนโปรแกรมคู่ทำให้สิ่งต่าง ๆ แย่ลง ฉันเคยได้ยินทฤษฎีทั้งหมดและพยายามฝึกหัดอย่างมากและฉันแค่คิดว่ามันไม่มีประสิทธิภาพอย่างไม่น่าเชื่อน่าเบื่อและหงุดหงิดกว่าการเขียนโปรแกรมเดี่ยวและมีผลให้รหัสคุณภาพต่ำลง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.