Сколько у вас ушло времени чтобы стать python junior developer?
Пришел python\django juniorом с улицы. За немалое время работы сожрал пуд соли. Самое большое разочарование — все ищут питонистов для быстрой разработки (порог вхождения ниже наверное только у php) и берут джунов на не джуниорские задачи. Я за первый месяц работы что только не писал, от системы скидок для интернет магазинов на Django, до админки системы курьерской доставки интернет-ритейлера написаной на связке Flusk+Vue+Jquery которую до меня писал десяток человек и все бросали.
Никто практически никогда не готов тебя учить, если на более «мейнстримных» языках ты получаешь более низкий оклад, но больший штат серьезных девов с многолетним опытом и высокий шанс того что за тобой будут «присматривать», то попадая в компанию которая пишет на python — ты сам по себе. Потому что питонистов тупо мало и стоят они дорого, никто не хочет тратить их время на всякие кодревью и митапы.
Не согласен с оратором выше, джун это просто человек способный писать работающий код. Как он это делает и что этот код из себя представляет — вопрос второй. Я пишу нереальные костыли и ничего, заказчик доволен, начальнику пофигу, зп на карточке.
- Вконтакте
- Вконтакте


По литературе для начинающих и не только отвечал здесь. Далее по срокам вкатывания.
Если для собственных web-разработок, то python нормальный вариант. Можно довольно безболезненно вкатиться, сформировать грамотный фундамент у себя в голове, довольно быстро создать прототип и т.д.
Если намерен идти наемным питонистом-джуниором, то тут может постигнуть разочарование:
1. На реальном рынке python/django — самая невостребованная web-технология, как в СНГ, так и на западе, в сравнении с php/js/ruby/.net и т.д.
2. Полистай вакансии python-джуниоров — там либо требования к годам опыта, либо требования других языков. В общем, не джуниорские требования в основном.
3. В большинстве вакансий python упоминается либо в качестве доп.языка («будет плюсом»), либо в качестве бэкграунда для дальнейшего переката на Go, либо в качестве технологии для разного рода аналитиков.
4. На фрилансе также не густо в сравнении с php/js/ruby. Опыт/порфолио по web-python там сложновато наработать (гораздо больший спрос на всякие скрипты автоматизации, парсеры и т.д.).
5. Если ты не из столицы (Москва/Питер/Киев/Минск), то про вакансии python-джуниора вообще забудь, в регионах они если и встречаются, то в качестве исключений, подтверждающих правило. Открыл сейчас HH — по моему миллионнику ни одной.
К чему я это всё. типичный путь в python-разработку лежит через условные «5 лет на php» у подавляющего большинства. Python-проекты также подворачиваются волей случая чаще всего. Естественно, эти люди будут отвечать, что от «hello world» до реальной разработки у них ушло от недели до месяца. но тебя это полезной смысловой нагрузки не принесет, кроме иллюзий.
В среднем, на любой web-технологии от знакомства до уверенного джуниора проходит не менее 1.5 лет ежедневного практического (!) обучения. Т.к. уверенный джуниор — тот, кто не менее полугода трудится в реальном командном проекте и показывает результаты, то с python по вышеобозначенным причинам этот срок может увеличиться.
Программирование на Python: особенности обучения, перспективы, ситуация на рынке труда

Python входит в число самых популярных языков программирования, который считается одним из самых простых для изучения, при этом перспективных на рынке. Рассказываем, как выучить Пайтон, что на нем пишут и сколько получают Python-разработчики.
Вы читаете обновленную и улучшенную версию нашей старой статьи
Почему Python — хороший вариант для начинающих
Python — высокоуровневый язык программирования общего назначения, который относится к интерпретируемым языкам. То есть написанный на Python код интерпретируется в момент обращения программой-интерпретатором без предварительной компиляции.
Создатель Python — нидерландский инженер Гвидо ван Россум, известный энтузиаст разработки, который сейчас работает в Microsoft. Язык программирования «пайтон» — сайд-проект ван Россума. Гвидо считал существующие языки сложными для понимания и изучения, поэтому начал работать над собственным проектом. Ван Россум планировал сделать одновременно простой и мощный язык, и так в 1991 году он представил Python.
Читайте также: Как создатель Python Гвидо ван Россум устроился в Microsoft и теперь работает над развитием CPython
«Пайтон» — мультипарадигмальный язык программирования. Он поддерживает объектно-ориентированный и структурный подходы, функциональное и аспектно-ориентированное программирование. В Python используется динамическая типизация. То есть тип переменной определяется в момент присваивания значения. При изменении значения может меняться тип данных.
Синтаксис Python простой и понятный для людей. В этом языке для выделения блоков кода применяются отступы, а не скобки. Пример кода ниже.
Философия Python поощряет простоту, эстетичность кода и отношение к работе, которое проще всего выразить английским словом fun — забава, шутка. Это частично описано в знаменитом сборнике афоризмов Zen of Python (Дзен «пайтона»).
Где используют Python: веб-разработка
В веб-разработке Python применяется для серверного программирования. Питонисты работают с бэкендом веб-приложений, используя нативный Python или популярные фреймворки, например, Django, Pyramid или Flask. «Пайтон» одинаково удобно использовать как для создания прототипов или небольших приложений, так и для больших и масштабируемых проектов, например, порталов, веб-сервисов, интернет-магазинов.
Попробуйте пройти бесплатный курс по основам Python: На Хекслете есть полноценная профессия «Python-разработчик». Но прежде чем проходить ее, попробуйте на себе синтаксис Python и узнайте все основные концепции в программировании в нашем бесплатном курсе по основам Пайтона
Где используют Python: Machine Learning и AI на Python
Python — один из основных языков программирования, которые применяют в области машинного обучения и искусственного интеллекта (Machine Learning и Artificial Intelligence). Например, библиотека с открытым исходным кодом TensorFlow, созданная исследовательской командой Google Brain, написана с использованием Python. Google использует эту библиотеку для программирования и обучения нейронных сетей, которые используются для изучения искусственного интеллекта.
Ещё одна известная библиотека — scikit-learn. Она написана на Python с включениями Cython — статически типизированного компилируемого подмножества Python. Библиотека scikit-learn применяется в исследованиях искусственного интеллекта, для обучения инженеров machine learning, для управления промышленными системами.
Использование Python для работы с Big Data
В Python есть несколько мощных и популярных библиотек, которые предназначены для работы с большими данными: анализа, визуализации, прогнозирования тенденций. Например, библиотека с открытым исходным кодом SciPy включает модули для математических, инженерных и научных вычислений. Matplotlib — одна из самых популярных библиотек для визуализации данных. Библиотека PANDAS применяется для анализа информации.
Это не все области применения Python. Этот язык используют для создания десктопных приложений, разработки игр и 3D-графики, программ для обработки аудио, видео и изображений и так далее.
Рейтинг и перспективы Python
Один из способов оценки популярности языка программирования — индекс TIOBE. Он рассчитывается на основе количества поисковых запросов в Google и других поисковиках. Учитываются запросы, включающие название языков программирования.
Согласно индексу TIOBE, в конце 2022 года Python занимает первое место в списке самых популярных языков программирования. Он опережает С, JavaScript, PHP, Swift и другие распространённые языки программирования.
В рейтинге GitHub Octoverse за 2022 год Python занимает второе место, уступая только JavaScript. Рейтинг Github Octoverse отражает популярность языка среди пользователей GitHub.
Python на рынке труда: зарплаты, вакансии
По данным компании «Хабр Карьера» на первое полугодие 2022 года, медианная зарплата Python-разработчиков составляет 144 тыс. рублей в месяц. Медианные зарплаты программистов на Java, Swift и Scala выше, чем у программистов на Python.
В мире в среднем Python-разработчики могут рассчитывать на зарплату около $100 тыс. в год до вычетов налогов.
Python в качестве первого языка для начинающих: сложно ли изучать
Чтобы ответить на этот вопрос, нужно вернуться к истории создания и философии Python. Как отмечалось выше, разработчик языка Гвидо ван Россум захотел создать «пайтон», так как другие языки казались ему слишком сложными и непонятными. Ван Россуму удалось сделать язык, который приносит удовольствие во время обучения и работы.
При выборе первого языка программирования главным преимуществом Python считается простой синтаксис. Среди недостатков можно отметить сложности, которые возникают у начинающих программистов при переходе на языки с более сложным синтаксисом.
Перспективы Python: мнение экспертов
Григорий Петров, DevRel в Evrone: на питонистов сейчас есть огромный спрос, так как этих специалистов меньше, чем открытых вакансий

Python — лучший язык для обучения программированию. Это язык программирования общего назначения. Создавался как простой язык для людей. Есть баланс между сложностью изучения и сюрпризами, с которыми сталкиваются программисты при работе с языком.
У JavaScript синтаксис лучше, чем у Python. Но в JS есть сюрпризы, например, this или приведение типов типизация. Python не взрывает мозг сюрпризами, он сбалансирован. К тому же, на нём можно делать практически всё, так как это язык общего назначения.
О будущем Python. У Python сильные позиции в серверной разработке, AI, Big Data, в программировании в сфере обучения и науки. В веб-разработке Python востребован в бэкенд части-разработке. Фронтенд скорее всего не для Python, так как в этой нише царствует JavaScript.
В целом в тех нишах, где Python активно используется, этот язык вряд ли уступит позиции другим языкам. То есть он останется востребованным в обозримой перспективе.
О спросе на джунов. На питонистов сейчас есть огромный спрос, так как этих специалистов меньше, чем открытых вакансий. По деньгам фронтенд разработка принесет чуть больше, но фронтенд изучать сложнее. Ведь не зря хорошим фронтендерам хорошо платят.
При этом если учиться по 2-3 часа в день на Python-разработку, то в течение нескольких месяцев уже можно претендовать на позицию интерна. Ему обычно нужно ещё полгода, чтобы стать джуниором. Но, повторюсь, всё зависит от человека.
Никита Левонович, техлид в «Квестоделы»: «Пайтон» активно развивается, о чём свидетельствует сокращение времени релизов новых версий с восемнадцати до девяти месяцев

