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

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

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

[identity profile] phlya.livejournal.com 2015-01-11 10:45 am (UTC)(link)
Вот про скорость тут сложно сказать, но про осваиваемость это однозначно Python. Если одновременно освоить numpy и/или Pandas (библиотеки для расчетов, первая более низкоуровневая с array'ами, вторая - более высокоуровневая, более в стиле R), то скорость будет очень хорошая (говорят, в оптимальный условиях почти как С). И одновременно язык интерпретируемый, то есть в этом будет Вам знакомо.
Дополнительный плюс - великолепная библиотека для графиков и диаграмм matplotlib, и надстройки над ней вроде seaborn.
Ну, и я не знаю, как устроены Ваши модели, но scipy может пригодиться с кучей научных функций.
Edited 2015-01-11 10:47 (UTC)

[identity profile] meharher.livejournal.com 2015-01-11 10:50 am (UTC)(link)
Python - возможно.
Но, возможно, именно R и есть как раз подходящий вариант.
Но, боюсь, что ни R, ни, тем более, Python не подходят под определение "освоить за 2-3 дня".

[identity profile] phlya.livejournal.com 2015-01-11 10:54 am (UTC)(link)
Может и R, зависит от задач.
На мой личный вкус Python освоить проще (с ним я справился, а R несколько раз начинал мучить, и так и не могу сказать, что освоил...). R очень хорош чисто для статистики, без программирования. Но если надо делать что-то более сложное, то питон становится резко удобнее, на мой взгляд.
Ну, освоить по-настоящему за 2-3 дня никакой язык нельзя, но на питоне можно писать уже после 1 дня (может, костыльно, но можно).
Edited 2015-01-11 10:55 (UTC)
arech: (Default)

[personal profile] arech 2015-01-11 10:55 am (UTC)(link)
R очень медленный и очень специфический. И именно программировать на нём - настоящий pain.

[identity profile] meharher.livejournal.com 2015-01-11 11:11 am (UTC)(link)
R векторизован и потому быстр.
Вопрос тут другой: можно ли свести задачу к вызовам фунций из библиотек с минимумом программирования. Для многих задач это так. Морфологические признаки ежей - явно подходят.
В данном случае - не знаю, мне трудно судить.

arech: (Default)

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

[identity profile] maz-d.livejournal.com 2015-01-11 03:27 pm (UTC)(link)
/Но, боюсь, что ни R, ни, тем более, Python не подходят под определение "освоить за 2-3 дня"./

полностью освоить за 2-3 дня ни один язык не получится. Но у питона все же уровень вхождения довольно низкий

[identity profile] meharher.livejournal.com 2015-01-11 03:35 pm (UTC)(link)
На Питоне я работал год (после, скажем, примерно 20 лет на всяких языках, включая C/C++/C#/Java etc. , на R последние 6 недель).
Питон труднее шел: было легче читать и поддерживать, но труднее найти нужную конструкцию.
В R, правда, труднее найти нужную биб. функцию :)
Все относительно.

[identity profile] maz-d.livejournal.com 2015-01-11 04:07 pm (UTC)(link)
мне кажется ключевое тут

/после, скажем, примерно 20 лет на всяких языках, включая C/C++/C#/Java etc./

у меня такого бэкграунда нет, и мне кажется человеку без такого бэкграунда питон освоить проще чем ту же джаву особенно если ставить цель "освоить за 2-3 дня". Конечно скорость - узкое место. Но думается мне человеку нужна не только скорость, иначе бы все писали на ассемблере =)

[identity profile] meharher.livejournal.com 2015-01-11 04:35 pm (UTC)(link)
Я ж к тому, что питон меня напрягал ... :)

[identity profile] maz-d.livejournal.com 2015-01-11 04:44 pm (UTC)(link)
так я ж и не говорю что он вас не напрягал =)

[identity profile] chebudzee.livejournal.com 2015-01-29 01:22 pm (UTC)(link)
С каких пор освоить питон проще чем джаву? Джава куда проще синтаксически и читабельнее. Да и быстрее, чего уж греха таить. Питон хорош... да не для чего он не хорош. Всегда есть варианты лучше и проще. Тот же руби, если интересует именно простота в освоении. У питона синтаксис сильно грязный, читать код на нём сплошное мучение.

[identity profile] phlya.livejournal.com 2015-02-01 08:42 am (UTC)(link)
У питона синтаксис сильно грязный, читать код на нём сплошное мучение
Хаха.

[identity profile] psilogic.livejournal.com 2015-01-11 10:52 am (UTC)(link)
так ему же надо быстрее, а вы опять интерпретируемый предлагаете

