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

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

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

[identity profile] pavel-ladikov.livejournal.com 2015-01-11 02:29 pm (UTC)(link)
>Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее

Я находился в точно такой же ситуации и могу сказать, что Вы сильно отстали от времени. Итак:

1. Если говорить о VBA - речь идет не о "интерпретаторе", а о "гибриде", использующем прекомпиляцию в p-код при запуске программы и потом работающим с компилированным кодом в процессе исполнения.
Говорить что это медленнее, чем чистый исполняемый код - неверно. Если Вы посмотрите структуру скомпилированного файла, Вы увидите фактически ту же прекомпиляциюю, то есть какой-то простой код верхнего уровня служит как набор инструкций для вызова библиотек. Объектно-ориентированное и событийно-ориентированное программирование очень близко к интерпретации кода.

2. Собсстно язык давно "отцепили от компилятора" и скорость от языка программирования практически не зависит. Другое дело, что низкоуровневые языки позволяют выбросить "все лишнее" из библиотек, особенно обработчики исключений - и поднять скорость за счет этого. Но это не лучший способ улучшить свою программу.
Кроме того - инструментарий стал интеллектуальнее, он умеет переводить с одного языка на другой.
Лучше всего Вам переходить на платформу Visual Studio .NET, там используется единый компилятор C++, C# и VB.NET. Можно очень быстро, не думая об эффективности кода, получить работающую программу на VB.NET а если дойдет дело до превращения ее в многотиражный продукт - перекатать ее в си и оптимизировать уже в нем. И овцы целы и волки сыты. В смысле - и результат можно получить быстро - и потом довести код до идеала не спеша.

[identity profile] kallbasser.livejournal.com 2015-01-11 02:31 pm (UTC)(link)
>потом идут Java и C# они хоть и медленее в два раза
любопытно, про в 2 раза вы откуда взяли?

[identity profile] gryzchick.livejournal.com 2015-01-11 02:31 pm (UTC)(link)
Вы можете верить кому угодно, это не меняет очевидных фактов.

[identity profile] amosk.livejournal.com 2015-01-11 02:31 pm (UTC)(link)
А факты-то где? ))

[identity profile] guga50.livejournal.com 2015-01-11 02:32 pm (UTC)(link)
шарп и плюсы - два мира два шапиро.

[identity profile] gryzchick.livejournal.com 2015-01-11 02:34 pm (UTC)(link)
В интерпретаторах.

[identity profile] phlya.livejournal.com 2015-01-11 02:36 pm (UTC)(link)
Так речь про питон, а тут не то, вроде.

[identity profile] lvqcl.livejournal.com 2015-01-11 02:39 pm (UTC)(link)
Ну, речь-то про Дельфи шла. Хотя Free Pascal, Lazarus - да, есть и бесплатны.

[identity profile] guga50.livejournal.com 2015-01-11 02:40 pm (UTC)(link)
i-=++i+i++

сперва выполнится префиксный инкремент и И станет равно (И+1)
потом к нему добавится И. в результате (2И + 1)
потом выполнится постфиксный инкремент и И станет равно (2И + 2)
потом из первоначального И вычтется (2И + 2). и И станет равно (-2И - 2)
ну да, сходу промахнулся.

++i = i++
В итоге И станет (И+2)

[identity profile] geniepro.livejournal.com 2015-01-11 02:41 pm (UTC)(link)
Раньше была бесплатная Turbo Delphi Explorer, но, похоже, заменили на триальную версию...

[identity profile] amosk.livejournal.com 2015-01-11 02:41 pm (UTC)(link)
Плюсую сюда же.

Просто перейти на VisualBasic.Net (Visual Studio 2008 или новее).
У среды выполнения .Net код программы при запуске компилируется в машинный и работает довольно быстро (во многих случаях сравнимо с С/С++)

[identity profile] lvqcl.livejournal.com 2015-01-11 02:41 pm (UTC)(link)
С тех пор 20 лет прошло. И процессоры, и компиляторы сильно поменялись.

[identity profile] http://users.livejournal.com/__observer/ 2015-01-11 02:42 pm (UTC)(link)
Чтобы дать рекомендацию нужно приблизительно понять что будут делать написанные вами программы. Какие алгоритмы и структуры данных будут использоваться. При выборе языка, а точнее системы программирования, нужно смотреть не только на сам язык но и на доступные библиотеки. Они могут сильно упростить процесс написания программ.

Раз у вас программы написаны на бейсике, то в первую очередь нужно смотреть на VB.Net, язык почти такой же но при этом гораздо быстрее (он компилируется).

В самом общем случае можно порекомендовать C# или VB.Net (Visual Studio Express Edition) и Java (IDEA Community Edition).
Можно также посмотреть в сторону функциональных языков F# и Scala. Но я не знаю насколько они подойдут.
Edited 2015-01-11 14:43 (UTC)

