ชุมชนโปรแกรมเมอร์กำลังถกเถียงกันอย่างคึกคักเกี่ยวกับการประมาณเวลาที่สมจริงสำหรับโปรเจกต์เขียนโค้ดยอดนิยม หลังจากมีรายการซอฟต์แวร์เพื่อความสนุกที่แนะนำเมื่อเร็วๆ นี้ แม้ว่าคำแนะนำเดิมจะมีจุดประสงค์เพื่อช่วยให้นักพัฒนาค้นพบความสุขในการเขียนโปรแกรมผ่านโปรเจกต์ปฏิบัติจริง แต่โปรแกรมเมอร์ที่มีประสบการณ์หลายคนกลับคัดค้านเรื่องการจัดระดับความยากและข้อกำหนดเวลาที่เสนอมา
การประมาณเวลาจุดประกายความไม่เห็นด้วยครั้งใหญ่
สมาชิกชุมชนกำลังชี้ให้เห็นสิ่งที่พวกเขามองว่าเป็นกรอบเวลาโปรเจกต์ที่ไม่สมจริง นักพัฒนาหลายคนชี้ให้เห็นว่าการประมาณการดูเหมือนจะผิดพลาดไปถึงสามเท่าหรือมากกว่า โดยเฉพาะสำหรับการพัฒนาครั้งแรก ตัวอย่างที่ถกเถียงกันมากที่สุดคือ compiler แบบง่ายที่ได้รับการจัดอันดับว่าใช้เวลาสามเดือน ในขณะที่ GameBoy emulator ประมาณการไว้เพียงสองสัปดาห์ - การเปรียบเทียบที่หลายคนมองว่าผิดทางตามประสบการณ์ของตนเอง
แม้แต่โปรเจกต์ที่ดูเหมือนพื้นฐานก็ยังถูกวิพากษ์วิจารณ์เรื่องการประมาณเวลา นักพัฒนาคนหนึ่งตั้งคำถามว่าทำไมการสร้าง hash map ถึงใช้เวลาเต็มหนึ่งสัปดาห์ โดยสังเกตว่าใน C มันซับซ้อนกว่าการสร้าง growable array เพียงเล็กน้อยเท่านั้น ในทำนองเดียวกัน ข้อเสนอแนะที่ว่า POSIX shell สามารถทำเสร็จได้ในสามวันก็ทำให้ผู้ที่คุ้นเคยกับความซับซ้อนของ shell ต้องขมวดคิ้ว
โปรเจกต์โปรแกรมมิ่งสำหรับฝึกฝนยอดนิยม จัดอันดับตามความยาก (จากการอพยพของชุมชน)
ประเภทโปรเจกต์ | ความยากเดิม | เวลาเดิม | ความเห็นจากชุมชน |
---|---|---|---|
Hash Map | 4/10 | 1 สัปดาห์ | "ยากกว่า growable array ใน C เพียงเล็กน้อยเท่านั้น" |
GameBoy Emulator | 6/10 | 2 สัปดาห์ | มีการตั้งคำถามเปรียบเทียบกับความซับซ้อนของ compiler |
Simple Compiler | 8/10 | 3 เดือน | หลายคนคิดว่าง่ายกว่า emulator |
POSIX Shell | 4/10 | 3 วัน | "องค์ประกอบของความยากและเวลากระจัดกระจายไปหมด" |
CHIP-8 Emulator | 3/10 | 3 วัน | ที่ชื่นชอบของชุมชนสำหรับผู้เริ่มต้น |
ชุมชนแบ่งปันไอเดียโปรเจกต์ทางเลือก
นอกจากการวิพากษ์วิจารณ์รายการเดิมแล้ว นักพัฒนายังมีส่วนร่วมในการแบ่งปันโปรเจกต์เพื่อความสนุกที่พวกเขาชื่นชอบ การเพิ่มเติมที่ได้รับความนิยมรวมถึง game bot แบบ GUI การพัฒนา Raft consensus algorithm, ray casting engine และระบบจัดเก็บข้อมูล B-tree หรือ LSM-tree CHIP-8 emulator ยังคงได้รับการยกย่องว่าเป็นโปรเจกต์ที่เหมาะสำหรับผู้เริ่มต้น โดยสมาชิกชุมชนเน้นย้ำถึง test suite ที่มีอยู่ซึ่งช่วยตรวจสอบการพัฒนาได้อย่างรวดเร็ว
สิ่งที่ฉันชอบเกี่ยวกับโปรเจกต์เหล่านี้คือคุณสามารถทำให้มันง่ายหรือซับซ้อนได้ตามที่ต้องการ
ไอเดียโปรเจกต์เพิ่มเติมจากชุมชน:
- บอทที่มีส่วนติดต่อผู้ใช้แบบกราฟิกสำหรับวิดีโอเกม
- การพัฒนาอัลกอริทึม Raft consensus
- เอนจิน Ray casting
- เอนจินจัดเก็บข้อมูลแบบ B-tree หรือ LSM-tree
- Behavior trees สำหรับ AI
- การสร้างภูมิประเทศแบบ Procedural
- การรวมเข้ากับเอนจินสคริปต์ ( Lua )
- เอนจินเกม RPG แบบผู้เล่นหลายคนในระบบ 2D
- เกมฟิสิกส์แบบไม่มีผู้เล่น
การประยุกต์ใช้ในโลกจริงขับเคลื่อนความสนใจ
โปรแกรมเมอร์หลายคนแบ่งปันเรื่องราวว่าโปรเจกต์เพื่อความสนุกของพวกเขาพัฒนาไปเป็นเครื่องมือที่ใช้งานได้จริงอย่างไร นักพัฒนาคนหนึ่งอธิบายการดูแล backup script แบบกำหนดเองมา 20 ปี ซึ่งเดิมทีได้แรงบันดาลใจจากข้อมูลเชิงลึกเกี่ยวกับการใช้ rsync และ hard link สำหรับ snapshot backup แม้จะมีทางเลือกอื่นที่มีอยู่แล้ว แต่ความพึงพอใจส่วนบุคคลและโอกาสการเรียนรู้อย่างต่อเนื่องทำให้โปรเจกต์นี้ยังคงมีชีวิตและมีประโยชน์
การอภิปรายเผยให้เห็นรูปแบบทั่วไปที่นักพัฒนาเริ่มต้นด้วยการพัฒนาแบบง่ายๆ และค่อยๆ เพิ่มความซับซ้อน ไม่ว่าจะเป็น 2D multiplayer RPG engine ที่รวมระบบหลายระบบเข้าด้วยกัน หรือการจำลองฟิสิกส์ที่เติบโตขึ้นเป็นปีๆ โปรเจกต์เหล่านี้ทำหน้าที่เป็นห้องปฏิบัติการเรียนรู้อย่างต่อเนื่อง
บริบทที่กว้างขึ้นของความสุขในการเขียนโปรแกรม
การถกเถียงสะท้อนถึงความกังวลที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับการรักษาความกระตือรือร้นในการเขียนโปรแกรมในยุคของระบบอัตโนมัติและการค้าขายที่เพิ่มขึ้น สมาชิกชุมชนเน้นย้ำว่าโปรเจกต์เหล่านี้เสนอวิธีการเชื่อมต่อกลับไปสู่ความสุขพื้นฐานของการสร้างซอฟต์แวร์ โดยไม่คำนึงว่าการประมาณเวลาจะแม่นยำสำหรับนักพัฒนาแต่ละคนหรือไม่
ข้อมูลเชิงลึกสำคัญที่เกิดขึ้นจากการอภิปรายคือขอบเขตและความซับซ้อนของโปรเจกต์สามารถปรับให้เหมาะสมกับเวลาที่มีและระดับทักษะได้ แทนที่จะมุ่งเน้นไปที่การประมาณที่แม่นยำ นักพัฒนาได้รับการสนับสนุนให้เริ่มลงมือทำและปรับปรุงตามจังหวะและความสนใจของตนเอง
อ้างอิง: Writing Toy Software Is A Joy