[Из песочницы] Почему не нужно учить python первым языком
О себе
Еще в студенческие годы я понял, что моя специальность не такая уж радужная, как мне казалось в 18 лет. Поэтому я стал думать о том, как заработать адекватные деньги. И наслушавшись историй о том, как мой двоюродный брат получал безумные на то время деньги в 1С, я также решил связать свою жизнь с IT.
Изначально это были шаблонные сайты на конструкторах и wordpress, потом я занялся SEO, и в один момент наткнулся на Хабр, после чего решил стать полноценным программистом. Высшей математики у меня не было, поэтому я решил выбрать сферу, где она не требуется — веб-разработка.
У меня появился очевидный вопрос: какой язык выбрать — php/python/ruby. Насмотревшись статей на Хабре, почитал хейт в сторону php, посмотрев пару мотивационных роликов от Yandex. Я выбрал Python. Преимущества языка, я надеюсь, вы знаете, поэтому не буду про это говорить.
Первичное обучение языку
Обучение языку я совмещал с основной работой, поэтому читал книжки, смотрел туториалы, пилил небольшие проекты в вечернее время. В общем, за год я
1) Изучил книги:
- Марк Лутц — Изучаем Python
- Марк Лутц — Программирование на Python
- Чед Фаулер — Программист Фанатик
- Билл Любанович — Простой Python
2) Изучил множество роликов от Украинских/Буржуйских авторов по Django
3) Прошел курс от codeacademy
4) Освоил PyCharm
Свой первый проект
Далее у меня появилась идея небольшого сервиса на весьма специфичную тематику, который я решил сделать, чтобы закрепить знания Python + Django.
В создания сайта я
1) Изучил книги:
- Джон Дакетт — HTML и CSS. Разработка и дизайн веб-сайтов
- Дэвид Флэнаган — JavaScript. Подробное руководство
- Бен Форта — Освой самостоятельно SQL.
2) Изучил документацию Django под свои задачи
3) Изучил деплой проектов на Django Gunicorn + nginx + centOS
Свой первый нормальный проект
После того, как первый адекватный сайт провалился, я решил создать уже что-то стоящее, выбрал идею, выбрал схему реализации и за 3 месяца по вечерам его сделал.
Проект показал свою жизнеспособность (по сей день приносит мне определенные деньги, чему я безумно рад). И я решил уже его прокачать получше.
После прочтения книги «Percival H. — Test-Driven Development with Python», решил написать тесты сначала на основе компонентов Django, потом поднял документацию селениума, и уже сделал внешние тесты.
Я хочу быть крутым
Открыв вакансии по Python-Django разработчикам, я посмотрел что еще обычно требуется в таких вакансиях:
- Django Rest Framework
- Celery
- Tornado/Twisted/ asyncio (На выбор что-то одно)
- Class-based view Django
- Angular/React (На выбор что-то одно)
Потратил 3 месяца на знакомство/пробование с этими штуками. Также поднял стандартную библиотеку Python + внешняя библиотека для парсинга beautifulSoup.
Ты не тру без C/C++
Бытует мнение, что без знания C/C++ программист не может называть себя программистом. Поэтому когда у меня было свободное время, я познакомился с книгами:
- Брайн Керниган — Язык программирования С
- Стенли Б ЛиппМан — Язык программирования С++. Базовый курс
Прочитал книги, поковырялся с кодом, посмотрел на компиляцию, посмотрел примеры кода. В общем, теперь я не делал большие глаза при упоминании ссылок, указателей, сортировок, ООП и туче разных массивов с разными скоростями обработки элемента, в зависимости от его позиции.
Я готов к бою!
И вот тут мы приходим к самому важному моменту. Потратив в общей массе 2 года на изучение всех элементов веб-программирования, о которых я говорил выше. Я посчитал себя достаточно готовым, чтобы претендовать на позицию веб-разработчика на Python. Конечно, что-то я знал не очень хорошо, что-то поверхносто, а что-то вообще не знал (например, Flask), но общее понимание и навыки были неплохими.
И вот тут начались проблемы с Python, на которых люди чаще всего не заостряют внимание. А именно на востребованности бизнеса в Python-разработчиков junior/pre-middle уровня.
С этим вопросом я вышел на рынок
Хотя на первый взгляд кажется, что вакансий на Python достаточно много, но когда начинается конкретика, все резко меняется.
1. Сразу идет большой отсев вакансий, где Python является исключительно вспомогательным языком. Чаще всего это позиции Java-разработчиков, Системных Администраторов, QA-Автоматизация. Также сейчас идет большой отсев по Data Learning, где требуется мат-образование + язык R.Т. е. с одним Python вы эту вакансию не сможете подобрать.
2. Оказалось, что в моем городе вакансий под Python нет, от слова вообще нет. Расширив поиск по всей области, я также получил неудовлетворительный результат. Пару вакансий на PHP, где Python шел «будет плюсом». Открыв фильтр за последние 3 года, я также обнаружил, что вакансий на Python не было вовсе. Т.е. бизнес в провинции чаще всего выбирает более простые и популярные технологии, нежели Python.
3. Открыв вакансии на Python в общем поисковике, я обнаружил следующие тенденции:
- 90% + вакансий находятся в Москве или Санкт-Петербурге
- 90% + вакансий требуют уровень middle+ / seniour
- ~100% вакансий junior позиций в Москве или Санкт-Петербурге (чаще всего от гигантов)
Другими словами получилась ситуация, что если ты не живешь в Москве, Санкт-Петербурге и не собираешься ехать их «покорять», то тебе практически негде получить свою первую работу.
Конечно, есть пару очагов, где Python еще используется, например, в Казани. Но чаще всего это какая-то одна фирма, где с Вакансиями тоже весьма middle+ / seniour.
4. Вариант поиска удаленки на текущий уровень также показал, что работодатели не готовы идти на такой риск. Мало опыта + удаленка = это какая-то фантастика.
Тем не менее, я все же смог найти пару вариантов, но уже в ходе первичного собеседования стало понятно, что это ерунда по типу: «Ты у нас три месяца поработай, и если клиент заплатит за твою работу, мы тебе тоже заплатим». Не самый лучший вариант.
5. Поговорил с парой HR из крупных компаний, они высказали такую тенденцию. «Мы обычно берем людей с опытом на Python от года, плюс опытом на другого языке (3+ года). Чаще всего php/Java». Другими словами, они вообще не рассматривали варианты, чтобы взять человека с одним лишь Python.
6. Поговорив с ребятами с профильных форумов, стало понятно, что это достаточно типичная ситуация. Из их рассказов стало понятно, что люди после тщетных поисков либо шли работать на php/1c, либо как-то пролазили через upwork/собственный проект/автоматизацию тестирования.
Но опять же от случая к случаю.
В общем, оказалось, что Python — это отличный язык, который позволяет делать мощные проекты. И так уж сложилось, что их концентрация находится в столицах. И раз это сложные проекты, то и сотрудники туда требуются уже уровня middle+. Готов ли человек, который только что изучил Python получить такую вакансию? Трудно!
Но есть другой путь!
В настоящий момент только в моем городе находится 24 вакансии на php различного уровня (начиная от небольших компаний, которым нужно поддерживать текущий сайт, заканчивая гигантами e-commerce, которые предлагают последовательное расширение функционала). И примерно столько же вакансии на 1С. И где-то на половине из этих вакансий готовы взять человека, который хотя бы что-то знает в программировании. Скорее всего, это не самые лучшие места, но это уже первая работа, после который вы официально для HR станете программистом с опытом.
Так что в итоге
Получается ситуация, что можно изучить клевый язык программирования Python и остаться на улице. А можно выучить «ненавистный» php/1c и получить работу. Качество этой работы, конечно же, оставляет много вопросов –, но это уже опыт.
Что касается меня, то в моих условиях (не ехать в Москву/СПб) я фактически потратил время на изучение языка, который сейчас востребован исключительно в моих собственных проектах. Найти работу на месте или удаленке у меня не получилось. Сейчас иду в сторону php, так как на нем банально есть работа.
Поэтому если вы не живете в Москве, СПб, не являетесь студентом тех-вуза, то я бы не советовал вам учить Python первым языком. Обратите внимание на PHP — под него всегда есть места, есть работа, есть опыт. А дальнейший путь развития уже за вами.
P.S. Как подсказал мне мой знакомый, на Ruby почти такая же ситуация. Но тут я уже говорить с уверенностью не могу.
Комментарии (15)
21 февраля 2017 в 14:45 (комментарий был изменён)
+6↑
↓
Почему не нужно учить python первым языком?Ответ «питон не нужно учить, потому что я не нашёл работу»? Так где в этом ответе парадокс, и именно парадокс Python?
По заголовку я ожидал увидеть что-то касающееся ЯП, а не историю «успеха/не успеха»…
21 февраля 2017 в 14:59
0↑
↓
Поправил заголовок, чтобы не было разногласий. Благодарю за фидбек.21 февраля 2017 в 15:05
0↑
↓
Пожалуйста. Только, кмк, питон уж совсем здесь не причём. Замените его на любой другой ЯП, ситуация будет похожая. Всем нужен опыт, 3+ года стажа. Всем нужны «комбайнеры», тем более на web.21 февраля 2017 в 15:07
0↑
↓
Ну, всё таки как абсолютно правильно написал автор статьи, на некоторых языках гораздо проще найти джуниорскую вакансию, чем на других.
21 февраля 2017 в 14:53
+3↑
↓
Чет мне подсказывает. Что Вы когда собеседываетесь на вакансию на удаленку либо не показываете вообще никаких знаний о языке. Либо указываете заплатанные ожидания не меньше чем у тех дира.
Иначе я ваши проблемы понять не могу. Толпы веб студий лепят сайтики на джанге.
Джанга это почти также хорошо для веб студии как своя CMS (клиент так просто не уйдет.)21 февраля 2017 в 14:57
+2↑
↓
Нужно различать «учить язык чтобы научиться программировать» и «учить язык чтобы найти на нём работу».Многие советы по выбору первого языка — это именно первый вариант.
Но в целом всё верно написано, если выбирать язык, чтобы на нём джуниорствовать в веб-программировании — то лучше начинать с PHP.
21 февраля 2017 в 14:59
0↑
↓
Разве, «не все уже перехали» на node.js?21 февраля 2017 в 15:05 (комментарий был изменён)
0↑
↓
Честно говоря, про то как обстоят дела с node.js, я мало что знаю — в моём кругу общения нет людей, которые на ней разрабатывают. И в тех информационных источниках, которые я читаю регулярно, она редко упоминается.
Но PHP пока ещё вполне востребовано, даже если node.js и конкурирует с ним.
21 февраля 2017 в 14:58
+3↑
↓
Почему не нужно учить python первым языком
Дело не в питоне. Изучения одного языка недостаточно, чтобы «быть программистом». Как минимум, не будет достаточного кругозора, чтобы принимать взвешенные решения. Нужно знать хотя бы 2–3 существенно разных языка.
Когда говорят, что питон хорош как первый язык, подразумевают, что вслед за первым языком будет изучение других, например С/С++ (а вместе с ними и архитектуры ЭВМ), потом например Java (вместе с ней принципов построения надёжного ПО), ещё какого-нибудь Хаскеля, и т.д.
21 февраля 2017 в 14:58
0↑
↓
Печальная ситуация, но и вы и ваш знакомый — правы!21 февраля 2017 в 15:02
0↑
↓
*СПб21 февраля 2017 в 15:10
0↑
↓
Благодарю.
21 февраля 2017 в 15:10
+1↑
↓
имхо, если вы первоочерёдно учите программирование, то синтаксис конкретного языка впринципе не имеет значения,
если учите синтаксис языка, то программировать вы будете учиться ещё долго.
Имея хорошее внятное представления об алгоритмах, можно писать буквально на любом языке, погуглив синтаксис на ходу.21 февраля 2017 в 15:28
+1↑
↓
А как же знание инфраструктурного софта? (работа с субд, веб серверами, ос (например человек из мира микроконтроллеров в веб переходит)), библиотеки и фреймворки специфичные для данного языка (не тот объем кода, тонкости использования которого можно понять за пару месяцев), специфичные для данного языка/платформы архитектурные паттерны и принципы построения кода?
21 февраля 2017 в 15:31
0↑
↓
Добро пожаловать в Россию. Хотите разрабатывать не на 1С — езжайте в столицы.