Журнал / герои

Как я плакала, кололась, но начала учить C++

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

C++ считается не лучшим языком для знакомства с кодом. Если вы пока далеки от математики и не понимаете шуток с Хабра, «плюсы» могут отбить желание это исправить. Поэтому мы предложили пройти начальный курс Яндекса по C++ на Coursera журналистке Даше Борисенко-Орловски: она упертый гуманитарий, но знает базовый Python и чуть-чуть JavaScript, так что не испугается и пойдет до конца. В этот раз Даша делится впечатлениями от первой недели курса.

Как я к этому пришла 

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

Во-вторых, конечно, давит общество. Повсюду говорят, что знание кода сегодня уже как знание английского, а поколение Z вот-вот сметет миллениалов с рынка труда, потому что научилось кодить раньше, чем ходить на горшок. Не думаю, что все настолько безнадежно, но проверять на себе не хочется.

Я не знала, с чего начать, и потому воспользовалась первой попавшейся возможностью. Программисты, которые работали со мной над сайтом ВОС, вели интенсив по веб-дизайну в Moscow Code Academy, и я его прошла. Это две пары выходных с HTML и CSS, после которых я могла бы сверстать довольно красивый лендинг, если бы захотела. Но я этого так и не сделала и только убедилась в том, что верстка — это не программирование.

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

Вернуться к коду меня подтолкнул переезд в Америку. На новом месте хочется все начинать с нуля. Воплощением чистого листа для меня почему-то стал анализ данных — говорят, число рабочих место в этой сфере растет чуть ли не по экспоненте. Сначала я поступила на это направление в муниципальный колледж (как в сериале «Сообщество»), но пока правительство оформляло мои документы на учебу, все сто раз успело поменяться, и в колледж я так и не пошла. Зато обнаружила интенсивные программы на сайте Codecademy. Я прошла два, но мой мозг постоянно чувствовал себя недозагруженным, потому что задания были очень простыми. Но проходить было интересно, и узнала я, наверное, не меньше, чем могла бы в американском ПТУ. 

И тут появился Яндекс и спросил, не хочу ли я поучиться с ними C++.

Нужны ли мне (и вам) «плюсы»

Я рассказала приятельнице Мари, что начну учить «плюсы». Когда-то Мари отучилась на журналиста и долго работала в новостях, но потом разочаровалась в профессии и освоила Python и статистику. 

— И зачем тебе С++? Ты же данными хочешь заниматься, — удивляется Мари.

— А ты на работе ничем, кроме Python, не пользуешься?

— Никогда, разве что таблички обрабатываю в SQL, но я эти пять команд освоила прямо на месте. 

— Но зато если дата-аналитик знает «плюсы», он не будет дергать инженера за подол и просить засунуть его алгоритмы в интерфейс на С++. 

Мари так и не поняла, о чем я.

Но если знание кода сегодня сравнивают со знанием английского, то С++ — это классический оксфордский английский, язык универсальный и при этом престижный

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

Глава 1, в которой героине очень плохо 

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

Курс может принести много радости, но при одном условии: вы уже сталкивались с другими языками программирования

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

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

Этот образ наконец появляется в видео, где рассказывают, как настроить нужную для курса среду разработки Eclipse под Mac OS — как раз для меня. Соня в футболке Young & Yandex отлично все рассказывает. Проблема только в том, что с момента записи видео Apple успел неоднократно подгадить собственным пользователям, выпуская все новые ОС и придумывая новые дикие стандарты для отладчика. В итоге я провожу целый день, устанавливая на свой Макбук XCode, сражаясь с терминалом, читая бесконечные форумы и пытаясь разобраться в последней версии Eclipse для Мака, потому что Соня исчезает, на следующих видео снова показывают все на Винде, а я чувствую себя ущемленной со всех возможных сторон. 

Мой первый код

Первая практическая задача оказывается до стыдного легкой. Видимо, нужна она только для того, чтобы студенты освоили механизм отправки и оценки работ. Зато вторая сразу выносит мозг. Нужно научить компьютер решать квадратные уравнения. Пользователь вводит с консоли коэффициенты a, b и c, а выводятся на консоль реальные значения икса.

Если вы нормальный человек и не помните, что такое квадратное уравнение, то оно выглядит так: ax^2 + bx + c = 0. В зависимости от этих самых а, b и с уравнение может иметь два возможных решения, одно или ни одного. Чтобы заставить программу их вычислять, придется вспомнить, что такое дискриминант. Это не так страшно, как звучит. 

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

Спойлер:

Компьютер думает не так, как мы. Если для нас квадратное уравнение при а = 0 уже не квадратное, а линейное, то для машины — просто частный случай квадратного. Если нулю равно еще и b в придачу, это и вовсе не уравнение, а какая-то чушь. Но для компьютера это лишь частные случаи, которые не меняют сути дела. Именно в учете этих редких и странных случаев и в детальных указаниях для программы и состоит суть разработки. Правда, чтобы это осознать, мне пришлось час копаться в чате поддержки курса в поисках подсказки. Задача вроде бы классическая, но нетривиальная. 

Код для квадратного уравнения я писала, сидя в прачечной, пока белье вертелось в сушилке, а дописывала дома. К этому моменту я поняла, что безнадежно отстала в практической части курса и отступать уже некуда — сначала я забросила курс, потому что ленилась установить Eclipse, потом разозлилась из-за тщетных попыток включить отладчик. Даже продлевала уже начатый курс, досматривала теоретические видео, но до практики никак добраться не могла. Поэтому и пришлось решать все задачи первой недели за один день. Но после того, как я победила квадратные уравнения, даже более сложные головоломки довела до ума довольно быстро.

Под конец первой недели со мной случился очередной флэшбек. Последняя задача в этом разделе — написать код, который переводит натуральное число из десятичной системы в двоичную. И вот я уже на уроке информатики в своей таганрогской школе. После уроков класс информатики служит компьютерным клубом за деньги, поэтому на всех компьютерах есть «Макс Пэйн» и «Дьябло». Мы карандашом зарисовываем в тетрадях какие-то схемы и решаем в столбик примеры по переводу в двоичную систему. Потом надо решать задачи на компьютере — на языке Basic. Когда задача решена, Павел Петрович, информатик и по совместительству ОБЖшник, разрешает порезаться немного в «Дьябло». Поэтому тогда задачи на Basic я решала с немыслимой скоростью, хоть теперь ничего и не помню. 

Хотя за окончание первой недели курса мне ничего интересного не предложили, дух Павла Петровича водит моими руками по клавиатуре, и вот я уже вывожу на консоль вектор задом наперед. Есть в этом что-то сатанинское, но тестировщику Яндекса безразлично, с помощью белой или черной магии написана программа. «Вы получили один балл из одного возможного балла», сухо ответила Coursera. 

Впервые за все попытки научиться кодить онлайн я не чувствую себя бестолковым буратино

Теперь я мальчик-заика под гипнозом из «Зеркала» Тарковского. «Я. Могу. Говорить».