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


16

ฉันหมายถึงมี libs ที่มีประโยชน์จริงๆที่สามารถแก้ปัญหาเมื่อคุณติดขัดและไม่ทราบวิธีแก้ปัญหานี้หรือว่าด้วยความรู้ภาษาการเขียนโปรแกรมที่คุณใช้ ... เช่น Boost for C ++ หรือ JQuery สำหรับ JavaScript หรือ Spring for Java ... พวกเขาแก้ปัญหาได้ในไม่กี่วินาทีและคุณไม่สนใจว่าพวกเขาจะทำอย่างไร (แม้ว่าพวกเขาจะเขียนในภาษาเดียวกันกับที่คุณกำลังเขียนโปรแกรม) ... ดังนั้นฉันจึงสงสัยว่าฉันใช้ libs เพียงอย่างเดียวในขณะที่ไม่ถูก สามารถเขียนคำตอบสำหรับปัญหาของฉันได้ตั้งแต่เริ่มต้นหรือเป็นวิธีปฏิบัติมาตรฐานหรือไม่


พวกเขาไม่ได้แก้ปัญหาของบุคคลพวกเขาเป็นเพียงวิธีการแก้ปัญหาที่พบบ่อยในพื้นที่ที่เกี่ยวข้อง
Abimaran Kugathasan

ดังนั้นมันก็โอเคที่จะไม่ทราบวิธีการแก้ปัญหาที่พบบ่อยในพื้นที่ที่เกี่ยวข้องและพูดว่า "เพียงแค่ใช้ *** (lib ที่คุณชื่นชอบที่นี่)" มันจะแก้ไขไม่ได้ว่าพวกเขาทำมันจริง ๆ ?
Kabumbus

1
คุณเคยตั้งโปรแกรมโปรแกรมที่ปรับขนาดได้หรือไม่? สุจริตไม่มีห้องสมุดที่สมบูรณ์แบบ 100% ของเวลาและข้อบกพร่องที่เกิดขึ้น ทีนี้ถ้าข้อผิดพลาดนั้นเกิดขึ้นกับหนึ่งในหลาย ๆ ไลบรารีภายนอกที่คุณใช้และ 2 ปีตามวัฏจักรของการพัฒนาที่คุณเริ่มพบปัญหาและคุณรู้อะไรบ้าง เป็นหนึ่งในห้องสมุดที่คุณใช้! ดังนั้นอย่างตรงไปตรงมา: ไม่เหมาะสมที่จะใช้ไลบรารีเป็นตัวแก้ไขด่วน (อย่างน้อยก็ไม่ควรใช้กับซอฟต์แวร์ระดับองค์กร ฯลฯ ) เพราะมันกลายเป็นข้อ จำกัด ที่ค่อนข้างมาก
jerluc

5
@ jerluc: ห้องสมุดมาตรฐานมักจะพัฒนาและรองรับได้ดีกว่าโค้ดขององค์กรใดองค์กรหนึ่ง ตัวอย่างเช่นการเพิ่มของ shared_ptr ถือเป็น "ต้องมี" โดยทุกคนในอุตสาหกรรมที่ฉันเข้ามาติดต่อและรหัสอื่น ๆ อีกมากมายที่ได้รับจากการส่งเสริมได้อนุญาตให้โครงการที่ฉันทำงานมุ่งเน้นไปที่รายละเอียดของปัญหาไม่ใช่ ใช้เวลาทำงานกับสิ่งที่สำคัญน้อยกว่าที่ทำไปแล้ว คุณสามารถประสบปัญหาในบรรทัดดังนั้นคุณควรเลือกไลบรารีที่คุณเลือก แต่โดยทั่วไปแล้วจะดี ซินโดรม "ไม่พัฒนาที่นี่" ไม่ดีแม้ว่า
TZHX

@ TZHX ฉันคิดว่าฉันควรจะมีความชัดเจนมากขึ้นในการบอกว่าสิ่งที่ฉันกล่าวนำไปใช้กับห้องสมุดส่วนใหญ่ซึ่งอาจทำสิ่งต่าง ๆ เช่นการห่อสิ่งที่อาจถือเป็นรหัส "แผ่นจาน" มันสมเหตุสมผลที่จะเชื่อใจ "wheel invented" โดยไม่เขียน IO wrappers (เมื่อไลบรารี่มีไว้สำหรับ wrappers ดังกล่าว) แต่มันก็ไม่สมเหตุสมผลที่จะเชื่อใจใน เวทมนตร์ของกล่องดำบางชนิดและทำงานในสิ่งที่คุณต้องการในขณะนั้น
jerluc

