เหตุผลในการเขียนโปรแกรมคู่


13

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

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

ในฐานะที่เป็นคนใกล้กับชั้นพัฒนาที่เห็นได้ชัดว่าไม่สามารถเข้าใจได้มากนักจากหนังสือที่โยนทางของฉันหรือหน้า wiki ในเรื่อง ... จากตำแหน่งการจัดการระดับสูงประโยชน์ของการเขียนโปรแกรมแบบคู่เมื่อจัดการกับ Scrum หรือ Agile คืออะไร สภาพแวดล้อม?


2
ฉันคิดว่ามันมีประโยชน์ในสถานการณ์ที่เฉพาะเจาะจงมาก แต่เป็นรูปแบบการพัฒนาทั่วไปมันไม่มีประโยชน์เลย
Ryan Kinal

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

@JimmyHoffa ดังนั้นกระบวนการคิดหลักคือถ้าเราพบข้อบกพร่องก่อนที่พวกเขาจะทำการทดสอบเพื่อยอมรับเราสามารถลดเวลาที่เสียไปอย่างมากในการรีวิวโค้ด / การทดสอบลงบรรทัด?
Jeff Langemeier

3
@JeffLangemeier จริงๆแล้วมันมากกว่านั้น หากคุณเห็นข้อบกพร่องในการออกแบบส่วน A1 ของระบบย่อย A ก่อนที่จะเขียน A1 แม้กระทั่งเนื่องจากวาทกรรมตามธรรมชาติที่เกิดขึ้นระหว่างนักพัฒนาสองคนท่ามกลางการใช้ระบบย่อย A คุณไม่เพียง แต่ประหยัดเวลาที่จะแก้ไขส่วน A1 และส่วน A5 และ A7 ซึ่งขึ้นอยู่กับ A1 (หรือการค้นหาข้อบกพร่องในส่วนที่ขึ้นอยู่กับเหล่านั้นเนื่องจากการเรียงซ้อนจากการแก้ไข A1) คุณกำลังประหยัดเวลาโดยไม่ต้องเขียนส่วนที่ไม่ดีทั้งหมด มันลดเวลาทดสอบใช่ แต่จะลดเวลาการพัฒนาในลักษณะนี้ต่อไป
Jimmy Hoffa

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

คำตอบ:


25

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

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

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

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

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


+1 สำหรับคำตอบที่ดี ฉันยังคงไม่ชอบความคิดอย่างมาก แต่คุณนำเสนอผลประโยชน์ได้ดี

ฉันชอบการตัด jib ของคุณคำอธิบายนี้ทำให้รู้สึกได้จริง
Jeff Langemeier

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

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

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

3
  1. ข้อผิดพลาดน้อยลงในรหัสสุดท้าย (ประสิทธิภาพ)
    ไม่ได้แทนที่การตรวจสอบโค้ดทั้งหมด แต่มีประสิทธิภาพสูงในการทำให้สิ่งต่าง ๆ ถูกต้องตั้งแต่ต้น มีการวิจัยออกมีที่ชี้ไปในทิศทางนั้น

  2. เสร็จเร็วขึ้น (ประสิทธิผล)
    มีงานวิจัยหลายชิ้นชี้ให้เห็น เมื่อพูดถึงฟีเจอร์ที่ซับซ้อน 2 หัวก็มีประสิทธิภาพมากกว่า ประสบการณ์ในการจับคู่เป็นสิ่งจำเป็นสำหรับเรื่องนี้

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

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

3

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

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

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

สรุป:

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

When two developers work together design pattern quality improves-> วลีนั้นไม่สมเหตุสมผลเลย ความรู้สึกอย่างน้อยไม่เกินหรือWhen two bakers work together wheat quality improves When two race drivers work together asphalt quality improves
phresnel

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

2

มีประโยชน์เล็กน้อยสำหรับการเขียนโปรแกรมคู่:

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

วิกิพีเดียยังมีบทสรุปที่ดีของต้นทุนและผลประโยชน์ในรายการวิกิพีเดีย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.