Các mẫu thiết kế bằng văn bản phần mềm số trong C ++


13

Tôi đang tìm kiếm tài nguyên về các mẫu và nguyên tắc thiết kế cho phần mềm số, có khả năng nhưng không nhất thiết phải tập trung vào các cách tiếp cận hướng đối tượng cho mã số.

Tôi biết về văn bản, Viết phần mềm khoa học: Hướng dẫn về phong cách tốt , nhưng điều này vẫn giải quyết rất nhiều vấn đề như các vấn đề nổi, cách thức và thời điểm tối ưu hóa, v.v.

Tôi đang tìm kiếm thông tin về bức tranh lớn hơn về thiết kế mã số, chứ không phải bất cứ thứ gì liên quan đến thuật toán và những thứ tương tự.

Tôi hy vọng có tài nguyên cho việc này, và người ta sẽ không đi qua thư viện sau thư viện, đặc biệt là vì không có hướng dẫn nào để thiết kế chính xác một cách khôn ngoan, ngoài kiến ​​thức của tôi về các thành ngữ và thực hành tốt trong C ++.

(Đây không phải là ngôn ngữ cụ thể, nhưng nếu có bất kỳ nội dung cụ thể về ngôn ngữ nào, tôi thích C ++ hơn.)


Tôi thường nghĩ về việc viết một cuốn sách như vậy; nhưng phạm vi của các phương pháp khả thi là rất lớn (và phụ thuộc mạnh mẽ vào kỹ thuật số chính + miền vấn đề) và những gì cần thiết giống như một cuốn bách khoa toàn thư. Ngoài ra, không một người nào có thể nắm bắt được tất cả các khả năng. Điều tốt nhất có thể làm nếu tuân theo thực tiễn phần mềm truyền thống luôn ghi nhớ sự phát triển phần cứng. Kỹ thuật và lĩnh vực quan tâm của bạn là gì?
Biswajit Banerjee

2
Một tài liệu tham khảo hữu ích khác không hoàn toàn nhắm đến là "Tính toán hiệu quả trong Vật lý" của Anthony Scopatz và Kathryn Huff.
Brian Borchers

@BrianBorchers Hừm, có vẻ như một nửa trong phần giới thiệu về Python và sau đó tập trung vào các công cụ phát triển.
user1997744

Câu trả lời:


8

Đã phát triển phần mềm số trong 20 năm nay, tôi thấy rằng có lẽ chúng ta đã sử dụng phần lớn các mẫu thiết kế được mô tả trong Sách của Gang of Four ( xem tại đây ). Vào cuối ngày, phần mềm số cũng chỉ là phần mềm phức tạp, quy mô lớn, vì vậy có lẽ không có gì đáng ngạc nhiên khi các cân nhắc thiết kế tương tự được áp dụng như trong các phần mềm khác.

Tất nhiên, có một số trường hợp thực sự đặc trưng cho thuật toán số (xem, ví dụ, ở đây ) nhưng biết tập hợp các mẫu thiết kế "truyền thống" thực sự là một khởi đầu tốt.


Tôi muốn nói thêm rằng, đối với các tính toán số trên phần cứng mới hơn, người ta nên cố gắng giảm thiểu việc theo đuổi con trỏ (mà nhiều mẫu trong Gang of Four sử dụng). Điểm khởi đầu tốt cho các thiết kế C ++ là github.com/isocpp/CppCoreGuiances/blob/master/ mẹo
Biswajit Banerjee

@BiswajitBanerjee Vâng, hướng dẫn cốt lõi của C ++ là kiến ​​thức cơ bản cho bất kỳ ai sử dụng C ++ hiện đại. Herb Sutter là một trong những biên tập viên và bạn luôn có thể tin tưởng vào lời khuyên của anh ấy.
user1997744

@ user1997744 Ý bạn là Bjarne? Herb Sutter cũng nổi tiếng với ý tưởng "luôn tự động" dẫn đến mã chỉ viết (không chắc tôi sẽ tin tưởng vào phán đoán của mình đến mức nào). Ngoài ra, các hướng dẫn cốt lõi của C ++ khác xa với kiến ​​thức cơ bản. Bạn sẽ bất ngờ.
Biswajit Banerjee

@BiswajitBanerjee Vâng, nếu họ không, tôi có thể nói rằng tôi sẽ không bao giờ để nhà phát triển tiến bộ hơn một cuộc phỏng vấn nếu họ không quen với phần lớn các hướng dẫn và sử dụng chúng (trừ trường hợp mã kế thừa có thể khiến điều đó trở nên khó khăn).
user1997744

6

Tôi đề nghị Matthew G Knepley này. Ngôn ngữ lập trình cho máy tính khoa học. bản in sẵn arXiv arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

Tôi cũng khuyên bạn nên xem và đọc các mã khác, ví dụ: tam giác, PETSc, MoAB, deal.II, fenics và nhiều mã khác. Không phải tất cả các giải pháp sẽ làm việc cho bạn, nhưng cuối cùng, đối phó và học hỏi từ những người khác (nhà phát triển có kinh nghiệm và mã thành công) là bài học tốt nhất về cách thiết kế mã.

Hơn nữa, tôi nghĩ tốt hơn là tham gia vào một dự án hiện có và trở thành người đóng góp hoặc nhà phát triển. Đôi khi bạn thích đá bắt đầu một cái gì đó mới, nhưng bạn phải có lập luận vững chắc để làm điều đó.


Lập luận của tôi để bắt đầu một cái gì đó mới là kinh nghiệm học hỏi từ nó và ý thức hoàn thành :)
user1997744 16/12/17

1
Tôi hiểu lập luận này. Tôi đã làm điều tương tự từ lâu. Bây giờ tôi nghĩ rằng nó là sớm. Có thể là ngay từ đầu tất cả chúng ta phải mắc phải những sai lầm tương tự. Để học cách đi bộ trước, bạn phải ngã. Viết mã riêng, nếu đây là lần đầu tiên, rất có thể bạn sẽ là người sử dụng mã duy nhất của bạn. Đóng góp cho mã phát triển cộng đồng, công việc của bạn có thể sẽ được người khác sử dụng và điều này sẽ mang lại cho bạn cảm giác về thành tích và sự đánh giá cao. Bạn sẽ nhận được ý kiến ​​/ đánh giá theo yêu cầu kéo, từ đó bạn sẽ học hỏi và cải thiện kỹ năng của mình.
likeask

Chà, không có thư viện cho một tính toán bí truyền cực kỳ cụ thể mà tôi cần phải làm, vì vậy cuối cùng tôi thực sự phải tự viết mặc dù tất nhiên không cần phải phát minh lại mọi thứ.
user1997744

Lời khuyên tuyệt vời để tham gia một dự án nguồn mở hiện có. Tôi đã kéo vào một mạng lưới các lập trình viên cách tốt hơn so với tôi bằng cách làm điều đó.
dùng14717
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.