Все статьи | Дневник студента

Полгода обучения «Питону» и роль Хекслета в развитии

Полгода обучения «Питону» и роль Хекслета в развитии главное изображение

Привет, Хекслет!

Это будет длинный и личный пост на тему моего развития в программировании. Обычно я стараюсь поместить большее кол-во полезной информации в меньшее кол-во текста, но сейчас не тот случай. Тут будет много воды, моих мыслей, историй из жизни.

Будет ли вам интересно?

  • Вам интересно узнать чей-то опыт самостоятельного обучения: True
  • Вы ожидаете советов для самостоятельного обучения: True
  • Вам интересен опыт трудоустройства и прохождения собеседований: False

В ходе повествования я буду давать советы. Так как я имею мало опыта, некоторые из них вполне могут оказаться вредными, поэтому не стоит их воспринимать как что-то истинное. Это просто нечто, чему бы я научил молодого самого себя.

Как все начиналось

Мне всегда были интересны разные «компьютерные» вещи, в 11-12 лет я писал скрипты для программируемого чата mIRC, до сих пор помню синтаксис:

on *:join:#:{
  if ($nick == $me ) { halt }
  msg $chan Привет $+ , $nick $+ !
}

В том же возрасте конструировал сайты на «Юкозе», однажды даже купил хостинг с доменом и пытался сделать сайт на другом движке. Установил на хостинг PHP-Fusion, но с кодировкой случились какие-то проблемы: вместо букв показывались различные символы.

В школе я проходил Pascal, самостоятельно с большим интересом писал программки вне школьной программы дома, после чего воспроизводил их на уроке. Учитель конечно обратил на это внимание и посоветовал мне изучить C#, записал на мою флешку какие-то установочники. В C# для меня было удивлением, что можно определить переменную прямо в теле кода, когда в Pascal все объявляется до блока с инструкциями. К сожалению, я не нашел подходящих для себя материалов по этому языку: везде с первых страниц описывались классы, объекты, и я не понимал, что с ними делать. Я привык писать инструкции между begin и end, мне было непонятно что это за функция main, что такое static void. Когда я пытался разобраться в каждом нюансе, мне показалось это слишком сложным, и тогда я решил, что программирование — это не мое.

С тех пор я не занимался «айтишкой» регулярно, иногда поглядывал какие-то видео, в основном на тему сетей и информационной безопасности. Полгода назад я задумался: «раз мне так интересна «айтишка», я давно этим увлекаюсь, почему бы не стать специалистом?». Поставил цель стать джуном, определил срок: ровно год. Цель была очень мутная: кто такой джун? какой язык учить? какое направление выбрать? Если вы, как и я, учились сами, вы представляете, как сложно ответить на эти вопросы. Тут важно не затягивать, и быстрее начать что-то делать.

Выбор направления и инструментов

Помню, с каким интересом в детстве я возился с серверами, какое удовольствие получал, когда получалось подключиться по SSH или FTP. Таким образом, определился, что хочу работать с сетями. С выбором языка я не хотел долго затягивать, выбирал между Java и C#. Java хотел выучить чтобы писать мобильные приложения, C#, чтобы «одолеть дракона», который отбил желание когда-то заниматься программированием. Однако в итоге я выбрал Python, ибо я не хотел надолго затягивать выбор инструмента и взвешивать все «за» и «против». Я уже имел небольшой бэкграунд и осознавал, что язык — это лишь инструмент.

Первые робкие шаги в веб-разработку

Помимо Python, мне совершенно спонтанно и независимо ни от чего пришла в голову идея выучить HTML и CSS. У меня есть друг, который занимается дизайном сайтов, интерфейсов. Иногда я задавал ему вопросы по CSS, но ответа не получал, ибо он уже давно не занимался версткой. Я получил от него только два совета: установить Sublime Text, пытаться верстать одностраничные лендинги. Так я и познакомился со своим первым редактором кода - Sublime Text. Даже сейчас он вызывает ностальгию, хотя всего-то прошло полгода.

Верстка давалась тяжело, CSS мне казался очень нелогичным, и я решил отложить его изучение. Решил погружаться в Python: читал книги, смотрел видео, изучал синтаксис.

Первыми граблями, на которые я наступил, были табы и пробелы. Я кучу раз перечитывал написанный код и не понимал, почему он не работает, пытался изменить логику, тестировал и отлаживал. Оказалось, все дело в том, что я мешал табы и пробелы.

