เหตุใด“ เกมแห่งชีวิต” ของ Conway จึงถูกใช้เพื่อการใช้รหัส


15

Code Retreat เป็นกิจกรรมการฝึกอบรมตลอดทั้งวันที่มุ่งเน้นไปที่พื้นฐานของการพัฒนาซอฟต์แวร์ มีวันล่าถอยรหัส "ทั่วโลก" ที่กำลังจะมาถึงและฉันรอคอยมันอยู่ ที่กล่าวว่าฉันเคยเป็นหนึ่งก่อนและต้องบอกว่ามีจำนวนมากของความโกลาหล ... ซึ่งเป็นเรื่องปกติ

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

ตระหนักว่านี่เป็นคำถามที่เปิดกว้างดังนั้นอย่าลังเลที่จะแสดงความคิดเห็น


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

@Anna Lear: ขอบคุณ แต่ไม่ต้องการแชทมองหาคำตอบ ถ้ามันไม่ใช่คำถามที่ดีมันก็ดี
ความผิดพลาด

3
@ AnnaLear ฉันคิดว่าคำถามเป็นหัวข้อที่มากกว่า OP ให้เครดิตตัวเอง
Tom Squires

1
@Tom ฉันคิดเกี่ยวกับมันด้วยตัวเองและฉันดีใจที่เห็นมันทำได้ดี ยินดีที่จะผิด :)
Adam Lear

คำตอบ:


26

เดิมทีเกมแห่งชีวิตของ Conway ได้รับเลือกเพราะเรามีจาวาแอปเพล็ตในมือเพื่อทำงานใน coderetreat แรกในเดือนมกราคมของปี 2009 เป้าหมายของวันนี้คือการทดสอบกับแนวคิดบางอย่างเกี่ยวกับการฝึกปฏิบัติตามกำหนดเวลาและเราเพิ่งเลือก แอปเพล็ต GoL เพราะเรามีมัน

หลังจากนั้นในฐานะผู้อำนวยความสะดวกที่ใช้งานอยู่สองคน (โดยเฉพาะอย่างยิ่งฉันระหว่างการเดินทางของฉันในปี 2009 และ Alex Bolboaca ในบูคาเรสต์) ตรวจสอบการใช้ GoL เป็นเครื่องมือในการเรียนรู้ ในขณะเดียวกันเราก็ได้พัฒนารูปแบบ coderetreat เป็นสิ่งที่มันได้กลายเป็นในปัจจุบัน ในปี 2009 อเล็กซ์พยายามอย่างน้อยหนึ่งปัญหาอื่น ๆ (การให้คะแนนมือโป๊กเกอร์) แต่ไม่พบว่ามีประโยชน์เท่า GoL คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับประวัติได้ที่http://coderetreat.org/history

Coderetreat มุ่งเน้นที่การปรับปรุงความเข้าใจของเราในการออกแบบที่เรียบง่าย (โดยเฉพาะ 4 กฎของการออกแบบที่เรียบง่าย) การพัฒนาที่ขับเคลื่อนด้วยการทดสอบและแง่มุมพื้นฐานอื่น ๆ ของการพัฒนาซอฟต์แวร์ GoL มีประโยชน์ในการเป็นปัญหาง่าย ๆ ที่จะเข้าใจในขณะที่ยังอุดมไปด้วยมุมมองเชิงโครงสร้าง มันให้ส่วนต่างๆของระบบที่สามารถใช้เป็นตัวอย่างของหัวข้อทั้งหมดที่เราฝึกที่ coderetreat ตัวอย่างเช่นการใช้งานทั่วไปที่ใช้พารามิเตอร์ (x, y) ในหลายวิธีเป็นโอกาสที่ดีในการพูดคุยเกี่ยวกับหลักการ DRY (ความรู้ทุกชิ้นควรมีเพียงหนึ่งเดียวเท่านั้นในระบบของคุณ) โดยคำนึงถึงทอพอโลยีของ ระบบ. มีแง่มุมอื่น ๆ อีกมากมายที่สามารถใช้เป็นตัวอย่างของการสร้างการออกแบบที่ลดต้นทุนการเปลี่ยนแปลง

ตอนนี้มีคนไม่กี่คนที่ทำหลาย coderetreats และพวกเขาก็ยังพบประเด็นที่น่าสนใจของปัญหาที่จะใช้เป็นแบบฝึกหัด


10

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

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


10
ฉันจะถือว่าเครื่องร่อนเป็นพฤติกรรม "ฉุกเฉิน" การทดสอบหน่วยของคุณจำเป็นต้องเข้ารหัสกฎสำหรับชีวิตและความตายของเซลล์ที่ระบุจำนวนเพื่อนบ้านเท่านั้น
Robert Harvey

1
เครื่องร่อนเป็นพฤติกรรมที่เกิดขึ้นใหม่อย่างแน่นอน ผู้เข้าร่วมบางคนที่ coderetreats จะสร้างการทดสอบที่มีขนาดใหญ่กว่าซึ่งรวมถึงสิ่งต่าง ๆ เช่นเครื่องร่อน แต่เป็นการทดสอบคำแนะนำไม่ใช่การทดสอบแบบหน่วย / tdd พฤติกรรมที่เกิดขึ้นจากการสร้างกฎที่กำหนดไว้อย่างดี
coreyhaines

3

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

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

คุณได้รับอินพุตที่รู้จักและเอาต์พุตที่รู้จักหลังจากการวนซ้ำ X และคุณรู้ทุกขั้นตอนในการไปที่นั่น ... ยกเว้นขั้นตอนนั้นใช้เวลานานเกินไปและนานเกินไป คุณต้องทำการปรับให้เหมาะสมที่สุดเพื่อให้พอดีกับข้อกำหนด อัลกอริธึมเล็กน้อยกับการสแกนอาเรย์ 2d ที่บัฟเฟอร์สองเท่าขนาดคงที่ไม่เพียงพอโดยสิ้นเชิงเมื่อประสิทธิภาพลดลงด้วยขนาด O (n ^ 2) การรักษาบล็อกที่เต็มไปด้วยวัตถุที่วางไข่ใหม่ก็จะกินหน่วยความจำมากขึ้นและช้าลง การแยกทุกอย่างออกเป็นบอร์ดขนาด จำกัด บางครั้งก็ล้มเหลวบางครั้ง ...

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


2

ทุกอย่างขึ้นอยู่กับกระบวนการของคุณที่คุณต้องการฝึกฝน / ฝึกอบรม

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

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

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

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

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

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