Книги по программированию - страница 3

 
Грааль:
Я же написал название "Язык программирования C++. Базовый курс"

Очевидно вторая ссылка)))

Страуструп в чем то хорош(мыслит интересно), но не как учебник, про "весь язык" речи не идёт, даже на базовом уровне, где лямбды? где конструкторы переноса? Я молчу уже про последний "сахар". STL также рассмотрен в специфической проекции, как для разработчиков компиляторов. Я бы вообще не рекомендовал его "Язык программирования C++" к прочтению, но другое дело " Программирование. Принципы и практика с использованием C++", для кодера, с хотя бы опытом джуна.

На самом деле в Вашем сарказме есть доля правды. И историю ЭВМ по верхам полезно знать и на asm чуток побаловаться имеет очевидный смысл, всё верно :)

Си - в каком то смысле фундамент программирования, к тому же он ИМХО проще ныне трендового пайтона, но тренды как все тут знают заканчиваются флетом и разворотом, а фундамент не рушим, Си будет и через 100 лет, на лидирующих позициях, вангую.

Когда они появились, лямбды, вроде только в 14-й версии плюсов? У меня дома в бумаге вообще лежит старый Страуструп. Я его в прихожей на тумбочке держу в качестве холодного оружия. Как-то соседку грабили, я выскочил со Страуструпом в руке, одного свалил намертво ударом в затылок, второго поранил переплетом. Да вроде я писал об этом и как я после зауважал плюсы. Плюсы - это вам не питоша в мягкой обложке, это сила!

Насчет asm - полезно и просто интересно посмотреть листинг ассемблерного кода, который генерит VS C++, там надо в настройках проекта включить опцию. При оптимизации такие финты компилятор закручивает, просто красота!

Ну и про трендовый пайтон. Как раз сейчас изучаю, решил восполнить пробел. Блин, первый раз в жизни встречаю язык, в котором смысл программы определяется отступами в тексте! Пример:

i = 0
while i < NUM_STEPS:                    # так будет while до строки i += 1
    x = (i + .5) * step1
    sum1 = sum1 + 4.0 / (1. + x * x)
    i += 1

pi = sum1 * step1



i = 0
while i < NUM_STEPS:                    # PyCharm ругается, что нет отступа!
x = (i + .5) * step1
sum1 = sum1 + 4.0 / (1. + x * x)
i += 1
pi = sum1 * step1

это сообщение в консоли
E:\MyP\Python\PycharmProjects\LearnPython>python calcpi.py
  File "calcpi.py", line 10
    x = (i + .5) * step1
    ^
IndentationError: expected an indented block

Во всех нормальных языках смысл кода не зависит от отступов, только в убогом пайтоне. Для меня полнейшая загадка, как это Г завоевало мир. Неужели дебилизация населения Земли зашла так далеко?

Да даже блочных комментариев нет! 

 
Denis Kirichenko:
Алексей, с твоим опытом пора свою книжку написать ;-)

Если ты мне, тоже самое могу сказать про тебя, у тебя опыта не меньше )) Просто смысл ее писать? Денег это не принесет, а к славе я полностью равнодушен. Есть дела поважнее и интереснее.

 
Alexey Volchanskiy:

Для меня полнейшая загадка, как это Г завоевало мир. Неужели дебилизация населения Земли зашла так далеко?

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

arr1 = [0 for i in range(10)]
arr2 = [i for i in range(10)]
arr3 = list(range(0,10))
print('arr1 :',arr1)
print('arr2 :',arr2)
print('arr3 :',arr3)

arr1 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

arr2 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

arr3 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

Ну, если пайтон рассматривать не как программирование, а как продвинутое конфигурирование, С\С++сных фрэймворков, то профит конечно есть. Нынче мода такая, раньше логику оборачивали GUI теперь просто делают пайтон-интерфейс и в принципе это правильный тренд, таким образом получаем «универсальное текстовое  GUI(TUI)» для всего многообразия фреймворков, это хорошо.

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

Сейчас именно по этой социально-маркетинговой причине вообще даже дизайнерский софт отходит от GUI, даже макет вебстраницы пишут кодом, смысл в том чтобы повысить порог входа в веб-дизайнеры и соответственно их среднюю ЗП. Зачем много платить работнику если бы сайт можно было нарисовать в редакторе мышкой? Тоже и с прочим, работник чувствует себя уверенней когда менеджер сам не может сесть да сделать его работу, грош цена такому работнику, любой профессионал должен делать что то сложное, путанное, иначе это не профессионал.

 
Igor Makanu:

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

arr1 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

arr2 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

arr3 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Я просто в самом начале изучения, решил таки сравнить скорость с С++. Ясно, что интерпретатор, но было интересно, насколько тормознее.

Код С++

#define NUM_STEPS 1000000000  //миллиард повторов

int _tmain(int argc, _TCHAR* argv[])
{
    double       x;
    double       pi;
    double       sum=0.0;
    double       step=1./NUM_STEPS;
    int          i;
    unsigned int msec=GetTickCount();

    #pragma omp parallel for private(x) reduction(+:sum)  // для включения OMP раскомментируйте эту строчку
    for(i=0; i<NUM_STEPS; i++)
    {
        x=(i + .5)*step;
        sum=sum + 4.0/(1.+ x*x);
    }
   
    pi=sum*step;
    msec=GetTickCount()-msec;
    printf("The value of PI is %15.12f in %u msec\n",pi,msec);
    return(0);
}

The value of PI is  3.141592653590 in 1500 msec

