วิธีการแปลงโปรแกรมเมอร์คัดลอก / วาง / สปาเก็ตตี้เพื่อดูแสง?


35

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

ดังนั้นสมมติว่าคุณมีใครบางคนในทีมของคุณ (หรืออาจเป็นคนส่วนใหญ่) ซึ่งเป็นขั้นตอนการปฏิบัติงานมาตรฐานคือการคัดลอก / วางและผู้ที่เชื่อว่าทุกอย่างสามารถแก้ไขได้ถ้าเพียงคุณเพิ่มการเรียกฟังก์ชันและตัวแปร บุคคลนี้ไม่เคยได้ยินเรื่อง TDD, DRY หรือ SOLID และนอกเวลาทำงาน 40 ชั่วโมงเมื่อพวกเขาไม่ว่างที่ทำงานพวกเขาไม่เคยอ่านวิธีการ / การปฏิบัติ / การออกแบบหนังสือเล่มเดียว

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

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

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

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

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


ประเทศนี้คืออะไร

3
@ ThorbjørnRavnAndersen - สหรัฐอเมริกา ตอนนี้คุณต้องเขียนคำตอบเพราะฉันอยากรู้ว่าข้อมูลชิ้นนั้นมีผลกระทบอย่างไร :) ฉันมักจะคิดว่าเราเป็นมนุษย์ทุกคนและเนื้อหาประเภทนี้เป็นสากล และไม่คำถามนี้ไม่มีอะไรเกี่ยวข้องกับการเอาท์ซอร์ส
DXM

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

คำตอบ:


18

คุณพบเหตุผล: "ฉันรู้ว่าพวกเขามีความสามารถในการเรียนรู้ดูเหมือนว่ามีแรงจูงใจทั่วไป"

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

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

อะไรที่พวกเราสามารถทำได้? ไม่มากเกินไป. ในทุกกรณีไม่ใช่สำหรับคุณ แต่สำหรับบุคลากรเพื่อเลือกผู้ที่มีแรงบันดาลใจอย่างแท้จริง¹ และยิงคนที่ไม่อยู่

คุณสามารถลองกระตุ้นเพื่อนร่วมงานด้วยตัวคุณเอง แต่มันก็ยากมาก หากคุณให้หนังสือพวกเขาอ่านพวกเขาจะคืนพวกเขาโดยไม่ได้เปิดในอีกสองสามสัปดาห์ต่อมา หากคุณให้คำแนะนำแก่พวกเขาพวกเขาจะไม่ฟังเพราะพวกเขาไม่สนใจ²

คุณสามารถ:

  • โน้มน้าวให้หัวหน้าของคุณกำหนดกฎเกณฑ์ที่เข้มงวดใน บริษัท ของคุณ: แนวทางสไตล์ฯลฯ สิ่งนี้จะไม่กระตุ้นให้คนเหล่านั้นทำงานได้ดีขึ้น แต่อย่างน้อยพวกเขาก็จะไม่สามารถส่งซอร์สโค้ดที่ไม่ตรงกับข้อกำหนดได้ .

  • การทำงานกับความต้องการโดยเฉพาะอย่างยิ่งความต้องการที่ไม่ใช่หน้าที่ มีข้อกำหนดอะไรบ้างที่บอกว่าโครงการเฉพาะต้องมีรหัส ILน้อยกว่า 5,000 บรรทัด (ไม่ฉันไม่ได้พูดถึงLOC ที่ไม่มีความหมาย ) ³ สิ่งที่เกี่ยวกับที่กำหนดเพื่อให้ได้ผลลัพธ์ที่เฉพาะเจาะจงที่ซับซ้อน cyclomaticหรือการมีเพศสัมพันธ์ชั้น ?

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

  • ใช้ [เพิ่มเติม] การเขียนโปรแกรมคู่ มันอาจช่วยปรับปรุงคุณภาพรหัสและจูงใจผู้ร่วมงานที่มีแรงจูงใจน้อยลง

  • ใช้ระบบการชดเชยที่คล้ายกับที่ใช้ใน Fog Creek


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

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

³สิ่งที่ฉันหมายถึงคือจำนวนบรรทัดของรหัส IL ที่คุณเห็นในCode Metrics ใน Visual Studioซึ่งเป็นเมทริกซึ่งหมายถึงอะไรบางอย่าง จริง LOC ไม่สำคัญและคุณไม่ต้องวัดนั้น มันเป็นหนึ่งในการวัดที่โง่ที่สุดที่เคยมีมา การบังคับใช้โค้ด IL line หมายความว่านักพัฒนาจะถูกบังคับให้ต้องรีโคเตอร์โค้ดจริง ๆ และไม่ใช่แค่การยุบโค้ดสิบบรรทัดในบรรทัดที่อ่านไม่ได้เพียงบรรทัดเดียว


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

