Офтоп

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

За последние 30 лет некогда «несерьезный» язык программирования Python незаметно стал мировым лидером по частоте использования. Попробуем разобраться, какие его особенности стали этому причиной.

«Пайтон», а не «питон» — и как это связано с особенностями языка

По-русски этот язык программирования часто называют «питон», что неверно, ведь профессию веб-разработчик на Python назвали не в честь змеи, чье русское название так звучит, а в честь некогда популярного британского шоу «Монти Пайтон».

И название дано не просто так: создатель языка Гвидо ван Россум изначально планировал его с целью получить забавный — то есть нескучный — мощный, но простой в освоении инструмент. В отличие от типичных языков того времени, Python не использует компиляцию. То есть текст программы перед запуском не транслируется в машинный код до выполнения, а транслируется построчно, что заметно экономит время в конце написания кода, когда у программиста на C++ будет идти компиляция. Но на этом отличия от стандартного языка программирования только начинаются, а не заканчиваются

Во-первых, Гвидо ван Россум с самого начала настаивал, чтобы программный код в его языке был понятен как «обычный английский». И это действительно неплохо: зная английский даже на среднем уровне, любому будет куда проще начать пользоваться Python. Для большинства языков программирования код заметно дальше от обычного английского. Во-вторых, он исходил из необходимости сделать язык для выполнения простых ежедневных задач, предназначенных для людей, у которых дефицит времени на программирование на C++ и ему подобные традиционные языки.

Частота упоминания разных языков программирования на StackOverflow, крайне известном сайте с вопросами и ответами по программированию. Как мы видим, Python и сегодня, через 30 лет после создания, продолжает наращивать популярность / ©StackOverflow

Исходно сам этот язык не рассматривался ван Россумом в качестве чего-то действительно крупного: он видел в нем просто частный инструмент для написания небольших программ. В 1990 году таких было немного, а операционные системы, текстовые редакторы и тому подобное писались на совсем иных языках старшего поколения.

В 1990-х и нулевых годах ситуация постепенно менялась. Обнаружилось, что для ряда мелких задач Python подходит куда лучше: главное, он больше подходил для решения целого ряда задач бурно развившегося тогда интернета — от простейшей обработки поисковых запросов (у того же Google), до все более и более сложных. Сегодня на нем же работают Dropbox, Pinterest и Reddit — а равно и Instagram, и многое другое.

Кстати, с самого начала идеология Python — опенсорсная, то есть многие ресурсы, использующие его в своей работе, постоянно выкладывают все новые образцы открытого кода, позволяющего даже начинающему программисту на этом языке увидеть, как он работает «у больших игроков».

Сегодня, через 30 лет после выпуска «несерьезного» языка, названного в честь комика, уже очевидно: столь мощный и длительный рост был бы невозможен без наличия у него весомых преимуществ перед традиционными игроками, теми же языками семейства С и многими другими.

Плюсы и минусы: что делает Python таким популярным

Но сила этого языка не только в простом и понятном коде. Он не заставляет указывать тип данных — достаточно просто объявлять переменную, а Python из контекста сам «догадается», что это: целое число, значение с плавающей запятой или что-то еще. Для новичка в программировании это заметно упрощает обучение.

Кроме того, у него огромное количество самых разных библиотек — одно из следствий большой популярности языка, ясной из графика ниже. В анализе больших данных поможет Pandas, технических расчетов — SciPy, с математическими матрицами — NumPy и так далее. В популярных ныне машинном обучении и нейросетях популярность пользуются Scikit-Learn, но список библиотек этого языка много шире перечисленного.

Наконец, ключевой плюс: в сравнении с обычными, компилирующими языками типа С++ Python буквально в разы повышает производительность труда программиста. Число символов в типичной программе на Python — 20-35 процентов от программного кода на языке С++ или Java для аналогичной программы. Это значит не просто меньший ввод с клавиатуры, но и то, что разработчик сможет потратить на написание программы во столько же раз меньше времени — а потом потратит в три-пять раз меньше времени на отладку этой программы. Именно в этом причина постоянного роста популярности языка Python, сегодня ставшего самым упоминаемым в самых разных местах.

Среднее время на решение типовой проблемы в разных языках программирования / ©Prechelt and Garret)