О будущем Пайтона. Python в настоящее время переживает пик своей популярности, на нём разрабатывают во множестве компаний, на конференции и митапы по данному языку собирается сотни разработчиков. Всё это делает язык «пайтон» не только востребованным, но и простым в изучении. В связи с этим язык «пайтон» стоит изучать.
Вообще, перспективы языка Python отличные, в данный момент он является вторым лучшим языком для любой задачи. «Пайтон» активно развивается, о чем свидетельствует сокращение времени релизов новых версий с восемнадцати до девяти месяцев.
Это примерно столько, сколько нужно времени для изучения базовых основ Python. Хотя все люди разные и для освоения одних и тех же навыков им нужно разное время. А самое главное — на рынке нет единых требований к джуниору. В связи с этим срок обучения может колебаться от 3 месяцев до года.
Николай Марков, Principal Architect в компании Aligned Research Group: без работы толковый питонист точно не останется

Зачем разработчики используют Python. Python является одним из самых популярных языков общего назначения. Это значит, что на нём можно писать практически всё — от веб-приложений до серьезных низкоуровневых системных штук. Так уж получилось, что у меня есть несколько студентов, род деятельности которых практически никак не связан с программированием, но им захотелось изучать Python. Например, чтобы автоматизировать какие-то ежедневные рутинные задачи, или чтобы лучше понимать исследования, которые проводит аналитический отдел в их компании. Порог вхождения не очень высок, что и позволяет добиться значимых результатов в довольно короткие сроки, а видеть результаты своего труда всегда приятно.
Несмотря на то, что язык существует довольно давно, он активно развивается, вбирая в себя всё новые возможности и щеголяя гигантским набором модулей расширения. Кроме того, довольно большое количество разных курсов, начиная от низкоуровневой работы с сетью и кончая Data Science, переехали с других языков на Python в новых версиях. Это можно заметить, например, по проектам на Coursera.
Пусть даже Python и не является явным лидером в каких-то конкретных областях, обычно он достаточно хорош, чтобы решать задачи практически в любой предметной области. И на горизонте навскидку я не могу назвать других языков, которые были бы настолько универсальны.
О будущем Python. Лично мне кажется, что Python был и будет востребован как язык для обучения, прототипирования и решения базовых бизнес-задач. И это несмотря на то, что в узком применении зачастую имеет смысл переключиться на более специализированные инструменты. Всё потому, что он дает базу, которая позволяет регулировать глубину погружения в предмет. Инженер может пойти глубже и изучать более узкую сферу, а, скажем, учёному хватит Python в качестве подручного инструмента для основных задач. А дети в школах, например, смогут после нескольких уроков Python создавать вполне рабочие проекты, например, в IoT и решении математических задач. Хорошая замена инженерному калькулятору на занятиях, правда?
Как стать джуниор Python-разработчиком. Понятие «джуниора» весьма размыто и сильно меняется от компании к компании, или даже между разными командами внутри одного бизнеса. Тем не менее общая тенденция такова, что если вы смогли пройти собеседование на подобную позицию, пусть даже не имея серьезного опыта, то дальше начинается серьезное обучение на реальных проектах. Это гораздо полезнее, чем зубрёжка теории алгоритмов или попытки на коленке с минимальными знаниями собрать продающийся продукт.
Плюс я искренне верю, что вменяемый менеджер выделит такому «джуниору» время и возможность на самообразование внутри компании, включая бесплатные курсы под присмотром с code review. Так что совет тут простой — читайте требования в вакансиях, соберите на коленке пару прототипов, а дальше — вперёд, по собеседованиям!
Никита Соболев, CEO wemake.services: мы прежде всего просто разработчики, инструмент не так важен

