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

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

Содержание:

  • Почему Python так популярен?

  • Статистика Python в 2024 году

  • Где используется Python?

  • Прогнозы на будущее

  • Начните свой путь в программировании с Python

Почему Python так популярен?

Универсальность применения

Освоив Python, вы открываете двери в самые разные сферы IT:

  • Веб-разработка — создание современных сайтов и веб-приложений.

  • Анализ данных — работа с большими массивами информации.

  • Искусственный интеллект — разработка сложных моделей машинного обучения.

  • Игровая индустрия — создание логики и автоматизации для игр.

  • Робототехника — управление роботами и сложными системами.

Python поддерживает сразу несколько подходов к программированию:

  • Объектно-ориентированное — для создания масштабируемых и структурированных приложений.

  • Функциональное — для работы с данными и чистыми функциями.

  • Процедурное — для решения линейных задач.

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

Богатая экосистема библиотек

Python предлагает огромный выбор готовых библиотек для решения практически любой задачи:

  • NumPy — научные вычисления.

  • Pandas — анализ и обработка данных.

  • Matplotlib — создание графиков и визуализация.

  • Django — мощный фреймворк для веб-разработки.

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

Дружелюбное сообщество

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

Статистика Python в 2024 году

  1. Рейтинг TIOBE: Python занимает первое место как самый популярный язык программирования, с долей более 20% среди профессиональных разработчиков. (TIOBE Index)

  2. GitHub Trends: Python входит в тройку самых часто используемых языков на платформе, с миллионами активных проектов. 

  3. По данным Stack Overflow, 40% новичков начинают изучение программирования именно с Python. 

  4. По данным Indeed на рынке труда Python остается одним из самых востребованных языков. Более 25% IT-вакансий требуют знаний Python, особенно в сферах анализа данных и AI.

Где используется Python?

Наука и исследования

Python активно применяется в научных разработках:

  • CERN использует язык для обработки данных физических экспериментов.

  • NASA внедряет Python в космических исследованиях.

  • Генетика анализирует ДНК с помощью специализированных библиотек.

Крупнейшие компании

Python стал ключевым инструментом для многих лидеров рынка:

  • Google: основа многих внутренних систем.

  • Instagram: написан на Python.

  • Dropbox: серверные компоненты.

  • Spotify: рекомендательные алгоритмы.

  • Netflix: анализ данных и машинное обучение.

Крупнейшая платформа видеоконтента Netflix использует Python для анализа данных.
Крупнейшая платформа видеоконтента Netflix использует Python для анализа данных.

Прогнозы на будущее

Python не только удерживает позиции, но и продолжает развиваться. Эксперты прогнозируют рост его популярности в следующих направлениях:

  • Машинное обучение и AI: С увеличением спроса на автоматизацию и анализ больших данных Python сохранит свои лидирующие позиции.

Применение Python незаменимо в машинном обучении и AI.
Применение Python незаменимо в машинном обучении и AI.
  • Образование: Python будет оставаться главным языком для обучения программированию благодаря его простоте.

  • Облачные технологии и DevOps: С ростом числа облачных сервисов Python станет еще более востребованным для автоматизации процессов и работы с API.

  • Мобильные приложения: Хотя Python редко используют для мобильной разработки, такие проекты, как Kivy и BeeWare, открывают новые горизонты.

Начните свой путь в программировании с Python

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

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

Python — это идеальный выбор для входа в IT. Он делает программирование простым и доступным для каждого. Если вы хотите превратить знания в перспективную профессию, записывайтесь на курс «Python-разработчик» в онлайн-школе YCLA Coding.

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

