Вы когда-нибудь видели лендинги курсов по программированию? Наверняка да, ведь времена «мидлов за полгода» и «джунов за три месяца» отгремели совсем недавно. Страницы многих успешных эдтех-компаний здесь похожи. За обещаниями золотых гор на золотых песках удаленки мы вглядываемся в светлые лица преподавателей, и после reasons to believe нас встречает… программа обучения. Двух-, а то и трехуровневая простыня со всеми важными темами. И чем их больше, тем лучше: ведь на другой чаше весов уже поджидает стоимость курса.
Стремление показать товар лицом — это, конечно, похвально. Но есть у такой дотошности и обратный эффект: неуверенность в себе. Вчерашним «выпускникам филфака», к которым с натяжкой отношу себя и я, становится страшно. В этом посте я постараюсь всех нас ободрить и расскажу, как преодолел базовый курс Python.
Немного о себе. Моя работа всегда была связана с текстами. В основном айтишными. Я много пишу с экспертами на разные темы, но никакими системными знаниями о языках программирования в итоге не оброс. До этого курса моим высшим достижением был фан-сайт группы «Кино», написанный на информатике с Dreamweaver. На фоне одноклассников с кодом в блокноте выглядело круто, но в голове осталось немного (спасибо, визивиг).
Перемещаемся лет на 17 вперед. В конце прошлого года я получил для бесплатного знакомства экспресс-курс Python «Программирование — и точка». Не буду ссылаться на создателей, чтобы не обвинили меня в рекламе, по названию находится быстро.
А теперь время дневниковых записей: как я провел январь.
Первые «умные слова»
В моем экспресс-курсе не обошлось без обзорной лекции о базовых вещах. Что такое компьютер, я более-менее представлял. Думал, что совсем заскучаю, но получил в свой словарь два новых термина: «компилируемый язык» и «интерпретируемый язык». Следом в зачет пошел одобрительный кивок друга-программиста — когда за пивом поведал ему новость о своем курсе и вывалил эту пару определений. И это мне еще про Python ни слова не сказали!
Среда разработки
На курсе использовали среду PyCharm. Раньше я использовал среды разработки только «в режиме просмотра», чтобы, будучи гострайтером, копипастить чужой и непонятный мне код в чужие же посты. Теперь я встал на место тех самых экспертов и должен сам врубаться, что вижу в редакторе.
Здесь и далее я буду отражать свои эмоции от обучения. Они адресованы в первую очередь тем, кто делает первые шаги в программировании, как я, или вообще сомневается в этой затее. Так вот: современные среды разработки — это восторг. PyCharm сам готовит все необходимое для работы, нужно только скачать Pycharm и установить его (по дефолту это бесплатно). Цветовое выделение кода срабатывает на лету; со временем я запомнил, как должны выглядеть те или иные слова, что я вбиваю, и неправильный цвет мгновенно напоминал мне об опечатке или другой проблеме. А еще PyCharm сразу сообщает об ошибках, причем делит их на фатальные (без которых не заработает) и нефатальные («лучше так не делать, могут быть проблемки»). Максимально дружелюбная среда для работы.
Переменные, числа и математика
Пошли первые темы непосредственно о питоне. Получил пачку советов о том, как называть переменные. Правила здесь несложные, просто учту, что переменных может быть много и поэтому нужно называть их осмысленно. Но при этом не растекаться, потому что писать их придется часто. Написал hello world — бонус к мотивации!
Числа были вынесены отдельной темой. Точнее, типы чисел. Показалось, что это тема, скорее, для общего развития: концепциям, которые я осознавал и раньше, просто дали определения.
Условные конструкции
Начались задачи. Простые математические задачи на базовые арифметические действия и логику. Если понимаешь, как в принципе это делать, то оформить в код будет легко. Любую задачку всегда можно запустить в среде разработки, прежде чем копипастить код для проверки. Когда можешь проверить себя самостоятельно, это успокаивает.
Условные конструкции открыли и мой первый затык. Когда мы утверждаем, что нечто равно чему-то, нужно ставить “=”. Когда мы проверяем, что нечто равно чему-то, нужно ставить “==”. Двойное равно не входило в мой лексикон чуть ли не до финального проекта. А PyCharm не писал, что это ошибка. Много раз я шерстил вроде бы нормальный код вдоль и поперек, пока в голове не улеглось.
На этом этапе пришлось первый раз идти в гугл, потому что тип данных boolean проскользнул мимо внимания. Понял, что логические значения выглядят как обычные слова без кавычек, а еще Python может воспринимать из контекста, даже если они не написаны. Прямо как в человеческом языке :) Впоследствии эта тема не особо мне пригодилась, но есть ощущение, что на более сложном уровне она становится важнее.
Списки и циклы
Если мы хотим перебрать что-то в диапазоне, например, от 1 до 5, мы пишем: for i in range(1, 6). Последнее число в диапазон НЕ включается, а первое включается. Ок, смирился. Можно обратиться к элементам диапазона с конца, используя отрицательные числа. Это удобно. Но при этом первый элемент списка — он для питона не первый, он нулевой, счет с нуля идет. Особенности нумерации — это первое, что меня удивило в языке. Вероятно, на более глубоких уровнях познания это имеет логическое обоснование. Привыкаю и смотрю дальше.
К этому моменту я уже привык, что в программировании все нужно объявлять и объяснять. Окей, я объявил, например, что ввожу с клавиатуры некоторый диапазон, в котором должен работать обработчик (обработчик?) for, вот этот самый range. Но как обозначить i так, чтобы обработчик понял, что нужно двигаться по диапазону? Да никак! Эта “i” выглядела для меня так, будто появляется из ниоткуда, но при этом подразумевала именно то, что мне нужно. В других примерах я увидел, что вместо “i” можно указать “_”, а потом узнал, что подойдет любой символ.
В этот момент я был как никогда близок к тому, чтобы все бросить. Спасибо, Stack Overflow, ты прекрасен! И спасибо другим ребятам, что проходили курс: в ответ на мое нытье они признались, что до циклов еще не дошли, порадовались моему прогрессу и вовремя приподняли мотивацию.
Функции и рекурсия
Объединил их в один раздел, потому что проскочил обе со всеми домашками быстро. Спойлер: это подвело меня в финальном проекте. Кроме того, я, кажется, не понял до конца, что нужно писать после названия функции в скобках, когда мы объявляем ее через def. Но этот пробел не помешал мне с заданиями, которые, видимо, были слишком простые.
Рекурсия, как концепция, показалась очаровательной. Вдохновила на внеклассное чтение, провел весь вечер, залипая на фракталы :)
Структуры данных
Здесь я почувствовал, что делаю какие-то реально полезные вещи. Некоторые домашки были связаны с обработкой произвольных текстов. Да я целый MVP «Антиплагиата» вот этими руками сваял! Помимо синтаксиса, нужно было усвоить понятие итерируемости, и дело в шляпе. Ах да, в памяти осталось, что кортежи очень нужны, но постигну их подлинное величие я когда-нибудь потом.
Классы
Курс клонился к завершению, и классы в нем рассматривали, как мне показалось, на базовом уровне. Вероятно, они становятся нужны в гораздо более масштабных проектах, чем те, с которыми я столкнулся в домашках. В заданиях по классам нужно было только продемонстрировать, что я понял синтаксис и смысл понятия. Ценнее здесь был ознакомительный микромодуль про ООП и другие парадигмы программирования. Возможно, я когда-нибудь копну эту тему глубже, но к тому моменту я уже очень хотел приступить к финальному проекту.
Модули
Классическое начало Fallout представляете? Вспомните момент, когда вылезаешь из убежища/пещеры в совершенно новый, открытый мир — где не знаешь, чего и ждать, так что ждешь всего и побольше. То же самое и с модулями Python. Целая вселенная возможностей оказалась на расстоянии строчки-двух импорта. Таким же когда-то мне представлялся мир модов на скайрим, но кайфа от побед в питоне я получил больше :)
Для финального проекта я подгрузил функцию выбора случайного элемента списка. И Tkinter.
Итоговый проект
Курс не включал гайдов по итоговому проекту, но я знал, что согласно плану создателей курса, я должен был сделать тренажер с флеш-картами для изучения иностранного языка. Это когда тебе дают определение слова, а ты должен написать, что это за слово. И так много-много раз в случайном порядке до полного запоминания. К тому моменту я закончил прекрасную игру Jakuza 0, богатую новыми для меня словами и фразами на английском. В итоге выписал штук 80 — база готова.
Tkinter я кое-как осваивал уже сам, по многочисленным гайдам в Сети. Предварительно отрисовал простенькую блок-схему с user journey. Помимо рандомного выбора определений поставил ограничение на 20 карточек за сессию и подсчет правильных ответов — с выдачей какого-нибудь игрового персонажа в зависимости от результата.
Думаю, вы представляете, как это примерно должно работать. У меня получилось где-то 80 строчек кода (не считая словарную базу). В них входило 10–15 модулей (графических элементов) Tkinter и три функции — проверка ответов с подсчетом результата, переход на следующий вопрос с подсчетом показанных карточек, создание финального сообщения на основе числа верных ответов.
Самое классное здесь не то, что я сделал проект сам с нуля, нет. Самое классное — что в начале работы я не имел представления о том, как будет выглядеть большая часть проекта. Всё вырисовывалось постепенно, за каждым поворотом к цели я открывал что-то новое, переписывал, переставлял, стремился к тому, чтобы всё вышло по ТЗ. И оно вышло, да! Я смог сделать из этого готовое приложение — можно было показать его даже без пайчарма.
К чему всё это?
Все истории успеха начинающих программистов строятся по одному шаблону. Я и сам написал таких не один десяток. На сцену выходит лирический герой, вызывает сострадание, принимает волшебную таблетку программирования — и вот перед нами лучезарный рыцарь в сияющих IT-доспехах. Окей, таков путь.
Моя сюжетная арка обошлась без диснеевских штучек и даже в масштабе единственного персонажа не привела к особым переменам. Я продолжу заниматься тем, что умею вроде бы неплохо — мне это нравится. Но я просто не смог оставить без внимания то ощущение прекрасного, тот эмоциональный подъем, что дало мне знакомство с программированием.
Надеюсь, и в вашей работе всё еще находится место таким эмоциям. Успехов!