วลี“ ไม่เคยพลิกโฉมใหม่ของวงล้อ” เหมาะสำหรับนักเรียนหรือไม่


115

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

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

มันไม่ดีที่จะ "บูรณาการล้อ"? บางทีฉันคิดว่ามันผิด อาจมีวิธีที่ฉันสามารถหลีกเลี่ยงการสร้างวงล้อใหม่และในเวลาเดียวกันก็เรียนรู้อะไรมากมาย?


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

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

22
อย่างน้อยคุณก็ต้องลองทำล้อ! ไม่เช่นนั้นคุณไม่รู้ว่าทำไมคุณควรใช้ชิ้นส่วนสำเร็จรูป

59
มันไม่เหมาะสมที่จะบอกว่าแน่นอน :)
CVn

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

คำตอบ:


126

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

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

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


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

3
จุดที่ดีเกี่ยวกับคอมไพเลอร์
Chani

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

@Krelp ในขณะที่คนหนึ่งเป็นนักเรียนแนวคิดก็เป็นส่วนที่สำคัญที่สุด อาจารย์หลายคนใช้ตัวอย่างรหัสเพื่ออนุญาตทฤษฎีบริดจ์และแอปพลิเคชัน นี่เป็นประเภทของโปรแกรมที่จะสร้างห้องสมุดขึ้นใหม่ แต่เพื่อให้แน่ใจว่านักเรียนเข้าใจเนื้อหา
Jetti

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

19

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


17

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

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

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


12

การเป็นครูหรือการเขียนโปรแกรมฉันต่อสู้กับปัญหาตรงข้ามอย่างต่อเนื่อง: เมื่อใดที่ฉันจะขอให้นักเรียนคิดค้นสิ่งใหม่ ๆ

ใช้สถานการณ์ง่ายๆเหล่านี้: เรากำลังศึกษาอัลกอริทึมการเรียงลำดับและฉันจะกำหนดให้เขียนโปรแกรมที่เรียงลำดับข้อมูลบางส่วน หรือทำงานในการทำงานของวันที่และฉันขอปฏิทิน

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

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

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

หากต้องการตอบคำถามของคุณโดยตรงยิ่งขึ้นคำแนะนำสองข้อ:

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

6

แบบฝึกหัดฉันสงสัยรหัส 1,000 บรรทัดแรกที่ทุกคนเขียนมีความเป็นเอกลักษณ์

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

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

มีข้อบกพร่องบางประการ


1
+ โดยเฉพาะอย่างยิ่งสำหรับจุดสุดท้าย
Mike Dunlavey

1000 สายแรกของรหัสทุกคนเขียนมีแนวโน้มที่จะมากที่ไม่ซ้ำกันในแง่ของความผิดพลาดความคิดสร้างสรรค์
leftaroundabout

@leftaroundabout - ฉันเดาว่าฉันควร จำกัด คำสั่งนั้นให้อยู่ในบรรทัดของโค้ดที่สามารถคอมไพล์ได้
JeffO

3

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

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

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

หากคุณได้รับ "ใช้ไลบรารี่ X / เฟรมเวิร์ก Y" ให้ตัดคำดังนั้นให้นำหน้าคำถามของคุณด้วย "ฉันเขียน X เองเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้"


คำนำหน้าคำถามของคุณด้วย "ฉันเขียน X ด้วยตัวเองเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้" นี้. +1
เปิดตัว

2

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


นี่เป็นแนวคิดที่อยู่เบื้องหลังแนวคิดของ Code Katas เขียนรหัสซ้ำแล้วซ้ำอีกเพื่อปรับปรุงและเรียนรู้จากมัน ฉันจะบอกว่าแม้ในที่ทำงานการเขียนโค้ดซ้ำหลายครั้งก็เป็นเรื่องดี
Bill K

2

ในชีวิตจริงล้อจะถูกคิดค้นใหม่ซ้ำแล้วซ้ำอีก หากเรามองหาเหตุผลเราอาจพบว่าเราต้องคิดใหม่ในการเขียนโปรแกรม

