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

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

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

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

[identity profile] exshvonder.livejournal.com 2015-01-11 11:45 am (UTC)(link)
Переучиваться не надо вообще.

http://www.freebasic.net/

https://ru.wikipedia.org/wiki/FreeBASIC
Edited 2015-01-11 11:47 (UTC)
(deleted comment) (Show 3 comments)

[identity profile] http://users.livejournal.com/_glav_/ 2015-01-11 11:48 am (UTC)(link)
матлаб.
идёт с собственной IDE и необходимыми библиотеками для математических расчётов, а также для визуализации результатов. удобная работа с массивами и матрицами

[identity profile] muh2.livejournal.com 2015-01-11 11:48 am (UTC)(link)
Я бы посмотрел на какие-нибудь пакеты. Тут уже упоминали Математику, Матлаб, Маткад, могу еще упомянуть FlexPDE или бесплатный Elmer. Eсли задача сводится к стандартной, например, к решению дифуров в одномерных или частных производных - это вполне может быть решением.

[identity profile] worldly-wise.livejournal.com 2015-01-11 11:53 am (UTC)(link)
В своё время был компилируемыйц бейсик. Поищите.

[identity profile] megazver.livejournal.com 2015-01-11 11:59 am (UTC)(link)
Python на сайте Codecademy.

[identity profile] grandrienko.livejournal.com 2015-01-11 12:04 pm (UTC)(link)
Я скорее не профессионал, знаю только Delphi, но хочу сказать что очень им доволен. Когда я был в аспирантуре, написал на нём множество программ для научного руководителя, и это мне очень помогло защититься. Как я понимаю, Delphi один из самых удобных языков (в смысле, сред разработки) для быстрого написания сервисной программы с большим количеством окон, кнопок, переключателей и т.д. Достаточно регулярно приходится писать какую-нибудь новую программу для мелких нужд. И он весьма быстрый, компилируемый.
Но я не смог бы достаточно хорошо освоить Delphi (имею в виду объектно-ориентированное программирование), если бы мне его не преподавал живой человек – нужно значительное умственное усилие, чтобы “въехать” в суть ООП.
В среде химиков, с которыми я общаюсь, принято писать программы на фортране, но по-моему по сравнению с Delphi это никудышный язык (по крайней мере те компиляторы, на которых мы писали).

[identity profile] logan-666.livejournal.com 2015-01-11 12:05 pm (UTC)(link)
Если предполагается хранение и обработка массивов данных, то я бы посоветовал 1С - там и массивы данных организовать и хранить просто, и процедуры обработки данных легко написать, и язык там по сути чуть измененный бейсик.

[identity profile] iisus.livejournal.com 2015-01-11 12:26 pm (UTC)(link)
Я много языков перепробовал (начал тоже с бейсика, в школе), но С++ был просто откровением, подкупили его продуманность и синтаксическая простота. Впрочем, в последнее время перешёл на С# - это следующая ступень эволюции С++.

