Всё чаще и чаще я читаю комментарии, вижу посты, захожу в беседы, где люди ведут обсуждения о том, какой же язык лучше. Зачатую диалог выглядит так: "-Python топ 1, а что твой JS", "-Зато мой JS быстрее и для веба само то", '-Ребят, да я на Go перешел недавно, вы вообще ничего не понимаете в крутых ЯП...".
Хотелось бы начать с того, что рейтинг языков программирования - это очень субъективная вещь. Разные порталы осуществляют сбор данных по языкам программирования с использованием различных параметров, учитывая все возможные показатели запросов в поисковых системах, а также применяя все возможные подходы к анализу вакансий на популярных платформах. Я бы хотел посмотреть на то, в каких областях программирования применяют Python, есть ли возможность отказать от Java/C#/Go и других языков в пользу Python, и в каких сферах это реально сделать.
Web разработка
В веб разработке Python занимает одну из лидирующих позиций, так как он имеет несколько крупных фреймворков, позволяющих с легкостью создавать, как простые статические сайты, так и сайты с динамической средой. Среди web фреймворков можно выделить: Django, Flask, FastAPI. Ближайший конкурент Django среди популярных back-end фреймворков - это node.js, однако четких данных по тому, какой из фреймворков лучше использовать - нет. Каждый, кто пытается сделать сравнение этих фреймворков, выделят у каждого как плюсы, так и минусы.
Очень много больших компаний используют Django в своих проектах, среди таких компаний и проектов можно выделить: Youtube, Spotify, Dropbox, Pinterest, Nasa и другие. Данный фреймворк был выпущен аж в далеком 2005 году, а последняя версия 4.0.4 датируется 11 апреля 2022 года, при этом количество вакансий и резюме на hh.ru по запросу "django" превышает 1.200. Всё это в совокупности дает понять о востребованности этого фреймворка и до сих пор Django является одних из лучших веб-фреймворков, что даёт Python +1 балл к его универсальности.
Машинное обучение
На сегодняшний день термины “Искусственный интеллект”, “Машинное обучение”, “Биг Дата” можно услышать чуть ли не из каждого утюга, который готов подсказать вам, как лучше гладить на основе ваших движений. Первым языком, который сразу же приходит на ум при виде этих терминов, становится Python. Ведь данный язык любят в научной среде за его простой синтаксис и обилие обучающих материалов. Любому человеку, занимающемуся построением математических моделей или статистическими вычислениями, вряд ли захочется тратить уйму времени на изучение синтаксиса и нюансов работы с типами в таких языках как C/C++/Java. И при этом обширное количество библиотек для работы с матрицами, векторами, таблицами, текстовыми файлами, JSON и другими форматами просто зашкаливает.
Для Python существует множество готовых библиотек для обработки данных и создания моделей для машинного обучения, например:
Numpy - подходит для научных расчетов, так как он упрощает работу с многомерными массивами данных.
Sci-py - содержит готовые функции для генетических алгоритмов, обработки сигналов и изображений.
Tensorflow - комплексная платформа для машинного обучения, которая была разработана командой из Google (библиотека выпущена в 2015 году).
PyTorch - среда машинного обучения, которая обеспечивает тензорные вычисления на GPU (библиотека выпущена в 2016 году).
Все эти библиотеки используют в своих работах такие компании, как: Nvidia, Microsoft, Google, Amazon, Sber и другие. По запросам "tensorflow" и "pytorch" можно найти больше полутысячи вакансий по России. Количество репозиториев с упоминанием pytorch или tensorflow на Github превышает сотню тысяч, что может сказать о востребованности и популярности этих инструментов. Можно смело сказать, что при изучении ИИ/ML есть смысл смело начать использовать Python.
Автоматизация рутинных процессов
Python позволяет быстро писать небольшие скрипты, которые автоматизируют процессы внутри компании, будь то телеграмм-боты, автоматическое составление отчетов, парсеры таблиц и т.д. Даже начинающий программист может в 20-30 строчек кода написать мини-программу, которая упростит жизнь десяткам сотрудников в компании.
Для таких задач можно использовать практически любой современный язык, однако из-за простоты синтаксиса и огромного числа библиотек, создание автоматизированного ПО на python не требует больших временных затрат.
Почти все курсы считают своим долгом научить новичка создавать ТГ-бота на Python, который парсит данные с какого-либо сайта и выводит их, так как телеграмм молодая и постоянно развивающая платформа, где с каждым днём количество активных пользователей увеличивается. Легче всего написать тг-бота за 10 строчек кода на Python, чем тот же функционал бота реализовать в 60-70 строчек кода на Java.
Python содержит ряд полезным библиотек для обработки аудио, обработки фотографий и видео, для интеграции с различными CMS, для написания ботов vk или тг, для отправки почты, для обработки задач по таймеру и еще много много чего, что может упростить жизнь для человека.
Десктопное ПО
Как только возникает диалог о разработке ПО для ПК многие сразу вспомнят Delphi, C++, более современные разработчики смело начнут бить себя в грудь и говорить о том, какой же замечательный C# для этих целей, однако, Python замечательно подходит и для этих целей. Да, если говорить о том, что ваше ПО должно совершать сложные вычисления, то это один вопрос, однако если ваше ПО не делает сложных вычислений, то разницы между откликом кнопки в 0.0001 (на других языка) сек или 0.001 (на Python) сек вы особо и не заметите. Для Python существует много GUI библиотек, например, TKInter (встроенная в Python), PyQT (реализация QT для Python), EEL (не очень популярная, но очень интересная библиотека, которая позволяет создать приложения для Chromium/Electron и упаковывать их в виде десктопного ПО). Огромным преимуществом всего этого является то, что совместно с GUI библиотека можно использовать кучу других библиотек, например, можно создать приложение для тестирования моделей ML (то есть подключать тяжелые библиотеки по типу PyTorch, TF и т.д.). Или парсить данные в пару строчек кода (например, при помощи Pandas), выводить графики (при помощи matplotlib, seaborn) и отправлять отчеты в ТГ, к тому же это все будет сопровождаться красивым графическим интерфейсом, реализованным с помощью EEL.
Электроника
Создать свои собственные умные часы, которые будут показывать погоду или воспроизводить ваши планы на день? Легко! На Python пишут программы для Arduino. Поэтому можно спокойно создавать от простых программ до сложных технических инструментов для геологии, геодезии или других сфер.
Игры
Разработка игр дело сложное и ресурсоемкое, однако и на Python можно писать несложные игры. Для этих целей есть огромное множество библиотек. Самая большая и популярная - это PyGame, однако есть еще хорошие библиотеки Arcade, Cocos2D. Создать крутую игры с сложной физикой вряд ли получился, но создать незамысловатый платформер или аркаду - не составит труда даже для новичка. По PyGame на ютубе можно найти кучу примеров, на GitHub можно скачать пару тысяч готовых примеров, поэтому изучить данную библиотеку сможет даже новичок.
Наука/работа с данными
Хранение данных, обработка данных, парсинг данных, отображение данных - это то, что сейчас необходимо науке. Для отображения данных Matplotlib, Seabor, Bokeh. Эти библиотеки хорошо работают с такой библиотекой для хранения данных, как Pandas. При помощи неё можно в 2 строчки кода считать данные из EXCEL, CSV, а также преобразовать данные из одного формата в другой и просто сохранить результат в файл. Также существуют библиотеки FPDF, PyPDF, Borb для работы с PDF.
Минусы Python
Хотелось бы отметить, что есть моменты, которые не дают многим разработчикам перейти на Python.
В первую очередь, это родная медлительность Python. Работа с большим количеством данных средствами из коробки не порадует разработчиков своей скорость. Есть варианты ускорить Python своими же силами и сделать код чище, например, не использовать for, а использовать генераторы списков, использовать не def функции, а lamda функции, где это возможно, но и это не даст большого прироста по скорости.
Есть возможность использовать PyPy, но он поддерживает далеко не все сторонние библиотеки из PyPI, но он может помочь ускорить нативный код. И здесь есть нюансы, у вас в коде должны быть блоки кода, которые PyPy может разом скомпилировать, выполнить и получить с этого прирост скорости - то есть, эти блоки кода должны обрабатывать большой объем данных, чтобы увидеть реальный прирост скорости, иначе толку не будет. Точно так же состоят дела и с библиотекой Numba, которая использует JIT.
Более сложный вариант - использовать расширения на C и подключать их через CAPI, но для этого необходимо знать C и тратить время на написание кода на C, что не всегда лучше, чем просто сразу начать писать программу на Go/Java/C#.
Следующая проблема - защищенность кода. Python переводит свой код в байт код и дальше интерпретатор выполняет его. Однако такой код не является защищённым, любой может открыть эти команды и посмотреть, что происходит в коде. Да, можно использовать обфускацию, но это сильно не поменяет положение дел. Если вам необходимо отдавать код на оборудование клиента, но вы переживаете за защищённость кода, то Python не самый лучший вариант. Есть вариант переписать код на Cython и скомпилировать его, но это так же займет не мало времени и усилий.
GIL - одновременно и боль и гордость Python. Именно из-за него в Python нет многопоточности, которая бы задействовала все ядра процессора. Использование потоков в Python может еще сильнее замедлить ваш код
Итог
Как по мне, так все эти холивары в комментариях, группах, беседах по поводу того, какой же язык самый крутой - слишком предвзяты. Не стоит выделять один язык из всех и говорить, что он самый лучший. Каждый язык создавался с какой-то целью, это может быть упрощение синтаксиса устаревших языков, оптимизация и ускорение транслятора (как в случае с CPython и кучей его реализаций), а кто-то хотел просто создать новый более универсальный язык, который бы вытеснил одновременно несколько других.
Python по праву может считаться самым любим языком среди программистов, но его нельзя назвать топ 1 среди всех языков, так как в нём есть очень много нюансов, перечисленных в прошлом пункте и не только, делающих жизнь разработчиков немного веселее. Как только настанет момент, когда Python в сравнении с абсолютно любым другим языком будет иметь выигрышные позиции по всем возможным пунктам, то тогда его смело можно будет считать топ 1 языком за счет своей полной универсальности, но это не то, что мы имеем на текущий момент.
Давайте уважать другие языки, и не изобретать велосипед, где это не нужно. Использование Python везде не делает язык лучше и популярнее, наоборот, такой подход засоряет информационное поле и делает специалистов более узкоспециализированными. Да и рано или поздно в огромных системах могут начаться проблемы с расширяемостью и увеличением производительности, если абсолютно всё без оглядки писать на Python.
P.s. присоединяйтесь к моему тг-каналу, где я делюсь фишками, наблюдениями, фактами и в целом всей информации, касающейся Python разработки, буду рад видеть каждого.
Комментарии (31)
HemulGM
18.04.2022 09:31+6"Не стоит выделять один язык из всех и говорить, что он самый лучший"
Вы только что это сделали. И именно так начинаются холивары.
Однако я скажу, что по некоторым пунктам вы ошибаетесь. В особенности в том, что нет разницы межд реакцией на нажатие в 0.0001 сек и 0.01. Разница есть и она огромная. Да даже чисто математически это разница в в 100 раз. Причина это ошибки в том, что вы думаете что это разовая операция, однако это не так. В интерфейсе работает всё иначе. А все длительные операции и так выполняются в отдельных потоках, что позволяет использовать интерфейс во время выполнения трудных задач. Сам интерфейс представляет из себя сложный механизм, где бесконечно крутится цикл и обрабатывает десятки и сотни сообщений в секунду. Каждое сообщение требует обработки, каждое сообщение может вызвать изменение в интерфейсе и изменения могут затронуть что угодно в разных количествах.
daniilgorbenko Автор
18.04.2022 09:47-3Не соглашусь. Я привел плюсы и минусы языка. Затем уже высказал своё мнение, что каждый язык нужен для своего, но при этом питон не теряется среди всех языков, даже с учетом того, что он пытается быть везде и всюду.
По поводу 0.0001 сек и 0.01. Здесь пример чисто условный. На своем опыте скажу, что программы с gui на Python по своему удобству и скорости работы не уступают многим программам на других языках. Тем более, если программы работают с БД/API и не делают больших вычислений внутри себя.HemulGM
18.04.2022 10:17+5Это не значит, что питон хорош в GUI, простое GUI можно на чем угодно сделать, даже в MS Access с VBA. И там всё будет хорошо работать. Только хороший GUI, это не только нажатие на кнопки, вывод таблиц и поля ввода. Современный графический софт - это куда больше. Посмотрите на клиент Телеграма. Там очень много обсерверов, подписок, что позволяет обновлять всё сразу везде в окне. Нотификаторы, события и многое-многое другое. Не говоря о том, что параллельно с этим плавно и с быстрой анимацией меняется интерфейс. Это всё требует ресурсов и минимальной задержки в вычислениях анимации. Именно там идёт счет на 0.00001 сек. Каждый кадр имеет время отрисовки, равно как и в игре. К слову, Tkinter работает иначе, он работает на WinApi интерфейсе, что позволяет ему перерисовываться частично.
Помимо этого, писать софт с GUI на питоне - трудоемкая задача. Потому что всё и везде придется писать ручками. Каждое событие каждого контрола придется задать вручную и написать для каждого обработчик отдельно. В то время как на некоторых других языках это делается автоматически в считанные секунды. И нет нужды лезть в документацию или форумы, чтоб узнать "а как...?", "а почему ...?".
Вероятно, вы просто делали мало софта с GUI на продажу пользователям.
daniilgorbenko Автор
18.04.2022 10:35Согласен со всем, что вы описали
Я не делал акцент "используйте только питон для gui", акцент был на то, что на питоне можно собрать достаточно хорошее gui приложение, которое не будет уступать аналогичным приложениям на C#, Delphi, C++. Допустим, внутренние сервисные программы заходят очень даже хорошо, про программы "на продажу пользователю" это другой разговор, который частично был затронут в минусах языка.
Как раз в конце я сделал вывод, что не надо пытаться пихать питон везде, надо уметь различать грань, где питон хорош, а где слаб.
Может, мы просто друг друга не так поняли
Satim
18.04.2022 10:35+2Согласен с вами я для Desctopa удобнее чем Delphi + VCL еще не встречал. Никто не сподобился до сих пор...
HemulGM
18.04.2022 10:50А вот я встречал. Сейчас я почти не пишу на Delphi + VCL, а использую Delphi + FMX. И визуальная составляющая просто не сравнится с VCL. Возможности по дизайну там просто впечатляют. Анимация, эффекты, триггеры из коробки. Фильтры, транзишены, слои и т.д. И всё это опять же в дизайнтайме. Вдобавок, стиль контролов настраивать можно тоже в дизайнтайме. Любой стиль можно применить к любому контролу, а любой контрол может стать стилем для другого контрола. Любой контрол можно поместить внутрь любого контрола. И всё это не прибегая к коду.
Satim
18.04.2022 11:07+2Ну я firemonkey почти не застал, ушел backend'ом заниматься. )
Но отлично помню что в VCL были супер классные кастомгриды EhLib например или либа крутая TRichView
Lepeshka
18.04.2022 09:40+6На Python пишут программы для Arduino
Не согласен. Я понимаю, что среди многообразия плат есть одна-две, которые поддерживают micropython, но всё же, когда говорят об arduino, обычно подразумевают что-то типа uno/nano плат с atmega328. Их ни на каком питоне не запрограммируешь.
Если же речь о написании десктопного софта, который через serial общается с платой, то это к другой категории относится.
panzerfaust
18.04.2022 09:43+3Легче всего написать тг-бота за 10 строчек кода на Python, чем тот же функционал бота реализовать в 60-70 строчек кода на Java.
Вы через раз путаете язык и экосистему языка. Это выдает или неопытность или ангажированность. Для джавы вообще есть Spring Boot, в котором одна аннотация заменяет сотни рукописных строк. Всё, теперь джава победила что ли?
daniilgorbenko Автор
18.04.2022 09:50-2Я опираюсь на количество строчек, которое нужно, чтобы руками написать примерно один и тот же код. Условно, если писать бота руками через api запросы без использования чего-то стороннего, то Python займет меньше строк кода.
HemulGM
18.04.2022 10:27+1var Client := TtgClient.Create({$INCLUDE BOT_TOKEN.key}); Client.Hello; Client.Polling( procedure(u: TtgUpdate) begin ProcCallbackQuery(u); // Обработка колбэков меню if Assigned(u.Message) and Assigned(u.Message.Chat) then begin if u.Message.Text = '/menu' then ProcMenu(u) // генерация меню end; end);
Ну вот тебе тг бот на Delphi
Satim
18.04.2022 10:32еще бы begin end и var выкинуть и вообще красота была бы))
HemulGM
18.04.2022 10:39var и так инлайн) А begin/end можно из внутреннего блока выкинуть.
Вот тут https://github.com/HemulGM/TGBotMini, можно посмотреть этого бота, который к слову работает прямо сейчас под ником @hgm_tg_bot и поддерживает пару команд (помимо тестовых меню это: /hh <lang name> и /hhchart).
Там, кстати, можно увидеть всё бот апи телеграма. И занимает оно всего 700 строк. Основная масса - описание объектов для десериализации.
randomsimplenumber
18.04.2022 09:44+2На Python можно писать компактно (за счёт 100500 видов синтаксического сахара) и в то же время понятно.
Druj
18.04.2022 09:49Есть варианты ускорить Python своими же силами
Есть в чате питонисты? Обьясните что там за магия и как лямбды могут быть быстрее.
…
использовать не def функции, а lamda функцииSatim
18.04.2022 10:28Фиг его знает по тестам они одинаковые, если только писать что то маленькое быстерее с помощью лямбд.
Maksim-Burtsev
18.04.2022 10:41Я провел небольшой и простой тест.
Взял 2 функции:def plus_one_def(x):
return x+1
plus_one_lambda = lambda x: x+1
И замерил время выполнения простого цикла:
for i in range(10_000_000):
функция(i)
Для чистоты эксперимента я запустил данный цикл по 10 раз для каждой функции и нашёл среднее значение времени работы:
Среднее время работы def 1.2713014736246204 sec
Среднее время работы lambda 1.303310882735126 sec
Если уменьшить количество итераций в цикле с 10**7 до 10**4, то имеем следующее:
Среднее время работы def 0.0011283075189590455 sec
Среднее время работы lambda 0.0016191064262390136 sec
На практике никто не ускоряет код, делая функции анонимными, потому что ухудшение читаемости не стоит такого прироста производительности (если он вообще будет).Druj
18.04.2022 10:52-1О каком приросте речь?
1.27 < 1.30
0.0011 < 0.0016daniilgorbenko Автор
18.04.2022 11:01-1Если внимательно прочитать, то шла речь об ускорении кода и поддержании чистоты
Генераторы списков приводились для ускорения кода, лямбды для чистоты кодаtetelevm
18.04.2022 12:07Генераторы списков, конечно, может и ускоряют код (не тестил и лень), но используют из не для этого. Ускорение слишком не заметно будет в стандартном приложении (во всех, кроме приложений, где основная работа кода - питонными средствами без нумпь и торчей создавать и убирать множество массивов), тк в работе приложения формирования одного списка занимает доли процента времени. Их используют просто потому что
# это выглядит читабельнее и красивее smth_ist = [ get_value(number).replace("a", "b") for number in another_list if number > 10 ] # чем это smth_ist = [] for number in another_list: if number > 10: value = get_value(number).replace("a", "b") smth_ist.append(value)
А за лямбды даже в пеп8 говорится, что не стоит их юзать. Сравните среднюю длину строки в
def
и вlambda
, которые делают одно и то же. Вместить в 80 символов что-то сложнееfunc = lambda x: str(x)
вообще трудновато, а как впихнуть в лямбду аннотации и докстрингу? А 100+-символьные пасты без аннотаций и докстрингов такое себе.
lea
18.04.2022 10:26+2Меня длинная арифметика в питоне порадовала, было удобно прототипировать одну штуковину.
Tanner
18.04.2022 10:46+2Node.js -- это не фреймворк, а рантайм. И уж никак не конкурент Django. С чем уж тогда сравнивать Django или Rails, так это с Nest или Sails.
saipr
18.04.2022 11:04+1Всё чаще и чаще я читаю комментарии, вижу посты, захожу в беседы, где люди ведут обсуждения о том, какой же язык лучше. Зачатую диалог выглядит так: "-Python топ 1, а что твой JS", "-Зато мой JS быстрее и для веба само то", '-Ребят, да я на Go перешел недавно, вы вообще ничего не понимаете в крутых ЯП...".
Я бы добавил в этот список связку tcl/tk.
Хорошая аналитическая и беспристрастная статья. Спасибо.
masai
18.04.2022 12:02GIL - одновременно и боль и гордость Python. Именно из-за него в Python нет многопоточности, которая бы задействовала все ядра процессора. Использование потоков в Python может еще сильнее замедлить ваш код
В Python в бинарных модулях можно отпускать GIL, так что там есть многопоточность, задействующая все ядра процессора.
К тому же стоит разделить CPU и IO bound задачи. Потоки могут ускорить программу даже если не используют все ядра.
MAXH0
ИМХО: Python - язык быстрого прототипирования. Популярность его обусловлена тем, что 90% программ не выходят из стадии вечного прототипа.