ตั้งแต่ยุคสุเมเรียนหลายสิ่งเปลี่ยนไป:

  • วัสดุที่ใช้ในการสร้างล้อ: จากหินไม้โลหะคาร์บอน ...
  • ขนาดของวัตถุที่ต้องใช้ล้อ - ในขนาดนาโนเมตรสำหรับเครื่องมือทางการแพทย์และล้อเพื่อรับถ่านหินสีน้ำตาล, ขนาด 100 เมตร
  • สภาพแวดล้อมการผลิต - ทำมือหรือการผลิตอุตสาหกรรม
  • ความแม่นยำของล้อที่ต้องการ
  • สถานการณ์ที่ถูกต้องรอบวงล้อของคุณ อาจมีวงล้อที่เหมาะสำหรับงานของคุณ แต่อาจได้รับการจดสิทธิบัตร
  • ความเงางามและความเงางามสำหรับล้อรถของคุณ คาดิลแลคอาจสมควรได้รับวงล้ออื่นนอกเหนือจาก VW Golf
  • ล้อที่ดีที่สุดสำหรับรถเข็นเด็กทารกขึ้นอยู่กับพารามิเตอร์หลายประการ: ขนาดและน้ำหนักของรถเข็น (บวกกับทารก / ~ ies) สภาพภูมิอากาศราคาทรัพยากรสำหรับน้ำมันหรือยางธรรมชาติ พูดสั้น ๆ : เศรษฐศาสตร์โลก

สิ่งนั้นแปลไปสู่โลกของซอฟต์แวร์อย่างไร ดี,

  • อาจมีเว็บเซิร์ฟเวอร์ แต่น่าเสียดายที่มันเขียนด้วย PHP คุณต้องการให้เป็นภาษาที่คุณพูดได้
  • อัลกอริทึมการเรียงลำดับอาจมีขนาดใหญ่สำหรับ 10 องค์ประกอบ แต่ไม่ได้ปรับขนาดได้ถึง 1T ขององค์ประกอบ
  • คุณอาจต้องการโซลูชันที่สร้างขึ้นโดยโปรแกรมที่สอง
  • ความแม่นยำมักเป็นคำถามดิจิทัลในพื้นที่ซอฟต์แวร์หากอัลกอริทึมเรียงลำดับรายการจะถูกจัดเรียง - ไม่ได้จัดเรียงไว้เป็นส่วนใหญ่ แต่ข้างประสิทธิภาพขนาดรหัสการใช้หน่วยความจำหรือข้อ จำกัด อื่น ๆ สามารถเกิดขึ้นได้
  • สิทธิบัตรไม่ต้องการคำอธิบายเพิ่มเติมฉันเดา
  • รูปลักษณ์และความรู้สึกเป็นเหตุผลคงที่สำหรับการสร้างสิ่งใหม่ - คิดว่า dropDownList (ComboBox)
  • สถานการณ์ทางเศรษฐกิจทั่วโลกสามารถส่งผลต่อวงล้อซอฟต์แวร์ของคุณ: มันจะเป็นวงล้อเมฆวงล้อโอเพ่นซอร์สล้อเบราว์เซอร์หรือวงล้อแอพหรือไม่?
  • และแน่นอนเหตุผลที่มีชื่อเสียงที่สุดในการสร้างวงล้อของคุณเอง: คุณชอบที่จะเรียนรู้มัน

2

ฉันเป็นนักเรียนที่เพิ่งจบการศึกษา ในโรงเรียนเรา 'การเรียนรู้' asp.net และ C # ทั้งสองปีที่การศึกษาใช้เราไม่เคยพยายามสร้างระบบอีเมลของเราเองระบบเข้าสู่ระบบหรือ CMS .. ทุกอย่างเพียงแค่ลากและวางการควบคุมลงในมุมมองการออกแบบ .

เราเริ่ม 102 นักเรียน 23 ทำเสร็จแล้ว 4 คนมีงานทำ เหตุผล: คน 4 คน (รวมถึงฉัน) รู้วิธีการเขียนโปรแกรมก่อนที่เราจะเริ่มการศึกษาจริง ๆ

คนที่เหลือจะหายไป เพราะเราไม่เคย 'คิดค้นล้อ' เราไม่เคยรู้เลยว่ารหัสทำงานอย่างไร มันค่อนข้างง่ายในการสร้างระบบเข้าสู่ระบบเต็มรูปแบบด้วยการจัดการผู้ใช้ - แต่นักเรียนจากการศึกษาของฉันไม่ทราบวิธีการทำ เพราะพวกเขาไม่รู้ว่าระบบการเข้าสู่ระบบใช้งานได้จริงอย่างไร

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

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


1

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

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


1

ใช่มันเหมาะสมที่จะบอกนักเรียนว่าไม่ต้องคิดค้นใหม่ แต่จะต้องมีความเข้าใจที่ชัดเจนของความหมายสำหรับนักเรียน: เขียนสิ่งที่มีประโยชน์ต่อการมอบหมาย มันไม่ได้หมายความว่าถ้าการมอบหมายคือการเขียน bubbleort คุณคัดลอกมันออกจาก Wikipedia และไม่ได้หมายความว่าจะใช้ array.sort หรือเทียบเท่าถ้ากรอบหรือภาษาของคุณให้มัน แต่หลังจากที่คุณครอบคลุมอัลกอริธึมการเรียงลำดับต่าง ๆ เขียน bubbleort และ quicksort ของคุณเองไม่ต้องเขียนใหม่สำหรับการมอบหมายใหม่แต่ละครั้งใช้การเรียงลำดับในตัวหรือสิ่งที่คุณเขียนไม่ทำสิ่งเดิมซ้ำอีก .

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

