Что нужно знать, уметь и понимать, чтобы не иметь проблем с поиском работы питонистом
Эта статья повторяет и дополняет содержание моего выступления «Что отличает джуниора от сеньора или как питонисту не иметь проблем с поиском работы» на последнем MoscowPython Meetup 39. Многие обращались ко мне после выступления с вопросами и я обещал опубликовать статью на Хабре и обсудить в комментариях.
Под катом вы найдете ответ на тему статьи и немного оффтопа. Имейте ввиду, что эта статья написана мной лично, по моему практическому опыту, так как у меня редко когда-либо возникали трудности с поиском работы. Она может отличаться от опыта других людей и я буду очень рад любым дополнениям и исправлениям, если я в чем-нибудь неправ.
Ответы будут чуть ниже
Сперва расскажу о результатах опроса с митапа (если кто был там или слушал трансляцию):
Кто же приходит на митап?
Из поднявших руки примерно по трети — джуниоров, мидов и сеньоров и совсем немного — тимлидов и технических директоров. При этом подняли руки примерно половина и кто остальные — остается загадкой
Есть ли вообще проблема?
Далее на митапе я спрашивал есть ли у присутствующих проблема поиска работы. Для неуверенного большинства проблем нет, но соотношение, на вскидку, примерно 60/40 (из тех кто поднял руки). Так что тема определенно актуальна и статья многим может стать полезной.
Как устроиться работать джуниором?
Это почти самый популярный вопрос, на который я отвечу так: работодатель вряд ли наймёт вас, если вы вообще ничего не знаете и не имеете никакого опыта. Весьма редко работодатели нанимают джуниоров и это зачастую что-то типа экперимента — вдруг поймаем реально таланта, который резко станет мидом, а мы сможем платить ему зп джуниора? Поэтому мой вам совет: не старайтесь устроиться джуниором, а лучше как следует изучите то, что здесь написано и сразу цельтесь в миды. Многие не знают и половины того, что надо и их берут только из-за «опыта» (зачастую бестолкового). Короче не бойтесь и не считайте себя ни на что не способными, вооружайтесь знаниями, практикуйтесь и ничего не бойтесь!
Что нужно знать
-
Английский язык. Он нужен для чтения документации, примеров на stackoverflow и статьей
Пожалуй, единственное что я настоятельно рекомендую, это освоить какой-нибудь фреймворк и сделать что-нибудь реальное, что можно будет показать. Готовый сайт, пусть даже простой, выложенный на хостинге — это показатель того, что вы освоили каждый из множества небольших шагов на пути.
Постойте, а как же алгоритмы?
После митапа ко мне подошел один парень и спросил «а как же алгоритмы?». За 6 лет работы Python-разработчиком мне довольно редко приходилось писать что-то действительно не тривиальное, в основном все сводится к каким-нибудь манипуляциям с данными, их преобразование из одной формы в другую для дальнейших нужд ну и элементарная логика уровня школьной информатики. Чаще всего все алгоритмы давно реализованы в рамках специфичных библиотек и легко доступны.
Что нужно уметь?
-
Читать чужой код — если не умеете, то фактически вы не умеете пользоваться существующими ресурсами и каждый раз будете пилить велосипед. Как правило это не эффективно (ну давайте может быть еще язык программирования каждый раз снова создавать под каждую задачу?). Со временем вы поймете, что иногда быстрее написать что-то свое, но по началу — старайтесь учиться у других. Даже если вы в итоге решите писать что-то свое, у вас будет уже хоть какое-то представление о том как надо или как не надо делать.
Что нужно понимать
С этого я начал свое выступление на митапе, потому что в устном выступлении сперва надо было наладить контакт с аудиторией, но здесь я постарался это сократить.
Помните, что для работодателя вы — инструмент решения бизнес-задач, которые в будущем должны принести ему выгоду. Поэтому фактически ваша задача на собеседовании убедить его, что платить вам зарплату — выгодное вложение денег. Вас нанимают не по клавиатуре стучать, а генерировать прибыль.
Язык — лишь малая часть того, что вам нужно знать. Может быть около 5% или даже меньше.
Таблица соответствия того, что нужно работодателю и как вы можете ему с этим помочь
Мечта работодателя | Что от вас требуется |
---|---|
делегирование — поставил задачу и её сделали правильно без твоего участия | не боитесь брать на себя ответственность и достаточно компетентны |
скорость разработки (основное преимущество питона) | владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна |
надежность системы | тэстирование собственного кода насколько это возможно или требуется |
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) | знакомство с гайдлайнами (pep, import this) и по возможности следование им |
эффективность системы | знакомство со свежими технологиями, библиотеками и другими приложениями |
эффективность разработчика | заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны. |
предсказуемость, возможность планирования | ваши планы на ближайший год ясны |
Интересно что он ей такое сказал на самом деле?
Советы
-
Развивайте коммуникацию. Когда ищете работу — ходите на как можно больше собеседований. Успех собеседования напрямую зависит от навыка коммуникации и она отлично оттачивается на собеседованиях.
Вот вам пример
Приехали мы как-то в баню, и там чувак вениками орудует. А я веников 3 года не видал — в Азии туго с ними. Ну я ему “ого, братюня, фартануло тебе, где ты веников раздобыл?”. Он мне: “да вот привез с собой из России, че хочешь я тебя тоже напарю?”. Ну я не дурак отказываться, конечно. Пообщались с ним, нормальный такой чувак. Ну и разъехались по домам. Через пару недель опять приезжаем — там он же, опять с веником, стали снова общаться, он меня и спрашивает, мол, “а ты вообще чем занимаешься?”. Я говорю ну так-сяк, вот коворкинг у меня свой, а в свободное время на питоне программирую. Он “да ладно? Мне как раз питонщики нужны”. Оказался он основателем небезызвестной компании и я до сих пор с ним работаю.
Помимо собеседований рекомендую играть в мафию (только не по турнирным правилам, а таким, когда возможна дискуссия, но чтобы без балагана — это очень круто тренирует нервы и навык общения), ходите на хакатоны, митапы, конференции. Не пропустите, кстати, Moscow Conf, такие конференции даже не каждый год бывают — это вам не митап двухчасовой, а реально можно за день наобщаться с опытными ребятами, позадавать вопросы спикерам.
Антипример:
Жил у нас в коворкинге один парень — крутейший JS-программист, уровня сеньора с зп 120000+. Работает за 80, потому что неловко себя чувствует на собеседованиях, не может себя правильно позиционировать.
Правда жизни
Правда жизни в том, что как правило, никто не держит в голове все что он когда-либо делал. Сколько есть случаев, когда человек начинает искать ответ на какой-то вопрос, а находит свою собственную статью на эту тему 1-3 годовой давности. В конечном итоге работодателю как правило важно чтобы вы умели решать поставленные задачи, а не были ходячей энциклопедией.
Исключения
Исключения для этого совета: если вам ну очень интересен проект в котором вы работаете и/или у вас есть опцион и проект явно ждет успех.
как я английский выучил
Сперва я 9 лет изучал английский в школе, потом 3 года в институте и уже мог разве что читать и переводить со словарем. Потом я несколько лет оттачивал навык чтением документации, но сказать сложнее «how much for coconut» получалось с трудом. Первым действительно эффективным шагом был просмотр видеоуроков Дмитрия Петрова «Полиглот» с канала Культура, следующим шагом — практика общения с иностранцами в нашем коворкинге на Пхукете, ну а совсем легко стало после женитьбы на филиппинке. Кроме всего прочего один мой знакомых открыл школу английского с уникальным методом, который позволяет за месяц-два обучиться, правда это на Пхукетике опять же.
UPD: В комментариях выразили мнение, что эта статья относится только к веб-разработке на питоне. Это не совсем так, просто веб-фреймворк Django, который я советую к изучению является самым востребованным на данный момент в чем легко можно убедиться. Вы можете запросто выбрать другое направление и большая часть статьи так же останется актуальной, но легко ли вам будет найти работу — я не знаю. Более того, совет про изучение других популярных библиотек именно на то и нацелен, чтобы вы не ограничивались только лишь Django и расширяли свои знания по другим направлениям.
Буду бесконечно признателен за любые дополнения и постараюсь оперативно добавлять их в статью! Про орфографию пишите, пожалуйста, в личку, чтобы не засорять комментарии.
Что нужно уметь, чтобы работать питонистом
Питонист – это разработчик, преимущественно работающий с многоуровневым языком программирования Python. Несмотря на то, что он содержит относительно небольшой по сравнению с другими языками набор символов и хорошо известен своей простотой освоения и использования, это не значит, что достаточно изучить его основы его синтаксиса, чтобы надеяться на выгодное трудоустройство. Как это обычно бывает с программированием, синтаксис и основные правила – это только начало. Перечни как формальных требований работодателей к Python-разработчику, так и навыков, требуемых для успешной работы, гораздо длиннее.
Какие требования предъявляются к разработчику-питонисту
Первое, на что должен обращать внимание программист, планирующий работать в определённой области – это то, что требуется его будущим работодателям. Если он не будет отвечать этим требованиям, возможностей расти, набирать опыт и повышать квалификацию у него просто не будет. Помимо очевидного (знания синтаксиса, понимания, что такое поток, сокеты, виртуализация, умение обращаться с базами данных и так далее), чаще всего от будущего сотрудника ожидают:
- Умения работать с чужим кодом. Питонисты редко работают соло. Обычно приходится вести в разработку в команде, иметь дело с кодом, оставшимся в наследство от других разработчиков и пользоваться наработками сообщества (последним Python особенно отличается). Если чужой код ставит вас в тупик, больших успехов в Питоне добиться удастся вряд ли;
- Умения работать с фреймворками для веб-разработки (в первую очередь Django и Flask, однако возможны и другие требования). Веб-разработка – одна из приоритетных областей применения Python, и эти фреймворки используются в ней практически повсеместно;
- Знания Python Между второй и третьей версиями Питона существует довольно много отличий, и несмотря на то, что знакомство со старыми версиями не помешает (например, чтобы понимать, как работают более старые приложения), именно Python3 сейчас является нормой;
- Знания английского языка, хотя бы на базовом уровне. Это нужно не только для того, чтобы повышать квалификацию и быть в курсе того, что происходит с языком (большая часть полезных материалов появляется изначально на английском, и кроме того, это основной язык общения сообщества питонистов в целом), но и потому, что на английском основан синтаксис самого Питона;
- Понимания математической статистики;
- Опыта работы с командной строкой Linux.
Что дополнительно повышает шансы разработчика-питониста на хорошую зарплату
Python используется в самых разных областях программирования, от разработки игр и приложений для мобильных телефонов до работ в области искусственного интеллекта. Поэтому основную роль в определении будущей зарплаты играют именно углубленные познания и опыт в одной из этих конкретных областей. Наиболее востребованы сейчас машинное обучение, машинная лингвистика, интеллектуальный анализ данных (data science) и статистика.
Говорят, выучить Python и стать программистом легко. Правда?
Работать в ИТ — круто, но путь в индустрию может быть совсем не таким, как описывают родители или преподаватели в школе. На биржах труда ищут мобильных разработчиков, девопсов, бэкендеров и фронтендеров, но где эти профессии в списках специальностей классических вузов?
Мы запускаем цикл статей в которых подробно расскажем о каждой профессии через опыт людей. В первом выпуске обсуждаем Python-разработчиков. Свои истории рассказали Артем Сухаренко и Данила Лобанов. Они пришли в профессию совсем недавно, но успели набраться опыта в других сферах. А экспертом выступил Алексей Петренко — декан факультета Python в Geekbrains.
Мы поговорили о том, что нужно знать перед обучением, чем хорош и плох язык, что трудного ждет в обучении и на чем стоит сосредоточиться; какие профессии и деньги сулит знание языка, как готовиться к первым собеседованиям и многое другое.
Для чего учить Python
Артем Сухаренко учился в СибГИУ на кафедре автоматики и информатики. Его специальность была инженерной, но не связанной с программированием. После выпуска Артем устроился работать на завод ЗСМК — один из самых крупных металлургических комбинатов в России.
«Я обалдел, насколько там все ужасно», — говорит он, — «Полуразвалившийся советский электропривод, никакой модернизации, специалисты особо не нужны». Долго на заводе он не задержался, но продолжил работать с электрикой дальше. Вырос до ведущего инженера в Сибирьтелекоме, затем переехал из Сибири в Москву и устроился в коммерческий ЦОД, где отвечал за инфраструктуру.
Программирование иногда подразумевалось. Артем пытался работать с микроконтроллерами, делать что-то более сложное, но всегда упирался в отказы работодателей и заказчиков — им это было не нужно. Хватало элементарных вещей, которыми, как говорит Артем, интересно заниматься только первые 15 минут, и особых скиллов для этого не нужно.
«Может быть, я не туда совался, но развития для себя не нашел. Пять лет вуза — просто чтобы крутить провода. Это было так обидно».
Однажды коллега подал Артему идею изучать программирование не для электрики, а чтобы стать разработчиком. Он стал читать книги, пробовать разные задачи, но не решался сменить профессию. «Желание у меня назревало долго. Сначала не давали сменить профессию ипотека, финансовые вопросы, личный страх».
В 36 лет Артем пошел на курсы Python-разработчика.
Веб-разработка стала клондайком для многих людей, кому интересны технические профессии. А Python — одним из популярнейших языков программирования для входа в профессию. Он привлекает простотой и универсальностью.
«Зная Пайтон можно делать много всего — от простейших скриптов до анализа данных и построения нейронных сетей. Но конкретно разработка на Пайтоне — это бэкенд для веб-серверов, разработка скрытой части интернета — той, которую не видят обычные пользователи. Сервер, его логику, взаимодействие с базами данных», говорит Алексей Петренко, декан факультета Python в Geekbrains.
«Думаю, это хороший выбор в качестве первого языка. У него простой синтаксис. Он прощает мелкие ошибки разработчика. У Пайтона низкий порог вхождения, на нем очень легко освоить азы программирования. У него очень большая аудитория и обширная библиотека, плюс много внешних библиотек, которые делают разработчики со всего мира. За счет этого он становится языком, который подойдет для чего угодно».
«Хоть Python и пропагандируется как язык для всего, по факту у него только две сферы применения: всякие data science, ML и прочая математика — и веб-разработка. В этом он меня немного разочаровал», — говорит Данила Лобанов, бывший сисадмин, который недавно стал Python-разработчиком.
«Питон понравился мне тем, что он может выполнять любую работу. У него есть библиотека для мобильных приложений, для десктопных, на нем можно писать скрипты автоматизации для серверов, можно веб-приложения. Но по факту на работу без глубокой математики требуются только веб-разработчики. Никто не пишет на нем десктопные приложения, и уж тем более мобильные. Для этого есть другие языки, которые создавались специально под свои задачи».
Данила тесно познакомился с компьютером относительно поздно, примерно в 18 лет. От высшего образования он отказался и почти сразу пошел работать сисадмином. Начинал с самых элементарных задач, потом приступил к изучению Linux и программирования.
«Я попытался изучать С, PHP, Java еще какие-то языки, но не заходило — начинал и бросал. Не мог писать даже простейшие скрипты. Когда я ходил на курсы по С, у меня получалось читать код, но не получалось его писать. Мне давали задачу, я смотрел на нее и не представлял, как делать. Преподаватель садился рядом, писал построчно, объяснял, и я понимал, что именно так и надо было делать. Но мне давали аналогичную задачу, и я снова был в ступоре».
После неудачных попыток Данила надолго забросил программирование. Около десяти лет он проработал сисадмином. И когда почувствовал, что администрирование больше не приносит радости, решил дать разработке еще один шанс.
«Новичку лучше первым делом разобраться в синтаксисе», — считает Алексей Петренко, — «Только потом стоит думать, куда хочется идти дальше. Чем больше ты учишься, тем больше уходишь от синтаксиса к библиотекам, паттернам проектирования, отдельным шаблонам».
Данила все-таки выбрал Python потому, что язык считался легким. «Синтаксис реально оказался простым», — говорит он, — «Как писать текст на английском языке. Сначала я изучал его самостоятельно по видеоматериалам на Ютубе, по статьям, решал задачи на pythontutor.ru. Но потом понял, что ресурсы в интернете — это только основы и азы. Они доступны всем и везде, и не помогут научиться программированию основательно. Я понял, что надо искать курсы, которые дадут все то же самое, только систематизировано, а потом поведут меня дальше».
Что надо знать перед началом обучения
Перед тем, как серьезно погружаться в изучение языка, Алексей Петренко рекомендует выяснить заранее — а нравится ли программировать вообще. «Я бы советовал попробовать написать несколько программ, пройти бесплатные уроки. Перед началом обучения лучше уже понимать, что такое переменная и как две переменные сложить.
Чтобы курсы не стали бесполезными, поможет только одно — практика. Если только смотреть и слушать, ничего не получится. Для новичка практикой будет даже переписать код, который преподаватель показывает на экране. Переписывать и думать, как он работает.
Необходимый минимум для занятий — четыре часа в неделю. Два дня в неделю по два часа. Но я бы рекомендовал выделять час в день на написание собственного кода. Главное не нырять в программирование с головой, чтобы не было буйства магии. Когда три дня учишь все подряд — в голове получается каша.
Начать может быть легко, но впереди ждут трудности
Артем продолжал работать электриком днем, а вечерами начал учиться на курсах, несмотря на усталость. «Как и у всех наивных людей, у меня было ожидание магии от курсов. Я пришел не совсем нулевым. В багаже было несколько книг и даже простых сайтиков, в том числе на PHP (грешен, признаю). Я ждал, что на курсах надмозги меня выдрессируют, и я стану волшебником. Реалии оказались другими — там такие же люди, которые просто знают чуть больше».
Артему нравилось на курсах, но не все шло гладко. Программа на тот момент была новая, мало обкатанная и по его впечатлениям сумбурная. О спорных моментах ученики высказывались, давали обратную связь, и недостатки исправлялись на ходу. Один из преподавателей оказался настолько слабым, что его попросили убрать. Но остальные, как вспоминает Артем, были очень сильны.
У Данилы же все шло еще труднее. После нескольких вводных курсов он перестал успевать за программой, и несколько раз покидал свой поток, чтобы повторять программу в следующем.
«Все признавали, в том числе сотрудники Geekbrains, что уровни 2 и 3 в программе по Python были одними из самых сложных курсов в университете. Очень много информации в слишком сжатые сроки, очень большие домашние задания. Многие усваивали только часть материала. Я лично два раза переводился в следующий поток. Мы просили облегчить программу, нас спрашивали как, и я предлагал разбить два курса на три. Что-то из этого приняли во внимание и сейчас реализовали».
В отличие от первых попыток учить С, когда ничего не получалось, Данила шел дальше. Вещи, которые он не понимал, превращались в вещи, которые он не понимает, как можно было не понимать. Но преодолеть эту грань нельзя простым зубрением учебников. Как говорит Данила, умение программировать и знание языка — абсолютно разные вещи.
«Преподавать программирование тоже очень сложно. Всем кажется, что раз человек может писать программы, значит может и научить. Это не так. Когда мышление перестроено, и знаешь много всего — уже не можешь вспомнить, каково это — не понимать».
Алексей предупреждает, что Python легкий только в начале. А после легкой базы придется приложить усилия, чтобы освоить более серьезные аспекты — библиотеки и фреймворки. «Если сравнить язык программирования с водоемом, то, например, язык С — это океан. Ты ныряешь с обрыва на огромную глубину, и либо плывешь, либо тонешь. Язык Пайтон — это пляж с чистым песком, где ты можешь далеко зайти, спокойно поплавать, и если понял, что хочешь двигаться дальше — то за красивым пляжем есть огромная впадина, по глубине сопоставимая с С и Java».
«Асинхронное программирование в Python — это мозгодробительная штука», вспоминает Артем. «Мы проходили это как-то поверхностно, и потом даже на собеседованиях, когда по нему спрашивали, я чувствовал, что плыл.
Паттерны проектирования тоже нахрапом взять невозможно. Я уже по три раза перечитывал выдержки, специально читал книгу, и все равно до конца не чувствую себя уверенным. За один месяц, который длится курс по ним, это вообще нереально освоить».
Данила же вспоминает модуль select как самое трудное: «Все три потока помнят мою боль с селектами. Есть такой модуль, и он мне прямо очень не давался в свое время. Сейчас-то он для меня простой — я теперь не понимаю, как его можно не понять».
«В базовой конфигурации Python лежит около 70 функций и несколько десятков зарезервированных слов, но даже крутой программист не обязательно использует их все. То есть, чтобы выучить сотню слов и понять, что они делают, можно потратить одну-три недели при желании и активной работе», говорит Алексей.
«Начинающие программисты пишут программы, которые тоже работают. Но код один раз пишут — десять раз читают. Когда спустя время программу пытается прочитать другой человек, то возникают сложности.
Чтобы в будущем работать в команде и показывать код кому-то еще, надо знать общепринятые стандарты стиля. В Python они называются «Пепы» (Peps). Я бы советовал читать Pep8 параллельно с изучением синтаксиса. Это соглашение программистов, которые пишут на Пайтоне. Оно рекомендует как правильно писать, а как неправильно.
Несколько лет назад в Python произошло разделение. Был Python 2.7, а потом вышла версия 3. Вторая версия все еще используется, но только в старых фирмах для поддержания легаси-кода. Если устроиться в такую фирму, то изучать Python 2 придется, но я бы рекомендовал учить третью версию. Все современные проекты и сторонние библиотеки пишутся под нее».
Как выдержать первые собеседования
Артем и Данила закончили курсы очень по-разному. Данила после нескольких попыток решил не заканчивать обучение, потому что не нашел взаимопонимания с преподавателем последних курсов, но зато нашел работу. Артем же вместе с сокурсниками уже во время обучения вырастил учебный проект в стартап, который начал приносить реальные деньги.
«Проект назвался GoLiving. Это что-то вроде AirBnb, только задумка такая: в Америке есть люди, которые часто ездят работать в разные города на непродолжительный период. И они могут между собой меняться жильем с гарантированной страховкой, чтобы точно быть уверенным, что не вернешься в разгромленную квартиру. Сейчас я не знаю, насколько далеко пошел этот ресурс, кажется финансирование приостановили. Но тогда у нас даже были инвесторы».
Данила во время обучения на курсах полгода сидел без работы. Он уволился специально, чтобы учиться, но из-за частых переводов учеба заняла больше времени, и отложенные на это время деньги подходили к концу. Покинув курсы, Данила даже не успел начать изучение Django — самого популярного фреймворка для веб-разработки.
«Под новый год я написал в компанию, которая просто находилась рядом с моим домом. Зашел к ним на сайт, увидел вакансию бэкенд-разработчика и написал им письмо. Говорю, хотел бы у вас поработать, хоть и учился, но знаю немного. Очень интересуюсь и буду развиваться. И меня позвали на собеседование».
«Мой опыт в Geekbrains показывает, что некоторые студенты находят работу, до того как они заканчивают годовой курс обучения», говорит Алексей. «Работодатель хочет видеть у серверного разработчика элементарное умение работать с синтаксисом, знание как работают сайты, как устроен бэкенд, тот же самый набирающий популярность Django. Я бы сюда ещё добавил работу в команде и знания баз данных, потому что любой бэкенд любого сайта неразрывно связан с хранением информации.
Ежемесячно на «Моём круге» открывается порядка 200 вакансий python-разработчиков, вы можете посмотреть самые свежие и подписаться на рассылку о новых вакансиях.
Во время интервью главное не молчать. Если дают задачу, на которую не получается сходу ответить, то надо просто рассуждать вслух, показывать, как думаешь, и что способен двигаться к решению.
И главное не отчаиваться, если первое собеседование оказалось неудачным. Сходя на два-три собеседования заметишь, что вопросы начинают повторяться. И тогда уже сам будешь выбирать, куда устроиться, потому что однажды из трех собеседований пройдешь сразу везде».
Данила на собеседовании больше всего удивило то, что ему не задали ни одного технического вопроса: «Не давали никаких заданий — просто общались о том, как я учился, чем интересуюсь. В итоге предложили работу, и я согласился».
Алексей же считает, что с такими компаниями стоить быть внимательнее. «Кроме общих вопросов должны быть задачи на написание кода. Даже если на бумаге карандашом — это нормально. Но если ты пришел на собеседование программиста и не получил ни одного вопроса о программировании, то тебя либо собеседовал некомпетентный человек, либо ты будешь заниматься вообще чем-то непрограммистским. Программистов надо проверять на программирование».
«Я считаю, не спрашивать технические вещи — это правильный подход», говорит Данила. «Очень известный в Python-сообществе Григорий Петров тоже говорит, что скилы по программированию (хард скилы) подтянуть всегда можно. Главное сойтись во взглядах на жизнь, чтобы было комфортно вместе работать. Я с ним согласен.
Конечно, навыки программирования важны. Но сейчас я работаю с такими вещами, которых на курсах не преподают. Мне их показали уже на работе, и дальше я разбираюсь сам, читаю документацию, статьи, смотрю примеры. Меня больше настораживают компании, которые дают «нормальные» тестовые задания. Ты смотришь и думаешь — а это правда тестовое или я сейчас бесплатный фрилансер?»
«Собеседование, которое проходил я, расплавило мне мозг еще как», вспоминает Артем. «Когда я вышел, состояние было, как будто иду на автопилоте — так сильно продолжали жужжать мысли».
Проходило оно так: сидели два эйчара и два технаря. Один питонист и фулстек, который занимался вебом — куда пробовался и я. Второй — судя по вопросам — совершенный надмозг. У него такой был сильный матан, что просто ого-го!
Сначала пошли житейские вопросы, все эти «как себя видишь, как себя чувствуешь». Потом за меня принялся фулстек, погонял меня по Python, по Django. Он прямо на бумаге накидывал примеры и спрашивал по ним. Не сложные, но с подковырками.
А потом за меня взялся дядька-надмозг. Полез вглубь матана, спрашивал про алгоритмы, и поскольку компания работает с безопасностью и шифрованием, он меня и по нему тоже погонял. Но в этом я совершенно не силен, поэтому отвечал как пятилетний ребенок. В общем, на шифровании сыпался, в алгоритмах держался, но не очень.
Честно, даже не ожидал, что мне перезвонят. Тем не менее — получил оффер. Через несколько дней будет первый рабочий день».
На какие деньги стоит рассчитывать
Люди идут в ИТ не только по зову души. Это индустрия с одними из самых быстро растущих зарплат в России. И иногда кажется, что зарплаты программистов по сравнению со среднестатистическими профессиями отличаются как зарплаты в Москве и в регионах. Тем не менее, ни Артем, ни Данила не шли в эту профессию за богатством. Больше того — они его пока так и не нашли.
«Даже в Москве на начальных позициях программистам предлагают 40-50 тысяч, может даже меньше. В регионах 20 тысяч для джуниора тоже не редкость. Это не такая уж высокооплачиваемая работа, как все утверждают. Да, когда достигаешь уровня синьора, зарплаты могут переваливать за 200-300 тысяч. Но где таких зарплат нет? Недавно одна такси-компания показала доходы таксистов, которые больше всех заработали. Там 230, 240 тысяч.
На диаграмме зарплат python-разработчиков с разбивкой по квалификациям видно, что медиана для джуна составляет почти зарплатного калькулятора «Моего круга».
Возможно, в программировании проще дойти до уровня выше среднего, чем во многих других сферах. Но для меня это вообще не было главным. Мне было интересно создавать программы».
«Зарплаты зависят от региона», говорит Алексей, «Кто-то устроится за 40 тысяч как начинающий, кто-то может и сразу на 100 тысяч. Смотря как себя проявить. Если покажешь, что можешь писать не только код, но и разбираешься в архитектуре, можешь набросать схему проекта целиком, всех модулей, сервисов, связей между ними».
Артем же вообще ушел в разработку на меньшую зарплату, чем имел будучи инженером. «В электрике у меня была должность главного инженера, и зарплата была очень хорошая. Я ушел, потому что хочу развития. А в программировании можно развиваться до бесконечности».
Несмотря на то, что в программировании одна из самых четких и понятных градаций по уровню мастерства (джуниор, мидл, синьор) — она все равно остается относительной и постоянно разжигает споры размытостью своих критериев. Споры в духе «ты в компании Х синьор, а в компании Y и джуниором не возьмут» или «пока десять лет не работал — не синьор».
«До уровня мидла можно прокачаться в течение года обучения. Например, в Geekbrains есть обязательные курсы и дополнительное. Все их надо пройти полностью чтобы честно сказать — я прокачался до уровня мидла. То есть, получается год основной программы и ещё полгода параллельных курсов», — считает Алексей, — «А синьор — это человек, у которого есть богатый опыт. Это тот, кто разбирается в разных фреймворках, способен масштабировать задачи, понимать каких ресурсов они требуют. Человек, который не изобретает велосипеды. Кто на собственном опыте разобрался во всех аспектах и нюансах работы.
Если человек через три года работы называет себя синьором — почему бы и нет. Все зависит от фирмы, стремления и навыков. Если человек одаренный и целеустремленный, то я в это поверю.
- Блог компании Хабр Карьера
- Python
- Карьера в IT-индустрии
Почему Python не станет языком программирования будущего, даже если сейчас популярен
Команда Mail.ru Cloud Solutions перевела колонку Rhea Moutafis «Why Python is not the programming language of the future». Автор перевода не всегда разделяет мнение автора статьи.
138K открытий
Python появился в мире программирования довольно давно, но с начала 2010 годов переживает бум — он уже обогнал по популярности C, C#, Java и JavaScript. До каких пор будет сохраняться тенденция роста, когда Python заменит какой-то другой язык и почему?
Автор колонки считает, что у Python есть несколько свойств, которые помогли ему стать популярным языком. Но есть и слабые места, которые уничтожат его в будущем.
Что делает Python популярным прямо сейчас
Популярность языка программирования можно отследить по динамике количества тегов на самом востребованном у разработчиков ресурсе — Stack Overflow. Так, судя по графику, рост Python начался с 2010 года, а стремительным он стал в 2015 году. В то время как R в течение последних нескольких лет находится на плато, а многие другие языки находятся в упадке. У такой популярности Python есть причины.
Популярность языков программирования на Stack Overflow
Время существования
Python можно смело назвать довольно старым языком — он появился в 1991 году, то есть практически 30 лет назад. За это время он постепенно собрал вокруг себя большое сообщество.
Если у вас появится какая-то проблема с этим языком, то решить ее, скорее всего, получится примитивным поиском в Google — наверняка кто-то уже опубликовал мануал с алгоритмом и примером кода.
Python можно смело рекомендовать как первый язык программирования. И дело не только в том, что он существует давно и поэтому по нему есть много хороших учебников. У него понятный синтаксис, похожий на обычный, «человеческий» язык. и еще он прощает ошибки.
Например, в нем не нужно указывать тип данных, достаточно просто объявить переменную. Из контекста Python поймет, является ли она целым числом, числом с плавающей запятой, логическим значением или чем-то еще. Это огромное преимущество для начинающих.
Если вам когда-либо приходилось программировать на C++, вы знаете, как это печально, когда программа не компилируется только потому, что вы где-то поменяли число с плавающей точкой на целое число.
Код Python довольно просто читать. Просто сравните синтаксис Python и C++ .
Универсальность
Python существует так долго, что разработчики смогли сделать специальные библиотеки практически для любых целей. Например:
- Для многомерных массивов и высокоуровневых матриц используйте NumPy.
- Для расчетов в инженерном деле подойдет SciPy.
- Для исследования, анализа и манипулирования данными попробуйте Pandas.
- Для работы с искусственным интеллектом изучайте Scikit-Learn.
Если вам нужно решить какую-то вычислительную задачу, вероятно, что для нее уже есть специальная библиотека Python. Это позволяет языку оставаться в тренде последние годы, что видно по всплеску его использования в машинном обучении.
Недостатки Python, которые могут уничтожить этот язык
Вот недостатки, которые могут стать критичными для развития Python как самого популярного языка в будущем.
Python медленный — в среднем, на операции на нем понадобится в два, а то и в десять раз больше времени, чем если бы вы выбрали другой язык. Для этого есть разные причины. Одна из них в том, что Python — язык с динамической типизацией. То есть на нем не нужно заранее определять тип данных, как в других языках. Конечно, это удобно разработчику, но такой подход требует большого резерва памяти для каждой переменной, чтобы она работала в любом случае. Соответственно, больше памяти означает больше времени на вычисления.
Python может выполнять только одну задачу за раз, как раз из-за того, что язык должен проверить тип данных. Параллельные процессы всё испортят. Для сравнения, обычный веб-браузер может запустить несколько десятков различных потоков одновременно.
Конечно, вы можете возразить — кого сейчас волнует эта скорость, ведь компьютеры и серверы стали такими мощными, что в итоге «медленно» означает выбор между загрузкой приложения за 0,01 секунды или 0,001 секунды. Действительно, конечному пользователю нет разницы.
Области видимости
В Питоне используются динамические ограничения видимости. То есть для оценки выражения компилятор сначала ищет текущий блок, а затем последовательно все вызывающие функции.
Проблема такого подхода в том, что каждое выражение должно быть протестировано в каждом возможном контексте. Это, мягко говоря, утомительно и долго. Поэтому современные языки программирование используют в основном статическую область видимости.
Питон пытался перейти к статической области видимости, но ничего не вышло. Обычно внутренние области видимости — например, функции внутри функции — могут видеть и менять внешние области видимости. В Python внутренние области могут только видеть внешние области, но не менять их. Такой подход приводит к путанице.
Лямбда-функции
Несмотря на всю гибкость, использование лямбд в Python ограничено. Они могут быть только выражениями (expressions), но не инструкциями (statements). С другой стороны, объявления переменных и statements и есть инструкции. Проще говоря, добавление statements сделает лямбду многострочной, а синтаксис Python не позволяет так сделать.
Это различие между expressions и statements довольно произвольно, и не встречается в других языках.
Питон хорошо подходит начинающим разработчикам — там используются пробелы и отступы для обозначения разных уровней кода. Это делает его визуально привлекательным и интуитивно понятным.
Другие языки, например C++, больше полагаются на фигурные скобки и точки с запятой. И пусть это не так визуально комфортно для новичков, зато делает код намного удобнее для поддержки. Для больших проектов это намного важнее.
Новые языки, например Haskell, так решают эту проблему — они полагаются на пробелы, но предлагают альтернативный синтаксис для тех, кто хочет обойтись без них.
Пробелы делают код более читаемым, но менее удобным в сопровождении Irvan Smith на Unsplash
Мобильная разработка
Сейчас мы наблюдаем массовый переход от компьютеров к смартфонам — уже понятно, что нам нужны языки, подходящие для мобильных приложений.
В Python такая возможность как бы есть — пакет под название Kivy. Но нужно учитывать, что Python не был создан для мобильных устройств. Использовать его можно, результат будет даже приемлемым, но зачем, когда можно взять более подходящий язык, созданный для разработки мобильных приложений. Например, фреймворки для кроссплатформенной мобильной разработки: React Native, Flutter, Iconic и Cordova.
Если вы планируете стать всесторонне развитым разработчиком, только знания Python недостаточно.
Ошибки во время выполнения (Runtime Errors)
Скрипты в Python компилируются каждый раз во время выполнения, вместо того, чтобы сначала компилироваться, а уже затем выполняться. Поэтому любая ошибка проявляется во время выполнения кода.
Это приводит к низкой производительности, временным затратам и большому количеству тестов. Тесты — это замечательно, особенно для новичков. Но для опытных разработчиков такая необходимость воспринимается как минус и приводит к нехватке производительности.
Что может заменить Python в будущем
На рынке языков программирования есть несколько его конкурентов:
- Rust — в нем так же, как и в Python, переменная не может быть случайно перезаписана. Но за счет концепции владения и заимствования в Rust решена проблема с производительностью. Кстати, именно Rust разработчики называют самым любимым языком.
- Go стоит рассматривать начинающим разработчикам. Он довольно прост в освоении, поддерживать код тоже не трудно. Плюс разработчики на GO сейчас одни из самых высокооплачиваемых.
- Julia подходит для крупномасштабных технических вычислений. Раньше для этого нужно было использовать Python или Matlab плюс библиотеки C++. После выхода Julia потребность в жонглировании языками отпала.
На рынке есть масса других полезных языков, но именно эти три закрывают слабые места Python. Rust, Go и Julia подходят для инновационных технологий, особенно для искусственного интеллекта. Сейчас их доля на рынке еще невелика, судя по тегам Stack Overflow, но тенденция роста уже есть.
Динамика роста на Stack Overflow
Учитывая популярность Python в настоящее время, наверняка потребуется не меньше пяти, а то и десяти лет, чтобы любой из этих новых языков заменил его.
Какой из языков это будет — Rust, Go, Julia или новый язык будущего — пока трудно сказать Но учитывая проблемы с производительностью, которые являются основополагающими в архитектуре Python, каждый из новых языков найдет свое место.
Что еще почитать по теме:
- Язык Golang на пике популярности у IT-компаний.
- Необычный подход к автотестам для JavaScript и UI.
- Наш канал об IT в Телеграме.
125 комментариев
Написать комментарий.
Единственная верная предъява это скорость.
Но почему проблемой являются отступы вместо скобок или динамическая типизация? Отступы в любом случае придется делать, иначе код станет не читаемым.
Компилятора нету? А как же Numba или PyPy? Да пускай не идеальные компиляторы, но питон на скорость не претендует.
Runtime error это вообще смех, да грех, вы два раза написали о том, что питон интерпретируемый язык?
Go не заменит питон, так как он строго типизированый и далеко не такой простой как python про julia уже более правдеподобно, но ближайшие года julia будет только набирать обороты. Как Rust может заменить python, если это конкурент c/c++, а не python.
Статья бредовая.
Развернуть ветку
Отступы создают проблем при поддержке больших, старых проектов. На хеловорды с парой разработчиков это не проблема.
Проблема отступов для управления блоками кода:
1. На больших проектах где много разработчиков и кодовая база старая, могут встречаться разные кодовые стили что создает проблему с поддержкой. Только не надо про, то что в проекте должен быть один стиль и все должны его придерживаться. Конечно должен, но реальность такова что в больших проектах с текучкой кадров, в старых проектах, это труднодостижимо.
2. Могут быть проблемы при банальном мерже: Например у вас есть функция один разработчик вставил в начало условие — все тело +1 отступ, другой в середину функции добавил оператор — у него отступы были старые. Автоматической слияние пройдет отлично, но код работать не будет.
Развернуть ветку
10 комментариев
Яблоко — бесперспективный фрукт потому что круглый и растёт только в Африке. Его заменят редиской, баклажаном и стульями.
Развернуть ветку
Аккаунт удален
Развернуть ветку
ох уж эти жёлтые заголовки
питон очень сильно ушёл в data science и стал чем-то вроде пыхи в плане порога вхождения
никто его уже там не заменит в виду тонн кода и библиотек и будущее питона именно за ds
одновременно сильно сдал позиции в веб, из-за чего я сам перешёл с него на java
Развернуть ветку
D может заменить. В общем он сейчас на это и претендует.
Развернуть ветку
А в чём собственно говоря приемущество отсутствия строгой типизации и нормального форматирования кода в виде фигурных скобок?
Типы в питоне и так есть, просто в нормальных яхыках, вы читаете код, вы понимаете где и какой тип возвращаеться, а в питоне пойди угадай, что возвращает функция GetVasia(). Т.е. я абсолютно не понимаю, какую проблему решает тот факт, что не надо объявлять типы? Вы всё равное не сможете совершать операции над разными типами данных, ибо это приведёт в исключению выполнения, какой тогда в этом смысл? С каких пор int x = test.GetVal() стало блин хуже чем x = test.GetVal() .
Фигурные скобки. серьёзно. я конечно понимаю, что типичный код пайтон-разработчика — подключить 1000 библиотек, и написать something = DoAmazingThings(), но вы попробуйте на пайтоне написать больше 30-50 строчек кода. у вас глаза на лоб вылезут, пока вы поймёт где какой отступ был сделан, и какая часть кода к какому «блоку» относиться. В чём сложность использования нормальных фигурных скобок для визуального разграничения блоков кода?
Ну так вообще, у пайтоне есть своя ниша, это ХэллоВорлд приложения с использованием очень богатых библиотек, т.е. как язык что бы показать своей бабушке, какой у неё умный внучек, какие нейросети делает — самое то. Но когда я вижу +- серьёзные приложения на пайтоне. бууээээ. Понятия не имею, зачем это делают.
ах да, в качестве первого языка брать пайтон — хреновая идея. Это как учиться ездить на машине сразу с автомата — ездить уметь будешь, но посади тебя за механику, повесишься.
Развернуть ветку
Лично для меня динамическая типизация — это гибкость. Если мне надо по-быстрому наваять какой-то разовый скрипт или простенький прототип, чтобы проверить работоспособность идеи, то я не буду заморачиваться с тем, чтобы на каждый чих писать тип, это лишняя работа.
Уже три года пишу на питоне, и никогда не возникало проблемы с отступами. Если уж совсем всепечально, есть прекрасные IDE (например, PyCharm), который все делает за Вас.
С++ код не требует соблюдать отступы, чтобы код работал, но все нормальные разработчики их делают, причем стараются соблюдать конвенцию (2 или 4 пробела, например) и почему-то никто не кричит о том, что: «Ааа, это кошмар, попробуй уследи за всеми этим отступами!»
Долгое время я писал на C++ и никакого дискомфорта не испытываю от того, что в Питоне скобок нет. На мой взгляд наоборот очень классно, что блоки выделяются пробелами, и этого достаточно. Философия Питона — это практичность. Зачем тогда добавлять ещё одну сущность в виде скобок для выделения блока?
Насчёт ниши Питона. Ну тут даже комментировать нет никакого желания, просто дам реплику: Java для тех криворуких, кто не смог освоить С++ и управление памятью вручную. (Сарказм, ага)
В качестве первого языка использовать Питон я бы тоже не стал лично для себя. Уменя первым был С, и я нисколько не жалею, и это дало мне хорошее понимание того, как работает компьютер и осознать все удобство, что дают более высокоуровневые ЯП. Но если твоя задача быть продактом или аналитиком, то Питон как первый язык — прекрасный инструмент для решения задач.