Школа программирования Яндекса

15 сентября 2014
Екатеринбург

Курс завершён. Набор объявляется ежегодно в конце лета — чтобы узнать о следующем, подпишитесь на новости на главной странице.

Школа программирования в Екатеринбурге открылась в 2014 году. Мы приглашаем студентов старших курсов инженерных и математических специальностей, а также магистрантов и выпускников, окончивших вуз не более трёх лет назад.

Чтобы учиться в Школе, необходимо:
- знание какого-нибудь языка программирования;
- общая математическая подготовка;
- представление об алгоритмах и структурах данных.

Обучение

Многие задачи в программировании подразумевает поиск эффективного алгоритма и его дальнейшую реализацию в понятном и структурированном коде. Поэтому в основе программы лежит изучение алгоритмов, структур данных и языков программирования (Python и C++). Остальные курсы – это прикладные занятия по разным темам (параллельные и распределённые вычисления, базы данных, анализ данных).

Во время обучения вы обязательно будете решать практические задачи под руководством опытных программистов. Практика начнётся во втором семестре. Вы можете придумать тему проекта сами или выбрать одну из предложенных куратором.

Программа рассчитана на один учебный год (2 семестра). Занятия проходят в будни, по вечерам, в екатеринбургском офисе Яндекса. Примерная загрузка студентов — 15-20 часов в неделю (с учётом работы над домашними заданиями).

Форма обучения — очно-заочная. Некоторые лекции вы будете смотреть в записи. Семинары по всем курсам будут очные. Каждый семестр студентам необходимо сдать 2 обязательных курса и не менее 1 по выбору.

В Школе программирования большое внимание уделяется практике. Вам нужно будет выполнять домашние задания. Большинство курсов оценивается именно по ним, и только по некоторым может быть итоговый экзамен.

Все вопросы о Школе присылайте на адрес: intern@yandex-team.ru

Программа Школы

1 семестр

Обязательные курсы

Курсы по выбору

2 семестр

Обязательные курсы

Курсы по выбору

Алгоритмы и структуры данных, часть 1

Программа курса

  • Сложность и модели вычислений
  • Анализ учётных стоимостей
  • Алгоритмы Merge-Sort и Quick-Sort
  • Порядковые статистики
  • Кучи
  • Хеширование
  • Деревья поиска
  • Система непересекающихся множеств
  • Задачи RMQ и LCA
  • Структуры данных для геометрического поиска
  • Задача о динамической связности в ненаправленном графе

Язык программирования Python

О курсе

В этом курсе большое внимание уделяется интересным практическим задачам и современным подходам к программированию. Python — относительно простой язык, его можно быстро выучить. Процесс программирования тоже идёт довольно быстро. Поэтому большая часть курса посвящена непосредственно задачам, а не трудностям языка.

Программа курса

  • Введение. Обзор курса и его цели. История, область применения, текущее состояние языка. Создатели. Дзен. Ветки 2.x и 3. PEP. Примеры. Реализации Python
  • Установки на различные платформы. IPython, IDLE. Байт-код и интерпретация. Простые программы
  • Синтаксис языка, управляющие структуры. Типы данных. Списки, кортежи, словари, юникод, даты. Обзор полезных модулей. Регулярные выражения
  • ООП и элементы функционального программирования. Разный стиль написания программ
  • Генераторы, итераторы, декораторы методов и классов. Itertools. Dict и List comprehensions. Синтаксический сахар в Python
  • Цикл разработки. Профилирование, отладка, тестирование. Репозитории
  • Модули. Интеграция с другими ЯП. Создание своих модулей и пакетов. Лицензии на ПО
  • Python и серверный скриптинг
  • Python и вычисления
  • Python и программы c GUI
  • Python, веб и XML
  • Веб-приложения
  • Python везде: разные реализации, разные платформы. Android и iOS. PyPy, Stackless, IronPython, Jython
  • Параллельное программирование

Технологический семинар

Программа курса

  • Основы Unix, утилиты командной строки
  • Редакторы Vim, Emacs
  • Стек протоколов
  • Процесс разработки, метод Continuous Integration, code review
  • Системы контроля версий (git, svn)
  • POSIX
  • Nginx

Базы данных

Программа курса

  • Введение
  • SQL
  • Транзакции
  • MySQL, explain
  • NoSQL
  • Обзор движков
  • Проектирование и оптимизация
  • Высокие нагрузки
  • Устройство индексов

Алгоритмы и структуры данных, часть 2

Программа курса

  • Обход в ширину
  • Обход в глубину
  • 2-разрезы графов
  • Поиск кратчайших путей
  • Минимальные остовные деревья
  • Минимальные разрезы
  • Поиск подстрок
  • Суффиксные деревья
  • Длиннейшие общие подстроки
  • Приближенный поиск подстрок

Язык программирования С++

Программа лекций

  • Введение
  • Область видимости, пространства имён
  • Классы
  • Указатели и ссылки. Операторы приведения типа
  • Динамическое выделение памяти. Операторы new и delete
  • Обработка ошибок. Исключения, механизм их работы
  • Компоновка Си и С++ кода. Перегрузка функций и операторов
  • Шаблоны классов и функций. Особенности механизма шаблонов в C++
  • Стандартная библиотека шаблонов (STL), её использование
  • R- и l-value выражения. Семантика перемещения
  • Избранные вопросы ООП: приватное, множественное и виртуальное наследование
  • Нововведения стандарта C++11

Программа семинаров

  • Сборка. Единицы трансляции. Препроцессор. Экспорт имён, символы, связывание
  • Автосборка. Библиотеки
  • Оформление кода, styleguide
  • Чтение кода. Рефакторинг. Оптимизация
  • Тестирование
  • Отладка. Профилирование
  • Управление памятью. Утечки памяти
  • Интеграция с другими языками
  • Особые случаи и тонкости
  • Стандартная библиотека

Параллельные и распределённые вычисления

Программа курса

  • Многопоточное программирование
  • Параллельные вычисления
  • Параллельное программирование
  • Знакомство с MPI
  • Параллельная обработка больших данных и модель MapReduce
  • Приемы и стратегии реализации MapReduce-программ
  • Альтернативные подходы к параллельной обработке больших данных
  • Распределённые системы
  • Теоретические основы распределённых вычислений
  • Распределённые системы хранения данных
  • Технологии распределённых вычислений