Для эволюционных экспериментов я бы посоветовал скачать движок Unity3D (http://unity3d.com/unity/download). Он бесплатный и предназначен для создания игр. То есть, визуализация эксперимента предельно облегчена. Особенно если модель подразумевает взаимодействия между особями в пространстве. Например, некоторые исследователи моделируют эволюцию локомоции. Организмы в таких экспериментах представляют собой нелепо дёргающиеся геометрические объекты, и эволюционирует как форма тела, так и управляющая система. Отбор происходит по критерию скорости и точности движения в сторону пищи. И вот для такого эксперимента разработка физики и системы визуализации заняла бы добрый месяц работы, если делать всё с нуля в традиционной оболочке, тогда как в Unity это можно сделать за пару дней.

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

[identity profile] livejournal.livejournal.com 2015-01-11 12:34 pm (UTC)(link)
Здравствуйте! Ваша запись попала в топ-25 популярных записей LiveJournal России (http://www.livejournal.com/?rating=ru)! Подробнее о рейтинге читайте в Справке (https://www.dreamwidth.org/support/faqbrowse?faqid=303).

[identity profile] mifromru.livejournal.com 2015-01-11 12:35 pm (UTC)(link)
>Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить?

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

>освоить за пару-тройку дней - и вперед

Этого не выйдет, пару недель - еще куда не шло. И это лишь для того, чтобы научиться хорошо делать то же, что делали на Basic.

К тому же такой критерий, как скорость работы программы... Хотя у бейсика и есть определенные проблемы с производительностью, но переход к быстро изучаемым языкам может не дать желаемых "10 раз быстрее". Перейдя на то же Python в случае вычислительных задач этих 10 раз не получить. И да, Python не компилируемый язык.

У языков программирования разные пороги вхождения и разные возможности, разные доступные библиотеки.

Тот же C имеет довольно высокий порог вхождения, на нем очень просто делать ошибки, которые потом приходится героически вылавливать днями, неделями, месяцами, но опытный программист может в некоторых случаях для вычислений задействовать GPU (видеокарту), и по сравнению с бейсиком здесь может быть и в 1000 раз быстрее, и даже более. Но если вы решите попробовать C после бейсика, то вы просто потратите напрасно время из за этого самого порога вхождения - чтобы достичь нужного уровня (сносного) на C, программированием нужно заниматься профессионально.

Если давать рекомендацию "от балды" (а по вашей постановке задачи я, несмотря на свой более чем 20-ти летний опыт профессионального программирования, могу только так и поступить), то я бы сказал:

- R как специализированный язык для статистической обработки данных
- Java как универсальный язык программирования
- Python как язык, на который быстрее всего можно соскочить с бейсика

За пару недель сможете освоить не хуже бейсика эти языки

Но это все равно, что абстрактному человеку ответить на вопрос "какую машину мне купить?" имея на входе только информацию "чтобы коробка автомат была".

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

Данными на входе могут быть как гига и даже терабайтные массивы, так и небольшие векторы. У данных обычно бывает тип.

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

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

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

[identity profile] asug.livejournal.com 2015-01-11 12:37 pm (UTC)(link)
Delphi. Простой и строгий, на нем учат (ну или учили) школьников программировать. Взять старенькую версию Delphi 7, просто подключается к Access. Хотя не знаю как будет насчет имитационного моделирования

[identity profile] aleksclan.livejournal.com 2015-01-11 12:37 pm (UTC)(link)
МАСМ
но писать ты будешь долго
(если не знаешь библиотек в винде)

[identity profile] shmel39.livejournal.com 2015-01-11 12:43 pm (UTC)(link)
Я бы тоже порекомендовал Python. С натяжкой можно назвать R и Matlab, но это боль, особенно на первых этапах.

Компилируемость не есть необходимое требование для скорости. Большинство научных задач хорошо укладываются в векторизацию (сведение операций с циклами к операциям с матрицами), поэтому будут работать достаточно быстро на любом из вышеназванных языком.

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

[identity profile] geniepro.livejournal.com 2015-01-11 12:43 pm (UTC)(link)
Если хотите максимально простой после VBA язык -- то это только VB.NET, компилируемый, по быстродействию не уступает C#, хотя и уступает C++, но в любом случае куда быстрее чем VBA.
Бесплатная среда разработки SharpDevelop: http://www.icsharpcode.net/OpenSource/SD/Download/
или Visual Studio Express: http://go.microsoft.com/?linkid=9832262
Хотя правильнее было бы начать изучать Хаскелл )) https://www.haskell.org/haskellwiki/Haskell

[identity profile] snowman-fedya.livejournal.com 2015-01-11 12:53 pm (UTC)(link)
Python. Безо всяких альтернатив.

[identity profile] mcmlxxxii.livejournal.com 2015-01-11 12:59 pm (UTC)(link)
говно вопрос, пешы на пхп

[identity profile] a-burlaka.livejournal.com 2015-01-11 01:12 pm (UTC)(link)
О! Знакомая ситуация: "Подскажите чем заменить старый бейсик что бы не пришлось становиться профессиональным программистом". И в каждом каменте свой ответ. Как человек, уже сталкивавшийся с этой проблемой могу сказать: быстро не получится. И пока не попробуете решить конкретную программу на данном языке, а ещё лучше - десяток типичных для себя задач, оценить его вряд-ли получится.
Ну и ещё стоит подумать, какие ещё возможности кроме "просто посчитать" от языка требуются.

[identity profile] vadim rumyantsev (from livejournal.com) 2015-01-11 01:15 pm (UTC)(link)
Компилятор – это далеко не главный фактор увеличения производительности программ. На первом месте находится выбор эффективных алгоритмов, но Вам, как человеку, далёкому от профессионального программирования, в эти вопросы соваться не имеет смысла. Разве что использовать какую-то уже готовую среду для имитационного моделирования, где интересующие Вас модели уже запрограммированы разработчиками (GPSS, Matlab, или что там ещё есть в этой области?). Если говорить о скорости выполнения одинаковых программ, то вполне возможно, что просто проапгрейдить компьютер выйдет для вас проще и дешевле, чем изучать новый язык.

