Почему не нужно учить python первым языком

Если вы будете искать ответ на вопрос: «Какой язык программирования выбрать первым», то где-то в 90% всех случаев вам будет предложен Python — как наиболее простой в изучении язык. И очевидно, что определенное число людей, которые до этого не учили программирование, выберут 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 почти такая же ситуация. Но тут я уже говорить с уверенностью не могу.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 342
  • +65
    Почему не нужно учить python первым языком?

    Ответ «питон не нужно учить, потому что я не нашёл работу»? Так где в этом ответе парадокс, и именно парадокс Python?

    По заголовку я ожидал увидеть что-то касающееся ЯП, а не историю «успеха/не успеха»…
    • +1
      Поправил заголовок, чтобы не было разногласий. Благодарю за фидбек.
      • +4
        Пожалуйста. Только, кмк, питон уж совсем здесь не причём. Замените его на любой другой ЯП, ситуация будет похожая. Всем нужен опыт, 3+ года стажа. Всем нужны «комбайнеры», тем более на web.
        • +13
          Ну, всё таки как абсолютно правильно написал автор статьи, на некоторых языках гораздо проще найти джуниорскую вакансию, чем на других.
          • +2
            Ну я понял, надо первым надо учить язык, по которому больше джуниорских вакансий. Потом пишешь свою имиджборду и далее по списку. До «уже через пол года ты будешь получать такие суммы»))
            А у меня вот другие приоритеты были — мне было просто интересно. Ну просто в кайф было понимать как это все работает. И сейчас в кайф.
            Вообще смущает меня подход к выбору профессии по максимальной планке зарплаты. И моде.
            • +1
              Да я тоже в программирование пошёл ради интереса :)
              До этого шесть лет работал в техподдержке/администрировании, в свободное время писал кое-что ради интереса на JS, PHP, VBA и по мелочам ещё на паре языков. Но всерьёз решил связать свою жизнь с программированием только после того, как познакомился с Питоном, и понял, что мне невероятно нравится этот язык.

              Однако же когда меня спрашивают «я решил стать программистом, какой язык посоветуешь?», я даю совет исходя из того, на каком языке человеку проще будет найти работу. Пусть человек получит стабильный кусок хлеба с маслом, начнёт получат реальный опыт. А там уж если программирование — это его тема, то он сам разберётся, какие языки и технологии ему интересны.
              • +2
                и понял, что мне невероятно нравится этот язык.

                Но чем именно?

                • 0
                  Я бы мог сейчас перечислить ряд прагматических достоинств питона, но на самом деле моя симпатия к нему имеет скорее эстетическую причину.
                  Мне просто приятно работать с питоном. Нравится ощущение ясности, простоты и лаконичного изящества, которые ему присущи.
                  • 0

                    Ясно, спасибо.


                    Интереса ради, а всякие функциональные языки вроде окамля или хаскеля вы пробовали?

                    • 0
                      Всерьёз пока не брался за них, но то, что я видел мне показалось очень интересным.
                      У меня в плане стоит выучить что-нибудь функциональное. Но этим я, наверное, займусь ближе к лету, а прямо сейчас хочу освоить Go.
                      • 0

                        Попробуйте. Я после хаскеля на скриптовые языки смотреть вообще не могу :)

                        • +1

                          Тут некоторые пишут типа "Изучите сначала Python, а потом уже и на PHP не так сильно говнокодить будете"… А я вот подумал, почему бы Haskell не советовать в качестве первого языка? Он гораздо ближе к математике, т.е. вначале изучения будет на порядок меньше WAT. Да и код на Python после Haskell будет гораздо лучше, т.к. на самом деле Python не так уж сильно ограничивает возможность говнокодить, по сравнению с Haskell.

                          • +2

                            Потому что для значимой части людей близость к математике является недостатком, а не преимуществом, к сожалению.

                            • 0

                              Ну, раньше считалось, что в программирование идут люди с т.н. математическим складом ума… Кроме того, у меня есть ощущение, что с обычными знаниями школьной алгебры проще въехать в Haskell, чем в C или Python.

                            • 0

                              Потому что до Haskell желательно познакомиться с лямбда исчислением, и изучению самого языка много времени уделить надо. Но тут Вы правы, советуйте Haskell как первый язык, и советуют, и это очень хорошо.

                              • +1

                                Это скорее вопрос подхода… лямбда-исчисление и теория категорий — это всё хорошо, но необязательно их глубоко изучать, чтобы начать учить язык. Для начинающих вполне можно писать в стиле "Learn You a Haskell for Great Good!" или даже ещё проще.
                                Сам же Haskell в базовых применениях гораздо легче и логичнее, чем тот же Python. Где ещё Вы можете для учебной задачи реализовать какую-нибудь стандартную функцию, потом заглянуть в исходники GHC и обнаружить, что она именно так и написана?

                • 0
                  Ну допустим у меня был выбор срочно устраиваться в 1с ибо есть вакансии, или хз сколько времени жить на улице и питаться святым духом (альтернатива — работа не связанная с IT). И вполне здраво в таком случае ориентироваться на первый язык именно по наличию вакансий.
            • +1
              Я думаю, что Python — один из лучших языков для знакомства с программированием. Сам когда-то начинал с Паскаля(эх, времена!), но современным начинающим программистам все же стоит начать изучение с другого инструмента. А насчет вакансий — не знаю, это наверное не повод говорить о том, что Python плох в начале пути
          • +8
            Чет мне подсказывает. Что Вы когда собеседываетесь на вакансию на удаленку либо не показываете вообще никаких знаний о языке. Либо указываете заплатанные ожидания не меньше чем у тех дира.
            Иначе я ваши проблемы понять не могу. Толпы веб студий лепят сайтики на джанге.
            Джанга это почти также хорошо для веб студии как своя CMS (клиент так просто не уйдет.)

            • +26
              Нужно различать «учить язык чтобы научиться программировать» и «учить язык чтобы найти на нём работу».

              Многие советы по выбору первого языка — это именно первый вариант.

              Но в целом всё верно написано, если выбирать язык, чтобы на нём джуниорствовать в веб-программировании — то лучше начинать с PHP.
              • –3
                Разве, «не все уже перехали» на node.js?
                • +2
                  Честно говоря, про то как обстоят дела с node.js, я мало что знаю — в моём кругу общения нет людей, которые на ней разрабатывают. И в тех информационных источниках, которые я читаю регулярно, она редко упоминается.
                  Но PHP пока ещё вполне востребовано, даже если node.js и конкурирует с ним.
                  • +4
                    А что, разве есть такая тенденция? Все и на ноду?
                    • 0
                      Да. Как раз в таком проекте работаю. Все клиенты, новые приложения им — всё на «этих ваших нодах».
                      Конкретно сейчас делаю инфрастуктуру одного неменцкого производителя алкогольной продукции — всё на Ноде. Ну и всякие реакты и иже с ними. Честно — не особо в их код лажу, кроме `npm install` и `npm run` — ничего не и не использую. Ну и `vim package.json`, когда начинаются танцы с зависимосятми :-)
                      Честно говоря, с точки зрения девопс-инженера — с нодой чрезвычайно приятно иметь дело в плане простоты сборки и деплоя.
                    • +2
                      По востребованности, ситуация скорее всего такая же как с питоном. В Москве, Питере найти работу можно, в остальных регионах сложнее.
                      • +1

                        Ну востребованность react- angular- и прочих frontend-спецов достаточно большая. Хватает и вакансий по удалёнке. Я смотрю даже з\п до 250 т.р., предлагают. Тут, похоже, ситуация сильно лучше, чем с pyhton-ом.

                      • +4

                        А на что именно переехали? Разве на nodejs появились какие-либо популярные framework-и уровня топовых php, вроде yii? Я, честно говоря, упоминаний, кроме как exress.js и ему подобных, и не встречаю в сети. Сам какое-то время назад поискал варианты — что-то есть, но скорее как личные движки энтузиастов. А express.js явно не про веб-студии. По-быстрому сбацать простенький бакенд — ок. А делать полноценную CMS ― увольте. Или нашлись такие герои? Да и вообще асинхронная природа JS не располагает к написанию рутинных конвеерных сайто-поделий, на кои столь большой спрос наблюдается. Нужно чтобы каждый первый джун был готов на этом работать, после полутора часов втыкания в кодовую базу.

                        • 0
                          Вашими словами «react- angular-» — они уже и на стороне бэка используются.

                          А на что именно переехали?

                          Я не знаю, поэтому и спрашиваю. У меня ощущения, что новое (а новое сейчас, наверное, на 90% — лэндинги) — только js. И опять же «react- angular-» позволяют вообще обойтись без бэка, начиная с роутинга на стороне клиента.
                          • +4
                            И опять же «react- angular-» позволяют вообще обойтись без бэка, начиная с роутинга на стороне клиента.

                            Ну все эти реактивные штуки нужны для серьёзных web-приложений, но зачем они рядовому web-сайту? Как ежу футболка. Одни только минусы и проблемы. А чего нужно больше — SPA или обычных сайтов? Думаю ответ очевиден. Просто за хайпом не видно реального положения вещей. Серёьзный "взрослый" frontend нужен большим долгостроящимся web-приложениям. В то время как большая часть интернета представляет из себя скорее брошюры, газеты и пр. печатные издания. Люди ищут на них информацию, а не интерактив.


                            Причём пишу как тот самый frontend-разработчик (который про тот самый react- и пр.). Я не понимаю этой шумихи. И сильно негодую от попыток обеспечить render какого-нибудь текстового блога на react-е (причём на frontend-части), причём когда на лету формируется из markdown-а html.

                            • 0
                              И сильно негодую от попыток обеспечить render какого-нибудь текстового блога на react-е (причём на frontend-части), причём когда на лету формируется из markdown-а html.

                              Почему?
                              Кмк, react+redux делают веб-разработку может и не такой стройной, как static HTML, но осмысленной и логичной.
                              • +11

                                Зачем вам вообще state в текстовом блоге? Зачем вам реактивный шаблонизатор для рендера статики? Зачем вообще всё это нужно, когда клиент от вас ждёт просто стили и html-статьи? Зачем забивать гвозди микроскопом?

                                • –5
                                  Зачем вам реактивный шаблонизатор для рендера статики?

                                  Как вариант, разработка в этом случае становится ближе к «декстопной».

                                  Зачем забивать гвозди микроскопом?

                                  Даже, если отойти от web, этот вопрос также актуален. Такие тренды.
                                  • +6
                                    разработка в этом случае становится ближе к «декстопной»


                                    И что в этом хорошего?

                                    Такие тренды


                                    Какие тренды могут заставить вменяемого разработчика использовать не подходящие под проект технологии?
                                    • 0
                                      Например, использование всяких трендовых технологий в своих бложиках и прочих pet projects для обучения этим технологиям.
                                      • +1
                                        С одной стороны, логично, с другой — всё равно не понимаю. Т.е. мы берем какой-то «трендовый» молоток и пытаемся забивать им обычные гвозди, для которых лучше подходит старый добрый обычный молоток. А потом бежим всем рассказывать о своем непрофессионализме. Получается так.
                                        • +1
                                          > Т.е. мы берем какой-то «трендовый» молоток и пытаемся забивать им обычные гвозди, для которых лучше подходит старый добрый обычный молоток.

                                          Не забывайте, плотник опытом работы обычным молотком в течении 10 лет может стоит в разы меньше чем плотник с опытом работы «трендовым» молотком (сравните, стоимость разработчика с 10 лет AngularJS/React c стоимостью человека, который умеет только рисовать статические HTML странички и натягивать шаблоны на CMS). При этом вряд ли кто-то поймет на следующей работе насколько обоснованным был выбор «трендового» молотка. Поэтому чисто из меркантильных побуждений разработчикам выгодно использовать технологии, которые позволят себя потом продать выгоднее.
                                          • 0
                                            Так я не говорю, что не нужно пробовать новые технологии. Пробуйте на здоровье, только выбирайте соответствующие проекты. А то запилят hello world на Hibernate — ясен хрен он там хорош, а потом пихают куда ни попадя, городя костыли.
                                            • +1
                                              Пробуйте на здоровье, только выбирайте соответствующие проекты.

                                              А если нет соответствующих проектов у твоего работодателя/в твоем городе? Вот тебе предлагают делать сайт и ты понимаешь что самое простое это статические страницы либо край простенькая CMS на PHP. А другой вариант AngularJS, React, питон и т.п.

                                              В принципе, в конкретных проектах они может быть не сильно нужны (но клиент готов их оплатить), но зато через пару лет можно будет уйти на зар.плату в 5 раз большую, либо вечно делать статические страницы и натягивать шаблоны CMS за копейки. Что по вашему предпочтительнее с точки зрения разработчика?
                                              • +1
                                                А если нет соответствующих проектов у твоего работодателя/в твоем городе?

                                                Можно самому создавать соответствующие проекты или искать дистанционные.


                                                Что по вашему предпочтительнее с точки зрения разработчика?

                                                Профессионал должен стремиться выбрать наиболее подходящее решение. Желание что-то новое попробовать — это не аргумент. Должно быть что-то ещё.

                                                • 0

                                                  Желание попробовать что-то новое с целью последующего выбора наиболее подходящего решения — аргумент? Как выбирать подходящее, если знаешь только одно?

                                                  • +1
                                                    Желание попробовать что-то новое с целью последующего выбора наиболее подходящего решения — аргумент?

                                                    Если работа подразумевает research, то да. А если нет, то в свободное время изучать. Я считаю, что такой подход более честен и профессионален.

                                                  • 0
                                                    Можно самому создавать соответствующие проекты или искать дистанционные.

                                                    Можно, если у тебя 10+ лет опыта в разных технологиях. На ранних стадиях все печальнее.

                                                    Профессионал должен стремиться выбрать наиболее подходящее решение.

                                                    Для этого надо сначала стать профессионалом и понимать какое решение наиболее подходящее. Если на данный момент наиболее подходящее это скажем нечто устаревшее, вроде Visual FoxPro, но при этом стоимость профессионала на рынке после такого опыта будет нулевой, есть ли смысл выбирать такое решение?

                                                    Надо понимать что идеальное решение для заказчика и для исполнителя могут быть несколько разными. Конечно, не должно быть явного вредительства, но и работать с ненужной рынку технологией без очень хорошей компенсации это быть самому себе злобным буратино.
                                                    • 0
                                                      Можно, если у тебя 10+ лет опыта в разных технологиях. На ранних стадиях все печальнее.

                                                      Без опыта можно начать помогать существующим OpenSource-проектам, там всегда можно найти несложные задачи, до которых у мейнтейнеров просто руки не доходят.
                                                      А как вы хотели, работодатели не будут становиться в очередь, чтобы джуниоры за их счёт учились, а как только обрели минимальный уровень — слиняли на более высокую зарплату.


                                                      Если на данный момент наиболее подходящее это скажем нечто устаревшее, вроде Visual FoxPro

                                                      Подходящее должно быть не только в технологическом плане, но и для бизнеса… Понятно, что шансов найти программистов, желающих поработать с FoxPro с каждым годом всё меньше, поэтому для бизнеса будет разумно рассмотреть разовые расходы на переписывание вместо возрастающих в геометрической прогрессии расходов на поддержку.

                                                  • 0
                                                    Что по вашему предпочтительнее с точки зрения разработчика?

                                                    Не зацикливаться на том, что предлагают работодатели данного города в данный момент. Почему бы не попробовать запилить свой проект?
                                                    • 0

                                                      Это означает стать бизнесменом, а не разработчиком.

                                                      • 0
                                                        У меня на гитхабе есть проекты, которые я пилю в свободное время, с использованием технологий «не с работы». Еще есть закрытый проект, который я тоже пилю в свободное время. Есть надежда, что когда-нибудь он выстрелит, но я не тешу себя иллюзиями насчет быстрой окупаемости. И что, эти проекты делают меня «бизнесменом, а не разработчиком»?
                                                        • 0
                                                          У меня на гитхабе есть проекты, которые я пилю в свободное время, с использованием технологий «не с работы».

                                                          Не делает


                                                          Есть надежда, что когда-нибудь он выстрелит, но я не тешу себя иллюзиями насчет быстрой окупаемости.

                                                          Делает. Вы рассуждаете в бизнес-категориях типа "выстрелит" и "окупаемость". Раз уж говорите об окупаемости, значит и себестоимость постоянно подсчитываете, типа "на работе я получаю 20 баксов в час, на проект потратил уже 1000 часов и ещё столько нужно потратить чтоб хоть как-то запустить, значит он должен принести минимум 40 000 баксов или я зря его пишу".

                                                          • 0
                                                            Раз уж говорите об окупаемости, значит и себестоимость постоянно подсчитываете


                                                            Неа, не подсчитываю. Делаю в свое удовольствие. Выстрелит — круто, не выстрелит — ну и хрен с ним, в следующий раз получится, а пока интересно провели время и приобрели бесценный опыт.

                                                            Но это не важно, т.к. open source projects, как мы выяснили, не делают меня бизнесменом и при этом не мешают пробовать новые технологии и не ограничивают тем, что выбрал работодатель.
                                                            • 0

                                                              Тогда о какой окупаемости речь? ) Хоть копейку принесет, уже окупился? Ну ладно, хостинг окупит, так? )


                                                              Похоже неправильно вас понял. Решил, что вы советуете послать работодателей с их технологиями и пилить свой проект, в надежде хотя бы на хлеб им заработать теми, которые нравятся. Вы же, похоже, советуете два и более стеков технологий изучать: достаточный для трудоустройства с желаемым уровнем дохода и чисто для удовольствия (пускай и надеясь в глубине души, что он станет основным источником доходов в будущем — то ли свой проект стрельнет, то ли местные работодатели поумнеют, то ли свалишь (реально или виртуально) туда где они уже поумнели :) )

                                                              • +2
                                                                Решил, что вы советуете послать работодателей с их технологиями и пилить свой проект, в надежде хотя бы на хлеб им заработать теми, которые нравятся.


                                                                Такой вариант тоже может быть, почему бы нет, но вообще я хотел сказать, что рассчитывать только на работодателей в плане саморазвития — как-то не то. Главное оправдание тут — «я и так 8 часов работаю, нужно поддерживать баланс и т.д. и т.п.»
                                                                • –1
                                                                  рассчитывать только на работодателей в плане саморазвития — как-то не то.

                                                                  Полностью согласен. Особенно если заведомо планируется по достижению некоего уровня этого работодателя покинуть. Это мошенничеством или воровством попахивает даже, если за счёт работодателя развиваться чтобы его покинуть.

                        • +16
                          Почему не нужно учить python первым языком

                          Дело не в питоне. Изучения одного языка недостаточно, чтобы "быть программистом". Как минимум, не будет достаточного кругозора, чтобы принимать взвешенные решения. Нужно знать хотя бы 2-3 существенно разных языка.


                          Когда говорят, что питон хорош как первый язык, подразумевают, что вслед за первым языком будет изучение других, например С/С++ (а вместе с ними и архитектуры ЭВМ), потом например Java (вместе с ней принципов построения надёжного ПО), ещё какого-нибудь Хаскеля, и т.д.

                          • 0
                            Печальная ситуация, но и вы и ваш знакомый — правы!
                            • 0
                              *СПб
                            • +6
                              имхо, если вы первоочерёдно учите программирование, то синтаксис конкретного языка впринципе не имеет значения,
                              если учите синтаксис языка, то программировать вы будете учиться ещё долго.
                              Имея хорошее внятное представления об алгоритмах, можно писать буквально на любом языке, погуглив синтаксис на ходу.
                              • +5
                                А как же знание инфраструктурного софта? (работа с субд, веб серверами, ос (например человек из мира микроконтроллеров в веб переходит)), библиотеки и фреймворки специфичные для данного языка (не тот объем кода, тонкости использования которого можно понять за пару месяцев), специфичные для данного языка/платформы архитектурные паттерны и принципы построения кода?
                                • +8
                                  Создаётся ощущение что вы подменяете ширину знаний на глубину знаний в предметной области.
                                  Без знания алгоритмов, вам знание набора функций фреймворка поможет мало, «бумажный» результат может и будет, и будет код, но кодревью такой результат пройти не сможет.
                                  И каждый раз будут тыкать в неэффективность решений,
                                  пока кто-то, либо кодер, либо ревьюер не прийдёт к осознанию, что надо учить основы. И по моему убеждению, в основе должен быть не фреймворк, а алгоритмические знания.
                                  • +5
                                    Но и без знаний фреймворков/библиотек/инструментов предметной области работать тоже не получиться, и освоить их выше уровня junior за пару месяцев не выйдет насколько хорошо бы вы не знали алгоритмы. Важно сочетание знаний базовых (алгоритмы, структуры, паттерны, подходы, парадигмы и т.п.) и знаний инструментов и предметной области. Все это мифы, имхо, что можно запросто и без потерь перейти с одного стека на другой имея только базу. Разработчик драйверов не сваяет нормальный сайт и не напишет учет на 1с без более-менее длительной переподготовки, как верно и обратное. Знание специфики предметной области и стека инструментов все таки важно.
                                    • 0
                                      Не получится работать без фреймворков? наверно да.
                                      А получить работу без фреймворков наверно всё-таки можно.

                                      Освоить их на уровне Джуна можно, автор вроде как и есть джуниор.

                                      Многие берут джунов на вырост. Некоторые даже берут студентов на неполный рабочий день без опыта работы, тоже на вырост, если голова есть, то применение найдётся. Но это МСК, согласен, тут если не подходит, то держать особо смысла нет, интереснее на других обратить внимание. Как я представляю, в не МСК, при отсутствии альтернативы взять джуна ещё больше смысла, ибо выбирать почти не из кого, и действительно проще научить просто толкового парня без опыта, чем захантить, ибо хантить бывает не на что.
                                      • +1
                                        Не получится работать без фреймворков? наверно да.

                                        Именно это и имел в виду. Хотя кроме фреймворков все же стоит добавить и другие инструменты, перечисленные мной выше. Очень часто у людей создается ложное впечатление что стоит изучить некую «базу» и на остальное можно не обращать внимания, что, имхо, не так, изучение вещей привязанных к языкам тоже важно. Ну и в провинции обычно важны уже готовые специалисты, ибо нет ресурсов (или желания) у предприятий ожидать пока человек переучится под другие технологии, даже месяц-два, чаще нужно «фигак-фигак и в продакшен» иначе разоримся если через неделю продукт не выкатим. По крайней мере у меня именно такое ощущение возникло.
                                    • +6
                                      Без знания алгоритмов, вам знание набора функций фреймворка поможет мало

                                      Часто вижу эту фразу.
                                      А не подскажете, на жизненном примере, без знания каких (или даже какого) алгоритма, фреймворки мало помогут? Ну вот есть, например, типовая задача и решить ее без знания некоего алгоритма никак.
                                      • +2
                                        Конкретные примеры вспоминать не стану, выдумывать синтетическую ситуацию тем более.
                                        Но ситуация за полтора десятилетия взращивания джунов примерно одинаковая — человек сразу ищет библиотечные ф-ии, которые, как он полагает подходят, и потом, если на каких-то определённых входных данных получается результат, сдаёт работу, типа «готово».
                                        В итоге оказывается, что взял он не то и не тогда, и не с теми параметрами. Почему? Потому, что вот он фреймворк, и вот из него ф-ия которая ему якобы нужна, а про инициализацию/деинициализацию или передаваемые типы вообще ни в зуб ногой, но на тестовом примере каким-то местом отрабатывает (шаманство ).
                                        О том чтобы понять, как это работает, об инициализациях/финализациях либо надо каждый раз подсказывать, либо учить азам, откуда берутся ресурсы в программе, и куда они уходят.
                                        Так лучше бы он не знал конкретного фреймворка, но зато шарил в типах, их скоростях, и занимаемых ими ресурсах, а фреймворк уже на джуна можно и натянуть.
                                        • +4
                                          Классная фраза — «Натянуть фреймворк на джуна». Записал себе, спасибо :-)
                                          • 0
                                            Я так и не понял из ваших слов какие алгоритмы надо-то? Если за полтора десятилетия не получается вспомнить примеры…

                                            вот из него ф-ия которая ему якобы нужна

                                            Выглядит как-будто он не разобрался в том что именно надо и что дает фреймворк.

                                            про инициализацию/деинициализацию или передаваемые типы вообще ни в зуб ногой

                                            Таки не везде инициализация/деинициализация есть, на сколько мне известно. А типы это всё-таки не алгоритмы и в разных языках немного по-разному себя ведут. О том, что есть строки и прочие типы, наверное, знает любой ждуниор.

                                            Вот если бы пример ближе к теме — языку python… Было бы намного интереснее узнать ваше мнение. А так выходит что вроде бы что-то написали и в тоже время ничего существенного.
                                            Наверное так называют idle talk.
                                          • +2
                                            А не подскажете, на жизненном примере, без знания каких (или даже какого) алгоритма, фреймворки мало помогут?

                                            Всё очень сильно зависит от того, что вы понимаете под алгоритмами. Вот, например, разница в скорости при работе с массивом и связным списком. Если её не знать, то можно серьёзно влететь. Сталкивается с этим вообще каждый программист. В 99% случаев он выбирает динамический массив, потому что знает, что он лучше подходит под задачу.


                                            Или вот что делать, если нам надо часто проверять, есть ли элемент в коллекции. Заюзать Set? А какой? Или, всё-таки массив, потому что его перебирать надо часто. А если массив, то его надо поддерживать в отсортированном состоянии. А как? Всё это алгоритмы. Всё это типовые задачи.

                                            • +2
                                              В реальности разницу в скорости массива и списка можно потестить за небольшое время.
                                              Моно погуглить в конце концов.
                                              Все, что вы перечислили часто просто пробуют, не зная заранее, что подойдет лучше.
                                              Опять же сфера деятельности сильно зависит.
                                              Создатели массовых небольших сайтов, тоже вполне себе программисты, могут и не столкнутся с такими вещами.
                                              Я вообще сторонник, на собеседовании задавать вопросы, больше относящиеся к работе, которую будет выполнять кандидат, а не про академических алгоритмических сферических коней в вакууме.
                                              Компаний, разрабатывающих прорывные технологии очень мало на реальном рынке труда (в статье речь ведь о нем).
                                              Если бы товарищ мега озадачился алгоритмами, изучил книги Кнута, потратил на это год, это в реальности, вряд ли помогло бы ему найти работу в его городе.
                                              Будет день и будет пища, как говориться. Появится нужда и алгоритмы посмотришь.
                                              • 0
                                                В реальности разницу в скорости массива и списка можно потестить за небольшое время.
                                                Моно погуглить в конце концов.


                                                Напомнило: «Окей гугл, как пересадить сердце?»
                                              • +3
                                                Вот, например, разница в скорости при работе с массивом и связным списком.

                                                И массив будет почти всегда быстрее. Потому что cache-friendly, а связный список — нет.


                                                Если её не знать, то можно серьёзно влететь.

                                                Лучше знать о существовании профайлеров и о том, что эффективнее с точки зрения людских ресурсов сначала написать корректную программу, а потом уже заниматься её оптимизацией.

                                                • +1
                                                  И массив будет почти всегда быстрее. Потому что cache-friendly, а связный список — нет.

                                                  Вот именно. Надо знать о таких вещах. А это и есть алгоритмы и структуры данных.


                                                  Лучше знать о существовании профайлеров и о том, что эффективнее с точки зрения людских ресурсов сначала написать корректную программу, а потом уже заниматься её оптимизацией.

                                                  Сначала написать корректную программу, в которой массив, вместо связного списка, потом потратить время на возню с профайлером, а потом переписать программу с использованием связного списка. Хотя при наличии начальных знаний о структурах данных можно сразу написать быстрый код.

                                                  • +2
                                                    Вот именно. Надо знать о таких вещах. А это и есть алгоритмы и структуры данных.

                                                    Нет, это сугубо прикладные особенности работы современных железок, которые на асимптотику никак не влияют. Программисту под ZX Spectrum об этом всём думать не надо было вообще, у него классический список быстрее на классических задачах вставки в середину и всякого такого.


                                                    Хотя при наличии начальных знаний о структурах данных можно сразу написать быстрый код.

                                                    На уровне алгоритмов немного другого рода. Квиксорт действительно будет быстрее пузырька на больших объёмах данных, это так. Но брать связный список или массив — я лично всегда беру массив, это структура данных по умолчанию, она почти всегда, в подавляющем большинстве случаев быстрее. Списки всякие берутся только в том случае, если нужны особые требования по семантике операций (вставка или удаление в массив инвалидирует итераторы, в список — нет, список чуть проще, на мой взгляд, сделать lock-free, и так далее).

                                              • +1
                                                Объясните за 1 минуту, чем левый джойн отличается от правого.
                                                Не можете? До свидания, учите свои фреймворки дальше.
                                                Задачи типа таких джойнов встречаются примерно каждый день в любой предметной области. Будь то сайт, геймдев или там суровый матан. Если человек этого не видит, то ему назад за парту, учить основы. Нагуглить, в отличие от фреймворка, он не сможет, потому что он просто не знает что именно гуглить.
                                                • +2

                                                  Зачем нужна минута на ответ на этот вопрос? Я либо знаю, либо не знаю. Но если я использую ORM — я могу вообще ничего не знать про джойны.

                                                  • +1

                                                    нельзя эффективно использовать ORM без понимания смысла SQLя, который он генерирует.

                                                    • +1
                                                      ORM-ы тут вообще не при чём. Есть два множества объектов (массива, коллекции, чего угодно), А и В, некоторые из объектов А имеет какое-то отношение к некоторым объектам из В. Нужно по заданным объектам из А выбрать те из связанных с ними В, которые удовлетворяют неким условиях. Или найти все А, для которых связанные В удовлетворяют тому-то и тому-то. Таких задач по 10 штук на дню в любой сфере.
                                                      Например, «программисты» (множество А) делятся на три категории (множество В). Первые не знают джойны, считают, что орм за них всё сделает, и постоянно изобретают неработающие велосипеды. Вторые считают, что знают джойны, но объяснить за 1 минуту по факту не могут, начинают бе-ме, а на работе постоянно изобретают неработающие велосипеды. И третьи знают джойны, велосипеды не изобретают и могут нарисовать примерно такую картинку:
                                                      тымц
                                                      image
                                                      • 0
                                                        Можно знать теорию множеств и не знать что такое «JOIN» (такого понятия в ней не существует). Работе это не помешает.
                                                        • 0
                                                          Ну положим это реляционная алгебра, а не теория множеств
                                                        • –1
                                                          Ну вот, пришел человек, который никогда раньше про эти джойны не слышал, а вы за пару минут рассказали и картинку нашли. Все. Проблема устранена. Если человек имеет пробелы, пусть даже фундаментальные, в теории, но достаточно хорош в практике — смысл в таком отношении, похвастать своими знаниями, унизить другого человека?
                                                          А другой пришедший человек, может быть, диплом с отличием получил, но дальше лаб, курсовых и дипломного проекта ничего не делал (и перечисленное делал, вероятно, с чужой помощью), то опять же, большой вопрос — уместна ли будет вся его зазубренная теория с нулем практики?
                                                          Вот если у человека нет ни теории, ни практики, тогда да, надо с чего-то начинать.
                                                          • 0
                                                            Проблема в том, что нет, после одной картинки проблема не устранена. Человек перешёл из категории 1 (не знаю и горжусь этим) в категорию 2 (да фигли там знать-то?). Но применять-то он это не умеет, просто не чувствует, что это про джойны. И встретив какую-нибудь задачку типа «один объект может принадлежать нескольким категориям», начинает что? Правильно, изобретать велосипеды.
                                                            Без практики в конкретной технологии программист идёт джуном и эту практику быстро набирает под руководством более опытного коллеги. Впрочем, и теряет квалификацию тоже быстро, модные фреймворки меняются каждые 2-3 года.
                                                            Без фундамента потолок программиста — максимум мид. Если он пролез выше и его код уже серьёзно не проверяют, он может накосячить в сложной задаче просто потому, что не понимает основ. Причём на простых случаях его велосипед будет работать.
                                                            • +1
                                                              Программист любого уровня может встретить задачу, которую он ранее не решал.
                                                              И, соответственно, он будет изобретать велосипед.
                                                              Фундамент программиста, понятие весьма размытое, на самом деле.
                                                              Если брать аналогии со строительством, подавляющее большинство строителей частных домов используют какой нибудь ленточный фундамент и строят всю жизнь.
                                                              Конечно, они не построят бункер или мега высотку.
                                                              Но… оно им и не нужно, просто такой работы нет.
                                                              Конечно, нужно стремиться к недостижимому идеалу. Вопрос, сколько ресурсов будет на это затрачено и окупиться ли, в конечном итоге.
                                                              Я бы все таки не стал начинающего программиста посылать изучать академические фундаментальные вещи. По простой причине. Возможно программирование это вообще не его сфера. И он покинет ее через время.
                                                              А вот поработав, если это его, он поймет, чего ему не хватает, интуитивно и станет изучать нужные ему темы.
                                                              Если смотреть шире, я бы вообще, сначала посылал молодых людей не в институты, а поработать на разных работах, а когда они осознают себя и свое призвание, дальше уже учиться :)
                                                    • 0
                                                      Из недавнего.
                                                      Есть коллекция непересекающихся периодов времени с пропусками
                                                      <date1, date2> <пропуск> <date1, date2>…
                                                      и коллекция фактов, случайно распределенных по датам, включая пропуски в коллекции 1
                                                      Порядок количества периодов времени — от едениц до сотен.
                                                      Порядок количества фактов — от едениц до сотен тысяч.
                                                      Лежат в разных базах, join на стороне базы недопустим.
                                                      Задача — разложить факты по периодам по условию date3 >= date1 && date3 < date2+ interval '1 day'.
                                                      Всё это нужно сделать примерно 100<n <2000 с разными коллекциями 1 и 2.
                                                      Наивное и лучшее решение различаются по времени на 1-2 порядка.
                                                      • +1
                                                        Если без лукавства, как будут делать подавляющее большинство программистов?
                                                        Так: «Ага, знаю вот я такой то алгоритм, лучше его применить, будет по времени быстрее»?
                                                        А вот и нет.
                                                        Сделают в лоб. Посмотрят время выполнения. Если устраивает, то так тому и быть.
                                                        Если не устраивает, будут думать, гуглить, изобретать велосипед, все в меру своего таланта.
                                                        И это не означает, что это плохие программисты.
                                                        Повторюсь, компаний, работающих на пике ИТ сложности (Гугл, там, Яндекс, Касперский… не знаю, еще кто то) мало. И нет такого широкого рынка для знающих мега алгоритмы.
                                                        И огромные массы людей работают в разработке бизнес приложений, для которых то, что я описал выше это самый рациональный путь с точки зрения затрат ресурса программиста.
                                                        • +1
                                                          Если без лукавства, как будут делать подавляющее большинство программистов?
                                                          Так: «Ага, знаю вот я такой то алгоритм, лучше его применить, будет по времени быстрее»?
                                                          А вот и нет.
                                                          Сделают в лоб. Посмотрят время выполнения. Если устраивает, то так тому и быть.

                                                          По вашему получается, что подавляющее большинство программистов потратят время на решение в лоб, потом потратят время на замеры, а потом, на поиск в интернете оптимального решения и на изготовление велосипедов. Это вместо того, чтобы сразу написать оптимальное решение.


                                                          При этом эти программисты, хотя не очень понимают что такое алгоритмы — умеют хорошо замерять время выполнения. Я лично таких не видел. Скорее всего замеры будут плохие и тот факт, что всё очень медленно — выяснится уже на продакшне.

                                                          • 0
                                                            Как это не удивительно, но замечание "получается, что подавляющее большинство программистов потратят время на решение в лоб, потом потратят время на замеры, а потом, на поиск в интернете оптимального решения и на изготовление велосипедов. Это вместо того, чтобы сразу написать оптимальное решение." является истинным. Не смотря на то, что "Скорее всего замеры будут плохие и тот факт, что всё очень медленно — выяснится уже на продакшне."
                                                            Просто потому, что сделать не очень хорошо и доводить до приемлемого уровня в разы быстрее, чем сделать сразу хорошо.
                                                            К примеру, у вас есть один суперпрофессионал (больше на рынке не нашлось), который точно делает сразу очень хорошо. И два десятка молодцов, которые думают, что делают сразу хорошо. Можно конечно нагрузить всё на профи, а остальные пусть получают свою зарплату. А можно распределить работу между молодцами. И если вдруг всё будет плохо, то подключится профи и ткнёт неумех в их грязный вонючий код. Код перестанет вонять, продукт станет лучше, а ребята подрастут в профессиональном плане и всё это за разумное время и за разумные деньги.
                                                            • 0
                                                              Просто потому, что сделать не очень хорошо и доводить до приемлемого уровня в разы быстрее, чем сделать сразу хорошо.

                                                              Тут нужно соблюдать какой-никакой баланс. Например, нанимать разработчиков, которые с первого раза делают на 60 из 100 и стоят немного дороже, чем разработчики, которые делают на 30 из 100. Или вообще столько же, я такое видел. И подготовка по алгоритмам для этих 60 из 100 нужна вообще базовая, никаких излишеств.

                                                        • 0

                                                          А скорость разработки этих решений, включая получение теоретических знаний?

                                                  • +1
                                                    Не только синтаксис) Как минимум встроенные функции и стандартную библиотеку.
                                                    • 0
                                                      Имя ф-ий в том или ином языке я имею неоторожность называть синтаксисом (прошу прощения), JSON.stringify и json_encode по мне одно и тоже обозначающих одно и то же действие на разных языках программирования.
                                                      Вот выстроить из доступных действий эффективный компактный и понятный код, это уже алгоритмические знания. Когда алгоритмические знания будут достаточно качественными, можно углубляться в языковые фреймворки, которые смогут сделать код ещё более быстрым, и компактным. (и тут я засомневался, что получится сделать с фреймворком более эффективный код )
                                                    • +1
                                                      В институте основы алгоритмизации преподавали на примере асемблера 16бит… дисциплинирует :)
                                                      • 0
                                                        Ну, на самом деле все имеет значение, конечно.

                                                        Если вы выберете первым ассемблер — то шансы остаться работать на всю жизнь, программируя микроконтроллеры, будут намного выше, чем при выборе javascript.

                                                        Синтаксис — он не имет значения при сравнении, при условии что это языки из одной группы, скажем так. Т.е. вот например javascript vs python — это различие вряд ли значимо, а вот замена любого языка из этой пары на кложу или Haskell — и ваш дальнейший путь может серьезно измениться.
                                                        • 0
                                                          Если вы выберете первым ассемблер — то шансы остаться работать на всю жизнь, программируя микроконтроллеры, будут намного выше, чем при выборе javascript.

                                                          Если позволите, немного перефразирую. Если начнете трудится, используя асм, то шансы да. Т.е. мое мнение — учится можно на чем угодно, получать реальные практики уже важно на чем(тоже относительно, конечно).

                                                          Хотя, талантливые люди талантливы во всём, бездарности выбирают что-то одно :)
                                                          • 0
                                                            Ну в общем да. Если изучать что-то в качестве хобби — то все немного иначе, чем если вы на этом уже зарабатываете.
                                                      • +4
                                                        Добро пожаловать в Россию. Хотите разрабатывать не на 1С — езжайте в столицы.
                                                        • 0
                                                          Путем нехитрых размышлений мы получаем, что Саратов таки столица. Судя по всему — Поволжья. В Саратове не просто есть возможность писать не на 1С. Тут есть возможность начать свой путь в разработке. И есть выбор для продолжения. Нюанс — джуниорские позиции на хх.ру не всегда выкладываются, но часто рекламируются в ВУЗах города.
                                                          • +1
                                                            И тут Волгоград, Самара, НиНо и даже Казань резко задумались, насчет такого утверждения, что именно Саратов — столица Поволжья)
                                                        • +7

                                                          Не найти работу с Django — это еще постараться нужно. Имхо, Пайтон — тут не виноват.

                                                          • +6
                                                            Хед хантер, Воронеж. 2 вакансии для мидла на миллион жителей. 0 — для джуниора. Особо не старался даже.
                                                            • 0
                                                              Миллион миллиону рознь. Угадайте, где больше программерских вакансий: в Новосибирском Академгородке со 130 тыс. жителей или в остальном полуторамиллионном Новосибирске?
                                                              • 0

                                                                Многое можно написать на эту тему, но, достаточно того, что, если следовать логике автора, лучший язык программирования — 1C — с ним можно в любом сельпо устроиться. Верно?


                                                                Я сейчас нахожусь в СПБ и работаю в команде с разработчиком из Дагестана, он живет в городе (?), название которого я даже запомнить не могу, и в команду он пришел практически после института (это к вопросу об уровне). Очень хороший разработчик если что. А компания, на которую мы работаем, находится в Германии. Как вы думаете, "плохие" языки программирования мы используем, или "хорошие"?

                                                                • +1
                                                                  Но согласитесь что это скорее исключение, на одного такого дагестанца приходится пара тысяч тех кто так не смог устроиться (ошибка выжившего вроде...), мы же говорим про людей около среднего уровня (не по опыту).
                                                                  • +1

                                                                    Ну хороший программист — это всегда исключение. Это в принципе профессия не для всех.

                                                                  • +1
                                                                    в команду он пришел практически после института (это к вопросу об уровне)


                                                                    Зря недооцениваете вышку (если она профильная). К концу обучения у человека уже 4-6 лет опыта программирования, пусть и не «коммерческого». Это лучше, чем 1 год самоучкой в «реальных» проектах.
                                                                    • 0

                                                                      Ага, он как-раз лично рассказывал про полную непригодность этого своего образования. Парень просто талантливый.

                                                              • +12
                                                                Вообще говоря прежде чем учиться чему то два года, что бы на этом зарабатывать, то нужно было начать с просмотра вакансий, а не заканчивать им.
                                                                • 0
                                                                  За два года рынок вакансий может несколько измениться
                                                                  • 0
                                                                    на этот случай уже голову надо включать, тут ничего другое не поможет. Взвешивать шансы, сравнивать варианты. Иметь план. «прикольно, выучу, авось что выйдет» это не план, а его отсутствие. План это «перспективно, выучил, нашел работу, вырос», где каждый шаг продуман заранее. Очевидно над шагом «нашел работу» автор и не думал, и словил проблемы. А ведь могло что угодно еще вылезти. Например что работы много, но берут только с высшим профильным. Или автор женщина в мусульманской стране, бред конечно, но всякое может быть.
                                                                    Все вопросы с которыми столкнулся автор, узнаются за пять-десять минут гуглинга (сам через это проходил), и непонятно почему за два года изучения языка автор не додумался это сделать.
                                                                • –3
                                                                  Я не начинающий программист и полностью полностью согласен с вашим мнением.
                                                                  • +13
                                                                    Epic fail.

                                                                    Но при чём тут питон? :-D
                                                                    • 0
                                                                      Главная идея в том, что достаточно большое число людей советуют учить первым языком Python. В итоге, если ваша цель «не просто для себя выучить», а найти работу. То это плохой вариант, если вы не житель Москвы/СПб + студент тех-вуза, которых хантят в гиганты.

                                                                      Чтобы у людей не было иллюзий =)
                                                                      • +5
                                                                        большое число людей советуют учить первым языком Python.

                                                                        Это не значит, что вы получите работу, связанную с этим языком. Речь идет о том, чтобы изучить его, чтобы вообще «въехать в тему». А потм учиться дальше. И дальше. И еще. А уж потом искать работу. И это будет вовсе не первый язык.
                                                                        • +1

                                                                          Вы совершенно неправильно понимаете эти советы. Питон нужно учить для основы — там прекрасная, логическая стандартная библиотека, язык очень хорошо продуман и структурированный. За месяц или 2 можно разобраться, а потом уже можно переходить на что-то востребованное в вашем городе.

                                                                          • 0
                                                                            Дык в этом то и проблема, что люди спрашивают для работы.
                                                                            • +1
                                                                              Люди обычно не говорят, для чего спрашивают.

                                                                              Когда явно спрашивают для работы, им отвечают что учить для работы. Когда просто спрашивают что учить, отвечают что именно надо учить.
                                                                              • +1

                                                                                А я про что. Без основы вы не найдете нормальную работу, не важно какой язык у вас востребован. Питон дает это основу легче всего, а потом уже можно переходить на пхп/js и тд. Это не означает, что нужно питон учить 2 года, вместе с базами, джанго и всем стеком для веба, только основы, написать какой-то скриптик, чтобы облегчал себе жизнь, какойто каталогизатор музыки или фоток и тд. А тогда уже смотреть популярные вакансии. Я когда переходил с пхп на питон, я переучивался заново, потому что на пхп в веб-студии научился костылям и гамнокоду. В питоне тоже можно в гамнокод, но это труднее, он отлично сбалансирован по легкости изучения и строгости, хоть и динамично-типизированный

                                                                                • 0

                                                                                  А если для работы, то что, не нужно уметь программировать?

                                                                                  • 0

                                                                                    Разные метрики выбора. Учиться программировать джаст фор фан можно годами и даже десятилетиями. Для работы обычно важно как можно быстрее получить работу.

                                                                                • –1

                                                                                  Не продуман этот язык.


                                                                                  Скрытый текст
                                                                                  Почему
                                                                                  ```
                                                                                  In [1]: { False: 'a', True: 'b', 0: 'c', 1: 'd' }
                                                                                  Out[1]: {False: 'c', True: 'd'}
                                                                                  ```
                                                                                  ?

                                                                                  Почему `len(stuff)`, но `stuff.sort()`?

                                                                                  Почему лямбды такие недоразвитые? (я на питоне не пишу и с примером сталкивался очень давно, поэтому сейчас сходу воспроизвести не смогу)

                                                                                  Как там с хвостовой рекурсией?

                                                                                  И это я уже не спрашиваю про всякий паттерн-матчинг, который здорово помогает декомпозировать типы.


                                                                                  И создавался он человеком, который о всяком связанном с языками программирования матане (и это, условно, не только описанное в Dragon Book, но и всякие там теории типов и прочее счастье) вообще ничего не знает.
                                                                                  • –1

                                                                                    Люблю людей, которые абсолютно не разбираются в теме и любят высказывать свое "проффесиональное" мнение)
                                                                                    Отвечу в обратном порядке


                                                                                    Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию)

                                                                                    (с) Вики
                                                                                    По поводу хвостовой рекурсии


                                                                                    С лямбдами все впорядке, не вижу, чего с ними не так


                                                                                    len(abc) — потому что в питоне простые типы написаны на чистом С и использование функции len() будет намного быстрее по скорости, актуально для больших строк — это компромис между елегантностью и скоростью


                                                                                    Потому что в питоне True = 1, a False = 0 и хеш у них тоже одинаковый.


                                                                                    У каждого языка есть свои компромисы, я не говорю, что он идеальный, но то что продуманный — так это видно, если сравнить с js или php

                                                                                    • 0

                                                                                      Люблю людей, которые видят намёки на утверждения о профессиональности мнения где попало.


                                                                                      По поводу хвостовой рекурсии

                                                                                      Накостылять можно почти что угодно где угодно, речь идёт о том, что в языке из коробки.


                                                                                      С лямбдами все впорядке, не вижу, чего с ними не так

                                                                                      Как мне в лямбде написать два стейтмента, например?


                                                                                      len(abc) — потому что в питоне простые типы написаны на чистом С и использование функции len()

                                                                                      Реализации интерпретатора есть разница, вызывать свободную функцию или метод объекта, учитывая, что к объекту нужно обращаться? Всё ещё хуже, чем я думал.


                                                                                      Потому что в питоне True = 1, a False = 0

                                                                                      А почему? У них же даже типы разные.
                                                                                      Да и ipython мне говорит, что нет:


                                                                                      In [1]: True is 1
                                                                                      Out[1]: False

                                                                                      У каждого языка есть свои компромисы, я не говорю, что он идеальный, но то что продуманный — так это видно, если сравнить с js или php

                                                                                      Не надо сравнивать с этими языками.

                                                                                      • –1
                                                                                        Накостылять можно почти что угодно где угодно, речь идёт о том, что в языке из коробки.
                                                                                        Как мне в лямбде написать два стейтмента, например?

                                                                                        А еще там написано, что Гвидо против оптимизации хвостовой рекурсии и я с ним согласен, тоже касается лямбд, если нужна функция с несколькими действиями — бери и создавай именно функцию, в которой хотя бы через имя можно понять, что она делает. Питон как раз не перегружен функциональщиной, для этого есть Clojure или Haskell, но позволяет познакомиться с самыми базовыми концепциями, как то функции первого порядка, лямбды, мап и тд.


                                                                                        А почему? У них же даже типы разные.
                                                                                        Да и ipython мне говорит, что нет:

                                                                                        Вы сравниваете ссылки


                                                                                        -> [1]: 1 == True
                                                                                        <- [1]: True

                                                                                        Не надо сравнивать с этими языками.

                                                                                        Именно с пхп автор предлагает начинать программировать — логично с ним и сравнивать, ну и также с очень популярным нынче javascript

                                                                                        • 0
                                                                                          А еще там написано, что Гвидо против оптимизации хвостовой рекурсии

                                                                                          Но почему? В чём смысл быть против какой-либо оптимизации?


                                                                                          если нужна функция с несколькими действиями — бери и создавай именно функцию, в которой хотя бы через имя можно понять, что она делает

                                                                                          Предположим, я map'лю лямбду по какому-то массиву, и хочу добавить отладочный вывод для каждого элемента. Вместо того, чтобы просто добавить стейтмент в лямбду, мне придётся выносить её в отдельную функцию.


                                                                                          Питон как раз не перегружен функциональщиной

                                                                                          Её там вообще нет. Наличие лямбд и функций с именами map и fold/reduce — не критерий функциональщины совсем.


                                                                                          Haskell

                                                                                          В котором WTF-моментов существенно меньше, например.


                                                                                          функции первого порядка

                                                                                          Высшего, кстати.


                                                                                          Вы сравниваете ссылки

                                                                                          Ссылки на что? На внутреннее представление объектов в интерпретаторе? А почему это меня вообще должно волновать?


                                                                                          И аргумент о том, что у них семантически типы разные, всё равно остаётся в силе.


                                                                                          Ну и то, что можно сделать True + True и получить 2, это круто. В языке со строгой типизацией я бы ожидал, что операция сложения к ним не применима, либо какое-то разумное определение сложения и умножения для поля из двух элементов (например, сложение — and, умножение — or).


                                                                                          Именно с пхп автор предлагает начинать программировать — логично с ним и сравнивать, ну и также с очень популярным нынче javascript

                                                                                          Тогда уж с точки зрения перспектив, лёгкости освоения и прочих подобных вещей, а не продуманности, про которую у автора не было ни слова.

                                                                                          • 0
                                                                                            Но почему? В чём смысл быть против какой-либо оптимизации?

                                                                                            Тут более подробно про "функциональность" в питоне и почему именно так все организовано


                                                                                            Ссылки на что? На внутреннее представление объектов в интерпретаторе? А почему это меня вообще должно волновать?

                                                                                            В питоне нету выражения для передачи по ссылке, поэтому


                                                                                            True is 1

                                                                                            в питоне только для проверки ссылок, в коде очень редко используеться(только для проверки синглтона встречал), даже линтеры выдают предупреждения об этом.


                                                                                            Тогда уж с точки зрения перспектив, лёгкости освоения и прочих подобных вещей, а не продуманности, про которую у автора не было ни слова.

                                                                                            Как раз с точки зрения освоения он намного лучше подходит чем пхп или js

                                                                                            • 0
                                                                                              Тут более подробно про «функциональность» в питоне и почему именно так все организовано

                                                                                              Выглядит именно как следствие хренового и непродуманного дизайна, на мой взгляд.


                                                                                              Как раз с точки зрения освоения он намного лучше подходит чем пхп или js

                                                                                              Это другой разговор, а мы ведь сейчас обсуждаем не это, верно?


                                                                                              И так всё-таки, ну просто интересно очень, почему нет типа Bool, а вместо этого какой-то костыль?

                                                                                              • 0
                                                                                                Выглядит именно как следствие хренового и непродуманного дизайна, на мой взгляд.

                                                                                                Прям в с++ все продумано и логично — с трудом верится. Там четко описаны причины ввода функциональных елементов — это желание сообщества, изначально он был продуман именно для ООП, поэтому пришлось находить компромиссы.


                                                                                                А что з точки зрения математики 0 и 1? Лично мне очень удобно подобное сравнение, так же как пустой список или словарь означает False. В питоне любое значение отличное от 0 приравнивается к True если проверку делать в if — и это чертовски удобно для разработки.


                                                                                                И вообще для критики принято показывать сравнение, которого вы ни разу не сделали, поэтому спорить с вами нету никакого смысла

                                                                                                • +2
                                                                                                  В питоне любое значение отличное от 0 приравнивается к True если проверку делать в if — и это чертовски удобно для разработки.

                                                                                                  Мммм запахло старым добрым С.
                                                                                                  • +1
                                                                                                    Прям в с++ все продумано и логично — с трудом верится.

                                                                                                    Нет. Но у плюсов был серьёзный констрейнт задачи в виде совместимости с C. У питона такого констрейнта не было.


                                                                                                    А что з точки зрения математики 0 и 1?

                                                                                                    Единичный элемент по сложению и по умножению соответственно.


                                                                                                    так же как пустой список или словарь означает False

                                                                                                    Ужас какой-то, если честно. Не принцип питона ли, что явное лучше, чем неявное?


                                                                                                    В питоне любое значение отличное от 0 приравнивается к True если проверку делать в if — и это чертовски удобно для разработки.

                                                                                                    У меня есть достаточно долгий опыт разработки на C++, где что-то похожее, и опыт на хаскеле поменьше, где нет неявных преобразований. В общем, отсутствие неявных преобразований удобнее.


                                                                                                    И вообще для критики принято показывать сравнение, которого вы ни разу не сделали, поэтому спорить с вами нету никакого смысла

                                                                                                    Сравнение с чем? Кем принято? Для демонстрации непоследовательности и внутренней противоречивости системы никаких сравнений делать не надо.

                                                                                                    • 0
                                                                                                      У питона такого констрейнта не было.

                                                                                                      Мне как раз кажется, что был. Думаю, что автор хотел упростить написание биндингов к C, а потом пришлось поддерживать груз обратной совместимости ©. // впрочем, что им мешало сделать по-человечески в третьей ветке, я ума не приложу. Видимо никому в продакшене это не мешает.


                                                                                                      В общем, отсутствие неявных преобразований удобнее.

                                                                                                      При условии, что тебя бьют за не сделанное вовремя преобразование на этапе компиляции. В рантайме проще немножко выкрутить гайки и упростить проверку.

                                                                                                      • 0
                                                                                                        При условии, что тебя бьют за не сделанное вовремя преобразование на этапе компиляции.

                                                                                                        Конечно. Без тайпчекера никуда!

                                                                                      • 0

                                                                                        От первого примера у меня самого изрядно пригорает, но так уж исторически повелось из-за упрощения взаимодействия с сишечкой.


                                                                                        Второе поведение логично и правильно.
                                                                                        Метод sort меняет массив in-place, меняя состояние, так что логично, что это метод данного объекта. есть отдельная функция sorted, если менять объект не нужно.


                                                                                        Лямбды принесли в жертву читаемости кода и упрощению интерпретатора. Код с многострочными анонимными кусками кода, кмк, сложнее понимать из-за возможной потери контекста внешнего куска при чтении. В однострочную лямбду ничего сложного засунуть принципиально нельзя без явного уродования кода.

                                                                                        • 0
                                                                                          Метод sort меняет массив in-place, меняя состояние, так что логично, что это метод данного объекта. есть отдельная функция sorted, если менять объект не нужно.

                                                                                          Это логичное и разумное объяснение, спасибо. Но почему тогда есть свободная функция next(), которая, судя по документации, вполне себе меняет состояние передаваемого ей итератора?


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

                                                                                          Но как? Вот же он, внешний кусок, прям где лямбда написана!

                                                                                          • +2
                                                                                            Но почему тогда есть свободная функция next(), которая, судя по документации, вполне себе меняет состояние передаваемого ей итератора?

                                                                                            next — это по-моему такая прикостыленная сбоку ручка исключительно для своих. В большинстве случаев никому в голову не придёт использовать это в коде, за исключением авторов всяких tornadoобразных фреймворков, где на генераторах корутины стоят.


                                                                                            Надо сказать, я тоже не считаю python очень логичным языком, но тем не менее довольно удобным для всякой наколеночной скриптоты, благодаря довольно хорошей стандартной библиотеке.


                                                                                            Вот же он, внешний кусок, прям где лямбда написана!

                                                                                            Да, и это может быть проблемой.
                                                                                            Чем длиннее у нас непрерывная портянка кода, тем больше сущностей в ней задействовано, и тем сложнее все их отследить.
                                                                                            Если исходить из предположений, что люди удерживают в голове ~7 переменных и имён функций (немного адаптируем предположение из практики UX), и что количество новых сущностей линейно зависит от длины кода, то длинное замыкание втаскивает много сущностей в ограниченную голову, из-за этого можно потерять понимание поведения функции в целом.
                                                                                            От этого можно спастись, пытаясь не читать эту лямбду, пока не понадобится, но её нельзя не прочитать, потому что


                                                                                            • она прямо на глазах маячит
                                                                                            • у неё нет имени, т.е. автор кода явно не указал, что она делает.

                                                                                            В однострочную лямбду можно тоже много всего впихать при желании, но выглядит это страшно, и сразу возникает желание это переписать по-другому.


                                                                                            Так что это способ авторов языка провоцировать пользователей именовать сложные операции над элементом коллекции, например, или писать цикл for вместо map или спискового выражения, т.к. python — императивный язык.

                                                                                            • 0
                                                                                              Зачем гадать, когда есть документация, в данном случае PEP-3114. Если его почитать, то понятно что встроенная функция next() имеет спорное происхождение. Там, среди прочего, закреплено особое мнение Martin von Loewis о том, что она не нужна. И мнение о том, что она нужна для унификации и единообразия с getattr, iter.
                                                                                • 0
                                                                                  HR в целом плевать есть у тебя опыт или нет, им главное закрыть вакансию.
                                                                                  джун/мид/сеньёр/бог — это всё условные разделения/лычки, часто просто за выслугу лет: знаю я пару не джунов которые гитом пользуются кое как: история/ветки — нислышали, ребейс/сташ+поп — нислышали, в итоге открываешь гит а так куча ниток и все перепутаны в гордеев узел.

                                                                                  Главное это то что у тебя есть в портфолио, уверенность в себе, адекватность.

                                                                                  Для примера: я устроился разрабом на сях без «подтверждённого опыта» в трудовой, ВО в этой области.
                                                                                  В трудовой всякие инженера по обслуживанию техники, сетей, с огромными окнами между ними. Ответ на вопрос «чем занимался» — фрилансил, нынче многих устраивает. Но всякие HR на предприятиях которым не платят за закрытие вакансий и не напрягают за то что они не закрываются, а также госы будут смотреть и на профильное ВО и на «непрерывный трудовой стаж» фапать. Хотя и там HR начинают дрочить и они спамять вакансиями даже мне, тот же ростелек и почтарф :) Ну и постепенно приходит понимание что работу работать важнее чем такие мелочи.
                                                                                  Однако к этим «минусам»/мутноте у меня была кучка своих опенсорц проектов, пачки коммитов в другие проекты и ОС, бэкграунд по сетям и крипте.

                                                                                  Ради интереса я смотрел как HR смотрят резюме — как правило они не смотрят ссылки на проекты/коммиты, написанному верят, особенно когда там простыни на страницы. Те по моим ссылкам на хаха в основном ходили тех спецы перед собеседованием, да и то далеко не всегда. Хуже всего когда ты знаешь что они не смотрели ничего с твоего и при этом суют свои тесты, прям неуважение в полный рост.
                                                                                  Ещё один нюанс — написать о десятках коммитов и багфиксов в разные проекты это страница текста и их можно за месяц настрогать, а написать о прошлом месте работы — страницу нужно ещё очень постараться и потратить минимум год, ибо меньше года — значит неуживчивый/накосячил-выгнали/тп, либо нужно отдельно пояснять что пришёл на проект, сделал и ушёл, это если не отсеят раньше и вообще пригласят пообщаться.

                                                                                  Поэтому не гони волну на пайтон, настрогай коммитов, опиши красиво в резюме, напиши что фрилансил 20 лет до этого и будь счаслив.
                                                                                  • 0
                                                                                    Python конечно в данном случае не причем, но то что вакансий на нем меньше чем PHP это факт.
                                                                                    И да, вакансии нужно анализировать до того как начал изучать что то (если хочешь именно работать с этим).
                                                                                    • 0
                                                                                      На Python не просто вакансий меньше, они все еще сконцентрированы в одном месте. Когда тот же php гораздо обширней используется по всей рф.
                                                                                      • 0
                                                                                        С этим согласен, но не совсем.
                                                                                        Даже если пробежаться по моим соседним регионам, то найду по 10-20 вакансий на python, 2 их которых будут на junior позицию (смотрел Ростов и Краснодар), но да, вакансии в основном в областных центрах, а php и в более мелких городах можно найти.

                                                                                        И все это не проблема Python-а, а уж тем более пайтона как первого языка (т.е. заголовок считаю совершенно не описывающим сути статьи).
                                                                                        Да, если учить сразу php/1c, то действительно легче найти работу, но рекомендовать их как «первый» я бы не стал.
                                                                                        • 0
                                                                                          Ростов и Краснодар это показательно. А давайте по Хабаровскому краю и ЕАО попробуем?
                                                                                          • 0
                                                                                            Ну пробовать я не буду, догадываюсь раз вы это пишите то там не много предложений для python разработчика, а подскажите, вакансий для php/1c сколько?
                                                                                            Но опять же, о чем это говорит?
                                                                                            О том что python плохой или что у бизнес о нем не знает (является ли это проблемой самого языка, не берусь судить)?

                                                                                          • +1
                                                                                            Ох, выбрали вы… Краснодар это Тандер, даже у нас в Брянске несколько вакансий от них висит. Кроме них собственно вакансии по python появляются по одной раз в пол года, и то чаще всего это доп. язык. И это в городе с ~ 400к населения.
                                                                                      • 0

                                                                                        Мне кажется автор вполне может претендовать на миддла. То что он пилил для себя а не для дяди решающего значения не имеет. Ищите адекватного нанимателя в столицах.

                                                                                        • +1
                                                                                          В общем, за год я

                                                                                          1) Изучил книги:

                                                                                          Марк Лутц — Изучаем Python
                                                                                          Марк Лутц — Программирование на Python
                                                                                          Чед Фаулер – Программист Фанатик
                                                                                          Билл Любанович – Простой Python

                                                                                          Я за 8 лет прочитал меньше книг по PHP. :)

                                                                                          2) Изучил множество роликов от Украинских/Буржуйских авторов по Django

                                                                                          Не смотрел ни одного ролика.
                                                                                          Хотя нет. Один посмотрел :) Чисто из интереса к автору :)

                                                                                          3) Прошел курс от codeacademy

                                                                                          Не проходил никакие курсы

                                                                                          В создания сайта я

                                                                                          1) Изучил книги:
                                                                                          Джон Дакетт — HTML и CSS. Разработка и дизайн веб-сайтов
                                                                                          Дэвид Флэнаган — JavaScript. Подробное руководство
                                                                                          Бен Форта — Освой самостоятельно SQL.

                                                                                          В начальном создании сайта вообще ничего не изучал.
                                                                                          Ну кроме курса HTML в институте (учился на экономиста, вдруг что :))

                                                                                          Проект показал свою жизнеспособность (по сей день приносит мне определенные деньги, чему я безумно рад).

                                                                                          Это самое главное. :)
                                                                                          Главное, что его поддержка на Python приносит Вам радость. :)

                                                                                          И так уж сложилось, что их концентрация находится в столицах.

                                                                                          Так а почему Вы не захотели переехать? :)

                                                                                          А учить стоит не столько сам язык, сколько подходы к программированию. Они примерно везде одинаковые. :)
                                                                                          • +1
                                                                                            Ой, что-то мне подсказывает, что не знаете вы Питон. Думаете, что знаете, но нет.

                                                                                            98%, что вас поймают на собеседовании и по основам и по тонкостям.

                                                                                            Ты всё правильно делал, только где примеры кода, где проект, который ты поднял на питоне, покажи.

                                                                                            Я допускаю вариант, что ты действительно гуру-питонист и можешь писать сходу реальные проекты и коммитить грамотный код, не уступая остальным в команде, а злые компании/HR такого способного и умного не берут. Да, это и впраду неспреведливо и обидно, гений в провинции пропадает, не найдя признания.

                                                                                            Но есть вероятность, что дело обстоит несколько не так.