Python vs C# / .NET-каковы ключевые различия, которые следует учитывать при использовании одного для разработки большого веб-приложения?



В настоящее время моя организация предоставляет веб-приложение, основанное главным образом на серверной части SQL Server 2005/2008, структуре моделей/контроллеров Java и представлениях на основе ColdFusion. Мы решили перейти на более новую структуру и после внутренних исследований и мини-проектов сузили выбор между Python и C#/. NET.



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



пример компромисса / дифференциатора, который я ищу:



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



некоторые дополнительные сведения, которые могут будьте полезны:



наша команда инженерства около 20 большое и мы работаем в малых командах 5-7 чего мы поворачиваем людей внутри и вне часто. Мы работаем над кодом, который кто-то другой написал столько же, сколько мы пишем новый код.



с python мы бы пошли по маршруту Django, а с .NET мы бы пошли с MVC2. Наши серверы-это серверы windows под управлением IIS.



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





Я прочитал некоторые из других потоков X vs Y, связанных с этими двумя языками, и нашел их очень полезными, но хотел бы напрямую использовать Python против .Net. Заранее спасибо, что позволили мне использовать ваш опыт для этого сложного вопроса!

1530   4  

4 ответов:

" .NET " - это не язык. Возможно, это Python против C# или Python/Django против C#/ASP.NET (или выберите любую "веб-работу", которую вы хотите; есть много, много разных решений как для Python, так и для ".NET", и выбор Django или MVC2 летучей мыши может серьезно ограничить лучшие жизнеспособные варианты). Как счетчик Python против ".NET": есть IronPython (Python "в .NET")

Я бы рассмотрел:разработчик комфорт С языком и, если они равны в Python и ".NET", тогда я бы рассмотрел время оборота для разработки и выбрал язык/" webwork", который минимизировал это (опять же, это не должны быть предыдущие ограничения).

хотя модульное / интеграционное тестирование является обязательным для любого [значительного] проекта, Я считаю, что статически типизированный язык (C#/F#) can значительно уменьшить количество "глупых ошибок", относящихся к типам.

откройте игровое поле : -)

"редактировать" комментарий:

тогда вы просто сравниваете языки.

в этом случае C#-очень скучный императивный статически типизированный язык с одним наследованием/интерфейсом на основе класса OO (но несколько более аккуратных трюков, чем Java, который просто прямо каменный век). Это тот же основной тип OO, что и Python и исключая статический / динамический бит,оба языка строго типизированы (механики разные, но конечный результат вполне похожие в языковом спектре). На самом деле, python имеет MI, но это кажется менее приемлемым в python как использование ключевого слова "lambda", и поскольку python динамически типизирован, нет поддержки времени компиляции для определения контрактов интерфейса/типа (однако есть некоторые модули, которые пытаются это обеспечить).

если вы можете узнать/знать Python, то вы можете узнать/известный C#. это не сдвиг парадигмы. Некоторые ключевые слова здесь, фигурные скобки там, нужно сказать, какой тип Вы имеете в виду там другая базовая библиотека... другая среда (вам нужно бороться с некоторыми, чтобы добраться до REPL, но это выполнимо в VS.) как разработчики любят/учатся/используют это другая история. Хотя я и вызывал c# imperative раньше, приятно видеть добавление некоторых "функциональных" функций, таких как LINQ/IEnumerable extensions и closures-without-delegates, даже если базовый синтаксис C# очень процедурный - опять же, почти как python (for-expressions, вложенные функции, оператор / выражение делиться.)