5
@maple_shaft ถูกต้อง: บางคนทำงาน 70 ชั่วโมงต่อสัปดาห์และผลิตสปาเก็ตตี้ในปริมาณที่แย่ที่สุดโดยไม่มีการทดสอบใด ๆ (พวกเขาไม่มีเวลาสำหรับเรื่องไร้สาระ!) ในขณะที่มีความกระตือรือร้นและพัฒนาทักษะอย่างต่อเนื่อง แต่กลับบ้านหลังจาก 40 ชั่วโมงเพราะพวกเขารู้ว่าพวกเขาไม่สามารถผลิตได้นานกว่านั้น อย่าผสมสองอย่างเข้าด้วยกัน!
nikie

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

6
การทำงานจนถึง 2:00 น. เพื่อทำงานในโครงการเป็นวิธีที่มีประสิทธิภาพมากในการฆ่าความรักสำหรับโครงการดังกล่าวโดยเฉพาะอย่างยิ่งสำหรับผู้ที่มีภาระผูกพันในครอบครัว

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

12

"ฉันเขียนโค้ดเสร็จแล้วเพียงแค่ต้องการปรับโครงสร้างและแบ่งออกเป็นหลายคลาสเพื่อให้ DXM มีความสุข"

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

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

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

คุณสนับสนุนการปฏิบัติที่ดีที่สุดและมาตรฐานโดยชี้ไปที่ทีมว่าพวกเขาได้ปรับปรุงกระบวนการพัฒนาซอฟต์แวร์หรือคุณภาพของซอฟต์แวร์อย่างไร

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

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

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


1
+1 เพื่อเน้นไปที่การ
เพ่ง

5

คำถามที่ดี! ฉันคิดว่าคำตอบนั้นขึ้นอยู่กับสาเหตุที่ผู้คนไม่ต้องการพัฒนาทักษะของพวกเขา คำตอบที่เป็นไปได้คือ:

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

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


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

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

3

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

แค่นั้นแหละ! นี่เป็นคำถามที่แท้จริง

เพื่อให้ backgound เราก็ไม่มีเวลาฝึกซ้อมอย่างเป็นทางการ - แต่บางครั้งถ้าฉันทำ - มันยังไม่เห็นแสงฉันยังเป็นส่วนหนึ่งของ บริษัท ที่การฝึกอบรมอย่างเป็นทางการกลายเป็นกระบวนการด้วยตัวเอง แต่และ ฉันมักจะเป็นพยานว่าพวกเขาแทบจะไม่สอนวิธีคิด

ดังนั้นคำถามที่ฉันโพสต์ถึงพวกเขาไม่ใช่วิธีสอนพวกเขา - แต่จะทำให้พวกเขาเรียนรู้ได้อย่างไร? ความแตกต่างนั้นบอบบาง แต่มันคือสิ่งที่จะทำให้เกิดความแตกต่าง

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

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

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

นี้อาจจะหัวรุนแรงบิตนี้อาจจะเสียทรัพยากร และฉันแน่ใจว่ามีคนอื่นอีกหลายคนที่จะให้คำแนะนำแก่ฉันที่จะไม่ทำเช่นนี้ แต่สิ่งนี้ได้ผลสำหรับฉัน!

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

PS: เพียงบังเอิญฉันโพสต์คำตอบที่นี่https://softwareengineering.stackexchange.com/questions/127021/how-do-you-train-freshers/127034-และฉันได้รับการทุบตีทั้งหมด; คนส่วนใหญ่เชื่อว่าธุรกิจไม่สามารถเสียทรัพยากรได้! ฉันแน่ใจว่าคำตอบนี้อาจได้รับการรักษาที่คล้ายกันที่นี่ แต่ความจริงก็คือการทำให้คนทำงานและทำให้พวกเขาเชื่อในการทำงานที่ดีเป็นเรื่องของจิตวิทยามนุษย์เกี่ยวกับวิธีการสร้างหลักสูตรของหลักสูตร

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


