มีหลักการหนึ่งที่ครอบคลุมถึงการควบคุมความจำเป็นในการปรับโครงสร้างและเพิ่มประสิทธิภาพทั้งในน้ำตกและเปรียว: YAGNI (คุณไม่ต้องการมัน) หลักการที่สองคือข้อพิสูจน์ของแรก: "การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด" การเข้ารหัสเทียบเท่ากับสุภาษิตทั่วไป "ศัตรูแห่งความเป็นเลิศคือความสมบูรณ์แบบ"
เรามาดูหลักการและใช้มัน คุณมีความต้องการในการสร้างอัลกอริทึม ETL ที่ใช้ไฟล์ประเภทเฉพาะแยกข้อมูลจากนั้นนำข้อมูลนั้นไปไว้ในฐานข้อมูล เป้าหมายของคุณสำหรับสัปดาห์นี้ (สำหรับจุดประสงค์ของเราไม่สำคัญว่าคุณจะอยู่ในร้าน Agile หรือ SDLC) ก็เพื่อให้สำเร็จ
คุณเป็นเพื่อนที่ฉลาดและคุณได้รับภาพรวมของภาพรวม คุณรู้ว่านี่ไม่ใช่ไฟล์ประเภทเดียวที่โครงการจะต้องมี ETL ดังนั้นคุณควรพิจารณาใช้อัลกอริธึม ETL เพื่อทำงานกับไฟล์ประเภทอื่นซึ่งมีความแตกต่างเพียงเล็กน้อยเท่านั้น การทำเช่นนี้จะเป็นการละเมิด YAGNI งานของคุณไม่ได้พัฒนาอัลกอริทึมสำหรับไฟล์อื่น มันคือการพัฒนาอัลกอริทึมสำหรับไฟล์เดียวที่จำเป็นในตอนท้ายของสัปดาห์ เพื่อให้บรรลุเป้าหมายนั้นและผ่านการทดสอบการยอมรับคุณต้องพัฒนาอัลกอริทึมนั้นและทำให้มันทำงานอย่างถูกต้อง คุณ "จะไม่ต้อง" รหัสเพิ่มเติมเพื่อให้สามารถทำงานกับไฟล์อื่น ๆ คุณอาจคิดว่ามันจะช่วยคุณประหยัดเวลาในการรวมมันเข้าด้วยกันและคุณอาจจะถูก แต่คุณอาจผิดอย่างมาก อัลกอริทึมสำหรับไฟล์อื่นอาจต้องใช้ในพื้นที่ของระบบไม่สามารถใช้รหัสของคุณได้หรือข้อกำหนดสำหรับไฟล์ใหม่อาจแตกต่างจากของคุณในแบบที่คุณไม่รู้ (ใน Agile อาจยังไม่มีข้อกำหนด) ในระหว่างนี้คุณเสียเวลาและเพิ่มความซับซ้อนของอัลกอริทึมของคุณโดยไม่จำเป็น
ตอนนี้เป็นสัปดาห์หน้าและเป็นรางวัลที่น่าสงสัยสำหรับผลงานที่ยอดเยี่ยมของคุณในอัลกอริทึมแรกคุณได้รับมอบหมายให้สร้างอัลกอริทึมสำหรับไฟล์ใหม่สองประเภท ตอนนี้คุณต้องใช้รหัสเพิ่มเติมเพื่อให้อัลกอริทึมของคุณทำงานกับไฟล์ได้มากขึ้น คุณอาจขยายอัลกอริทึมที่มีอยู่ของคุณโดยใช้รูปแบบวิธีการของเทมเพลตที่จะใช้รูปแบบพื้นฐานพร้อมกับขั้นตอนเฉพาะแต่ละไฟล์หรือคุณอาจได้รับอินเทอร์เฟซทั่วไปจากอัลกอริทึมที่มีอยู่ของคุณพัฒนาสองใหม่ วัตถุที่สามารถเลือกอัลกอริทึมที่จะใช้
ในขณะที่การพัฒนาคุณรู้ว่าคุณมีความต้องการที่ระบบสามารถประมวลผลข้อมูลดิบ 10KB ต่อวินาที คุณทำการทดสอบโหลดและค้นหาอัลกอริทึมแบบร่างเริ่มต้นของคุณจัดการกับ 8KB / s นั่นจะไม่ผ่าน AATs คุณลองดูและเห็นว่ามีโครงสร้างลูป O (my god) บางส่วนในอัลกอริทึมของคุณ คุณปรับปรุงมันและรับ 12KB / s "ค่อนข้างดี" คุณคิดว่า "แต่ถ้าฉันมีวงวนที่แย่ในรหัสฉันจะกำจัดอะไรได้อีก?" buzzคุณเพิ่งละเมิดกฎ "การเพิ่มประสิทธิภาพก่อนกำหนด" รหัสของคุณใช้งานได้และผ่านข้อกำหนดทั้งหมด คุณ "เสร็จสิ้น" จนกว่าจะถึงเวลาตามข้อกำหนดที่ได้รับการอัปเดตเพื่อให้ใช้ 15KB / s หากเกิดขึ้นเมื่อใดคุณจะดึงรหัสสำรองและค้นหาสิ่งที่ต้องปรับปรุง
ทำตามขั้นตอนง่าย ๆ นี้ในขณะที่กำลังพัฒนาไม่ว่าจะใน Agile หรือใน SDLC แบบดั้งเดิม: "ในการผ่านครั้งแรกทำให้มันทำงานได้ในการผ่านครั้งที่สองทำให้ค่อนข้างสวยในรอบที่สามทำให้เป็นของแข็ง" สิ่งนี้หมายความว่าเมื่อคุณสร้างบรรทัดของรหัสในครั้งแรกทำให้โค้ดนั้นทำงานได้อย่างถูกต้องและปราศจากข้อผิดพลาด แต่อย่าใส่ใจกับกฎการออกแบบภายในโค้ดนี้มากเกินไปสำหรับสิ่งที่คุณรู้ในตอนนี้ จะไม่สัมผัสพื้นที่นี้อีกเลย ครั้งต่อไปที่คุณเยี่ยมชมบรรทัดของรหัสนั้นคุณแค่พิสูจน์ว่าคุณผิด มันไม่ได้เป็นส่วนหนึ่งของระบบอีกต่อไป Refactor เพื่อความสะดวกในการอ่านความรัดกุมของรหัสและ / หรือหลักการ DRY (คุณอาจวางโค้ดบางส่วนเพื่อทำสิ่งที่ห้าครั้ง; refactor ที่เป็นลูปและ / หรือการเรียกเมธอด) ครั้งที่สามที่คุณทำงานในหรือรอบ ๆ บรรทัดของรหัสนั้น
O(my God)-complexity
ถ้าไม่มีอะไรทำให้ฉันหัวเราะ!