В чем особенность Python. Python — самый простой и понятный язык из всех в плане синтаксиса и концепций. В нём минимальное количество магии и неявных моментов. В нём уже заложены несколько парадигм: можно писать в ООП стиле, можно в функциональном. Можно явно проставлять типы в аннотациях, можно сделать их неявными. Учить его приятно и максимально просто. Мне кажется, что «пайтон» — лучший язык, чтобы учиться. И нет, не C (чтобы узнать как работает память!), а «пайтон».
Изменения в языке. Мне кажется, что язык выбрал неправильную стратегию развития. Его реверансы в стороны «асинхронщины» закончились печально. Просто уже столько лет, а оно так и не заработало как нужно: примитивы для асинхронности так и остались на уровне детского сада, а батареек так и не завезли. Более того, саму красоту синтаксиса языка начинают уродовать чуждыми концепциями: f-строки, оператор моржа (он ломает столько всего!). Сама платформа развивается очень медленно и работает также. Я бы дополнительно обратил внимание на Elixir, Rust, F#, и возможно Crystal с Nim.
Перспективы Python-разработчиков. Я вообще не люблю понятие «джанго-разработчик» или «пайтон-разработчик». Мы прежде всего просто разработчики. Инструмент не так важен. Для разных задач нужны разные инструменты. Бэкенд пишут на одном из множества языков, фронт на тайпскрипте (или elm'е!), башскрипты для разного, Elixir для частей с высокой нагрузкой, Rust и Haskell — для души. А есть еще куча всего интересного! Резюме: хорошие разработчики всегда будут нужны, «пайтоны» приходят и уходят.
Сколько нужно, чтобы стать Python-разработчиком. По-разному. Я бы сказал, от года до двух. Зависит от начального уровня, наличия фундаментального образования, без которого в некоторые сферы вход вообще закрыт, знакомства с процессом разработки в целом, мотивации и таланта. У меня ушел где-то год фултайм учёбы + работы.
Заключение: Python — лучший язык для обучения с хорошими перспективами на рынке
Эксперты называют Python если не лучшим, то одним из лучших языков для изучения программирования. Простой синтаксис делает этот язык удобным для восприятия и понятным. Разработчики со знанием Python востребованы на рынке труда. Они работают в сфере веб-разработки, machine learning и Data Science. Выводы делайте самостоятельно. А если у вас остались вопросы по целесообразности изучения «пайтон», пишите их в комментариях.
Станьте профессиональным Python-разработчиком с нуля за 10 месяцев На Хекслете есть профессия «Python-разработчик». Пройдите ее, чтобы изучить самый популярный язык программирования, освоить его фреймворки и создать большое портфолио с проектами на GitHub. И потом устроиться на свою первую работу программистом
Как стать python-разработчиком

Ежегодно Python оказывается в тройке лидеров наиболее востребованных языков программирования. По данным издания InformationWeek , в 2021 году он занял первое место в рейтинге.
Рассказываем, что должен уметь python-разработчик , как им стать и какие навыки нужны, чтобы попасть в профессию.
Кто такой python-разработчик и чем он занимается
Python-разработчик создаёт программы, игры и веб-сайты, занимается их технической поддержкой и дальнейшим развитием готового продукта. Задача программиста на питоне — сделать так, чтобы сервисы верно понимали запросы, а сайты быстро реагировали на действия пользователей.
Универсальный и простой в изучении Python даёт возможность специалисту выбрать и развиваться в одном из множества направлений, которые ему интересны.
Вот в каких сферах используют этот язык:
- Машинное обучение. Язык активно используется в машинном обучении из-за его простоты, множества библиотек, фреймворков и производительности при обработке данных. На Python пишут рекомендательные и поисковые системы вроде яндекса.
- Искусственный интеллект . Это ещё одно популярное направление работы python- разработчика. Так библиотекой TensorFlow активно пользуется компания Google для обучения нейронных сетей и искусственного интеллекта.
- Работа с большими данными . Python часто используют специалисты больших данных. У языка есть несколько мощных и производительных библиотек, которые программисты могут применять для создания визуализации, анализа и прогнозирования.
- Веб-разработка. Именно на питоне часто пишут серверную часть сайта и парсеры — сервисы или скрипты по сбору данных с сайтов.
- Разработка игр . Python используют в разработке игр. Самую популярную игру-симулятор The Sims написали как раз на питоне. Для разработки игр существует даже «игровая библиотека» Pygame, она включает инструменты для работы со звуком, графикой и анимацией.
- Мобильная и десктопная разработка . Среди десктопных приложений, на питоне работает популярный графический редактор Gimp.
Python несложно выучить за несколько месяцев, поэтому он подходит для новичков. А главное — на нём можно создать что угодно: от маленького приложения до искусственного интеллекта.
Что нужно знать , чтобы стать python- разработчиком
Список того, что должен знать python-разработчик обычно зависит от конкретной сферы деятельности и требований к должности. И всё же, существует минимально необходимый список навыков для начинающего специалиста.
- синтаксис языка программирования — важно выучить выражения, конструкции, функции и циклы. Также важно понимать, как работают и чем отличаются друг от друга типы и структуры данных;
- базы данных — хранилище информации и набор данных, которые специалист будет использовать в работе;
- алгоритмы и структуры данных — последовательности совершаемых действий. Из алгоритмов состоят структуры данных — способы хранения и организации данных для эффективного решения задач;
- библиотеки — набор функций и модулей, которые помогают пользоваться готовыми решениями для специфичных задач. На знание библиотек чаще всего обращают внимание работодатели при приёме на работу;
- фреймворки — программные платформы для работы, на старте будет достаточно знания всего двух главных фреймворков — Flask и Django;
- понимание принципа построения API сайтов и HTTP-протокола — позволяет эффективно автоматизировать работу с данными и выполнять некоторые функции программы, даже не зная, как это работает;
- английский язык — знание языка хотя бы на разговорном уровне значительно упрощает изучение синтаксиса Python, чтение документации и статей;
- математика — пригодится, если вы выберете специальность, связанную с нейронными сетями, анализом данных, моделированием и статистикой. В остальном можно обойтись курсом школьной программы и доучивая необходимые области во время работы.
Софт-скилы. Кроме профессиональных знаний, разработчик должен иметь так называемые «гибкие навыки»: уметь общаться с командой, планировать рабочие процессы, креативно мыслить и быть способным к постоянному самообучению. Современный специалист подобен швейцарскому ножу — он должен уметь немного больше, чем от него требуется в вакансии. Софт-скилы помогут упростить и оптимизировать свою работу и сделать её комфортнее — и все эти навыки можно и нужно тренировать.
С чего начать
Несмотря на то, что Python — простой в изучении язык программирования, чтобы в нём разобраться, придётся потратить время. Начните с теории и постепенно переходите к практике.
Шаг 1: изучение синтаксиса. Синтаксис языка несложный — если вы знаете английский, сможете быстро разобраться. Первым делом необходимо изучить основы Python — переменные, циклы, операторы, функции. Для этого необходимо читать специализированную литературу, смотреть видеоролики и читать официальные сайты с документацией.
Шаг 2: настроить среду разработки. Программисты используют для этих целей IDE — интегрированную среду разработки. Это программы, в которых разработчик пишет код, а они подсвечивают и исправляют ошибки, выдают подсказки. Одна из популярных таких программ для разработки на питоне — PyCharm.
Шаг 3: практика. В начале пути можно пользоваться исходными кодами, которые выкладывают в открытый доступ другие разработчики — читать их, находить закономерности, пытаться подражать им. Чем больше практики — тем лучше.
За сколько можно стать python-разработчиком
Учиться на Python- разработчика можно в вузе, на курсах или самостоятельно. От вашего выбора зависят сроки, которые вы потратите на обучение. Если у вас есть финансы и несколько свободных лет, а вы горите желанием изучить фундаментальные основы программирования, то высшее образование — для вас. Если хотите побыстрей начать работать — пройдите онлайн-курсы. Самообразование поможет на любом выбранном пути.
Высшее образование. Вуз помогает структурировать знания, и получить полный обзор профессии. Ещё один плюс — есть зарубежные стажировки. На другой чаше весов стоит высокий ценник на образование, необходимость подстраиваться под расписание и трата четырёх и более лет.
Онлайн-курсы. Наиболее популярный сегодня способ обучиться новой профессии, не выходя из дома. Программы обычно разрабатывают практикующие эксперты, поэтому даже на коротких курсах, вы получите актуальные и полезные для работы знания. В вузе упор делается на теорию, на курсах — на практику, после них вы всегда выйдете специалистом с несколькими проектами в портфолио. Обучение на курсах обычно длится от двух месяцев до года.
Популярные курсы по разработке на Python
Курс «Основы Python с 0» от ProductStar делает упор на практику, поэтому после каждой из 10 лекций вы получите тренировочные задания. За два месяца обучения вы разберётесь в синтаксисе языка, научитесь писать автоматические скрипты и формировать базы данных
Курс «Python для веб-разработки» от онлайн-университета SkillFactory за девять месяцев поможет вам пройти путь с нуля до универсального фулстек-разработчика. Помимо языка Python, вы изучите HTML, CSS и JavaScript. И сможете сами создавать сайты, приложения и сервисы
На курсе «Профессия Python-разработчик» от Skillbox вы за год научитесь писать программы разной сложности: от скриптов до чат-ботов, разберётесь в тестировании кода и даже сможете оптимизировать работу своих старых приложений
Как я стал python-разработчиком
«Я начал увлекаться программированием с детства. Уже в 10 лет я решал несложные задачи на языке Паскаль. Но меня, как и любого мальчика, интересовали игры. Я любил не только играть в них, но и интересовался их созданием. В 12 лет решил попробовать себя в геймдеве — создавал 2D-игры для компьютера. Постепенно стал изучать и язык Python
На первых парах учиться было нелегко — все эти фреймворки, алгоритмы и операторы усложнялись слабым знанием английского языка. Со временем стало проще, к языку можно быстро привыкнуть. Я создавал простые игры, но много
Однажды вышел на издателя игр в Испании, с которым завязалось тесное сотрудничество — мы проработали шесть лет. Я писал игры, он их покупал за несколько долларов. Для школьника тех времён это был неплохой постоянный доход, и мой первый серьёзный опыт в роли Python-разработчика
Окончив школу, я поступил в Институт информационных технологий интеллектуальных систем на IT-факультет. Дополнительно учился самостоятельно, по книгам и сайтам, поэтому получал образование только для «корочки». Сейчас работаю на фрилансе, есть постоянные заказчики и доход»
Инсаф Галиев, python-разработчик на фрилансе
Подведём итог
Python — дружелюбный для новичка язык. Он поможет освоиться в программировании и войти в IT. Иногда одних знаний питона достаточно, чтобы успешно развиваться в интересном для себя деле бэкенд-разработчику .
Чтобы стать python-разработчиком, недостаточно знать только теорию. Важно постоянно практиковаться и совершенствовать свои навыки. Первую работу можно получить, стажируюсь в компаниях за небольшую зарплату. Больше программ обучения для начинающих и опытных программистов смотрите в подборке лучших курсов Python .
Как быстро стать программистом на Питон. Путь автотестировщика
Итак, вы решили стать программистом. Мы недавно создали группу помощи начинающим, а сейчас покажем вам, что потребуется для того, чтобы примкнуть к лиге тестировщиков на Python. Пост писался двумя человеками, поэтому, возможно, получился слегка сумбурным.
Для начала несколько общих вопросов про тестирование на Python:
Что делает тестировщик?
Тестирует программы. Его задача — отловить все возможные ошибки на каждом этапе жизни программного продукта.
Сколько получает тестировщик?
Обычно тестировщики получают слегка меньше программистов, зарплаты начинаются от тридцати тысяч и заканчиваются далеко за сотней. Зависит от вашего опыта (читай должности — Junior, Middle,Senior, Expert), уровня зарплаты в компании и в вашем городе).
А есть ли куда расти?
Тестировщики и разработчики тестов имеют возможности роста, ведь разработка тестов — это тоже разработка программного продукта, зачастую не менее сложного, чем сам продукт.
Можно идти в разных направлениях — в тест-менеджмент, развивать экспертизу и становиться высокооплачиваемым специалистом (хотя и не управленцем), можно перейти в чистую разработку.
Хочется заметить, что не стоит думать, что тестирование — это такой простой способ “войти в айти”:
“Вот я нихрена не умею, пойду в тестирование, хотя бы ручное, а там и дальше как-то пойдет.”
Не пойдет. Рынок труда переполнен людьми рассуждающими точно так же. К сожалению, такие люди не сильно востребованы на рынке. Когда на работу берут стажера или джуниора, ожидается, что его навыки значительно вырастут в обозримом будущем, и уже не придется тратить ресурсы на его обучение, наоборот, он должен будет приносить пользу компании. Причем это и в ваших интересах (как стажера) — становясь более опытным и ценным специалистом, вы можете претендовать на более высокую должность и оплату.
Итак, каков же путь тестировщика на Питоне.
1. Пройти базовый курс по python и полностью разобраться в каждой задаче. Мы предлагаем для начала бесплатный и общедоступный курс pythontutor.ru. Есть еще курсы с нуля:
2. Пройти продвинутые курсы по python и программному обеспечению. Вот некоторые из них:
3. Изучить технологии тестирования: юнит-тесты, функциональные тесты, регрессионное тестирование, интеграционное тестирование
4. Изучить инструменты тестирования: Selenium, Jenkins, Jmeter, SoapUI, Postman
и изучить сопутствующие технологии:
Необходимо понимать, что в разных компаниях могут быть различные технологии и инструменты тестирования в зависимости от того что именно тестируется. Вот короткое описание некоторых технологий.
Git — наиболее популярная система контроля версий, используется для хранения кода и отслеживания изменений в нём.
SQL — получение информации из баз данных, язык запросов.
Эти две технологии будут использоваться в большинстве мест. Вот ещё немного:
Linux — операционная система, на которой работают многие приложения, особенно, веб-сервисы.
Docker — технология создания и быстрого развертывания окружений для сервисов и приложений.
Selenium — автотестирование веб-страниц.
Jmeter — тестирование производительности веб-сервисов и проверка их работы под нагрузкой.
Postman — создание и отправка запросов к веб-сервисам.
Pytest — лучший (субъективно) фреймворк для тестирования на Python.
Pywinauto — библиотека Python для автоматизации тестирования десктопных приложений на Windows.
Allure — библиотека Python для удобных и красивых отчетов о результатах автотестов
тысячи их, гуглите и обрящете 😉
Крайне желательно изучить основные алгоритмы и структуры данных:
и дополнительные возможности питона:
ВАЖНО! Вы должны уметь постоянно учиться (при этом самостоятельно), быстро находить нужную информацию и разбираться в ней. В работе это требуется постоянно. Причем это происходит не только при смене работы. Регулярно появляются новые технологии и инструменты, использовав которые, можно повысить удобство и эффективность работы. Цитата к месту:
“Ну, а здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте, а чтобы попасть в другое место, нужно бежать вдвое быстрее.” Алиса в Зазеркалье, Льюис Кэрролл
Готово! Теперь вы можете подаваться на вакансию стажёра-тестировщика (если повезёт, то стажировка будет оплачиваемой). Но учтите, если вы не студент (или не только что закончили вуз), то не на все стажировки вас возьмут (нередко берут только студентов). Однако, не стоит сдаваться — на собеседованиях часто стоит просить сделать тестовое задание, а дома напрячься, как следует разобраться и выполнить его как можно лучше. Даже если поначалу у вас может не получиться или работодателя не устроит результат, это даст вам опыт, который позволит далее справляться успешнее.
А теперь вопрос: сколько надо работать, чтобы стать программистом на Python?
Мой ответ таков: если у вас нет математического образования и нет предрасположенности к программированию, то работать придется очень много, очень часто и очень долго. А если у вас это есть, то все равно много и долго. Если у вас слабые нервы, я вам гарантирую, что у вас будут истерики. Приведу цитату о трудности изучения от автотестировщика на Python:
Это нормально, когда не получается ни с первого ни с десятого раза. Это нормально, постоянно гуглить, втуплять в документацию и дебажить снова и снова. Это нормально когда вроде это на курсе было легко, а потом тебя настигает ПРАКТИКА и начинается настоящее самообучение через страдания. Зато потом разбираешься как следует и понимаешь, что на самом деле после курса было лишь смутное представление.
Всё вышенаписанное совершенно серьёзно. Надо быть к этому морально готовым, чтобы не разочароваться. Куча народу покупается на красивую рекламу курсов, а потом бросает, потому что, оказывается, несмотря на то что все сказали что питон простой, мозги надо очень сильно напрягать.
Питон действительно более читаемый чем многие другие языки и его сравнительно легко освоить на начальном(!!) уровне. Однако сложные алгоритмы или сложные системы будет трудно писать на любом языке.
Как видите, вряд ли получится освоить python за 21 день и начать зарабатывать десятки тысяч долларов в месяц. Учиться будет очень трудно. Но поверьте, если у вас есть желание программировать и создавать, то все эти сложности преодолимы.
Будем рады увидеть ваши истории становления разработчиком на Python. Если у вас есть вопросы — вы можете задать их не только в комментариях, но и в группе (открытая, можно не вступать), один из авторов поста отсутствует на пикабу.
P. S. Все курсы бесплатны и доступны любым желающим, авторы поста денег за помощь не берут, ничего не рекламируют, платную помощь не предлагают. Но и телеграмм-канала у них нет. Даже чата нет — только группа вк.

