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

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

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

[identity profile] sumerk.livejournal.com 2015-01-15 11:47 am (UTC)(link)
>Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить?
> Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее

Исходя из задачи - вам нужна Java. Вы ведь хотите сами написать ядро, которое будет все считать - и тут Java почти самый быстрый.
Вот тут
http://rutracker.org/forum/viewtopic.php?t=4864236
берется среда программирования на Java - она лучшая на Земле сейчас вообще среди всех сред программирования "Intellij Idea".
Продвинутый способ обучения языкам - следовать видеоподкастам - вот например по такому для примера мною составленному запросу в Ютьюб что-то вам может оказаться полезным - http://www.youtube.com/results?search_query=intellij+idea+tutorial+java

Вам также надо прочитать книжку по Java, вот тут их 140 штук http://rutracker.org/forum/viewtopic.php?t=4890233. Непременно вам промоют там мозг парадигмами Объектно-ориентированного программирования. Вам надо будет их понять и зазубрить - их 3 или 4 всего. Без этого не понять ни Java, ни скорее всего все другие более продвинутые языки. Возможно для вас ООП вообще окажется захватывающим откровением, ведь это как раз система, в которой можно создать класс "Муха", прописать ей поведение "если коснулись крылышка, взмахнуть другим крылышком". А потом одной командой создать миллион таких объектов-Мух и наблюдать эволюцию их взаимовлияний... То есть парадигма ООП прямо-таки создана для моделирования систем из множества объектов.
Как раз Java сделала Объектно-ориентированное программирование мейнстримом 15 лет назад, так что читая книжку о Java вы поймете глубоко идеи.

Примечание: важно не перепутать Java и JavaScript - они называются похоже, но пути этих языков необратимо разошлись сразу после того, как им были даны похожие названия.

И также я присоединюсь ко множеству тут высказывавшихся:
один из наиболее выразительных языков сейчас - Python (он намного выразительней чем рекомендованный мною Java!). Он возможно вообще не подпадает под сформулированную вами задачу - написания ядра считающего какую-то модель. И все же это язык, которым программируют ученые - он упрощен где возможно, и усилена выразительность, где это надо.

Удачи!

[identity profile] http://users.livejournal.com/cryptomancer_/ 2015-01-15 07:28 pm (UTC)(link)
1) Изучите на каких языках и библиотеках работают МГУ-шный суперкомпьютер Ломоносов (http://parallel.ru/cluster/starterinfo ) и проект добровольных вычислений BOINC ( https://boinc.berkeley.edu/trac/wiki/ProjectMain )

2) Про Питон как новый Бейсик учёных - удваиваю. Дополнения - разгонять узкие места надо не на C/C++ а на https://en.wikipedia.org/wiki/Cython , если есть библиотеки на компилируемых языках которые ещё не привязаны к Питону - привязывать через http://www.swig.org/ . Работа с исходниками возможна без глубокого понимания, это уровень продвинутого сисадмина UNIX а не первоначального автора библиотек.

3) Функциональные языки включая F# (.NET) и Хаскелл - это не троллинг. Наличие в языке чистых функций - путь к возможности для авторов языка распараллелить на видеокарты и кластеры без усилий программиста. Кстати, в новом фортране появился вид функций PURE - к чему бы это ? Даже если не будете делать основную ставку - изучайте краем глаза, гуглите.

4) VB.NET из преимуществ имеет только переиспользование навыков, но может отрезать Вас и от библиотек (Питон) и от суперкомпьютеров и видеокарт ( C/C++, функциональщина).

5) Хранение данных. Смотрите SQLite (самое большое покрытие тестами и база установок - все Андроиды, Файрфоксы как минимум ), PostgreSQL (академичность в противовес "грязной" практичности MySQL, избран 1С как альтернатива коммерческим). Если на много машин - то Apache Cassandra (простое системное администрирование, нет разделения машин по ролям).

6) Рассмотрите возможность переложить часть работы на движок SQL - производите расчёты при вставке в таблицы результатов при выборке из таблиц сырых данных ( SELECT ... INSERT ... ), о компиляции и распараллеливании на ядра процессора позаботились программисты БД.