Именно поэтому Google применяет Python в своем поисковике, на том же языке в большой степени основаны YouTube и BitTorrent. И потому же его широко применяют в NASA и научном мире.

Конечно, бесплатных завтраков не бывает. Меньшие трудозатраты, в том числе на подразделение типов данных, значит, что сам Python должен взять на себя функции, которые не пожелал заранее выполнить программист. Программе необходимо зарезервировать достаточно места для каждой переменной, чтобы она работала вне зависимости от ее типа. Использование памяти «с запасом» требует больше работы от компьютера — и при одинаковых задачах программы на Python от двух до десятка раз медленнее обычных.

Вот только в наше время это не критично: ведь этот язык часто применяют для узких задач (вовсе не для написания операционных систем), а современные процессоры очень мощны. Конечный пользователь получит выдачу от Google не за 0,01, а за 0,1 секунды — и на практике даже не заметит разницы, поскольку для него это слишком малый отрезок времени.

Более того: сегодня в мире нет дефицита вычислительных мощностей. Массовое распространение производительных многоядерных процессоров — как центральных, так и графических — означает, что в подавляющем большинстве случаев скорость выполнения прикладной программы не играет заметной роли.

А вот проблема с числом подготовленных программистов вполне реальна — и здесь «минус» Python оказывается его же плюсом: более продолжительная работа программы позволяет писать ее намного быстрее. Значит, для ряда заказчиков программу успеет написать добросовестный программист, а не стандартный производитель «индусского кода». Увы, ведь именно на последних зачастую лежит вина за подавляющее большинство «глюков», с которыми сталкиваются конкретные пользователи.

Почему в случае этого языка стоит учиться на фулстек-разработчика

Традиционно разработку делят на фронтенд и бэкенд. Несколько упрощая, фронтенд отвечает за интерфейс, с которым работает конечный пользователь, а бэкенд — то, что внутри у решения, собственно программный «движок» продукта. Отсюда — бэкенд- и фронтенд-разработчики.

Но конкретно для Python наиболее разумным будет — и в ряде посвященных этой теме курсов, как, например, у Skill Factory по нему это особо подчеркивается — выбрать своим направлением подготовки фулстек-разработчика. Так называют тех, кто должен разбираться во всем объеме проекта, и во фронтенде, и в бэкенде. Это не значит, что такой разработчик обязан знать все и сразу: он может быть джуниором, начинающим, но видеть проект с разных сторон.

Фулстек-разработчик не обязательно должен уметь все, но, определенно, должен разбираться в целом ряде самых разных областей / ©bitdegree.org

Почему это крайне желательно именно для Python? Простой и быстрый в освоении язык программирования часто используется для компактных задач, и возможности четко разделять разработчиков по фронтенду и бэкенду здесь порой нет. К тому же, окончив курсы фулстек-разработчика Python, вы сможете впоследствии свободнее выбирать, что вам действительно ближе — фронтенд или бэкенд.

Наконец, в ряде случаев трудно действительно эффективно программировать тот же интерфейс, не представляя работы «внутренностей» программы. И точно так же может быть не лучшим решением менять «начинку» того или иного сайта без учета нужд пользователей, привыкших к старом интерфейсу. Если такая смена будет проведена чистым «бэкендером», есть риск, что кажущееся ему логичным «улучшение» для конечного пользователя обернется резким падением возможностей продукта.

Любой из нас сталкивался с чем-то похожим: «обновлениями», которые хочется отменить и «вернуть все как было», но уже поздно. Как мы видим, фулстек-разработчик в наши дни — не прихоть, а реальная необходимость. И чем раньше мы ее осознаем, тем быстрее сможем расшить многие «узкие места».

Что конкретно нужно, чтобы начать программировать на Python

Конечно, интернет полон статей «как освоить Python за месяц самому», зачастую авторства, что характерно, индийских программистов. Но надо понимать, что на самом деле качественно подготовиться к написанию программ на нем за такое время невозможно: да и вообще сделать это самому, по самоучителям — откровенно не лучшая идея.

Возьмем типичный качественный курс по этому языку от Skill Factory: он предусматривает 15 месяцев занятий по 10 часов в неделю, 600 часов! Очевидно, повторить нечто подобное за месяц самостоятельно вряд ли получится.

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

