คุณจะบรรลุและรักษาโฟลว์ในขณะที่เขียนโปรแกรมคู่ได้อย่างไร?


17

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

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

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

คุณจะบรรลุและรักษาโฟลว์ในขณะที่เขียนโปรแกรมคู่ได้อย่างไร?


4
ฉันไม่เห็นด้วยที่คู่อื่นสามารถแทรกแซงได้ตลอดเวลา
JeffO

3
ทางเลือกในการไหลคือการระบุและรักษาตำแหน่งที่Ballmer ยอด การดำเนินการนี้อาจใช้เวลาในการทดลองเวลาและสก็อตที่ดี
เรือ Hovercraft ที่เต็มไปด้วยปลาไหล

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

คำตอบ:


15

แก้ไข:ข้อจำกัดความรับผิดชอบ - นี่คือวิธีที่ฉันกำหนด "โซน": A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

ฉันพยายามหลีกเลี่ยงสถานะนี้เนื่องจากในขณะที่ฉันอาจสร้างรหัสที่ถูกต้องในโซนฉันและนักพัฒนาอื่น ๆ จะมีเวลาทำความเข้าใจกับมันในภายหลัง หากต้องการกล่าวสั้น ๆ : รหัสการอ่านที่เขียนในโซนอาจต้องให้ผู้อ่านอยู่ในโซน ข้อ จำกัด นั่นคือปัญหาของฉัน

มีบทที่น่ารักเกี่ยวกับThe Coder สะอาดที่ลุง Bob โน้มน้าวใจอธิบายว่าทำไม "การเข้าสู่โซน" เป็นความคิดที่ไม่ดี

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

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

ในทางกลับกัน ...หากคุณต้องการเวลาเพียงลำพังเพื่อมุ่งหน้าให้ตรง (เราทำบางครั้ง) เพียงแค่รับมัน รวบรวมความคิดของคุณ แก้ไขปัญหาในหัวของคุณก่อน

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


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

7
@HLGEM - ฉันไม่คิดว่าจะสามารถเข้าถึงสถานที่ทำงานได้เมื่อมีความจำเป็นมากเกินไปที่จะขอ
JeffO

2
@ HLGEM: แน่นอนว่ามืออาชีพน่าจะมีประสิทธิภาพโดยเฉลี่ยภายใต้สภาพการทำงานโดยเฉลี่ย แต่ในทางกลับกันมันจะเป็นไปในความสนใจของนายจ้างที่จะให้งานมืออาชีพเดียวกันในลักษณะที่เพ่งความสนใจไปมากเพราะสิ่งนี้สามารถเพิ่มประสิทธิภาพและคุณภาพได้อย่างมหาศาล
Giorgio

2
"สำหรับฉันแล้วดูเหมือนว่าผู้คนปฏิบัติต่อ" โซน "ราวกับว่ามันเป็นวิธีแก้ปัญหาอย่างรวดเร็วสำหรับการแก้ปัญหาได้ดีเหมือนหมวกคิด": ไม่ยิ่งไปกว่านั้นโซนคือสถานะของสมาธิที่คุณมีประสิทธิผลมากขึ้น เพราะคุณเพ่งความสนใจไปที่งานของคุณโดยไม่มีสิ่งรบกวน โซนไม่ได้ทำให้คุณยิ่งใหญ่มันทำให้คุณมีประสิทธิผลมากขึ้นเท่านั้น
Giorgio

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

5

การเขียนโปรแกรมคู่บางครั้งต้องแยกจากคู่ของคุณ

ตัวอย่าง

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


ทำไมการปรับใช้ไม่ควรทำในการเขียนโปรแกรมคู่?
ลองจับได้ในที่สุด

5

ฉันพบว่ามีปัญหาเล็กน้อยที่การเขียนโปรแกรมแบบคู่ทำงานได้ ตัวอย่างเช่นหากคุณกำลังทำงานกับผลิตภัณฑ์ข้ามแพลตฟอร์มและ Winders guy ได้ใช้คุณลักษณะที่ต้องใช้รหัสเฉพาะของระบบปฏิบัติการเขาสามารถช่วยคนที่แต่งตัวประหลาด Mac ใช้คุณลักษณะเดียวกันในรหัส Mac ในขณะที่คนที่แต่งตัวประหลาด Mac ไดรฟ์

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

ใช่มันช่วยลดความเป็นไปได้ที่น่ากลัวที่นักพัฒนาอาจหยุดพักแลกเปลี่ยนในระหว่างวันทำงาน

IMHO มันจะถูกกว่าสำหรับ บริษัท ที่ต้องการตำรวจ devs ของพวกเขาเพียงแค่จับคู่ dev ทุกตัวกับเจ้าหน้าที่รักษาความปลอดภัยส่วนตัวเพื่อยืนอยู่ข้างหลังผู้พัฒนาและตี dev ด้วย truncheon ถ้าเขาช้าลงหรือพยายามที่จะจุดสูงสุดที่ไม่จำเป็น หน้าเว็บ.


1
จุดของการเขียนโปรแกรมคู่ไม่ได้หยุดกันจากการหย่อน ที่จะไม่ได้มีประสิทธิภาพ จุดนี้มีการตรวจสอบโค้ดแบบเรียลไทม์
เลฟ

3
@Lev: การตรวจสอบรหัสก่อนที่จะส่งมอบมีประสิทธิภาพมากขึ้น: การตรวจสอบใช้เวลาสองสามนาทีถึงครึ่งชั่วโมงและแทนที่จะเป็นทั้งวันทำงาน
Giorgio

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

1
@Lev: "ถ้าคุณมีโปรแกรมคู่, คู่ของคุณจะสังเกตเห็นข้อผิดพลาดและบันทึกเวลาการดีบัก": ไม่มีการรับประกันว่าข้อผิดพลาดจะสังเกตเห็นได้ทั้งกับการเขียนโปรแกรมคู่หรือมีความคิดเห็นรหัส เช่นหลังจากหกชั่วโมงของการเขียนโปรแกรมคู่หนึ่งอาจเหนื่อยจนมองข้ามข้อบกพร่องได้ง่าย
Giorgio

เห็นได้ชัดว่าไม่มีการรับประกัน แต่มันสามารถช่วยได้
เลฟ

3

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

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


0

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

  • การออกแบบรหัส

  • การพิมพ์

  • เรียนรู้สิ่งใหม่เกี่ยวกับโดเมนและรหัส

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

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

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