Список чтения для научного программиста
Я работаю, чтобы стать научным программистом. У меня достаточно опыта работы в Math and Stat, но у меня недостаточно опыта программирования. Мне было очень трудно научиться использовать язык для научного программирования, потому что большая часть ссылки для SP близка к тривиальной.
Моя работа включает статистическое/финансовое моделирование, и ни одна из них не имеет модели физики. В настоящее время я широко использую Python с numpy и scipy. Сделано R/Mathematica. Я достаточно знаю C/С++ для чтения кода. Нет опыта в Fortran.
Я не знаю, является ли это хорошим списком языков для научного программиста. Если это так, то какой хороший список чтения для изучения синтаксиса и шаблона проектирования этих языков в научных настройках.
Ответы
Ответ 1
На каком-то этапе вам понадобится арифметика с плавающей запятой. Трудно сделать это хорошо, менее сложно сделать это грамотно, и легко сделать это плохо. Эта статья обязательна:
Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой
Ответ 2
Я настоятельно рекомендую
Научно-технический С++: введение с использованием передовых методов и примеров Бартоном и Накманом
Не откладывайте его по возрасту, это отлично. Числовые рецепты на вашем любимом языке (при условии, что C, С++ или Fortran) являются компромиссными и превосходными для обучения, а не всегда лучшим алгоритмом для каждой проблемы.
Мне также нравится
Параллельные научные вычисления в С++ и MPI: бесшовный подход к параллельным алгоритмам и их реализация Karniadakis
Чем быстрее вы начнете параллельные вычисления, тем лучше.
Ответ 3
Мое первое предложение состоит в том, что вы смотрите на 5 лучших университетов для своей конкретной области, посмотрите, чему они учат, и что профессора используют для исследований. Это то, как вы можете найти соответствующий язык/подход.
Также рассмотрите fooobar.com/questions/18989/....
Вы занимаетесь статистическим/финансовым моделированием? Я использую R в этом поле сам, и он быстро становится стандартом для статистического анализа, особенно в социальной науки, но и в финансах (см., например, http://rinfinance.com). Matlab, вероятно, все еще широко используется в промышленности, но у меня есть смысл, что это может измениться. Я бы вернулся только на С++ в крайнем случае, если производительность является основным фактором.
Посмотрите на эти связанные вопросы, чтобы помочь найти материалы для чтения, связанные с R:
С точки зрения книжных рекомендаций, касающихся статистики и финансов, я по-прежнему считаю, что лучший общий вариант Дэвид Рупперт "Статистика и финансы" (здесь вы можете найти большую часть кода R и авторский сайт имеет код matlab).
Наконец, если ваши научные вычисления не являются статистическими, то я на самом деле думаю, что Mathematica - лучший инструмент. По-видимому, это очень мало упоминается среди программистов, но это лучший инструмент для чисто научных исследований, на мой взгляд. Он имеет гораздо лучшую поддержку таких вещей, как интеграционные и дифференциальные уравнения с частными производными, которые Matlab. У них есть хороший список книг на веб-сайте вольфрама.
Ответ 4
С точки зрения языков, я думаю, что у вас хороший охват. Python отлично подходит для экспериментов и прототипирования, Mathematica хорош для помощи в теоретических материалах, а C/С++ - там, где вам нужно делать серьезное хрустение.
Я также мог бы предложить вам оценить знание языка ассемблера, а также функциональный язык (например, Haskell), а не использовать его, а скорее из-за того, какое влияние они оказывают на ваши навыки программирования и стиль, а также на концепции они приносят вам домой. В один прекрасный день они могут пригодиться.
Я также счел бы жизненно важным узнать о параллельном программировании (параллельном/распределенном), поскольку это единственный способ получить доступ к вычислительной мощности, которая иногда необходима для научных проблем. Воздействие функционального программирования было бы весьма полезным в этом отношении, действительно ли вы используете функциональный язык для решения проблемы.
К сожалению, мне нечего предложить в чтении, но вы можете найти Руководство для инженеров и инженеров по цифровой обработке сигналов полезно.
Ответ 5
Я научный программист, который только что вышел на поле в последние 2 года. Я участвую в более биологии и физическом моделировании, но я уверен, что то, что вы ищете, очень похоже. В то время как я обращался к работам и стажировкам, было две вещи, о которых я не думал, было бы так важно знать, но вызвало у меня недостаток в возможностях. Одним из них был MATLAB, о котором уже упоминалось. Другой был дизайн базы данных - независимо от того, в какой области SP вы находитесь, вероятно, будет много данных, которые нужно каким-то образом управлять.
Книга Дизайн базы данных для простых смертных Майкла Эрнандеса была рекомендована мне как хорошее начало и помогло меня много в моей подготовке. Я также хотел бы убедиться, что вы хотя бы поняли некоторые базовые SQL, если вы этого еще не сделали.
Ответ 6
Я бы предложил любую полезную книгу из числовых книг рецептов (выбрать язык).
В зависимости от языков, которые вы используете, или если вы будете делать визуализацию, могут быть другие предложения.
Еще одна книга, которая мне очень нравится: Объектно-ориентированная реализация численных методов, Дидье Бессет. Он показывает, как делать многие уравнения в Java и smalltalk, но что более важно, так это то, что он делает фантастическую работу, помогая показать, как оптимизировать уравнения для использования на компьютере и как справляться с ошибками из-за ограничений на компьютере.
Ответ 7
Книга Дональда Кнута по полусемерным алгоритмам.
Ответ 8
MATLAB широко используется в разработке для разработки, быстрой разработки и даже для производственных приложений (в моем текущем проекте есть DLL, сгенерированная MATLAB, для выполнения некоторых сложных хрустальных операций, которые были проще сделать, чем в нашем родном С++, а наши FPGA используют Сгенерированные MATLAB ядра для обработки сигналов тоже, что намного проще, чем кодирование вручную в VHDL). Там также есть финансовый инструментарий для MATLAB, который может вас заинтересовать.
Это не означает, что MATLAB - лучший выбор для вашей области, но, по крайней мере, в технике, он широко используется и никуда не собирается.
Ответ 9
Одной из проблем, с которыми сталкиваются научные программисты, является сохранение репозитория кода (и данных), который другие могут использовать для воспроизведения ваших экспериментов. По моему опыту это умение, не требуемое в коммерческой разработке.
Вот несколько показаний по этому поводу:
Это в контексте вычислительной биологии, но я полагаю, что это относится к большинству научных программ.
Также посмотрите Python Scripting for Computational Science.
Ответ 10
Хорошо, вот мой список книг, которые я использовал для той же цели:
Численные методы для ученых и инженеров
Численные рецепты 3-е издание: искусство научных вычислений
CUDA по примеру: введение в программирование общего назначения GPU
Использование OpenMP: портативное параллельное программирование с параллельной памятью (научное и инженерное вычисление)
Параллельное программирование на C с MPI и OpenMP
Дональд Кнут: Семинумерные алгоритмы, том 2 "Искусство компьютерного программирования"
Также я обнаружил, что в последнее время я использовал R, а не Python.
Ответ 11
Для общего С++ в научных средах, Modern С++ Design от Andrei Alexandrescu, вероятно, является стандартной книгой об общих шаблонах проектирования.
Ответ 12
Как только вы закончите работу, я настоятельно рекомендую прочитать этот blog.
В нем описывается использование шаблонов С++ для обеспечения типа безопасных блоков. Например, если вы умножаете скорость по времени, вы получаете расстояние и т.д.
Ответ 13
Чтение исходного кода также помогает. В этом смысле Python велик. Я узнал огромное количество информации, просто выкапывая исходные коды научных инструментов Python. Помимо этого, ваши списки рассылки ваших любимых инструментов и форумы могут еще больше повысить ваши навыки.
Ответ 14
это может быть полезно: природа математического моделирования
Ответ 15
Дональд Кнут: Семинумерные алгоритмы, том 2 Искусство компьютерного программирования
Press, Teukolsky, Vetterling, Flannery: Numerical Recipes in С++ (книга велика, просто остерегайтесь лицензия)
Современный дизайн С++
и иметь gander в исходном коде для Научная библиотека GNU.
Ответ 16
Написание научного программного обеспечения: руководство к хорошему стилю - хорошая книга с общим советом для современного научного программирования.
Ответ 17
Для Java я рекомендую посмотреть Unit-API
Реализация - это Eclipse UOMo (http://www.eclipse.org/uomo) или JScience.org(работа над Unit-API, ранее реализуемые JSR-275 существуют)