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

октябрь 2015
Екатеринбург

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

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

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

Обучение

Мы стремимся к тому, чтобы готовить специалистов в области Software engineering (проектирование ПО, практические навыки программирования). Во время обучения вы обязательно будете решать практические задачи под руководством опытных программистов. Практика начнётся в первом семестре. Тему проекта вы можете придумать сами или выбрать одну из предложенных куратором.

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

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

Форма обучения — очно-заочная. Некоторые лекции вы будете смотреть в записи. Семинары по всем курсам будут очные. Каждый семестр студентам необходимо сдать два обязательных курса и не менее одного по выбору. В Школе программирования большое внимание уделяется практике. Вам нужно будет выполнять домашние задания. Большинство курсов оценивается именно по ним, и только по некоторым может быть итоговый экзамен.

Все вопросы о Школе присылайте на адрес: 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-разрезы графов
  • Поиск кратчайших путей
  • Минимальные остовные деревья
  • Минимальные разрезы
  • Поиск подстрок
  • Суффиксные деревья
  • Длиннейшие общие подстроки
  • Приближенный поиск подстрок

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

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

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