Рубрика: Разработка

  • Жизнь под контролем версий: как Git может спасти ваш конфиг, резюме и не только

    Жизнь под контролем версий: как Git может спасти ваш конфиг, резюме и не только

    Обычный вечер и немного .bak

    Вчера я залез в конфиги своего роутера. Роутер на Linux, конфиги в виде файлов, всё как у людей. Прежде чем что-то менять — делаю бэкап. Просто копирую файл и добавляю .bak в конец. Иногда выходит config.bak, потом config.bak2config.bak_finalconfig.bak_final2_really… Думаю, у многих такая же история.

    В какой-то момент я понял: это же полнейший бардак. И главное — зачем всё это, если у нас есть Git?

    Репозиторий на роутере — почему бы и нет

    Решение пришло само собой: я инициализировал Git-репозиторий прямо на роутере. Удалил все .bak-файлы, сделал первый коммит и начал экспериментировать. Что-то сломал — спокойно откатился. Заработало как надо — сделал новый коммит. Всё просто и прозрачно.

    И вот тут в голове щёлкнуло: почему я не делаю так везде?

    Git как способ мышления

    Сейчас я работаю над резюме. Постоянные правки, новые формулировки, добавления, удаления. До этого всё шло в один файл, и если я что-то «переигрывал», то часто терял предыдущий вариант. А теперь у меня есть репозиторий с историей изменений. Можно вернуться, посмотреть, как развивались мысли, какие достижения вспоминались, какие формулировки оказались лучше.

    И это безумно удобно.

    Мир больше, чем код

    Git — это не только про код. Это про мышление. Про контроль над изменениями. Про возможность безопасно экспериментировать и видеть историю своих действий. У нас в руках мощный инструмент, который легко переносится на любую работу с текстом.

    Где ещё можно использовать Git?

    — В личных заметках
    — В черновиках статей или постов
    — В резюме и портфолио
    — В планах обучения
    — В подготовке к публичным выступлениям
    — Даже в договорённостях по проектам (если вы технарь, конечно)

    Всё, что можно представить как «файл с изменениями», можно завернуть в репозиторий.

    Хаос против структуры

    Мир не делится на «код» и «не код».
    Мир делится на хаос и репозитории.

  • Adminer — Легкий способ заглянуть в БД

    Adminer — Легкий способ заглянуть в БД

    Продолжаю серию лайфхаков для разработки своих pet-проектов. Сегодня мы всего за 2 мегабайта заглянем внутрь базы данных на своем сервере.

    Для этого нам понадобится Adminer — легковесный интерфейс для просмотра своих таблиц. Больше подходит, конечно, для вашего dev/stage окружения, но можно и на проде, только учитывайте риски и не публикуйте порты наружу для коммерческого продукта.

    Все что нужно сделать — добавить в docker compose следующий код:

      # Adminer для управления базой данных (доступен только через внутреннюю сеть)
      adminer:
        image: adminer:latest
        depends_on:
          db:
            condition: service_healthy
        restart: unless-stopped
        environment:
          - ADMINER_DEFAULT_SERVER=db
        networks:
          - app_network
        # Не публикуем порты наружу для безопасности

    Дальше хитрый трюк, хотите открыть его в браузере у себя на компьютере? Запустите команду ssh туннеля для маппинга портов:

    ssh -L 8080:localhost:8080 user@remote_server_ip

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

  • Чеклист: 100 первых дней на посту СТО

    Чеклист: 100 первых дней на посту СТО

    Оценка текущего состояния

    1. Провести аудит существующей IT-инфраструктуры
    2. Оценить текущие технологические стеки и инструменты
    3. Проанализировать бизнес-процессы компании
    4. Изучить документацию по существующим системам
    5. Оценить уровень кибербезопасности
    6. Проверить соответствие нормативным требованиям
    7. Оценить эффективность текущих IT-операций
    8. Проанализировать бюджет IT-отдела
    9. Изучить структуру IT-команды и распределение ролей
    10. Оценить уровень технической задолженности

    Стратегическое планирование

    1. Определить ключевые цели модернизации
    2. Разработать дорожную карту цифровой трансформации
    3. Определить приоритетные направления модернизации
    4. Установить ключевые показатели эффективности (KPI)
    5. Создать план управления рисками
    6. Разработать стратегию обеспечения непрерывности бизнеса
    7. Определить бюджет на модернизацию
    8. Создать план коммуникации с заинтересованными сторонами
    9. Разработать стратегию управления изменениями
    10. Определить временные рамки для ключевых этапов модернизации

    Инфраструктура и архитектура

    1. Разработать целевую архитектуру предприятия
    2. Спланировать миграцию в облако (если применимо)
    3. Оценить потребность в гибридной инфраструктуре
    4. Внедрить контейнеризацию и оркестрацию (например, Kubernetes)
    5. Разработать стратегию управления данными
    6. Внедрить практики DevOps и CI/CD
    7. Оптимизировать сетевую инфраструктуру
    8. Внедрить системы мониторинга и логирования
    9. Разработать стратегию резервного копирования и восстановления
    10. Оценить необходимость edge computing

    Безопасность и соответствие требованиям

    1. Провести оценку рисков информационной безопасности
    2. Внедрить многофакторную аутентификацию
    3. Разработать политику управления доступом
    4. Внедрить систему управления уязвимостями
    5. Разработать план реагирования на инциденты
    6. Обеспечить шифрование данных в состоянии покоя и при передаче
    7. Внедрить систему обнаружения и предотвращения вторжений (IDS/IPS)
    8. Провести обучение сотрудников по вопросам кибербезопасности
    9. Разработать политику безопасности для мобильных устройств
    10. Обеспечить соответствие требованиям GDPR и других регуляторов

    Разработка и инженерия

    1. Стандартизировать процессы разработки программного обеспечения
    2. Внедрить практики чистого кода и code review
    3. Разработать руководства по стилю кода для разных языков программирования
    4. Внедрить автоматизированное тестирование
    5. Разработать стратегию управления техническим долгом
    6. Внедрить систему управления версиями (например, Git)
    7. Стандартизировать процесс документирования кода и API
    8. Внедрить практики непрерывной интеграции и развертывания (CI/CD)
    9. Разработать стратегию микросервисной архитектуры (если применимо)
    10. Внедрить инструменты статического анализа кода

    Данные и аналитика

    1. Разработать стратегию управления данными
    2. Внедрить современную платформу для хранения и обработки данных
    3. Разработать политику управления качеством данных
    4. Внедрить инструменты бизнес-аналитики и визуализации данных
    5. Разработать стратегию использования больших данных
    6. Внедрить практики DataOps
    7. Разработать стратегию машинного обучения и искусственного интеллекта
    8. Обеспечить соответствие требованиям к обработке персональных данных
    9. Внедрить систему управления мастер-данными (MDM)
    10. Разработать стратегию data governance

    Облачные технологии

    1. Оценить готовность к миграции в облако
    2. Выбрать подходящего облачного провайдера
    3. Разработать стратегию миграции в облако
    4. Внедрить облачную систему управления идентификацией и доступом
    5. Оптимизировать затраты на облачные ресурсы
    6. Внедрить практики CloudOps
    7. Обеспечить соответствие облачной инфраструктуры требованиям безопасности
    8. Разработать стратегию мультиоблачности (если применимо)
    9. Внедрить инструменты для мониторинга облачных ресурсов
    10. Обучить персонал работе с облачными технологиями

    Управление проектами и процессами

    1. Внедрить гибкие методологии разработки (например, Scrum или Kanban)
    2. Стандартизировать процесс управления проектами
    3. Внедрить систему управления портфелем проектов
    4. Разработать процесс приоритизации задач и проектов
    5. Внедрить инструменты для совместной работы и управления задачами
    6. Разработать процесс управления изменениями
    7. Внедрить систему управления знаниями
    8. Разработать процесс управления рисками проектов
    9. Внедрить практики Lean IT
    10. Разработать систему оценки эффективности проектов

    Инновации и исследования

    1. Создать инновационную лабораторию или центр R&D
    2. Разработать процесс оценки и внедрения новых технологий
    3. Установить партнерские отношения с технологическими стартапами
    4. Внедрить программу внутренних инноваций и предложений сотрудников
    5. Разработать стратегию открытых инноваций
    6. Создать процесс пилотирования новых технологий
    7. Разработать стратегию использования блокчейн-технологий (если применимо)
    8. Исследовать возможности применения квантовых вычислений
    9. Оценить потенциал использования технологий виртуальной и дополненной реальности
    10. Разработать стратегию внедрения 5G и IoT

    Управление персоналом и культура

    1. Провести оценку навыков IT-персонала
    2. Разработать план обучения и развития сотрудников
    3. Внедрить программу наставничества
    4. Разработать стратегию привлечения и удержания талантов
    5. Создать культуру непрерывного обучения и инноваций
    6. Внедрить программу признания и поощрения сотрудников
    7. Разработать план по повышению разнообразия и инклюзивности в IT-команде
    8. Внедрить практики well-being для IT-персонала
    9. Разработать стратегию управления удаленными командами
    10. Создать программу развития лидерских навыков для IT-менеджеров
  • Docker контейнер перезагружается, как узнать почему?

    Docker контейнер перезагружается, как узнать почему?

    К перезагружающемуся контейнеру невозможно подключиться, чтобы посмотреть, что выводится в консоль. Но в таких случаях нам поможет docker logs:

    docker logs --tail 50 --follow --timestamps name_of_container

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

  • Как я искал и нашел IT-работу в 2021 году

    Как я искал и нашел IT-работу в 2021 году

    Сегодня меня пригласил на вебинар по трудоустройству в качестве соведущего Алексей Голобурдин, автор канала Диджитализируй. Я согласился сразу — ведь во многом благодаря его каналу я ответил на многие вопросы на технических собеседованиях. С его разрешения публикую на своем блоге:

    Для максимально стройного изложения своих мыслей я решил написать эту статью. У меня несколько необычный опыт в IT, но велика вероятность, что он поможет таким же специалистам, которые решили сменить сферу работы после 30.

    Мой опыт в IT

    Я пришел в технологии 12 лет назад предпринимателем. Я не делал проекты на заказ, я делал их для себя, сам ставил задачи, сам их выполнял. Так как я не был разработчиком в прямом смысле этого слова — решения я находил такие, которые можно установить на сервер своими силами через скрипты-установщики, связать через плагины или встраиваемые скрипты. Сейчас подобная парадигма называется No Code, так вот именно этим я и занимался всю свою карьеру. И, конечно, много опыта в бизнесе — ведь это были мои магазины, а значит маркетинг и продажи тоже должны быть настроены. До 2019 года я делал это все в команде с моими соучредителями, затем — уже самостоятельно, полный цикл решений.

    Почему я решил идти в программирование?

    В определенный момент времени ты понимаешь, что нужного тебе плагина не существует, или две системы не общаются между собой, но у каждой есть описание API. И чем дальше ты ищешь нужное тебе решение, тем больше убеждаешься, что его либо нет, либо оно сырое.

    Так как я давно уже автоматизировал все в своем бизнесе — у меня было время на стороннее консультирование. Несколько лет я настраивал IT-системы в фитнес-клубе, делал их взаимосвязь, применял свой бизнес-опыт и профильное банковское образование для бизнес-консультирования. В общем, был занят. А в какой-то момент на мир спустился черный лебедь — пандемия. Естественно, фитнес-клуб закрыли одним из первых, и у меня появилось свободное время. И я решился — сейчас, пора. Python, я иду!

    Обучение на курсе Яндекс.Практикума — Python-разработчик

    У меня есть отдельная статья про Яндекс.Практикум, там есть плюсы и минусы. Рекомендую ознакомиться, здесь повторяться не буду. Здесь я сосредоточусь на тех шагах, которые я предпринял после обучения.

    Подготовка к устройству на работу

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

    Также я начал участвовать в Open Source проектах. Нашел интересного ментора, Леона Сендоя, и помогал ему писать систему резервного копирования различных баз данных Blackbox. Читал код, разбирался в фабричном методе проектирования, и что самое главное — решал поставленные задачи. Причем почти все они были для меня абсолютно новыми, я разбирался в проблеме с нуля. Серьезный буст для саморазвития и в качестве бонуса ревью от очень хорошего норвежского специалиста и владельца сообщества Python-Discord на 200 000 человек.

    Размещение резюме

    Также я разместил резюме на HH и Хабр.Карьере. Я неплохо говорю по-английски, поэтому, проконсультировавшись с сестрой, которая уже много лет живет в Англии и работает HR, разместил резюме еще на следующих сайтах:

    Также заручился рекомендациями от моих менторов — Леона Сендоя и Андрея Ли — на LinkedIn (рекомендации приложены в конце статьи для примера).

    Первое собеседование

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

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

    Пройти собеседование с HR было несложно, но нервно. У меня красивая история, я подготовился — и вот у меня уже назначено техническое собеседование. Как мог я готовился, читал все, что попадалось под руки. Вот список того, что вам поможет в этом:

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

    Следующие 30 собеседований

    Дальше моя стратегия поменялась. Я должен был набрать опыт собеседований. Не важно, нравится ли мне компания или нет — я всегда откликался на все предложения разговоров от HR. Я внимательно изучал компанию, стек — по каждому непонятному слову сразу смотрел подробное руководство на Youtube (выбирал длинные ролики и скорость 1.75х). И с каждым разом отвечал все лучше. Попадались хитрые вопросы, попадались скучные, но почти всегда я проходил стадию HR на ура, а вот технические собеседования были успешны в 50% случаев.

    Что стоит знать:

    • напиши свой декоратор
    • напиши свой декоратор с параметрами
    • паттерны проектирования и где ты их применял
    • SOLID, ACID, принципы ООП
    • Нормализация БД и вообще вопросов на построение запроса к БД много, в основном на Postgres
    • Базовые алгоритмы и их сложность
    • Структуры данных
    • Индексы и устройство хешей в общем виде
    • Контекстный менеджер with
    • REST/OpenAPI/принципы проектирования, SOAP
    • Очереди Kafka и RabbitMQ
    • AWS будет плюсом
    • Redis
    • Celery
    • Асинхронное программирование и принцип работы GIL
    • Микросервисы
    • Рекурсия
    • MongoDB

    Два типа собеседований

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

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

    Собеседование в EPAM

    Так как компания ЕПАМ большая и ей уже 25 лет — то и процессы там гораздо лучше отлажены, в том числе собеседования. Это без преувеличения мой лучший опыт за весь период поиска работы. Ребята задавали интересные вопросы, где я что-то упускал — рассказывали, давали возможность раскрыться. Суммарно 5 часов технических собеседований, я был уставший, но довольный. Я рассказал свой опыт, я позиционировал себя как специалиста, который делает горизонтальный переход, и претендовал на должность Мидл-разработчика. Как я понял — позиционирование и вера в себя — это самые важные вещи после знаний.

    И вот я получил оффер от ЕПАМ, и сразу на достойную сумму. Не принимая его сразу, я сказал, что мне нужно две недели на принятие решения и продолжил изучать рынок. Теперь была задана планка, и я хотел перепроверить — точно ли я правильно выбрал ЕПАМ.

    Еще 10 собеседований, в том числе 3 технических, и я принял решение — я иду в ЕПАМ. Я пытался следовать советам из статей про то, как принимаются офферы и сколько надо выждать, но в итоге все равно договорился с HR о звонке и сообщил о своих намерениях. Всего процесс трудоустройства занял около трех месяцев, и это были самые насыщенные на учебу месяцы.

    Пример резюме

    Примеры моих резюме, если вам интересно как я себя позиционировал:

    Рекомендации от менторов

    Обязательно собирайте рекомендации, они важны для принятия решения!

  • No code. Создаем программные продукты в визуальных редакторах.

    No code. Создаем программные продукты в визуальных редакторах.

    В своих проектах я всегда придерживался философии «как можно меньше правок в фреймворк». Основная задача была сделать проект автообновляемым и не теряющим своей актуальности на протяжении долгого времени. Как я пришел к этой философии?

    Почему No или Less Code?

    Свои самые первые интернет-магазины я запускал в 2009-2010 годах, тогда не было еще того разнообразия готовых фреймворков и плагинов к ним. Был вордпресс, были скрипты интернет-магазинов с самоустановкой — укажи данные базы и проект начинает свое MVP-путешествие. Что происходило дальше? Если нужен новый заголовок, я лез в код и менял заголовок. Когда нужно было поставить какое-то условие в шаблоне — лез в Smarty и делал условие. Когда менялась логика бизнеса — я копал еще глубже и менял уже PHP-файлы. И вылилось это все в невозможность обновления продукта. А когда у вас успешный сайт, вам нужны новые функции для сохранения бизнеса в игре, и получить вы их можете только сделав еще больше правок в коде, или, как мы их называли всегда, костылей.

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

    Концепция самообновляемости сайта

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

    No code сервисы

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

    Рассмотрим некоторые из no code сервисов:

    Скриншот из видео сверху (оригинал недоступен, сайт не работает):

    webflow.com

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

    editorx.com

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

    bravostudio.app

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

    supernova.io

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

    Какие еще сервисы?

    Обратите внимание на Notion (рич-блокнот с коллаборацией), Anima (ожившие прототипы), Play (дизайн мобильных приложений прямо на мобильных приложениях) и Airtable (прекрасная смесь экселя и баз данных).

  • Как установить psycopg2-binary на Apple Silicon M1 Big Sur (в том числе в Docker)

    Как установить psycopg2-binary на Apple Silicon M1 Big Sur (в том числе в Docker)

    Миграция на чип М1 от Apple прошла для меня практически бесшовно. Встретилась лишь одна проблема — с установкой psycopg2-binary, что является утилитой, с помощью которой Django Framework подключается к PostgreSQL.

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

    Проблема 1: Не устанавливается psycopg2-binary в Docker-контейнере через Dockerfile или docker-compose (MacOS Big Sur M1)


    Здесь самым простым способом будет отказаться от урезанных образов наподобие alpine или slim. Просто используйте самый обычный Python 3.9:

    FROM python:3.9

    После этого контейнеры поднимутся именно так, как вы их задумывали. Здесь, видимо, проблема в том, что архитектура чипа M1 пока неизвестна и не так популярна. В скором времени эту проблему наверняка исправят.

    Проблема 2: Не устанавливается psycopg2-binary в MacOS Big Sur M1

    Возможные выводы ошибки:

    $ pip install psycopg2-binary
    Collecting psycopg2-binary
      Using cached psycopg2-binary-2.8.6.tar.gz (384 kB)
        ERROR: Command errored out with exit status 1:

    И дальше длинный трейс ошибки. Как победить? Если вы только купили свой мак, скорее всего у вас не установлен пакет brew и вам нужно сделать следующие шаги:

    1. Установите brew https://brew.sh/
    2. Чтобы он запускался без указания полного пути вам нужно добавить этот путь (к многим другим путям) в переменную PATH. Не пугайтесь, это страшно лишь по началу. В unix-подобных системах терминал умеет запускать приложения только если он знает где их искать. А brew установилась в хитрую папку и наш терминал просто не знает этого пути. Пока не знает. Давайте его научим, и рекомендую запомнить этот трюк, он часто нужен (и не только на маках, но и на виндус). На вашем маке в качестве терминала по умолчанию стоит ZSH. Вам нужно создать файл в домашней директории (если там его еще нет, проверить можно командой ls -la) с названием .zshrc (именно с точкой в начале) и положить туда одну строчку:
    export PATH=/opt/homebrew/bin:$PATH

    Перезапустите терминал, теперь у вас есть brew.

    3. Дальше проще, установите сам пакет с Постгресом

    brew install postgresql

    4. Теперь установите SSL, без него не заработает

    brew link openssl

    5. Пропишите в наш созданный в пункте 2 файл еще один путь:

    echo 'export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

    6. И финальный аккорд! Устанавливаем psycopg2-binary с необходимыми переменными окружения (внимание, это все одна команда, просто очень длинная):

    LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib" CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include" PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig" pip install psycopg2-binary

    Если на каком-то этапе что-то пошло не так, попробуйте изучить эту тему.

  • Список технологий для изучения

    Список технологий для изучения

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

    1. Как минимум поверхностное понимание работы JavaScript
    2. Если учить React, то сфокусироваться на практическом применении, а также разобраться с фреймворками на его основе, например next.js, который позволяет обойтись без бэкенда вовсе
    3. Ознакомиться с технологиями публикации сайтов прямо из репозитория, например Netfly
    4. Понять JAMstack, так как он очень популярен и удобен
    5. Взять на вооружение технологию htmx, которая позволяет сделать отзывчивый интерактивный сайт без JS, только на питоне
    6. Узнать больше про безсерверную архитектуру на основе AWS и Lambdas (причем докер образы будут прямо в Лямбде). В питоне это позволяет сделать утилита Zappa

    Также общий набор рекомендаций для софт-скиллов:

    1. Писать хорошие коммиты
    2. Уметь делать CI/CD
    3. Писать тесты для своих проектов на гитхабе
    4. Проявлять активность на гитхабе в целом
    5. Писать красивый PEP8 код
    6. Писать статьи в блог
    7. Может, даже вести подкаст
    8. Помогать с опен-сорс проектами

    И это ведь только начало. Впереди столько интересных технологий!

  • Bulma для всех, кто боится Bootstrap

    Bulma для всех, кто боится Bootstrap

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

    И вот тут на помощь пришла Bulma. Это по сути своей тот же Bootstrap, только с человеческими названиями классов. Хотите кнопку? Класс называется button. Хотите колонки? Пишите columns, а внутри для каждой колонки column. Считаю, что Бульму надо включить обязательное изучение во всех курсах бэкендеров.

    Обязательно посмотрите их вводное видео:

  • Закончил курс Яндекс.Практикума Python-разработчик

    Закончил курс Яндекс.Практикума Python-разработчик

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

    Базовый синтаксис Питона я знал еще до Яндекс.Практикума, заканчивал курсы от Гугла. Поэтому первая часть далась мне относительно легко и я наивно полагал, что так и продолжится. Но нет.

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

    Третья часть была по API. На мой взгляд, эта тема наравне с вводной частью по сложности. А вот интересности ей не занимать. Подключаться к внешним сервисам, получать информацию, обрабатывать ее, делать ботов — мечта, а не профессия.

    Дальше, к сожалению, не все так весело было. Алгоритмы и структуры данных в курсе были поданы очень вяло, а теория была совершенно не применима в практике. Объясняют рекурсию, дают задачу, ты решаешь ее рекурсией и не можешь уложиться в заданные параметры по памяти и времени. В итоге большинство задач решались лишь определенными алгоритмами и похоже это было скорее на олимпиаду, чем на обучение. После сдачи этой части я прочел самостоятельно книгу «Грокаем алгоритмы» и понял гораздо больше, чем дал Практикум. Говорят, эти главы переписывают и даже уже переписали, но факт остается фактом — часть слабая.

    Пятая глава обучения началась очень хорошо, заинтересовала серверами и докером, но в какой-то момент у авторов кончились силы и дальше пошло лишь «вставьте это в командную строку» и «смотрите, все получилось». Почему получилось? Что за параметры у команды были? Здесь у меня произошел переломный момент. Я начал докапываться до сути. Я составил список вопросов, пришел на вебинар и целый час выяснял у наставника как это все работает. Получил ответы, пошел их применять и опять начались несостыковки. Но тема докера меня всегда привлекала, и я решил разобраться. Так на этом сайте родилась серия статей про деплой, я прочитал всю документацию, придумал несколько способов сделать деплой, с каждой статьей улучшал свои познания и в какой-то момент постиг дзен. Докер стал для меня настолько родным, что я начал с удовольствием помогать однокурсникам и объяснять им, почему и как именно у них не работали проекты. Сложная глава, но по ней у меня самые лучшие знания остались.

    Шестая глава — дипломный проект. По началу все казалось достаточно простым, но потом выяснилось, что предоставленный нам фронтент был написан без DRY подхода — там постоянно и везде повторялся один и тот же код не только в HTML, но и в JavaScript и CSS. Это невероятно усложнило понимание и так не самой ясной для нас технологии. А на этапе оживления формы я вообще был готов сдаться — нас не просто учили другому, нам даже банально не объяснили как объект формы выглядит изнутри. Какое-то невероятное усилие и обратный инжиниринг все-таки помогли мне справиться с формой, дальше уже было легче. Но я твердо понял, что на факультет фронтента Практикума я не пойду, если там допустили такое.

    Сейчас я сдал дипломный проект и жду выпускного. Безусловно, я безумно рад, что не сдался, что 9 месяцев был на одной волне со своим курсом в сто с лишним человек. Яндекс.Практикум помог с пониманием маршрута по знаниям и в половине случаев эти знания дал. В другой половине — помогла документация и одногруппники.

    Формат вебинаров мне показался абсолютно бестолковым. Любую тему можно в два-четыре раза быстрее познать на Youtube, чем от наставников, да и буду честен — речь у них плохо поставлена, много слов-паразитов и в основном не очень адекватная подготовка к занятию. Вторую половину курса я вебинары не смотрел.

    Чего не хватает — так это списка литературы, а точнее ссылок на нужную документацию к заданиям, на видеоуроки, на статьи на тему, да даже на Stackoverflow. Понятно, что нужно учиться самому искать, но при объяснении темы нужно дать максимально адекватный перечень дополнительных материалов.

    Я долго думал, чем я займусь дальше. Многие уже ищут работу, но я решил познать как можно больше про технологии фронтенда, про JavaScript и фреймворки, основанные на нем. А также знакомый разработчик дал мне список технологий, которые нужно знать и понимать в современном мире. О них я расскажу в будущих статьях на этом сайте, подписывайтесь на обновления.