«Computational Scientist» несколько широк, потому что включает людей, которые проводят численный анализ с использованием бумаги / LaTeX и проверочных концепций, людей, пишущих библиотеки общего назначения, и людей, разрабатывающих приложения, которые решают определенные классы проблем, и конечных пользователей, использующих эти Приложения. Навыки, необходимые для этих групп, различны, но есть большое преимущество в том, чтобы иметь некоторое представление о «полном стеке». Я опишу то, что я считаю критическими частями этого стека, люди, которые работают на этом уровне, конечно, должны иметь более глубокие знания.
Знание предметной области (например, физика и инженерия)
Каждый должен знать основы класса проблем, которые они решают. Если вы работаете с PDE, это будет означать некоторое общее знакомство с несколькими классами PDE (например, Пуассона, упругости и несжимаемой и сжимаемой Навье-Стокса), особенно то, какие свойства важны для «точного» захвата, а какие могут быть вплоть до дискретизации. ошибка (это информирует выбор метода относительно локальных консерваторов и симплектических интеграторов). Вы должны знать о некоторых функционалах и типах анализа, представляющих интерес для приложений (оптимизация подъема и перетаскивания, прогнозирование отказа, инверсия параметров и т. Д.).
Математика
Каждый должен иметь общее представление о классах методов, относящихся к их проблемной области. Это включает в себя основные характеристики разреженной и плотной линейной алгебры, наличие «быстрых методов», свойства пространственных и временных методов дискретизации и способы оценки того, какие свойства физической задачи необходимы для пригодности метода дискретизации. Если вы в основном конечный пользователь, эти знания могут быть очень высокого уровня.
Программная инженерия и библиотеки
Некоторое знакомство с техникой абстракции и дизайном библиотеки полезно почти каждому в вычислительной науке. Если вы работаете над методами проверки концепции, это улучшит организацию вашего кода (что облегчит кому-то еще «перевод» его в надежную реализацию). Если вы работаете над научными приложениями, это сделает ваше программное обеспечение более расширяемым и облегчит взаимодействие с библиотеками. Будьте осторожны при разработке кода, чтобы ошибки обнаруживались как можно раньше, а сообщения об ошибках были максимально информативными.
инструменты
Работа с программным обеспечением является важной частью вычислительной науки. Знание выбранного вами языка, поддержка редактора (например, теги, статический анализ) и инструменты отладки (отладчик, valgrind) значительно повышают эффективность вашей разработки. Если вы работаете в пакетной среде, вы должны знать, как отправлять задания и получать интерактивные сеансы. Если вы работаете со скомпилированным кодом, то знание компиляторов, компоновщиков и таких инструментов сборки, как Make, сэкономит много времени. Контроль версий важен для всех, даже если вы работаете в одиночку. Изучите Git или Mercurial и используйте его для каждого проекта. Если вы разрабатываете библиотеки, вы должны знать языковые стандарты достаточно полно, чтобы вы почти всегда писали переносимый код с первого раза, иначе вы будете погружены в запросы поддержки пользователей, когда ваш код не встроен в их классную среду.
Латекс
LaTeX является стандартом де-факто для научных публикаций и совместной работы. Умение работать с LaTeX важно для того, чтобы иметь возможность сообщать свои результаты, сотрудничать по предложениям и т. Д. Сценарии создания фигур также важны для воспроизводимости и происхождения данных.