ขอบคุณที่นำเมทริกซ์ขึ้นมาตอนนี้ฉันต้องใช้เวลา 2 ชั่วโมงในชีวิตของฉันดูอีกครั้ง :) มันตลก แต่ฉันพบว่า "freshers" เป็นคนที่จะดูดซับสิ่งที่คุณโยนพวกเขา หลังจากสำเร็จการศึกษาหลักสูตร CS ที่ดีฉันก็ทำให้ชัดเจนว่าฉันคิดอย่างไรกับ "การศึกษา" ของพวกเขาและพวกเขาส่วนใหญ่เห็นด้วยกับฉัน ฉันพบปัญหาที่ใหญ่ที่สุดคือคนที่ทำสิ่งนี้มาเป็นเวลา 10, 15, 20+ ปี ฉันยังเห็นด้วยกับวิธีการ "ทดลองด้วยไฟ" ของคุณ นั่นเป็นวิธีที่ฉันเรียนรู้ว่าจะไม่ทำอะไร ปัญหาคือก) ใช้เวลานานกว่าที่ทีมส่วนใหญ่ไม่สามารถจ่ายได้และ b) เมื่อทำงานในทีม ...
DXM

.. การตั้งค่า (ฉันกล้าพูดว่า "semi-agile" อย่าเกลียดฉัน S.Lott :)) เราไม่ได้เป็นเจ้าของ แต่เพียงผู้เดียวซึ่งต้องใช้การทดลองด้วยไฟ หากพวกเขาเขียนสิ่งที่ล้มเหลวใครบางคนจะเข้ามาและแก้ไขมัน ในขณะที่ใครบางคนที่อยู่ในสระน้ำและทำมันออกมาส่วนใหญ่ฉันอยากจะคิดว่าฉันสงสัยว่ามีบางอย่างที่สามารถถ่ายโอนความคิดนั้นได้โดยไม่ต้องให้ทีมงานทั้งหมดของคุณผ่านสระน้ำ
DXM

@DXM ฉันเห็นด้วยกับข้อกังวลของคุณที่ดีกว่าไม่ควรโยนทีมทั้งหมดไปที่บ่อทันที ใช่. ประเด็นคือเริ่มโยนพวกเขาทีละคนแล้ว! อย่างน้อยนั่นเป็นข้อตกลงที่ดีระหว่างเรา ฉันคิดว่าความคิดที่เติบโตมานานหลายปี - จะต้องใช้เวลาและความพยายามในการเปลี่ยนแปลง
Dipan Mehta

@DXM ให้สิ่งที่เป็นรูปธรรมมากขึ้น - ลองทำสิ่งเล็ก ๆ น้อย ๆ ในแต่ละครั้ง - แสดงกรณีความสำเร็จและแสดงให้เห็นว่าฝ่ายบริหารหมายถึงธุรกิจที่ทำผลงานได้ดีที่นี่ และส่งเสริมการตั้งค่าความคิด - หนึ่งขั้นตอน การคงอยู่จะเป็นสิ่งที่ต้องทำ แต่ฉันได้ทำสิ่งนี้ใน บริษัท สุดท้ายของฉัน เมื่อเวลาผ่านไปผู้บริหารยังคงให้ทีมของฉันเป็นตัวอย่างของวิธีการทำดี
Dipan Mehta

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

2

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


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

1
ถ้าอย่างนั้นในทุกอาชีพไม่ใช่ทุกคนจะอยู่ในครึ่งบนของเส้นโค้งระฆัง เป็นไปได้ที่คุณจะมีคนบางคนเท่านั้นที่อยู่ในนั้นสำหรับ paycheck
GrandmasterB

คุณรู้ไหมว่าทุกปีเราเลือกคำพูดของทีมและปี 2011 คือ "มันคืออะไร" แต่เรากำลังจะเริ่มปีใหม่และอย่างน้อยก็ในเวลานี้ฉันจะปฏิเสธที่จะยอมรับว่ามันคืออะไร แม้ว่าฉันจะเห็นด้วยกับคุณว่าเวลาส่วนใหญ่เป็นจริง ฉันได้คิดถึงคำถามนี้มากขึ้นและมีความคิดที่อาจมีศักยภาพ เนื่องจากฉันไม่สามารถตอบคำถามของฉันเอง (สิ่งส่วนตัวไม่ใช่ข้อ จำกัด ของระบบ) ถ้ามีคนอีก 2 คนลงคะแนนให้เปิดprogrammers.stackexchange.com/questions/127080/อีกครั้งฉันจะโพสต์ในที่นั่น :)
DXM

2

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

ดังนั้นคุณยืนยันว่าคุณต้องการให้ทีมปรับปรุงคุณได้รับข้อตกลงของพวกเขาว่านี่เป็นสิ่งที่ดี (ที่ทีมโดยรวมทำงานเพื่อปรับปรุงคุณภาพของรหัส) แล้วคุณก็เริ่มโปรแกรมเพื่อทำสิ่งนี้ เกิดขึ้น - ฟังดูง่ายเหลือเกิน ... ฉันรู้ว่ามันไม่ได้!