Если всё же хочется освоить новый язык, я бы посоветовал C/С++, чтобы потом не переучиваться ещё раз. Благодаря разработанной базе кода, он проживёт ещё очень долго. По умолчанию всё в современных компьютерах и ОС заточено под С/С++. Но его изучение – дело никак не пары дней.

[identity profile] che-shr-cat.livejournal.com 2015-01-11 01:16 pm (UTC)(link)
Я довольно много занимался реализацией генетических алгоритмов (такой метод оптимизации из области эволюционных вычислений). Это не совсем то, чем занимаетесь вы, но вполне возможно что по сути будут похожие задачи. Исходя из своего опыта у меня сложилась связка: питон для прототипов и задач, в которых меня устраивает скорость, и С++ для тех мест, где надо сильно оптимизировать по скорости и питона не хватает.

В рамках текущего вопроса я за питон. Во-первых он простой для освоения и на нём можно писать быстро и понятно (экономия времени на освоение и разработку). Во-вторых, на нём можно писать довольно быстрые программы, есть много библиотек для эффективных вычислений (numpy/scipy/pandas/...). До С++ очередь может и не дойти. Скажем, весьма быстрый алгоритм BWT (который используется для картирования ридов на геном) я писал на питоне и до плюсов очередь в моём случае не дошла, мне хватило (главное ускорение было от правильной реализации алгоритма, а не от языка).

C++ хорош по части скорости, но тяжёл для освоения. Я бы забил на данном этапе. К C++ можно перейти от питона, когда будет выбран ресурс последнего. Java во многом похожа, но лично мне не нравится (вкусовщина) — код получается многословней, чем в C++, а скорость скорее меньше.

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

R, ну не знаю. Можно попробовать, но мне кажется, что питон для этого лучше и скорее всего быстрее. Хотя если нужно прям много статистики или готовых конкретных пакетов, то вариант. Если аргумент за R — это интерактивность, то со стороны питона есть IPython.

.NET и его языки (VB, C#, ...) может и хороши по-своему, но я бы не стал завязываться на эту платформу. С питоном проще, можно работать на любой системе без геморроя. В случае C# времени на освоение уйдёт вряд ли меньше, чем на Java. Про VB .NET ничего не знаю, но скорее всего главное его преимущество в данном месте — это лёгкость перехода, а во всех остальных местах (в первую очередь в скорости) будут провалы.

Всякую экзотику типа ассемблера, хаскела и прочих особенных языков я бы воспринимал как троллинг.

Perl в данном месте ничем не лучше питона, да ещё и фактически умирает. Ruby хорош, но в данной задаче опять же не лучше питона. Не исключаю, что интересным вариантом под определённый класс задач может быть Erlang (легко создавать независимые процессы-агенты), но вам вряд ли стоит в него ввязываться, одного его не хватит (ещё потенциально любопытный вариант — Go, но тоже не надо на данном этапе). Среди новых языков может и есть что-то хорошее, но лучше взять проверенное эволюцией :)

[identity profile] fnbpunk.livejournal.com 2015-01-11 01:17 pm (UTC)(link)
Однозначно, Python:

1) high level language: быстро и легко выучить
2) близок к бейсику
3) high performance: можно использовать low level libraries (java, C ++ и др.).
4) легко выучить и быстро работать в нем (быстрые результаты)
5) GPL - free software
6) Особенно хорошая библиотека: scipy (scientific python) и ее части (pandas: for table operations, numpy: matrix/array operations, matplotlib: graphic plotting http://www.scipy.org/ + там есть библиотеки специально для биологии).
Вы программируете в пайтоне, но, на самом деле, Fortran и С++, что сильно ускоряет расчеты.

Посредством interactive python notebooks многие исследователи делятся не только результатами и базами данных, но также кодами (experiment process), с помощью которых они достигли результатов: “ipython notebooks”: http://nbviewer.ipython.org/ - collaborative science/mutual aid :)

Прошу прощения за английский, писала со слов специалиста)

[identity profile] 1greywind.livejournal.com 2015-01-11 01:21 pm (UTC)(link)
100 коментов и никто не посоветовал Wolfram Language (http://www.wolfram.com/language/).

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

Page 2 of 6