[identity profile] hate-all.livejournal.com 2015-01-11 02:42 pm (UTC)(link)
и еще SQL добавить для быстрых обсчетов массивов данных. И вообще красота.

[identity profile] mifromru.livejournal.com 2015-01-11 02:42 pm (UTC)(link)
С простой язык не далее "Hellow, word!\n" (и то, если сборкой не приходится заниматься, а это сделает IDE).
Лаконичность синтаксиса языка еще не означает, что язык простой.
У того же brainfuck весь синтаксис - 8 символов-команд, но много людей, которые пишут только на Basic, смогут написать на brainfuck хоть что-то осмысленное и оптимальное за пару дней (тот же "Hellow, word!\n")? А для профи освоить этот язык до сносного уровня - пол часа на пощупать. А в лоб плюсами, минусами и точками, он "Hellow, word!\n" за 10 минут слабает, из которых 8 уйдет на подсчет плюсов и минусов.
Тот же C при работе с массивами данных не может обойтись без указателей, а работа с ними для пришедшего из Basic "опытного дилетанта" - это не реально. Не стоит даже пытаться.
C - это язык для профессиональных программистов, и то только для решения узкого круга задач. Да, на нем можно написать что угодно. Ну так я и на ассемблере в теории могу написать что угодно (при наличии неограниченных ресурсов для написания этого чего угодно). Но только я не буду что угодно на нем писать.

[identity profile] ateregulov.livejournal.com 2015-01-11 02:44 pm (UTC)(link)
Сейчас самый удобный из продвинутых - это C#, если какой-то кусок кода надо ускорить, то используется unsafe mode и скорость будет не хуже чем у C++

[identity profile] amosk.livejournal.com 2015-01-11 02:44 pm (UTC)(link)
Кстати во многих случах код на бейсике наверно можно ускорить, если применять типизированные пременные для чисел, а не тип вариант который по умолчанию.

[identity profile] lvqcl.livejournal.com 2015-01-11 02:44 pm (UTC)(link)
>Чем не вариант?

Варез. Может не пойти по лицензионным соображениям.

[identity profile] agalakhov.livejournal.com 2015-01-11 02:46 pm (UTC)(link)
Python. Идеально подходит на роль "нового бейсика". Язык достаточно мощный, чтобы на нем можно было написать абсолютно что угодно (от сайта до операционной системы), но при этом прост.

Для математических расчетов к Python есть удобная библиотека SciPy/NumPy, математика в ней по скорости равноценна фортрану.

[identity profile] guga50.livejournal.com 2015-01-11 02:47 pm (UTC)(link)
и шош там сложного в указателях? :))) понять что у переменной адрес в памяти есть? это да! Это мегасложно!!
Тем более его никто не заставляет ими пользоваться.
Edited 2015-01-11 14:48 (UTC)

[identity profile] ateregulov.livejournal.com 2015-01-11 02:48 pm (UTC)(link)
Basic и все его производные собратья уже давно протухли

[identity profile] zlata-gl.livejournal.com 2015-01-11 02:49 pm (UTC)(link)
Надо же, сколько дельфушников !
Я думала - они вымерли.
Всем привет ! :-)

[identity profile] burundutsky.livejournal.com 2015-01-11 02:51 pm (UTC)(link)
Подлый VB портит мозг программиста. Лучше помучиться чуть, и выйти на чудесную дорогу C/C++. Лучше - плюсы, меньше надо будет в разные тонкости вникать.

[identity profile] guga50.livejournal.com 2015-01-11 02:51 pm (UTC)(link)
> Компилируемость языка не обеспечивает скорость
Зашибись! )) Интерпретатор палюбэ быстрее бгг)))

[identity profile] agalakhov.livejournal.com 2015-01-11 02:56 pm (UTC)(link)
Лучше не надо Pascal.

Если расставлять языки по их РЕАЛЬНОЙ сложности (за "сложность" принимать среднее количество грубых ошибок при программировании на одну страницу кода), то расклад получается совсем иным:

Python - простейший, затем классический Pascal, C, Ruby, Java, C++, PHP, Delphi - самый сложный.

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

Классический Pascal (вариант Никлауса Вирта) от этой проблемы свободен, но доступной среды для классического Pascal не существует. Есть только Delphi. Язык C довольно прост - его трудно понять в первые дни из-за указателей, но зато там кроме указателей вообще никаких сложностей нет. C++ сложнее намного, там опять вылезают ошибки в работе с памятью (применение приемов из C к С++ недопустимо и приводит к катастрофе). Поэтому Java стоит между ними - сложнее C, но проще C++.

Page 7 of 27