Подтвердить что ты не робот

Список чтения для научного программиста

Я работаю, чтобы стать научным программистом. У меня достаточно опыта работы в Math and Stat, но у меня недостаточно опыта программирования. Мне было очень трудно научиться использовать язык для научного программирования, потому что большая часть ссылки для SP близка к тривиальной.

Моя работа включает статистическое/финансовое моделирование, и ни одна из них не имеет модели физики. В настоящее время я широко использую Python с numpy и scipy. Сделано R/Mathematica. Я достаточно знаю C/С++ для чтения кода. Нет опыта в Fortran.

Я не знаю, является ли это хорошим списком языков для научного программиста. Если это так, то какой хороший список чтения для изучения синтаксиса и шаблона проектирования этих языков в научных настройках.

4b9b3361

Ответ 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. Помимо этого, ваши списки рассылки ваших любимых инструментов и форумы могут еще больше повысить ваши навыки.

Ответ 17

Для Java я рекомендую посмотреть Unit-API
Реализация - это Eclipse UOMo (http://www.eclipse.org/uomo) или JScience.org(работа над Unit-API, ранее реализуемые JSR-275 существуют)