ฉันพยายามวางแผนล่วงหน้า แต่ฉันไม่สามารถคาดการณ์ล่วงหน้าได้ทุกอย่างจนกว่าฉันจะเริ่มใช้รหัส
มันเป็นเรื่องดึงดูดที่จะคิดว่าการวางแผนที่สมบูรณ์แบบจะช่วยให้คุณออกแบบซอฟต์แวร์ / ออกแบบเว็บไซต์ได้อย่างสมบูรณ์แบบ มีสองปัญหาใหญ่กับสิ่งนี้ ประการแรก "บนกระดาษ" และ "รหัส" ไม่ค่อยตรงกันและเหตุผลก็เพราะมันง่ายที่จะบอกว่ามันควรจะทำอย่างไรเมื่อเทียบกับการทำมันจริง ประการที่สองการเปลี่ยนแปลงข้อกำหนดที่ไม่คาดคิดปรากฏชัดเจนในกระบวนการพัฒนาซึ่งไม่สามารถให้เหตุผลได้ตั้งแต่เริ่มมีอาการ
คุณเคยได้ยินเกี่ยวกับการเคลื่อนไหวเปรียวหรือไม่? เป็นวิธีคิดที่เราให้ความสำคัญกับ "การตอบสนองต่อการเปลี่ยนแปลง" เมื่อเทียบกับ "การทำตามแผน" (เหนือสิ่งอื่นใด) นี่คือรายการ (อ่านอย่างรวดเร็ว) คุณยังสามารถอ่านเกี่ยวกับ Big Design Up Front (BDUF) และสิ่งที่เป็นข้อผิดพลาด
น่าเสียดายที่รุ่น "Agile" ของ บริษัท เป็นพวงปลอม (ปริญญาโทที่ได้รับการรับรองกระบวนการหนักในนามของ "Agile" บังคับให้มีการต่อสู้แย่งชิงบังคับให้ครอบคลุมรหัส 100% ฯลฯ ) และมักส่งผลให้กระบวนการเปลี่ยนแปลง asinine เพราะผู้จัดการ คิดว่า Agile เป็นกระบวนการและเป็น bullet เงิน (ซึ่งมันไม่ใช่) อ่านแถลงการณ์ที่คล่องแคล่วฟังผู้ที่เริ่มต้นการเคลื่อนไหวนี้เช่นลุงบ็อบและมาร์ตินฟาวเลอร์และอย่าถูกดูดเข้าไปใน "Corporate Agile" เวอร์ชั่นไร้สาระ
โดยเฉพาะอย่างยิ่งคุณสามารถหนีไปได้ด้วยการทำ TDD (Test Driven Development) บนโค้ดทางวิทยาศาสตร์และมีโอกาสที่โครงการซอฟต์แวร์ของคุณจะออกมาดี นี่เป็นเพราะรหัสทางวิทยาศาสตร์ที่ประสบความสำเร็จส่วนใหญ่มีอินเทอร์เฟซที่ใช้งานได้เป็นพิเศษพร้อมประสิทธิภาพในการทำงานเป็นข้อกังวลรอง (และบางครั้งอาจมีการแข่งขัน) และคุณสามารถหลบหนีได้ด้วยการออกแบบ ประเภทของ TDD บังคับให้ซอฟต์แวร์ของคุณใช้งานได้อย่างพิเศษเพราะคุณเขียนว่าคุณต้องการให้สิ่งต่าง ๆ ถูกเรียกว่าอย่างไร (นึกคิด) ก่อนที่คุณจะนำไปใช้จริง มันยังบังคับให้ฟังก์ชั่นเล็ก ๆ ที่มีอินเตอร์เฟสขนาดเล็กที่สามารถเรียกได้อย่างรวดเร็วในแบบ "อินพุท" / "เอาท์พุท" ที่เรียบง่ายและมันทำให้คุณอยู่ในตำแหน่งที่ดีในการปรับโครงสร้าง ในกรณีที่มีการเปลี่ยนแปลงข้อกำหนด
ฉันคิดว่าเราทุกคนสามารถตกลงกันได้ว่าnumpy
เป็นซอฟต์แวร์ทางวิทยาศาสตร์ที่ประสบความสำเร็จ อินเทอร์เฟซของพวกเขามีขนาดเล็กใช้งานได้ดีสุด ๆ และทุกอย่างเล่นด้วยกันอย่างดี โปรดทราบว่าnumpy
's คู่มืออ้างอิงอย่างชัดเจนแนะนำ TDD: https://docs.scipy.org/doc/numpy-1.15.1/reference/testing.html ฉันเคยใช้ TDD ในอดีตสำหรับซอฟต์แวร์ถ่ายภาพ SAR (Synthetic Aperature Radar): และฉันยังสามารถยืนยันได้ว่ามันทำงานได้ดีมากสำหรับโดเมนนั้น
Caveat:ส่วนการออกแบบของ TDD ทำงานได้ไม่ดีในระบบที่การปรับโครงสร้างพื้นฐานใหม่ (เช่นการตัดสินใจว่าคุณต้องการซอฟต์แวร์ของคุณให้พร้อมกันสูง) จะยากเช่นในระบบกระจาย ตัวอย่างเช่นถ้าคุณมีการออกแบบสิ่งเช่น Facebook ที่คุณมีผู้ใช้นับล้านพร้อมกันทำ TDD (ในการผลักดันการออกแบบของคุณ) จะเป็นความผิดพลาด (ยังคงถูกใช้หลังจากที่คุณมีในเบื้องต้นการออกแบบและการทำ "การทดสอบการพัฒนาครั้งแรก ") สิ่งสำคัญคือให้คิดถึงทรัพยากรและโครงสร้างของแอปพลิเคชันของคุณก่อนที่จะกระโดดลงไปในโค้ด TDD จะไม่นำคุณไปสู่ระบบที่มีการกระจายและพร้อมใช้งานสูง
ฉันจะหลีกเลี่ยงความรู้สึกตลอดเวลาได้อย่างไรหากฉันสร้างโปรแกรมขึ้นใหม่ทั้งหมดตั้งแต่เริ่มต้นฉันจะทำได้ดีกว่ามาก?
จากที่กล่าวมาข้างต้นควรเห็นได้ชัดว่าการออกแบบที่สมบูรณ์แบบนั้นเป็นไปไม่ได้ที่จะบรรลุดังนั้นการไล่ล่าการออกแบบที่สมบูรณ์แบบนั้นเป็นเกมที่โง่เขลา คุณสามารถเข้าใกล้ได้จริงๆเท่านั้น แม้ว่าคุณคิดว่าคุณสามารถออกแบบจากรอยขีดข่วนมีอาจยังคงต้องการที่ซ่อนที่ยังไม่ได้แสดงตัวเอง นอกจากนี้การเขียนใหม่จะใช้เวลาอย่างน้อยตราบเท่าที่มันต้องพัฒนาโค้ดต้นฉบับ มันเกือบจะไม่สั้นอย่างแน่นอนเพราะมันอาจเป็นไปได้ว่าการออกแบบใหม่จะมีปัญหาที่ไม่คาดฝันของตัวเองรวมทั้งคุณจะต้องใช้คุณสมบัติทั้งหมดของระบบเก่าอีกครั้ง
สิ่งที่จะต้องพิจารณาก็คือว่าการออกแบบของคุณเท่านั้นที่จริงเรื่องเมื่อต้องการเปลี่ยนมันไม่สำคัญว่าการออกแบบจะไม่เลวร้ายเพียงใดหากไม่มีการเปลี่ยนแปลงใด ๆ (สมมติว่ามันทำงานได้อย่างสมบูรณ์สำหรับกรณีการใช้งานในปัจจุบัน) ฉันทำงานบนพื้นฐานที่มีคำสั่งสวิตช์ 22,000 บรรทัด (ฟังก์ชั่นนั้นยาวกว่า) มันคือการออกแบบที่น่ากลัว? เฮ้อใช่มันแย่มาก พวกเราแก้ไขหรือไม่ ไม่มันทำงานได้ดีเหมือนเดิมและเป็นส่วนหนึ่งของระบบที่ไม่ก่อให้เกิดความผิดพลาดหรือข้อบกพร่อง มันได้สัมผัสเพียงครั้งเดียวในสองปีที่ฉันอยู่ในโครงการและมีใครบางคนคุณเดามันแทรกกรณีอื่นลงในสวิตช์ แต่มันก็ไม่คุ้มค่าที่จะใช้เวลาในการแก้ไขสิ่งที่สัมผัสไม่บ่อยนักมันก็ไม่ได้เป็นเช่นนั้น ปล่อยให้การออกแบบที่ไม่สมบูรณ์เป็นไปตามที่มันเป็นและถ้ามันไม่พัง (หรือทำลายอย่างต่อเนื่อง) ก็อย่าแก้ไขมัน ดังนั้นบางทีคุณสามารถทำได้ดีกว่า ... แต่มันจะคุ้มค่าที่จะเขียนใหม่? คุณจะได้อะไร
HTH