Из журналистки в программистки. Часть третья

Код скомпилирован, пора запускать.

История начинающего кодера Даши Борисенко-Орловски продолжается. В этот раз она рассказывает, какой ценой ей дались последние две недели курса по С++ на Coursera, и раскрывает планы на будущее. 

А теперь не дыши

Я никогда не умела бегать. В школе я плелась в хвосте змейки из бодрых одноклассников, а в универе сделала сомнительную справку о том, что бегать мне нельзя, и гуляла два километра по стадиону «Автомобилист». Поэтому все метафоры из мира людей, бегающих марафоны и полумарафоны или хотя бы семенящих на закате по району, мне недоступны. Иначе я бы сравнила свое знакомство с «плюсами» с бегом на износ. 

Зато, когда жить и программировать становится совсем невмоготу, я иду в бассейн или на йогу. Оба эти занятия научили меня единственной мудрости: дышать всегда лучше, чем не дышать. Никакие спринтерские заплывы и сложные асаны не стоят того, чтобы кровь отливала от мозга. Иначе не продержишься до конца. Так вот, не будьте как я: когда соберетесь учить С++, распределяйте нагрузку и вовремя выдыхайте. 

Середина курса жутко меня вымотала, а до начала четвертой недели по плану Coursera оставалось немного времени, так что я решила выдохнуть и заняться своими делами. В итоге прошлая неделя выдалась особенно жёсткой на работе, приходилось вставать в пять утра и жить, не отходя от монитора (привет всем, кто считает, что сидеть дома и писать тексты — рай). Очнулась я только к субботе, когда поняла, что на задания четвертой недели осталось полтора дня. И никаких поблажек и продлений — конец курса на горизонте. Выдохнуть снова не вышло. 

Думай быстро — решай медленно 

Четвертая неделя — последняя неделя, когда вас чему-то учат. Число новых тем соответствует номеру недели. На четвертой неделе это примеры работы со структурами и классами, текстовые файлы и потоки, выполнение операций «естественным» образом и, наконец, обработка исключений. Все эти темы непосредственно нужны для решения финальной задачи, так что лучше не халтурить и пройти их внимательно. 

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

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

На четвертой неделе Антон и Евгений будто поменялись местами. Задачи в теме Антона показались простыми, а в одной из тем Евгения была задача из пяти частей, которые нужно было решать и выгружать по очереди. Сами темы при этом не очень сложные: главное — запомнить синтаксические мелочи и пару раз внимательно перечитать конспект, к концу курса чтение предложенных в курсе конспектов стало моим любимым занятием. Все-таки когда воспринимаешь мудрость С++ на слух из лекций, многое ускользает от внимания. 

Четвертую неделю я в итоге действительно прошла за сутки

Это был мучительный день, но главное испытание было впереди.

Хакатон по ночам  

По расчетам авторов курса, финальная задача должна занять восемь часов. Учитывая весь свой предыдущий горький опыт, я сомневалась, что успею за неделю. Особенно это осложнялось тем, что в это время мне надо было поехать в Чикаго, сделать кое-какие дела и заодно изобразить короткий отпуск. 

Чикагский друг, у которого я остановилась, учится в колледже на дизайнера (всем нам, мигрантам, приходится заново изобретать себя невзирая на прошлые карьерные успехи). Он с порога стал жаловаться мне на жесткий курс по jQuery в этом семестре. Я внимательно выслушала, посмотрела на него красными глазами и пробормотала что-то о настоящей глубинной магии кода, которая вошла в мою жизнь с Яндексом. Кажется, сначала он не поверил, что всё так серьезно. Но после двух ночей, которые я провела за кухонным столом, не отрываясь от финальной задачи, только подходил ко мне и тихо спрашивал: «Ты опять будешь всю ночь программировать?»

Смысл итоговой задачи — построить базу данных, которая будет хранить даты и добавлять привязанные к этим датам события, искать события по датам, добавлять и удалять отдельные события и даты, ну и, конечно, выводить базу данных — или ее элементы — на консоль. Сначала мне это показалось шуткой. Ну какая база данных? Это, наверное, как «международные конференции», которые мы проводили во втором классе на уроках английского. «Уот из ё нейм? Уэа а ю фром?» — «Май нейм из Лиззи, айм фром Грейт Бритен». Но всё оказалось не так легко и радужно. 

Спойлер 
Авторы курса считают, что главный вызов для студента — правильно выбрать контейнер, в котором будут храниться данные. После погружения в контейнеры на второй неделе курса это как раз сделать очень легко, о типе контейнера я не задумалась ни на секунду. Самая кропотливая работа — наладить проверку даты, которую вводят с консоли. Например, дата формата «-6-+6-+6» считается правильной, а ввод «1-1---1» должен выдавать сообщение wrong date format из-за трех «-» подряд. Добиться этого гораздо сложнее, чем кажется на первый взгляд.

Спустя две ночи и два долгих утра у меня всё заработало. Я радостно понесла задачу в тестирующую систему и приготовилась к жизни свободного человека. Код провалил первый же тест. Вылезла совершенно непонятная мне ошибка — у меня же всё по-прежнему работало (или мне так казалось). Я не смогла придумать ничего лучше, чем улучшать структуру своего кода в надежде заметить неполадку. Спустя несколько часов и десяток попыток пройти тест, я совершенно перестала понимать, чего от меня хочет система-оценщица. 

В начале курса я не хотела ничего писать в общий чат для тех, кто проходит специализацию по C++ — от «белого пояса» до «коричневого», потому что там почти все мужчины и к тому же с кодерским бэкграундом. Но выбора не было, я загрузила свой горе-код в Pastebin, отправила в чат и ушла спать. 

Перед тем, как сесть за этот текст, я листала статьи на Академии Яндекса и наткнулась на историю парня, который поступил в Школу анализа данных с гуманитарным дипломом. Один из его советов: «Не бойтесь спрашивать у тех, кто умней вас». Жалко, я не прочитала это раньше. Мне всегда страшно оказаться не самой умной, страшно наткнуться на предвзятое отношение к женщинам и гуманитариям и подтвердить глупые стереотипы своим примером.

Так вот, ничего не бойтесь. Чат C++ оказался самым дружелюбным местом в интернете 

Мне не только помогли увидеть недочеты в коде, но и похвалили за рефакторинг (дизайн кода) и пожелали всевозможных успехов. Я полистала чат на предмет похожих ошибок и увидела, что кто-то оставил там ссылку на мою первую статью. Да, кого-то умилило слово «программистка», но его тут же одернули, написали, что это «история успеха». Надеюсь, так и получится. После консультации с чатом мой код сразу дошел до 33-го теста из 34. Еще пара часов возни, и я получила сертификат об окончании курса. 

Я успела сдать задачу на два дня раньше срока. Торопилась я неслучайно. Нужно было написать о своих впечатлениях до понедельника (текст был сдан до майских праздников - прим. Академии Яндекса). В понедельник начинается трехмесячный интенсив по веб-разработке, уже в офлайне. Мне предстоит наконец выйти из комнаты и каждый день ездить на курсы, чтобы сидеть там и кодить с девяти до пяти. Понятия не имею, как это всё впишется в мою жизнь, но отступать некуда. Код скомпилирован, пора запускать.