Посоветуйте язык программирования
Jan. 11th, 2015 02:41 pmЯ всю жизнь программировал только на бейсике, на разных его версиях. Так получилось. Когда писал кандидатскую, набралось очень много таблиц с данными (это были морфологические признаки морских ежей), и я задолбался обсчитывать их на калькуляторе. Поэтому быстренько освоил бейсик (тогда персональные компьютеры IBM только начали появляться, и к ним прилагался язык GW-Basic). Освоил - и сразу почувствовал себя человеком. С тех пор не переучивался, сейчас пишу все свои программки на VBA в MS Access. То есть в программировании я дилетант, но опытный. Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить? Времени, сил и желания преодолевать трудности и вникать в программистские проблемы - не имеется. Мне бы этот язык просто скачать (можно купить, если не слишком дорого), освоить за пару-тройку дней - и вперед. Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее.
no subject
Date: 2015-01-11 04:50 pm (UTC)знаете разницу между этими двумя строчками по производительности:
cout << "text" << std::endl;
cout << "text" << "\r\n";
no subject
Date: 2015-01-11 04:51 pm (UTC)Ну вот чисто ради смеха, запустил на VBA Excel такую задачу:
1) выделяем массив double(10000, 10000)
2) заполняем его случайными данными от 0 до 1
3) умножаем каждую ячейку на 9 соседних, с честной проверкой на края таблицы
4) крутим 2) и 3) 10 раз, чтобы оценить время на инициализацию массива
результаты (не очень чистые, т.к. я не снимал IE, торрент и прочую хрень):
однократный прогон ~ 83с,
10-кратный прогон ~ 827с.
Итого на инициализацию время почти не тратится, каждая итерация - полторы минуты.
Каждая итерация это, на минуточку, почти миллиард умножений с плавающей точкой на VB + заполнение массива на 100 млн. случайными числами + проверки и логика циклов.
У меня, конечно, не самая слабая машинка, но и не суперкомпьютер: i7 (860, 4 ядра), 2.8GH, 4GB, винты не SSD.
В общем, повторюсь, скорее всего надо просто исключить обращения к базе данных Access из итераций. Если же они там необходимы, то переход на C++ поможет, как мертвому припарки.
no subject
Date: 2015-01-11 04:52 pm (UTC)no subject
Date: 2015-01-11 04:53 pm (UTC)Другая типичная ошибка - забывать слово const и использовать string вместо const string&, а еще злоупотреблять присваиванием строк. Хотя это работает, это работает кошмарно медленно и жрет очень много памяти. В глубоком цикле такая ошибка может привести к высвоповыванию или даже к срабатыванию OOM killer, не говоря уж о том, что из-за этого жалкие несколько килобайт текста могут обрабатываться несколько минут.
На Java и других GC-языках тоже есть типичная ошибка - делать у объектов слишком большое время жизни. Из-за того, что объект не надо удалять, программист слабо следит за тем, в какой именно области видимости объект создан. В результате ссылка на объект может жить в сотни раз дольше, чем реально надо, и память забивается такими вот "вроде бы нужными" объектами, которые GC не удаляет, потому что формально они еще используются. Обычно это бывает, если программист ленится передавать переменную через параметры функции и потому делает переменную членом класса. Такая практика - вообще очень большое зло, но на языках без GC программист очень быстро получает по лбу граблями от деструктора этой переменной и перестает так делать, а на языках с GC можно писать так годами и не понимать, почему это плохо.
no subject
Date: 2015-01-11 04:53 pm (UTC)no subject
Date: 2015-01-11 04:56 pm (UTC)no subject
Date: 2015-01-11 04:56 pm (UTC)no subject
Date: 2015-01-11 04:58 pm (UTC)http://matlab.ru/products/simulink
no subject
Date: 2015-01-11 04:58 pm (UTC)Не нужно переучиваться, все как в обычном Basic. Работает столь же быстро как паскаль или СИ. Проверялось на тестовых программах. Работает под DOS, а потому любая винда, как минимум до 7, ему не мешают и ничего не нужно инсталлировать.
Мой знакомый еще с начала 90-х как сел на этот язык тоже с моделированием и не хочет переучиваться. Его все устраивает.
no subject
Date: 2015-01-11 05:00 pm (UTC)Эээм, для Java есть как минимум две бесплатные среды (Eclipse, IDEA Community). И, например, IDEA как по мне намного умнее и приятнее VS. Плюсом к Java полноценная кроссплатформенность
no subject
Date: 2015-01-11 05:02 pm (UTC)Ток не вижу смысла в ооп при имитацинном моделировании.
no subject
Date: 2015-01-11 05:04 pm (UTC)no subject
Date: 2015-01-11 05:05 pm (UTC)а много ли об этом кто знает?
no subject
Date: 2015-01-11 05:06 pm (UTC)Написанный на Delphi калькулятор как раз МОЖЕТ время от времени показывать, что 2+2 равно пяти, если сделана одна определенная, очень характерная именно для Delphi ошибка: объект уничтожен в неправильном месте (слишком рано). При этом в памяти обычно все еще сохраняется "правильное" содержимое объекта, и программа "продолжает работать". Но иногда, довольно редко, везение кончается, и программа выдает неверный ответ.
Речь именно о том, что на Delphi программа с явной ошибкой может ЧУДОМ работать правильно в 99% случаев. На большинстве других языков программа с такой ошибкой не работала бы совсем, и ошибка была бы сразу найдена.
Причина: в Delphi "улучшили" Pascal. В оригинальном паскале была четкая синтаксическая разница между объектом и указателем. В Delphi "для удобства" указатели на объекты замаскировали: когда программист создает объект, он на самом деле получает указатель, но этот указатель ведет себя как объект (обращения к полям делаются через точку, а не через крыж-точку, как в Паскале, и так далее). Из-за этого программист часто делает операцию вроде копирования с указателем, думая, что работает с объектом. И часто удаляет единственный экземпляр объекта, думая, что удаляет ненужную копию. Но при этом указатели продолжают оставаться доступными. Обратившись по ним, часто можно получить вполне правильный результат, как если бы объект все еще существовал.
no subject
Date: 2015-01-11 05:07 pm (UTC)no subject
Date: 2015-01-11 05:09 pm (UTC)а в других языках? ;)
no subject
Date: 2015-01-11 05:09 pm (UTC)На кой болт автору учиться устаревшей байде?
Тем более сейчас в дневник к автору заглянул... с таким интеллектом ему ООП ухватить - на раз-два.
так что С#
no subject
Date: 2015-01-11 05:11 pm (UTC)no subject
Date: 2015-01-11 05:12 pm (UTC)no subject
Date: 2015-01-11 05:15 pm (UTC)no subject
Date: 2015-01-11 05:15 pm (UTC)no subject
Date: 2015-01-11 05:16 pm (UTC)no subject
Date: 2015-01-11 05:17 pm (UTC)no subject
Date: 2015-01-11 05:18 pm (UTC)Если учесть, что при работе с массивами С почти на порядок быстрее Паскаля…
no subject
Date: 2015-01-11 05:18 pm (UTC)Таким образом есть страшный и ужасный фортран - это набор библиотек + привычка науч сотрудников, корявый (личное оценочное суждение) питон - как простенький язык с низкими требованиями к освоению, и спец пакеты - если человек 20 лет пользовался математикой или матлабом, пересесть на что-то другое ему будет очень сложно.