คำตอบ:


22

ตกลงหรือไม่ที่จะไม่เข้าใจวิธีแก้ปัญหาด้วยตนเองและใช้ห้องสมุดแทน

โดยทั่วไปแล้วไม่ใช่เลย

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

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

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


13

เมื่อcomputerworld.com.auถามBjarne Stroustrup "คุณมีคำแนะนำใด ๆ สำหรับโปรแกรมเมอร์ที่กำลังมาแรงหรือไม่?"
และเขาตอบ"รู้พื้นฐานของวิทยาศาสตร์คอมพิวเตอร์: อัลกอริทึมสถาปัตยกรรมเครื่องโครงสร้างข้อมูล ฯลฯ ไม่เพียง แต่สุ่มคัดลอกเทคนิคจากแอปพลิเคชันไปยังแอปพลิเคชันรู้ว่าคุณกำลังทำอะไรมันทำงานได้ดีและทำงานอย่างไรอย่าคิดว่าคุณ รู้ว่าอุตสาหกรรมจะเป็นอย่างไรในเวลาห้าปีหรือสิ่งที่คุณกำลังทำอยู่ดังนั้นรวบรวมผลงานทั่วไปและทักษะที่เป็นประโยชน์ลองเขียนโค้ดที่มีหลักการดีกว่าทำงานเพื่อทำ "การเขียนโปรแกรม" ของกิจกรรมระดับมืออาชีพและ กิจกรรมการแฮ็ก "ระดับต่ำ" น้อย (การเขียนโปรแกรมยังเป็นงานฝีมือ แต่ไม่ใช่แค่งานฝีมือ) เรียนรู้จากคลาสสิกในภาคสนามและตำราเรียนขั้นสูงที่ดีกว่า; ไม่พอใจกับวิธีการย่อยที่ง่าย มัคคุเทศก์และเอกสารออนไลน์ - มันตื้นมาก "
หวังว่ามันจะชี้แจงข้อสงสัยของคุณเกี่ยวกับสิ่งที่จำเป็นสำหรับTrue Programmerและสิ่งที่จำเป็นสำหรับทุกคนที่จะเป็นหนึ่ง


4
+1 - ฉันคิดว่ามันสำคัญที่จะต้องทราบว่า - ในขณะที่ฉันเห็นด้วย 100% กับ Stroustrup - OP ไม่ควรได้รับความคิดที่ว่านี่หมายความว่าเขาควรบูรณาการล้อในทุกสิ่งที่เขาทำ เหตุผลหลักที่การศึกษาวิทยาศาสตร์คอมพิวเตอร์เกี่ยวข้องกับการนำคลาส String และ MergeSort และอัลกอริธึมอื่น ๆ มาใช้เพื่อให้เมื่อเราใช้ห้องสมุดที่มีอยู่ในภาษาที่เราเลือกเราจะเข้าใจสิ่งที่เกิดขึ้น จัดการกับห้องสมุดที่เพียงพอด้วยความเข้าใจที่ดีเกี่ยวกับรากฐานและสามารถทำนายสิ่งที่อยู่ภายใต้ส่วนหัวของไลบรารี X, Y หรือ Z ได้
ค่อนข้างมาก

มาในรูปแบบคนที่ต้องการหลายสิบย่อหน้าในการวิเคราะห์อย่างละเอียดพิสูจน์และอธิบายว่าทำไมแบรนด์และรสชาติของชาจึงทำให้ความสนใจของเขาป่องๆในขณะที่รอคำถามจากคำถามเริ่มต้น แต่ฉันยังรักเขาอยู่!
Filip Dupanović

1
ตรงไปตรงมาฉันรู้มากมายเกี่ยวกับอัลกอริทึมสถาปัตยกรรมเครื่องโครงสร้างข้อมูลและสิ่งอื่น ๆ มากมาย นี่ไม่ได้หมายความว่าฉันเข้าใจว่าห้องสมุดบุคคลที่สามของเราทำอะไรได้อย่างแม่นยำหรือแม้แต่ทฤษฎีทั้งหมดที่อยู่เบื้องหลัง ฉันคิดว่านี่เป็นคำแนะนำที่ดี แต่ไม่จำเป็นต้องรู้ทุกอย่างเกี่ยวกับแอปของคุณ
David Thornley

12

ใช่ - และพวกเราทุกคนทำมัน!

