รูปแบบการออกแบบในการเขียนซอฟต์แวร์ตัวเลขใน C ++


13

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

ฉันตระหนักถึงข้อความการเขียนซอฟต์แวร์ทางวิทยาศาสตร์: คู่มือสำหรับสไตล์ที่ดีแต่สิ่งนี้ยังเกี่ยวข้องกับสิ่งต่าง ๆ มากมายเช่นประเด็นประเด็นลอยวิธีและเวลาในการปรับให้เหมาะสม ฯลฯ

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

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

(นี่ไม่ใช่ภาษาเฉพาะ แต่ถ้ามีเนื้อหาเฉพาะภาษาใด ๆ ฉันต้องการ C ++)


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

2
การอ้างอิงที่มีประโยชน์อื่นที่ไม่ได้อยู่ในเป้าหมายก็คือ "การคำนวณที่มีประสิทธิภาพในวิชาฟิสิกส์" โดย Anthony Scopatz และ Kathryn Huff
Brian Borchers

@BrianBorchers หืมดูเหมือนว่าครึ่งหนึ่งของมันนั้นอยู่ในการแนะนำ Python แล้วให้ความสำคัญกับเครื่องมือในการพัฒนา
user1997744

คำตอบ:


8

หลังจากพัฒนาซอฟต์แวร์ตัวเลขมา 20 ปีแล้วฉันพบว่าเราอาจใช้รูปแบบการออกแบบส่วนใหญ่ที่อธิบายไว้ใน Book โดย Gang of Four ( ดูที่นี่ ) ในตอนท้ายของวันซอฟต์แวร์เชิงตัวเลขเป็นเพียงซอฟต์แวร์ขนาดใหญ่และซับซ้อนเช่นกันดังนั้นจึงไม่น่าแปลกใจที่การพิจารณาแบบเดียวกันจะมีผลกับซอฟต์แวร์อื่น ๆ

แน่นอนว่ามีหลายกรณีที่เฉพาะเจาะจงกับอัลกอริธึมเชิงตัวเลข (ดูตัวอย่างที่นี่ ) แต่การรู้ชุดรูปแบบการออกแบบ "ดั้งเดิม" เป็นการเริ่มต้นที่ดีจริงๆ


ฉันต้องการเพิ่มสิ่งนั้นสำหรับการคำนวณเชิงตัวเลขบนฮาร์ดแวร์ที่ใหม่กว่านั้นเราควรพยายามลดการไล่ตัวชี้ (ซึ่งรูปแบบ Gang of Four จำนวนมากใช้) จุดเริ่มต้นที่ดีสำหรับการออกแบบ C ++ คือgithub.com/isocpp/CppCoreGuidelines/blob/master/
......

@BiswajitBanerjee ใช่แนวทางหลักของ C ++ นั้นเป็นความรู้พื้นฐานสำหรับทุกคนในการใช้ C ++ ที่ทันสมัย Herb Sutter เป็นหนึ่งในบรรณาธิการและคุณสามารถไว้วางใจคำแนะนำของเขาได้เสมอ
user1997744

@ user1997744 คุณหมายถึง Bjarne หรือเปล่า Herb Sutter มีชื่อเสียงในเรื่องความคิด "auto auto" ของเขาซึ่งนำไปสู่การเขียนโค้ดอย่างเดียว (ไม่แน่ใจว่าฉันจะเชื่อใจเขาได้มากแค่ไหน) แนวทางหลักของ C ++ นั้นยังห่างไกลจากความรู้พื้นฐาน คุณจะประหลาดใจ
Biswajit Banerjee

@BiswajitBanerjee เอ่อถ้าพวกเขาไม่ใช่ฉันบอกได้เลยว่าฉันจะไม่ปล่อยให้นักพัฒนาก้าวหน้าเกินกว่าการสัมภาษณ์เพียงครั้งเดียวหากพวกเขาไม่คุ้นเคยกับแนวทางส่วนใหญ่และใช้พวกเขา (ยกเว้นที่รหัสดั้งเดิมอาจทำให้ยุ่งยาก)
user1997744

6

ฉันแนะนำ Matthew G Knepley นี้ ภาษาโปรแกรมสำหรับการคำนวณทางวิทยาศาสตร์ arXiv preprint arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

ฉันยังแนะนำให้ดูและอ่านรหัสอื่น ๆ เช่นสามเหลี่ยม PETSc, MoAB, deal.II, fenics และอื่น ๆ อีกมากมาย วิธีแก้ปัญหาบางอย่างอาจไม่เหมาะกับคุณ แต่ในที่สุดการเผชิญปัญหาและการเรียนรู้จากผู้อื่น (นักพัฒนาที่มีประสบการณ์และรหัสสำเร็จ) เป็นบทเรียนที่ดีที่สุดในการออกแบบรหัส

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


ข้อโต้แย้งของฉันที่จะเริ่มสิ่งใหม่คือประสบการณ์การเรียนรู้จากมันและความรู้สึกของความสำเร็จ :)
user1997744

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

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

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