Конструкція моделей написання цифрового програмного забезпечення на C ++


13

Я шукаю ресурси щодо моделей дизайну та принципів чисельного програмного забезпечення, потенційно, але не обов'язково, з акцентом на об'єктно-орієнтовані підходи до числових кодів.

Мені відомо текст, написання наукового програмного забезпечення: Посібник з гарного стилю , але це все ще багато стосується таких речей, як проблеми з плаваючою точкою, як і коли оптимізувати тощо.

Я шукаю інформацію про ширшу картину проектування числових кодів, а не про те, що стосується алгоритмів тощо.

Я сподіваюсь, що для цього є ресурси, і не залишається лише переглядати бібліотеку за бібліотекою, тим більше, що немає посібника, який би міркував правильно, окрім моїх власних знань про хороші ідіоми та практики C ++.

(Це не є мовою, але якщо є якийсь певний мова, я вважаю за краще C ++.)


Я часто думав над написанням такої книги; але коло можливих підходів величезне (і сильно залежить від первинної числової техніки + проблемної області), і те, що потрібно, більше нагадує енциклопедію. Також жодна людина не може зрозуміти всі можливості. Найкраще це можна зробити, якщо слідувати традиційній практиці програмного забезпечення, маючи на увазі розробки обладнання. Яка ваша техніка та сфера інтересів?
Biswajit Banerjee

2
Ще одна корисна посилання, яка не зовсім націлена, - це "Ефективні обчислення у фізиці" Ентоні Скопатц та Кетрін Хафф.
Брайан Борчерс

@BrianBorchers Гм, здається, половина цього є вступом до Python, а потім зосереджується на інструментах розробки.
user1997744

Відповіді:


8

Розвиваючи програмне забезпечення для числення протягом 20 років, я вважаю, що ми, ймовірно, використовували більшість моделей дизайну, описаних у Книзі бандою чотирьох ( див. Тут ). Зрештою, чисельне програмне забезпечення - це просто масштабне, складне програмне забезпечення, тому, мабуть, не дивно, що такі ж дизайнерські міркування застосовуються, як і для інших програм.

Звичайно, існує ряд випадків, які дійсно є специфічними для чисельних алгоритмів (див., Наприклад, тут ), але знання "традиційного" набору моделей дизайну справді вже вдалий початок.


Я хотів би додати, що для чисельних обчислень на новіших апаратних засобах слід прагнути мінімізувати погоню за вказівниками (яку використовують багато з шаблонів банди чотирьох). Гарною відправною точкою для конструкцій C ++ є github.com/isocpp/CppCoreGuidelines/blob/master/…
Biswajit Banerjee

@BiswajitBanerjee Так, основні настанови C ++ - це базові знання для тих, хто використовує сучасне використання C ++. Герб Саттер - один із редакторів, і ви завжди можете довіряти його порадам.
user1997744

@ user1997744 Ви мали на увазі Bjarne? Герб Саттер також відомий своєю ідеєю "завжди авто", яка веде до коду, призначеного лише для запису (не впевнений, наскільки я б довіряв його судженням). Також основні настанови C ++ далеко не базові знання. Ви здивуєтесь.
Biswajit Banerjee

@BiswajitBanerjee Ну, якщо їх немає, я можу сказати, що я б ніколи не дозволяв розробнику просуватися за межі одного інтерв'ю, якби вони не були знайомі з більшістю вказівок та їх використанням (за винятком випадків, коли застарілий код може зробити це складним).
user1997744

6

Я рекомендую цього Меттью G Кноплі. Мови програмування для наукових обчислень. arXiv preprint arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

Я також раджу переглядати та читати інші коди, наприклад, трикутник, PETSc, MoAB, deal.II, феніки та багато інших. Не всі рішення працюватимуть для вас, але врешті-решт, впоратися та навчитися у інших (досвідчені розробники та успішні коди) - найкращий урок, як створити код.

Більше того, я думаю, що краще приєднатись до існуючого проекту та стати учасником або розробником. Іноді тобі подобається починати щось нове, але для цього ти маєш міцні аргументи.


Мій аргумент почати щось нове - це досвід з нього та почуття досягнень :)
user1997744

1
Я розумію цей аргумент. Я робив те ж саме давно. Зараз я думаю, що це було передчасно. Можливо, на початку все, що ми маємо робити однакові помилки. Щоб навчитися першим ходити, треба впасти. Написавши власний код, якщо це буде вперше, ви, швидше за все, будете єдиним користувачем свого коду. Вкладаючи код, розроблений спільнотою, ваша робота, ймовірно, буде використана іншими, і це дасть вам відчуття досягнення та вдячності. Ви отримаєте коментарі / огляд за запитом на виклик, звідки ви дізнаєтесь та вдосконалите свої навички.
likask

Ну, не існує бібліотеки для ультра конкретних езотеричних обчислень, які мені потрібно робити, тому, врешті-решт, я фактично повинен написати свій власний, хоча, звичайно, не потрібно все винаходити.
user1997744

Чудова порада долучитися до існуючого проекту з відкритим кодом. Я втягнувся в мережу програмістів набагато краще, ніж я цим.
користувач14717
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.