ตัวอย่างเช่นข้อผิดพลาดง่ายๆที่ฉันแก้ไขในโค้ดกราฟิกที่เกี่ยวข้องกับ Mac รหัสรอบข้อผิดพลาดเกี่ยวข้องกับหลายขั้นตอน:

  1. ก่อนอื่นเมธอด Objective C จัดสรรบัฟเฟอร์พิกเซลโดยใช้ malloc () และแนบกับวัตถุ Objective C
  2. ต่อมามีบางอย่างเกิดขึ้นและรูทีน C ส่งข้อความไปยังวัตถุ Objective C และดึงบัฟเฟอร์พิกเซล
  3. รูทีน C บีบอัดเนื้อหาบัฟเฟอร์พิกเซลโดยใช้ jpeglib และส่งออกผ่านการเชื่อมต่อ TCP / IP

มีเรื่องราวมากมายเกิดขึ้นที่นั่น! นี่คือบางสิ่ง:

  • ตัวจัดสรรหน่วยความจำแบบไดนามิกที่จะใช้ malloc () ซึ่งถือว่าหน่วยความจำนั้นอยู่ติดกันและอยู่ได้เป็นเส้นตรง
  • ระบบหน่วยความจำเสมือนเคอร์เนลต้นแบบของดาร์วินเพื่อจับคู่ทั้ง RAM จริงที่มีการแยกส่วนและพื้นที่ว่างในดิสก์ (ซึ่งเป็นอุปกรณ์ทางกายภาพที่แตกต่างจาก RAM) ไปสู่สิ่งที่ปรากฏในตัวจัดสรรหน่วยความจำแบบไดนามิกเช่นเดียวกับมัน
  • วัตถุประสงค์ของระบบวัตถุ C
  • ระบบข้อความรันไทม์ Mac OS และวิธีการโต้ตอบกับวัตถุ Objective C
  • การใช้งานไลบรารี jpeglib ของมาตรฐานการบีบอัดภาพ JPEG แบบแรสสูญเสียซึ่งใช้อัลกอริทึมการแปลงโคไซน์แบบแยก
  • รูทีนการเชื่อมต่อ userspace สำหรับการส่งข้อมูลซึ่งเรียกผ่านการใช้งานโปรโตคอล TCP และ IP แบบต่างๆซึ่งจะเป็นการเรียกใช้เคอร์เนลระบบปฏิบัติการ จากนั้นขึ้นอยู่กับสิ่งที่คุณได้เปิดไว้สำหรับเครือข่ายของคุณมันอาจเรียกไดรเวอร์สำหรับพอร์ต Ethernet ชิพ Wi-Fi หรือไดรเวอร์ USB หรือ Firewire ที่ผิดปกติ

คุณเข้าใจรายละเอียดทั้งหมดของวิธีการนำสิ่งเหล่านั้นไปปฏิบัติจริง ๆ หรือไม่? ฉันไม่แน่ใจ! ฉันสงสัยว่ามีคนจำนวนมากบนโลกนี้ที่ทำ - อาจไม่มีเลย ดังนั้นฉันจึงไม่ต้องกังวลกับมัน

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


1
หากฉันเข้าใจรหัสทั้งหมดที่ใช้เป็นประจำฉันต้องเข้าใจการบีบอัดข้อมูลรวมถึง JPEG การแสดงข้อมูลเชิงเรขาคณิตรวมถึงทุกอย่างใน <i> The Nurbs Book </i> ความซับซ้อนของรูปแบบ PDF และ U3D และ ล้นหลาม. ฉันได้รับการอ้างอิงเกี่ยวกับทุกสิ่ง แต่ฉันไม่เคยจะมีเรื่องแบบนี้ลูบ
David Thornley

ฉันต้องยอมรับว่าฉันไม่เข้าใจรายละเอียดทุกหน่วยการสร้างที่ฉันใช้เพื่อเขียนรหัสการทำงาน แต่ฉันรู้สึกไม่มีความสุขเมื่อเกิดเหตุการณ์นี้ ความเข้าใจหรืออย่างน้อยก็รู้ว่าถ้าฉันต้องการฉันสามารถเข้าใจองค์ประกอบพื้นฐานทำให้ชีวิตง่ายขึ้นมาก ฉันดีใจที่รู้ว่าตัวจัดสรรจัดสรรทำงานอย่างไรใช้หลักการใดในการบีบอัดภาพ JPEG ทำงานของ TCP / IP ได้อย่างไรอาจใช้หน่วยความจำเสมือนได้อย่างไรใช้งาน CPU อย่างไร ฯลฯ การมีรายละเอียดระดับต่ำเหล่านี้จะหมดไป เป็นสิ่งที่ดี แต่ไม่สามารถเข้าถึงรายละเอียดได้รู้สึกแย่จริงๆ ...
Pierre Arnaud

5

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

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