Комментарии (65)


  1. voidinvader
    24.12.2024 15:48

    Питон стал популярным по той же причине, что и php в своё время - низкий порог вхождения.


    1. Moog_Prodigy
      24.12.2024 15:48

      Вот не знаю даже, как этот порог сейчас оценивать. Мне как питон понадобился (ML), то базовые и примитивные вещи как и в других языках (я начинал с Асма 86 когда-то) - сразу получались. Могу циклом вывести Hello world миллион раз) А вот что-то более менее сложное - зарыто в огромном пласте библиотек, встроенных и нет. Ну как сложное - те же сортировки, операции с текстами, мне как новичку именно в питоне было очень непривычно после С-программ под мелкоконтроллеры. Но ведь для этого ж я занялся питона душить)

      А тут отступы, всякие приколы с неявной типизацией, я не знаю что еще вылезет, только изучаю же. Купил книжек...Не, я все понимаю, но как по мне помнить всё то, что скрыто в каждой библиотеке, это даже покруче базовых команд ассемблера. На базовых командах в принципе можно любой свой велосипед построить, но тут заявляется "простота" языка. И вот надо взять, import os (откуда вы взяли этот ос?) а там еще из этого "оса" добыть функцию datetime или как она там называется. А в этой "ос" еще стотыщ функций, работающих с системой, но там может не оказаться функции, отдающей загрузку памяти GPU. Это надо искать уже в другой библиотеке. Но в какой? Считать ли сложностью это или нет? Зная эти функции, можно за пять минут написать нужную утилиту. И потратить месяц на поиск этих функций. Не, конечно велосипед можно и написать, только я совсем не представляю, как чисто без библиотек добыть дату и время систему, хотя кто-то скажет - делов то, используй %непонятная штука%.


      1. SquareRootOfZero
        24.12.2024 15:48

        И вот надо взять, import os (откуда вы взяли этот ос?) а там еще из этого "оса" добыть функцию datetime или как она там называется.

        В смысле, как везде - из едкого дыма скуренных доков. #include <iostream>, что ли, откуда-то из более понятного места берётся?


        1. Moog_Prodigy
          24.12.2024 15:48

          Если iostream или io можно было скурить и понять, то тут тянет на целую ГРЭС, ежесуточно сжигающую по 10 миллионов тонн макулатуры)) И как это курить, никаких мозгов не хватит.


          1. SquareRootOfZero
            24.12.2024 15:48

            Вам что-то более-менее объективное по теме есть сказать? Там, к примеру, с вашей точки зрения в Питоне избыточных функций больше, или документация хуже чем где-то, или что? Или одни рассуждения в духе "английский язык хуже русского - на русском я могу сказать что угодно, а на английском только "хуиз он дьюти тудэй"?


      1. vkni
        24.12.2024 15:48

        А тут отступы, всякие приколы с неявной типизацией, я не знаю что еще вылезет

        Ещё вылезет очень неочевидная семантика в плане работы с изменяемыми данными. Вот все эти

        def f( x = []):
          x = [1]
          print(x)

        Оно абсолютно чётко выводится из правил, но всё время ошарашивает.


        1. evgenyk
          24.12.2024 15:48

          Не совсем понял, а как могло бы быть по другому?


          1. vkni
            24.12.2024 15:48

            C++ — либо явная передача по указателю (ссылке), либо копирование значения по-умолчанию.

            OCaml — неизменность объекта по-умолчанию.


            1. evgenyk
              24.12.2024 15:48

              Возможно пример не очень удачный?
              На мой взгляд если словами, что делает эта функция:

              • При вызове:

                • Если вызвана с аргументом передает ссылку на объект в локальную переменную x

                • Если вызвана без аргумента создает массив и передает ссылку на него в локальную переменную x

              • В теле функции:

                • Создает новый объект массива и присваивает локальной переменной значение ссылки на него.

              ИМХО логика максимально близка к C++


              1. vkni
                24.12.2024 15:48

                Ой, действительно неудачно.


              1. SquareRootOfZero
                24.12.2024 15:48

                С этой хренотой там странное то, что оно где-то зачем-то неявно кэшируется между вызовами. Например:

                def f(x = []):
                    x.append(1)
                    print(x)

                Вывод:

                f()
                [1]
                f()
                [1, 1]
                f([4])
                [4, 1]
                f()
                [1, 1, 1]

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


                1. evgenyk
                  24.12.2024 15:48

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

                  Это вроде как раз то, что Вы написали ей делать. А чего Вы ожидаете?


                  1. SquareRootOfZero
                    24.12.2024 15:48

                    Я бы ожидал, что она, при вызове без агрумента, будет каждый раз создавать новый пустой список, ведь написано же: "x = [ ]", а когда в коде написано "x = [ ]", мне кажется, логично ожидать, что каждый раз и будет происходить "x = [ ]", а не "первый раз x = [ ], далее другое что-то".


                    1. evgenyk
                      24.12.2024 15:48

                      Тогда нужно писать просто:

                      def f():
                          a = []
                          a.append(1)
                          print(a)
                          return a

                      Или что-то такое.
                      Да, конечно, нужно помнить, что этот код присовения дефольтных значений аргументов исполняется один раз во время создания объекта функции при чтении определения.

                      На мой взгляд достаточно логично.


                      1. k4ir05
                        24.12.2024 15:48

                        Почему же это логично? В других языках разве так же? Я лично таких не знаю.

                        Тут ведь получается не совсем привычное время жизни аргумента. И разное поведение функции в зависимости от предыдущих её вызовах.

                        Разве не логичней присваивать дефолтные значения при вызове функции вместе с инициализацией аргументов?


                      1. evgenyk
                        24.12.2024 15:48

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


      1. oratorslova
        24.12.2024 15:48

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


        1. Moog_Prodigy
          24.12.2024 15:48

          Согласен с вами, тут даже все относительно просто - если принять, что вода - неньютоновская жидкость :)


    1. un1t
      24.12.2024 15:48

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


      1. IUIUIUIUIUIUIUI
        24.12.2024 15:48

        За счет строгой типизации там не возникает тупых ошибок типа сложения строки и нуля.

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


        1. rsashka
          24.12.2024 15:48

          1. IUIUIUIUIUIUIUI
            24.12.2024 15:48

            Вы не поверите, но типизации бывают разные.

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

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

            статическая или динамическая

            Если читать не популярные статьи, а нормальные учебники по теории типов, то можно наткнуться на вещи вроде

            сильная и слабая

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

            явная и неявная

            Иррелевантно в данном случае.

            бестиповая

            Это — то, что называют слабой динамической типизацией. По ссылке лисп называют бестиповым языком, но это не отличается принципиально от JS.


            1. evgenyk
              24.12.2024 15:48

              И то, что ошибки выявляются лишь в рантайме — это минус

              Вот тут не соглашусь, это не минус, это фича. Это просто логически вытекает из динамической типизации. А это одна из основных и самых мощных фишек Питона.


              1. IUIUIUIUIUIUIUI
                24.12.2024 15:48

                Возможность сложить строку и ноль — это тоже вполне себе осознанная фича JS, но это не значит, что это что-то хорошее.

                Чем больше ошибок можно выявить статически, до запуска программы, тем проще разрабатывать программу, тем меньше тестов надо писать, тем она надёжнее, и так далее (при некоторых других вводных, естественных и вполне реализуемых).

                Нетипизированность питона — основная причина, по которой я не могу писать на питоне.


                1. evgenyk
                  24.12.2024 15:48

                  Я вижу тут следующую дилемму:

                  Или мы испольуем статическую типизацию, так как это делает C++, тогда, когда нам нужно загнать в список или в хэшмап разные объекты нужно статическую типизацию объезжать делая список ссылок на объекты и явно проверять тип объекта при обработке элементов. Здесь растет сложность программы. И нам, О Боже! нужно тестировать все ветки, так как статическую типизацию мы объехали на кривой козе.

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

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


                  1. IUIUIUIUIUIUIUI
                    24.12.2024 15:48

                    хэшмап разные объекты нужно статическую типизацию объезжать делая список ссылок на объекты и явно проверять тип объекта при обработке элементов

                    В чём объезд? Вы пишете std::variant<Foo, Bar, Baz> , и компилятор за вас проверяет, что вы явно обработали все нужные объекты.

                    И нам, О Боже! нужно тестировать все ветки, так как статическую типизацию мы объехали на кривой козе.

                    Почему? Компилятор протестирует, что вы все случаи обработали, и что вы не запихнёте в мапу того, что в ней не ожидается.

                    map<Key, Foo> нужно столько же тестов, сколько map<Key, variant<Foo, Bar, Baz>>.

                    Или мы испольуем утиную типизацию и нам не нужно изгаляться при обработке разных типов. Дергаем метод объекта

                    В данном случае тоже не надо. Если у всех из них есть метод bark(), например, то вы можете написать

                    my_map[my_key].visit([](auto&& arg){arg.bark();});

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

                    нет метода, просто пропускаем объект или пишем в лог и едем дальше.

                    Я думаю, вам бы зашёл visual basic и On Error Resume Next.

                    как это делает C++

                    Это, кстати, так себе образец, ну да ладно.


                    1. evgenyk
                      24.12.2024 15:48

                       std::variant<Foo, Bar, Baz>

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

                      2) Вы должны заранее предусмотреть все варианты типов. Тем более вы не можете добавлять менять типы динамически.


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

                        Пардон, это не язык, это библиотека.

                        Библиотека — это часть языка даже с точки зрения ISO-стандарта C++. Какая мне как программисту разница, в конце концов? Я просто сажусь и пользуюсь. Если бы variant был магическим типом, реализованным автором компилятора в кишках компилятора, то для меня бы принципиально ничего бы не изменилось.

                        То, что сложность спрятана от Вас внутри библиотечной функции ничего не значит.

                        Поэтому да, не значит ничего для меня как для программиста. Для меня это часть языка.

                        Вы должны заранее предусмотреть все варианты типов.

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

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

                        Если у меня есть какое-то множество типов, удовлетворяющих данному набору интерфейсов (aka тайпклассов) скажем, Show, Read и Num то я просто пишу что-то в духе

                        data SomeType where
                          MkSomeType :: (Show a, Read a, Num a) => a -> SomeType

                        и потом вполне себе могу для Map MyKey SomeType пользоваться методами этих тайпклассов на ключах, и запихивать в эту мапу хоть целые числа, хоть комплексные, хоть матрицы (если они вдруг у вас удовлетворяют Num).

                        В каком-нибудь идрисе или агде бы даже отдельный экзистенциал бы явно писать не пришлось, достаточно Map MyKey (a : Type ** (Show a, Read a, Num a, a)) .


                      1. evgenyk
                        24.12.2024 15:48

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


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

                        Тогда выходит, что «с типами много геморроя, даже разные типы в мапу [кстати, тоже библиотечный тип] не засунешь» — не аргумент, раз это делается через библиотеки с нулём телодвижений с вашей стороны?

                        В чём тогда вообще смысл это обсуждать?

                        С такой точки зрения любой язык может все. Достаточно только засунуть в библиотеку соответствующую функцию.

                        Ну засуньте в библиотеку на C++ (или даже хаскеля) что-нибудь, чтобы там были зависимые типы. И в том же хаскеле для линейных типов пришлось доделывать ядро языка, а не библиотеками обмазываться.


                      1. evgenyk
                        24.12.2024 15:48

                        Мапа это был просто пример. С утиной типизацией очень много чего можно сделать очень быстро и просто. Например тот же манки патчинг.


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

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


                      1. evgenyk
                        24.12.2024 15:48

                        Манкипатчинг как правило используется при тестировании, дебаггинге или отладке. Иногда бывает очень удобно.


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

                        А, понятно! Отсутствие типизации полезно для тестирования, которое необходимо при отсутствии типизации.

                        Тяжело спорить с такой логикой (ведь проверка фундированности — это тоже забота тайпчекеров).


                      1. evgenyk
                        24.12.2024 15:48

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

                        И не знаю как Вы, лично я даже когда давным давно писал на C++ испольовал тестирование.


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

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

                        Я выше писал (и выделил жёлтеньким), что я понимаю под типизацией, и почему понятие «динамическая типизация» при этом определении не имеет смысла.

                        И не знаю как Вы, лично я даже когда давным давно писал на C++ испольовал тестирование.

                        C++, опять же, не образец выразительной и продвинутой системы типов.

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


                      1. evgenyk
                        24.12.2024 15:48

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


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

                        Я в основном тоже стараюсь писать интеграционные. И вот в них-то пару раз манки патчинг очень здорово помогал.

                        Может, я чего не понимаю, но мне он не помогал ни разу. Что вам там было полезно манки-патчить?

                        И вообще, если не нравится то, как устроены типы в Питоне, зачем им польоваться?

                        Ну тут я могу только заняться самоцитированием:

                        Нетипизированность питона — основная причина, по которой я не могу писать на питоне.

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

                        Что касается отлавливания компилятором ошибок за счет статической типизации, я когда писал на Си с плюсами не замечал, чтобы это здорово меня выручало в смысле приоста в скорости написания программ.

                        И тут снова:

                        [C++], кстати, так себе образец, ну да ладно.

                        C++, опять же, не образец выразительной и продвинутой системы типов.

                        C++ сочетает худшие черты: очень много церемоний с явной типизацией при очень малой выразительной силе и вообще слабости этой типизации.


                      1. evgenyk
                        24.12.2024 15:48

                        Я считаю, что у каждого инструмента своя ниша. И Питон хорош в своей и именно за счет своей динамической типизации. То, что Вы не можете писать на нем из-за этого, он переживет. :)
                        Гораздо хуже то, что в него сейчас сбоку пытаются прикрутить подобие статической типизации. Оно и не делает его языком со статической типизацией и его сильные черты портит.


                      1. IUIUIUIUIUIUIUI
                        24.12.2024 15:48

                        Я считаю, что у каждого инструмента своя ниша. И Питон хорош в своей

                        Только мы, очевидно, расходимся во мнении, что именно это за ниша.

                        и именно за счет своей динамической типизации.

                        Я и пытаюсь понять, почему он в ней (очевидно, более широкой с вашей точки зрения) по-вашему хорош.

                        Со складыванием в мапу аргумент, похоже, снялся, с утиной типизацией «обработать всё, что реализует такой-то интерфейс» — тоже. Остался манки-патчинг (и, прошу прощенья, я отредактировал прошлый комментарий, по-видимому, после того, как вы его увидели) — мне всё ещё интересно, зачем он вам пригождался в интеграционных тестах.

                        То, что Вы не можете писать на нем из-за этого, он переживет. :)

                        Ну это вообще странный разговор получается.

                        — Если вам так не нравится питон, не пишите на питоне.

                        — Я и не пишу.

                        — Ну ничего, он это переживёт :)

                        Гораздо хуже то, что в него сейчас сбоку пытаются прикрутить подобие статической типизации.

                        Хз, у меня нет однозначного мнения на тему «запиливания изначально непредназначенных фич» vs «перехода на другой язык». В идеальном мире лучше второе, но первое более прагматично.


    1. sbw
      24.12.2024 15:48

      У Питона настолько низкий порог вхождения, что я писал на нём программу даже не зная языка – основные конструкции весьма понятны, и только гугл и stackoverflow в помощь. Опыт на других языках у меня был (с, asm, pascal, Delphi, basic, VBA, pl/SQL, java), поэтому ничего сверхъестественного. Потом изучил Питон на stepik – и это добавило +100500 к навыкам написания/чтения программ.

      Ещё один жирный плюс - это наличие библиотек практически на все случаи жизни.


  1. mikleh
    24.12.2024 15:48

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

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


    1. voidinvader
      24.12.2024 15:48

      Да щас. То что его преподавали в школе не значит, что он такой же простой для изучения, как Питон.


      1. rockstar_made
        24.12.2024 15:48

        в школе и Дельфи был в мои времена; сомневаюсь, что Питон на его уровне или проще него..


    1. YaKrabik
      24.12.2024 15:48

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


      1. RH215
        24.12.2024 15:48

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

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


    1. k4ir05
      24.12.2024 15:48

      И Гвидо со товарищи думали об удобстве программистов

      На сколько удобно в нём определяется область видимости функций/атрибутов/констант?


      1. vkni
        24.12.2024 15:48

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


  1. IvanZaycev0717
    24.12.2024 15:48

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

    Лично для меня самым огромным премуществом является читабельный лаконечный синтаксис и библиотеки на все случаи жизни (большинство их - стандартные).

    Например, дают задание - получить случайное целое число в диапазоне целых чисел, причём минимальная граница - включительно, а максимальная - нет. Возьмём второй по популярности язык по версии GitHub Trends - JavaScript

    function getRandomInt(min, max) {
      const minCeiled = Math.ceil(min);
      const maxFloored = Math.floor(max);
      return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled);
    }

    Круто, не правда ли? А теперь решим ту же задачу на Python

    import random
    
    
    def get_random_int(min: int, max: int) -> int:
        """Возвращает случайное целое число в диапазоне [min, max)."""
        return random.randint(min, max - 1)

    Никаких костылей, всё из коробки. Вот именно за это я и люблю Python


    1. thescarletarrow
      24.12.2024 15:48

      Ну да, а что, нельзя что ли сделать вот так в JS? И краткость (особенно однострочность) в языках программирования - больше минус, чем плюс.

      function randomIntFromInterval(min, max) { // min and max included
        return Math.floor(Math.random() * (max - min + 1) + min);
      }



      1. IvanZaycev0717
        24.12.2024 15:48

        В вашем решении это когда включены оба числа диапазона, т.е. [min, max] и min и max включительно. А задача была поставлена [min, max) - т.е. min включительно, max - НЕ включительно

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

        Я не знаю, откуда вы это взяли. У Питера есть отличная книжка на эту тему


        1. voidinvader
          24.12.2024 15:48

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


          1. SerafimArts
            24.12.2024 15:48

            Конечно можно. Взять хотя бы тот же PHP, он ещё проще справится:

            vs Короткий вариант

            /** Возвращает случайное целое число в диапазоне [min, max).  */
            fn(int $min, int $max): int => random_int($min, $max - 1);
            

            vs Длинный вариант, используя ОС-зависимый CSPRNG

            fn(int $min, int $max): int => new Random\Randomizer(
                new Random\CryptoSafeEngine()
            )->getInt($min, $max - 1);
            

            vs Длинный вариант, используя seed-aware 256-битный xor-shift

            fn(int $min, int $max): int => new Random\Randomizer(
                new Random\Engine\Xoshiro256StarStar(
                    seed: hash('sha256', 'my example seed', binary: true),
                )
            )->getInt($min, $max - 1);
            

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


    1. k4ir05
      24.12.2024 15:48

      Вот из коробки, а у вас всё же import.

      def get_random_int(min, max) = rand(min...max)


  1. evgenyk
    24.12.2024 15:48

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

    Мне кажется, авторы статей типа "Причины популярности Питон" стреляют не в ту сторону.

    Во первых они сравнивают синтаксис и удобство польования с другими языками, типа скажем PHP. А питон почти никогда не соревновался с PHP.
    Питон появился в 1994 году, как язык сценариев. Распространился он в первую очередь на UNIX подобных системах. Конкурировал в этой области он в первую очередь с Perl и в какой-то степени с BASH. Ну и с Tcl/Tk. Вот тут он победил, ИМХО за счет лучшего синтаксиса, заложенных идей и идейной целостности. Затем он нарастил "батарейки", библиотеки к нужным задачам и интерфейсы к сишным библиотекам. Скоро оказалось, что что-то простое и даже не очень простое проще всего на Питоне.
    Потом, с набором массы разрабочиков знающих его он стал распространятся в другие области. Где-то он побеждал за счет удобного тулчейна и REPL, где-то за счет большой массы знакомых с ним разработчиков, где-то за счет "батареек". Ну вот это продолжается до сих пор.

    Где-то так.


    1. deadlock1979
      24.12.2024 15:48

      Ерунда. питон появился как универсальный язык с поддержкой ооп и занял пустеющую нишу glue-языка


      1. evgenyk
        24.12.2024 15:48

        А язык сценариев это не то же самое что glue язык?


  1. avshkol
    24.12.2024 15:48

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


    1. rockstar_made
      24.12.2024 15:48

      ... например сотню-другую фреймворков под фулстак-разработку

      никогда Штирлиц не был так близок к провалу


      1. anaxita
        24.12.2024 15:48

        но используют в основном фаст апи и джанго?


  1. MonteDegro
    24.12.2024 15:48

    • Очень много списков.

    • Чат гопота обожает списки.


  1. kalemas
    24.12.2024 15:48

    А насчет отладки не увидел замечания: в python лучшие возможности для отладки. Могу сравнить с go, js, cpp, но гораздо меньше (кроме cpp) в них разрабатывал.

    Мне доступно все состояние программы, я могу вызывать любые функции, импортировать новые модули, могу менять код на лету, модифицируя модули и классы. Могу пакет через pip установить во время отладки. Это все удобно чтобы быстро разобраться, как работают неизвестные модули, быстро их интегрировать.

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

    У любой гибкости есть обратная сторона, но все же гибкость это преимущество.


    1. ynlvko
      24.12.2024 15:48

      Какие инструменты для этого можно использовать? Где можно про них почитать? Или имеется ввиду Jupiter?


      1. evgenyk
        24.12.2024 15:48

        Ну наверное в одну из первых очередей iPython?
        Думаю и просто используя pdb можно работать в таком стиле.


  1. Asguard01
    24.12.2024 15:48

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