Як ефективно підготуватися до олімпіад з програмування
Скоро стартує друга Олімпіада Типового програміста. і ми вирішили запитати у експертів, як можна успішно до підготується до подібних змагань.

Михайло Рубинчик, менеджер Освітні програми СКБ Контур, тренер команд УрФУ зі спортивного програмування
Зараз проводиться багато різних олімпіад з інформатики та програмування. ВУкаіни найдовше історію мають олімпіади за правилами ACM ICPC, а також досить схожі на них олімпіади школярів. В цілому вони з підготовки дуже схожі (хоча трохи відрізняються тактиками).
Ми будемо говорити про ACM ICPC, тому що для таких олімпіад є безліч готових рецептів. Перш за все, потрібно навчитися вирішувати завдання. Як не дивно, щоб навчитися вирішувати завдання, потрібно вирішувати завдання :) Тому найвірніший шлях для новачка такий: відкриваєш будь-який архів завдань і вирішуєш по зростанню складності. Якщо раптом якась задача вже дуже довго не піддається, пропускаєш її і вирішуєш наступну. Якщо занадто багато завдань пропущені, то варто порадитися з більш досвідченим олімпіадника, чи немає там якогось сакрального знання. Прорешіваніе архіву задач - це найважливіший на старті процес. Наприклад, можна використовувати acm.timus.ru. А далі поступово додавати інші елементи: читання книг і сайтів по алгоритмам (наприклад, e-maxx.ru), участь в онлайн соревованіях (codeforces.ru. Opencup.ru).
Рейтинг корисності відповіді: 42 Підвищити Знизити

Артем Зюрюкін, генеральний директор Zartis Russia
Рейтинг корисності відповіді: 42 Підвищити Знизити

Андрій Зирянов, керівник науково-дослідницької лабораторії Parallels Lab в МФТІ
Олімпіади бувають різні. Звідси і вимоги різні. Якщо «класичні», як ACM ICPC, то вам потрібно почати вирішувати завдання на acm.mipt.ru і judge.mipt.ru. Якщо з інформаційної безпеки (Capture The Flag) - вивчати архітектуру ЕОМ, криптографію і мережеві протоколи. З розробки ПЗ (DevCup. ImagineCup. «Старт в науку») - вивчати ООП і працювати в команді над невеликими проектами. Запорука ефективності - працьовитість. Цим потрібно займатися, причому постійно. Якщо немає прогресу в самостійному вивченні, буде потрібна допомога викладачів.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Роман Юферев, керівник напрямку ІТ-менеджменту і моніторингу в компанії VIAcode
Ходити на ці самі олімпіади. Дивитися завдання. Усвідомлювати, що нічого не розумієш і розбиратися. Йти на наступну олімпіаду. Ось така ось «многоходовочка».
Рейтинг корисності відповіді: 42 Підвищити Знизити

Сергій Масягін, проректор по роботі зі студентами та абітурієнтами Університету Іннополіс
Для відповіді на це питання ми опитали чемпіонів світу з програмування Миколи Калініна, Геннадія Короткевича, Ніяза Нігматулліна, Андрія Станкевича і Павла Мавріна, які зараз тренують нове покоління. Всі вони сходяться на думці, що головне в цьому питанні - багато практики. Зверніть увагу на codeforces.ru. topcoder.com - періодично там бувають контести, після яких на сайтах з'являються розбори до них. Навіть рекомендую до прочитання Programming Challenges, Miguel Skiena. Є безліч ресурсів, де можна знайти теорію, таких як e-maxx.ru. habrahabr.ru.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Антон Піскунов, засновник і генеральний директор BeastGaming
Ніколи в них не брав і не можу нічого конкретного порадити. Але на мій погляд вам буде потрібно просто досить добре вивчити досвід попередніх учасників, здзвонитися або списатися з ними і попросити розповісти як було минулого разу. А вже на основі отриманого досвід будувати роадмап підготовки.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Сергій Зефиров, програміст з широким досвідом роботи, ентузіаст і євангеліст мови Haskell
Чи не готуватися до олімпіад з програмування. Зовсім.
Олімпіадне програмування застосовує зовсім інші прийоми, ніж програмування тривалих проектів, які тільки і зустрічаються в звичайному житті.
Готуючись до олімпіад, ви напрацюєте собі стиль й підхід до програмування, який доведеться досить довго виправляти.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Всеволод Шмиров, розробник в команді API Яндекс.Карт
Для дальшого поступу потрібно постійно вирішуватиме різні практичні завдання. Придумувати дрібні нові проекти та реалізовувати їх.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Олег Горшков, керівник відділу системної інтеграції ecommerce-студії Simtech Development
Тут немає чарівних способів або спеціальних фокусів. Щоб показати відмінний результат на олімпіаді, перш за все, потрібно знати дисципліни. Тобто ту мову, на якому ви програмуєте. Поставте мету і наполегливо до неї йдіть. Набивайте руку на програмуванні і більш глибокому вивченні мови. Дуже добре допомагає прорешіваніе завдань, що були в минулі роки і на інших олімпіадах. Ускладнюйте їх, прідумавайте подібні і реалізовуйте.
Також зважайте увагу на те, хто розробляє завдання і судить вашу номінацію. Від цього залежить з якої сфери буде завдання. Як правило, вони всі беруться з реальних проектів і адаптуються під умови олімпіади.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Олександр Рожнов, Team Lead в компанії Undev
- Зрозуміти, що таке складність алгоритму.
- Вивчити популярні алгоритми і їх складність.
- Вивчити хоча б одну з мов програмування, на якому проводиться олімпіада.
- Виспатися.
- З'їсти шоколадку.
Рейтинг корисності відповіді: 42 Підвищити Знизити

Олександр Чистяков, головний інженер в Git in Sky
Єдиний відомий мені спосіб навчитись ефективно вирішувати олімпіадні задачі - це весь час тренуватися робити це.
Рейтинг корисності відповіді: 42 Підвищити Знизити