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

Date: 2015-01-11 07:18 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
эээээ...

я имел ввиду, что до С++11, функция возвращающая значение std::vector (не reference) - будет копирование данных. В С++11 придумали "move operator" для того чтобы не копировать данные.

Date: 2015-01-11 07:19 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
правильнее, конечно надо было написать так:

std::vector some_function();
...
auto res = some_function();

Date: 2015-01-11 07:20 pm (UTC)
From: [identity profile] lvqcl.livejournal.com
Так хозяин блога не для мобил пишет.

Date: 2015-01-11 07:20 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
правильнее, конечно надо было написать так:

std::vector some_function();
...
auto res = some_function();

Date: 2015-01-11 07:23 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
думаете, Майкрософт не сделает это для приложений на настольные ОС?

кстати, это у МС уже давно есть: http://msdn.microsoft.com/en-us/library/6t9t5wcf.aspx

Date: 2015-01-11 07:25 pm (UTC)
From: [identity profile] magik-ocean.livejournal.com
Мой голос за Python - он прост, имеет массу библиотек, и огромное научное сообщество. Тем, кто будет говорить, что он медленный не верьте, учёные для своих целей сделали его достаточно быстрым :)
Edited Date: 2015-01-11 07:44 pm (UTC)

Date: 2015-01-11 07:29 pm (UTC)
From: [identity profile] guga50.livejournal.com
>> 10-кратный прогон ~ 827с.

Visual Studio 2013. C++. Оптимизация на скорость О2. Prefer fast code.
Винда 7ка. Проц Intel® Core™2 Quad Processor Q8300 (4M Cache, 2.50 GHz) 8Gb Ram.

18 секунд

http://ic.pics.livejournal.com/guga50/10354015/1544/1544_900.jpg

мля ((((( ну в цикле b должно быть до 10ти... торопился. хрен с ним пусть 20 секунд.
Edited Date: 2015-01-11 07:47 pm (UTC)

Date: 2015-01-11 07:42 pm (UTC)
From: [identity profile] guga50.livejournal.com
МАСМ - это юность босоногая )))

Date: 2015-01-11 07:47 pm (UTC)
From: [identity profile] aleksclan.livejournal.com
под какой проц ?

Date: 2015-01-11 07:47 pm (UTC)
From: [identity profile] psilogic.livejournal.com
Ваш пример из совершенно другой проблемы. Если у вас есть коллектив программистов - у каждого свои привычки, стиль, профессиональные верования, аналогичные религиозным - у вас, конечно, возникнут какие-то трудности, с этим связанные, вам придется их так или иначе решать, и язык, конечно, где-то будет вам помогать, а где-то нет.

Но если вы - сам по себе, вы новичок, и вам не до экспериментов, а надо делать практическое дело - то достаточно просто четко понимать, что именно вы пишете и не писать конструкции, смысл которых вы не понимаете до конца. И тогда многие вопросы типа auto res = отпадут - просто потому, что вы не будете использовать move оператор, пока не разобрались, что это такое.

C++, конечно, много свободы предоставляет, но, если вы сами себе не злой буратина, то просто будете использовать какую-то его часть, которую знаете. В большом коллективе, естественно, это не сработает.

Date: 2015-01-11 07:47 pm (UTC)
From: [identity profile] toshick.livejournal.com
ага, у Вас чуть другое, я крутил и заполнение рандомом 10 раз тоже
и честные проверки делал на края массива, все 100 000 раз ;-)

все равно 40 раз - очень много, похоже, у меня XL начал свопиться, я же другие приложения не убрал
Надо бы проверить, что даст VB в Visual Studio.

В любом случае, если мы угадали сложность задачи, то выигрыш во времени не окупает изучения неспециалистом нового языка программирования, а проблема скорее всего в обращениях к db

Date: 2015-01-11 07:48 pm (UTC)
From: [identity profile] toshick.livejournal.com
Sub qqq()
Dim a(10000, 10000) As Double
Dim i, j, l As Long

Debug.Print "start", Time()

For l = 1 To 10

For i = 1 To 10000
For j = 1 To 10000
a(i, j) = Rnd()
Next j
Next i

For i = 1 To 10000
For j = 1 To 10000
If i <= 1 Then
If j <= 1 Then
a(i, j) = a(i, j)
ElseIf j >= 10000 Then
a(i, j) = a(i, j)
Else
a(i, j) = 1 * a(i, j - 1) * a(i, j) * a(i + 1, j + 1) * a(i + 1, j - 1) * a(i + 1, j) * a(i + 1, j + 1)
End If
ElseIf i <= 10000 Then
If j <= 1 Then
a(i, j) = a(i, j)
ElseIf j >= 10000 Then
a(i, j) = a(i, j)
Else
a(i, j) = a(i - 1, j - 1) * a(i - 1, j) * a(i - 1, j + 1) * a(i, j - 1) * a(i, j) * a(i, j + 1) * 1
End If
Else
If j <= 1 Then
a(i, j) = 1 * a(i - 1, j) * a(i - 1, j + 1) * 1 * a(i, j) * a(i + 1, j + 1) * 1 * a(i + 1, j) * a(i + 1, j + 1)
ElseIf j >= 10000 Then
a(i, j) = a(i - 1, j - 1) * a(i - 1, j) * 1 * a(i, j - 1) * a(i, j) * 1 * a(i + 1, j - 1) * a(i + 1, j) * 1
Else
a(i, j) = a(i - 1, j - 1) * a(i - 1, j) * a(i - 1, j + 1) * a(i, j - 1) * a(i, j) * a(i + 1, j + 1) * a(i + 1, j - 1) * a(i + 1, j) * a(i + 1, j + 1)
End If
End If
Next j
Next i

Next l

Debug.Print "end", Time()

End Sub


чорт, все отступы съело !
Edited Date: 2015-01-11 07:49 pm (UTC)

Date: 2015-01-11 07:51 pm (UTC)
From: [identity profile] guga50.livejournal.com
я очень советую Лафоре "ООП в С++"
Читается как "Мурзилка"

Date: 2015-01-11 07:55 pm (UTC)
From: [identity profile] guga50.livejournal.com
это я понял. как по жопе граблями получить в смысле по лбу я не понял.

Date: 2015-01-11 08:01 pm (UTC)
From: [identity profile] guga50.livejournal.com
как же можно такой дикий огород намутить?
если тэмп часть объекта такого не будет пока он живёт.

Date: 2015-01-11 08:04 pm (UTC)
From: [identity profile] guga50.livejournal.com
ох ебать ))) жёска!
за это я Басик не люблю. бггг)))