[identity profile] Роман Игнатьев (from livejournal.com) 2015-01-20 11:21 am (UTC)(link)
Почитал комментарии, и присоединяюсь к лагерю питонистов :)
Тем более что простой поиск выводит на https://pypi.python.org/pypi/digital-organism-simulation-environment/1.0.2 (https://pypi.python.org/pypi/digital-organism-simulation-environment/1.0.2), где явно что-то говорится о генетике.

[identity profile] nick-fornit.livejournal.com 2015-01-21 01:28 pm (UTC)(link)
К сожалению, нет быстрого языка, который бы можно было за недельку освоить до уровня эффективного программирования эволюционных моделей (и всегда есть иезуитски умалчиваемые в доступных описаниях, но важные нюансы). Но есть интересная альтернатива: освоить язык, применяемый для вэб: PHP. С учетом возможностей html5 становится возможным писать эффективные модели с графическим представлением, да еще доступные по сети.
Вот С++ или более удобная MFC (не говоря про шарп) при всей крутизне возможностей очень затрудняет работу с графикой, а осваивание всяких openGL уже трудоемко. PHP достаточно быстр и легок в освоении. Очень много готовых решений в инете. И, главное, уже заточен для показа в инете. В локальном использовании существуют много инструментов, эмулирующих сервер, например, пакет "Денвер".

[identity profile] desincarnated.livejournal.com 2015-01-23 11:17 am (UTC)(link)
если не нужна графика сходу - Python. гграфика, спецматематика - доступны но подключаются отдельными модулями.
фактически на питоне можно писать сходу при нулевом знакомстве.

другой хороший вариант языка который может все и имеет низкий порог вхождения - Racket (ранее PLT Sheme) - очень часто использутся для начального обучения программированию вместо бейсика. по нему есть масса учебных материалов и курсов (только англоязычных), язык хорош для аналитики и обработки текста и таблиц. это lisp-семейство, поэтому на другие 'взрослые' языки он не похож.

[identity profile] dig386.livejournal.com 2015-01-24 11:22 am (UTC)(link)
Если нужны именно быстрые языки и не хочется связываться с Си, то есть несколько вариантов
1) MATLAB при условии активного использования векторизации кода (сведение задачи к перемножению матриц). Есть бесплатный аналог Octave
2) Python + SciPy. Неплохой вариант, но опять же потребуется привыкать к библиотеке SciPy.
3) Lua, особенно LuaJIT: хотя язык сам по себе очень прост и не может похвастаться большим числом библиотек, но синтаксис даже немного похож на BASIC, можно писать достаточно быстрые программы, не отходя от привычного Вам стиля работы. Достаточно прост в использовании. LuaJIT работает очень быстро.
4) Javascript: Си-подобный синтаксис, есть быстрые реализации вроде V8
Всё, кроме MATLAB, есть официально в свободном доступе.

[identity profile] vassili prigarin (from livejournal.com) 2015-01-29 03:41 pm (UTC)(link)
А возьмите меня.
Сейчас есть время и я могу Вам чего-нибудь порешать. Пришлите мне описание задачи (pdf | doc/docx | opendoc | tex) и, весьма желательно, ссылку (идеально, pdf со статьей) на что-нибудь похожее: чтобы я смог понять слова и представить себе контекст. А я Вам отдам картинки, числа и, если захотите, саму программу расчёта. Способ оплаты при успешном осуществлении проекта- поблагодарите меня в публикации "за помощь в организации расчётов". Если задача окажется сложной в вычислительном и/или программистском плане,- ну, обсудим по скайпу и решим. Оценку времени на решение/сложность я сообщу Вам по получении задачи. Если Вам это интересно, пожалуйста, в ответе укажите мне почтовый адрес для связи (или прямо в ФБ напишите).
Edited 2015-01-29 15:43 (UTC)

