ในฐานะผู้เริ่มต้นฉันควรจะสร้างห้องสมุดของตัวเองโดยใช้ห้องสมุดบุคคลที่สามหรือไม่?


12

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

บางโครงการ (เช่นกรอบเว็บเช่น Django) อาจมีขนาดใหญ่เกินไปสำหรับแนวทางนี้ แต่โครงการอื่น ๆ (เช่นโปรแกรมรวบรวมข้อมูลเว็บไลบรารีกราฟตัวแยกวิเคราะห์ HTML) เป็นไปได้

ฉันกังวลว่าการพึ่งพาห้องสมุดของบุคคลที่สามจะทำให้การเติบโตของฉันล่าช้า

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


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

2
คุณสร้างความแตกต่างอะไรระหว่าง "ผู้รวบรวมห้องสมุด" และ "โปรแกรมเมอร์" ใน 30 ปี - แม้กระทั่งการควบคุมอุปกรณ์ชิพระดับฝังตัว - ฉันไม่เคยทำงานโดยไม่ใช้ห้องสมุด คุณอธิบายความแตกต่างนี้ได้ไหม
S.Lott

ใช้ถ้อยคำไม่ดี มีการแก้ไข
MikeRand

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

คำตอบ:


12

นี่เป็นการปิดการซื้อขายเสมอ

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

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

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

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

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

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


กรอบที่ยอดเยี่ยมสำหรับการคิดเกี่ยวกับปัญหา ชื่นชมมาก
MikeRand

8

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

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

  • HTML ที่มีรูปแบบไม่ถูกต้อง
  • การเข้ารหัสอักขระหลายตัว (ทั้งโลกไม่ได้ทำงานบน ASCII)
  • ลิงค์ที่สร้างขึ้นหรือแก้ไขโดย JavaScript
  • ลิงก์ไปยังไฟล์ไบนารีหลายกิกะไบต์
  • ประเภท mime ไม่ถูกต้อง
  • หยุดทำงานในช่วงกลางของการรวบรวมข้อมูล
  • น้ำมันดิน
  • ที่ปรึกษา SEO
  • ไมโครซอฟท์

6

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

นั่นเป็นเท็จ

การพึ่งพาห้องสมุดของบุคคลที่สามจะช่วยสอนวิธีการทำงานของห้องสมุดที่ดี

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

ฉันใช้เวลาหลายชั่วโมงในการทำความสะอาดสิ่งเหล่านั้น


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

ต้องบอกว่ามีเป็นประโยชน์ต่อการศึกษาของ API ที่มีอยู่ :)
Demian เบรชต์

2
@ Dessert Brecht: "บางครั้งห้องสมุดบุคคลที่สามเขียนได้แย่และสามารถสอนนิสัยที่ไม่ดีได้" ในขณะที่สิ่งนี้อาจเป็นจริงโครงการโอเพ่นซอร์สส่วนใหญ่จะได้รับการตรวจสอบอย่างหนักจากชุมชนของผู้ใช้และความคิดที่ไม่ดี นอกจากนี้ "การเขียนไม่ดี" คือการตัดสินที่ n00b ไม่สามารถทำได้อย่างมีประสิทธิภาพ
S.Lott

@ S.Lott: ดีกล่าวว่า (Re: n00b) :) และผมคิดว่าคุณต้องการเพียงแค่จะต้องระมัดระวังเกี่ยวกับการที่ห้องสมุดของบุคคลที่ 3 คุณมองไปที่ขณะที่บางคนมีมากขนาดเล็ก (ถ้ามี) ชุมชน ยกตัวอย่างเช่นโปรเจ็กต์แบบสุ่มบน GitHub อาจเริ่มนำคุณไปสู่เส้นทางที่ผิด
Demian Brecht

2
@Dessert Brecht: คุณไม่สามารถพัฒนาการตัดสินใด ๆ จนกว่าคุณจะได้เห็นห้องสมุดที่หลากหลาย ไม่มีวิธีที่เป็นไปได้ในการ "กรองล่วงหน้า" ห้องสมุดสำหรับ n00b ที่จะใช้ มันเป็นห้องสมุดทั้งหมดหรือไม่มีห้องสมุด
S.Lott

4

ประโยคนี้ซึ่งเป็นประโยคแรกมีปัญหาอย่างมีเหตุผลสำหรับฉัน:

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

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

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

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

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


1

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


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