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

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

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

Компромисс/дифференциатор в качестве примера я ищу:

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

Немного дополнительной информации, которая может быть полезной:

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

С Python мы пошли бы путем Django, и с.NET мы пойдем с MVC2. Наши серверы являются серверами окон рабочий IIS.

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


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

55
задан Zugwalt 5 August 2010 в 15:42
поделиться

1 ответ

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

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

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

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

Правка для комментария:

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

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

Если вы можете выучить / знать Python, то вы можете изучить / узнать C #. Это не смена парадигмы. Некоторые ключевые слова здесь, фигурные скобки там, должны сказать, какой тип вы имеете в виду, другую базовую библиотеку ...другая среда (вам придется сражаться с некоторыми, чтобы добраться до REPL, но это выполнимо в VS). Как разработчики любят / изучают / используют это - другая история. Хотя раньше я называл C # императивным, приятно видеть добавление некоторых «функциональных» функций, таких как расширения LINQ / IEnumerable и замыкания без делегатов, даже если основной синтаксис C # очень процедурный - опять же, довольно очень похоже на python (for-выражения, вложенные функции, разделение операторов / выражений).

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

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

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

42
ответ дан 7 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: