Язык — лишь малая часть того, что вам нужно знать. Может быть около 5%, а то и меньше.
Эта статья повторяет и дополняет содержание моего выступления «Что отличает джуниора от сеньора или как питонисту не иметь проблем с поиском работы» на последнем MoscowPython Meetup 39. Многие обращались ко мне после выступления с вопросами и я обещал опубликовать статью на Хабре и обсудить в комментариях.
Под катом вы найдете ответ на тему статьи
![no problem](https://habrastorage.org/files/341/fef/0bc/341fef0bc17842908044ce8697242dd1.jpg)
Ответы будут чуть ниже
Сперва расскажу о результатах опроса с митапа (если кто был там или слушал трансляцию):
Кто же приходит на митап?
Из поднявших руки примерно по трети — джуниоров, мидов и сеньоров и совсем немного — тимлидов и технических директоров. При этом подняли руки примерно половина и кто остальные — остается загадкой
Есть ли вообще проблема?
Далее на митапе я спрашивал есть ли у присутствующих проблема поиска работы. Для неуверенного большинства проблем нет, но соотношение, на вскидку, примерно 60/40 (из тех кто поднял руки). Так что тема определенно актуальна и статья многим может стать полезной.
Как устроиться работать джуниором?
Это почти самый популярный вопрос, на который я отвечу так: работодатель вряд ли наймёт вас, если вы вообще ничего не знаете и не имеете никакого опыта. Весьма редко работодатели нанимают джуниоров и это зачастую что-то типа экперимента — вдруг поймаем реально таланта, который резко станет мидом, а мы сможем платить ему зп джуниора? Поэтому мой вам совет: не старайтесь устроиться джуниором, а лучше как следует изучите то, что здесь написано и сразу цельтесь в миды. Многие не знают и половины того, что надо и их берут только из-за «опыта» (зачастую бестолкового). Короче не бойтесь и не считайте себя ни на что не способными, вооружайтесь знаниями, практикуйтесь и ничего не бойтесь!
![need to know](https://habrastorage.org/files/a87/75d/ff8/a8775dff814640d78b22f2ba2444f29f.jpg)
Что нужно знать
- Английский язык. Он нужен для чтения документации, примеров на 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-разработчиком мне довольно редко приходилось писать что-то действительно не тривиальное, в основном все сводится к каким-нибудь манипуляциям с данными, их преобразование из одной формы в другую для дальнейших нужд ну и элементарная логика уровня школьной информатики. Чаще всего все алгоритмы давно реализованы в рамках специфичных библиотек и легко доступны.
![skills required](https://habrastorage.org/files/e3f/3ce/0b6/e3f3ce0b62ec49a79134f871f8be2567.png)
Что нужно уметь?
- Читать чужой код — если не умеете, то фактически вы не умеете пользоваться существующими ресурсами и каждый раз будете пилить велосипед. Как правило это не эффективно (ну давайте может быть еще язык программирования каждый раз снова создавать под каждую задачу?). Со временем вы поймете, что иногда быстрее написать что-то свое, но по началу — старайтесь учиться у других. Даже если вы в итоге решите писать что-то свое, у вас будет уже хоть какое-то представление о том как надо или как не надо делать.
- Владеть 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). Вас проще будет убить, чем прокормить в команде, а ваша эффективность может быть даже отрицательной, потому что другие могут тратить время на исправление ваших косяков и помощь вам. Поэтому потратьте немного времени, освойте эти инструменты, это тоже совсем-совсем не долго.
![what to understand](https://habrastorage.org/files/749/387/804/7493878047c647d69d5b7b3a86cf5284.jpg)
Что нужно понимать
С этого я начал свое выступление на митапе, потому что в устном выступлении сперва надо было наладить контакт с аудиторией, но здесь я постарался это сократить.
Помните, что для работодателя вы — инструмент решения бизнес-задач, которые в будущем должны принести ему выгоду. Поэтому фактически ваша задача на собеседовании убедить его, что платить вам зарплату — выгодное вложение денег. Вас нанимают не по клавиатуре стучать, а генерировать прибыль.
Язык — лишь малая часть того, что вам нужно знать. Может быть около 5% или даже меньше.
Таблица соответствия того, что нужно работодателю и как вы можете ему с этим помочь
Мечта работодателя | Что от вас требуется |
---|---|
делегирование — поставил задачу и её сделали правильно без твоего участия | не боитесь брать на себя ответственность и достаточно компетентны |
скорость разработки (основное преимущество питона) | владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна |
надежность системы | тэстирование собственного кода насколько это возможно или требуется |
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) | знакомство с гайдлайнами (pep, import this) и по возможности следование им |
эффективность системы | знакомство со свежими технологиями, библиотеками и другими приложениями |
эффективность разработчика | заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны. |
предсказуемость, возможность планирования | ваши планы на ближайший год ясны |
![top secret](https://habrastorage.org/files/311/7da/f36/3117daf36aa04d5a95514f179b88b949.jpg)
Интересно что он ей такое сказал на самом деле?
Советы
- Развивайте коммуникацию. Когда ищете работу — ходите на как можно больше собеседований. Успех собеседования напрямую зависит от навыка коммуникации и она отлично оттачивается на собеседованиях.
Вот вам примерПриехали мы как-то в баню, и там чувак вениками орудует. А я веников 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 и расширяли свои знания по другим направлениям.
Буду бесконечно признателен за любые дополнения и постараюсь оперативно добавлять их в статью! Про орфографию пишите, пожалуйста, в личку, чтобы не засорять комментарии.
Only registered users can participate in poll. Log in, please.
Так как у вас с поиском работы?
32.19% вообще без проблем!292
27.12% ничего найти не могу246
40.68% ни разу не пробовал369
907 users voted. 349 users abstained.