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-14 09:30 pm (UTC)(link)
Да :).

[identity profile] drvit.livejournal.com 2015-01-14 09:32 pm (UTC)(link)
это только если рядом будет биолог со знанием ООП, который сможет регулярно проводить такие аналогии , ускоряя обучение в разы )

[identity profile] sumerk.livejournal.com 2015-01-14 09:37 pm (UTC)(link)
Отличный комментарий.

[identity profile] drvit.livejournal.com 2015-01-14 11:03 pm (UTC)(link)
Вы всё очень правильно говорите, но очень специализированным языком. Если человек всю жизнь писал "VBA в MS Access", то многие термины будут просто не понятны, и КПД вашего комментария будет низким. К сожалению, чтобы понимать то, о чём вы говорите, надо собрать все эти "грабли" самому и/или прочитать очень хорошие книжки -- программирование это целая отрасль, где-то даже искусство.
В общем, Александру Владимировичу надо просто брать знакомого объективного профессионала (или познакомиться с таковым, или с несколькими -- уверен, многие с радостью познакомятся и помогут), который способен писать подобного рода комментарии, то есть грамотно и ёмко формулировать мысли, приглашать его к себе на чай и спокойно и неторопливо день-недельку-месяц разбирать вопросы и нюансы по всем 4 описанным вами пунктам, с описанием типовых задач, демонстрацией кода, профайлингом, обучающими примерами и т.д. Как правило, чтобы достичь качественного скачка (а автор хочет улучшения аж на порядок) нужно подняться на новый уровень, если и не в программировании как таковом, то в способности мыслить алгоритмически-ориентированно (это 2-4 пункт списка).
Edited 2015-01-14 23:22 (UTC)

[identity profile] drvit.livejournal.com 2015-01-14 11:19 pm (UTC)(link)
Почти любой человек склонен преуменьшать сложность задач в отрасли, в которой он не очень хорошо разбирается. Может даже показаться "да какая разница, я писал на языке Х, так что в общих чертах знаю, что такое алгоритмы и программирование". Скорее всего отсюда это "я точно знаю, что мне нужно, и вопрос сформулировал оптимальным образом". А когда вдруг копнёшь глубже, оказывается, что там столько концепций, парадигм и чёрт-ещё знает каких тонкостей -- целый мир, можно сказать "экосистема", которая создавалась не одним поколоением людей!
В общем, тема изначально патовая, хотя и популярная: каждый второй бросился с упоением описывать по сути свой жизненый программисткий опыт, вместо попытки понять изначальную задачу, которая существенно искажена самой формулировкой вопроса.

[identity profile] akheront.livejournal.com 2015-01-15 11:36 am (UTC)(link)
Память дешёвая была летом. Сейчас кусается.

[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] pssshik.livejournal.com 2015-01-15 02:22 pm (UTC)(link)
Память кусалась пять (10, 15) лет назад - сейчас дешевая и будет только дешеветь :)

[identity profile] akheront.livejournal.com 2015-01-15 07:06 pm (UTC)(link)
Да что вы говорите. Валюта дорожает, а память дешеветь станет? Она же импортная вся.

[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] woodenfriend.livejournal.com 2015-01-21 09:40 am (UTC)(link)
таких советчиков когда видишь - диву даёшься. вы вообще читали чего человеку нужно?
зачем визуальное программирование, когда требуется считать?
с++ - сложный язык, просто набитый проблемами, при всех его положительных сторонах. его осваивают посредством долгого расхаживания по не относящимся к делу граблям, а этого как раз требуется избежать. или вы забыли уже времена, когда никак не могли понять, чего от вас хочет компилятор?
ну и отдельного осуждения заслуживает совет изучить (!) как новое (!) то, что много лет не развивается и де факто уже мертво. вот оно запускаться перестанет через год, и что потом делать?

[identity profile] woodenfriend.livejournal.com 2015-01-21 09:49 am (UTC)(link)
вот много кто советует python, но будет ли он быстрее? он ведь тоже интерпретируемый. на нём конечно моднее писать чем на vb, и всякие виды плюшек готовые прилагаются, но не теряется ли смысл затеи?

[identity profile] woodenfriend.livejournal.com 2015-01-21 10:04 am (UTC)(link)
вот-вот. нужно решать задачи, и язык - всего лишь инструмент. который должен быть полезным и удобным, а не модным и идеологически правильным.
но всё-таки лучше хорошенько подумать прежде чем завязываться на конкретный вариант, потому как он может вскоре внезапно устареть, и придётся переучиваться.

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