Date: 2015-01-11 08:05 pm (UTC)
From: [identity profile] tarzan-pasha.livejournal.com
Нужно сначала будет определиться с вашими целями и предпочтеньми:
Хотите работать в вебе и создавать сайты и т.п или же хотите в офисе сидеть, писать программы внутри отдела программистов или же ездить по фирмам автоматижировать их. В зависимости от этого делать выбор. 1c довольно легко изучить. Php не сложен. Если для приложений под айфон или андроид, то объектный c++ или java.

Date: 2015-01-11 08:06 pm (UTC)
ext_605364: geg MOPO4 (geg_MOPO4)
From: [identity profile] gegmopo4.livejournal.com
Какая связь между GPL, Python, бесплатностью и Delphi?

Date: 2015-01-11 08:09 pm (UTC)
From: [identity profile] psilogic.livejournal.com
и века не прошло =)

Date: 2015-01-11 08:10 pm (UTC)
From: [identity profile] guga50.livejournal.com
здрасьте!! а уменя чё проверки понарошные штоль? они просто внутри фор сидят. чё огород городить.
ну хорошо. ща радн 10 раз закручу... но чёта мне подсказывает... :)))

УПД: ОХ! Ёпт! 41 секунда :((

вот такой вариант был:

double **a = new double*[10000];
for (int i = 0; i < 10000; i++)
a[i] = new double[10000];
srand((unsigned)time(NULL));
for (int b = 0; b < 10; b++){
for (int i = 0; i < 10000; i++)
for (int j = 0; j < 10000; j++)
a[i][j] = (double)rand() / RAND_MAX;
for (int i = 1; i < 9999; i++)
for (int j = 1; j < 9999; j++)
{
a[i][j] = a[i - 1][j - 1] *
a[i][j - 1] *
a[i + 1][j - 1] *
a[i - 1][j] *
a[i + 1][j] *
a[i - 1][j + 1] *
a[i][j + 1] *
a[i + 1][j + 1];

}
}

Но у меня и комп извините... по сравнению с вашим... мягко говоря... что как бэ тоже надо учитывать.

>> если мы угадали сложность задачи, то выигрыш во времени не окупает изучения неспециалистом нового языка программирования

а если не угадали, то вместо одной ночи расчётов человек будет ждать неделю, например...
Edited Date: 2015-01-11 08:42 pm (UTC)

Date: 2015-01-11 08:14 pm (UTC)
From: [identity profile] iralyan.livejournal.com
Питон для сбора данных, НО не для обработки

R или Weta уже для статанализа, манипуляции с данными проводить можно, но вот собирать их из, скажем, интеренета, толком не получится. Еще момент - R работает в оперативной памяти, так что для больших бд (генетика, например или big data) выдаст ошибку, хотя есть решения, как это обходить, например, с помощью Hadoop. Если у вас несколько десятков тысяч наблюдений, то в R есть пакеты, которые дают фору даже безбожно дорогому SAS EM. Хотя графики в R очень простые, то есть такие, которые нужны для работы, быстро отсмотреть несколько сотен, чтобы оценить обстановку, а не для публикаций. Красоту навести можно, но легче убить себя об стену, если честно. Коммерческие пакеты, естественно, этим не страдают.

Еще Julia недавно создали, чтобы статистики получили 2 в 1. Мой муж в восторге от Julia, я только Python осваиваю на Coursera, но после R это не так сложно как кажется. Поскольку язык новый, готовых скриптов мало, в отличие от R, которым пользуются все, от маркетологов до биологов, и, соответственно, все делятся скриптами и есть куча форумов, где можно спросить "что не так с моим кодом?". Джулия очень смешная, она работает с иррациональными числами, делает операции с неприведеными дробями. В общем, выглядит очень "правильно".

Все упомянутое мной выше - free software

Date: 2015-01-11 08:15 pm (UTC)
From: [identity profile] guga50.livejournal.com
8086...

Date: 2015-01-11 08:18 pm (UTC)
arech: (Default)
From: [personal profile] arech
1) openmp насколько я понимаю параллелит только на ядра процессора, а для реального ускорения нужно параллелить на GPU (если задача позволяет, а я почти уверен, что позволяет)
2) с/с++ при всей моей нежной любви к данному запросу подходят плохо: слишком сложны и опасны для новичка, не желающего морочиться, и вообще слишком медленны в разработке и рефакторинге кода. Для исследователя важно как можно быстрее нарисовать минимальный прототип proof of concept, доказывающий идею, и иметь возможность как можно дешевле этот прототип менять и переделывать. А для этого нужны более выразительные, а значит высокоуровневые языки (где одной строкой кода можно сказать больше) - питон в этом смысле очень хорош.
3) с фортраном не знаком. В той области, которой я интересуюсь (алгоритмы искусственного интеллекта) я об использовании фортрана не слыхал. Да и вообще мало о нём слыхал; есть впечатление, что он если не умер, то потихоньку умирает...(может ошибаюсь тут)
4) питон очень прост в освоении и хотя сам не быстр, но есть ряд "ускорителей" под специфические задачи; алгоритмы легко параллелятся на GPU без особых доработок.
5) питон чрезвычайно активно используется научным сообществом, под него сделано огромное количество математических и прочих библиотек. Знание питона скорее всего позволит как легче читать чужие работы, так и делиться своими.
6) если потребуется что-то ускорить - всегда можно конкретно эту часть алгоритма переписать на с/с++ (попросить толкового студента перевести питоновый алго на с/с++) и получить максимум производительности (если студент и правда толковый)))