476 постов 10.9K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
Внесу корректировку. Тестеровщики делятся на мануальщиков (ручных) и автотестеровщиков. У первых действительно зарплата бывает ниже, чем у стандартного айтишника, но не всегда, часто зависит от самой IT-компании. Что касается автотестеровщика, то у них зачастую зарплаты на уровне остальных айтишников и могут часто и выше, и это тоже зависит от места работы. В США например, автотестер легко получает от $115к+ в год. Если вы решили пойти в тестеры, то начинать обучение надо с ручного тестирования, а после переходить на автоматизацию. Отучиться просто на ручного не вижу никакого смысла, хотя да, для начать работать это вполне сойдёт, особенно в Москве (если смотреть внутри России).
Ну наконец-то кто-то пишет правду: долго, сложно. И обучение никогда не заканчивается.
Х.з. почему все на математику в программировании напирают. Нет ее там фактически. Нужна в первую очередь логика, умение держать в голове ветки возможных решений. А математика уже давно выражена в виде готовых созданных библиотек.
P.S. возможно у системщиков пишущих драйвера или подобный софт будет по другому, но в обычном софте уже давно все по другому. Никто в ручную не рисует окошки, не пишет алгоритмы сортировки и т.п.
Каким счастьем Jenkins инструмент тестирования?)
Все прутся во фронт-разработчики — никакой математики, никакого SQL, никакого докера. Клепают говноформы и орут что работали до 40 лет кассирами, а теперь стали программистами.

Когда пришёл на ранний утренний созвон, на котором нужно сидеть с включенной камерой:


Простыми словами о фреймворках
Всем привет, работаю java разработчиком последние 9 лет, хотел бы пояснить на максимально простом примере зачем нужны фреймворки и в чем их отличие от библиотек.
И те и другие созданы для исключения дублирования часто используемой функциональности: не нужно повторно писать и тестировать код, разработчики знакомы с распространенными решениями, что облегчает вход в проект.
Библиотеки имеют определенный интерфейс, который позволяет вызывать их код из вашего проекта. За интерфейс и его реализацию отвечают авторы библиотеки. Фреймворки же напротив, являются точкой входа и вызывают код вашего проекта. А это значит что теперь уже вы должны реализовать определенный интерфейс, который предлагает автор фреймворка. Это похоже на подключение плагинов в других программах.
Часть кода переезжает в настройки или в иной форме становится декларативной. Приведу пример конфигурации одного из самых популярных java фреймворков Spring. Проект будет загружать из БД список пользователей и отдавать их «как есть» через REST апи:
application.yml — конфигурируем порт для апи и настройку подключения к бд:
server.port: 8080
spring.datasource.url: jdbc:postgresql://localhost:5432/mydb
В формате фреймворка объявляем репозиторий — компонент для получения записей о пользователях из таблицы БД:
interface UserRepository extends CrudRepository<User, Long> <>
В формате фреймворка объявляем эндпоинт — точку для подключения других сервисов к REST апи нашего проекта:
Теперь другие сервисы могут через апи нашего сервиса получить список пользователей из БД:
С минимальными настройками можно подключить и другие необходимые компоненты — для работы с разными БД, очередями, логгированием, можно настроить транзакции, ретраи, авторизацию и всё остальное.
Если вы только начинаете карьеру в it, есть смысл попробовать воспроизвести пару примеров из интернета по вашему фреймворку, а также пройтись по теоретическим вопросам (вроде «жизненный цикл спринг бинов»), но было бы разумней потратить время на общие алгоритмические и технические темы. Всем удачи!

«А если изменить скорость открывания, то можно сделать самолетный движок»


