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

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

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

[identity profile] oude-rus.livejournal.com 2015-01-11 11:14 am (UTC)(link)
Матлаб, да.
матлаб входит во все университетские пакеты, так что покупать не надо.
медленность (хотя он не такой уж и медленный) компенсируется тупым железом, которое нонче дешевое.

[identity profile] rav-erev.livejournal.com 2015-01-11 11:14 am (UTC)(link)
Если Вы привыкли к Бейсику, то не стоит отвыкать и переучиваться. Microsoft Visual Basic .NET, прилагаемый к текущему Visual Studio Express edition. Можно скачать то ли бесплатно, то ли за символическую плату около 1 доллара. Дает полный доступ к могучей библиотеке дот-нета и вообще, если не лезть сильно глубоко, не хуже того же C#.

[identity profile] nextstage.livejournal.com 2015-01-11 11:14 am (UTC)(link)
Если хочется кодить ручками, то большая часть научного мира сидит на питоне (правда среди дата сайенсеров также популярен R), на нем просто начать писать, обратно на другие языки после него люди переходят редко, будучи развращенными комфортом. Пара тройка дней чтобы начать вполне реалистично.

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

Вот компактный курс питона для ученых:
http://nbviewer.ipython.org/gist/rpmuller/5920182

Вот одна из библиотек для дискретной симуляции :
https://simpy.readthedocs.org/en/latest/

Производительность питона сама по себе не очень большая, но numpy позволяет делать вычисления быстрее, со скоростью близкой к нативному коду.

Если этого мало, то дальше надо либо писать все или узкие места на C/C++, у которых большой порог вхождения, либо, что мне кажется более здоровой идеей, брать питонячью обертку над OpenCL
https://pypi.python.org/pypi/pyopencl
http://documen.tician.de/pyopencl/#tutorials
OpenCL позволяет выполнять параллельные вычисления используя все возможности компьютера, включая видеокарты с тысячами ядер. Но распределенные вычисления сами по себе не самая простая тема, распределение задач и аггрегация результатов вычислений, множество нюансов управления памятью, локами и т.п. Пока, наверное, просто понимать что так можно и это очень быстро.

Также есть mathworks simulink, я в нем работал достаточно давно, уже тогда это был весьма годный и удобный пакет
http://www.mathworks.com/products/simulink/
В освоении более чем прост, неплохая производительность, но он коммерческий и дорогой.

[identity profile] bik-top.livejournal.com 2015-01-11 11:17 am (UTC)(link)
Можно скачать бесплатно Visual Studio Community 2013 with Update 4 (http://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx)

Это интегрированная среда разработки (IDE) под Windows, с которой поставляются компиляторы нескольких языков: C#, F#, VB.NET, C++.

F# неплох, но куда менее популярен, чем C#; по C# информации в интернете больше. C++ не позволит быстро начать без спотыканий. На VB.NET не писал; возможно, он покажется более знакомым человеку с опытом VBA.

[identity profile] phlya.livejournal.com 2015-01-11 11:18 am (UTC)(link)
Есть ли он в университетском пакете биофака МГУ, к примеру? Как по мне, так это большой вопрос, и невозможность работать в местах, не подключенных к сети с сервером с лицензией это тоже проблема, ИМХО.

[identity profile] urbaraban.livejournal.com 2015-01-11 11:19 am (UTC)(link)
Присоединяюсь. С учетом что я сначала выучил C# а потом в армии пришлось учить VBA, скажу что по синтаксису он похож именно на него. Тем более что VS Express бесплатна и без извращений легко подойдет под решение тривиальных задач с таблицами и базами.

[identity profile] rav-erev.livejournal.com 2015-01-11 11:20 am (UTC)(link)
Насчет "не переучиваться" - это я Вас излишне обнадежил. Да, сам синтаксис языка изменится не сильно, но сама парадигма программирования в дот-нете здорово отличается от той, что используется при программировании внутри MS Access.
lxe: (письмо с дороги)

[personal profile] lxe 2015-01-11 11:20 am (UTC)(link)
Java

[identity profile] avnik.livejournal.com 2015-01-11 11:21 am (UTC)(link)
python

[identity profile] dark-barker.livejournal.com 2015-01-11 11:21 am (UTC)(link)
При данных заданных условиях я бы тоже советовал Python. При всём вышесказанном это очень популярный язык общего назначения. Теоретически можно поискать более "подходящий", но он будет гораздо более экзотический, что тоже не самое последнее дело.

[identity profile] 2born.livejournal.com 2015-01-11 11:22 am (UTC)(link)
Бесплатная альтернатива Матлабу - Scilab

[identity profile] golosptic.livejournal.com 2015-01-11 11:23 am (UTC)(link)
Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить?
Если у Вас в голове BASIC - то Вам прямая дорога к освоению Fortran.

Да простят меня прочие высокоумные комментаторы.

Но, конечно, Visual Basic Net сначала рассотреть - вдруг его хватит?
lxe: (письмо с дороги)

[personal profile] lxe 2015-01-11 11:23 am (UTC)(link)
Быстрее динамически типизированных ("скриптовых"), легче C++ из-за автоматического управления памятью, в своем классе - заметно проще для обучения, чем C# (который, на мой непатриотический взгляд, предоставляет избыточно перекрывающийся набор инструментов).

Потом будет легко переходить вверх-вниз-вбок.
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] rsokolov.livejournal.com 2015-01-11 11:24 am (UTC)(link)
C#

