Наверное я один из немногих, которые желают опубликовать материал не просто, чтобы было, или чтобы высказать свое "авторитетное» мнение по тем или иным вопросам, а чтобы получить обратную связь. И за эту самую связь в комментариях я был бы весьма признателен!
Эта статья является немного более детальным изложением моего видео
Статья называется «проблема выбора» потому, что проблема действительно есть, и я попытаюсь изложить свое отношение.
А что сравнивать?
Действительно. Python — объектно-ориентированный, интерпретируемый язык программирования с динамической типизацией, а C# такой же объектно-ориентированный, но компилируемый и со статической типизацией. На этом, казалось бы, можно и закончить, однако предлагаю порассуждать подробнее.
Компилируемый vs интерпретируемый
Знаете, складывается такое ощущение, что вокруг одни кодеры. Да-да, не программисты, не разработчики, а кодеры.
Конечно, ни всем же получать высшее образование и т. д., но лично мне кажется, что не понимать различие компилируемости и интерпретируемости, это как не знать нот, будучи музыкантом. Играть можно, петь можно, но представьте, как такой музыкант будет учить играть на музыкальном инструменте или записывать свои произведения: нажмите кнопочку, семнадцатую по счету слева, находящуюся рядом с черной клавишей...
Компиляция — не просто перевод текста языка программирования в машинные коды, а в некоторых языках (C#, Java), в байт-код.
Я надеюсь, что среди присутствующих не возникнет разногласий по поводу того, что C# и Java компилируемые языки.
При запуске Python-кода, он компилируется в байт-код, который за тем выполняется в Python Virtual Machine.
И здесь в головах многих может возникнуть диссонанс. А вы знали, что PHP также компилируется?
На дворе почти 2025 год, а я до сих пор встречаю определение Python как медленного. Спрашиваешь, почему, а в ответ: так он же интерпретируемый!
Я не стану отрицать, когда‑то я и сам считал также. Как? А вот что наш текст выполняется интерпретатором как текст, и все. А ведь текст — набор символов какой‑то кодировки, явно не машинный код!
Так почему же Python интерпретируемый? Из‑за способа исполнения, поскольку байт‑код выполняется пошагово.
А дальше даже пытаться рассуждать об этом не стану, потому что это надо быть кем‑то очень опытным и образованным, чтобы не сломать ногу в нововведениях того же Python 3.13, введенной JIT и возможности отключить GIL.
Производительность.
Вопрос компилируемости или интерпретируемости встает обычно из-за производительности. Дескать, оно компилируемое, а значит, по умолчанию быстрее, и кривой алгоритм совсем не беда!
Многие библиотеки на Python написаны на C/C++, а соответственно, вызывают тот самый, невероятный C/C++ код! И все, что медленно, так это по сути вызовы этого самого кода.
Мне тут в комментах под одним из видео написали, что Python не вывозит рендеринг 10_000 спрайтов. Я лично не проверял, но подозреваю, что если заморочиться, то и не то можно.
А почему же тогда игры не пишут на Python? Такое утверждение я также встречаю достаточно часто. И сразу вопросы, очень много! Кто не пишет? Что не пишет?
Компании не пишут? Так у компании наверно есть деньги на свои движки и C++ программистов.
А вот Маркус Перссон взял и создал на Java самую продоваемую игру в истории, Minecraft, если кто не понял. И плевать ему было, чем там компании занимаются, и на чем пишут.
Так вот, многие говоря о геймдеве забывают, что есть игровая логика, а есть игровая механика. И зачем писать движок на Python, если тот же Pygame использует вполне себе сишный SDL. А движок? Извините, язык программирования лишь инструмент, и Python не для тех задач. Но если вопрос в написании игровой логики на Python, возможно весьма!
Выбор
И когда мы смотрим на вопрос выбора сквозь открывшиеся факты, этот вопрос становится не таким и глупым, и весьма даже объективным.
С появлением top level в C#, теперь тот же Hello World можно уместить в одну лишь строку.
И теперь различия между Python и C# стали минимальными. Оба просты, один чуть проще, другой чуть подробнее (но ведь подробнее не = сложнее?), один с каким-то ООП без инкапсуляции, второй же с полной моделью (хотя и в Python можно сделать подобие идеальной модели), и даже задачи можно решать те же, я знаю, что Microsoft развивает тему с ML, но я не вникал, не моя тема.
Личная история
Я предприниматель. Не в смысле бизнесмен, а предприниматель. Я живу как хочу, делаю, что хочу, моим ограничителем является лишь моя религиозность. Из-за нейроотличности (официально поставлен диагноз синдрома дефицита внимания и гиперактивности), мне сложно заниматься тем, что не нравится.
Я не планировал и не планирую быть профессиональным разработчиком. Но поработать надо, для иммиграционных причин.
И когда я смотрю в разработку, понимаю, скорее всего, лишь Backend. При этом, я боюсь сложных задач. Не в смысле задач боюсь, а боюсь не справиться. Не хочу изучать глубоко алгоритмы и т.д.
Идеальная работа, какую я себе представляю, сидеть и пилить однотипные сайтики, по обычным типичным клиентским запросам.
И казалось бы, выбирай Python/Django, и не парься! Однако, такой выбор сделает Python моим основным языком, а мне хотелось бы полной свободы.
Есть лишь одна интересная мне сфера, в которой Python слаб. И если бы не она, мой личный выбор однозначно был бы за ним. Android разработка!
Вот вокруг говорят, что мобильная разработка — либо Java/Kotlin, либо Swift. Кроссплатформенная, Dart. И нигде! Ни разу! Не говорят о MaUI, где когда пишем на C#, получаем нативные приложения под обе платформы, Android и IOS.
Вы мне скажете: ведь у Python есть Kivy. А я отвечу, что развивается он непойми как, и к сожалению, Kivy это open source проект, неподдерживаемый крупными компаниями (насколько я знаю).
Сразу хотелось бы отметить, что я ничего не имею против open source. Более того, это круто, когда проекты создаются идейными. Но за многими действительно качественными продуктами, с которыми я когда‑либо был знаком, стоят крупные компании.
Тот же чтец экрана Orca для слепых и слабовидящих для Linux был создан сотрудником Sun Microsystems. А знакомым с Linux так и вообще думаю не следует рассказывать о Fedora, и чем она отличается от иных дистрибутивов.
Короче, Kivy за которым стоят энтузиасты мне нравится меньше MaUI, за которым стоит Microsoft.
И казалось бы, радуйся, иди практикуй себе C#/ASP, но ведь ASP преимущественно используют в корпоративном секторе, где самое важное бизнес‑логика, именно то, где бы я не хотел находиться!
Иногда встречал рекомендации реализовать что‑то одно на двух фреймворках, и посмотреть, что и как. Когда я только начинал, реализация блога на ASP у меня вышла немного дольше, чем на Django. Быть может, если быть опытным и все знать это нивелируется, но я не уверен.
А тех, которые работали с обеими платформами, я пока еще не встречал. Быть может, здесь такие найдутся?
Надеюсь, эта статья окажется кому-то полезной, спасибо за внимание!
Комментарии (22)
VanKrock
04.12.2024 11:48На самом деле тут вопрос выбора языка, а это вкусовщина, какой больше нравится, на том и пишите. Плюсом будет если есть знакомый разработчик на выбранном языке, чтобы задавать вопросы в случае чего. На том и на другом можно писать как довольнот сложные вещи так и простые. Я разработчик на dotnet, мне полностью нравится, в dotnet практически нет необходимости заниматься выбором библиотек, всё стандартно от проекта к проекту. Многие сервисы у нас в компании пишут на python у них тоже нет каких то проблем
Iliniel Автор
04.12.2024 11:48Положа руку на сердце, я без ума от C#.
Но знаешь, как иногда хочется забыть, о свойствах, геттерах/сеттерах, делегатах, событиях и всем вот этом...VanKrock
04.12.2024 11:48Тогда зачем вам вообще программировать? Описанные вами вещи совсем не сложные
Iliniel Автор
04.12.2024 11:48Так я же не говорю, что они сложные. Я говорю, что в Python их нет, а соответственно, код проще, время разработки сокращается))
VanKrock
04.12.2024 11:48Совсем не значит. То, что в python их нет, означает лишь то, что проблемы, которые решаются в С# при помощи этих конструкций, в python решаются иначе
qss53770
04.12.2024 11:48В питоне есть сеттеры, геттеры ... просто их в школе не проходят и поэтому 70% кто "знает" питон о их существовании не знает
Iliniel Автор
04.12.2024 11:48Ну я начинал изучать Python глубоко не в школе, а по курсам одного из разработчиков интерпретатора CPython.
В Python есть и механизмы для реализации нормальной модели инкапсуляции, и возможность сделать геттеры сеттеры через декораторы. Вопрос в используемости.
vagon333
04.12.2024 11:48Общество не очень одобряет сравнивать языки, потому что это почва для очередного холивара.
Да, и дружеский совет: будьте аккуратны в терминах.
Между ASP и ASP.NET гигантская разница.
Roman_Cherkasov
04.12.2024 11:48Кажется что в текущий момент, уже не очень важна разница в скорости, между Python / C# / Java / JS и может быть даже Go. В какой то момент все, все равно упирается в IO. И встаёт вопрос масштабирования в ширину. А тут навешиваются балансировки, покупаются мощности, разбиваются базы и поехали дальше. (Это касательно веб разработки)
Вопрос выбора языка, стоит остро только в области доступных спецов на рынке и готовых решений для проекта. А бложики писать на 5 уников в день - можно одинаково эффективно, на том, что больше нравится.
Kingas
04.12.2024 11:48А где IO, там ещё встаёт вопрос у кого эффективнее и удобнее асинхронная событийная модель. JS для сервера, это один поток и новые воркеры, соответственно там свои приплясывания. При IO задачах это не есть плохо, один поток при асинхронно модели может много обработать. Но, например, то как там водят джобы, это какое-то отдельное искусство плодить процессы с отдельными ресурсами. В итоге IO операций становится ещё больше.
Горизонтальная масштабируемость это хорошо, только не везде это нужно. А за каждый балансировщик, за каждый инстанс сервиса надо платить. Либо пожертвовать латентностью и водить "serverless".
А вот когда денег много, чтобы водить большие инфраструктуры, тогда со всем можно согласится.
AuToMaton
04.12.2024 11:48Python vs C#, Django vs ASP: проблема выбора
И как раз в этих терминах я проблему выбора сформулировать не могу - первая часть на порядки шире второй.
Я не планировал и не планирую быть профессиональным разработчиком.
Это, по моему личному мнению, уводит выбор в сторону от того, что Вы упоминаете, и приводит к доступности библиотек и удобству работы. Julia.
Есть лишь одна интересная мне сфера, в которой Python слаб. И если бы не она, мой личный выбор однозначно был бы за ним. Android разработка!
Непрофессиональная Андроид разработка? Не понял, но Julia извинилась и ушла. А я понял что пора делать предположения о том, что имелось в виду на самом деле
Как бы в максимум областей влезть минимально голову наполнив
Как-то так, кажется мне. Тогда надо заметить, что в действительности Python не значимо медленный - ускоряется многими способами начиная с numba, изначально предполагает ускорение с помощью модулей, теперь и модных на Rust, транслируется в JavaScript который медленным называть не принято, что порождает занятные проекты типа anvil.works и открывает Python дорогу на тот же Андроид через тот же React Native, например.
C# кросс-платформа не только через MAUI, но и через Uno и Avalonia, и через Unity и Godot тоже. Но мне кажется уместным заметить, что это в условиях распада разумно пытаться быть умнее системы, в остальных случаях такое наказуемо. Год с чем-то назад, или два (три?) тщательно выбирал себе дистрибутив Линукс, потратил лишнее время - достаточно было взять в каждом семействе по топу на Distrowatch. Применительно к C# это означает - у любого не упоминания есть веская причина.
ИМХО, кандидатами для выбора являются Python и JavaScript. Во второй лиге Rust и C++. Они гармонично сочетаются с Python через модули и с JavaScript через WebAssembly, но они компилируемые. Это, кстати, означает не «существенно более быстрые» а, после смерти Delphi особенно, «нужно много ждать».
Все языки стремятся быть для всего и у всех потихоньку получается, см. Go и Fyne, так что я не думаю что при неверном выборе из первой четвёрки цена ошибки будет высокой. Или, перефразируя, что правильный выбор даст значительные преимущества.
lavr2004
04.12.2024 11:48Писал и Джанго бэк-энды з ДРФ за один день. И на .NET MAUI кроссплатформенное приложение прямо сейчас пишу.
Совпало.
Скажу объективно: C# имеет большее будущее чем Python. Все преимущества Python - это его же и недостатки, особенно при дебаггинге кода. Ошибок на Python я совершал больше. На C# всё чётко и ошибки отлавливаются очень легко.
К тому же, если вы любите "Свободу", то как раз .NET стремится к тому, чтобы генерализовать и обобщить под капотом CLR все известные языки и их парадигмы. Таким образом вам не нужно метаться как еврею в магазине... Вы просто работаете под одной общей крышей. Это и есть свобода.
ПС: тот же MAUI есть обобщение над Java и это в некотором роде избавляет меня от необходимости изучать для разработки под ведроид целый отдельный язык... Я сам без команды программистов могу написать своё приложение для всех платформ сразу, включая Tizen... Это ли не Свобода?.. Риторический вопрос.
Keeper11
Уже довольно давно нигде не встречал ASP. Может, на каких-то олдовых сайтах оно ещё и осталось...
VanKrock
нуу почти все банки, в них половина сервисов на dotnet
возможно вы давно не встречали aspx страниц, так как все давно работают по rest
Iliniel Автор
Эээх, хотел бы я знать, насколько в тех банках сложная логика...
А про использование, ну знакомый Sinior Java говорит, что новое пилят на C#. Хотя до сих пор есть те, что искренни верят, что .NET это о Windows))
VanKrock
Есть сложная, есть не очень. Если сравнивать с java то тут я точно за dotnet, на нём просто удобнее писать, особенно в последних версиях dotnet
rukhi7
найти счет в базе данных, несколько счетов по какому то правилу, посчитать проценты, итого, ... самое сложное наверно электронную подпись подписать-проверить, нет?
MPEG-и в банках явно не кодируют, и БПФ-ы в реальном времени не считают.
TerekhinSergey
Распределенные транзакции с гарантированным результатом, взаимодействие со 100500 разных систем, начиная от платёжных и заканчивая регуляторами, межбанковское взаимодействие. И всё это под нехилой нагрузкой... Крипта опять же везде - не только ЭЦП, но и остальное. В общем, банки и финансовый сектор - это тоже сложно, только по-другому. Про видеокодеки там и правда речь не идёт :)
JohnRambo
Как ты далёк от того что делается в банках, даже не представляешь.
sdramare
Вы хотя бы в вики почитайте чем занимаются банки прежде чем что-то писать.
ColdPhoenix
Я думаю человек имел в виду что оно называется ASP.NET
asvechkar
https://www.wildberries.ru/