Первый опыт работы в 16 лет в IT
Я хотел изначально написать этот пост на хабре, но это скорее просто личное желание поделиться опытом, радостью и слить накопленное, чем информативная статья с моими анализами и выводами.
Я занимаюсь программированием с детства, а веб разработкой всего пару лет, но тем не менее собрал достаточно знаний, чтобы попробовать найти работку в IT. Оно знаете, было как-то лень и интересно одновременно, я люблю приключения и к тому же я собирался работать удалённо. Мой системник уже проситься на тот свет, иногда просто может не включиться, помогает передёрнуть ОЗУ и почистить от пыли и он снова работает (Кому интересно, p7p55le + i5 750, 8 gb DDR3 и две Radeon HD 5830). Апгрейдить там бессмысленно, нужно с нуля собирать. Не то что бы меня это сильно мотивировало, ну останусь без пк, жизнь же продолжается; но он не ломается к удивлению, заставляя меня угрожать кулаком в монитор и по клавиатуре, когда курсор останавливается, а IDE (От реактивных мозгов) вылетает.
Путь до оффера
Приблизительно начало февраля 2022. Тихонько себе листал вакансии на hh и habr карьере, откликался, получал отказы, решал тестовые (увы, тестовой зарплаты не было), но я остановлюсь на собесах. Хотя и там особо всё просто, коммерческого опыта нет, ты маленький, и вообще что ты тут забыл. Потому я продолжал откликаться уже по приколу, на middle даже, ну прокатит и круто.
Ивент от яндекса.
Осень 2022. Яндекс приглашает поучаствовать в соревновании YaCup 2022. До денежного приза вряд ли дойду, а вот пройти отбор на стажировку по упрощённой схеме, если попал в топ 50 уже не так уж и не возможно. Рвя жопу и нервы, я занял 36 место (в направлении фронтенд) и через неделю меня пригласили пройти удалённо отбор. Подробно не буду. Прошёл первый этап, на том конце были весёлые ребята и прикольные задачи (относительно простые, по этому не нервничал). На втором этапе меня встретил мужик который вероятно давно не ухаживал за своей растительностью на лице. За ним была доска, где я должен был бы решать задачи, но у меня была фора, однако я всё равно завалил. В яндекс я не попал (
Удача?
Февраль 2023. Вечерочком сижу и листаю вакансии на хабре и откликаюсь на «Typescript Lead». Странное название, просто Typescript и просто Lead. В описании написано «в поисках джуна», ну а кто я, чтобы не тригернуться на слово «джун». Через часок, уже полностью сонный, смотрю пишет мужик с этой вакансии, мол, вообще смотришь куда откликаешься. Я подумал, ну бывает, хотя это не hh и на кассира случайно тут не откликнешься. Проверяю отклики и всё ок. Он зовёт поболтать.
Первый разговор был без вебки, так что я не знал кто там. По голосу лет на 20. Попросил выполнить тестовое к завтрашнему дню и втирал какую-то дичь про тёплую атмосферу в команде и что-то ещё, я не помню, хотел спать. Тестовое было простенькое, но я всё равно потратил на него пол дня.
На «собесе» меня встретил бородатый мужик далеко не 20ти лет, а как оказалось почти сорока. Вебку тоже пришлось включить, переборов себя. Это был просто разговор по интересам, был только один тех. вопрос (что такое DI?) на который я нашёл много что ответить (мог бы больше, но моя речь не поспевает за моими мыслями, я вообще довольно не общительный). Потом я ничего не помню, помню только конец. Через полтора часа разговора с меня уже стекли литры пота, пытаюсь сдерживать судороги в ногах и шею, которая тоже вот-вот пойдёт в разнос. Меня он оценил в 50к рублей и объявил испытательный срок — 3 месяца с 75% ставкой. Завершил разговор, требуя готовиться к первому рабочему дню. От меня он потребовал мой плейлист spotify, любимые фильмы, книги и moodboard, дабы «знать мой психотип», чтобы это не значило.
Надо сказать я устраивался на Frontend, он меня направил на FullStack и спойлер работал как Backend.
Первый рабочий день
Было так круто, что я аж в 6 утра подскочил. Меня добавили в телеграм группу по разработке. И к обеду мне прилетела задача (issue) в гитхаб. Единственное, что мне сказал руководитель — «Иди раскуривай».
Кстати про команду: руководитель(он же тот самый мужик), дизайнер(парень где-то лет 20ти) и два фронта, с которыми особо не контактировал.
Так вот возвращаясь к задаче. Я нихера не понял. Задача была наполнена непонятными мне терминами. Я подумал это нормально, капец какого опыта я наберусь (спойлер, это правда).
Чтож. Делать нечего, я пишу, что-то вроде «памагите, я ничего не понимаю». Меня направили почитать про [куча терминов]. «Раскуриванием» задачи я занимался следующую неделю.
Из будущего: задача была в том, чтобы доить базы сети аптек по всей России, готовить данные и кормить ими с ложечки аналитические сервисы. Ведь просто, правда? Как будто я с базами данных не работал или бэкэндом. Но вот данных там на сотни гигабайт и это вполне тянет на биг дату. Обрабатывать их нужно грамотно, чтобы не было утечки памяти. А как это делать, я не знал.
Медленно, но уверенно
Я погружался в новые технологии, местный стек и так любимое в этом месте DDD. И вот первый потребитель данных доволен. Всё работает как надо, спустя сотни исправлений. И прошло уже чуть больше двух недель. Всё время я работал над проектом один, и настраивал его с полного нуля.
А вот и первая ЗП за 2 недели. Что кстати удивило, с самого начало думал, что кинут.
Отношение начинает меняться
На одном из one-to-one
— Ну как там?
— Первый потребитель готов, ещё два осталось
— Замечательно. За этот день добьёш?
— Нууу. Эээ.. Тут я думаю где-то к концу следующей недели доделаю.
— Б*ть, какой следующей недели. У нас уже сроки на этой недели заканчиваются. Чё там делать, то. Ты должен был по моим предположениям ещё на прошлой неделе всё сдать и перейти к следующему проекту.
Дальше на меня льётся куча критики и мата, а с моими то социальными навыками, я просто сижу как камень, слушаю, говорю «ага» и со всем соглашаюсь.
Что-то похожее происходило каждую неделю. «Ну чё за день осилишь», «Так, тогда через час идём в прод, да?», а там работы на неделю.
Затем мне пришло сообщение, что мой испытательный срок нужно продлить на ещё один месяц. Я поинтересовался, как это повлияет на ЗП. Оказалось всё нормально, на ЗП это продление не влияет. Держите это в голове, пригодится.
С проекта на проект
Сроки просрались, меня ведут на другой проект, а там прод лежит, и вообще что-то там наворотили и не работает, иду на следующий, через дня 2 всем говорят бросать этот проект и идти на другой.
Чтож на этот раз это бот для подготовки формы(pdf файла) для миграции в США. Он уже был готов, но там нужно было что-то «поправить». Пока я это правил, появились подробности, что оказывается там вообще сценарий вопросов не правильный. Ну ладно, сел переписывать. Ну и как обычно, я должен был сделать это вчера, а почему-то потратил на это три недели. Ну работает и ладно.
Вообще я много когда узнавал новые подробности в не подходящее время.
Последняя капля
Напоминаю, что частенько меня кроют в чате и one-to-one. Так, что мотивации и настроения, что-то делать у меня нет. Каждый день жду увольнения.
У меня есть такая особенность, что я копирую манеру общения собеседника. Так что отвечать добром на такие сообщения я не мог, а в one-to-one просто говорю «ага» и стараюсь как можно быстрее уйти, потому что такой разговор мне не приятен. Чтобы вы не думали, что я так всегда общаюсь, с дизайнером общаться вообще по кайфу, нет желания уйти, хотя и поддержать разговор также не получается.
На проекте с ботом у меня возникла проблема, с тем, что бот падает при создании pdf, но ошибки нет, точнее она пустая. Я обращаюсь к руководителю (больше не к кому)
— У меня не собирается pdf, падаёт ошибка в виде пустого объекта
. не помню точно, но разговор зашёл к тому, что зачем мне linux, если я им не умею пользоваться, и вообще — купи мак. Вот у тебя docker стартует из под рута, потому и не работает
— Слушай. Ну вот! Да! У меня всё собирается. Это у тебя Docker из под рута стартует.
— Ладно, буду разбираться.
Посидев, я понял в чём ошибка. И тут до меня доходит. Как он мог сгенерировать pdf, если ошибка совсем в другом. Я начал кое что подозревать, что уже давно подметил.
Часто на мои глупые вопросы, я получаю слишком умные(тупые) ответы, по сути это просто каша из умных терминов. Вместо того чтобы переспросить, уточнить, руководитель мне либо посылают такой ответ, либо наезжает.
Ответ на один из моих глупых вопросов
Эти вещи нужно оборачивать в модельные сущности и эксплуатировать в рамках стекового инструментария, приватизация тут ничего не решает
Поняли? Контекст тут не важен, чтобы понять, что это отборный бред. Такие ответы я получал почти всегда.
Так, вот я решил проверить мою теорию(обращаясь к руководителю)
— А можно pdf который вчера удалось сгенерировать?
— [скидывает пустой pdf (бланк для заполнения)]
— Не, это бланк, мне нужно заполненный со вчера.
— Ты сказал не собирается, ну я и собрал. Генерация это уже другая задача.
И да. Я подтвердил свою теорию. Он придрался к термину. Я сказал «собрать», вместо «сгенерировать». Я окончательно сгорел, и назвал его душнилой, а потом не сдержался и ещё жёстче его покрыл. На что он ответил что-то вроде: что ты себе позволяешь, вы(команда), должны целовать мне ноги, я вам тут плачу, я собрал команду, я, я, я.
К этому времени в команде остался только я, приходили иногда новички (с не плохим таким опытом уже), но уходили через день, два. Мне кажеться они сразу понимали, что тут что-то не так.
Саботаж
С этого момента, почти каждый день продолжалась эскалация конфликта. Я больше не задавал вопросов по задаче (поскольку от этого я только теряю время на бессмысленный токсичный разговор), и шёл на one-to-one только со словом «ага» и каменным лицом.
Одним утром, без настроения пытаясь разобрать очередную задачу, уже по другому проекту, я вылетаю из группы в телеграме. Я сначала не понял, что произошло, потом зашёл на github и увидел, что больше не состою в их организации. И я понял — я уволен. Однако в течении дня мне ничего не написали. Так, что это сделал я.
— Это типо увольнение? Тогда уж можно пожалуйста официальную причину и ЗП за 12 дней?
— Официальная причина — некомпетентность, саботаж
— Официально — ты у меня не работал, по документам, благо, не успел тебе контракт оформить. Я рекомендую тебе походить к врачу и начать общаться с людьми, у тебя большие проблемы, которые тебе предстоит решить.
— А зп за 12 дней? Если я получаю 50тр в месяц, то за 12 дней это должно быть 20тр
— Ты не получаешь 50к в месяц, я продлил твой испытательный, ты согласился
Поняли, да? Я там даже и не работал. И что ещё за «саботаж».
Где же обещанное обучение к которому вы так ответственно относитесь, ламповая атмосфера и уважение к неопытным сотрудникам, о чём мне заливали в самом начале?
Вот такие мои весёлые приключения в мире трудоустройства в IT, так ещё и в 16 лет.
P.S. Ах, да. Мне хватило ровно на новый ПК. Так, что я не сильно расстроился.

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


Топ-25 бесплатных курсов обучения Python 2023 года
Подготовили для вас статью с бесплатными курсами по Python. В некоторых курсах есть тренажеры: можно проходить теории и там же практиковаться.
Покликайте на курсы, выбирайте. Важно, чтобы вам был удобен курс, понятен язык изложения, и ваш уровень знаний подходил для конкретного курса.
Python — это один из наиболее популярных языков программирования в мире, широко применяемый как в создании программного обеспечении, так и в Data Science B Machine Learning.
Тренажеры
Тип: тренажер состоит из блоков теории, после которых сразу идет практика с задачами внутри тренажера. Бесплатный сертификат о прохождении выдается после окончания курса.
Тип: обучающий тренажер.
Тип: обучающий тренажер.
Бесплатные курсы от школ
Курс на платформе Stepik от онлайн-школы BEEGEEK для начинающих и учащихся образовательных учреждений. Программа предлагает изучить основы владения Python, а по окончании участников ждет электронный сертификат.
Бесплатный курс от Мичиганского университета на платформе Coursera предлагает участником набор онлайн-лекций по базовым навыкам владения языком Python. Каждый поток длится 7 недель, в рамках которых профессор Чарльз Северанс преподносит знания из своей книги «Python for Everybody».
Бесплатный курс по Python от Хекслет для начинающих программистов. Материалы, среди которых — 7 уроков в формате текста или видео и тесты, раскрывают основы написания кодов на языке, а также описывают ключевые аспекты работы в его экосистеме.
В рамках этих курсов по Python от Skillbox автор Артем Манченков расскажет обо всем, что пригодится начинающему программисту, используя реальные примеры. Вместе участники пройдут путь от написания интерфейса мессенджера до создания голосового помощника — и все это в формате видео.
Как заявляет автор курса, его программа рассчитана для программистов Python с любым уровнем знаний. По мере прохождения участников ждут 90 видеоуроков и практических заданий. По окончании курса платформа Stepik выдает электронный сертификат.
Бесплатный курс от Академии IT с рейтингом 4,75. Обучение состоит из прохождения 42 уроков, во время которых автор Михаил Тарасов расскажет все об основах программирования на Python, а также поделится ценной информацией о будущей карьере программиста.

Курсы с Youtube
Курс YouTube-лекций по программированию на Python. Вся программа состоит из 123 видео длительность от 5 до 12 минут. При желании можно найти те же видео на языке оригинала.

Что можно писать на Python
Практически как Java, Python находит применение во многих областях программирования. Так, например, язык применяют в:
Создании систем автоматизации;
Математических расчетах и других продуктах.
Сколько приносит знание Python в 2023 году?
Средняя заработная плата Python-программистов, согласно данным портала ГородРабот.ру, составляет 131 478 рублей — лучший показатель на рынке труда. А вот новички, основываясь на информации HH.ru , могут получать оплату от 70 000 рублей.
Ключевой недостаток владения Python — это необходимость конкурировать с другими кандидатами за место в штате. По подсчетам того же ГородРабот.ру, количество вакансий на позицию Python-разработчика достигает до 203 мест ежемесячно, однако и предложение труда уверенно растет: так, команда Skillbox посчитала, что на одно место программиста Python в 2023 году приходятся сразу 20 кандидатов.
Почему Python?
Python — идеальное решение для каждого и предлагает:
Доступность — из-за простого синтаксиса язык понятен даже новичкам;
Кроссплатформенность — интерпретаторы Python поддерживаются большинством операционных систем;
Разнообразие применения — язык нужен везде: от веб-разработки до геймдева;
Интегративность — Python можно применять в сочетании с другими системами и встраивать его коды как компоненты.
Парсим яндекс диск при помощи Python
В данный момент я работаю контент-менеджером в «крупном» интернет — магазине. В моём случае, это больше 100 000 позиций.
Иногда приходится сталкиваться с такой проблемой: поставщик присылает фотографии со ссылками на яндекс диск. Это крайне неудобно, потому что приходится ходить по каждой ссылке и скачивать изображение к себе, а затем уже загружать на сервер и т.д.
Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.
У меня было 2 версии программы:
когда по ссылке находится папка с картинками, python скачивает эту папку как зип файл, затем распаковывает. Все манипуляции записываются в csv файл, путь до файла с картинками
когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок
p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)
Приступим к реализации
скачать и установить python c официального сайта https://www.python.org/downloads
открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com
подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)
для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.
Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ . Чтобы их можно было скачать, они должны быть публичными.
Обратимся к API яндекс. После ключа public_key=»вставляем_ссылку_на_файл»
В ответе мы получаем json, из которого нам нужно получить значение по ключу href. Полученное значение и будет нашей прямой ссылкой к файлу.

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.
# создаем новый файл и подключаем нужные нам библиотеки
import requests
from urllib.parse import urlencode
import csv
import os
import zipfile
Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:
final_url = base_url + urlencode(dict(public_key=public_link))
response = requests.get(final_url)
parse_href = response.json()[‘href’]
return parse_href
Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).
Далее, мы скачиваем файлы и в зависимости от его типа выполняем действия: просто записываем в результирующий файл или же переходим к его распаковке с последующей записью.
В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

