Посоветуйте язык программирования
Jan. 11th, 2015 02:41 pmЯ всю жизнь программировал только на бейсике, на разных его версиях. Так получилось. Когда писал кандидатскую, набралось очень много таблиц с данными (это были морфологические признаки морских ежей), и я задолбался обсчитывать их на калькуляторе. Поэтому быстренько освоил бейсик (тогда персональные компьютеры IBM только начали появляться, и к ним прилагался язык GW-Basic). Освоил - и сразу почувствовал себя человеком. С тех пор не переучивался, сейчас пишу все свои программки на VBA в MS Access. То есть в программировании я дилетант, но опытный. Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить? Времени, сил и желания преодолевать трудности и вникать в программистские проблемы - не имеется. Мне бы этот язык просто скачать (можно купить, если не слишком дорого), освоить за пару-тройку дней - и вперед. Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее.
no subject
Date: 2015-01-11 11:14 am (UTC)матлаб входит во все университетские пакеты, так что покупать не надо.
медленность (хотя он не такой уж и медленный) компенсируется тупым железом, которое нонче дешевое.
no subject
Date: 2015-01-11 11:14 am (UTC)no subject
Date: 2015-01-11 11:14 am (UTC)Особенность питона в том, что это язык-интерфейс, для которого существует огромное количество специализированных библиотек и инструментов или, наоборот, он используется внутри различных продуктов.
Вот компактный курс питона для ученых:
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/
В освоении более чем прост, неплохая производительность, но он коммерческий и дорогой.
no subject
Date: 2015-01-11 11:17 am (UTC)Это интегрированная среда разработки (IDE) под Windows, с которой поставляются компиляторы нескольких языков: C#, F#, VB.NET, C++.
F# неплох, но куда менее популярен, чем C#; по C# информации в интернете больше. C++ не позволит быстро начать без спотыканий. На VB.NET не писал; возможно, он покажется более знакомым человеку с опытом VBA.
no subject
Date: 2015-01-11 11:18 am (UTC)no subject
Date: 2015-01-11 11:19 am (UTC)no subject
Date: 2015-01-11 11:20 am (UTC)no subject
Date: 2015-01-11 11:20 am (UTC)no subject
Date: 2015-01-11 11:21 am (UTC)no subject
Date: 2015-01-11 11:21 am (UTC)no subject
Date: 2015-01-11 11:22 am (UTC)no subject
Date: 2015-01-11 11:23 am (UTC)Если у Вас в голове BASIC - то Вам прямая дорога к освоению Fortran.
Да простят меня прочие высокоумные комментаторы.
Но, конечно, Visual Basic Net сначала рассотреть - вдруг его хватит?
no subject
Date: 2015-01-11 11:23 am (UTC)Потом будет легко переходить вверх-вниз-вбок.
no subject
Date: 2015-01-11 11:23 am (UTC)Для реализации промышленного решения это скорее всего С++, но для исследователя это жуткий хардкор и скорее всего потеря времени.
Я думаю, что надо смотреть на питон + одну из его обвязок, позволяющую параллелить вычисления на GPU. Питон очень простой и понятный язык (и по нему много хороших видеокурсов), а GPU даст ускорения в расчётах вплоть до сотен раз относительно обычных процессоров. Все попадающиеся мне в последнее время работы по расчёту, например, всяких хитрых нейронных сетей (глубоких, рекурсивных, или прочих всяких хитрых) изобретаются именно на питоне с обсчётом на GPU.
Эволюционные модели, насколько я знаю, не блещут запредельным матаном, поэтому скорее всего так же хорошо и безпроблемно лягут на GPU (правда, there is no silver bullet и надо будет разобраться со спецификой GPU, но это не сложно).
no subject
Date: 2015-01-11 11:24 am (UTC)no subject
Date: 2015-01-11 11:24 am (UTC)no subject
Date: 2015-01-11 11:24 am (UTC)no subject
Date: 2015-01-11 11:27 am (UTC)(На линуксе с Nvidia+Optimus...)
no subject
Date: 2015-01-11 11:28 am (UTC)Это универсальный язык.
Вся прочая туча языков только сковывает ход мысли.
no subject
Date: 2015-01-11 11:29 am (UTC)Матлаб замечательный софт, но очень дорогой и местами весьма проблемный по производительности и памяти.
no subject
Date: 2015-01-11 11:30 am (UTC)Частично в этом вина автора - ключевую часть вопроса он никак не выделил, а, по моим наблюдениям, многие бросаются отвечать, прочитав лишь заголовок.
Я думаю, что цель надо обязательно вынести в заголовок, "Посоветуйте язык программирования для имитационного моделирования эволюционных процессов в популяциях".
И в первых строках обозначить претензии к текущему языку - медленный.
И принимать только те ответы, которые аргументированно учитывают указанные условия. Очень жаль, кстати, что пока не было ответов от людей, занимающихся подобными вычислениями.
Сам я, увы, не слишком компетентен в предлагаемых языках, но довольно компетентен в программировании вообще. И в этом смысле поддержу единственного комментатора, который попытался сначала выяснить - а что именно является основной причиной медленного исполнения? Такой процесс называется красивым словом "профайлинг" и должен, по-хорошему, предшествовать любым поискам инструмента. Никаких особенных инструментов для этого не требуется - возможно, хватит просто здравого смысла и пары экспериментов.
Так что, для начала надо разобраться - действительно ли это скорость работы самого языка а не скорость доступа к данным. Если второе, то можно либо сменить хранилище, либо попробовать оптимизировать работу текущего - к примеру, тупо добить памяти к рабочему компьютеру может оказаться самым простым решением.
Если же проблема действительно в количестве выполняемых вычислений, то я бы попробовал посоветовать C. Его базовый синтаксис довольно простой и похож на все другие ЯП, а по скорости он является безусловным чемпионом.
Ну, или я бы посмотрел на специализированные системы моделирования, такие, например как продукты http://www.wolfram.com/
no subject
Date: 2015-01-11 11:34 am (UTC)Тормоза там в управлении памятью, циклами и прочих чисто программерских вещах, которые норовят вылезти в любых минимально сложных алгоритмах.
Надо понимать, что R никогда не делался как нормальный ЯП. Это язык для стат.расчётов, почти полностью наследованный из древнючего S...
Одно дело обсчитывать таблички, а другое - реализовывать эволюционные (или вообще любые минимально сложные) алгоритмы... R тут совсем не инструмент...
no subject
Date: 2015-01-11 11:37 am (UTC)Сам всё откладываю эту тему, но матлаба совсем перестало хватать и собираюсь пощупать её в ближайшем будущем...
no subject
Date: 2015-01-11 11:38 am (UTC)Я работала на нем лет 5, потом ушла по независящим от меня причинам, 10 лет назад.
no subject
Date: 2015-01-11 11:41 am (UTC)От себя добавлю - может сменить компьютер - самое быстрое и дешевое.
И не слушайте про всякие там C# - охота засирать мозги на старости лет?