Всё, дождался!
Меня взяли учиться в Computer Science Center. Чуть больше месяца я провел в напряженном состоянии ожидания, каждый день с надеждой просматривая почту. И вчера я наконец получил заветное письмо. Чертовски радостная весть и очень нужная.
Про CSC я узнал довольно давно, пару лет назад точно. Тогда еще мои мысли были тесно связаны с Академическим Университетом, и я даже попытался поступить туда в магистратуру, но мимо. Мыслей поступить в центр почему-то у меня тогда не возникло. Ну да ладно.
В этом году я созрел. Причем довольно рано (как мне казалось): набор должны были открыть в апреле, а я начал обдумывать это дело где-то в феврале. Посмотрев по диагонали примеры вступительных заданий и посчитав, что месяца мне вполне хватит на подготовку — забыл про это всё и сконцентировался на подаче заявки на участие в GSoC 2014. Туда не попал и тут же вспомнил про CSC. Вспомнил, как оказалось, несколько позновато.
Когда я зашел на сайт Школы Анализа Данных компании Яндекс и более подробно ознакомился с примерами задач, я понял, что, наверное, снова в пролете.
Почему сайт ШАД Яндекса? Дело в том, что в Computer Science Center есть три направления обучения: Computer Science (современная информатика), Data Mining (анализ данных), Software Engineering (разработка программного обеспечения). Направление Data Mining можно рассматривать как Санкт-Петербургское отделение Школы анализа данных Яндекса. Поэтому логично было предположить, что примеры заданий приблизительно совпадают. Ну и на тот момент меня серьезно заинтересовало направление, связанное с анализом данных, поэтому я был ориентирован на соответствующее отделение, а значит и, косвенно, на ШАД.
Ну так вот. Не могу сказать, что я тупенький и в математике не в зуб ногой, просто надо понимать мою ситуацию. Так как я работаю php-программистом (специфику работы понимаете, да?), к математике я практически не возвращался за всё время, прошедшее с момента окончания университета; простейшие элементы дискретной математики не в счет. Поэтому, когда я увидел довольно непривычные, на тот момент, задачи на подстановки, интегралы и кое-что из теории вероятности, я немного расстроился. Это если мягко сказать.
От плачевного и никому не интересного конца ситуацию спасло случайное посещение официального сайта Computer Science Center. Там, среди описания процесса поступления и примеров задач с вступительного экзамена, было еще упоминание об онлайн-курсе по алгоритмам. Вот оно! На сайте говорилось, что в случае успешного прохождения курса, меня позовут на очное собеседование. Без письменного экзамена. Курс будет считаться успешно пройденным, если студент нарешает задач на, кажется, 82 балла. Или что-то около того. Не надо быть сверхумным, чтобы понять, что это шанс, причем очень хороший. И я за него ухватился.
К слову сказать, здесь я тоже немного опоздал. Курс открылся где-то 1-го апреля, я про него узнал, когда уже было число 10-е. Ну и ладно. Я просто стал делать всё немного быстрее и собранее. На руку сыграло еще то, что в последнее время я плотно с алгоритмами общался.
Скажу немного по поводу курса. Мне понравилось. Напоминает курс от Tim Roughgarden на Coursera.org по алгоритмам, но, что очень круто, на русском языке и вместо Тима курс читает Александр Куликов. И, надо сказать, отлично читает — всё предельно ясно и удобоваримо. По поводу расписания курса: тут довольно стандартная схема — смотришь видео, потом отвечаешь на вопросы, теоретические и практические, и выполняешь задания. К сожалению, курс является закрытым и пройти его можно только после подачи заявки на поступление.
Задания также доставили удовольствие — в меру сложные и довольно интересные. Что меня вналаче бесило, так это система тестирования. Поясню: в задаче вам дается тестовый набор данных, для первичной отладки. Вы проверяете работу вашего алгоритма на этом наборе и затем отправляете на полную проверку ваш код. Если какой-то тест не проходит, вам выдается номер failed теста и некое пояснение. Понятно, что никакого упоминания о данных, на которых отвалился алгоритм (обычная ситуация для сайтов типа topcoder.com), не было — это-то и раздражало. Но, на самом деле, бесился я из-за этого только потому, что было мало времени. С другой стороны, это очень крутая штука — вам приходится полностью осмыслить свой алгоритм, понять что и где работает не так, чтобы пройти эти тесты. Я сталкивался с таким поведением не то, чтобы очень часто, но всё же оказии случались.
Был еще один не очень приятный момент, связанный с тем, что задания я выполнял на Python. На некоторых задачах, где требовался большой объем вычислений, Python не справлялся и тесты не проходили по времени. По первости я пытался оптимизировать работу программы как мог. Потом стал забивать и просто переписывал код на C++. К слову, задачи были довольно стандартные для курса по алгоритмам. Например, реализовать сортировку или обход графа в глубину. Были по-настоящему сложные задания, типа, реализовать алгоритм Карацубы. Тут меня реально поперло и потратил довольно много времени на реализацию и оптимизацию этого алгоритма. Правда уже после того, как я его реализовал, я увидел, что сабмитить решения можно только на Java или C++, но тут силы и желание меня подвели, так что я оставил его выполненным на Python.
Было несколько моментов, когда я готов был сдаться. Это такие моменты, когда я уже вдоль и поперек прошелся по алгоритму, но так и не понял, почему он фейлится. Такое очень напрягает и расстраивает.
Стоит упомянуть, что курс расположен на платформе для обучения Stepic.org, где помимо него еще куча интересных направлений для изучения. Взять хотя бы Python for Programmers или Learn You a Haskell. В общем, большое спасибо Александру Куликову и Сергею Поромову, команде Stepic.org и коллективу JetBrains за подготовку этого познавательного курса, оказавшимся для меня еще и спасительным.
Так вот, курс я всё-таки закончил. Набрал нужное количество баллов, написал об этом кураторам CSC и в ответ получил уведомление, что всё нормально, скоро меня позовут на очную встречу.
Вот здесь я струхнул. Потому что логично предположил, что на очной-то встрече меня обязательно спросят что-нибудь из линейной алгебры или теории вероятности. Ну что ж, айда садиться за книжки. В тот момент я проклинал себя за, что так поздно спохватился насчет подготовки. По-хорошему, надо всё это делать сильно заранее. Но ничего поделать уже было нельзя… Так что Кострикин, Кудрявцев, Гнеденко — ням-ням.
Не буду врать, сильно подготовиться у меня не получилось. И когда мне назначили время очной встречи, я старался заставить себя поверить в чудо. Приятной неожиданностью собеседования оказалось то, что общался я с самим Александром Куликовым. Кроме него, на встрече еще присутствовал Андрей Иванов, COO компании JetBrains и руководитель направления Software Engineering в CSC. Впечатление на меня они произвели серьезное и сильное; после такого, знаете, хочется продолжать общаться и узнавать от людей что-то новое, опираясь на их опыт и мудрость.
Мои опасения по поводу вопросов по ЛА и ТВ оправдались, хоть и не в таком объеме. Всего несколько вопросов (за что я безумно благодарен), на которые я с горем пополам ответил :) Ключевым моментом собеседования стал этап, когда мне нужно было доказать свою мотивацию учиться. Как объяснил Александр, довольно много поступивших в CSC, но уже закончивших ВУЗы, не доучиваются и бросают учебу. По разным причинам: семья, нехватка времени, потеря мотивации.
Я постарался быть максимально искренним и просто рассказал свою историю. Хочется верить, что это помогло.
Дальше был месяц ожидания. Каждый день — проверка почты с надеждой, что вот сегодня я его получу, это заветное письмо. Вчера так и случилось и в сентябре я начну учиться в Computer Science Center, чему безумно рад.
Напоследок пару советов:
- Начинайте готовиться заранее. Я допустил ошибку, когда подумал, что месяца для меня при моих условиях достаточно. На самом деле нет. При наличии постоянного места работы, семьи и еще какого-нибудь фактора, требующего времени — на подготовку остается катастрофически мало. Так что трезво оценивайте свои возможности. Идеально будет начать подготовку с осени.
- Не бойтесь. Ваша мотивация учиться имеет вес. Я не говорю, что если вы придете на собеседование и скажите: «Я хочу!», то вас сразу возьмут. Нет, конечно. Но если у вас получится доказать интервьюерам, что для вас это по-настоящему важно, то ваши шансы однозначно увеличатся.
- Если вы сомневаетесь, пытаться или нет — я рекомендую попробовать. Это нереально крутая возможность поднять свой уровень, пообщаться и поработать с настоящими профессионалами своего дела. Кроме того, это отличный шанс для тех, кто облизывается на магистратуру Академического университета, но не имеет достаточного объема свободного времени, чтобы там учиться.
Дерзайте!
Автор: andymitrich