ฉันคิดว่ามีสองส่วนคือการศึกษาและการปฏิบัติงาน

  • การศึกษาที่คุณสามารถเริ่มได้หนึ่งมื้อเที่ยงต่อสัปดาห์ - ทุกคนกินด้วยกันคุณทำการนำเสนอ 20 ~ 30 นาทีด้วยคำถาม & คำตอบ คุณเริ่มต้นด้วยพื้นฐานที่คุณต้องการ - โซลิดสามารถครอบครองช่วง 2 ~ 4 สัปดาห์แรก - เมื่อเวลาผ่านไปคุณจะได้รับทีมที่จะพูดในการหมุน อนุญาตให้ผู้พูดเตรียมเวลาในการทำงาน นอกเหนือจากนั้นสนับสนุนให้มีการเข้าร่วมกลุ่มผู้ใช้ในพื้นที่ (โดยทำให้เป็นส่วนหนึ่งของสังคมถ้าเป็นไปได้)
  • วิธีการทำงาน ... ขึ้นอยู่กับสิ่งที่คุณทำในตอนนี้และเครื่องมืออะไรที่คุณมี แต่คุณอาจต้องการดูมาตรฐานการเข้ารหัสที่เห็นด้วยแนะนำการตรวจสอบโค้ดเพียร์ (มันค่อนข้างแข็ง) การทดสอบหน่วย เรียกใช้เซิร์ฟเวอร์รวมอย่างต่อเนื่องและดูการทดสอบอัตโนมัติเพิ่มเติม (นอกเหนือจากการทดสอบหน่วย) แต่สิ่งเหล่านี้มีนัยสำคัญที่จะได้รับการแนะนำด้วยความยินยอม / ข้อตกลง (ไม่ใช่เซิร์ฟเวอร์ build / CI!) และคุณต้องต้องการผลักดันคุณภาพไปข้างหน้าในฐานะทีม มีหลายสิ่งที่เราสามารถปรับปรุงได้ (ไคเซ็น)

นอกจากนี้ยังควรค่าแก่การดู Kanban (ซึ่งถูกมองว่าเป็นตัวขับเคลื่อนสำหรับการเปลี่ยนแปลง / ปรับปรุง)

หนึ่งความคิดครั้งสุดท้าย - ฉันเป็นโปรแกรมเมอร์อาชีพและฉันต้องการให้ทีมของฉันเหมือนเดิม แต่การทำงานมากกว่า 40 ชั่วโมงต่อสัปดาห์นั้นไม่ใช่สิ่งที่ดีจริง ๆ ดังนั้นเป้าหมายของเราควรมีทีมที่ทำให้งานสำเร็จ อย่างมีประสิทธิภาพและดีภายในสัปดาห์ทำงานปกติและในส่วนของการโต้แย้งนี้สำหรับการปรับปรุงการปฏิบัติในการทำงานก็คือว่ามันมีโอกาสมากขึ้นเช่นการเพิ่มการทดสอบหน่วยแสดงให้เห็นถึงความล้มเหลวในกรณีเมื่อ (ก่อน) ข้อผิดพลาดตรึงช่วยให้คุณมีความเชื่อมั่นว่ามันเป็นคง; การมีเซิร์ฟเวอร์บิลด์จะช่วยให้คุณมั่นใจในความสามารถในการสร้างโซลูชันของคุณอย่างสมบูรณ์หากว่าบิลด์นั้นสร้างแพ็คเกจการปรับใช้ก็หมายความว่าการปรับใช้นั้นง่ายกว่ามาก รหัส SOLID นั้นง่ายต่อการแก้ไข และทั่วกระดานหนี้ทางเทคนิคน้อยกว่าที่คุณได้รับน้อยกว่าที่คุณต้องจ่ายคืน ...


0

ฉันล้มเหลวในการเขียนโปรแกรมโดยบังเอิญ ~ 30 ปีก่อน ฉันถูกกระตุ้นให้เรียนรู้หลักการวิศวกรรมซอฟต์แวร์พื้นฐานโดยได้รับมอบหมายให้ดูแล / สนับสนุนรหัสของผู้อื่น ในการบ้านเหล่านี้ฉันได้เรียนรู้ว่าผู้อ่านโค้ดประสบกับโค้ดอย่างไร - วิธีเอาใจใส่กับผู้อ่านโค้ด ฉันไม่ต้องการทำดาเมจความเจ็บปวดของรหัสที่เขียนไม่ดีให้ผู้อื่น!

วิธีปฏิบัติในการมอบหมายโปรแกรมเมอร์ใหม่นี้เพื่อรักษา / สนับสนุนรหัสประชาชนอื่น ๆ ไม่ใช่ bullet มายากลและดูเหมือนว่าจะให้แรงจูงใจในการเรียนรู้วิธีการสร้างรหัสของแข็งบ่อยกว่าไม่


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