มันถือว่าขี้เกียจหรือเปล่าถ้าฉันใช้พีชคณิตเชิงเส้นสำหรับ C ++?


11

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

เมื่อพิจารณาจากหลักสูตรวิทยาลัยจำนวนมากที่อยู่ใน C ++ จะใช้แพคเกจพีชคณิตเชิงเส้น (อาร์มาดิลโล) ที่มีไวยากรณ์คล้ายกับ MATLAB หรือไม่?

ฉันกำลังเขียนอัลกอริธึมทางพันธุกรรมขึ้นมาในขณะนี้และในขณะที่มันทำงานได้อย่างรวดเร็วใน MATLAB มันใช้เวลานานมากใน C ++ โดยไม่ต้องใช้แพ็คเกจเหล่านี้

มันทำงานอย่างไรในชีวิตจริง คุณอนุญาตให้ใช้แพ็คเกจใด

ตัวอย่างเช่นฉันไม่ต้องการสร้างความรู้ C ++ ของฉันด้วยตัวนิ่มและไม่มีความรู้เชิงลึกเกี่ยวกับแพ็คเกจอื่น ๆ ที่ใช้กันอย่างแพร่หลายเช่น "vector.h" "อัลกอริทึม" "รายการ" เป็นต้น


9
คุณได้รับอนุญาตให้ใช้สิ่งใดก็ตามที่มีใบอนุญาตที่เข้ากันได้กับโครงการของคุณ มิฉะนั้นคุณจะเสียเวลา ความขี้เกียจเป็นสิ่งที่ดี
Richard Tingle


สมมติว่าหลักสูตรของคุณรวมถึงพวกเขาฉันสงสัยว่าการใช้พีชคณิตเชิงเส้นในตัวมันจะป้องกันคุณจากการเรียนรู้ <vector>, <algorithm> และ <list>
Brandin

@RichardTingle: อนุญาตให้ใช้สิ่งใดก็ได้ตราบเท่าที่ผู้บังคับบัญชาไม่ได้ห้ามมัน ;-)
Doc Brown

เปลี่ยนlazyเป็นsensibleชื่อเรื่องของคุณและคำตอบคือ "ใช่" (สมมติว่าคุณกำลังทำงานที่เกี่ยวข้องกับพีชคณิตเชิงเส้นแน่นอน)
Jerry Coffin

คำตอบ:


21

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

ข้อดีของการใช้รหัสซ้ำคือ:

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

มีบางสิ่งที่ต้องพิจารณา:

  • อนุญาตให้ใช้สิทธิ์ ผู้เขียนรหัสที่คุณต้องการใช้ซ้ำถือลิขสิทธิ์และคุณไม่สามารถใช้รหัสโดยไม่ได้รับอนุญาต ไลบรารี่จะมาพร้อมกับใบอนุญาตที่บอกคุณว่าคุณสามารถทำอะไรกับพวกเขาได้บ้างและหากคุณต้องการใช้ไลบรารี่คุณต้องปฏิบัติตามไลเซนส์ Armadillo อยู่ภายใต้ Mozilla Public License 2.0 ซึ่งหมายความว่าคุณสามารถใช้งานได้อย่างอิสระ
  • บูรณาการ หากโครงการของคุณมีขนาดใหญ่ขึ้นอาจเป็นการยากที่จะรวมห้องสมุดบุคคลที่สามเข้าด้วยกัน ขึ้นอยู่กับปริมาณการใช้งานที่คุณได้รับจากห้องสมุดอาจไม่คุ้มค่า
  • การกระจาย หากไลบรารีมีให้บริการใน DLLs เท่านั้นหรือต้องการการลงทะเบียนกับระบบ แต่วิธีการแจกจ่ายของคุณจะต้องประกอบด้วย "คัดลอกไฟล์ที่เรียกใช้งานได้ที่อื่น" คุณอาจไม่สามารถใช้ห้องสมุดได้

ในฐานะที่เป็นคำพูดไปในโปรแกรมเมอร์ความเกียจคร้านเป็นคุณธรรม


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

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

1

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

เมื่อคุณทำโครงการการเขียนโปรแกรมในชีวิตจริงคุณไม่ได้เขียนโค้ดเพื่อช่วยในการเรียนรู้แนวคิด / ความรู้ คุณกำลังพยายามผลิตผลิตภัณฑ์ทางวิศวกรรม วิศวกรรมไม่ได้เกี่ยวกับการประดิษฐ์ แต่การสร้างบนรากฐานที่วางโดยผู้อื่นแล้วเพื่อตอบสนองความต้องการในทางปฏิบัติโดยเฉพาะ มีคำกล่าวว่าการเขียนโปรแกรมคือ 80% การอ่าน / นำไลบรารี / รหัสของผู้อื่นมาใช้ซ้ำและ 20% เป็นการเขียนของคุณเอง อาจจะพูดเกินจริงเล็กน้อย แต่คุณจะได้รับวิญญาณ

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

ทำให้ความแตกต่างชัดเจนและคุณจะเข้าใจสิ่งที่คุณทำ

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