Естественно, работодатели несколько насторожены к таким самоучкам или выпускникам «ударных двухмесячных курсов». Как говорит Игорь Мосягин, R&D-разработчик в Lamoda, сейчас «кандидатам не хватает базовых технических знаний при отборе на вакансию». И откуда бы этим знаниям взяться, если подготовка многих слишком непродолжительна?

Вверху: среднее количество строчек кода, нужное для решения типовых задач в разных языках программирования. Внизу: среднее количество строчек кода в час, которое может написать типичный программист при выполнении типовых задач. Легко видеть, что если по длине кода Пайтон близок к Perl, то с учетом меньшей трудоемкости кода он обходит даже этого конкуретнта / ©Prechelt and Garret

Чем же занимаются на 15-месячных курсах? В первые четыре месяца обучение затрагивает основы: будущего разработчика учат разбираться в типах данных, использовать различные алгоритмы для решения тех или иных задач, а уже потом начинается собственно написание кода на Python. Вслед за этим идет написание первых ученых программ и использование объектно-ориентированного программирования. После полусотни написанных программ речь идет уже о более продвинутых стадиях подготовки.

Вторая часть курсов занимает девять месяцев. На ней сперва учат бэкенд-разработке на Python и Django, затем — работе с SQL и базами данных, а потом — и фронтенд-разработке на JavaScript. Как мы видим, курсы временами выходят за пределы одного только Python: современному разработчику иногда нужны знания не только его базового языка программирования. В этой части курса нужно научиться верстать адаптивные страницы, создавать интерактивные веб-интерфейсы на JavaScript, использовать библиотеку React для фронтенда, поднимать веб-сервер на Python и понять логику взаимодействия фронтенда с бэкендом.

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

Что должно получиться в итоге? Курсы не просто учат писать код на Python и JavaScript, но и выполнять самый широкий спектр задач — от подъема веб-сервера до созданий интерактивных интерфейсов приложений, сайтов Django и многого другого. В общем, на выходе мы получаем разработчика, умеющего решать широкий спектр задач с использованием самых разных алгоритмических подходов.

Конкретные приложения для Python могут быть самыми разными. Из-за упомянутой выше простоты и высокой производительности труда этот язык сейчас можно встретить и в бэкенде веб-серверов, той самой скрытой от глаз пользователя части интернета. Равным образом часто он используется при создании нейросетей или в научных вычислениях — особенно связанных с Data Science, поскольку создавать программы, способные быстро просеивать большие массивы данных в поисках нужного, на этом языке заметно проще, чем на других.

Чтобы понять огромную роль и широту применения Python в мире вокруг нас, можно просто полистать новости. Вот в Nature Astronomy выходит статья, где астрономы призывают коллег «не пользоваться Python». Почему?

Все дело в СО2: астрономы озаботились тем, что углеродный след человека в их профессии много больше, чем у обычного гражданина. Ведь для своих вычислений они часто используют суперкомпьютеры. Между тем, чем дольше работает та или иная программа, тем больше энергии расходует для ее выполнения компьютер. От этого отдельные ученые начали рекомендовать коллегам писать на C++.

С уверенностью можно сказать, что это так и останется в основном благим пожеланием. И слово «благое» здесь стоит взять в кавычки. Ведь каждый астроном не только непрерывно вносит свой вклад в выработку СО2 нашей цивилизацией — кроме этого, он, как ни странно, еще работает. Начав писать на C++, он успеет написать в два-десять раз меньшее число программ для своих целей — то есть реже сможет выпускать научные статьи и получать гранты на новые исследования. Кажущаяся энергоэффективность C++ непременно обернется падением производительности труда. Поэтому в жизни мы увидим все большее распространение Python во все новые сферы деятельности.

Собственно, именно это уже происходит: за 2015-2020 годы востребованность фулстек-разработчиков на Python выросла (по данным курса Skill Factory) в 2,27 раза, а средняя зарплата разработчиков на этом языке достигла 120 тысяч рублей в месяц даже при опыте работы один-два года. Сегодня главной проблемой остается даже не поиск собственно рабочих мест, а получение соответствующих навыков и знаний: подготовка подобных разработчиков пока происходит медленнее, чем рост рыночного спроса на них.

Оставьте заявку на курс “Профессия веб-разработчик на Python” со скидкой 50% по промокоду SCIENCE. Скидка действует до 15 октября 2020 года.

