รอบที่คุณอธิบายเป็นเรื่องปกติ วิธีการปรับปรุงสิ่งต่าง ๆ ไม่ใช่เพื่อหลีกเลี่ยงวงจรนี้ แต่เพื่อปรับปรุง ขั้นตอนแรกคือการยอมรับว่า:
- มันใกล้จะเป็นไปไม่ได้ที่จะรู้ทุกอย่างในวันเดียวของโครงการ
- แม้ว่าคุณจะรู้ทุกอย่างตามเวลาที่คุณทำโครงการเสร็จแล้วบางสิ่ง (ความต้องการของลูกค้าตลาดที่พวกเขาอยู่เทคโนโลยีที่คุณทำงานด้วยความปรารถนาของลูกค้า) จะมีการเปลี่ยนแปลงและทำที่ ส่วนน้อยที่สุดของสิ่งที่คุณรู้ว่าไม่ถูกต้องหรือไม่ถูกต้อง
ดังนั้นจึงเป็นไปไม่ได้ที่จะวางแผนทุกอย่างล่วงหน้าและแม้ว่าคุณจะทำได้การทำตามแผนนั้นจะนำคุณไปสู่การสร้างสิ่งที่ไม่สมบูรณ์หรือล้าสมัย เมื่อรู้สิ่งนี้เราจึงรวมการเปลี่ยนแปลงเข้ากับการวางแผนของเรา ลองดูที่ขั้นตอนของคุณ:
- เริ่มต้นด้วยการใช้งานสองสามกรณี
- เริ่มการเข้ารหัส
- ตระหนักถึงบางสิ่งที่ฉันไม่ได้จัดการได้ดีและไม่เหมาะกับ codebase ปัจจุบัน
- เขียนซ้ำส่วนใหญ่ของรหัส
นั่นเป็นจุดเริ่มต้นที่ดีจริงๆ นี่คือวิธีที่ฉันเข้าหา:
1. เริ่มต้นด้วยการใช้งานสองสามกรณี
ดี. โดยกล่าวว่า "กรณีการใช้งาน" คุณกำลังมุ่งเน้นไปที่สิ่งที่เป็นซอฟต์แวร์สำหรับ ด้วยการพูดว่า "ไม่กี่คน" คุณไม่ได้พยายามค้นหาทุกสิ่ง คุณยึดติดกับปริมาณงานที่จัดการได้ สิ่งที่ฉันเพิ่มที่นี่คือการจัดลำดับความสำคัญ สำหรับลูกค้าของคุณหรือผู้ใช้ปลายทางให้ตอบคำถามนี้:
อะไรคือซอฟต์แวร์ที่เล็กและเรียบง่ายที่สุดที่ฉันสามารถมอบให้คุณเพื่อปรับปรุงสถานการณ์ของคุณ?
นี่คือผลิตภัณฑ์ที่มีศักยภาพขั้นต่ำของคุณ- สิ่งใดก็ตามที่เล็กกว่านี้ไม่เป็นประโยชน์ต่อผู้ใช้ของคุณ แต่ความเสี่ยงที่ใหญ่กว่านั้นคือการวางแผนที่เร็วเกินไป รับข้อมูลเพียงพอที่จะสร้างสิ่งนี้แล้วย้ายไป ระวังให้ดีว่าคุณจะไม่รู้ทุกอย่างในตอนนี้
2. เริ่มการเข้ารหัส
ยิ่งใหญ่ คุณจะได้ทำงานโดยเร็วที่สุด จนกว่าคุณจะเขียนโค้ดลูกค้าของคุณจะได้รับสิทธิประโยชน์เป็นศูนย์ ยิ่งคุณใช้เวลาในการวางแผนมากเท่าไหร่ลูกค้าก็ยิ่งใช้เวลาในการรอคอยนานขึ้นโดยไม่มีการคืนทุน
ที่นี่ฉันจะเพิ่มการเตือนเพื่อเขียนรหัสที่ดี จดจำและปฏิบัติตามหลักการของ SOLIDเขียนการทดสอบหน่วยที่เหมาะสมเกี่ยวกับสิ่งที่เปราะบางหรือซับซ้อนทำบันทึกเกี่ยวกับสิ่งที่คุณน่าจะลืมหรืออาจทำให้เกิดปัญหาในภายหลัง คุณต้องการจัดโครงสร้างโค้ดของคุณเพื่อให้การเปลี่ยนแปลงนั้นไม่ทำให้เกิดปัญหา การทำเช่นนี้ทุกครั้งที่คุณตัดสินใจที่จะสร้างบางสิ่งบางอย่างนี้วิธีแทนว่าวิธีที่คุณโครงสร้างรหัสของคุณเพื่อให้รหัสน้อยที่สุดเท่าที่เป็นไปได้คือได้รับผลกระทบจากการตัดสินใจว่า โดยทั่วไปวิธีที่ดีในการทำเช่นนี้คือการแยกรหัสของคุณ:
- ใช้องค์ประกอบที่เรียบง่ายไม่ต่อเนื่อง (ขึ้นอยู่กับภาษาและสถานการณ์ของคุณส่วนประกอบนี้อาจเป็นฟังก์ชั่นคลาสแอสเซมบลีโมดูลบริการ ฯลฯ คุณอาจมีส่วนประกอบขนาดใหญ่ที่สร้างจากชิ้นเล็ก ๆ เช่น ชั้นเรียนที่มีฟังก์ชั่นมากมายหรือชุดประกอบที่มีชั้นเรียนจำนวนมาก)
- แต่ละองค์ประกอบทำหน้าที่เดียวหรืองานที่เกี่ยวข้องกับสิ่งหนึ่ง
- การเปลี่ยนแปลงวิธีการทำงานของส่วนประกอบภายในไม่ควรทำให้ส่วนประกอบอื่นต้องเปลี่ยน
- ส่วนประกอบควรได้รับสิ่งที่พวกเขาใช้หรือขึ้นอยู่กับการดึงหรือการสร้างพวกเขา
- ส่วนประกอบควรให้ข้อมูลกับส่วนประกอบอื่นและขอให้ทำงานแทนที่จะดึงข้อมูลและทำงานด้วยตนเอง
- ส่วนประกอบไม่ควรเข้าถึงใช้งานหรือขึ้นอยู่กับการทำงานภายในของส่วนประกอบอื่น ๆ - ใช้ฟังก์ชั่นที่สาธารณชนเข้าถึงได้
ด้วยการทำเช่นนี้คุณกำลังแยกเอฟเฟกต์ของการเปลี่ยนแปลงเพื่อให้ในกรณีส่วนใหญ่คุณสามารถแก้ไขปัญหาได้ในที่เดียวและโค้ดที่เหลือของคุณไม่สังเกตเห็น
3. พบปัญหาหรือข้อบกพร่องในการออกแบบ
สิ่งนี้จะเกิดขึ้น หลีกเลี่ยงไม่ได้ ยอมรับสิ่งนี้ เมื่อคุณพบปัญหาเหล่านี้อย่างใดอย่างหนึ่งตัดสินใจว่าปัญหาคืออะไร
ปัญหาบางอย่างเป็นปัญหาในรหัสหรือการออกแบบของคุณซึ่งทำให้ยากที่จะทำในสิ่งที่ซอฟต์แวร์ควรทำ สำหรับปัญหาเหล่านี้คุณต้องย้อนกลับและแก้ไขการออกแบบเพื่อแก้ไขปัญหา
ปัญหาบางอย่างเกิดจากการมีข้อมูลไม่เพียงพอหรือมีบางอย่างที่คุณไม่เคยนึกถึงมาก่อน สำหรับปัญหาเหล่านี้คุณต้องกลับไปที่ผู้ใช้หรือลูกค้าของคุณและถามพวกเขาว่าพวกเขาต้องการแก้ไขปัญหาอย่างไร เมื่อคุณมีคำตอบแล้วคุณไปและอัปเดตการออกแบบของคุณเพื่อจัดการกับมัน
ในทั้งสองกรณีคุณควรให้ความสนใจกับส่วนของรหัสของคุณที่จะต้องเปลี่ยนแปลงและเมื่อคุณเขียนโค้ดเพิ่มเติมคุณควรจะพิจารณาว่าส่วนใดที่อาจต้องเปลี่ยนในอนาคต สิ่งนี้ทำให้ง่ายต่อการหาว่าส่วนใดที่อาจเชื่อมโยงกันเกินไปและส่วนใดที่อาจต้องแยกจากกันมากขึ้น
4. เขียนซ้ำส่วนของรหัส
เมื่อคุณระบุวิธีเปลี่ยนรหัสแล้วคุณสามารถไปและทำการเปลี่ยนแปลงได้ หากคุณได้จัดโครงสร้างโค้ดของคุณให้ดีแล้วสิ่งนี้มักจะเกี่ยวข้องกับการเปลี่ยนแปลงเพียงส่วนประกอบเดียว แต่ในบางกรณีอาจเกี่ยวข้องกับการเพิ่มส่วนประกอบบางส่วนด้วย หากคุณพบว่าคุณต้องเปลี่ยนสิ่งต่างๆมากมายในหลาย ๆ สถานที่ให้ลองคิดดูว่าทำไมถึงเป็นเช่นนั้น คุณสามารถเพิ่มส่วนประกอบที่เก็บโค้ดนี้ไว้ในตัวของมันเองแล้วให้สถานที่เหล่านี้ใช้ส่วนประกอบนั้นได้หรือไม่? หากทำได้ให้ทำและในครั้งต่อไปที่คุณต้องเปลี่ยนคุณสมบัตินี้คุณจะสามารถทำได้ในที่เดียว
5. ทดสอบ
สาเหตุที่พบบ่อยของปัญหาในซอฟต์แวร์ไม่ทราบความต้องการที่ดีพอ นี่ไม่ใช่ข้อผิดพลาดของนักพัฒนา - บ่อยครั้งผู้ใช้ไม่แน่ใจว่าต้องการอะไร วิธีที่ง่ายที่สุดในการแก้ปัญหานี้คือการย้อนกลับคำถาม แทนที่จะถามว่า "คุณต้องใช้ซอฟต์แวร์ทำอะไร" ในแต่ละครั้งที่คุณทำขั้นตอนเหล่านี้ให้ผู้ใช้งานที่คุณสร้างขึ้นมาแล้วถามพวกเขาว่า "ฉันสร้างสิ่งนี้ขึ้นมา - ทำสิ่งที่คุณต้องการหรือไม่" หากพวกเขาตอบว่าใช่คุณก็จะสร้างสิ่งที่แก้ปัญหาได้และคุณสามารถหยุดทำงานได้! หากพวกเขาตอบว่าไม่พวกเขาจะสามารถบอกคุณในแง่ที่เฉพาะเจาะจงมากขึ้นว่าเกิดอะไรขึ้นกับซอฟต์แวร์ของคุณและคุณสามารถไปปรับปรุงสิ่งนั้นและกลับมารับข้อเสนอแนะเพิ่มเติม
6. เรียนรู้
เมื่อคุณผ่านรอบนี้ให้ใส่ใจกับปัญหาที่คุณพบและการเปลี่ยนแปลงที่คุณทำ มีลวดลายไหม? คุณปรับปรุงได้ไหม
ตัวอย่างบางส่วน:
- หากคุณพบว่าคุณมองข้ามมุมมองของผู้ใช้คุณจะทำให้ผู้ใช้รายนั้นมีส่วนร่วมมากขึ้นในขั้นตอนการออกแบบหรือไม่
- หากคุณยังคงต้องเปลี่ยนสิ่งต่าง ๆ เพื่อให้เข้ากันได้กับเทคโนโลยีคุณสามารถสร้างบางสิ่งบางอย่างเพื่อเชื่อมต่อระหว่างรหัสของคุณและเทคโนโลยีนั้นเพื่อที่คุณจะต้องเปลี่ยนอินเทอร์เฟซ?
- หากผู้ใช้เปลี่ยนใจเกี่ยวกับคำสีรูปภาพหรือสิ่งอื่น ๆ ใน UI คุณสามารถสร้างส่วนประกอบที่มอบให้กับแอปพลิเคชั่นที่เหลือเพื่อให้พวกเขาทั้งหมดอยู่ในที่เดียวกันได้หรือไม่?
- หากคุณพบว่าการเปลี่ยนแปลงจำนวนมากของคุณอยู่ในองค์ประกอบเดียวกันคุณแน่ใจหรือไม่ว่าส่วนประกอบนั้นทำงานกับงานเดียว? คุณแบ่งมันออกเป็นชิ้นเล็ก ๆ ได้ไหม? คุณสามารถเปลี่ยนองค์ประกอบนี้โดยไม่ต้องแตะต้องคนอื่นได้หรือไม่?
มีความคล่องตัว
สิ่งที่คุณกำลังมุ่งหน้ามาที่นี่คือรูปแบบการทำงานที่เรียกว่า Agile Agile ไม่ใช่วิธีการมันเป็นตระกูลของวิธีการที่รวมเอาทุกสิ่ง (Scrum, XP, Kanban, เพื่อชื่อไม่กี่) แต่สิ่งที่พวกเขาทั้งหมดมีเหมือนกันคือความคิดที่ว่าสิ่งต่าง ๆ เปลี่ยนแปลงและในฐานะนักพัฒนาซอฟต์แวร์ที่เรา ควรวางแผนที่จะปรับให้เข้ากับการเปลี่ยนแปลงแทนที่จะหลีกเลี่ยงหรือเพิกเฉย หลักการสำคัญบางประการโดยเฉพาะหลักการที่เกี่ยวข้องกับสถานการณ์ของคุณมีดังต่อไปนี้:
- อย่าวางแผนล่วงหน้าเกินกว่าที่คุณจะคาดการณ์ได้อย่างมั่นใจ
- ทำเงินสำหรับสิ่งต่าง ๆ ที่จะเปลี่ยนไปในขณะที่คุณไป
- แทนที่จะสร้างสิ่งที่ยิ่งใหญ่ในคราวเดียวให้สร้างสิ่งเล็ก ๆ แล้วปรับปรุงทีละน้อย
- ทำให้ผู้ใช้มีส่วนร่วมในกระบวนการและรับคำติชมปกติอย่างรวดเร็ว
- ตรวจสอบงานและความก้าวหน้าของคุณเองและเรียนรู้จากความผิดพลาดของคุณ