[identity profile] victor-chapaev.livejournal.com 2015-01-21 05:09 pm (UTC)(link)
Вы меня, признаюсь, тоже удивили. Ладно бы, написали: "Вот я пишу модели уже N лет, пробовал разное - лучшее - МММ, написание интерфейса для приложений на этом вооще времени не отнимает. Всем это советую - и вам и автору поста". Вы же критикуете мой совет... А я ведь пишу модели с 90-х годов, пробовал разное, из современного, дельфи и билдер, советую, прошу заметить, по своему опыту, билдер.
Насчет того, чего хочет от меня транслятор, я начал понимать, когда еще винда 3.1 на 386 с дискет ставилась. А вот что от меня хочет интерпретатор VBA, частенько и сейчас не понимаю... И автор поста, пишущий свои модели на VBA, поэтому, вызывает у меня законное восхищение...
А последний ваш душераздирающий пример, когда билдер запускаться перестанет... Вот ужас то. Билдер не запускается, а я уже как дурак, С++ выучил! Чо делать-то?

[identity profile] woodenfriend.livejournal.com 2015-01-21 09:10 pm (UTC)(link)
чтобы вот прям взять да и посоветовать со всей компетентностью - разносторонности опыта не хватает. я всё-таки по образованию физик, а программирывать - это душевный позыв и финансовый мотив.

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

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

с высоты своих N лет работы в с++ я заявляю - это совершенно не то что нужно топикстартеру, особенно в виде c++ builder.

[identity profile] woodenfriend.livejournal.com 2015-01-22 08:57 am (UTC)(link)
хаха! зато математика сильно расширяет сознание :) меня очень в своё время поразил функциональный стиль, лямбды и разношёрстные списки. столько открытий :)

[identity profile] dark-barker.livejournal.com 2015-01-22 10:04 am (UTC)(link)
Ну по-любому будет быстрее чем "vba в MS Access".

Если в целом - хороший компромисс между "скоростью" и удобству под задачу. Ну и вообще что вы подразумеваете под "интерпретируемым" в данном случае? Он компилируется в байт-код и весьма "быстро" всё работает. Многие либы специализированные вообще нативно компилятся. Вот java, например, тоже медленная что ли?

[identity profile] woodenfriend.livejournal.com 2015-01-22 10:57 am (UTC)(link)
я не могу похвастаться опытом работы ни с VBA, ни с python. но (афаик) полноценной компиляции - трансляции в машинный код - python не умеет. а выполнение байт-кода - это всего лишь упрощенная интерпретация. представления не имею какая там у них производительность по сравнению друг с другом и с java.
java - медленная

[identity profile] dark-barker.livejournal.com 2015-01-23 08:30 am (UTC)(link)
ну в таком случае можно сказать что машинный код (на intel-совместимых процессорах, например) - это байткод для процессора. причём там крайне жирные опкоды, меж прочим. жирнее, чем байткоды жавы и всех остальных. и да, этот процессор выполняет жирные cisc-команды как множество мелких настоящих risc -команд, которые составляют зашитые в проц микропрограммы для каждой из его жирных команд.

вы считаете, что прослойка, которая просто транслирует эти тощие байткоды, например, жавы на машинный код действительно теряет множество ресурсов? почему оно будет медленно?

> а выполнение байт-кода - это всего лишь упрощенная интерпретация.

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

> java - медленная

нужно конкретнее в данном случае говорить, что под этим имеется в виду.
например, если вы считаете, что вычислительная задача, написанная на java будет всерьёз "медленнее", чем программа после "полноценной компиляции", то вы скорее всего не очень понимаете материал (о чём сейчас говорите).
upd з.ы. Это всё писалось в контексте, что даже если забыть о JIT, которые есть для всех обсуждаемых здесь виртуальных машин, которые вообще нивелируют до нуля разницу байткод-машинный код. Да, их надо уметь приготовить порой итд, но речь не о том.
Edited 2015-01-23 08:34 (UTC)

[identity profile] woodenfriend.livejournal.com 2015-01-23 10:33 am (UTC)(link)
я с вами пока соглашусь.
нельзя не отметить, что вопросы подобные сравнению скорости работы кода написанного на java и на c - предмет постоянных бурнейших срачей дискуссий, причем правильно поставленные эксперименты подбрасывают поочёредно аргументы в копилку каждого из мнений. не углубляясь в дебри можно разве что заявить "несогласие с обоими" (с)
готов продолжать разговор только после существенного расширения своей эмпирической базы :)
peace

[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:12 am (UTC)(link)
Разумеется, он универсален. Но если нужно работать со сложными динамическими структурами данных, то могут быть удобнее языки более высокоуровневые.

[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, есть официально в свободном доступе.

Page 25 of 27