В добавок, у нас на жёстком диске появляется папка со скаченными картинками в папке download_files.
Полностью посмотреть код можно в репозитории на гитхаб.
p.s. Официальная документация по API Яндекс. Диска
Братишка с пикабу подсказал готовую библиотеку на питоне. Спасибо b4ro тык.
p.s.s. Немного поразмышляв, я подумал, что неплохо было бы написать, тесты. Пройтись линтером по коду. Добавить функцию переименования файлов. Может быть что-нибудь ещё?)
Спасибо за прочтение! Комментарии, лайки, дизлайки, предложения, пожелания крайне приветствуются.

А я всего лишь пишу калькулятор на Python


Отчёт и благодарность Силе Пикабу
Здравствуйте, нежноуважаемые пикабушники!
Мне очень неловко. Я исчезла, хотя обещала появиться в январе, и, могло показаться, что, получив оперативную и душевную помощь от вас, я слилась в небытие.
Был цейтнот, школьная нагрузка была очень серьёзной. В настоящее время стало полегче. К тому же именно сейчас по проекту есть очень хорошие результаты, и я могу ими поделиться с вами.
С этим проектом наша команда участвовала в двух конкурсах и одной научно-практической конференции:
1. Проект стал победителем в заключительном этапе » Городского конкурса проектов «Юные техники и изобретатели – 2023»;
2. Занял призовое место с Дипломом 3 степени на конкурсе «Новые вершины Поиск НИТ»;
3. Занял призовое место в заключительном этапе городской открытой научно-практической конференции «Инженеры будущего».

Для первого опыта, считаю, что это замечательный результат.
Очень хочу вас всех поблагодарить потому, что именно ваше доброе участие так сильно меня вдохновило и придало уверенности!
Ведь слова поддержки очень важны, а вы предлагали поддержку не только на словах! Я всегда знала, что если в работе случится тупик, если мне не хватит знаний и накатит отчаяние, то я смогу обратиться к пикабушникам @gurux13, @girogor333, @havaec. Я по-настоящему чувствовала, что за моей спиной сила Пикабу! Спасибо вам!
Работа над проектом продолжается и сейчас, т.к. есть некоторые ответственные перспективы на будущее.
Если вам интересно, то можете посмотреть сайт проекта, там, кроме полезной информации, будет немного пруфов наших достижений и наши счастливые лица)
А вот и сам герой, благодаря которому я познакомилась с благородством и силой Пикабу. Встречайте: Тренажёр решения задач по теме графики функций!
Скачать exe-файл (для системы Windows 7/10/11) можно по ссылке https://disk.yandex.ru/d/phzR8yJKwJn9OQ .
Тренажёр был написан на Python, поэтому поиграть в графики функций получится только на компе или ноутбуке.

Топ 5 бесплатных курсов по Python для начинающих
1. Учебники Python — на сайте pythonworld опубликованы уроки для изучении основы Python функции, циклы, кортежи, словари и т.д
2. Курсы от Яндекс-Практикум — тут рассказывают о самых азах бесплатно, а дальше платно.
3. Уроки на сайте academiait — доступный курс для изучении Python. Всего 42 бесплатных курса.
4. «Поколение Python» для начинающих от stepik — знакомит с Python новичков.
5. Инди курс от stepik — этот курс подойдет для программиста с любым уровнем вне зависимости от опыта.

HapDoc — утилита для генерации документации
Приветствую.
Хочу поделиться с вами проектом и услышать ваше мнение о нем. Может быть чего-то не хватает? Может быть вы видите его как-то иначе? А может быть вы хотели бы присоединиться к разработке вместе со мной 🙂
Я разрабатываю утилиту для автоматической генерации документации под названием HapDoc. На данном этапе разработке возможно сгенерировать документацию для 3-х типов проектов:
Основными командами являются:
gen — Генерация Markdown файлов документации.
build — Генерация Markdown файлов документации с последующей сборкой в static HTML.
serve — Запускает сервер с помощью FastAPI и uvicorn, для self-host документации.
tmpl-new — Создает новый шаблон для документации
tmpl-list — Возвращает список имен сохраненных шаблонов
В будущем я хочу добавить включение и отключение различных типов файлов для генерации, например при генерации Python документации будет возможность включить также все .js файлы

Байки погромиста. Если кто-то скажет, что программирование — это скучно

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

Я, когда клиент говорит, что ничего не работает
Скрипт секретный — ну как, для трейдинга на бирже, и принесёт миллионы денег, конечно же, но только когда заработает без ошибок. Поэтому клиент не пересылает мне его, а запускает screen share и делает, что я ему говорю. То ещё удовольствие, но хозяин-барин — оплата почасовая.
Всё шло хорошо, я потихоньку распутывал кривую логику, говорил как лучше сделать, а потом мы дошли до неё. До функции, которая не выполнялась. То есть буквально, чел вызывает функцию, а она ничего не возвращает и ничего не делает.
Смотрим в содержимое функции. Как и положено, это полотно кода на пару экранов, сходу так и не поймёшь, что она делает. Повсюду return что-то там, ветвления всякие итд. То глупое чувство, когда клиент тебя ждёт, а ты ничо не понимаешь и косплеишь рыбу.
Осложнялось всё тем, что отлаживать через клиента — ну такое. Он может запустить скрипт, но вот отладчик для него — страшное слово, и максимум, на что можно рассчитывать — это поставить print() в нужных местах. Разгадка оказалась проста: где-то в середине функции, там, где это было менее всего заметно, вместо return клиент написал yield. А в питоне yield — это магическое слово, которое превращает функцию в генератор, а все return . — в как бы raise StopIteration(. ), и вместо результата возвращается итератор, и выполнение кода останавливается до следующего обращения. Короче говоря, всего-навсего одним ключевым словом клиент полностью раздолбал логику своей программы. Маэстро!
❯ Как ловить эксепшн из генератора
Вообще генераторы в питоне — это и добро, и зло, и я ещё напишу про это в следующей статье (поэтому подписывайтесь, чтобы не пропустить). И хотя я программирую где-то со времён построения египетских пирамид, всё равно я умудряюсь делать ошибки.
Вот, например, кусок кода:


Тут у меня есть функция cache.apply(), которая берет quota_chunks, делает с ними какой-то вжух-вжух и возвращает новые quota_chunks. Я нарисовал диаграмму, чтобы изобразить этот процесс в более понятной форме.

Иногда случается так, что эта вжух-функция не срабатывает, и тогда, как и положено приличному питон-коду, бросается исключение.
Возможно, раньше эта вжух-функция была действительно функцией, но потом она превратилась в генератор (для большей эффективности). Генераторы всем хороши, кроме одного: они откладывают выполнение кода, и в реальности узнать, когда ваш код выполнится, бывает затруднительно. Вы можете создать генератор, отправить его на вход другому генератору, затем передать это в функцию, и уж тогда где-то внутри этой функции вызовется код.
Если проводить аналогию с реальностью, то это как, скажем, банковский чек: вы выписываете чек на сто тыщ мильонов, видите, что чек не сломался и отдаёте его другу, друг заворачивает в декоратор конверт и отдаёт подруге, подруга кладёт в коробку и отправляет по почте бабушке на деревню, бабушка распаковывает коробку, распаковывает конверт, приходит в банк с чеком и ловит эксепшн, потому что на вашем банковском счёте нет такой суммы и никогда не было.
Именно это тут и случилось. Я вызвал этот генератор и проверил, что он отработал без ошибок, но на самом деле генератор отработал совершенно в другом месте — там, где вызывается spy() — и именно там он и упал.
А знаете как я это отловил? В тестах. Поэтому пишите тесты.
❯ Строго по инструкции
Клиенты бывают разные: какие-то умеют немножко в HTML и frontend, а некоторые из наших клиентов умеют в backend. Один из таких клиентов часто сам писал backend логику и давал нам её на проверку, чтобы мы ему исправили баги, а может быть где-то сделали рефакторинг или code review.
В этот раз клиент решил сам попробовать сделать деплой небольшого проекта на сервер. У нас есть стандартный шаблон, который мы используем для всех новых проектов, и клиент взял его. Всё, что ему нужно было сделать — просто следовать шагам, которые там написаны. В идеале такие шаблоны должны сами разворачиваться при помощи скриптов, но мы заленились и просто написали список команд, которые нужно выполнить. Ну например, в каком-то месте нужно было зайти по ssh в машину и запустить какую-то команду.
И вот клиент взял нашу инструкцию и начал следовать тому, что там написано, слово в слово. Надо понимать, что разработчики обычно пытаются понять, что они делают (по крайней мере я на это надеюсь). Соответственно, те, кто читал этот скрипт, понимали, что должно быть сделано, и в случае, если у них, например, вместо pip используется poetry, а вместо apt-get у них pacman (i use arch btw), то они заменяли соответствующие команды.
Клиент же делал всё слово в слово, и он написал нам, потому что на одном из шагов у него случилась проблема. Если быть точнее, у нас в инструкции была описана ветка master, а на гитхабе по умолчанию ветка main, поэтому какая-то команда не находила нужную ветку.
«Изи фикс» — подумал я, созвонился с клиентом объяснил, что нужно делать, и хотел отключаться. когда возникла ещё одна ошибка. Оказывается, в инструкции был косяк, и при выполнении команды шелл делал подстановку, когда видел $SOMETHING — то есть не было экранирования. Мы исправили и это, и буквально через несколько секунд всплыл ещё один косяк. А потом ещё. И ещё.