[identity profile] phlya.livejournal.com 2015-01-11 10:59 am (UTC)(link)
NumPy быстрый, я ж говорю.

[identity profile] http://users.livejournal.com/_hellmaus_/ 2015-01-11 11:47 am (UTC)(link)
+1, кроме того, в Python есть замечательная библиотека Biopython для работы с последовательностями.
Питон не имеет равных в читаемости кода. Если вы будете возвращаться к однажды написанной программе через год-два, то на Питоне вы быстрее всего вспомните и разберетесь, что там к чему.

[identity profile] phlya.livejournal.com 2015-01-11 12:14 pm (UTC)(link)
И не только последовательностями :) Там куча всего разного, и довольно активно развивается.

[identity profile] anshdo.livejournal.com 2015-01-11 03:27 pm (UTC)(link)
Python -- интерпретируемый язык, никаких преимуществ автору он не даст.

[identity profile] zelych.livejournal.com 2015-01-11 03:55 pm (UTC)(link)
Питон можно рассматривать как обёртку над быстрыми сишными реализациями строк и массивов (numpy).
По сравнению с бейсиком на некотором классе задач перимущества будут катастрофическими.

[identity profile] wormball.livejournal.com 2015-01-13 02:38 pm (UTC)(link)
Э, батенька. Интерпретатор - великая вещь, позволяет писать программу и одновременно отлаживать её со скоростью мысли. Просто в массовом сознании интерпретаторы были знатно дискредитированы собственно бейсиком. Точнее, не столько им, сколько контрастом между тем, что "было" (компьютеры наподобие БК-0010 с голым бейсиком, где всё надо было забивать ручками) и тем, что "стало" (писюки с виндой, где все нужные массовому пользователю программы вроде как уже написаны).

[identity profile] zelych.livejournal.com 2015-01-11 03:28 pm (UTC)(link)
Поддерживаю.
Питон уже почти стал стандартным инструментом учёного (вместе с библиотеками типа scipy, biopython).
При изучении нового языка важно иметь удобную среду разработки и возможность быстро получить какие-то результаты.
У питона для этого есть IPython Notebook (http://ipython.org/notebook.html) (там видео, его можно сразу со второй минуты смотреть).

Вот тут подборка ссылок с примерами использования A gallery of interesting IPython Notebooks (https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)

Среди них, например есть Comparing different approaches to evolutionary simulations (http://nbviewer.ipython.org/github/yoavram/ipython-notebooks/blob/master/simulation%20frameworks.ipynb)
Edited 2015-01-11 15:31 (UTC)

[identity profile] lvqcl.livejournal.com 2015-01-11 04:00 pm (UTC)(link)
Вопрос в том, понадобятся ли эти библиотеки? Я вот посмотрел на Biopython - по-моему, он только на ДНК-последовательности заточен.
Ну и библиотеки для линейной алгебры, многомерных матриц, фурье-преобразований тоже могут автору не помочь.

[identity profile] phlya.livejournal.com 2015-01-11 06:39 pm (UTC)(link)
Не только ДНК, и не только последовательности, но его я специально не упоминал, потому что да, вряд ли понадобится. А вот numpy обязательно.

Но как по мне, так для разработки программ удобнее Spyder нежели IPython Notebook, который, в свою очередь, незаменим для мануалов :)

[identity profile] int19h.livejournal.com 2015-01-11 10:09 pm (UTC)(link)
Для разработки программ ноутбук, в принципе, и не заточен. Но он очень удобен, когда надо, скажем так, поэкспериментировать - т.е. загрузить какой-то массив данных, и подергать его так и эдак, с графиками и всем прочим (именно в процессе работы, не только как конечный результат). При этом, если где-то там появляются большие портянки кода, то вот их уже надо переносить в библиотеки, над которыми уже удобно работать из IDE - а потом грузить и дергать их из того же ноутбука. Но для очень многих научных задач много кода там не будет никогда.

Да, а что касается IDE - сейчас много всего хорошего и бесплатно, особенно под винду. PyCharm (https://www.jetbrains.com/pycharm/) (бесплатный в варианте Community Edition), а если человек привык к Visual Studio - PTVS (http://pytools.codeplex.com/) в связке с VS 2013 Community Edition.

(Про последний сразу честно скажу, что я - один из его разработчиков, так что это, в принципе, самореклама. Но мы умеем много гитик (http://pytools.codeplex.com/wikipage?title=Features%20Mixed-mode%20Debugging), которые в принципе не умеет больше никто, и которые могут в данной нише быть полезными.)

[identity profile] kuhelklopf.livejournal.com 2015-01-11 06:29 pm (UTC)(link)

Присоединяюсь к Python