в то время как новая "динамика" размывает линию (для нее очень редко бывает хорошее использование-примерно во всех тех же местах, где можно было бы вернуться к отражению в предыдущих версиях C# - это не так, но дело в том, что это обычно "неправильный путь", за исключением нескольких случаев, когда это просто "лучший/единственный способ"), " var " этого не делает. То есть, типа "переменная величина" переменная известен во время компиляции и не имеет ничего общего с динамическим набрав; это все тип вывода. Некоторые языки, такие как F#/SML и Haskell, имеют гораздо более мощный вывод типа, устраняющий необходимость "всех этих уродливых объявлений типов" (хотя явное аннотирование разрешенных типов или набора типов может сделать намерение более ясным) при сохранении статического ввода.

лично все остальное в сторону, Я бы использовал статически типизированный язык. Я не говорю C# (и я определенно не говорю Java!), но статически типизированные языки могут выталкивать ошибки типа наверх и требовать предварительных явных контрактов (это большая, большая победа для меня). В то время как вы упускаете некоторые аккуратные динамические трюки, почти всегда есть лучший способ выполнить то же самое действие на целевом языке-вам просто нужно думать в терминах этого языка и использовать отвертку для винта и молоток для гвоздя. Например, не ожидайте, что код Python будет зависеть от (ab)использования local() или global() в C# as-is.

на "нижние", наиболее статически типизированные языки (C# здесь) требуют явной компиляции (но это не так плохо, как это делает красивые сборки), а такие инструменты, как "REPL", не принимаются как первоклассные граждане (это первоклассный гражданин в F#/VS2010). Кроме того, если у вас есть необходимая библиотека для Python/C# (и она недоступна на другом языке), это может быть решающим фактором, почему следует выбирать один язык над другим.

Я написал очень исчерпывающий ответ на Quora об этом:как Python сравнивается с C#?

TL; DR

  • ответ огромен, но (надеюсь) вполне исчерпывающий. Я программировал на C# / .NET почти 10 лет, так что я знаю это очень хорошо. И я программирую на Python в Quora в течение ~ 7 месяцев, поэтому я надеюсь, что знаю это довольно хорошо.

  • Python является победителем в: простота обучения, кросс-платформа разработка, наличие библиотек с открытым исходным кодом

  • C# является победителем в: стандартная библиотека, языковые функции, процесс разработки и инструменты, производительность, скорость эволюции языка
  • примерно даже: синтаксис (Python лучше читается, C# имеет более последовательный синтаксис), принятие.

Я бы также предложил, чтобы мы сравнивали время выполнения и не ограничивались языковыми функциями, прежде чем делать такие шаги. Python работает через интерпретатор CPython, где C# работает на CLR в своих реализациях по умолчанию.

многозадачность очень важна в любом крупномасштабном проекте; .NET может легко справиться с этим через потоки... а также он может воспользоваться преимуществами рабочих процессов в IIS (ASP.NET). CPython не предлагает истинные возможности резьбы из-за GIL...замок, который каждый поток должен приобрести перед выполнением любого кода, для истинной многозадачности вы должны использовать несколько процессов.

когда мы принимаем ASP.NET приложение на IIS на одном рабочем процессе, ASP.NET по-прежнему можно использовать преимущества потоковой обработки для одновременного обслуживания нескольких веб-запросов на разных ядрах, где CPython зависит от нескольких рабочих процессов для достижения параллельных вычислений на разных ядрах.

все это приводит к большому вопросу, как мы собираемся разместить приложение Python/Django на windows. Мы все знают, что процесс разветвления на windows намного дороже, чем Linux. Поэтому идеально разместить приложение Python / Django; лучшей средой будет Linux, а не windows.

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

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

но теперь у нас есть современные IDE, такие как PyCharm. Они интегрируют pep8 pylint и "код проверки" и "стайл-гайда-Регистрация", когда вы вводите свой код. Это устраняет самые глупые ошибки. Таким образом, теперь у вас почти такая же безопасность в python.

другое дело, если вам нужна "статическая проверка типа" Сделай сам когда вам нужно оно. Это прагматическая природа python.

GIL-это проблема, но вы можете использовать gevent или ZMQ для выполнения своего рода резьбы. Но работа над PyPy STM продолжается.

Python работает практически в любом месте, и у вас есть выбор различных, в основном совместимых, сред выполнения (12 в Википедии) Wikipedia python interpreter list

Comments

    Ничего не найдено.