การสร้างต้นแบบอย่างรวดเร็วและการปรับโครงสร้างใหม่


9

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

ดังนั้นกระบวนการพัฒนาของฉันจะเป็นดังนี้:

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

ฉันคิดว่ามันอาจเสียเวลาถ้าฉันวางแผนการออกแบบซอฟต์แวร์โดยละเอียด ณ จุดนี้มันจะเหมือนกับการวางแผนการเดินทางโดยไม่มีแผนที่

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


นี่ถูกกล่าวถึงใน Clean Code 2 ซึ่งเป็นวิธีการพัฒนาซ้ำ ๆ ... ไม่ว่าคุณจะเชื่อในหนังสือเล่มนั้นหรือไม่ก็ตามนั้นขึ้นอยู่กับคุณ
Rig

คำตอบ:


11

นั่นไม่เกี่ยวกับความคล่องตัว แต่คนคิดว่ามันเป็นเพราะนั่นคือสิ่งที่พวกเขาคิดว่าเปรียวคือ; การพัฒนาไก่หัวขาดในชุมชนฮิปปี้

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

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

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

หากคุณเขียนโค้ดตามหลักการ SOLID (ตัวย่อ) คุณจะอยู่ในตำแหน่งที่ดีในภายหลังเพื่อแทนที่ห้องสมุดหากคุณเลือกผิดหรือหรือเกิดขึ้นบ่อยครั้งคุณจะโตเกินตัวเลือกของคุณ

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


2

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

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

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

มีหลักการพัฒนาซอฟต์แวร์ที่เรียกว่าเป็นของแข็ง จากประสบการณ์ของฉันการใช้พวกเขาในปัญหา / ปัญหาอยู่เสมอในการปรับปรุงฐานรหัสโครงการของคุณ


2

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

ที่ทำงานเราใช้ Kanban, Scrum และวิธีน้ำตกแบบดั้งเดิม ขึ้นอยู่กับโครงการฉันพบว่าการพัฒนาที่ซับซ้อนพร้อมข้อกำหนดที่กำหนดไว้ล่วงหน้านั้นไม่เหมาะกับความคล่องตัวที่สุด แต่หลายคนก็ไม่เห็นด้วย

ก่อนที่เราจะเริ่มทำงานแม้แต่ในโครงการที่คล่องตัว (ทั้งหมดยกเว้นที่ง่ายที่สุดคือ) เราจะสร้างเอกสารบางอย่าง เรามีการจำลอง (หากมีการเน้น UI) ชุดของข้อกำหนดและข้อมูลจำเพาะเชิงหน้าที่

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

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

แม้ในขณะที่เรียกใช้โครงการเปรียวเราก็สร้างเอกสาร

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

คุณจะเห็นว่ามีน้ำตกขนาดเล็กในกระบวนการที่คล่องตัวของเรา

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

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


1

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

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