Комментарии

  • Вот честно, этот бедненький программист вообще работал с поисковыми запросами? Наша программа работает в 10 раз медленнее положенного, вообще насрать, пользователи скушают, это для него так работает?

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

      Но вообще ваще недовольство характерно. 21 век, в компах мощности - сотни тех компов, что были в 1980-1990-х. Но работа почему то идет медленно и с тормозами. Что ни открой, все "рожается" с великими муками.

      • Ну а как иначе, вся эта красота и безопасность (которой не было в 90-х) жрет ресурсы как электросвиньи. Но таки анекдот:
        - Через 20 лет в наручных часах будет больше памяти и мегагерц чем в твоем ПК!
        - И все это будет нужно чтобы узнать время?

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

          В чем согласен - ресурсы не просто избыточны, а вообще ниачем, они растрачиваются свиньям под ноги, бездарно и ненужно. Коре5 рекомендуется для мирной работы офисного секретаря. Ноутбук спроектирован так, чтобы через 1-2 года вызвать желание купить новый, с теми же проблемами.

          Аргументация "за пайтон" странноватая. Ему, мол, легче научиться. Бухать тоже легко научиться, и што? Так бы и сказали, что мягкая типизация у него просто унаследована со времен оных, а дальше решили не идти. Хотя на самом деле статическая типизация надежнее, удобнее в отладке, и меньше ест ресурсов.

          "Красота никогда не давалась легко". (с) БГ, Нога судьбы

  • Теперь понятно почему сайт голой науки так тормозит ))) - пайтон подкрался незаметно.

    • https://naked-science.ru --- сам сайт написан на ПХП и Вордпрессе, это легко пробить по сервису https://builtwith.com/, так что петон тут ни при чем.
      Но вот веб-сервер сайта вполне может использовать петон.

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

  • Что за бред, автор хочет сказать что интерпретируемый язык работает быстрее компилируемого ? И где это Гугл в поисковике "питон" использует, там совсем другие языки

  • Зашёл на разные биржи фриланса - пайтоном там и не пахнет, все заказы в основном на рнр, JS, Java/Kotlin.
    Прошерстил вакансии в разных регионах - мало где нужен пайтон.
    Вопрос - а нахрена изучать это чудо?

    • Осталось только узнать, на каких это крупных биржах вы не нашли заказов на Пайтон. Ссылки бы. А то варится с большим трудом -- язык на сегодня самый популярный в мире.

      • Да на всех. Этот язык популярен в разработке нейронных сетей и обработке больших объёмов данных - такое на фриланс биржах не заказывают. Заказов Python/Django на биржах фриланса действительно кот наплакал. Всем в основном нужны Worpress, Joomla, opencart, а это всё РНР.

    • Проблема в том, что статью писал не программист на Пайтоне или руководитель проектов, а журналист.
      Пайтон не использует типизацию переменных? Так более половины языков её не используют. Гугл использует Пайтон? И что из этого следует? А Боинг, к примеру, использует Pratt&Whitney. И что, на все кукурузники теперь нужно стремиться ставить такой же двигатель?
      Если перед Вами стоит задача написать соц сеть, которая будет подтягивать знакомства на второе-третье рукопожатие и интересы друзей, если Вы будете писать Госуслуги, которая будет шерстить десятки баз данных и миллионы таблиц, тогда действительно, без Пайтона будет сложно. Но проблема в том, что базовым образованием Вам тогда не обойтись. Как минимум, теория графов и комбинаторика должны отлетать от зубов. Если же для Вас графы - это что-то из геральдики, то нефик и лезть в это дело.
      А если у Вас вся база данных состоит из пары таблиц "Номенклатура" и "Контрагенты", то можете хоть на Бейсике писать - результат будет тот же.

  • Для изучения программирования Python неприменим.

    • Ну, вообще-то языки программирования относятся к искусству программирования примерно как кухонная утварь к поварскому искусству.
      Хотя, будь моя воля, я бы всех начинающих программистов заставил бы год учиться на программируемых микрокалькуляторах и год на ассемблере. Чтобы каждый байт прочувствовали. А уж потом - на чём угодно. Но все универсальные библиотеки отнёс бы к зловредам. Только корпоративные!