ฉันควรวางแผนและเริ่มต้นโครงการอย่างไร


20

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

มีมาตรฐานแปลก ๆ หรือไม่เมื่อเริ่มโครงการเช่นการแมปคลาสและเริ่มต้นด้วยการทดสอบหน่วย? การประชุมที่ดีคืออะไรเมื่อวางแผนและเริ่มโครงการขนาดกลาง

โครงการสุดท้ายและเริ่มต้นคือเครื่องจำลองการเคลื่อนไหวของกระสุนปืน - ฉันรู้ว่าสามารถคาดเดาได้


เลือกการออกแบบและติดกับมัน ดูเหมือนคุณกำลังหาเหตุผลในการเปลี่ยนการออกแบบของคุณ
Ramhound

คำถามของคุณเกี่ยวข้องกับด้านการออกแบบของโครงการหรือความจริงที่ว่าคุณเปลี่ยนใจและคุณเปลี่ยนขอบเขตทั้งหมดของโครงการหรือไม่
Noname

2
@Ramhound: "เลือกการออกแบบและติดกับมัน" ทำงานได้อย่างสมบูรณ์แบบตราบใดที่คุณเลือกการออกแบบหลังจากการเขียนและทดสอบรหัส
kevin cline

ฉันอาจจะอ่านรูปแบบการออกแบบและการออกแบบ OO นิดหน่อย มันช่วยฉัน ถ้าอย่างที่ฉันคิดว่าคุณเป็นมือใหม่ฉันอยากจะแนะนำรูปแบบการออกแบบหัวแรก
Darren Young

คำตอบ:


19

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

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

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

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


+1: นี่คือคำตอบที่ฉันจะได้รับ วางแผนสำหรับจำนวนต่ำสุดที่แน่นอนและเพิ่มลงในแผนตามที่จำเป็น แต่เพิ่มขั้นต่ำ
Joel Etherton

เรียบง่าย แต่สิ่งนี้ใช้ได้ดีมาก ขอบคุณ
Will03uk

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

7

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


2
+1 ถ้าคำถามเกี่ยวกับโครงการส่วนบุคคลขนาดเล็กเท่านั้น การเปลี่ยนแปลงและการเขียนรหัสซ้ำในโครงการเหล่านั้นก็เป็นสัญญาณที่ดีเช่นกันนั่นหมายความว่าผู้พัฒนากำลังคิดหาวิธีหรือวิธีการที่ดีกว่าในการแก้ปัญหาเดียวกัน สิ่งที่จะเป็นปัญหาคือการเขียนโค้ดเส็งเคร็งและไม่เคยคิดอีกครั้ง
Arseni Mourzenko

4

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

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


3

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


1

http://nathanmarz.com/blog/suffering-oriented-programming.html

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


1

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

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

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

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


0

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

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


0

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


0

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

กล่าวอีกนัยหนึ่งเมื่อคุณเริ่มอย่าออกแบบอะไร !!! .

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

ดังนั้นรายการสินค้าที่ต้องการของคุณสมบัติพื้นฐาน + จัดลำดับความสำคัญ = ความต้องการ

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

เช่น: ตอนนี้ คุณจะได้รับที่จะหลงระเริงขอเรียกร้องให้นักออกแบบของคุณ

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

Cry Havoc ปล่อยสุนัขของ ... รหัส !!

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

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


0

หลังจากคุณทำพื้นฐานเช่นสร้างเป้าหมายโครงการรับรายการข้อกำหนดและล็อคอินเทอร์เฟซใด ๆ ลงในระบบภายนอก

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

  • ข้อความภาษาอังกฤษแบบย่อ
  • "Goal Driven" ทำงานได้ดีที่สุดเช่น "Monkey ได้รับองุ่น" ดีกว่า "Monkey Pushes red button"
  • ห้ามคำศัพท์ทางเทคนิค ไม่มี "pulldowns", "กล่องข้อความ" กรณีใช้งานที่ดีควรเป็นอิสระจากเทคโนโลยีอินเทอร์เฟซใด ๆ คุณควรจะสามารถใช้กรณีการใช้งานสำหรับระบบที่ใช้ HTML และใช้สำหรับระบบเปิดใช้งานด้วยเสียงโดยไม่มีการเปลี่ยนแปลงใด ๆ ในกรณีการใช้งานเอง (มันยากมากที่จะทำ แต่คุ้มค่า!)
  • มุ่งหวังที่จะลดจำนวนคำของร่างแรกของคุณลง 50% กำจัดขั้นตอนที่ไม่จำเป็นและใช้คำฟุ่มเฟือย

กว่าที่คุณพร้อมที่จะระบุคลาสที่สำคัญของคุณ:

UML- ภาษาการสร้างแบบจำลองสากล เป็นเครื่องมือมาตรฐานสำหรับการออกแบบคลาส คุณระบุสมาชิกสาธารณะและวิธีการของแต่ละชั้นเรียนและเชื่อมโยงเข้าด้วยกันในรูปแบบกราฟิกที่กระชับ

เมื่อใช้ร่วมกับแผนภาพลำดับโมเดลข้อมูลคุณสามารถตรวจสอบและปรับปรุงการออกแบบของคุณก่อนที่จะมีการเข้ารหัส


0

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

ในกรณีที่คุณกลับไปที่จัตุรัสหนึ่งทั้งหมดจะไม่สูญหายเพราะคุณได้รับประสบการณ์

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

ฉันมักจะลุกโชนผ่านงานทำสิ่งต่าง ๆ ให้เสร็จเร็ว ๆ แล้วปีเล่าวันหนึ่งฉันก็รู้ว่าตัวเองไม่มีทักษะในการทำงาน

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