Яку мову я повинен вивчити для обчислювальної науки?


11

Я абсолютно нова в понятті обчислювальної науки, і шукаю хорошої вихідної точки.

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

Для початку я схилявся до моделювання, пов'язаного зі зв'язком атомів та взаємодіями, з вимогою до графічних зображень / моделювання.

Чи деякі мови, як правило, в деяких сферах кращі, ніж інші (тобто фізика проти чистої математики)? Або вибір мови спирається на інші фактори?

Я чув, як ім’я Фортран багато кидалося.

Пропозиції?


1
C ++ і Fortran - добре відомі мови у спільноті. Останнім часом можна спостерігати зростання використання динамічних мов. Часто ви вибираєте свою бібліотеку, а не свою мову.
vanCompute

9
Мені нагадується думка, що реальні програмісти можуть писати Fortran будь-якою мовою.
hardmath

1
Ось дуже схоже запитання з великою кількістю відповідей: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík

1
"Я розумію, що немає об'єктивно кращої мови" - саме тому, чому б не навчитися бути агностиком, щоб ви могли писати будь-якою мовою, кинутою на вас?
JM

2
Ви повинні опанувати англійську мову. Без цього ви нікуди не потрапите в обчислювальну науку.
Йоганнес

Відповіді:


15

Переважно це зводиться до наявних у вас бібліотек чисел, які допоможуть виконати ваше завдання. C / C ++ має велику кількість цифрових бібліотек, реалізованих для них, але мови низького рівня - не найкраще швидко прототипувати щось.

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


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

3
MATLAB має MATLAB xUnit, але Python і C ++ мають більше (і, на мою думку, кращих) наборів тестування.
Джефф Оксберрі

24

Пітон!

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

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

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




5

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

C ++: важко освоїти (знадобиться вам років), але багато використовується поза чисельними обчисленнями (безпека роботи)

Python: Рекомендується багато в ці дні, але занадто повільний для нетривіальної роботи. Вам доведеться записати всі основні обчислювально дорогі ядра в C, а потім викликати їх з Python, що означає, що вам доведеться вивчити (принаймні) дві мови


1
Я б заперечував, що крива навчання для Fortran і C ++ дещо схожа. Я набрав достатньої кількості навичок для вирішення найпростіших завдань упродовж кількох місяців, що виходили з тла java, matlab та c #. Залежно від того, які мови хтось знає, я міг бачити, що c ++ набагато простіше вивчити, ніж fortran, оскільки більшість великих кодів там написані у датованих версіях.
Годрік Провид

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

1
@stali, Так, але, наприклад, я працюю приблизно з чвертю мільйонів рядків застарілого коду, написаних у Fortran77. Тож мені довелося навчитися стилю 77, щоб мати змогу працювати з ним, 90-95 змінити його (оскільки загальні блоки є хитромудрими), а потім '08, щоб не затримуватися протягом десятиліття в минулому. Фортран, будучи старовинною мовою, зазнав величезних змін протягом останніх десятиліть, і якщо ви не починаєте з нуля, вивчення його спадщини є нетривіальним.
Годрик Провид

2
Я не погоджуюся з твердженням, що Python "занадто повільний для нетривіальної роботи". Дійсно, якщо ви записуєте свої множення матриць-векторів (тощо) виключно в Python, вам буде погано провести час. Абстракція на деяких більш ефективних мовах для вас вже зроблена: NumPy, Scipy, мабуть, мають все, що вам коли-небудь знадобиться. Або один з інших 50000 пакетів.
Ніко Шльомер

1
@ NicoSchlömer Я б погодився з "занадто повільним для нетривіальної роботи". Моє моделювання в Python (Numpy / Scipy) повільніше, ніж той самий код у версії Fortran90, приблизно в 10 разів. Я рекомендую Fortran90 або C ++.
фронтхем

4

Коротка відповідь
Дізнайтеся про основи об'єктно-орієнтованого коду через python, а також дізнайтеся про основи інформатики через C. Коли вам принаймні непогано, що обидві ці інші мови вивчають C ++, тому що ви можете робити майже все, що в C ++ і змусити її швидко працювати (хоча писати потрібно вічно).

Більш довга відповідь
Отже, ось що: для вашого першого проекту ви будете в чиїйсь лабораторії, працюючи над чужим кодом. У такому випадку вони вибирають мову програмування. Що я особисто вважаю чудовим!

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

Тим не менш, незалежно від того, якою мовою користується ваша лабораторія (особливо якщо це Matlab), ви, мабуть, повинні вивчити python, C та C ++. Зокрема, якщо ви не походили з інформатики, ОБОВ'ЯЗКОВО читати "Крініган та Річі" "Мова програмування на С". Це 35 років і справляє чітке враження, що його автори програмували на перфокартах, але це найрідкісніші птахи: вічна книга з інформатики. Це зробить багато речей набагато зрозумілішими.

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