Синтаксис Python на базовом уровне я изучил очень быстро, ибо ранее уже имел небольшой опыт программирования. По старой памяти я решил написать VK бота (в детстве я писал ботов на mIRC). Бота я слепил почти копипастой, у меня была цель научиться получать сообщения из «ВК» и отвечать на них. Этой цели я в принципе добился, но осознавал, что слишком мало знаю для того, чтобы сделать что-то полноценное.

Первый месяц, первые успехи в Python

За месяц я научился реализовывать какие-то простые алгоритмы, но понимал, что пользуюсь языком еще очень неуверенно. Пришла идея поискать задачи по программированию, и так я наткнулся на Code Wars.

О, это чувство когда твое решение проходит тесты! Решение задач не только заставляет поработать головой, но также стимулирует изучать конструкции своего языка, работать с разными структурами данных. Это очень ценный опыт на старте, поэтому если вы новичок, обязательно порешайте задачки!.

Погружение в веб

Решая задачи я думал, «куда двигаться дальше?». Вообще во время самостоятельного обучения этот вопрос всегда стоит остро, ибо некоторые темы уже слишком простые, а другие — слишком сложные. Новичку тяжело выстроить систему, понять что именно изучать на данном этапе.

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

Помимо курсов по «Питону», там были очень классные лекции по веб-разработке, где последовательно объяснялись все основы. Из этих курсов я узнал как вообще устроены веб-приложения, что такое на самом деле бэкенд, узнал, что существуют веб-серверы (там даже рассматривался nginx в качестве примера). Где-то в начале я рассказывал, что неравнодушен к сетевым штукам, и эти лекции я впитывал с огромным интересом.

Особенно интересно было изучать протокол HTTP, значения хэдэров, mime-types, status codes и т.д. Наконец-то я узнал что такое cookies, и уже представлял, как работает авторизация. Также появилось представление, как кэшируются документы.

Неудачи и спасение в виде Hexlet

Впитав в себя знания веба, я решил написать приложение на Django. Выше писал про свой опыт написания VK-бота, тут была похожая ситуация. Я смотрел гайды на «Ютубе», повторял все за ведущим. Как бы ни пытался осознать что происходит, на определенном этапе (мне кажется, на момент создания моделей) все скатывалось в простую копипасту. Мне почти никак не пригодились знания того, как устроен веб, в Django были готовые решения, но чтобы их осознанно использовать, нужен некоторый опыт. Мне кажется на том этапе мне не хватало знаний того, как работают базы данных. Я не понимал, что такое миграции, что такое ORM и как вообще работают БД.

В процессе создания приложения на Django я понял, что без верстки мне не обойтись, и снова взялся за CSS. На этот раз я научился верстать с использованием Flex, имел представление, как сделать адаптивную вёрстку.

Верстать научился, но что делать с «Питоном, я не представлял; у меня совсем не было идей, куда двигаться дальше. Однажды на работе я вышел прогуляться в обеденный час. Включил подкаст Moscow Python на «Ютубе», где в качестве гостя выступал Алексей Пирогов.

Алексей рассказывал про Хекслет в целом и о том, какое там дружное комьюнити. До этого про Хекслет я читал только в комментариях под каким-то постом на Pikabu. Комментаторы говорили, что для новичков Хекслет слишком сложен, сложность, в том числе, меня и привлекла.

Начало обучения на Hexlet

Вернулся в офис и решил зайти на Хекслет. Первый зеленый квадратик в моем профиле — это как раз тот день, тогда я решил посмотреть курсы по верстке, после чего ждал ЗП, чтобы оплатить PRO план. Это было начало четвертого месяца моего серьезного обучения программированию. После оплаты PRO плана я добил курсы по CSS, и они мне определенно понравились. В интернете куча одинаковой инфы, но я не находил в ней какую-то «полноту». Курсы Хекслета же закрыли многие пробелы, и я смог даже полюбить верстку (пока её в очередной раз не забросил, хах!).

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

Обучение на Хекслете (о_О)

Курсы я проходил очень жадно, в день я проходил по одному курсу, за исключением только курса по БД, он у меня затянулся на полмесяца. Дальше опишу свои самые любимые курсы:

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

Регулярные выражения. Когда я запустил этот курс, я не понял, что от меня хотят. С первых минут объясняется, как работать с регулярками, но не понятно, что это такое (спишем на мою невнимательность). Только открыв песочницу и внимательно прочитав задание, я вроде бы разобрался и даже вошел во вкус. Курс прошел с большим интересом.

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

