macroevolution: (anomalocaris)
macroevolution ([personal profile] macroevolution) wrote2015-01-11 02:41 pm

Посоветуйте язык программирования

Я всю жизнь программировал только на бейсике, на разных его версиях.  Так получилось. Когда писал кандидатскую, набралось очень много таблиц с данными (это были морфологические признаки морских ежей), и я задолбался обсчитывать их на калькуляторе. Поэтому быстренько освоил бейсик (тогда персональные компьютеры IBM только начали появляться, и к ним прилагался язык GW-Basic). Освоил - и сразу почувствовал себя человеком. С тех пор не переучивался, сейчас пишу все свои программки на VBA в MS Access. То есть в программировании я дилетант, но опытный. Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить? Времени, сил и желания преодолевать трудности и вникать в программистские проблемы - не имеется. Мне бы этот язык просто скачать (можно купить, если не слишком дорого), освоить за пару-тройку дней - и вперед. Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее.
arech: (Default)

[personal profile] arech 2015-01-11 11:23 am (UTC)(link)
Под задачу "имитационного моделирования эволюционных процессов в популяциях" нужен язык, позволяющий хорошо параллелить решение.

Для реализации промышленного решения это скорее всего С++, но для исследователя это жуткий хардкор и скорее всего потеря времени.

Я думаю, что надо смотреть на питон + одну из его обвязок, позволяющую параллелить вычисления на GPU. Питон очень простой и понятный язык (и по нему много хороших видеокурсов), а GPU даст ускорения в расчётах вплоть до сотен раз относительно обычных процессоров. Все попадающиеся мне в последнее время работы по расчёту, например, всяких хитрых нейронных сетей (глубоких, рекурсивных, или прочих всяких хитрых) изобретаются именно на питоне с обсчётом на GPU.
Эволюционные модели, насколько я знаю, не блещут запредельным матаном, поэтому скорее всего так же хорошо и безпроблемно лягут на GPU (правда, there is no silver bullet и надо будет разобраться со спецификой GPU, но это не сложно).

[identity profile] phlya.livejournal.com 2015-01-11 11:27 am (UTC)(link)
А не знаете ли какой-нибудь мануал хороший по ускорению на GPU?
(На линуксе с Nvidia+Optimus...)
arech: (Default)

[personal profile] arech 2015-01-11 11:37 am (UTC)(link)
К сожалению, пока не знаю :(
Сам всё откладываю эту тему, но матлаба совсем перестало хватать и собираюсь пощупать её в ближайшем будущем...

[identity profile] http://users.livejournal.com/__const__/ 2015-01-11 02:27 pm (UTC)(link)
Навскидку: раз, два.
Ну и читать код, который в примерах с CUDA идёт.

[identity profile] phlya.livejournal.com 2015-01-11 02:36 pm (UTC)(link)
Так речь про питон, а тут не то, вроде.

[identity profile] http://users.livejournal.com/__const__/ 2015-01-11 03:29 pm (UTC)(link)
Не понял, значит, вопроса. Извиняюсь.

[identity profile] int19h.livejournal.com 2015-01-11 10:03 pm (UTC)(link)
Выше вам уже написал в общих словах, а конкретика здесь:

http://docs.continuum.io/numbapro/

[identity profile] phlya.livejournal.com 2015-01-11 10:43 pm (UTC)(link)
Спасибо! Выглядит очень привлекательно, но когда ж такое же будет опенсорсное, а лучше еще и в numpy встроено?.. Эх.

[identity profile] nlubchenko.livejournal.com 2015-01-11 04:10 pm (UTC)(link)
Почему сразу питон, а не OpenMP+C или OpenMP+Fortran?
arech: (Default)

[personal profile] arech 2015-01-11 08:18 pm (UTC)(link)
1) openmp насколько я понимаю параллелит только на ядра процессора, а для реального ускорения нужно параллелить на GPU (если задача позволяет, а я почти уверен, что позволяет)
2) с/с++ при всей моей нежной любви к данному запросу подходят плохо: слишком сложны и опасны для новичка, не желающего морочиться, и вообще слишком медленны в разработке и рефакторинге кода. Для исследователя важно как можно быстрее нарисовать минимальный прототип proof of concept, доказывающий идею, и иметь возможность как можно дешевле этот прототип менять и переделывать. А для этого нужны более выразительные, а значит высокоуровневые языки (где одной строкой кода можно сказать больше) - питон в этом смысле очень хорош.
3) с фортраном не знаком. В той области, которой я интересуюсь (алгоритмы искусственного интеллекта) я об использовании фортрана не слыхал. Да и вообще мало о нём слыхал; есть впечатление, что он если не умер, то потихоньку умирает...(может ошибаюсь тут)
4) питон очень прост в освоении и хотя сам не быстр, но есть ряд "ускорителей" под специфические задачи; алгоритмы легко параллелятся на GPU без особых доработок.
5) питон чрезвычайно активно используется научным сообществом, под него сделано огромное количество математических и прочих библиотек. Знание питона скорее всего позволит как легче читать чужие работы, так и делиться своими.
6) если потребуется что-то ускорить - всегда можно конкретно эту часть алгоритма переписать на с/с++ (попросить толкового студента перевести питоновый алго на с/с++) и получить максимум производительности (если студент и правда толковый)))

Как-то так...