นอกจากนี้เรามักจะแก้ปัญหาโดยการสรุปส่วนที่ยากอยู่แล้วทำไมมันไม่เป็นเช่นนั้น?


5

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


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

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

5

ขึ้นอยู่กับคุณจริงๆ

สิ่งที่ดีที่สุดที่คุณเข้าใจเครื่องมือที่คุณทำงานด้วยดีกว่าที่คุณสามารถใช้ประโยชน์จากพวกเขา

ตัวอย่างเช่นฉันไม่ค่อยใช้ jQuery แต่เมื่อฉันต้องรู้ว่าจะใช้ประโยชน์จากอะไรได้บ้างและฉันจะทำให้มันอยู่ร่วมกับกรอบอื่น ๆ เช่น Mootools ได้อย่างไร

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


5

เป็นสิ่งสำคัญที่จะต้องรู้อาณาจักรของคุณและส่วนหนึ่งของกระบวนการ

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

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

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


2

จากประสบการณ์ของฉัน: เนื่องจากคุณไม่สามารถกำจัดการพึ่งพาห้องสมุดคุณและทีมของคุณควรรู้พอที่จะแก้ปัญหาได้

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

สิ่งที่ฉันต้องการเพิ่มที่นี่คือ "การพึ่งพา" ในฐานะชุมชนเราทุกคนต้องพึ่งพาผู้อื่น เรายืนบนไจแอนต์เพื่อสร้างแอปพลิเคชันของเรา: Java, .NET, API ... และเราเชื่อมั่นในไจแอนต์เกี่ยวกับงานของพวกเขา; เพราะมันใช้ได้ผลกับคนจำนวนมาก หากคุณมีปัญหาเกี่ยวกับเฟรมเวิร์กหรือ API มีโอกาสที่คนอื่นจะต้องเผชิญกับมันที่ไหนสักแห่งและมีวิธีแก้ปัญหา / แก้ไข

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

เพื่อรับมือกับความเป็นไปได้นั้นฉันคิดว่ามันมีทางออก: เพราะโปรแกรมเมอร์ส่วนใหญ่สามารถจับ "การทำงานของพื้นผิว" ของห้องสมุดได้และบางครั้งเราก็ต้องการคนที่มีความเข้าใจเป็นอย่างดี: ให้แบ่งทีมเพื่อทำสิ่งนั้น การพยายามที่จะประกอบด้วยทีมที่แต่ละคนมีความเชี่ยวชาญเกี่ยวกับห้องสมุดที่มีประโยชน์ / เครื่องมือ / "ชุดทักษะ" ที่เกี่ยวข้อง : 1,2คนมีประสบการณ์ที่ดีเกี่ยวกับ jQuery คนหนึ่งมีความเชี่ยวชาญด้านฐานข้อมูล ... ซึ่งจะช่วยลดความเสี่ยงได้มาก


2

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

เมื่อโทร Quicksort คุณควรทราบเกี่ยวกับพฤติกรรมของกรณีที่เลวร้ายที่สุด ผู้โจมตีอาจสามารถฉีดข้อมูลเคสที่แย่ที่สุดและทำการ DoS ได้

เมื่อเรียกไลบรารีการบีบอัดคุณควรทราบว่าเมื่อบางข้อมูลบีบอัดข้อมูลให้น้อยลงไบต์นั้นจะต้องมีข้อมูลที่ "บีบอัด" ถึงไบต์มากกว่าเดิม ดังนั้นเมื่อสมมติฐานของคุณคือบัฟเฟอร์เอาต์พุตต้องการเพียงขนาดของข้อมูลอินพุตเนื่องจากมันบีบอัด [ให้น้อยกว่าไบต์] ดังนั้นจึงมีบัฟเฟอร์ล้นที่รอให้เกิดขึ้น

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


1
การจัดสรรบัฟเฟอร์ขนาดคงที่สำหรับสิ่งใด ๆคือบัฟเฟอร์ล้นที่รอให้เกิดขึ้น ดีกว่าการใช้ภาษาที่รองรับอาเรย์แบบไดนามิกและปล่อยให้ callee จัดการบัฟเฟอร์ของมันเอง
Mason Wheeler

1

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

หนึ่งในสิ่งที่ยากในการเขียนโปรแกรมคือการเอาชนะสิ่งล่อใจเพื่อแก้ไขปัญหาด้วยตัวเอง


1

มันโอเค แต่มันอันตราย ตามหลักปฏิบัติทั่วไปเราควรรู้จักการทำงานในสิ่งที่เขาพัฒนา


1

Kinda ...

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

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

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

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

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