Посоветуйте язык программирования
Jan. 11th, 2015 02:41 pmЯ всю жизнь программировал только на бейсике, на разных его версиях. Так получилось. Когда писал кандидатскую, набралось очень много таблиц с данными (это были морфологические признаки морских ежей), и я задолбался обсчитывать их на калькуляторе. Поэтому быстренько освоил бейсик (тогда персональные компьютеры IBM только начали появляться, и к ним прилагался язык GW-Basic). Освоил - и сразу почувствовал себя человеком. С тех пор не переучивался, сейчас пишу все свои программки на VBA в MS Access. То есть в программировании я дилетант, но опытный. Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить? Времени, сил и желания преодолевать трудности и вникать в программистские проблемы - не имеется. Мне бы этот язык просто скачать (можно купить, если не слишком дорого), освоить за пару-тройку дней - и вперед. Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее.
no subject
Date: 2015-01-14 09:30 pm (UTC)no subject
Date: 2015-01-14 09:32 pm (UTC)no subject
Date: 2015-01-14 09:37 pm (UTC)no subject
Date: 2015-01-14 11:03 pm (UTC)В общем, Александру Владимировичу надо просто брать знакомого объективного профессионала (или познакомиться с таковым, или с несколькими -- уверен, многие с радостью познакомятся и помогут), который способен писать подобного рода комментарии, то есть грамотно и ёмко формулировать мысли, приглашать его к себе на чай и спокойно и неторопливо день-недельку-месяц разбирать вопросы и нюансы по всем 4 описанным вами пунктам, с описанием типовых задач, демонстрацией кода, профайлингом, обучающими примерами и т.д. Как правило, чтобы достичь качественного скачка (а автор хочет улучшения аж на порядок) нужно подняться на новый уровень, если и не в программировании как таковом, то в способности мыслить алгоритмически-ориентированно (это 2-4 пункт списка).
no subject
Date: 2015-01-14 11:19 pm (UTC)В общем, тема изначально патовая, хотя и популярная: каждый второй бросился с упоением описывать по сути свой жизненый программисткий опыт, вместо попытки понять изначальную задачу, которая существенно искажена самой формулировкой вопроса.
no subject
Date: 2015-01-15 11:36 am (UTC)no subject
Date: 2015-01-15 11:47 am (UTC)> Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 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!). Он возможно вообще не подпадает под сформулированную вами задачу - написания ядра считающего какую-то модель. И все же это язык, которым программируют ученые - он упрощен где возможно, и усилена выразительность, где это надо.
Удачи!
no subject
Date: 2015-01-15 02:22 pm (UTC)no subject
Date: 2015-01-15 07:06 pm (UTC)no subject
Date: 2015-01-15 07:28 pm (UTC)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 ... ), о компиляции и распараллеливании на ядра процессора позаботились программисты БД.
no subject
Date: 2015-01-20 11:21 am (UTC)Тем более что простой поиск выводит на https://pypi.python.org/pypi/digital-organism-simulation-environment/1.0.2 (https://pypi.python.org/pypi/digital-organism-simulation-environment/1.0.2), где явно что-то говорится о генетике.
no subject
Date: 2015-01-21 09:40 am (UTC)зачем визуальное программирование, когда требуется считать?
с++ - сложный язык, просто набитый проблемами, при всех его положительных сторонах. его осваивают посредством долгого расхаживания по не относящимся к делу граблям, а этого как раз требуется избежать. или вы забыли уже времена, когда никак не могли понять, чего от вас хочет компилятор?
ну и отдельного осуждения заслуживает совет изучить (!) как новое (!) то, что много лет не развивается и де факто уже мертво. вот оно запускаться перестанет через год, и что потом делать?
no subject
Date: 2015-01-21 09:49 am (UTC)no subject
Date: 2015-01-21 10:04 am (UTC)но всё-таки лучше хорошенько подумать прежде чем завязываться на конкретный вариант, потому как он может вскоре внезапно устареть, и придётся переучиваться.
no subject
Date: 2015-01-21 01:28 pm (UTC)Вот С++ или более удобная MFC (не говоря про шарп) при всей крутизне возможностей очень затрудняет работу с графикой, а осваивание всяких openGL уже трудоемко. PHP достаточно быстр и легок в освоении. Очень много готовых решений в инете. И, главное, уже заточен для показа в инете. В локальном использовании существуют много инструментов, эмулирующих сервер, например, пакет "Денвер".
no subject
Date: 2015-01-21 05:09 pm (UTC)Насчет того, чего хочет от меня транслятор, я начал понимать, когда еще винда 3.1 на 386 с дискет ставилась. А вот что от меня хочет интерпретатор VBA, частенько и сейчас не понимаю... И автор поста, пишущий свои модели на VBA, поэтому, вызывает у меня законное восхищение...
А последний ваш душераздирающий пример, когда билдер запускаться перестанет... Вот ужас то. Билдер не запускается, а я уже как дурак, С++ выучил! Чо делать-то?
no subject
Date: 2015-01-21 09:10 pm (UTC)но вот антисоветы давать могу, ибо они тоже полезны. чего-чего, а плюсы я во всяких видах повидал.
вот вы смеётесь над гипотетическими проблемами юзера, выучившего язык, но потерявшего любимую IDE, а сами только подтверждаете существование проблемы своей глубокой привязанностью к архаичному сибилдеру. какая уж там мощь с++, если с вашим любимым билдером никакими сторонними библиотеками не попользуешься. если буст ещё из жалости костыльки для него повставлял, то проекты поуже - просто не соберутся. да и нетрудно понять почему с него потом трудно слезать - гуй непереносим, а портировать целые проекты под другой компилятор - это однозначно занятие не для новичков.
с высоты своих N лет работы в с++ я заявляю - это совершенно не то что нужно топикстартеру, особенно в виде c++ builder.
no subject
Date: 2015-01-22 08:57 am (UTC)no subject
Date: 2015-01-22 10:04 am (UTC)Если в целом - хороший компромисс между "скоростью" и удобству под задачу. Ну и вообще что вы подразумеваете под "интерпретируемым" в данном случае? Он компилируется в байт-код и весьма "быстро" всё работает. Многие либы специализированные вообще нативно компилятся. Вот java, например, тоже медленная что ли?
no subject
Date: 2015-01-22 10:57 am (UTC)java - медленная
no subject
Date: 2015-01-23 08:30 am (UTC)вы считаете, что прослойка, которая просто транслирует эти тощие байткоды, например, жавы на машинный код действительно теряет множество ресурсов? почему оно будет медленно?
> а выполнение байт-кода - это всего лишь упрощенная интерпретация.
это категорически не так. разница относительно виртуальной машины примерно как при трансляции исходника на си и выполнения скопилированной проги на реальном процессоре.
> java - медленная
нужно конкретнее в данном случае говорить, что под этим имеется в виду.
например, если вы считаете, что вычислительная задача, написанная на java будет всерьёз "медленнее", чем программа после "полноценной компиляции", то вы скорее всего не очень понимаете материал (о чём сейчас говорите).
upd з.ы. Это всё писалось в контексте, что даже если забыть о JIT, которые есть для всех обсуждаемых здесь виртуальных машин, которые вообще нивелируют до нуля разницу байткод-машинный код. Да, их надо уметь приготовить порой итд, но речь не о том.
no subject
Date: 2015-01-23 10:33 am (UTC)нельзя не отметить, что вопросы подобные сравнению скорости работы кода написанного на java и на c - предмет постоянных бурнейших
срачейдискуссий, причем правильно поставленные эксперименты подбрасывают поочёредно аргументы в копилку каждого из мнений. не углубляясь в дебри можно разве что заявить "несогласие с обоими" (с)готов продолжать разговор только после существенного расширения своей эмпирической базы :)
peace
no subject
Date: 2015-01-23 11:17 am (UTC)фактически на питоне можно писать сходу при нулевом знакомстве.
другой хороший вариант языка который может все и имеет низкий порог вхождения - Racket (ранее PLT Sheme) - очень часто использутся для начального обучения программированию вместо бейсика. по нему есть масса учебных материалов и курсов (только англоязычных), язык хорош для аналитики и обработки текста и таблиц. это lisp-семейство, поэтому на другие 'взрослые' языки он не похож.
no subject
Date: 2015-01-24 11:12 am (UTC)no subject
Date: 2015-01-24 11:22 am (UTC)1) MATLAB при условии активного использования векторизации кода (сведение задачи к перемножению матриц). Есть бесплатный аналог Octave
2) Python + SciPy. Неплохой вариант, но опять же потребуется привыкать к библиотеке SciPy.
3) Lua, особенно LuaJIT: хотя язык сам по себе очень прост и не может похвастаться большим числом библиотек, но синтаксис даже немного похож на BASIC, можно писать достаточно быстрые программы, не отходя от привычного Вам стиля работы. Достаточно прост в использовании. LuaJIT работает очень быстро.
4) Javascript: Си-подобный синтаксис, есть быстрые реализации вроде V8
Всё, кроме MATLAB, есть официально в свободном доступе.