Какой язык я должен выучить для вычислительной науки?


11

Я совершенно не знаком с понятием вычислительной науки и ищу хорошую отправную точку.

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

Для начала я склонялся к моделированию, связанному с атомными связями и взаимодействиями, с требованием графического представления / моделирования.

Некоторые языки, как правило, лучше для некоторых областей, чем другие (например, физика против чистой математики)? Или выбор языка основан на других факторах?

Я много слышал имя Фортран.

Предложения?


1
C ++ и Fortran являются хорошо известными в сообществе языками. В последнее время вы можете увидеть рост использования динамических языков. Часто вы выбираете свою библиотеку, а не язык.
vanCompute

9
Мне напоминают о том, что настоящие программисты могут писать на Фортране на любом языке.
hardthth

1
Вот очень похожий вопрос с множеством ответов: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ондржей Чертик

1
«Я понимаю, что объективно лучшего языка не существует» - именно так, почему бы не научиться быть независимым от языка, чтобы вы могли писать на любом языке, который вам бросают?
JM

2
Вы должны освоить английский. Без этого вы не получите ничего в вычислительной науке.
Йоханнес

Ответы:


15

В основном это сводится к доступным вам числовым библиотекам, которые помогут выполнить вашу задачу. В C / C ++ реализовано большое количество числовых библиотек, но низкоуровневые языки не являются лучшими для быстрого прототипирования.

Я думаю, что для быстрого решения проблемы я бы порекомендовал использовать что-то вроде Matlab или Mathematica. Они имеют большой набор инструментов и очень высокого уровня. Скорее всего, ваша реализация не будет масштабироваться для производственного использования, но это может быть хорошей площадкой для опробования различных методов. Когда вы знаете, какой путь выбрать, вы всегда можете реализовать что-то в C / C ++ более эффективно.


4
Многие люди - как внутри, так и вне академических кругов - на самом деле не доверяют коду, если у него нет хотя бы какого-нибудь минимального пакета автоматизированного тестирования. Я не знаю, как выглядит инструмент для таких вещей в matlab и mathematica, но есть несколько хороших пакетов для более распространенных языков, таких как Python и C ++.
cjordan1

3
У MATLAB есть MATLAB xUnit, но у Python и C ++ есть больше (и, на мой взгляд, лучше) наборов для тестирования.
Джефф Оксберри

24

Python!

  1. Начните прямо с использования библиотеки numpy , небольших скриптов и интерактивной оболочки ipython .
  2. Получить более продвинутые с помощью многочисленных бесплатных книг и учебных пособий .
  3. Повышайте производительность, используя scipy в качестве интерфейса для высокопроизводительных числовых подпрограмм и matplotlib для визуализации
  4. Воспользуйтесь хорошо разработанными и мощными модулями для научных вычислений , такими как Krypy , FeNiCS и многими другими.
  5. Обратите внимание, что плавный переход между плоским и объектно-ориентированным программированием и присущая Python модульность делают большие проекты простыми в управлении.
  6. Сделайте свой код так же быстро, как C или Fortran, просто переписав важные части в Cython . Вы можете также легко включают в себя процедуры , написанные на Fortran или C .

Это перефразирует то, что я считаю лучшим способом решения проблемы в научных вычислениях. Начните с изучения проблемы, играя с игрушечными примерами в небольших сценариях. Станьте более систематичным и создайте набор кода. Тогда заставь свой код работать !!! Наконец, при необходимости, сделайте оптимизацию кода. Не изобретайте велосипед и не проводите преждевременную оптимизацию.

(Дополнительные плюсы: Python поставляется бесплатно - нет проблем с лицензией, большое сообщество, например, на stackoverflow, модули для хорошего программирования, такие как модульное тестирование или регистрация ...)




5

Fortran: Matlab-подобный, простой в освоении и использовании, быстро становится продуктивным, но хорош только для численных вычислений

C ++: Сложно освоить (это займет у вас годы), но часто используется за пределами числовых вычислений (безопасность работы)

Python: в наши дни рекомендуется много, но слишком медленно для нетривиальной работы. Вам придется написать все ваши базовые вычислительно дорогие ядра на C, а затем вызвать их из Python, что означает, что вам придется выучить (как минимум) два языка


1
Я бы сказал, что кривая обучения для Fortran и C ++ несколько схожа. Я набрал достаточное количество навыков для решения простых задач за несколько месяцев, каждый из которых был основан на java, matlab и c #. В зависимости от того, какие языки кто-то знает, я мог бы видеть, что с ++ гораздо легче изучать, чем фортран, поскольку большинство больших кодов там написаны в устаревших версиях.
Годрик Провидец

@Godric: В ~ 600 страниц стандарт Fortran 2008 меньше половины C ++ 11 (~ 1300 страниц)
Staļi

1
@stali, Да, но, например, я работаю с примерно четвертью миллиона строк унаследованного кода, написанного на Fortran77. Поэтому я должен был изучить стиль 77, чтобы иметь возможность работать с ним, 90-95, чтобы внести в него исправимые изменения (поскольку общие блоки являются ужасными), а затем '08, чтобы не застрять в прошлом десятилетии. Fortran, будучи старым языком, претерпел огромные изменения за последние десятилетия, и если вы не начинаете с нуля, изучать его наследие нетривиально.
Годрик Провидец

2
Я бы не согласился с утверждением, что Python «слишком медленный для нетривиальной работы». Действительно, если вы напишите свои умножения матрицы на вектор (и тому подобное) исключительно на Python, у вас будет плохое время. Впрочем, абстракция к некоторым более эффективным языкам уже сделана для вас: NumPy, Scipy, вероятно, имеет все, что вам когда-либо понадобится. Или один из других 50000 пакетов.
Нико Шлёмер

1
@ NicoSchlömer Я бы согласился с «слишком медленно для нетривиальной работы». Моя симуляция на Python (Numpy / Scipy) медленнее, чем тот же код в версии Fortran90, примерно в 10 раз. Я рекомендую Fortran90 или C ++.
Fronthem

4

Короткий ответ
Узнайте об основах объектно-ориентированного кода через Python и об основах информатики через C. Когда вы, по крайней мере, в порядке, оба эти языка изучают C ++, потому что вы можете делать практически все в C ++ и заставить его работать быстро (хотя это займет вечность, чтобы написать).

Более длинный ответ
Итак, вот в чем дело: для вашего первого проекта вы будете в чьей-то лаборатории, работающей над чужим кодом. В этом случае они будут выбирать язык программирования. Что я лично считаю, это здорово!

Я имею в виду, что как новичок вы не будете на некоторое время узнавать свою задницу от локтя, и, особенно, когда вы не знаете, что делаете, обучение программированию может оказаться утомительным. Таким образом, хорошо иметь структуру и ограничения, которые возникают при работе с чужим кодом, и хорошо иметь мотивацию и волнение, которые могут возникнуть только при работе над реальным проектом.

Тем не менее, независимо от того, какой язык использует ваша лаборатория (особенно если это Matlab), вам, вероятно, следует изучать python, C и C ++. В частности, если вы не являетесь специалистом в области компьютерных наук, вы ДОЛЖНЫ прочитать «Язык программирования Си» Кернигана и Ритчи. Ему 35 лет, и у него сложилось четкое впечатление, что его авторы программировали на перфокартах, но это самая редкая птица: бесконечная книга по информатике. Это многое прояснит.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.