В феврале мы запустили бесплатный онлайн-курс программирования на С++, рассчитанный на продвинутых разработчиков. Цели было в основном две — сделать так, чтобы в мире было больше хороших программистов, а заодно набрать себе пополнение в команду. Идея взлетела: участвовать в первом наборе захотело 185 человек из 57 городов и 8 стран. В курсанты попало 30 из них, но со словами «неинтересно» ушёл только 1. Остальные по итогам курса сообщили, что было в целом круто и они с пользой провели время.
Обкатав всю затею и учебный процесс на начальном бета-наборе, мы решили повторить курс ещё раз. Набор уже во всю идёт, подать заявку можно до понедельника, 26 июня. Чему, как и кто учит — рассказываем внутри.
UNIGINE С++ School — это курс для тех, кто уже умеет и практикует C++, любит выжимать производительность, но пока ещё не Степанов, не Александреску и не компания EA. И свой первый STL ещё не написал.
Мы назвали «продвинутым», но на самом деле стоило назвать его «углубленным». В целом курс для тех, кому уже становится небезразлична скорость работы программ и детали внутреннего устройства важных чёрных ящиков. Если хотите посмотреть, как ускорять программы в разы, если вам интересен достаточно низкий уровень кода и его связь с железом, и если вы хоть иногда считаете миллисекунды — курс наверняка вам будет полезен.
Всего в первом курсе 8 лекций, 7 практических занятий и домашние работы. По первому опыту учёба предстоит очень интенсивная, но и эффект соответствующий.
Придумал курс и ведёт занятия Андрей Аксёнов, он же Шодан, ведущий разработчик команды 3D-движка UNIGINE, а также автор поискового движка Sphinx, на котором работает Хабр, например.
Антон Тарасов, Новосибирск
Сергей Коптев, Москва (ООО ПФ «Логос»)
Ренат Дусаев, Томск
Александр Баранов, Красноярск
Игорь, Томск
Павел Наказненко, Красноярск
Курс бесплатный, но предполагает наличие у вас базовых скиллов. Так что зачислять в курсанты будем по итогам входного тестирования. Подать заявку и пройти входной тест можно на сайте школы до понедельника, 26 июня.
Важный update:
Нас многие просили сделать приём заданий под Linux, и мы сделали. Теперь входной тест для поступления можно компилировать и под Windows MSVC 2013, и под Linux gcc 5.4.0.
И даже больше — мы сделаем это за вас. При приёме задания ваш код пройдет автопроверку на компилируемость, и мы пришлём вам отчёт, чтобы вы были уверены, что программа собралась на нашей стороне. Если всё хорошо, код будет проверяться уже вручную Шоданом. Если нет — у вас есть неограниченное количество попыток!
А на закуску, тизер нового сезона.
Обкатав всю затею и учебный процесс на начальном бета-наборе, мы решили повторить курс ещё раз. Набор уже во всю идёт, подать заявку можно до понедельника, 26 июня. Чему, как и кто учит — рассказываем внутри.
Чему учат?
UNIGINE С++ School — это курс для тех, кто уже умеет и практикует C++, любит выжимать производительность, но пока ещё не Степанов, не Александреску и не компания EA. И свой первый STL ещё не написал.
Мы назвали «продвинутым», но на самом деле стоило назвать его «углубленным». В целом курс для тех, кому уже становится небезразлична скорость работы программ и детали внутреннего устройства важных чёрных ящиков. Если хотите посмотреть, как ускорять программы в разы, если вам интересен достаточно низкий уровень кода и его связь с железом, и если вы хоть иногда считаете миллисекунды — курс наверняка вам будет полезен.
Программа занятий в деталях
Занятие #1.
Мировые константы.
Про стоимости операций CPU/RAM/HDD, про устройство частей C++ рантайма, про вытекающие оптимизации.
Занятие #2.
Всем «известные» азы.
Массивы, вектора, баги. И как правильно бенчмаркать.
Занятие #3.
Списки всех сортов.
Когда и зачем они нужны на практике. Паззл для собеседования. Плюс сортировки и поиски, если успеем.
Занятие #4.
Хеши и все такое.
Cами таблицы, функции, коллизии и по самые фильтры Блума. И ещё чуток KV-структур, если успеем.
Занятие #5.
Композитные структуры.
Складываем любое нужное слово из только что изученных букв В, С, Х.
Занятие #6.
Деревья и кучи (heaps).
И укладка «сложной» структуры в тупой массив.
Занятие #7.
Обзор эзотерических структур данных.
От тупого circular buffer до адовых HyperLogLog.
Занятие #8.
Бонус: обзор устройства 3D графики.
От векторов и матриц (с разбором) и до современных техник рендера (без подробного разбора).
Мировые константы.
Про стоимости операций 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 июня.
Важный update:
Нас многие просили сделать приём заданий под Linux, и мы сделали. Теперь входной тест для поступления можно компилировать и под Windows MSVC 2013, и под Linux gcc 5.4.0.
И даже больше — мы сделаем это за вас. При приёме задания ваш код пройдет автопроверку на компилируемость, и мы пришлём вам отчёт, чтобы вы были уверены, что программа собралась на нашей стороне. Если всё хорошо, код будет проверяться уже вручную Шоданом. Если нет — у вас есть неограниченное количество попыток!
А на закуску, тизер нового сезона.