Язык — лишь малая часть того, что вам нужно знать. Может быть около 5%, а то и меньше.
Эта статья повторяет и дополняет содержание моего выступления «Что отличает джуниора от сеньора или как питонисту не иметь проблем с поиском работы» на последнем MoscowPython Meetup 39. Многие обращались ко мне после выступления с вопросами и я обещал опубликовать статью на Хабре и обсудить в комментариях.
Под катом вы найдете ответ на тему статьи
и немного оффтопа
. Имейте ввиду, что эта статья написана мной лично, по моему практическому опыту, так как у меня редко когда-либо возникали трудности с поиском работы. Она может отличаться от опыта других людей и я буду очень рад любым дополнениям и исправлениям, если я в чем-нибудь неправ.
Ответы будут чуть ниже
Сперва расскажу о результатах опроса с митапа (если кто был там или слушал трансляцию):
Кто же приходит на митап?
Из поднявших руки примерно по трети — джуниоров, мидов и сеньоров и совсем немного — тимлидов и технических директоров. При этом подняли руки примерно половина и кто остальные — остается загадкой
Есть ли вообще проблема?
Далее на митапе я спрашивал есть ли у присутствующих проблема поиска работы. Для неуверенного большинства проблем нет, но соотношение, на вскидку, примерно 60/40 (из тех кто поднял руки). Так что тема определенно актуальна и статья многим может стать полезной.
Как устроиться работать джуниором?
Это почти самый популярный вопрос, на который я отвечу так: работодатель вряд ли наймёт вас, если вы вообще ничего не знаете и не имеете никакого опыта. Весьма редко работодатели нанимают джуниоров и это зачастую что-то типа экперимента — вдруг поймаем реально таланта, который резко станет мидом, а мы сможем платить ему зп джуниора? Поэтому мой вам совет: не старайтесь устроиться джуниором, а лучше как следует изучите то, что здесь написано и сразу цельтесь в миды. Многие не знают и половины того, что надо и их берут только из-за «опыта» (зачастую бестолкового). Короче не бойтесь и не считайте себя ни на что не способными, вооружайтесь знаниями, практикуйтесь и ничего не бойтесь!
Что нужно знать
- Английский язык. Он нужен для чтения документации, примеров на stackoverflow и статьей
, а так же чтобы клеить иностранок, когда будете ездите в отпуск. Многие в России имеют печальный опыт обучения языку в школе и в институте, но на самом деле, ребят, это действительно на 95% проблема системы образования, а на остальные 5% — отсутствие реальной необходимости в языке. Не существует людей (не считая немых и больных амнезией), которые не смогли бы научиться говорить на английском, а уж тем более свободно читать. Почти все вы уже умеете читать со словарем и для начала этого вполне достаточно. - POSIX-операционная система. Конечно с появлением docker и прочих vagrant’ов это стало не так критично как ранее, но все же работать на UBUNTU или MacOS на порядок комфортнее из-за нормальной нативной консоли (особенно под убунтой) с ее командами ls, cd, cat, ps, grep, kill, killall, vim, ssh, cp/scp и множеством других, используемых ежедневно в работе. Оболочка bash, переменные окружения, ssh и ключи доступа к удаленным машинам — все это используется весьма и весьма часто. Как изучать? Да никак особо, просто установите и пользуйтесь, постепенно само все изучится, ну можно статейки по отдельным командам посмотреть.
- Python и его структуры данных. Структуры данных называются в питоне немного иначе, чем в других языках. Для изучения синтаксиса я настоятельно рекомендую самый обычный туториал на официальном сайте, он отлично написан — если не сильны в английском заодно и попрактикуете. Помните, если вы собираетесь работать питонистом, то английский нужен будет постоянно.
- Библиотеки Python. Именно знание их в основном от вас будут ожидать работодатели. О существовании некоторых достаточно просто знать, а некоторые нужно знать хорошо. Django сейчас в тренде и хорошее знание этого фреймворка сильно упрощает поиск работы. Вкратце: с одним лишь знанием языка вы нафик никому не нужны. Нужно иметь представление о популярных библиотеках, а найти список таких можно просто полистав вакансии.
- Форматы данных XML, HTML, JSON. Это форматы данных, без которых нынче никуда. Для изучения XML я рекомендую почитать документацию lxml (и попробовать все примеры оттуда), для HTML — htmlbook.ru, для json — хотя бы просто погуглите что это.
- Протокол HTTP. Имхо, самое полезное в нем это знать статусы сообщений HTTP, что такое cookies, session, заголовки, тело и reason. Мне кажется статьи в википедии хватит для начала, но может кто подскажет хорошую статью?
- Базы данных. Их можно изучать годами — настолько обширная тема и хорошее знание баз данных, умение оптимизировать структуру и запросы необходимы чтобы стать ведущим разработчиком с большой зарплатой. Но для начала вам нужен хотя бы минимум — уметь установить СУБД и знать что такое INSERT, UPDATE, SELECT, JOIN, GROUP BY для реляционных баз. Лично я рекомендую PostgreSQL, так как она хорошо поддерживает гео-данные, которые нынче в каждом втором стартапе. Помимо реляционных, вам надо знать, что есть ещё noSQL типа Mongo (и зачем они нужны) и key-value хранилища типа Redis.
- (очень желательно) Javascript, jQuery и прочие AngularJS. Сейчас все больше сайтов уже не генерят HTML, а асинхронно обмениваются с сервером информацией и ее отображают. Надо понимать зачем это все и из этого вытекает следующий пункт.
- (желательно) Архитектуры информационных систем. Фактически хорошее понимание архитектур вкупе с хорошим знанием баз данных делает вас сеньором. www.insight-it.ru — к сожалению мало обновляется последнее время, но даже то что там есть я нахожу крайне полезным.
- (желательно) Еще один тренд — это асинхронное программирование. Это не является чем-то необходимым для того чтобы найти работу, но это может быть вектором для дальнейшего развития.
Не пугайтесь такого большого списка. Английский и ОС изучаются по ходу, не нужно отдельно тратить на это месяцы и годы; Python, основы баз данных, форматы данных, HTTP изучаются за считанные дни, доскональное их знание не требуется, если это не отмечено в вакансии отдельно. Изучение архитектур, знакомство с Javascript — этим конечно можно заниматься годами, но для начала тоже можно лишь ознакомиться.
Пожалуй, единственное что я настоятельно рекомендую, это освоить какой-нибудь фреймворк и сделать что-нибудь реальное, что можно будет показать. Готовый сайт, пусть даже простой, выложенный на хостинге — это показатель того, что вы освоили каждый из множества небольших шагов на пути.
Постойте, а как же алгоритмы?
После митапа ко мне подошел один парень и спросил «а как же алгоритмы?». За 6 лет работы Python-разработчиком мне довольно редко приходилось писать что-то действительно не тривиальное, в основном все сводится к каким-нибудь манипуляциям с данными, их преобразование из одной формы в другую для дальнейших нужд ну и элементарная логика уровня школьной информатики. Чаще всего все алгоритмы давно реализованы в рамках специфичных библиотек и легко доступны.
Что нужно уметь?
- Читать чужой код — если не умеете, то фактически вы не умеете пользоваться существующими ресурсами и каждый раз будете пилить велосипед. Как правило это не эффективно (ну давайте может быть еще язык программирования каждый раз снова создавать под каждую задачу?). Со временем вы поймете, что иногда быстрее написать что-то свое, но по началу — старайтесь учиться у других. Даже если вы в итоге решите писать что-то свое, у вас будет уже хоть какое-то представление о том как надо или как не надо делать.
- Владеть IDE — это и ускорение написания кода и возможности отладки, тэстирования кода, подсказки ошибок и недочетов, где вы не следуете гайдлайнам, множество полезных инструментов. Я рекомендую PyCharm или PyDev — они достаточно зрелые и имеют хороший функционал прямо из коробки.
- Сразу осваивайте и пользуйтесь стандартными инструментами — virtualenvwrapper, pip. Недавно наткнулся на pyenv — имхо тоже хорошая штука.
- Немножко сисадминить — это пересекается со знанием ОС, рано или поздно надо все-таки уметь настраивать софт на сервере где ваше приложение/сайт будет жить (Дима, привет).
- Совсем забыл сказать на митапе и ребята подсказали: конечно же системы контроля версий — хотя бы только git, но не помешают и mercurial с svn — мало ли где с ними столкнетесь. НИКОГДА не используйте архивы и прочий PHP-стайл. Владение git должно быть чуть ли не выше, чем самим Python, если вы устраиваетесь на работу в команду. Посмотрите github.com, bitbucket.org.
- (желательно) освоить такие средства как vagrant, docker, puppet/chef/ansible, fabric — если у кого в этом пробелы, советую Moscow Python Conf, я вот сам пойду, если будет возможность.
Все это — постоянно используемые в работе инструменты, без знания которых даже отлично владея языком вы будете обузой для команды, потому что либо вы будете медленно работать (не используя IDE), либо постоянно писать велосипеды не используя существующие решения (не читая чужой код; особенно извращенная форма — не изучив даже код своих коллег в рамках проекта), будете испытывать проблемы с переходом на новые версии используемых библиотек (не используя virtualenvwrapper), дергать других при любой задаче связанной с сервером (не имея элементарных навыков админа), создавая лютый зуд в заднице коллег косячными коммитами (не зная git). Вас проще будет убить, чем прокормить в команде, а ваша эффективность может быть даже отрицательной, потому что другие могут тратить время на исправление ваших косяков и помощь вам. Поэтому потратьте немного времени, освойте эти инструменты, это тоже совсем-совсем не долго.
Что нужно понимать
С этого я начал свое выступление на митапе, потому что в устном выступлении сперва надо было наладить контакт с аудиторией, но здесь я постарался это сократить.
Помните, что для работодателя вы — инструмент решения бизнес-задач, которые в будущем должны принести ему выгоду. Поэтому фактически ваша задача на собеседовании убедить его, что платить вам зарплату — выгодное вложение денег. Вас нанимают не по клавиатуре стучать, а генерировать прибыль.
Язык — лишь малая часть того, что вам нужно знать. Может быть около 5% или даже меньше.
Таблица соответствия того, что нужно работодателю и как вы можете ему с этим помочь
Мечта работодателя | Что от вас требуется |
---|---|
делегирование — поставил задачу и её сделали правильно без твоего участия | не боитесь брать на себя ответственность и достаточно компетентны |
скорость разработки (основное преимущество питона) | владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна |
надежность системы | тэстирование собственного кода насколько это возможно или требуется |
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) | знакомство с гайдлайнами (pep, import this) и по возможности следование им |
эффективность системы | знакомство со свежими технологиями, библиотеками и другими приложениями |
эффективность разработчика | заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны. |
предсказуемость, возможность планирования | ваши планы на ближайший год ясны |
Интересно что он ей такое сказал на самом деле?
Советы
- Развивайте коммуникацию. Когда ищете работу — ходите на как можно больше собеседований. Успех собеседования напрямую зависит от навыка коммуникации и она отлично оттачивается на собеседованиях.
Вот вам пример
Приехали мы как-то в баню, и там чувак вениками орудует. А я веников 3 года не видал — в Азии туго с ними. Ну я ему “ого, братюня, фартануло тебе, где ты веников раздобыл?”. Он мне: “да вот привез с собой из России, че хочешь я тебя тоже напарю?”. Ну я не дурак отказываться, конечно. Пообщались с ним, нормальный такой чувак. Ну и разъехались по домам. Через пару недель опять приезжаем — там он же, опять с веником, стали снова общаться, он меня и спрашивает, мол, “а ты вообще чем занимаешься?”. Я говорю ну так-сяк, вот коворкинг у меня свой, а в свободное время на питоне программирую. Он “да ладно? Мне как раз питонщики нужны”. Оказался он основателем небезызвестной компании и я до сих пор с ним работаю.
Помимо собеседований рекомендую играть в мафию (только не по турнирным правилам, а таким, когда возможна дискуссия, но чтобы без балагана — это очень круто тренирует нервы и навык общения), ходите на хакатоны, митапы, конференции. Не пропустите, кстати, Moscow Conf, такие конференции даже не каждый год бывают — это вам не митап двухчасовой, а реально можно за день наобщаться с опытными ребятами, позадавать вопросы спикерам.
- Навык продаж. Этот навык позволяет иметь ЗП выше рыночной. Вряд ли конечно вы побежите работать продавцом, но если у вас есть такой опыт, то считайте это плюсом.
Антипример:
Жил у нас в коворкинге один парень — крутейший JS-программист, уровня сеньора с зп 120000+. Работает за 80, потому что неловко себя чувствует на собеседованиях, не может себя правильно позиционировать.
- Привирайте. Слегка, ну может процентов на 20, не больше. Например, можно сказать, что вы знаете что-то, о чем вы всего лишь слышали или слегка знакомы.
Правда жизни
Правда жизни в том, что как правило, никто не держит в голове все что он когда-либо делал. Сколько есть случаев, когда человек начинает искать ответ на какой-то вопрос, а находит свою собственную статью на эту тему 1-3 годовой давности. В конечном итоге работодателю как правило важно чтобы вы умели решать поставленные задачи, а не были ходячей энциклопедией.
- Чаще меняйте работу. Профессиональный рост на новом месте работы длится обычно порядка 2-3 месяц, изредка до полугода, потом начинается рутина и мало нового. Чтобы этого избежать, надо как можно чаще менять место работы (примерно раз в полгода-год). Как вариант — переходить на другую должность или в другой проект в рамках одной крупной компании, но если вы засиделись на одной позиции уже год и никаких изменений не предвидится — смело уходите.
Исключения
Исключения для этого совета: если вам ну очень интересен проект в котором вы работаете и/или у вас есть опцион и проект явно ждет успех.
UPD Этот пункт вызвал много споров в комментариях. Дело в том, что вас нанимают не за карму, а за ваше умение делать работу. Сидение 5 лет в одной конторе и делание одного и того же все это время сделает из вас мастера делать это одно и то же, но не сделает вас действительно хорошим специалистом. Умение решать любую задачу — это ценно, для этого вам надо сталкиваться с как можно большим количеством различных задач. Не надо впадать в крайности и менять работу каждые 2 месяца — это конечно чересчур (но и бояться уйти с говноработы где вам реально не нравится тоже не стоит — уходите и не парьтесь). В конечном итоге удержать вас в проекте — это головная боль работодателя, а не ваша. Это немного цинично, но это лишь совет и вам самим решать. Просто имейте ввиду — если вы уйдете с работы где как вы чувствуете у вас остановилось развитие или тем более вам что-то не нравится — скорее всего будет хорошей идеей.
- Изучайте смежные отрасли, новинки, новые библиотеки. Дедушка Ленин завещал ведь.
- Работайте за валюту напрямую на иностранных работодателей. Хорошим специалистам — на toptal.com, попроще — на upwork.com. С хорошим английским переехать в США, Австралию, Германию и прочие Великобритании дело вообще не хитрое.
как я английский выучил
Сперва я 9 лет изучал английский в школе, потом 3 года в институте и уже мог разве что читать и переводить со словарем. Потом я несколько лет оттачивал навык чтением документации, но сказать сложнее «how much for coconut» получалось с трудом. Первым действительно эффективным шагом был просмотр видеоуроков Дмитрия Петрова «Полиглот» с канала Культура, следующим шагом — практика общения с иностранцами в нашем коворкинге на Пхукете, ну а совсем легко стало после женитьбы на филиппинке. Кроме всего прочего один мой знакомых открыл школу английского с уникальным методом, который позволяет за месяц-два обучиться, правда это на Пхукетике опять же.
- Идите вообще на воркшоп. В США это нормальная практика — окончив школу (даже не вуз, представьте себе) пойти отучиться 2-3 месяца на воркшопе и всё — ты уже востребованный специалист, который без труда найдёт высокооплачиваемую работу наравне с выпускниками вузов и с опытом работы. Это мне рассказал один молодой-парень, американец, который жил у нас в коворкинге и прошёл именно такой путь. У нас в России такой практики пока, к сожалению, нет (чаще это трата 5 лет в вузе, просто курсы синтаксиса языка, который, как я надеюсь вы поняли — лишь малая часть того, что нужно знать). После митапа у меня возникла идея организовать воркшоп, но в конце октября я уже улетаю обратно в Азию и просто не успею провести его здесь. Поэтому если есть желающие уехать на зимовку вместе с нами, а заодно научиться всему тому, что я тут написал — пишите в личку, что-нибудь придумаем.
UPD: В комментариях выразили мнение, что эта статья относится только к веб-разработке на питоне. Это не совсем так, просто веб-фреймворк Django, который я советую к изучению является самым востребованным на данный момент в чем легко можно убедиться. Вы можете запросто выбрать другое направление и большая часть статьи так же останется актуальной, но легко ли вам будет найти работу — я не знаю. Более того, совет про изучение других популярных библиотек именно на то и нацелен, чтобы вы не ограничивались только лишь Django и расширяли свои знания по другим направлениям.
Буду бесконечно признателен за любые дополнения и постараюсь оперативно добавлять их в статью! Про орфографию пишите, пожалуйста, в личку, чтобы не засорять комментарии.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Так как у вас с поиском работы?
32.44%
вообще без проблем!
291
27.2%
ничего найти не могу
244
40.36%
ни разу не пробовал
362
Проголосовали 897 пользователей.
Воздержались 348 пользователей.
ПрограммированиеКарьера+3
Dmitriy Dimidov
28 января 2022 · 1,3 K
Пофигист с большим жизненным опытом, обремененный образованием и личной жизнью… 😉 · 1 февр 2022
да, сложно – ибо конкуренция… но проектов как и работы много, поэтому и не очень. Главное уметь и знать, а также пройти собеседование… — это само по себе сложно. если вы его прошли и вам предложили работу – значит подходите… а дальше вам уже нужно будет доказать что вы чего-то стоите.
1,2 K
Комментировать ответ…Комментировать…
Зависит от того, на сколько программист “начинающий”. Мне приходилось встречать людей, которые называли себя джунами при разбросе уровней от “вчера книжку по программированию увидел” до “по мозгам вполне себе миддл, но без опыта работы по профилю”.
В небольших компаниях ловить джуниору, обычно, нечего. Там, чаще, берут людей с опытом, хотя бывают и исключения, если на… Читать далее
1,5 K
Комментировать ответ…Комментировать…
Тыжпрограммист со стажем более 10 лет. Собрал сотню компов, установил и настроил винду… · 28 янв 2022
Да, сложно. Потому что начинающие никому не нужны, все ищут уже готовых синьоров да еще чтобы шарили в куче барахла типа Докершмокер или SQL там всяких….
1,2 K
Вопрос на общую тему (с индивидуальным характером) может быть разъяснен только общими словами, все иное считается… Читать дальше
Комментировать ответ…Комментировать…
Python — самый быстрорастущий язык программирования за последние несколько лет. Специалисты по Python востребованы на рынке труда. Поэтому многие начинающие программисты и задумались об изучении этого относительно простого и современного языка программирования, но овладеть навыками программирования на Python – только половина пути к успеху. Остается найти место работы, которое будет устраивать и по уровню заработной платы и по удобству рабочего графика. Поиск работы мечты возможен с помощью большого количества сервисов. Предлагаю рассмотреть некоторые из них.
Если хотите работать только на себя и не зависеть от рабочего графика, хотите сами выбирать сколько работать и соответственно сколько зарабатывать, то идите на фриланс биржи:
На Kwork нет никаких платных подписок и неоплачиваемых тестовых заданий, работайте сразу и без вложений, а платой за сервис будет 20% с каждого заказа. Выше оборот с клиентом – ниже комиссия, если достигнуть цифры в 300000, то комиссия снизится до 7,5%. Здесь вы сможете как предложить услугу, так и откликнуться на предложение заказчика, размещенное на бирже. От скорости и качества выполненной работы будет зависеть ваш рейтинг, а от рейтинга уже зависит степень доверия работодателя и соответственно вероятность получения нового заказа. Из-за популярности Кворка фрилансеры вынужденно занижают стоимость работы, чтобы получить заказ, но это проблема не столько Кворка, сколько всего фриланс рынка.
На Kwork Python-разработчик может брать заказы по направлениям:
Доработка и настройка сайта;
Создание сайтов;
Скрипты и боты;
Мобильные приложения;
Сервера и хостинг.
Еще одна популярная биржа, но без платной подписки не получится брать заказы. PRO аккаунт стоит 2500 рублей. Тут уже каждый для себя решает стоит ли платить за возможность работы, при условии, что заказы никто не гарантирует.
Специалист по Python может выбирать из этих разделов:
Разработка сайтов;
Программирование;
Разработка игр.
Если предыдущие фриланс биржи предоставляли возможность работать фрилансерам разных специальностей, то Хабр Фриланс создали специально для работников сферы информационных технологий. Из минусов: в сутки получится откликнуться только на 5 предложений. За возможность откликаться на большее количество заказов сервис берет плату 99 рублей за один отклик. Возможно купить безлимитное количество за 270₽ в сутки, 490₽ в неделю, 1200₽ в месяц или 7300₽ в год. Также биржа не регулирует платежи менее 3000 рублей, что не подходит новичкам, ведь им доверяют заказы меньше этой суммы.
На Хабр Фриланс намного больше, чем у конкурентов, разделов, посвященных разработке на Python.
Выбор бирж в СНГ огромен, но они не без недостатков. Остается искать заказчиков за границей. Upwork позволяет работать с нанимателями из разных стран. На этой бирже заказчики готовы платить больше, но и требования у них соответствующие. Если ваш уровень английского позволяет работать с иностранцами, то определенно стоит попробовать зарегистрироваться на Upwork. Сервис не просит оформить платную подписку или же купить право откликаться на заказы. Биржа берет 20% с выполненного заказа. То есть вы можете начать зарабатывать без вложений.
Итак, чтобы работать только на себя, нужно идти во фриланс. Как мы уже поняли, фриланс бирж много и перечисленные в статье – малая часть ассортимента, представленного на рынке труда. У каждой площадки свои минусы и плюсы, и каждый преследует свои цели и задачи, но для всех бирж действуют следующие правила:
- Необходимо внимательно заполнять профили и портфолио, чтобы работодатель сразу оценивал ваши способности и понимал отдавать вам заказ или нет.
- Придется потрудиться для получения первых заказов, ведь без хорошего рейтинга и отзывов заказы будут добываться с трудом. Со временем, когда в вашем профиле будет много положительных отзывов с заказами проблем не будет.
- Не стоит беспокоиться насчет безопасности сделок. Если следовать правилам биржи, то вы и ваши честно заработанные деньги будете защищены. Везде техподдержка решит проблему и заминок с выводом или получением денег не возникнет.
С темой фриланса мы разобрались, но что делать тем, кто хочет работать в крупной IT компании? Нужно идти на популярные сайты по поиску вакансий:
Это крупнейшая российская компания интернет-рекрутмента. С hh.ru сотрудничают свыше 350 тысяч компаний. Среди них присутствуют такие IT-гиганты, как Yandex, Ozon, Nvidia.
По запросу “Python разработчик” (Стоит писать без дефиса. Так hh.ru и другие сайты находят больше вакансий) сайт выдает 9751 вакансию.
Как и на фриланс биржах вы можете как откликнуться на вакансию, так и разместить свое резюме, чтобы работодатели сами нашли вас. Если вы специалист высокого уровня вас непременно заметят и предложат высокооплачиваемую должность.
На сайте гибкая система фильтров, где можно подобрать вакансию по разным параметрам. Даже без опыта работы велики шансы найти должность стажера или junior-разработчика. Также hh.ru рассылает письма на электронную почту с подбором подходящих вакансий. Если вам ответил работодатель, то сразу же приходит уведомление на e-mail, что избавляет от необходимости постоянно открывать сайт для проверки.
Авито – известный российский сайт по предложению услуг.
По запросу “Python разработчик” сайт выдает маленькое количество предложений. Видно, что IT компании не заинтересованы в поиске сотрудников через Авито. Фильтры для поиска не гибкие, например, отсутствует возможность выбрать проф. область компании.
Еще один проект Хабра, соответственно Хабр Карьера предназначен исключительно для IT-шников.
По запросу “Python разработчик” сайт выдает почти 3000 вакансий. На площадке присутствуют многие топовые российские IT компании: Яндекс, Лаборатория Касперского, 2GIS, Tinkoff, МТС, Билайн, Сбер. Предложения сортируются даже по профессиональным навыкам, что очень удобно.
Параллельно с поиском на специализированных сайтах не лишним будет и отсылать резюме в интересные вам компании. Контакты для связи можно найти на официальном сайте организации.
Теперь стало ясно, на каких сайтах стоит подбирать подходящие вакансии, чтобы трудиться на благо чужой компании. Если же вы хотите основать свою компанию и быть как Стив Джобс, Билл Гейтс или Павел Дуров, то запускайте стартап. Этот путь подразумевает огромные риски. В один момент можно потерять все, и это не преувеличение. Неудавшийся стартап может обречь на вечное выплачивание кредитов. Однако если у вас в голове засела гениальная идея, вы толковый разработчик с предпринимательской жилкой, лидерскими качествами и непреодолимым желанием покорить мир – ищите инвесторов, нанимайте команду и работайте над личным проектом.
Популярные места поиска работы мы уже рассмотрели, но остаются еще не самые очевидные, но не значит бесперспективные способы поиска.
Telegram-каналы
В этом мессенджере много полезного для разработчика контента: каналы с технической литературой, тематические чаты, а также каналы, где публикуются вакансии, которых нет на популярных сайтах, можно найти каналы, которые специализируются именно на Python и регулярно получать информацию о новых вакансиях.
В постах компании сразу выдвигают требования к будущему сотруднику, обозначает навыки и умения, которыми он должен обладать. В роли фильтров здесь выступают хэштеги. Вакансии добавляются несколько раз в день.
Личные связи
Те, кто учился или учится в ВУЗе на одну из IT специальностей могут попросить своих преподавателей, чтобы они рассказывали о вас знакомым работникам местных компаний, которые заинтересованы в поиске молодых и талантливых разработчиков. Если вы были хорошим студентом, то наставники будут только рады помочь устроиться на высокооплачиваемую должность.
Не лишним будет и самому поднапрячься и постепенно обрастать выгодными знакомствами из мира технологий. Полезно иметь товарищей, которые могут позвать работать к себе в компанию.
яндексPython — один из самых популярных языков программирования. В рейтинге Stack Overflow 2020 года он занимает третье место. Его легко освоить, а на рынке нет дефицита вакансий. По запросу «Python-разработчик» HeadHunter предлагает 3340 вакансий за месяц. Python используют при создании веб-приложений, в машинном обучении и Data Science. Анастасия Новикова, автор курса «Python-разработчик» в Яндекс.Практикуме, делится опытом прохождения интервью на позицию Python-разработчика и рассказывает, что работодатели обычно ждут от начинающих специалистов.
Анастасия Новикова
автор курса «Python-разработчик» в Яндекс.Практикуме
Какое нужно образование?
Обычно резюме на Junior Python-разработчика подают выпускники или студенты последних курсов технических и математических специальностей. Профильное дополнительное образование, пройденные курсы на Stepik, Coursera или других платформах станут плюсом к основному образованию. Если вы хотите работать в Data Science, то бонусом будут магистерская степень или аспирантура, наличие публикаций и выступления на конференциях.
Работодатели иногда готовы брать на junior-позицию кандидатов без соответствующего высшего образования. Для таких соискателей, как правило, проводят дополнительные испытания, внимательнее относятся к тестовому заданию и учебным проектам в портфолио.
Как проверяют опыт работы?
Обычно опыт работы для начинающих специалистов не обязателен. Но на некоторые вакансии ищут кандидатов с опытом от полугода — года или соискателей, которые прошли стажировку. Если вы нигде не работали, приготовьтесь рассказать про законченные учебные и личные проекты. Личными проектами также интересуются, чтобы проверить заинтересованность кандидата в профессии и его стремление к развитию.
Завершённые проекты можно опубликовать, например, в личном профиле на GitHub или создать сайт-портфолио. На собеседовании вы сможете рассказать, какая перед вами стояла задача, какие технологии вы выбрали и почему. Дополнительные проекты помогут не только прокачать навыки, но и выделиться среди других кандидатов.
Какие soft skills пригодятся в первую очередь?
Помните сериал «Кремниевая долина» и его главного героя Ричарда Хендрикса, CEO «Пегого Дудочника»? Он был отличным программистом, но ему явно не хватало умения общаться с людьми, работать в команде и руководить сотрудниками. На практике одного умения решать поставленные задачи с помощью технических навыков бывает недостаточно, успешность кандидата зависит также от его социальных качеств.
Ответственность, стремление к профессиональному росту, умение управлять рабочим временем и работать в команде — это базовые soft skills, которые нужны практически на любой должности в ИТ-сфере.
От junior разработчика дополнительно ждут умение быстро осваивать новый материал, вникать в суть задач, понимать требования и быть готовым к рутинным задачам. На собеседованиях junior-специалистов могут спросить: «Как вы относитесь к рутинным задачам?» — потому что их работа часто включает монотонные процессы, не всегда творческая. Работодатель не хочет вас напугать — скорее хочет убедиться в том, что вам не станет скучно на этой позиции через несколько месяцев и вы не захотите уйти. Ответ на такой вопрос можно сформулировать так: «Сейчас подобные задачи для меня — возможность получить опыт, на них я смогу отработать свои навыки, чтобы в будущем браться за более сложную работу».
На собеседовании также могут спросить, почему вы хотите работать на этой должности и в этой компании. С помощью этого вопроса работодатель пытается понять, подходит ли соискатель компании, а компания — соискателю. Если вам действительно не интересен проект, то работа в нем вряд ли доставит удовольствие, и вряд ли вы принесете пользу компании.
Изучите перед собеседованием свои будущие задачи, продукты и проекты, с которыми работают в компании, этап развития компании (например, стартап или ИТ-гигант), корпоративную культуру, отзывы сотрудников, местоположение, условия работы. И выберите среди всего то, что вам действительно важно. Это может быть простое «это компания, где я могу полностью реализовать свои компетенции и продолжить карьеру» или «мне кажется, мой опыт отлично подходит под требования» и перечислите ключевые навыки.
Какие технические навыки необходимы?
Основное требование — знание языка программирования Python. Но иногда на позицию Python-разработчика рассматривают специалистов с опытом в других популярных языках (например, C++, Java, Go).
На собеседованиях работодатель может проверить общую ИТ-грамотность, например спросить, как устроен компьютер или как работает интернет. Чаще всего от кандидатов ждут знания алгоритмов и структур данных. В некоторых компаниях есть отдельный этап, или даже несколько этапов отбора, посвященных проверке этого навыка. Про то, зачем разработчику изучать алгоритмы и структуры данных, мы уже писали раньше.
Также на собеседованиях часто спрашивают про опыт работы с базами данных и фреймворками, понимание принципов многопоточного и асинхронного программирования, умение работать в командной строке.
Python-разработчиков также ищут под задачи машинного обучения. Поэтому при отборе на позиции, связанные с Data Science, проверяют знание алгоритмов машинного обучения и умение их применять, опыт участия в соревнованиях на Kaggle или в хакатонах. От соискателей ждут знания математики: теории вероятностей, линейной алгебры и математического анализа.
Что повторить перед собеседованием
Алгоритмы и структуры данных (без привязки к языку программирования). Желательно знать, как устроены массивы, связные списки, хеш-таблицы, множества, бинарные деревья поиска, графы. Какая сложность (в O-нотации) основных операций при работе с ними. Могут также задать вопросы по базовым алгоритмам. Например, попросить рассказать про основные алгоритмы сортировки, бинарный поиск или способы обхода графов.
Структуры данных в Python: примеры применения, различия, преимущества и недостатки. Будьте готовы отвечать на вопросы про числовые типы данных, строки, списки, кортежи, множества и словари. Преимуществом будет знание и опыт применения встроенных в язык структур данных, например, OrderedDict
или defaultdict
из модуля collections
.
Изменяемые и неизменяемые типы данных в Python: в чём разница между ними, примеры использования. Часто просят просто перечислить изменяемые и неизменяемые типы данных, которые вы знаете. Могут предложить решить задачу и спросить, какой тип или какую структуру данных вы бы выбрали для её решения и почему.
Декораторы: что это такое и как они устроены. Могут, например, попросить написать код декоратора для измерения времени работы функции или декоратора с параметром. Полезным будет знание functools.wraps
.
Контекстные менеджеры: что это такое и для чего используют. Могут попросить реализовать контекстный менеджер для работы с файлами, аналогичный встроенному open()
.
Генераторы и итераторы: что это такое, для чего они используются, какая между ними разница. Могут, например, попросить написать генератор чётных чисел или чисел Фибоначчи.
GIL: зачем он нужен и как работает. Вопрос на собеседовании может быть такой: «Могут ли в Python одновременно выполняться больше одного потока?» От начинающих специалистов обычно не требуют знаний про GIL, но они могут выгодно выделить вас на фоне других кандидатов.
Как устроен один из популярных фреймворков, например Django или Flask. Хорошо, если вы понимаете его сильные и слабые стороны. Могут попросить спроектировать базу данных для приложения, написать несколько запросов с помощью ORM или на чистом SQL.
Как работает интернет: понимание модели/моделей OSI/TCP IP, основных протоколов. Популярный вопрос из этого раздела: «Что происходит, когда в поисковой строке вбиваешь google.com?»
Утилиты командной строки. Могут попросить рассказать про пять – десять команд, которыми вы чаще всего пользуетесь.
Потоки, процессы, асинхронное программирование. Например, в чём разница между потоком и процессом, или какие способы межпроцессного взаимодействия вы знаете.
Логические и математические задачи: для их решения может понадобиться школьная математика, базовые знания комбинаторики, теории вероятностей, умение работать с числами в разных системах счисления.
Вряд ли на собеседовании вам зададут вопросы из всех этих разделов. От соискателя на позицию младшего разработчика не ждут, что он верно ответит на все вопросы, скорее, будут смотреть, в правильном ли направлении он думает. Но чем более подготовленными вы будете, тем больше у вас шансов получить желаемую работу.
«Чистый код: создание, анализ и рефакторинг», Мартин Роберт К. «Грязный» код мешает развитию проекта и компании, потому что требует значительных ресурсов на поддержку. В книге много реальных примеров, которые научат отличать плохой код от хорошего. Она пригодится всем начинающим разработчикам, читается легко. Возможно, не всё получится сразу применить на практике, но когда вы столкнётесь с ситуацией, упомянутой в книге, вам будет легче найти решение.
«Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих», Адитья Бхаргава. Думаете, алгоритмы это сложно? Книга убедит вас в обратном. В ней подробно разбирается каждый алгоритм: будет понятно даже ребёнку. Воспроизвести их на любом языке программирования не составит труда.
«Программируем на Python», Майкл Доусон. Автор книги — опытный разработчик. Он помогает освоить фундаментальные принципы на примере создания простых игр. Так вы получите базовые навыки и сможете пополнить портфолио. Для более продвинутых специалистов книга может показаться скучной, главная аудитория — всё-таки начинающие разработчики.
«Python на практике», Марк Саммерфилд. Знания из книги помогут лучше подготовиться к собеседованиям. Подходит начинающим и опытным программистам. В основе четыре темы: повышение элегантности кода с помощью паттернов проектирования, повышение быстродействия с помощью распараллеливания и компиляции Python-программ (Cython), высокоуровневое сетевое программирование и графика.
«Изучаем Python», «Программируем на Python», «Python. Карманный справочник», Марк Лутц. Это несколько книг известного инструктора по Python. Их лучше читать в оригинале. Они помогают восполнить пробелы в знаниях и разобраться в сложных вещах. В «Карманном справочнике» вы найдёте основные сведения о типах данных и операторах, специальных методах, встроенных функциях, которые пригодятся при работе с Python.
«Python. Книга Рецептов», Дэвид Бизли, Брайан К. Джонс. Пособие для начинающих и опытных разработчиков, которое поможет создавать легкочитаемый, оптимизированный и поддерживаемый код. 15 глав охватывают основные темы Python, каждая глава содержит конкретные «рецепты» с примерами кода, которые вы сможете использовать в своих проектах.
«Алгоритмы: построение и анализ», Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн. Это справочник и пособие по алгоритмам, которое пригодится и начинающим разработчикам, и сеньорам, и тимлидам. Описания даются на простом языке, главы независимы друг от друга, можно изучать в любом порядке и объёме.
Эту дорожную карту по профессии Python-разработчика спонсировала онлайн-школа SkyPro. Мы подробнейшим образом расписали путь от полного новичка до джуна, плюс добавили блок-схемы для наглядности. На все про все у вас уйдет примерно 9-12 месяцев в условиях жесткой самодисциплины, но с неизвестным результатом — можете так и не найти работу. Школа SkyPro предлагает вам вкалывать 9 месяцев на учебе и если они не трудоустроят вас за 4 месяца после окончания курса, то вернут деньги (прописано в договоре без звездочек).
Популярность Python растет из года в год, а экосистема языка непрерывно расширяется: арсенал разработчиков постоянно пополняется новыми инструментами, которые дают возможность написать почти любое приложение. Python отлично зарекомендовал себя в веб-разработке, и это закономерно:
- Фреймворки на основе Python отличаются впечатляющими возможностями, функциональностью и гибкостью. На базе Flask и Django, к примеру, можно создать фуллстек-проект, гибридное приложение, API или микросервис.
- Веб-приложения на базе Python легко масштабируются и интегрируются с компонентами и сервисами, написанными на других языках.
- Широкий выбор дополнительных плагинов и модулей для Python-фреймворков позволяет быстро разрабатывать веб-приложения любой направленности и степени сложности.
- Нетривиальные решения для веб-разработки на базе Python появляются с завидной частотой, а проверенные временем фреймворки и модули – регулярно обновляются и совершенствуются.
Благодаря этим преимуществам Python основательно потеснил прежнего лидера в сфере веб-разработки – PHP. Если в 2023 году перед вами стоит выбор – с какого языка начать путь веб-разработчика, – выбирайте Python, не пожалеете. А мы предоставим пошаговую стратегию изучения Python, которая поможет освоить все аспекты веб-разработки.
Python обладает простым и в то же время максимально гибким синтаксисом – одну и ту же задачу на этом языке можно решить множеством различных способов. Однако по оптимальности эти решения могут значительно отличаться друг от друга. Для определения правильного подхода к решению задачи нужно основательно разобраться:
- В особенностях основных типах данных – списков, строк, словарей, кортежей и множеств. К примеру, кортежи работают быстрее списков, а множества – быстрее всех остальных типов, вместе взятых, но при этом используют внушительный объем памяти и не поддерживают индексацию.
- Во встроенных методах, которые Python предоставляет для работы с каждым из этих типов, и в универсальных встроенных функциях. Некоторые функции позволяют лаконично и эффективно выполнять достаточно сложные операции – например, проводить параллельную итерацию нескольких коллекций сразу (zip), или получать доступ к элементу и его индексу одновременно (enumerate), либо применять какое-то действие ко всем элементам сразу (map).
- В методах работы с файлами и файловой системой.
Кроме того, необходимо освоить написание пользовательских функций:
- обычных и вложенных, с фиксированным и произвольным количеством аргументов;
- декораторов и замыканий;
- анонимных (lambda);
- рекурсивных.
Обработка данных в Python, как и в любом другом языке, происходит в циклах – нужно разобраться в особенностях и дополнительных параметрах циклов for и while, в условиях и ветвлениях. Во многих случаях циклы можно заменить генераторами и списковыми включениями – эти конструкции тоже стоит освоить на начальном этапе обучения.
Что еще нужно изучить:
- Как запускать Python-код в онлайн-IDE, не требующих установки – Jupyter Notebooks, Google Colab, Repl.it.
- Как установить и настроить десктопную IDE – PyCharm, VS Code.
- Как устанавливать модули, необходимые для решения специфических задач – pandas, numpy и т.п.
Базовые знания Python, приобретенные на первом этапе, позволяют решать любые алгоритмические задачи: сможете написать программу для шифрования текста кодом Цезаря, код для определения победителя в игре с оптимальной стратегией, скрипт для вычисления и визуализации возможных ходов шахматных фигур.
Второй этап: ООП и основы работы с веб-сервисами
Пора зарегистрировать аккаунт на GitHub, разобраться в концепции системы контроля версий и изучить основные команды Git. Хотя GitHub – не единственный хостинг IT-проектов, его с уверенностью можно назвать самым популярным. Один из плюсов сервиса – бесплатный хостинг для статических сайтов GitHub Pages, где можно разместить любой проект объемом до 1 Гб. Многие разработчики используют GitHub Pages для размещения портфолио, резюме и статических блогов, созданных с помощью Jekyll, Hugo, или генераторов на основе Python – Pelican и Lektor.
Чтобы в репозиториях на GitHub поскорее появились первые серьезные проекты, необходимо вникнуть в парадигму объектно-ориентированного программирования и его основные концепции:
- классы;
- объекты;
- наследование;
- инкапсуляцию;
- полиморфизм.
Кроме того, на этом этапе нужно изучить:
- Обработку HTTP-запросов с помощью библиотеки request.
- Получение данных от публичных API.
- Форматы JSON и XML.
- Регулярные выражения (Regex).
- Основы веб-скрапинга и парсинга с BeautifulSoup и XPATH.
Знаний, полученных на этом этапе, должно быть достаточно, чтобы написать:
- код для поиска и обработки данных в древовидных структурах;
- скрипты для скрапинга и парсинга;
- программы для получения и обработки данных публичных API.
Третий этап: основы веб-разработки
Теперь багажа знаний достаточно для создания первых настоящих веб-приложений. Существует несколько фреймворков на базе Python, но бесспорных лидеров всего два – Flask и Django:
- Flask называют микрофреймворком – он содержит абсолютный минимум инструментов, но отличается впечатляющей гибкостью, подходит для небольших веб-приложений. Функциональность Flask легко расширить с помощью установки дополнительных библиотек и модулей.
- Django поставляется с обширным набором модулей и отличается более жесткой структурой. Отлично подходит для создания масштабных веб-приложений со сложной функциональностью. Как и в случае с Flask, возможности Django можно расширить дополнительными модулями. К примеру, Django по умолчанию включает модуль для тестирования на основе unittest, но при желании протестировать Django-приложение можно с помощью дополнительного модуля django-pytest на основе pytest, и точно такой же модуль flask-pytest доступен для Flask.
Оба фреймворка используют шаблонизаторы – инструменты, которые упрощают передачу и обработку на фронтенде данных, полученных от бэкенда. Однако шаблонизаторы не генерируют HTML и CSS, поэтому базовый синтаксис этих языков нужно освоить на этом этапе. Становиться полноценным фронтендером не потребуется, но необходимо понимание того, как интегрировать в Django готовые HTML/CSS, Bootstrap и Tailwind шаблоны.
Одно из главных преимуществ Flask и Django – наличие ORM, прослойки между базой данных и кодом, которая позволяет программисту работать с БД без знаний языка запросов SQL. В то же время оба фреймворка предусматривают возможность работы с базой напрямую – это может потребоваться для создания максимально оптимизированных запросов на SQL. Для создания небольших веб-приложений подходят базы SQLite и MySQL, для более масштабных – PostgreSQL.
Еще один весомый плюс Flask и Django – простота разработки REST API. Самый популярный инструмент разработки API для Django-приложений – Django REST Framework (DRF), однако при необходимости можно использовать FastAPI и Django Ninja, которые обеспечивают более высокую производительность. Для базового тестирования DRF API достаточно встроенного интерфейса, который доступен по адресу http://localhost:8000/api/, для более продвинутого тестирования обычно используют Postman.
Для создания Rest API с Flask используют инструменты Connexion, OpenAPI и Flask-Marshmallow, а для тестирования – Swagger UI. Процесс разработки API на основе Flask выглядит чуть сложнее, чем создание API на базе Django.
Что нужно уметь после завершения этого этапа обучения:
- Проектировать структуру серверной части веб-приложения.
- Создавать несложные веб-приложения на основе Flask и Django – блоги, лендинги, лайт-версии известных соцсетей и сервисов.
- Разрабатывать бэкенд и API для приложений, фронтенд которых сделан на JS-фреймворках React, Vue, Angular.
- Размещать статический контент в CDN.
- Понимать, как пишутся запросы к бэкенду с помощью Fetch или Axios.
- Использовать линтеры (Flake8, Ruff) для «причесывания» и стандартизации кода.
- Писать тесты для проверки работы компонентов приложения и API.
- Разворачивать приложения на Linux сервере с помощью Nginx и Gunicorn.
Четвертый этап: продвинутые инструменты и концепции
В набор более сложных концепций, в которые стоит вникнуть на заключительном этапе, входят:
- Принципы разработки высоконагруженных/асинхронных приложений и микросервисов.
- Управление очередями задач и брокеры сообщений: Celery, Dramatiq, RabbitMQ, Redis, Kafka.
- Веб-сокеты и Django Channels.
- Передача потоковых данных с WebRTC.
- Вебхуки (обратные вызовы).
- CI/CD (непрерывная интеграция и доставка) для Django-проектов: Jenkins.
- Контейнеризация Django- и DRF-приложений: Docker и Kubernetes.
- Безопасность приложений на основе Django и Flask: предотвращение SQL-внедрений, межсайтового скриптинга и подделок запросов.
Знание этих концепций позволит разработать сложный проект — чат-мессенджер для аудио- и видеоконференций, маркетплейс, стриминговый сервис, корпоративную CRM.
Мне нужно оперативно освоить Python с нуля и получить работу. Крайний срок — 9 месяцев. Какие есть варианты?
Веб-разработку на Python вполне реально освоить самостоятельно — понадобится 9–12 месяцев, набор хороших учебных материалов, серьезная мотивация и жесткая самодисциплина. Однако отсутствие обратной связи от опытного ментора может отрицательно сказаться на эффективности процесса. В этом случае лучше сделать выбор в пользу полноценного курса, в котором предусмотрено выполнение домашних заданий, а все аспекты разработки изучаются в процессе создания реальных веб-приложений.
Например, на курсе «Python-разработчик» от Skypro за 9 месяцев вы освоите веб-разработку на Python и найдете работу. Skypro вернет деньги, если не устроит вас на новую работу за 4 месяца после окончания курса (прописано в договоре без звездочек). В программу обучения входит:
- Основы программирования на Python и основы веб-разработки.
- Продвинутые инструменты Python.
- Работа с Git/GitHub.
- Разработка API на Flask и Django и деплой приложений на хостинг.
- Работа с SQL, SQLAlchemy и Django ORM.
- Индивидуальная проверка домашних заданий и поддержка наставника.
- Помощь в подготовке к собеседованию и 6 консультаций с рекрутером.
- 400 часов обучения и 7 проектов в портфолио.