การทำต้นแบบกับ Clean Code ในระยะแรก


43

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

  • แค่ต้นแบบ - เขียนแค่การทำงานโค้ดพื้นฐานที่อาจทำให้ฉันเสียเวลาในการปรับให้เหมาะสมและปรับโครงสร้างใหม่เพื่อการขยายที่ง่าย

  • เขียนโค้ดที่สะอาดเหมาะสมและได้รับการบันทึกไว้ตั้งแต่ต้นโดยจำไว้ว่าหากหลังจากผ่านไประยะหนึ่งแล้วจะไม่คุ้มค่า

ปรับปรุง:การรวม YAGNI กับคำตอบ sunpech และ M.Sameer ทำให้ฉันสมบูรณ์แบบ :) ขอขอบคุณทุกคนสำหรับความช่วยเหลือ


คำตอบ:


39

มีตัวเลือกที่สามคือ ... เขียนโค้ดที่สะอาดผ่านการพัฒนาโดยใช้การทดสอบเพื่อนำข้อกำหนดที่จำเป็นมาใช้ในวันนี้เนื่องจาก YAGNI

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

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

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

เขียนรหัสที่คุณต้องการตอนนี้รู้ว่าคุณสามารถตอบสนองความต้องการของวันนี้และวันพรุ่งนี้ได้ดีที่สุด


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

1
ฉันคิดว่าสิ่งที่เขาหมายถึงคือเขาจะวางโครงการทั้งหมดหากไม่ได้เลื่อนออกไป หากเป็นจริงคำตอบนี้ดูเหมือนจะไม่แตกต่างจาก "write clean code"
Jeremy

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

1
@ JackLeo ฉันคิดว่าประเด็นคือเมื่อคุณมีประสบการณ์ในระดับหนึ่งแล้วก็หยุดความแตกต่างระหว่าง "รหัสที่ฉันทำงานหนัก" และ "รหัสที่ฉันเพิ่งเขียน"
Ant P

@AntP แน่นอน มันน่าสนใจที่จะไตร่ตรองคำถามนี้ในอีก 6 ปีต่อมา :)
JackLeo

16

เหมือนอย่างเคย...

มันขึ้นอยู่กับ

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

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

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


2
+1 โพสต์ยอดเยี่ยม! ฉันจะเพิ่มว่าแม้ว่ามันอาจดูเหมือนไร้ประโยชน์หลังจากที่คุณได้พัฒนาฟีเจอร์นั้น แต่ไม่ควรทิ้งต้นแบบของคุณ ฉันมักจะควบคุมแหล่งที่มาทุกต้นแบบที่ฉันทำงานเพราะบางครั้งฉันกลับไปหาพวกเขาเพื่อขอคำแนะนำและคำแนะนำ
maple_shaft

1
@maple_shaft: ใช่ "ทิ้ง" เป็นคำเปรียบเทียบในขณะที่ "ไม่จำเป็นต้องพยายาม refactor มันวางแผนในการเขียนใหม่"
สตีเฟนเอ Lowe

2
ฉันพูดว่าขี้เกียจเขียนดีในครั้งแรกดังนั้นคุณไม่ต้องกลับไปทบทวนอีกครั้งในภายหลัง
Blrfl

ประโยคที่สามทำให้วันของฉัน
Christopher Francisco

10

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

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

ในฐานะที่เป็นนักพัฒนาซอฟต์แวร์ที่เราได้รับการติดดังนั้นในการทำสิ่งที่ถูกต้องและทำความสะอาดเป็นครั้งแรกที่เราไม่ได้ตระหนักว่ามันไม่ได้เป็นรหัสที่เรากำลังส่งมอบมันเป็นวิธีการแก้ปัญหาที่

ฉันคิดว่าการเข้ารหัสตามที่ฉันจะเขียนกระดาษ:

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


+1 คำตอบที่ดีมาก :) มันเกิดขึ้นกับฉันมากในวันแรกดังนั้นการกระโดดในโครงการขนาดใหญ่อาจทำให้เกิดสิ่งเดียวกัน ... นั่นคือสิ่งที่ฉันกลัว
JackLeo

"ในฐานะนักพัฒนาซอฟต์แวร์เราได้ทำตามสิ่งที่ถูกต้องและทำความสะอาดเป็นครั้งแรกจนเราไม่สามารถรู้ได้ว่ามันไม่ใช่รหัสที่เรากำลังส่งมอบมันเป็นทางออกสำหรับปัญหา" ฉันจะบอกว่าเป็นอีกทางหนึ่ง: "เราไม่มีเวลาทำถูกต้อง แต่เรามักจะมีเวลาทำมากกว่า"
Christopher Francisco

6

การสร้างต้นแบบมีสองประเภท:

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

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

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


จุดดีมากนั่นคือการแสดงต้นแบบที่แตกต่างกันฉันไม่ได้คิดเลย :) อาหารสำหรับฉันที่นี่ :)
JackLeo

เห็นด้วยกับประเด็น!
Richard Topchiy

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

5

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


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

คุณได้คะแนนที่ดี - "ทำไมต้องเขียนใหม่ถ้ามันใช้งานได้?" เป็นปัญหาสำหรับ บริษัท เล็ก ๆ หลายแห่งฉันเห็นว่ามันอยู่ในตำแหน่งงานปัจจุบันของฉันเมื่อ บริษัท ขนาดใหญ่ใช้ CMS อายุ 10 ปีที่เจ็บปวดในการอัพเกรดเป็นมาตรฐานในปัจจุบัน ... นั่นเป็นเหตุผลที่ฉันถามคำถามเช่นนี้ ไม่ต้องการทำผิดที่นี่ แม้ว่าคำตอบของคุณส่วนใหญ่บอกว่าฉันกำลังหาข้อแก้ตัวในการเขียนโค้ดเลอะเทอะ เลขที่ sunpech และ M.Sameer ได้ประเด็นของฉัน ต้นแบบคือการทำบางสิ่งบางอย่างเพื่อดูว่าโลกจะตอบสนองต่อมัน ถ้ามันใช้ได้ - ทำให้ดี
JackLeo

1

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


0

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


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

คุณช่วยแนะนำสิ่งที่คุณคิดว่าเป็นปัญหาได้หรือไม่ บางทีประโยคอาจยาวเกินไปเนื่องจากฉันเพิ่งสังเกตว่ามีเพียงสองประโยคเท่านั้น มีอะไรอีกไหม
Tom W

-1

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


-1

ทั้งสองอย่างดี ทั้งฉันชอบ พวกเขาไม่ได้ขัดแย้งกัน

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

ฉันชอบเขียนโค้ดที่สะอาดดีและผ่านการทดสอบแล้ว มันพัฒนาทักษะหลักของฉัน ฉันมักจะเลือกหนึ่งในต้นแบบและปรับปรุงมันหรือเขียนใหม่ตั้งแต่ต้น

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


-2

ฉันมักจะบอกว่าสุดขั้วมักจะไม่ดี

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

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

ฉันเขียนบทความที่อาจให้คำแนะนำบางอย่างเกี่ยวกับการเริ่มต้น: https://medium.com/@ewaldbenes/start-lean-why-its-best-to-split-your-next-coding-project-by-feature-70019290036d

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