Поскольку Тинькофф делает очень много для развития спортивного программирования как среди школьников, так и среди студентов, я слежу за их мероприятиями. И вот тут попалось объявление о наборе на дистанционный курс «Golang для начинающих», анонсированный как «для всех желающих». Несмотря на то, что я далёк от промышленной разработки, иногда возникает желание изучить что-то современное-полезное. Чтобы быть в курсе, возможно, что-то можно будет и в преподавательской работе применить. Однако, просто так садиться и абстрактно что-то изучать — сложно, непонятно как, нет стимула (скажем, в сторону Java я смотрю лет 20, думая «неплохо бы разобраться», но какого-либо реального стимула изучать Java за 20 лет так и не появилось). Но тут курс, на котором будут какие-то сроки и задания — о, это здорово, хочу! А поскольку курс объявлен для всех желающих, то — о, я желающий, наверное, это для меня!
Итак, я подал заявку на курс, дальнейшее оказалось очень не очень, поэтому хочу об этом рассказать.
Для отбора на курс нужно сделать две вещи — заполнить анкету и решить контест. Анкета более-менее стандартная — биографические сведения, образование, место работы, опыт. Участие в олимпиадах тоже приветствуется. Равно как и опыт их проведения. Честно пишу, хотя, вероятно, по части «Возможно, вы были волонтером на олимпиаде» я для них Overqualified. Но это компенсируется тем, что по части промышленной разработки я скорее Underqualified. Но самое интересное — это контест.
На контест отводится неделя, виртуальный турнир на три часа. Поскольку я был сильно желающим, то бросился решать задачи в первый же день контеста. Да ещё и интересно было — что же за контест такой для отбора на начальный курс по промышленной разработке на Go?
В контесте было шесть задач. Языки программирования — все наиболее распространённые. Тестирование — оффлайн, нужно, чтобы задача прошла все тесты, но во время тура тестируется только на первом тесте (даже если в условии несколько примеров, всё равно тестируется только на первом). Показывается только статус прохождения первого теста, без подробного протокола (входные данные, вывод, правильный ответ).
Первая задача — на простую технику и сообразительность, вторая задача — на знание (или понимание) довольно известного математического факта, третья задача — на обработку событий (два указателя в двух списках), четвёртая — на двоичный поиск по ответу, пятая — динамика на дереве, шестая — по-видимому, динамика, но я её не придумал. В общем, считаю, что сделал пять задач из шести, ибо окончательные результаты проверки мне до сих пор неизвестны. Над шестой можно было бы подумать, но уже и времени оставалось немного.
То есть для поступления на курс начальной промышленной разработки на Go предлагается вполне «профессиональный» контест. Всем желающим обучаться, оказывается, нужно иметь олимпиадные навыки. Не имеющие опыта спортивного программирования шансов решить больше трёх задач не имеют, да и с первыми тремя тоже будет нелегко.
Но по ходу решения задач в глаза бросается крайне низкое качество подготовки этих задач. Как бы задачи олимпиадные, но давать на любой олимпиаде настолько плохо подготовленные задачи — это позор. А именно, я нашёл следующие проблемы с задачами:
а) в одной задаче в условии написано, что входные числа записаны в разных строках, на самом деле они записаны в одной строке. И в примерах в условии они записаны в разных строках, но на самом деле в тестах — они в одной строке! Понятно это становится, когда ты пишешь считывание данных на питоне, и получает Runtime на первом тесте. Поскольку Runtime получить там негде, то подумав и обратив внимание на то, что в других задачах входные числа даются в одной строке, переписываешь считывание данных и получаешь Accepted (на первом тесте по крайней мере). А полного протокола на тестах из условия нет, нужно самому догадаться, что Runtime — это потому что тесты не соответствуют условию.
б) В пятой задаче дано дерево из n вершин и после этого выполняется q операций, каждая затрагивает поддерево. Нужно вывести результат после выполнения операций. В условии написано, что n <= 100.000, а вот на значение q в условии нет никаких ограничений! То есть непонятно, можно ли писать обработку одной операции за O(n) с суммарной сложностью O(nq). Ну тут профессионалы должны догадаться, что операцию можно обрабатывать за O(1), поэтому предполагается (наверное) решение за O(n+q), но формально это никак не следует из условия. Попробуй догадайся, о чём речь.
в) Условие задачи 2 крайне невнятно сформулировано, я его не понял с первого раза, и даже отложил задачу. Вернулся к ней позже, и уже изучая примеры и глядя на примеры «подогнал условие под примеры». Можно было бы условие написать гораздо лучше.
г) есть масса глюков вёрстки, например, в формулах в двух местах написаны числа «1», которых там нет, и в целом понятно, что это не имеет отношения к делу, но почему нельзя было вычитать условия? Также есть и другие проблемы, типа «забыли сделать нижний индекс», не написали формулу курсивом и т. д., что конечно по сравнению с предыдущими пунктами — сущая мелочь.
После окончания контеста, я сажусь и пишу письмо им на почту с подробным изложением всех проблем. И…. в ответ ничего! По истечение почти трёх недель никакого ответа на письмо хотя бы в виде «Спасибо, учтём все предложения!» не последовало.
Ну вот прошёл срок проведения тестирования, результаты должны быть объявлены 17 февраля, и в этот день приходит на почту письмо следующего текста: «Спасибо за интерес к нашим программам. Мы проверили ответы всех участников. К сожалению, в этот раз вы не прошли на направление «Go. Для всех желающих». Информацию о результатах добавили в личный кабинет.»
Поскольку мне кажется, что пяти решённых задач из шести в профессиональном контесте должно быть достаточно (ну не крутейших олимпиадников они на такой курс набирают), становится понятно, что не взяли меня потому что я не такой желающий, какой им нужен. Наверное, надо было закосить под простого студента, а не честно писать свою биографию. Но хочется посмотреть, что же там за результаты такие, хотя бы сколько задач я решил в итоге? Тестирование то было оффлайн, то есть после объявления результатов хочется какие-то протоколы проверки увидеть. Хотя бы узнать, правильно ли были решены задачи.
Захожу в личный кабинет, и что я вижу там? Краткое сообщение — «К сожалению, в этот раз вы не прошли. Попробуйте свои силы в следующем отборе». Это я и так знал из письма, но что же с контестом? А там по-прежнему написано «Результаты будут 17 февраля», вот и всё, что я знаю о сданных задачах. По-видимому, они просто забыли нажать кнопочку "опубликовать протоколы проверки".
Моя учительская оценка: не знаю, что там с содержанием курсов, но организационные процессы в «Тинькофф Образование» не дотягивают до «хорошо».