Где-то через час я сказал клиенту, что пусть он всё бросит и я задеплою всё сам, а потом мы обновим ридми. Было стыдно.
❯ Ответочка
Когда-то я работал на интернет-магазин, и мы заметили, что у нас появляются фейковые заказы каждые утро и вечер. Сначала мы не смекнули, что к чему, но потом поняли фишку: идентификаторы заказа у нас были обычные IDшки из Postgres, поэтому конкурент мог сделать заказ утром (номер заказа 10), сделать заказ вечером (номер заказа 15) и просто вычесть второй номер заказа из первого и получить количество заказов, которые мы получили за день (15 — 10 = 5). Я до сих пор часто нахожу эту ошибку во многих проектах, и примерно могу оценить размер этих проектов.
Эту ошибку легко исправить: достаточно заменить последовательные ID на случайные — например, вместо номера заказа использовать timestamp или UUID.
Но сам факт мониторинга нашего магазина конкурентом меня здорово раззадорил, и я полез к нему на сайт что-нибудь тоже искать.
Мой девиз — «кто ищет тот всегда найдёт» (посмотрите мои статьи про уязвимости на хабре — 1, 2). Так и тут, я искал и обнаружил, что конкурент выкладывает розничные прайсы публично, а вот оптовые — только для зарегистрированных и проверенных партнёров. Сам файл он раздаёт nginx’ом с адреса вроде http://some-site.com/files/розничный_прайс.xls. А если так, то, скорее всего, никакой аутентификации при помощи бэкенда для самого файла нет, а значит, можно попробовать найти оптовый прайс.
Используя весь опыт, накопленный человечеством за все годы его существования, я заменил слово розничный на оптовый в названии файла. и совершенно забесплатно, без регистрации и смс получил ежедневное обновление оптовых цен конкурентов. Соответственно, я мог предлагать оптовикам цены те же или ниже и получать больше профита. Хехе.
❯ Скрапинг со скоростью света
В одном из моих проектов я использовал api ВКонтакте, чтобы анализировать кожаные мешки. Там не нужна была супер-скорость, поэтому я не полез в async, а просто написал функцию и распараллелил её по потокам при помощи ThreadPoolExecutor.
Программа начала просто летать! Вот как это делают сеньоры! Саенс, бич!

Слева направо: саенс, бич
Потом я начал подозревать, что программа работает слишком быстро даже для такого классного парня, как я. Я полез смотреть результаты, а там ничего не было, потому что в каждом из потоков программа очень быстро падала с ошибкой, а так как это потоки, то exception в потоке не «всплывал» в основную программу, и я думал, что всё норм.
Поэтому если всё работает слишком хорошо, то, возможно, всё очень плохо.
❯ Бог рефакторинга
Пришел ко мне клиент и говорит: Саня, давай позумимся и посмотрим, что-то вебхук отвалился и ничего не принимает.
Ну я такой про себя «опять клиент что-то сломал, бывает», полез туда смотреть. Глядел-глядел, глаз вообще ни за что не цеплялся. Ошибок в sentry не было. Потом нашёл вот такой код:

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

Самое смешное, что в оригинале клиент написал рабочий код, потом пришёл я всё рефакторить и случайно сломал. Я много раз извинялся перед клиентом. Ух, до сих пор стыдно.
❯ Детектив kesn и тайна ssh
Говорят мне как-то: клиент, с которым мы работали год назад, восстал из мертвых, и теперь ему нужно перенести и обновить проект в AWS. Вон там наш девопс написал какие-то скрипты сто лет назад, возьми их и задеплой.
Я человек простой, мне сказали задеплоить — я и задеплою, хоть на AWS, хоть на тапок.
Запускаю я скрипт, он всё делает, и теперь я хочу зайти на сервер и вручную проверить, что всё работает. И тут всё заверте.
Сначала пробую ssh -i ключ root@ip. Не работает. Потом вспоминаю, что юзер в AWS обычно ec2-user, поэтому пробую ssh -i key ec2-user@ip. Не работает. Может, там авторизация не по ключу? Пробую ssh ec2-user@ip. Не работает. Сделал dig, попробовал подключиться не напрямую, а через load balancer. Согласен, тупая затея.
Пошел в дэшборд AWS смотреть настройки файрволла. Вижу два странных айпишника. Очень странно. Беру первый, проверяю геолокацию по ip. По локации понимаю, что это, кажется, статический ip девопса. Какого хрена? У нас же есть бастион, и все соединения должны проходить через него. Проверяю второй ip из файрволла. О, так это же и есть бастион. Ну отлично, теперь делов-то — добавить всю эту конфигурацию с бастионом в .ssh/config, чтобы в будущем было легко подключиться. Лезу в конфиг, а там уже есть эта конфигурация.

Итого, в поисках настроек доступа я полностью проверил всю инфраструктуру, чтобы обнаружить эти настройки на моем же компе.
❯ Ошибка платежа
На sentry прилетел отчёт об ошибке, попросили посмотреть. Стал разбираться. Мой код двухгодичной давности.
Логика была простая: есть намерение клиента платить за подписку, и есть прикрепленная карта клиента. Пока намерение активно, мы пытаемся списывать деньги с карты. Это логично: даже если на карте нет денег, то раз клиент хочет пользоваться сервисом, мы будем пытаться списать до тех пор, пока это не получится. Если клиенту не нужна подписка — он отзывает намерение.
Единственное, что я не учел — что клиент может просто всё забросить, ничего не отменяя. И вот на протяжении года наш сельдерей-разнорабочий (celery worker) запускался, пытался списать у клиента деньги, получал отлуп, жаловался в sentry, и засыпал, чтобы назватра всё повторилось, и так каждый день, без конца и края.

❯ Лёгким движением руки сэкономить кучу денег
Я заметил, что очень часто клиенты могут сэкономить неплохую такую кучу денег, сделав просто какое-то минимальное телодвижение. Вот несколько примеров:
Чувак хостил видео на aws s3 и раздавал через амазоновский CDN. Выходило $655 в месяц. Потом нашёл BunnyCDN, я перенастроил приложение (заменил где-то 4 строчки минуты за две), и внезапно с новым CDN в месяц стало уходить только $70. Ну не эпично ли за пару строчек кода?
Клиент платил сотни долларов за жирный инстанс Elasticsearch на AWS. Почему — я хз. Потом он заподозрил неладное. Мы замерили реальную нагрузку и перенесли Elastic на одну из самых дешёвых машин в digital ocean, за которую клиент теперь платит $24 в месяц. Профит!
У клиента было много файлов на s3, платил он тоже много. Потом перенесли всё на b2, там даже делать почти ничего не надо — у них интерфейс совместим с s3. Получили экономию раза в 4.
❯ От судьбы не уйдёшь
У нас есть шаблон для новых проектов на cookiecutter. Он удобен тем, что если мы что-то меняем в шаблоне, то можем легко обновить проекты клиентов при помощи cruft.
Как-то меня наняли как раз обновить проект. Проект был старый, отстал от нашего шаблона очень прилично, и когда я попытался его обновить, то обнаружил, что изменилось почти всё. Я начал аккуратно разрешать конфликты, и как раз примерно в этот момент штатные сотрудники клиента начали пилить что-то эпичное в своей ветке.
И вот дело подходит к концу, у них куча изменений, у меня столько же. Мы говорим «ну мы всё», они такие «мы тоже вот уже заканчиваем». Начальник мне пишет: «Заливай быстрее в мастер, пока они не залили своё, а то будем потом всю жизнь конфликты разбирать. одинодин». Ну я на скорости слил наши обновления в мастер-ветку и мысленно пожелал удачи их разрабам: наша работа сделана, мастер мы обновили, а то, что их разработчики отстали от мастера и у них конфликты — ну штош.

Прошло много месяцев, и угадайте, кого они наняли, чтобы разрешить все конфликты и залить их ветку в мастер?
❯ Детектив kesn и поиски пароля
Настраивал я как-то инстанс elasticsearch. Там была отдельная машина, я на ней с помощью docker разворачивал ElasticSearch. Сначала делал всё в ручном режиме, проверял, потом писал скрипт для автоматизации. Для начала просто запустил сервер без всего, потом начал разбираться с авторизацией.
В эластике есть специальный скрипт — elasticsearch-setup-passwords — он настраивает пароли. Ну я его запустил, он мне выдал списки паролей для apm_system, kibana_system, kibana, logstash_system, beats_system, remote_monitoring_user и, собсна, elastic. И хотя мне показалось, что паролей было слишком мало и вообще-то для приличной поисковой системы их должна быть хотя бы сотня, но пароль для elastic был, я его забил в систему автоматизации и пошёл дальше настраивать. Дальше было SSL — не знаю, почему это не встроено (наверно, потому что если не будет https, то и взламывать elastic будет сложнее, а куда без этого!). Ну я пошёл в гугол и говорю: пацаны, сертификаты для эластика привезли? Когда я заикнулся про letsencrypt, они мне сказали, что у нас тут не загнивающий запад и мы сами сертификаты делаем, свои собственные. Короче, прям на официальной странице лежит огроменный docker-compose.yml, в котором вжух-вжух, сертификаты настраиваются, конфиги генерируются. Я его скопировал, применил, всё заработало, и я добавил это в автоматизацию.
Через несколько дней (когда я ужё наполовину всё забыл) мне вдруг понадобилось всё снести и настроить заново (спасибо, digital ocean, за то, что не умеешь даунскейлить диски!). Я запустил скрипт автоматизации, всё развернулось, и тут я вспомнил, что вроде как пароль генерируется сам и его можно узнать, если запустить elasticsearch-setup-passwords. Ну я полез на машину, чтобы запустить эту команду — а она не работает! Сначала был не тот url инстанса, пришлось узнать, что есть опция —url. Окей, теперь не хочет подключаться, т.к. кастомные сертификаты. Как добавить сертификаты? Прописать их в elasticsearch.yml. Читаю доки и там говорится:
All of these settings can be added to the elasticsearch.yml configuration file, .
. with the exception of the secure settings
which you add to the Elasticsearch keystore. For more information about creating and updating the Elasticsearch keystore, see Secure settings
Ну я полез читать, что за Elasticsearch keystore и зачем он нужен, и даже прочитал про bootstrap password и keystore passphrase. Мне показалось, что ещё чуть-чуть, и я дойду до чтения про большой взрыв и основы зарождения вселенной, а ведь я просто хотел узнать пароль от эластика!
Тут я бросаю взгяд на docker-compose.yml, и вижу, что там везде мелькает $ELASTIC_PASSWORD, и оказывается всё это время пароль был у меня в настройках и я сам его задавал!
Сказочный. эээ. патруль!

