В феврале мы запустили бесплатный онлайн-курс программирования на С++, рассчитанный на продвинутых разработчиков. Цели было в основном две — сделать так, чтобы в мире было больше хороших программистов, а заодно набрать себе пополнение в команду. Идея взлетела: участвовать в первом наборе захотело 185 человек из 57 городов и 8 стран. В курсанты попало 30 из них, но со словами «неинтересно» ушёл только 1. Остальные по итогам курса сообщили, что было в целом круто и они с пользой провели время.
Обкатав всю затею и учебный процесс на начальном бета-наборе, мы решили повторить курс ещё раз. Набор уже во всю идёт, подать заявку можно до понедельника, 26 июня. Чему, как и кто учит — рассказываем внутри.
Чему учат?
UNIGINE С++ School — это курс для тех, кто уже умеет и практикует C++, любит выжимать производительность, но пока ещё не Степанов, не Александреску и не компания EA. И свой первый STL ещё не написал.
Мы назвали «продвинутым», но на самом деле стоило назвать его «углубленным». В целом курс для тех, кому уже становится небезразлична скорость работы программ и детали внутреннего устройства важных чёрных ящиков. Если хотите посмотреть, как ускорять программы в разы, если вам интересен достаточно низкий уровень кода и его связь с железом, и если вы хоть иногда считаете миллисекунды — курс наверняка вам будет полезен.
Мировые константы.
Про стоимости операций CPU/RAM/HDD, про устройство частей C++ рантайма, про вытекающие оптимизации.
Занятие #2.
Всем «известные» азы.
Массивы, вектора, баги. И как правильно бенчмаркать.
Занятие #3.
Списки всех сортов.
Когда и зачем они нужны на практике. Паззл для собеседования. Плюс сортировки и поиски, если успеем.
Занятие #4.
Хеши и все такое.
Cами таблицы, функции, коллизии и по самые фильтры Блума. И ещё чуток KV-структур, если успеем.
Занятие #5.
Композитные структуры.
Складываем любое нужное слово из только что изученных букв В, С, Х.
Занятие #6.
Деревья и кучи (heaps).
И укладка «сложной» структуры в тупой массив.
Занятие #7.
Обзор эзотерических структур данных.
От тупого circular buffer до адовых HyperLogLog.
Занятие #8.
Бонус: обзор устройства 3D графики.
От векторов и матриц (с разбором) и до современных техник рендера (без подробного разбора).
Как все происходит?
Всего в первом курсе 8 лекций, 7 практических занятий и домашние работы. По первому опыту учёба предстоит очень интенсивная, но и эффект соответствующий.
Кто ведёт?
Придумал курс и ведёт занятия Андрей Аксёнов, он же Шодан, ведущий разработчик команды 3D-движка UNIGINE, а также автор поискового движка Sphinx, на котором работает Хабр, например.
Отзывы участников первого набора
Магия оптимизации, которую Шодан показал в первом задании, выглядела впечатляюще. Узнал, в каких местах можно обогнать std и что это делается малой кровью. В первый раз услышал об устройстве hash-таблиц. Узнал, как бенчмаркать свой код, чтобы компилятор всё не соптимизировал. Не смотреть информацию в книгах/статьях, а проверять самому, потому что время идёт, многое меняется и то, что раньше работало медленно, сейчас может быть реализовано достаточно быстро.
Антон Тарасов, Новосибирск
Очень много нового, причём, в тех областях, которые считал давно проясненными и закрытыми для экспериментов.
— Об особенностях использования STL. Ещё раз покопался в его внутреннем устройстве, с более критическим подходом. С вопросом «А что в нём плохо?».
— Много новых фишек про оптимизацию программ. Часть из них слышал — но «мимо», не применял. Как все эти бесконечные закладки в браузере из серии «будет время — разберусь».
— Некоторые вещи были для меня совсем новые. Trie-tree, например. Даже не слышал о такой штуке. Не так, чтобы это перевернуло вселенную вверх ногами, но рассказано это было понятно, и наверняка пригодится.
Сергей Коптев, Москва (ООО ПФ «Логос»)
Что узнал нового? Что STL действительно можно уделать на порядок, и это проще чем кажется. Что для внятной оптимизации нужно знать намного больше чем мне известно сейчас.
Ренат Дусаев, Томск
Что узнал? На самом деле, много. Понял насколько крут и на самом деле «разноуровнев» C++. Тематические штуковины (например размытый ключ деревьев на примере). Ссылки, подобранные уже в скайпе. Например про битхаки в духе nonbranching code.
Александр Баранов, Красноярск
Никогда не пробовал замерять собственно скорость работы STL контейнеров, и думал что он и так норм. В процессе курса я был вынужден этим заняться и своими руками получил нужные мне результаты на собственном железе. Кое-какие взгляды на STL поменялись.
Оценил inplacement new подход к инициализации объектов и malloc для аллокации памяти. Раньше всегда пользовался new, но, видимо, просто не вставало нужды что-то оптимизировать до такой степени.
Игорь, Томск
Узнал про Bloom filter, экзотические и композитные структуры данных. Маленькие трюки, типа компактной укладки сложных структур в линейный массив. Привёл в порядок голову и систематизировал знания. Была пара моментов, когда думал что знаешь как оно работает, а потом случалось озарение. Сборка собственного велосипеда оказалась не таким очевидным делом.
Павел Наказненко, Красноярск
Хочу учиться, как поступить?
Курс бесплатный, но предполагает наличие у вас базовых скиллов. Так что зачислять в курсанты будем по итогам входного тестирования. Подать заявку и пройти входной тест можно на сайте школы до понедельника, 26 июня.
Решайтесь и записывайтесь!
А на закуску, тизер нового сезона.
Автор: UNIGINE