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

Мотивация для развития

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

Я не исключение, и первая попытка не увенчалась успехом.

На тот момент я уже работал полтора года дежурным linux админом, умел писать скрипты на Bash, в организации шел активный переход с оркестратора Puppet на Ansible.

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

Дальше появляется задача достаточно серьезного уровня - написать скрипт, для выгрузки и парсинга большого массива данных для автогенерируемого дашборда в Grafana. Он был написан на Bash-е, размером в ~350 строк. Выглядел он ужасно. Как его будет поддерживать другой специалист - непонятно. Мне было стыдно, но оно работало и помогало бизнесу.

Итак, я получил мотивацию.

Изучение Python

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

Изучение началось с того, что я купил курс по Python: Basic за 5 000 рублей. Он состоял из следующих тем:

  • Типы данных;

  • Ветвление;

  • Циклы;

  • Работа с файлами;

  • Модули и библиотеки;

  • ООП;

  • Исключения и немного инфы о работе с RESTful API.

Да, все темы были сжаты в рамках курса, но это была моя личная точка старта. Этой инфы за пять тысяч рублей мне хватило для того, чтобы научиться писать красивые скрипты и начать изучать программирование в стиле ООП. До этого я умел только в линейное программирование на уровне Bash скриптов.

Эта точка старта открыла огромное количество дверей. Я научился писать: модули для Ansible, большие скрипты для автоматизации действий завязанных с API интерфейсами, полезные AWS Lambda функции, которые помогают защищать наши проекты от DDoS атак, небольших чат ботов и все в таком духе.

Одна лишь мысль о том, что с помощью Python я могу "фактически всё", зажигала моё желание сделать что-то ещё. Я читал скрипты наших DevOps инженеров, просил их же о ревью кода, спрашивал очень много всего, что связано с питоном (казалось, что я уже всех достал), учился применять практики ООП, открыл для себя портал Codewars. Кстати, благодаря Codewars узнал достаточное большое методов для парсинга массивов данных и различных функций, всем рекомендую.

Ansible перестал для меня быть непонятной штукой, которую нужно 24\7 штудировать по документации, а фильтры jinja2 стали моим лучшим другом.

Ранее мой код выглядел так, словно его писали индусы за еду. Примера ради, вырезка кода, который получает id последнего полученного письма и удаляет его.

Python код за еду
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mail@gmail.com', 'Psw')

mail.select("inbox")
result, data = mail.search(None, "ALL")

ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]

result, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
raw_email_string = raw_email.decode('utf-8')

email_message = email.message_from_string(raw_email_string)

mail.store(latest_email_id, '+FLAGS', '\\Deleted')
mail.expunge()

Для примера вырезка из кода последних скриптов. Он генерирует список каких-то нужных данных из ответа на запрос к Elasticsearch и умеет писать prometheus like метрики в случае проблем:

Python код за еду и деньги
def comparison(targets, field, target):
    req_result = req(field=field, target=target)
    if req_result.status_code == 200:
        try:
            elc_json = req_result.json()['some']['key']['from_dict']

            for item in elc_json:
                elastic_hosts.append(item["key"])

            res = [x for x in targets if x not in elastic_hosts]

            for name in res:
                write_metric(hostname=name)
        except:
            write_metric(error_msg="Message", code=3)
            move_file()
            exit(1)
    else:
       write_metric(error_msg="Error message", code=4)
       move_file()
       exit(1)

    elastic_hosts.clear()

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

Используешь Amazon? Вот тебе boto3. Используешь Cloudflare? Вот тебе библиотека cloudflare. Используешь Hetzner? Вот тебе hcloud.

Простой синтаксис дает возможность легко читать код и поддерживать его.

Возможность автоматизировать рутинные процессы - это отдельный вид блаженства.

Что мне это дало?

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

Во-вторых, расширился спектр задач, которые я могу брать и выполнять. Автоматизация процессов, улучшение инфраструктуры, так как в современном мире любая организация стремится к модели Infrastructure as a Code.

В-третьих, программирование(не только на Python) - это прямой путь к DevOps практикам и методологии в целом.

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

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

Если открыть hh.ru, запросить вакансии "Системный администратор Linux"(middle), в навыки которого обычно не входят K8s, CI/CD, обязательные навыки программирования, Docker swarm и тому подобные вещи, вилка ЗП обычно от 110 000 до 150 000. Возьмем в расчет так же то, что на 150 можно выйти, если хорошо пройти собеседование.

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

В этом году моя схема работала также, ревью + собеседования. Но каково же было мое удивление, когда я проходил некоторые собеседования, мягко говоря посредственно, но исключительно из-за умения писать на Python некоторые работодатели предлагали перейти на ЗП выше 150к плюс обучение. Впервые в жизни я из 10 пройденных собеседований получил 3 крайне привлекательных письменных оффера.

Итоги

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

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

Сильным и красивым инженером я ещё не стал, но у меня всё впереди. Я верю в себя и своё желание учить что-то новое. Спасибо за уделенное время, надеюсь история о моём опыте кому-то пригодится.

P.S. На самом деле, Python можно заменить и другим языком. Например, Go. Но про это я уже смогу написать статью только тогда, когда буду знать, о чем я пишу ¯\_(ツ)_/¯