[identity profile] serge shikov (from livejournal.com) 2015-01-31 10:02 am (UTC)(link)
> понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее.
Ну вообще говоря, у VB (не VBA) нет никаких принципиальных причин, по которым он был бы невыносимо медленным, и никаких серьезных узких мест.

Другое дело, что у него есть ограничения, которые не позволят например, использовать современные быстрые процессоры и большую доступную память по полной. А если это именно VBA из 32-битового Офиса, тогда вы скорее всего используете одно ядро и пару гигабайт памяти, не больше, даже если у вас и того и другого доступно в разы больше.

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

Надо понимать, что "раз в 10 быстрее" - это например перенести все расчеты из базы данных в память (т.е. данные с диска - туда же), и вы уже имеете ускорение на порядок, а то и на все три. Прежде чем ускорять свою модель, сначала надо четко понимать, почему она медленная, и где у нее узкое место, и какое оно - это внешние носители, т.е. диски, память, или процессор?

А без этого выбирать язык - это чистой воды дилетантство.

С точки зрения простоты и быстроты - я бы посоветовал clojure или groovy. Первый - это диалект lisp, и хорош гибкостью в первую очередь. Второй - синтаксический упрощенная версия Java. Оба на платформе JVM, а это значит, что взяв 64-битную версию, вы не будете иметь проблем, если нужно много памяти. И легко перейдете на более быструю машину, если такая подвернется, не имея проблем с перекомпиляцией. И еще у вас будет куча готовых инструментов, которые есть для JVM. Но это мои предпочтения.

Уже предложенный VB.Net - вполне достойный вариант, как и сама .Net в качестве платформы (опять же, куча инструментов тоже никуда тут не делась, хоть и другая). И дальше есть куда расти, на c# или f# например.

[identity profile] gluconat-ca.livejournal.com 2015-02-01 07:24 am (UTC)(link)
Есть один весьма старинный язычок, не "майнстрим", простой, но достаточно эффективный в определённых задачах. Одним из достоинств его - это модель данных которыми он оперирует - разреженные массивы, как локальные, которые существуют только во время исполнения программного кода, так и постоянного хранения (своего рода база данных) доступ к которым единообразен. Есть реализация для Windows http://www.minimdb.com/ , автор - наш человек, Евгений Каратаев, есть и книга у него по программированию на этом языке (не очень дешёвая, правда).
Долго колебался предлагать этот вариант, потому что сам давно работаю с этим языком (но с другой реализацией) и потому понимаю, что возможно сильное разочарование в выборе, если по какой-то причине не сложится "дружба" c этим языком.

Да, главное я и не сказал - этот язык называется MUMPS ( Massachusetts General Hospital Utility Multi-Programming System)

PS.
Можно рассматривать этот комментарий как замечание - не "питонами" едиными ... :)

[identity profile] romashkovoo.livejournal.com 2015-02-11 12:51 pm (UTC)(link)
Фортран. Если нужна скорость

Большинство серьезных моделей, по крайней мере из области физики атмосферы, написаны именно на Фортране. Да-да, прогноз погоды, которым каждый интересуется время от времени, получается в ходе расчетов моделей, написанных на этом языке.

[identity profile] romavnts.livejournal.com 2015-03-14 03:48 pm (UTC)(link)
Александр, язык обычно подбирается (или вообще создаётся) под задачи, а не "чтобы быстрее". Вам (учитывая ваши задачи) так и вовсе можно приглядеться к среде AnyLogic http://www.anylogic.ru/use-of-simulation (Единственный инструмент, который объединяет системную динамику, агентное и дискретно-событийное моделирование). В качестве базового языка используется Java, байт-код которого в нынешние времена уже и на утюгах выполняется :-)

[identity profile] insaiderz.livejournal.com 2015-11-16 11:00 am (UTC)(link)
Александр, а вы на Фортране не пробовали? Он намного быстрее бэйсика, весьма стандартизирован и "без понтов", фактически что напишите, то он и будет делать. Как говорил наш препод на выч. физике, Си для бугалтеров :), а научные и инженерные моделирования и рассчеты обычно делают на фортране.

Page 6 of 6