Как-то так...

Date: 2015-01-11 08:20 pm (UTC)
From: [identity profile] psilogic.livejournal.com
часть объекта не tmp, а member


struct HEX
{
   KakoiToTip *member;
};

void do_something(HEX *hex)
{
   KakoiToTip tmp;
   hex->member= &tmp;
   ...
   //forget clear hex->member
}

void do_something2(HEX *hex)
{
   if (hex->member)
      printf("%s", hex->member->name());
}

void main()
{
   HEX hex;
   do_something(&hex);
   do_something2(&hex); //ups!
}

Date: 2015-01-11 08:24 pm (UTC)
arech: (Default)
From: [personal profile] arech
Да, у неё есть свои немалые плюсы, но ещё раз повторю, - писать что-то на математике это ооочень больно. Набрасывать простенькие скетчи - да, вполне, но минимально сложное - очень тяжело.
Плюс производительность кода очень слабенькая...
Я порядочно поигрался с ней в версиях 7-8, но потом именно из-за невозможности нормального программирования ушёл на матлаб. Сначало было трудновато после математики, но потом в один момент вдруг понял, что я без него теперь как без рук... Всё оказалось очень удобно и сильно; единственное, что напрягает - опять производительность и работа с памятью (что есть бич всех высокоуровневых языков, но особенно специфических)

January 2019

S M T W T F S
  12345
6789101112
1314 1516171819
20212223242526
2728293031  

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 8th, 2026 03:49 pm
Powered by Dreamwidth Studios