Основы реляционных баз данных. Очень крутой курс, и, наверное, мой самый любимый. Его я проходил не спеша, прохождение заняло почти месяц. Я и раньше пытался выучить SQL, но тогда было лень учить все эти SQL-запросы, мозг думал, что их в любой момент можно нагуглить. С Хекслетом так не прокатит, и все нужно закреплять на практике. Курс дал отличную базу, после которой я наконец-то понял, как реализуются многие вещи, например, комментарии к постам. Теперь язык SQL не вызывает у меня какого-либо дискомфорта, без проблем его использую.

Что делать дальше? Проекты!

Курсы по Python подходили к концу, и я снова думал что делать дальше. Размышлял: нужны ли мне проекты, особо остро встал вопрос когда появилась новость о повышении цен. Думал недолго, купил все проекты пачкой.

О первом проекте я уже писал в дневнике ученика, поэтому тут я его пропущу. Самое главное, что я научился разбивать код на модули, разобрался с настройкой рабочего окружения и созданием полноценных питоновских пакетов.

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

Полгода позади

Вчера я снова попытался сделать свой блог на Django, и наконец-то я подошел к этому процессу осознанно. Конечно же одного знания работы баз данных мало, в прошлый раз мне не хватало и других навыков: импорты, пакеты, чтение документации, чтение кода, даже банально понимание конструкций языка. В рассказе я многое оставил за скобками, первые 3 месяца я занимался буквально каждый день, я на самом деле загорелся этим. Actually я до сих пор каждый день какое-то время посвящаю айтишке, это стало частью повседневной жизни, и мне это приносит удовольствие, просто сейчас я сбавил темпы.

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

Результаты (кроме вышеописанного)

Сейчас я имею некоторое представление о том, как устроены языки программирования, какими они бывают (типизация, компилируемые или интерпретируемые, какие бывают реализации, стандарты и т.д.). Мне кажется, что сейчас я могу взять любой язык и за пару месяцев начать уверенно на нем писать. Также сейчас мне стало ясно по какому принципу выбираются языки для разных задач (библиотеки, их поддержка).

Говоря об алгоритмах, после второго проекта я начал задумываться о сложности выполнения кода, но на данный момент у меня мало практики. Планирую вернуться к Code Wars с новым опытом и пытаться решать задачи относительно оптимальными методами.

Наконец-то я могу использовать БД в своих приложениях! Проблема с хранением данных решена.

Планы на обучение

  • Конечно же, нужно закончить проекты на Хекслете, но сейчас я решил взять небольшой перерыв.
  • Однозначно нужно прокачиваться в CS (Computer Science), алгоритмах.
  • Планирую более подробно изучить работу ОС, как ОС выделяет ресурсы и память для процессов.
  • Потихоньку осваивать ОС на ядре Linux, в частности ubuntu. Научиться поднимать на удаленных серверах nginx и БД в «боевом» режиме.
  • Меня удручает, что я изучаю бэкенд, но еще ничего на бэкэнде не сделал. Поэтому сейчас я буду заниматься своим проектом.
  • Хотел бы поверхностно изучить фронтенд для представления как там работают фиксики, в идеале использовать что-то в своих проектах
  • Выучить еще что-нибудь кроме «Питона» (и JS, ибо JS я и так все время параллельно тыкал).
  • Научиться работать с «Гитом» помимо команд git clone/push/commit.
  • Научиться «грамотно» тестировать код.
  • Поверхностно (на данном этапе) изучить паттерны проектирования.

Полгодика у меня еще есть, думаю хватит :)

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

Советы начинающим

Выделю самое главное:

  • Регулярно практикуйтесь!
  • Если какая-то тема не содержит практики, хотя бы законспектируйте. Я использую Google Docs. К конспекту намного проще обращаться, чем искать нужную информацию непонятно где (хотя поиск информации тоже полезный навык).
  • Английский язык! Он 100% нужен, переходить на него сложно и не комфортно, но это нужно делать. Гуглите на английском, читайте документацию, делайте хоть какие-нибудь шаги в этом направлении. Это должны быть реальные усилия, а не просто «я попытался почитать, ничего не понял, пошел гуглить на русском».
  • Изучите свой язык программирования: для каких целей он создавался, какие у него характеристики (типизация, структуры данных), какие есть отличительные особенности, как он работает «под капотом».
  • Учитесь работать с bash, изучайте ОС на ядре Linux.

Спасибо, что прочитали :)

Аватар пользователя Дмитрий Семенко
Дмитрий Семенко 27 апреля 2020
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
1 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
1 июня 5 месяцев