TL: DR:ขึ้นอยู่กับสิ่งที่คุณพยายามแก้ไข
ฉันได้สนทนากับ Gramps ของฉันเกี่ยวกับเรื่องนี้ในขณะที่เรากำลังพูดถึงFuncและActionใน C # นั้นยอดเยี่ยม My Gramps เป็นโปรแกรมเมอร์ตัวจับเวลาที่เก่าแก่มากซึ่งอยู่รอบซอร์สโค้ดตั้งแต่ซอฟต์แวร์ทำงานบนคอมพิวเตอร์ที่ใช้พื้นที่ทั้งห้อง
เขาเปลี่ยนเทคโนโลยีหลายครั้งในชีวิตของเขา เขาเขียนโค้ดใน C, COBOL, Pascal, BASIC, Fortran, Smalltalk, Java และในที่สุดก็เริ่ม C # เป็นงานอดิเรก ฉันเรียนรู้วิธีการเขียนโปรแกรมกับเขานั่งอยู่บนตักของเขาในขณะที่ฉันเป็นเพียง devling แกะสลักโค้ดบรรทัดแรกของฉันในโปรแกรมแก้ไขสีน้ำเงินของ SideKick ของ IBM ตอนที่ฉันอายุ 20 ฉันใช้เวลาในการเขียนโค้ดมากกว่าเล่นข้างนอก
นั่นเป็นความทรงจำของฉันเล็กน้อยดังนั้นขอโทษด้วยนะถ้าฉันไม่ได้ฝึกฝนจริง ๆ ฉันค่อนข้างชอบช่วงเวลาเหล่านั้น
นั่นคือสิ่งที่เขาพูดกับฉัน:
"เราควรจะไปสู่ปัญหาทั่วไปหรือแก้ไขมันในขอบเขตที่เฉพาะเจาะจงคุณถาม? ดีนั่นคือคำถาม ... "
Gramps ใช้เวลาหยุดคิดสักครู่ในขณะที่กำหนดตำแหน่งของแว่นตาของเขาบนใบหน้าของเขา เขากำลังเล่นเกมจับคู่ 3 บนคอมพิวเตอร์ของเขาขณะที่ฟัง LP ของ Deep Purple บนระบบเสียงเก่าของเขา
“ นั่นจะขึ้นอยู่กับปัญหาที่คุณพยายามแก้ไข” เขาบอกฉัน "เป็นเรื่องน่าดึงดูดที่จะเชื่อว่ามีวิธีแก้ปัญหาเดียวที่ศักดิ์สิทธิ์สำหรับตัวเลือกการออกแบบทั้งหมดที่มีอยู่ แต่ไม่มีอยู่จริงสถาปัตยกรรมซอฟต์แวร์เป็นเหมือนชีสที่คุณเห็น"
"... ชีส Gramps?"
"ไม่สำคัญว่าคุณจะคิดอย่างไรเกี่ยวกับสิ่งที่คุณชื่นชอบจะมีใครบางคนที่คิดว่ามันเหม็น"
ฉันกระพริบตาสับสนอยู่ครู่หนึ่ง แต่ก่อนที่ฉันจะพูดอะไรก็ตามที่ Gramps ดำเนินต่อไป
"เมื่อคุณสร้างรถยนต์คุณจะเลือกวัสดุสำหรับชิ้นส่วนอย่างไร"
"ฉัน ... ฉันเดาว่ามันขึ้นอยู่กับต้นทุนที่เกี่ยวข้องและส่วนที่ควรทำฉันคิดว่า"
“ มันขึ้นอยู่กับปัญหาที่ชิ้นส่วนพยายามแก้ไขคุณจะไม่ทำยางที่ทำจากเหล็กหรือกระจกหน้ารถที่ทำจากหนังคุณเลือกวัสดุที่ดีที่สุดในการแก้ปัญหาที่คุณมีอยู่ตอนนี้สิ่งที่เป็น วิธีแก้ปัญหาทั่วไปหรือเฉพาะเจาะจงสำหรับปัญหากรณีการใช้งานอะไรคุณควรใช้วิธีการทำงานเต็มรูปแบบเพื่อให้ความยืดหยุ่นสูงสุดแก่รหัสที่จะใช้เพียงครั้งเดียวหรือไม่คุณควรเขียนรหัสพิเศษที่บอบบางมาก ส่วนหนึ่งของระบบของคุณที่จะเห็นการใช้งานมากมายและอาจมีการเปลี่ยนแปลงมากมายตัวเลือกการออกแบบเช่นนั้นเป็นเหมือนวัสดุที่คุณเลือกสำหรับชิ้นส่วนในรถยนต์หรือรูปร่างของอิฐเลโก้ที่คุณเลือกเพื่อสร้างบ้านหลังเล็ก ๆ อิฐเลโก้รุ่นใดที่ดีที่สุด?
โปรแกรมเมอร์ผู้สูงอายุเอื้อมมือไปที่โมเดลรถไฟเลโก้ตัวเล็ก ๆ ที่เขาวางไว้บนโต๊ะก่อนดำเนินการต่อ
"คุณสามารถตอบได้ว่าถ้าคุณรู้ว่าคุณต้องการอิฐก้อนนั้นอย่างไรคุณจะรู้ได้อย่างไรว่าวิธีแก้ปัญหาเฉพาะนั้นดีกว่าแบบทั่วไปหรือในทางกลับกันถ้าคุณไม่รู้ว่าคุณกำลังมีปัญหาอะไร พยายามที่จะแก้ปัญหาหรือไม่คุณไม่เห็นทางเลือกในอดีตที่คุณไม่เข้าใจ "
".. คุณเพียงแค่พูดThe Matrix? "
"อะไร?"
"ไม่มีอะไรไปต่อ"
"สมมติว่าคุณกำลังพยายามสร้างบางสิ่งบางอย่างให้กับระบบใบแจ้งหนี้แห่งชาติคุณรู้ว่า API ที่ชั่วร้ายและไฟล์ XML สามหมื่นบรรทัดนั้นมีลักษณะเป็นอย่างไรจากด้านในโซลูชัน 'ทั่วไป' สำหรับการสร้างไฟล์นั้นจะมีลักษณะอย่างไร ไฟล์ดังกล่าวเต็มไปด้วยพารามิเตอร์ที่เป็นตัวเลือกเต็มไปด้วยกรณีที่ควรใช้เฉพาะสาขาธุรกิจที่เฉพาะเจาะจงเท่านั้นสำหรับกรณีส่วนใหญ่คุณสามารถเพิกเฉยได้อย่างปลอดภัยคุณไม่จำเป็นต้องสร้างระบบใบแจ้งหนี้ทั่วไปหากสิ่งเดียวที่คุณต้องการ ' จะเคยขายคือรองเท้าเพียงแค่สร้างระบบสำหรับขายรองเท้าและทำให้มันเป็นระบบใบแจ้งหนี้ขายรองเท้าที่ดีที่สุดในที่นั่นตอนนี้ถ้าคุณต้องสร้างระบบใบแจ้งหนี้สำหรับลูกค้าประเภทใด ๆ ที่จะขายต่อในฐานะอิสระระบบการขายทั่วไปตัวอย่าง - ตอนนี้มันเป็นเรื่องที่น่าสนใจที่จะใช้ตัวเลือกเหล่านั้นที่ใช้สำหรับแก๊สอาหารหรือแอลกอฮอล์เท่านั้นตอนนี้เป็นกรณีการใช้งานที่เป็นไปได้ ก่อนที่พวกเขาจะเป็นเพียงสมมุติไม่ใช้เคสและคุณไม่ต้องการใช้อย่าใช้เคส อย่าใช้เป็นน้องชายของไม่ต้องการ "
Gramps วางรถไฟเลโก้กลับเข้าที่เดิมและหันกลับไปเล่นเกมจับคู่ที่ 3 ของเขา
"ดังนั้นเพื่อให้สามารถเลือกโซลูชันทั่วไปหรือวิธีเฉพาะสำหรับปัญหาที่กำหนดคุณต้องเข้าใจว่าปัญหานั้นคืออะไรมิฉะนั้นคุณเพียงแค่คาดเดาและคาดเดาว่างานของผู้จัดการไม่ใช่โปรแกรมเมอร์ ทุกอย่างในไอทีมันขึ้นอยู่กับ "
ดังนั้นคุณมีมัน "มันขึ้นอยู่กับ". นั่นอาจเป็นคำสองคำที่ทรงพลังที่สุดเมื่อคิดถึงการออกแบบซอฟต์แวร์