จากบนลงล่างเป็นวิธีที่ยอดเยี่ยมในการอธิบายสิ่งที่คุณรู้หรือเพื่อสร้างสิ่งที่คุณได้สร้างขึ้นใหม่
ปัญหาที่ใหญ่ที่สุดจากบนลงล่างคือบ่อยครั้งมากที่ไม่มี "อันดับสูงสุด" คุณจะเปลี่ยนใจเกี่ยวกับสิ่งที่ระบบควรทำในขณะที่พัฒนาระบบและในขณะที่สำรวจโดเมน จะเป็นจุดเริ่มต้นของคุณได้อย่างไรซึ่งคุณไม่รู้ (คือสิ่งที่คุณต้องการให้ระบบทำ)
บนลงล่าง "ท้องถิ่น" เป็นสิ่งที่ดี ... บางคนคิดว่าการเขียนโค้ดล่วงหน้านั้นดีมาก แต่การคิดและการวางแผนมากเกินไปไม่ใช่เพราะสิ่งที่คุณจินตนาการไม่ใช่สถานการณ์จริง (เว้นแต่คุณเคยไปที่นั่นมาก่อนนั่นคือถ้าคุณไม่ได้สร้าง แต่สร้างใหม่) จากบนลงล่างทั่วโลกเมื่อสร้างสิ่งใหม่ ๆ เป็นเรื่องไร้สาระ
การประเมินจากล่างขึ้นบนควรเป็นแนวทาง (ทั่วโลก) เว้นแต่คุณจะทราบปัญหา 100% คุณต้องการเพียงวิธีแก้ปัญหาที่ทราบแล้วเท่านั้นที่จะได้รับการเข้ารหัสและคุณไม่สนใจว่าจะมองหาวิธีแก้ปัญหาอื่น ๆ
เสียงกระเพื่อมคือการกลั่นจากล่างขึ้นบน คุณไม่เพียง แต่สร้างฐานขึ้นมาเท่านั้น แต่คุณยังสามารถสร้างรูปทรงอิฐได้ตามที่คุณต้องการ ไม่มีอะไรได้รับการแก้ไขเสรีภาพรวมทั้งสิ้น แน่นอนว่าอิสรภาพมีความรับผิดชอบและคุณสามารถทำสิ่งที่น่ากลัวด้วยการใช้อำนาจนี้ในทางที่ผิด
แต่รหัสที่น่ากลัวสามารถเขียนได้ทุกภาษา แม้แต่ในภาษาที่มีรูปร่างเหมือนกรงสำหรับจิตใจได้รับการออกแบบด้วยความหวังว่าด้วยภาษาเหล่านั้นแม้แต่ลิงก็สามารถสร้างโปรแกรมที่ดีและทำงานได้ (ความคิดผิด ๆ ในหลาย ๆ ระดับที่มันเจ็บปวดแม้เพียงแค่คิดเกี่ยวกับมัน)
ตัวอย่างของคุณเกี่ยวกับเว็บเซิร์ฟเวอร์ ตอนนี้ในปี 2555 นี่เป็นปัญหาที่ชัดเจนคุณมีรายละเอียดที่จะต้องปฏิบัติตาม เว็บเซิร์ฟเวอร์เป็นเพียงปัญหาการใช้งาน โดยเฉพาะอย่างยิ่งถ้าคุณตั้งเป้าหมายที่จะเขียนเว็บเซิร์ฟเวอร์เหมือน ๆ กับเว็บเซิร์ฟเวอร์อื่น ๆ ที่มีอยู่ในนั้นไม่มีอะไรที่ไม่ชัดเจนยกเว้นบาง minutiae แม้แต่ความคิดเห็นของคุณเกี่ยวกับ RSA ยังคงพูดถึงปัญหาที่กำหนดไว้อย่างชัดเจนพร้อมข้อกำหนดเฉพาะ
ด้วยปัญหาที่กำหนดไว้อย่างดีพร้อมข้อมูลจำเพาะที่เป็นทางการและวิธีการแก้ปัญหาที่รู้จักกันดีอยู่แล้วการเข้ารหัสจึงเป็นเพียงการเชื่อมต่อในจุดต่างๆ จากบนลงล่างก็โอเค นี่คือสวรรค์ของผู้จัดการโครงการ
ในหลายกรณีอย่างไรก็ตามไม่มีวิธีการที่รู้จักกันดีในการเชื่อมต่อจุดต่างๆ ที่จริงแล้วบ่อยครั้งที่ยากที่จะพูดแม้แต่สิ่งที่เป็นจุด
สมมติว่าคุณได้รับคำสั่งให้สั่งให้เครื่องตัดอัตโนมัติจัดเรียงชิ้นส่วนที่จะตัดให้เข้ากับวัสดุพิมพ์ที่ไม่สอดคล้องกับโลโก้ซ้ำ ๆ ในเชิงทฤษฎีอย่างสมบูรณ์ คุณจะได้รับชิ้นส่วนและรูปภาพของวัสดุที่ถ่ายโดยเครื่อง
กฎการจัดตำแหน่งคืออะไร คุณตัดสินใจ. รูปแบบคืออะไรวิธีที่จะเป็นตัวแทนมันได้หรือไม่ คุณตัดสินใจ. วิธีการจัดตำแหน่งชิ้นส่วน? คุณตัดสินใจ. ส่วนต่างๆจะเป็น "งอ" หรือไม่? ขึ้นอยู่กับว่าบางคนไม่และบางคนก็ใช่ แต่ก็ไม่มาก จะทำอย่างไรถ้าวัสดุมีรูปร่างผิดปกติเกินกว่าที่จะตัดให้เป็นที่ยอมรับได้? คุณตัดสินใจ. วัสดุม้วนเหมือนกันทั้งหมดหรือไม่ ไม่แน่นอน แต่คุณไม่สามารถบั๊กผู้ใช้ในการปรับกฎการจัดตำแหน่งสำหรับทุกม้วน ... ที่จะทำไม่ได้ ภาพอะไรบ้างที่เห็นกล้อง? วัสดุอะไรก็ตามที่อาจหมายถึง ... มันอาจเป็นสีก็สามารถเป็นสีดำบนสีดำซึ่งมีเพียงแสงสะท้อนทำให้เห็นรูปแบบ มันจะมีอะไรหมายถึงการรับรู้รูปแบบ? คุณตัดสินใจ.
ตอนนี้พยายามออกแบบโครงสร้างทั่วไปของโซลูชันสำหรับปัญหานี้และเสนอราคาเป็นเงินและเวลา เดิมพันของฉันคือแม้สถาปัตยกรรมระบบของคุณ ... (ใช่สถาปัตยกรรม) จะผิด การประมาณราคาและเวลาจะเป็นตัวเลขสุ่ม
เราใช้มันและตอนนี้มันเป็นระบบที่ใช้งานได้ แต่เปลี่ยนความคิดของเราเกี่ยวกับรูปร่างที่ดีของระบบเป็นจำนวนมากครั้ง เราได้เพิ่มระบบย่อยทั้งหมดที่ตอนนี้ไม่สามารถเข้าถึงได้จากเมนู เราเปลี่ยนบทบาทหลัก / ทาสในโปรโตคอลมากกว่าหนึ่งครั้ง อาจเป็นไปได้ว่าตอนนี้เรามีความรู้เพียงพอที่จะลองสร้างใหม่ได้ดีขึ้น
แน่นอนว่า บริษัท อื่น ๆ แก้ปัญหาเดียวกัน ... แต่ถ้าคุณไม่ได้เป็นหนึ่งใน บริษัท เหล่านี้ส่วนใหญ่อาจเป็นโครงการที่มีรายละเอียดจากบนลงล่างเป็นเรื่องตลก เราสามารถออกแบบจากบนลงล่าง คุณทำไม่ได้เพราะคุณไม่เคยทำมาก่อน
คุณอาจแก้ไขปัญหาเดียวกันได้เช่นกัน ทำงานจากล่างขึ้นบน เริ่มต้นด้วยสิ่งที่คุณรู้เรียนรู้สิ่งที่คุณทำไม่ได้และเพิ่มขึ้น
มีการพัฒนาระบบซอฟต์แวร์ที่ซับซ้อนขึ้นใหม่ไม่ใช่การออกแบบ ทุกครั้งที่มีคนเริ่มออกแบบระบบซอฟต์แวร์ที่ซับซ้อนที่ไม่ระบุตัวใหม่ขนาดใหญ่ตั้งแต่เริ่มต้น (โปรดทราบว่าโครงการซอฟต์แวร์ขนาดใหญ่ที่ซับซ้อนมีความเป็นไปได้เพียงสามประการเท่านั้น: a] ข้อมูลจำเพาะนั้นคลุมเครือ หรือ c] ทั้ง ... และบ่อยครั้งที่ [c] เป็นกรณี)
เหล่านี้เป็นโครงการขนาดใหญ่ทั่วไปที่ใช้เวลาหลายพันชั่วโมงในการสร้างสไลด์พาวเวอร์พอยท์และไดอะแกรม UML เพียงอย่างเดียว พวกเขามักจะล้มเหลวอย่างสมบูรณ์หลังจากการเผาไหม้ทรัพยากรจำนวนมากที่น่าอาย ... หรือในบางกรณีที่พิเศษมากในที่สุดพวกเขาก็ส่งมอบชิ้นส่วนของซอฟต์แวร์ที่เกินราคาซึ่งใช้เพียงส่วนเล็ก ๆ ของคุณสมบัติเริ่มต้น และซอฟต์แวร์นั้นถูกผู้ใช้เกลียดชังอย่างลึกซึ้ง ... ไม่ใช่ซอฟต์แวร์ที่คุณจะซื้อ แต่เป็นซอฟต์แวร์ประเภทที่คุณใช้เพราะคุณถูกบังคับ
นี่หมายความว่าฉันคิดว่าคุณควรคิดที่จะเขียนโค้ดเท่านั้นหรือ ไม่แน่นอน แต่ในความคิดของฉันการก่อสร้างควรเริ่มต้นจากด้านล่าง (อิฐรหัสคอนกรีต) และควรขึ้นไป ... และการมุ่งเน้นและใส่ใจในรายละเอียดของคุณควรจะ "จางลง" ในขณะที่คุณเริ่มห่างจากสิ่งที่คุณมี บ่อยครั้งที่การเลื่อนจากบนลงล่างถูกนำเสนอราวกับว่าคุณควรใส่รายละเอียดในระดับเดียวกันกับระบบทั้งหมดในครั้งเดียว: เพียงแค่ให้มันแยกทุกโหนดจนกว่าทุกอย่างจะชัดเจน ... ในโมดูลความเป็นจริงระบบย่อยจะ "เติบโต" จากรูทีนย่อย หากคุณไม่เคยมีประสบการณ์มาก่อนในปัญหาเฉพาะด้านการออกแบบระบบย่อยโมดูลหรือไลบรารีจะน่ากลัว คุณสามารถออกแบบห้องสมุดที่ดีได้เมื่อคุณรู้ว่าจะใส่ฟังก์ชั่นใดลงไป
ความคิด Lisp หลายอย่างกำลังได้รับความนิยมมากขึ้น (ฟังก์ชั่นชั้นหนึ่ง, การปิด, การพิมพ์แบบไดนามิกเป็นค่าเริ่มต้น, การเก็บขยะ, metaprogramming, การพัฒนาเชิงโต้ตอบ) แต่ Lisp ยังคงเป็นทุกวันนี้ สำหรับสิ่งที่คุณต้องการ
ตัวอย่างเช่นพารามิเตอร์คำหลักมีอยู่แล้ว แต่หากไม่มีอยู่ก็สามารถเพิ่มได้ ฉันทำมัน (รวมถึงการตรวจสอบคำหลักในเวลารวบรวม) สำหรับคอมไพเลอร์ Lisp ของเล่นที่ฉันกำลังทดลองและไม่ใช้รหัสมากนัก
ด้วย C ++ แทนสิ่งที่คุณจะได้รับมากที่สุดคือกลุ่มผู้เชี่ยวชาญ C ++ ที่บอกคุณว่าพารามิเตอร์คำหลักนั้นไม่มีประโยชน์หรือการใช้เทมเพลตที่ได้รับการสนับสนุนที่มีความซับซ้อนและไม่น่าเชื่อครึ่งหนึ่งที่จริงแล้วไม่มีประโยชน์ คลาส C ++ เป็นวัตถุชั้นหนึ่งหรือไม่ ไม่และไม่มีอะไรที่คุณสามารถทำได้เกี่ยวกับเรื่องนี้ คุณสามารถมีวิปัสสนา ณ รันไทม์หรือในเวลารวบรวม? ไม่และไม่มีอะไรที่คุณสามารถทำได้เกี่ยวกับเรื่องนี้
ความยืดหยุ่นทางภาษาของ Lisp เป็นสิ่งที่ทำให้มันยอดเยี่ยมสำหรับการสร้างจากล่างขึ้นบน คุณสามารถสร้างรูทีนย่อยไม่เพียง แต่ยังสร้างไวยากรณ์และความหมายของภาษา และในความรู้สึก Lisp ตัวเองเป็นจากล่างขึ้นบน