❯ Как дропнуть продакшен-базу
Клиенты любят нанимать фрилансеров или брать сотрудников в штаты, чтобы они работали над фичами — потому что нанимать нашу компанию достаточно накладно >:)
Ну и вот как-то клиент нанял стороннего разработчика, чтобы он перенёс систему поиска с эластика на postgres full-text search. Он сделал это именно так, как делал я лет 7 назад. Следите за руками:
Огромная ветка с кучей коммитов
В коммитах смешались изменения в БД и рефакторинг логики нескольких почти не связанных приложений
Миграции не откатывались
Бэкапов перед деплоем сделано не было (хотя это одна команда)
Не было переключателя «новая система / старая система», то есть старую систему просто вынесли нафиг и заменили новой
Не было оговорено временное окно для безопасного деплоя
То есть это прям классическая, железная точка невозврата. Угадайте, что случилось.

Конечно, сломалось всё. Система начала жёстко тормозить. Клиент написал нам и сказал, что надо срочно всё оживить. Т.к. это была критическая ситуация, то мы с СЕО залетели туда и стали смотреть. В изменениях было очень много всего — это был тотальный рефакторинг, поэтому локализовать проблему, просто глядя на код, не удалось. Так как прод не работал, то у нас не было времени воспроизводить всё на локалхосте и дебажить, и мы решили просто всё откатить.
Я откатил git revision на сервере на рабочий коммит, а СЕО зашёл в админку Digital Ocean и восстановил снэпшот базы данных, назвав его production-db-backup-Mar-24. Всё запустилось. Из-за использования снэпшота мы потеряли немного новых данных, но ничего критичного.
Потом мы сказали: всё, мы всё откатили, вот текущий коммит, вот текущая база, пусть ваш погромист всё дебажит и чинит или живите дальше в проклятом мире, который сами и создали ©
Через много месяцев (да, много историй именно после этого и начинаются) клиент говорит: а чё это за production-backup-Mar-24, давайте её удалим. Как же здорово, что он спросил у нас. Потому что программист клиента на самом деле ничего не починил, а просто свалил в закат, и вся инфра осталась в этом «пофикшенном» состоянии. И база использовалась резервная. Поэтому удалять нужно было сломанную БД с названием production, а рабочей была именно production-backup-Mar-24.
❯ Детектив kesn и загадочные тормоза
Серьёзно, я уже подумываю написать книгу про похождения детектива kesn’а.
Как-то я отлаживал асинхронный код, он читал бинарные данные с девайса, парсил их и отправлял куда подальше. Конечно, меня позвали, когда этот код начал тупить и кое-как работать, поэтому на входе меня ждала портянка спагетти-кода. Нам не привыкать, и я начал рефакторить и замерять скорость при помощи @funcy.log_durations.
Я кэшировал функции, пропускал ненужные фрагменты данных, уменьшал циклы. Сначала стало быстрее, но потом чем больше я отлаживал, тем медленнее код работал. Может, мой рефакторинг упустил какую-то важную деталь, и поэтому я делаю что-то совсем не то? Я начал логгировать и отлаживать даже самые маленькие функции. В конце концов дошло до того, что я, кажется, всерьёз начал задумываться об оптимизации скорости словарей в питоне (sic!), и в то же время моя версия работала медленнее, чем оригинальный код.
Потом до меня допёрло.

Чем больше я добавлял отладочной инфы, тем больше был оверхед. То есть я делал программу быстрее, но отладочная инфа делала программу медленнее.
Ха-ха. Я выключил отладочную инфу, и всё залетало. Ну и дурак!
Если вам понравилась эта статья, то посмотрите вот эту, она тоже весёлая: Погромист. Мои самые эпичные провалы за всю карьеру.
Если вам понравился я лично, как умная и образованная гиена, то вот моя тележка: Блог погромиста
Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Кодить станет легче
Собрали для вас в одном посте сервисы, которые помогут кодить более комфортно, а где-то даже исправят ваши ошибки и чему-то научат
Adrenaline – нашумевшая тулза, которая вылечит код и подробно расскажет об ошибках
Tabnine – предсказывает следующие строки кода и дописывает их за вас. Поддерживает все популярные языки
CodePal – помощник, который поможет писать код по текстовому запросу, оптимизировать, находить баги и ревьювить код
CodeGPT – решение на основе нейронки от OpenAi, Втыкается прямо в VSCode и сочиняет вам код по текстовому запросу
Autobackend – поможет с бэкендом. Сервису достаточно одного-двух предложений на английском
Codesnippets – генерит код из текстовых запросов. Есть отладка, рефакторинг и сохранение кода для остальной команды
BuildtAI – поисковик для VSCode, который ищет готовый код по общедоступным базам данных
Большая коллекция книг по программированию тут!

Ответ на пост «Советы тем, кто реально хочет стать программистом»
в IT котируются две вещи: мотивация, мозги и умение считать до трех)
А если серьезно — лучше в IT идти менеджером\QA и т.п., чем программером. Если человек не стал программером к сознательному возрасту, то зачем тратить столько сил, когда можно получить результат (деньги и интересную работу) проще?
Но, все же, если прям в программеры, то вот мой список в порядке убывания приоритета:
1. Определиться, в какой области программить: фронт? бэк? низкоуровневые котроллеры? хайлоад? бигдата? геймдев (фронт? бэк? ии?). Для каждого пункта свой набор требований и дальнейшие пункты
2. Определиться, какое количество ресурсов ты готов на это потратить. Это хобби, потенциально могущее перерасти в работу? Это сфера деятельности? Ты свободен как ветер и можешь позволить себе экспериментировать, или у тебя семеро по лавкам и зарплата тебе нужна вот прям через месяц? Ты можешь убить полгода на то, что не выгорит?
3. Исходя из п.2 трезво оценить п.0: качество своих мозгов и длину шила в попе. Одно, в принципе, компенсируется до некоторой степени другим. Т.е. человек после ядерной физики даже без особой мотивации освоит, условно, питон для бигдаты или С для контроллеров. Человек, который (мое увожение) смог соскочить с иглы или дочитал Улисса, в состоянии освоить рихтера и пойти джуном в c#.
Если же и с тем, и с другим швах, то стоит подумать о своих сильных сторонах. Умеешь рисовать — рисуй персонажей. Умеешь систематизировать — иди в аналитики. Умеешь работать с людьми. ну вы поняли
4. В IT очень быстрый фидбек. Не плитку класть, конечно, но и не работы уровня нобелевки, когда человек полжизни работает на свое имя, а потом имя на него. Тут ты сегодня чего-то стоишь, а завтра пролетаешь, как фанера над Парижем. Ты либо тащишь, либо вседавайпока. Плюсы такой ситуации — шанс есть у каждого. Минусы — расслаблять булки не получится. Люди без поинтов из п.3 тупо не задерживаются в IT, вне зависимости от специализации.
5. В зависимости от выбранного на п.1 направления, прокачивать соответствующие скилы. Например, в моей области (c#, микросервисы, бэк) знание алгоритмов сортировки ну никак не поможет работе. А вот понимание, на каком уровне модели OSI реализуется TLS — очень даже. Умение написать обход дерева пригодится едва ли, а понимание отличия асимметричного шифрования от симметричного — более чем. Даже знание принципов ооп (король умер, да здравствует король) не так уместно, как, например, навык профилирования SQL-запроса. А уж сколько я видел менеджеров, которые перт-диаграмму даже в уме не строят (не надо так).
6. И да, самое главное — это получать удовольствие от того, что делаешь. Иначе тут вообще никак, спечёшься. А для этого нужно понимать, что доставляет тебе удовольствие, понимать себя (тут уместны аналогии с сексом). Меня, например, штырит от состояния потока. Про это сказано много, по делу и не, но вкраце: в потоке качество твоей жизни подпрыгивает. С этим мало что может сравниться. Как сказал один коллега, ты получаешь кайф, а тебе за это еще и деньги платят) А если у тебя уже есть в своей области поток, подумай хорошенько, стоит ли его терять!

Ответ на пост «Советы тем, кто реально хочет стать программистом»
Принцип подстановки Лисков на паровозиках: у васть есть базовый класс Паровозик. От него наследуются (т.е. развивают идею Паровозика), четырехколесный Светлячок, восьмиколесный Муравей, шестнадцатиколесный Верблюд и восьмиколесный Стрела. При этом у вас есть водонапорная станция, которая умеет заправлять водой, станция с углем и рельсы. Каким бы ни был паровозик, он ездит по рельсам, станции умеют заправлять его водой и углем, при этом они не задумываются, что это за паровозик. Потом вы придумываете электровоз, но он не может развивать идею паровозика, поэтому вы решаете, что сделаете базовый класс Поезд, от которого наследуется Паровозик и Электровозик, с Поездом умеют взаимодействовать рельсы, с Паровозиком — водонапорная станция и станция с углем, а ЛЭП умеют взаимодействовать с Электровозиком.
Кажется, кто-то умный сказал, что если ты не можешь ребенку объяснить сложную вещь, ты ее не понимаешь.