สำหรับนักเรียนมันไม่ได้หมายความว่าอย่าเขียนสิ่งที่คนอื่นเขียน แต่หมายถึงอย่าทำซ้ำสิ่งที่คุณเชี่ยวชาญแล้ว - เวลานั้นสามารถใช้เวลากับสิ่งที่คุณไม่ได้เชี่ยวชาญได้ดีขึ้น


ยกเว้นว่าการเขียนครั้งที่ 25 เป็นแบบฝึกหัดสำหรับภาษาการเขียนโปรแกรมบางอย่างที่คุณเพิ่งเรียนรู้
leftaroundabout

1

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

  1. คุณอาจเข้าใจว่าทำไมสิ่งต่าง ๆ ถึงเป็นแบบนั้น
  2. คุณอาจปรับให้เหมาะสมและทำให้ดีขึ้น
  3. คุณอาจจะพลาดและเรียนรู้ที่จะไม่ทำสิ่งนั้น

สำหรับฉันนักเรียนไม่ควรบูรณาการล้อ แต่พยายามที่จะทำวิศวกรรมย้อนกลับ & เข้าใจความหมาย


1

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

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

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


1

คำตอบนั้นขึ้นอยู่กับว่าคุณต้องการเรียนรู้หรือสร้าง

หากการเรียนรู้คือเป้าหมาย "การสร้างวงล้อใหม่" สามารถให้ความเข้าใจและความเข้าใจที่ดีกว่าการใช้วงล้อที่มีอยู่ (ฟังก์ชั่นห้องสมุด)

แต่ถ้าการสร้างผลิตภัณฑ์ที่ซับซ้อนเป็นเป้าหมายแล้ว "การปรับแต่งล้อ" อาจต้องใช้เวลานานและจะช่วยให้เกิดการสร้างผลิตภัณฑ์ขึ้นมาเล็กน้อย

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


1

มีสองด้านสำหรับเรื่องนี้

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

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

ในที่สุดการเขียนโปรแกรมวางอยู่บนฐานทฤษฎีที่สำคัญ คุณจะต้องใช้ทั้งแบบฝึกหัดภาคปฏิบัติควบคู่ไปกับการอ่านเพื่อเรียนรู้ทฤษฎี


ฉันเห็นด้วย. นั่นเป็นสาเหตุที่มีเฟรมเวิร์กและ
ไลบรารี่

0

ฉันต้องเผชิญกับสถานการณ์เดียวกัน มันเป็นเพราะความแตกต่างในการรับรู้ในอุตสาหกรรมและนักวิชาการ

หากคุณไม่ "ประดิษฐ์วงล้อใหม่" คุณจะไม่สามารถเรียนอะไรในโรงเรียนหรือเข้าใจว่ามีอะไรทำงานได้บ้าง

ในขณะที่อุตสาหกรรมมีวัตถุประสงค์เพื่อนำผลิตภัณฑ์ออกมาในเวลาและความพยายามน้อยที่สุด

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


0

The Hacker Jargon Lexikonมีความคิดเห็นที่ดีมากเกี่ยวกับการสร้างล้อใหม่ :

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

ดังนั้นจึงเป็นการดีที่จะคิดค้นล้อใหม่ แต่ให้แน่ใจว่าคุณดูวิธีแก้ปัญหาของผู้อื่นก่อนหรือหลังทำ


0

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


-1

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


10
ฉันไม่ทราบว่าคุณเข้าเรียนโรงเรียนไหน แต่ที่ไหนฉันไปกำหนดส่งงานเป็นเรื่องธรรมดา
CVn

-2

ทำสิ่งที่ได้รับมอบหมาย / คำถาม / การสอบขอให้คุณทำ

ปีที่แล้วฉันเป็น TA สำหรับชั้นเรียนการเขียนโปรแกรม C คำถามสอบคือ 'เขียนโปรแกรมเพื่อคัดลอกไฟล์' นักเรียนหลายคนถามคำถามประเภทเดียวกัน - พวกเขาสามารถวางกระบวนการและเรียกใช้คำสั่ง OS cp ได้หรือไม่

สิ่งที่เราถามพวกเขากลับคือ 'โปรแกรมของคุณจะคัดลอกไฟล์หรือไม่'

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

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

ในการสัมภาษณ์งานความรู้เกี่ยวกับกรอบงานยอดนิยมจะช่วยคุณตอบคำถาม สร้างโครงการของคุณเองเพื่อเรียนรู้ ขอให้โชคดีกับการเรียนของคุณ


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