[identity profile] phlya.livejournal.com 2015-01-11 11:24 am (UTC)(link)
Раз уж так подробно про ускорение питона, то numexpr нельзя не упомянуть, иногда заметно ускоряет.

[identity profile] zaikinpv.livejournal.com 2015-01-11 11:24 am (UTC)(link)
Если просто быстрее чем VB то однозначно python. Возможно даже готовый модуль найдется. Плюс, если задача реально "долгая" то тут в любом языке без оптимизации не обойтись. Очень интересно, что считают эволюционные биологи - могу помочь переписать код на python, проверим насколько подходит. :)

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

[identity profile] stzozo.livejournal.com 2015-01-11 11:28 am (UTC)(link)
Я признаю только Си.
Это универсальный язык.
Вся прочая туча языков только сковывает ход мысли.
arech: (Default)

[personal profile] arech 2015-01-11 11:29 am (UTC)(link)
+1, увы.
Матлаб замечательный софт, но очень дорогой и местами весьма проблемный по производительности и памяти.
romikchef: (Default)

[personal profile] romikchef 2015-01-11 11:30 am (UTC)(link)
Как это часто бывает, большинство комментаторов отвечают не автору вопроса, а себе.
Частично в этом вина автора - ключевую часть вопроса он никак не выделил, а, по моим наблюдениям, многие бросаются отвечать, прочитав лишь заголовок.

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

И принимать только те ответы, которые аргументированно учитывают указанные условия. Очень жаль, кстати, что пока не было ответов от людей, занимающихся подобными вычислениями.

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

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

Если же проблема действительно в количестве выполняемых вычислений, то я бы попробовал посоветовать C. Его базовый синтаксис довольно простой и похож на все другие ЯП, а по скорости он является безусловным чемпионом.

Ну, или я бы посмотрел на специализированные системы моделирования, такие, например как продукты http://www.wolfram.com/
Edited 2015-01-11 11:34 (UTC)
arech: (Default)

[personal profile] arech 2015-01-11 11:34 am (UTC)(link)
Векторизация давно уже подключается практически к любым языкам, поэтому это не аргумент.
Тормоза там в управлении памятью, циклами и прочих чисто программерских вещах, которые норовят вылезти в любых минимально сложных алгоритмах.
Надо понимать, что R никогда не делался как нормальный ЯП. Это язык для стат.расчётов, почти полностью наследованный из древнючего S...
Одно дело обсчитывать таблички, а другое - реализовывать эволюционные (или вообще любые минимально сложные) алгоритмы... R тут совсем не инструмент...
arech: (Default)

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

[identity profile] zlata-gl.livejournal.com 2015-01-11 11:38 am (UTC)(link)
Не знаю, жив ли еще "Дельфи", но он быстро осваивается и быстро работает.
Я работала на нем лет 5, потом ушла по независящим от меня причинам, 10 лет назад.

kuzh: (Turkmen)

[personal profile] kuzh 2015-01-11 11:41 am (UTC)(link)
Лучший коммент!
От себя добавлю - может сменить компьютер - самое быстрое и дешевое.

И не слушайте про всякие там C# - охота засирать мозги на старости лет?
Edited 2015-01-11 11:42 (UTC)

Page 2 of 27