Код на Python, количество повторов уменьшил

import time

start_time = time.time()

x, pi, sum1 = 0.0, 0.0, 0.0
NUM_STEPS = 10000000  
step1 = 1.0 / NUM_STEPS
i = 0
while i < NUM_STEPS:
    x = (i + .5) * step1
    sum1 = sum1 + 4.0 / (1. + x * x)
    i += 1

pi = sum1 * step1
msvcr = time.time() - start_time

print(f"--- {msvcr} seconds ---", pi)

--- 4.664989709854126 seconds --- 3.141592653589731

Так как повторов всего 10000000, умножаем время на 100, получаем 466 сек. Итого Python тормозней в 466/1.5 = 311 раз. В таком виде он даже в качестве оболочки для  С\С++сных фрэймворков не очень-то годится. 

Погуглил про "компиляторы для Python". Читаю - "Более того, это не компиляция в машинный код, как, например, программы на C, а лишь "сборка" в исполняемый файл вашей программы вместе с частью интерпретатора python."

 
Alexey Volchanskiy:

Итого Python тормозней в 466/1.5 = 311 раз. 

спасибо за точные цифры, я уже несколько раз писал на форуме, что Питон медленнее MQL раз в 100, оказалось в 300 раз

в общем не айс Питон, я месяца 3 поковырял и забросил, для практических целей - НС, МО, очень все тормознуто, находил пример типа по этому алгоритму альфагоу работает, но упростим это будет игра в крестики нолики, вот исходник... запустил, подождал минут 30 и не дождался 1000 циклов обучения, кажется всего 300 прошло ....- практического смысла мало, любой эксперимент превращается в вечность )))

 
Igor Makanu:

спасибо за точные цифры, я уже несколько раз писал на форуме, что Питон медленнее MQL раз в 100, оказалось в 300 раз

в общем не айс Питон, я месяца 3 поковырял и забросил, для практических целей - НС, МО, очень все тормознуто, находил пример типа по этому алгоритму альфагоу работает, но упростим это будет игра в крестики нолики, вот исходник... запустил, подождал минут 30 и не дождался 1000 циклов обучения, кажется всего 300 прошло ....- практического смысла мало, любой эксперимент превращается в вечность )))

МО для питона на С++ написано в основном, всякие керасы тензоры и тд. Вы наверно заюзали какое то студенческое творчество:)

На пайтоне удобно всякие новинки пробовать, бегло "осматриваться" в деятельности мирового МО-комьюнити, питончик популярен, много народу чото постит, удобная система загрузки из репозитария, кроме того некоторые С++ профессионалы порой так код пишут что другому С++ профессионалу понять их не так просто, чего только стоят парсеры CSV по тысячи строк и MLP три)))

Есть конечно у пайтона преимущества в социальном обмене мелкими скриптами, тут без Б, как говорится. Но это не программирование в полном значении этого слова.

 
Грааль:

МО для питона на С++ написано в основном, всякие керасы тензоры и тд. Вы наверно заюзали какое то студенческое творчество:)

да, нагуглил статью по поиску "AI in games", про тензорфлоу в курсе, но интересен был сам алгоритм, а не реализация

все равно, Питон жуть какой тормознутый! 

тут в общем основная проблема, что пакетов под Питон уйма и за 3 жизни с ними всеми не разберешься, нужно какой то один пакет МО изучать и юзать

 
Igor Makanu:

да, нагуглил статью по поиску "AI in games", про тензорфлоу в курсе, но интересен был сам алгоритм, а не реализация

все равно, Питон жуть какой тормознутый! 

тут в общем основная проблема, что пакетов под Питон уйма и за 3 жизни с ними всеми не разберешься, нужно какой то один пакет МО изучать и юзать

Кстати, я посмотрел на популярные пакеты глубокого обучения, очень во многих есть интерфейс на С++. А в CNTK есть даже шарп, что неудивительно  )

 
Igor Makanu:

спасибо за точные цифры, я уже несколько раз писал на форуме, что Питон медленнее MQL раз в 100, оказалось в 300 раз

в общем не айс Питон, я месяца 3 поковырял и забросил, для практических целей - НС, МО, очень все тормознуто, находил пример типа по этому алгоритму альфагоу работает, но упростим это будет игра в крестики нолики, вот исходник... запустил, подождал минут 30 и не дождался 1000 циклов обучения, кажется всего 300 прошло ....- практического смысла мало, любой эксперимент превращается в вечность )))

А сейчас попробую MQL5, только для корректности в MS C++ отключу OMP и встроенный параллелизм. Пару лет назад этот тест гоняли, тогда MQL5 был наравне  MS ++. И сейчас плюс минус тоже самое, VS C++ 2019 Prerelease.

2019.08.04 18:21:41.790 TestPi (EURUSD,M12) The time to calculate PI was seconds 2.84985700

2019.08.04 18:21:57.565 TestPi (EURUSD,M12) The time to calculate PI was seconds 2.86846400

2019.08.04 18:27:06.611 TestPi (EURUSD,M12) The time to calculate PI was seconds 2.90002100

2019.08.04 18:27:12.867 TestPi (EURUSD,M12) The time to calculate PI was seconds 2.83937800


MS C++ 

The value of PI is  3.141592653590 in 2844 msec

The value of PI is  3.141592653590 in 2797 msec

The value of PI is  3.141592653590 in 2844 msec

The value of PI is  3.141592653590 in 2828 msec

The value of PI is  3.141592653590 in 2859 msec

Причина обращения: