Наверное я один из немногих, которые желают опубликовать материал не просто, чтобы было, или чтобы высказать свое "авторитетное» мнение по тем или иным вопросам, а чтобы получить обратную связь. И за эту самую связь в комментариях я был бы весьма признателен!

Эта статья является немного более детальным изложением моего видео

Статья называется «проблема выбора» потому, что проблема действительно есть, и я попытаюсь изложить свое отношение.

А что сравнивать?

Действительно. 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)


  1. Keeper11
    04.12.2024 11:48

    Уже довольно давно нигде не встречал ASP. Может, на каких-то олдовых сайтах оно ещё и осталось...


    1. VanKrock
      04.12.2024 11:48

      нуу почти все банки, в них половина сервисов на dotnet
      возможно вы давно не встречали aspx страниц, так как все давно работают по rest


      1. Iliniel Автор
        04.12.2024 11:48

        Эээх, хотел бы я знать, насколько в тех банках сложная логика...

        А про использование, ну знакомый Sinior Java говорит, что новое пилят на C#. Хотя до сих пор есть те, что искренни верят, что .NET это о Windows))


        1. VanKrock
          04.12.2024 11:48

          Есть сложная, есть не очень. Если сравнивать с java то тут я точно за dotnet, на нём просто удобнее писать, особенно в последних версиях dotnet


        1. rukhi7
          04.12.2024 11:48

          хотел бы я знать, насколько в тех банках сложная логика...

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

          MPEG-и в банках явно не кодируют, и БПФ-ы в реальном времени не считают.


          1. TerekhinSergey
            04.12.2024 11:48

            Распределенные транзакции с гарантированным результатом, взаимодействие со 100500 разных систем, начиная от платёжных и заканчивая регуляторами, межбанковское взаимодействие. И всё это под нехилой нагрузкой... Крипта опять же везде - не только ЭЦП, но и остальное. В общем, банки и финансовый сектор - это тоже сложно, только по-другому. Про видеокодеки там и правда речь не идёт :)


          1. JohnRambo
            04.12.2024 11:48

            Как ты далёк от того что делается в банках, даже не представляешь.


          1. sdramare
            04.12.2024 11:48

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


      1. ColdPhoenix
        04.12.2024 11:48

        Я думаю человек имел в виду что оно называется ASP.NET



  1. VanKrock
    04.12.2024 11:48

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


    1. Iliniel Автор
      04.12.2024 11:48

      Положа руку на сердце, я без ума от C#.
      Но знаешь, как иногда хочется забыть, о свойствах, геттерах/сеттерах, делегатах, событиях и всем вот этом...


      1. VanKrock
        04.12.2024 11:48

        Тогда зачем вам вообще программировать? Описанные вами вещи совсем не сложные


        1. Iliniel Автор
          04.12.2024 11:48

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


          1. VanKrock
            04.12.2024 11:48

            Совсем не значит. То, что в python их нет, означает лишь то, что проблемы, которые решаются в С# при помощи этих конструкций, в python решаются иначе


          1. qss53770
            04.12.2024 11:48

            В питоне есть сеттеры, геттеры ... просто их в школе не проходят и поэтому 70% кто "знает" питон о их существовании не знает


            1. Iliniel Автор
              04.12.2024 11:48

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


  1. vagon333
    04.12.2024 11:48

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

    Да, и дружеский совет: будьте аккуратны в терминах.
    Между ASP и ASP.NET гигантская разница.


  1. Roman_Cherkasov
    04.12.2024 11:48

    Кажется что в текущий момент, уже не очень важна разница в скорости, между Python / C# / Java / JS и может быть даже Go. В какой то момент все, все равно упирается в IO. И встаёт вопрос масштабирования в ширину. А тут навешиваются балансировки, покупаются мощности, разбиваются базы и поехали дальше. (Это касательно веб разработки)

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


    1. Kingas
      04.12.2024 11:48

      А где IO, там ещё встаёт вопрос у кого эффективнее и удобнее асинхронная событийная модель. JS для сервера, это один поток и новые воркеры, соответственно там свои приплясывания. При IO задачах это не есть плохо, один поток при асинхронно модели может много обработать. Но, например, то как там водят джобы, это какое-то отдельное искусство плодить процессы с отдельными ресурсами. В итоге IO операций становится ещё больше.

      Горизонтальная масштабируемость это хорошо, только не везде это нужно. А за каждый балансировщик, за каждый инстанс сервиса надо платить. Либо пожертвовать латентностью и водить "serverless".

      А вот когда денег много, чтобы водить большие инфраструктуры, тогда со всем можно согласится.


  1. AuToMaton
    04.12.2024 11:48

    Python 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, так что я не думаю что при неверном выборе из первой четвёрки цена ошибки будет высокой. Или, перефразируя, что правильный выбор даст значительные преимущества.


  1. lavr2004
    04.12.2024 11:48

    Писал и Джанго бэк-энды з ДРФ за один день. И на .NET MAUI кроссплатформенное приложение прямо сейчас пишу.

    Совпало.

    Скажу объективно: C# имеет большее будущее чем Python. Все преимущества Python - это его же и недостатки, особенно при дебаггинге кода. Ошибок на Python я совершал больше. На C# всё чётко и ошибки отлавливаются очень легко.

    К тому же, если вы любите "Свободу", то как раз .NET стремится к тому, чтобы генерализовать и обобщить под капотом CLR все известные языки и их парадигмы. Таким образом вам не нужно метаться как еврею в магазине... Вы просто работаете под одной общей крышей. Это и есть свобода.

    ПС: тот же MAUI есть обобщение над Java и это в некотором роде избавляет меня от необходимости изучать для разработки под ведроид целый отдельный язык... Я сам без команды программистов могу написать своё приложение для всех платформ сразу, включая Tizen... Это ли не Свобода?.. Риторический вопрос.