Статьи

Почему многие разработчики ненавидят ASP.NET … и почему они не правы

Немногие платформы получают столько же ярости, сколько ASP.NET (или .NET в целом) от сообщества разработчиков. Несмотря на то, что существует определенная обоснованная критика платформы (а какой платформы нет?), Большая часть негатива исходит от тех, кто не проводил время с .NET. Эти разработчики, как правило, полагаются на неправильные представления или ненависть, чтобы обосновать свое мнение, и они оказывают плохую услугу другим, желающим изучить новую технологию, и самой платформе. Итак, давайте рассмотрим эти оправдания и добавим дозу реальности о том, почему вы не должны слушать сброд и попробовать ASP.NET.


Это, вероятно, причина № 1 для всей ненависти ASP.NET.

Microsoft — крупная корпорация по разработке программного обеспечения, и, как и все другие корпорации, они занимаются зарабатыванием денег. Да, верно? К сожалению, это, вероятно, причина № 1 для всей ненависти ASP.NET: это технология Microsoft, и «злая» грязь все еще остается над гигантом в сознании многих людей. Я всегда находил это интересным, потому что другие крупные технологические компании, такие как Google и Apple, такие же «злые», как Microsoft, но фанатики других компаний обычно закрывают глаза (или не признают это) «Зло». Лично я считаю, что большинство людей — это люди с нормальными мыслями. Их не волнует, кто делает продукт, если этот продукт работает хорошо.

Но я не говорю о нормальных людях, верно? Обычные люди не видят заголовок, содержащий «ASP.NET», и имеют автоматическое побуждение сделать бессмысленный комментарий. Вместо этого я говорю о разработчиках (и гиках), которые рассматривают технологию и / или компанию, которая ее создает, как религию. Я не шучу — найди какую-нибудь статью или учебник на платформе X, и велика вероятность, что ты найдешь комментарии с надписью «X Sucks! У правил! »

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

Печально, что technology = religion мышление существует. Технология — это просто инструмент, и настоящий разработчик собирается опробовать несколько инструментов, чтобы найти подходящий для работы. Это не значит, что кто-то не может не любить технологию, но повторяет наших родителей: «Вы не знаете, что вам это не нравится, пока вы не попробуете». Чтобы кому-то что-то действительно не нравилось, он должен это попробовать. Так что не слушайте сброд — они не пробовали и не сформировали информированное мнение. Если вы решите попробовать, они попытаются отговорить вас, сказав, что это слишком дорого.


Найдите любую статью, сравнивающую ASP.NET с любой другой платформой, и вы прочитаете, либо в статье, либо в комментариях: «ASP.NET стоит больше, чем [вставьте сюда любую другую серверную технологию, кроме ColdFusion]». Обсуждая реальную стоимость чего-либо, важно поместить термин «дорогой» в контекст, так как то, что дорого для личного использования, может считаться дешевым в деловой среде. В бизнесе есть много факторов, которые составляют «стоимость» продукта. Очевидно, что необходимо учитывать начальную цену, но выгода от продукта также учитывается в общей стоимости.

Если продукт стоит 10 000 долларов, но он экономит компании 1000 долларов в месяц, решение о покупке не вызывает затруднений. Но на личном уровне было бы более чем вероятно оправдать первоначальные затраты в 10 000 долларов.

Поэтому, когда речь идет о стоимости, важно держать вещи в перспективе в соответствии с контекстом, в котором они будут понесены. Для простоты я собираюсь предположить, что если вы читаете это, вы больше озабочены личными расходами, чем затратами на бизнес (если я ошибаюсь с этим предположением, я сделаю это очень легко для вы: если у вас есть среда Windows, ASP.NET дешево).

На самом деле вам не нужна Windows для разработки приложений ASP.NET, благодаря проекту Mono .

Давайте избавимся от самой большой стоимости: операционной системы Windows. Вам фактически не нужна Windows для разработки приложений ASP.NET, благодаря проекту Mono (подробнее об этом позже), но Mono обычно отстает от официальной .NET Framework, выходящей из печей Microsoft. Так что, если вам нужны все новейшие функции и совершенство .NET, вам понадобится Windows. Большинство OEM-производителей (такие как Dell, HP, Acer и т. Д.) Поставляют свои компьютеры с уже установленной Windows; поэтому, если вы покупаете компьютер в магазине электроники, например Best Buy, шансы на то, что на компьютере будет установлена ​​ОС Windows, чертовски хороши. Если вы более опытный пользователь и создаете свои собственные компьютеры или планируете запускать Windows на виртуальной машине, вам придется приобрести копию Windows. OEM-версия Windows будет стоить от 99 до 189 долларов, в зависимости от того, какую версию Windows вы покупаете. Вам не нужно иметь Professional ($ 139 OEM) или Ultimate ($ 189 OEM), но если вы опытный пользователь, вам, скорее всего, захочется выбрать одну из этих двух версий (OEM-версии дешевле розничных версии, но они привязаны к оборудованию, на котором вы их активируете).

В связи с этим давайте рассмотрим стоимость разработки. Разработка ASP.NET считается дорогой по двум причинам.

  1. Это Microsoft. Якобы они ничего не раздают бесплатно, но это именно то, что они делают. Все, что вам нужно для разработки приложений ASP.NET (или приложений .NET в целом), можно получить, не тратя ни копейки.

    Новички: во- первых, Microsoft раздает WebMatrix , среду разработки, ориентированную на новичков. Он объединяет интегрированную среду разработки (IDE) со встроенным веб-сервером (IIS Express) и механизмом базы данных (SQL Compact Edition). У этого также есть инструменты, чтобы помочь пользователям развернуть их веб-сайты на удаленный хост.

    Опытные пользователи. Для более продвинутых разработчиков Microsoft предоставляет экспресс-выпуски Visual Studio. Как и WebMatrix, эти урезанные версии Visual Studio бесплатны, но они предлагают некоторые функции и возможности, присутствующие в полных версиях Visual Studio. Продукт Express, ориентированный на веб-сайты, — это Visual Web Developer Express (VWD), и он также имеет встроенный веб-сервер. Он не имеет встроенного механизма базы данных, но Microsoft предоставляет SQL Server Express, урезанную версию SQL Server, которую можно использовать для разработки (и даже в некоторых ситуациях развертывания). Если позже вы решите, что вам нравится Visual Studio, и хотите приобрести полную версию, проекты, разработанные с помощью VWD, можно открыть в Visual Studio.

    Студенты. А если вы студент, вы можете бесплатно получить множество программ Microsoft (Visual Studio Pro, ОС Windows Server и Expression Studio), используя программу DreamSpark .

  2. Во-вторых, хостинг на базе Windows считается слишком дорогим. Десять лет назад этот аргумент имел вес. Сегодня, однако, вы не найдете недостатка в недорогом хостинге для ASP.NET. DailyRazor (компания, которой я пользуюсь) начинает планы с $ 2 в месяц, и вы можете найти других хостинг-провайдеров, которые продают свои услуги по низким ценам.

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


Достаточно взглянуть на библиотеку классов .NET Framework, чтобы почувствовать себя «это для предприятия».

На самом деле легко понять, что ASP.NET не подходит ни для чего, кроме крупных сайтов. В конце концов, Microsoft — это компания-разработчик платформ, и их продукты в первую очередь ориентированы на бизнес-решения. .NET не особо отличается в этом отношении; он огромен в бизнес-средах, и его опорная точка продолжает расти, поскольку Microsoft расширяет новые и обновленные продукты, такие как Azure (облачная платформа Microsoft) и Windows Phone, соответственно. Достаточно взглянуть на библиотеку классов .NET Framework, чтобы почувствовать себя «это для предприятия». Это похоже на то, как если бы фреймворк подсказывал разработчикам, что (ASP) .NET-приложения должны быть высоко структурированными шедеврами объектно-ориентированного проектирования. Многие .NET сложны, и делать простые вещи не всегда так просто, как должно быть. Похоже, я делаю дело скептиков, не так ли? Я вроде как, но есть две вещи для рассмотрения.

Во-первых, Microsoft хочет, чтобы вы разрабатывали на их платформе, и они признали, что для ее роста необходимо некоторое (возможно, много) упрощение. В конце концов, PHP так же популярен, как и в частности, из-за его простоты, и это основная причина, по которой Microsoft выпустила WebMatrix: предложить новым разработчикам (либо для разработки .NET, либо для веб-разработки в целом) упрощенный подход к написанию сайтов с ASP. СЕТЬ.

Мало того, что все-в-одном IDE проста в использовании, Microsoft создала упрощенный API, чтобы сделать разработку ASP.NET проще и менее сложной.

Вы также можете создавать сайты с тем же типом «сценариев», который процветает в PHP.

Во-вторых, вам не нужно впадать в менталитет «высоко структурированный или умереть». Существует много подходов к разработке ASP.NET. Если вы хотите создавать высокоструктурированные шедевры объектно-ориентированного дизайна, вы можете. Но вы также можете создавать сайты с тем же типом «сценариев», который процветает в PHP. Дело в том, что разработка ASP.NET достаточно гибкая, чтобы соответствовать вашим потребностям, и вы можете выбрать подход к разработке, который подходит вам лучше всего.

Как ни странно, есть несколько распространенная идея, что ASP.NET не подходит для сайтов корпоративного класса. o.0


Я, честно говоря, понятия не имею, откуда это происходит, потому что, как упоминалось ранее, ASP.NET выделяется в корпоративном пространстве. Но не просто поверьте мне на слово; давайте рассмотрим реальный веб-сайт (ну, сеть веб-сайтов), который работает на ASP.NET.

Вы когда-нибудь слышали о StackOverflow.com ? Возможно, у вас есть, а если нет, то это веб-сайт для разработчиков вопросов и ответов (независимо от технологии). Это бесценный ресурс, который я посещаю довольно часто.

StackOverflow является членом Stack Exchange Network , сети веб-сайтов вопросов и ответов по различным темам: серверы, базы данных, legos, научно-фантастические, автомобили и так далее, и так далее. Сейчас в сети 71 сайт , и он продолжает расти.

Ребята из Stack Exchange Network довольно открыто говорят о своей сети. Большая часть кода, работающего на сайте, имеет открытый исходный код, и они часто предоставляют информацию о сети в целом. В марте 2011 года в своем блоге Кайл Брандт представил обзор технологий, которые обеспечивают работу сети Stack Exchange, а также трафика, который получает сеть. Имейте в виду, что эта информация относится ко всей сети обмена стека. Он получает 95 миллионов просмотров страниц в месяц и обрабатывает 800 HTTP-запросов в секунду, и эти запросы обрабатываются двенадцатью (да только двенадцатью) веб-серверами Windows, двумя серверами MS SQL Server, двумя балансировщиками нагрузки Linux и двумя серверами кэширования Linux (сбой). аппаратное обеспечение не входит в этот счет).

Перечитайте эту статистику — я подожду. Феноменальный, верно? Удивительно, что только двенадцать серверов, обслуживающих множество разных веб-сайтов, обрабатывают такой объем трафика. Это свидетельство того, насколько хороша серверная и прикладная архитектура Microsoft.


Динамические языки управляют сетью. Будь то на стороне сервера, где живут такие языки, как PHP, Ruby, Python и Perl, или в браузере с JavaScript, динамические языки являются основой Интернета. Дело не в том, что эти языки лучше, но они быстро принимаются, потому что динамические языки обычно легче изучать и понимать, чем языки со статической типизацией.

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

Я полностью понимаю мышление. Раньше я был одним из тех людей, и я понимаю желание оставаться в своей зоне комфорта. В конце концов, динамические языки снисходительны, и в этом снисхождении есть некоторый комфорт.

Статические языки имеют строгую систему типов.

Но есть и плохая сторона этого снисхождения; очень легко вносить ошибки в ваше приложение, если вы не будете осторожны. Обычно вы не найдете эту ошибку до времени выполнения, и частой причиной ошибок является присвоение другого и непреднамеренного типа значения критической переменной. Вот где главное преимущество статических языков: безопасность типов. Статические языки имеют строгую систему типов, в которой переменная может содержать только один тип значения (например, переменная, объявленная как целое число, может содержать только целые значения; она не может содержать строки или числа с плавающей запятой). Если вы ошибочно назначаете строку в числовую переменную, вы сразу узнаете об ошибке при компиляции кода, потому что компилятор остановится и предупредит вас об ошибке.

Безопасность типов также может облегчить проверку типов, необходимую для динамических языков. Например, сколько раз вы писали код, подобный следующему, чтобы гарантировать, что данные, которые принимает функция, имеют ожидаемый тип:

1
2
3
4
5
6
7
function add($a, $b) {
    if (is_int($a) && is_int($b)) {
        return $a + $b;
    }
 
    // throw error
}

Это простая функция PHP, которая добавляет два числа вместе. Чтобы обеспечить предсказуемые результаты, необходимо проверить, соответствуют ли предоставленные значения подходящего типа (допустимо, проверка типов здесь не завершена; существуют числовые типы, отличные от целых); в противном случае ваше приложение может сломаться в неожиданное время. Напротив, давайте посмотрим на эквивалентный код C #:

1
2
3
int add(int a, int b) {
    return a + b;
}

Этот код определяет метод add() . C # — самый популярный язык .NET, и он является чисто объектно-ориентированным. Там нет функций; только методы класса. Этот метод принимает два целочисленных значения (обозначаемых ключевым словом int перед идентификаторами a и b ) и возвращает целочисленное значение, обозначенное int перед add . Поскольку C # является статическим языком, проверка типов выполняется компилятором, а не вами. Таким образом, если вы вызовете этот метод, передадите строку в качестве одного из аргументов, например add("hello", 123) , и попытаетесь скомпилировать код, компилятор остановит процесс сборки и предупредит вас об ошибке. Однако, скорее всего, вы даже не попытаетесь скомпилировать код, потому что Visual Studio выполняет свою собственную проверку типов и синтаксиса; IDE предупредит вас об ошибках еще до того, как вы попытаетесь скомпилировать (см. скриншот ниже Visual Studio 2010).

Также учтите, что Microsoft постоянно обновляет и улучшает язык C #. В первых двух версиях языка вы должны были определить тип переменной при объявлении ее следующим образом:

1
XmlDocument document = new XmlDocument();

Этот код создает экземпляр класса XmlDocument , объявляя его тип перед именем переменной. Следует признать, что этот синтаксис довольно громоздкий и добавляет гораздо больше типизации, но в C # 3.0, однако, вы можете просто использовать ключевое слово var для определения переменной, например так:

1
var document = new XmlDocument();

Существуют .NET-версии PHP, Ruby, Python и PERL.

Компилятор достаточно умен, чтобы сделать вывод, что переменная document является XmlDocument . Этот синтаксис как бы стирает грань между динамическим и статическим языками. Вы получаете простые объявления типов без переменных с преимуществами безопасности типов … беспроигрышный вариант в моей книге.

Но если я все еще не могу убедить вас попробовать C #, сайты ASP.NET не обязательно должны быть написаны на C # (или даже на VB.NET … но кто захочет это сделать?). Существуют версии PHP, Ruby, Python и PERL с поддержкой .NET, которые можно использовать для написания сайтов ASP.NET, и они так же динамичны, как и обычно, благодаря динамической среде исполнения языка, функции .NET 4. Поэтому, хотя я рекомендую всем, кто пользуется ASP.NET для изучения C #, вам не нужно покидать свою зону комфорта, если вы этого не хотите (но если вы делаете это, преимущества того стоят).


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

Во-первых, компилятор проверяет код и может выдавать вам предупреждения. Предупреждения — это всего лишь предупреждение. Это то, что вы сделали, это может быть ошибкой, но это не остановит компилятор от компиляции вашего кода. Давайте посмотрим на следующий код, который может вызвать предупреждение:

1
2
3
4
5
6
7
string DoSomething()
{
    var foo = «Hello»;
    var bar = «World!»;
 
    return foo;
}

Этот код определяет метод с именем DoSomething() . Его тело создает два строковых объекта, foo и bar , и foo возвращается вызывающей стороне. Переменная bar не используется, поэтому компилятор выдаст предупреждение о том, что bar назначена, но ее значение никогда не используется. Может быть, я создал bar и забыл об этом, или мне это не понадобилось. Но это может быть источником ошибки, если я забыл, что bar уже существует и использовал ее в другом месте метода. Компилятор доводит это до моего сведения, чтобы я мог обратиться к нему и избежать будущих ошибок. Вот скриншот того, что Visual Studio говорит мне:

Хотите еще один пример? Конечно, вы делаете:

1
2
3
4
5
6
7
8
9
void DoSomethingElse()
{
    var foo = true;
 
    if (foo = false)
    {
        // this code will never execute
    }
}

В этом определении метода логическая переменная foo определена как true . Затем он используется в операторе if , где ему присваивается значение false . Это может быть именно то, что я намеревался (хотя я бы сказал, что никогда не должен этого делать), но скорее всего, я имел в виду foo == false (да, логический оператор not ! будет лучше … но он не работает для моего примера). Однако это не ошибка, поэтому компилятор скомпилирует код. Тем не менее, он выдаст предупреждение, спрашивающее, имел ли я в виду == вместо = . Это проблемы, которые я бы нашел в интерпретируемой среде, но мне нужно было бы запустить приложение и проверить его, чтобы найти эти ошибки.

Во-вторых, компилятор проверяет код на наличие ошибок. Естественно, компилятор не может отлавливать логические ошибки, но он может проверять тип и проверять синтаксис кода. Хотя приличная IDE сделает все это за вас без компиляции, как это делает Visual Studio.

Наконец, вы получаете повышение производительности. Скомпилированный код работает быстрее, чем интерпретируется. Следует признать, что .NET не является действительно скомпилированной средой. Наш код компилируется в промежуточный язык (IL), который затем точно компилируется средой выполнения .NET. Однако IL оптимизирован, и среда выполнения .NET выполняет его. Но это все еще очень быстро.

Фактически, чистая производительность ASP.NET выше, чем у PHP .


Microsoft предоставляет бесплатный исходный код для .NET Framework .

Microsoft — компания, которая продает программное обеспечение, и они, естественно, очень защищают исходный код своих продуктов. Таким образом, можно подумать, что ASP.NET (и .NET в целом) является закрытым исходным кодом, но это не так. Microsoft делает исходный код .NET Framework доступным бесплатно, и вы можете войти в код, отлаживая свои собственные приложения. Вы даже можете создать свою собственную версию .NET Framework.

Microsoft также предоставляет вам доступ к исходному коду выпусков ASP.NET, таких как WebForms и MVC, через CodePlex ; предоставляя вам возможность протестировать новые функции и предоставить обратную связь команде ASP.NET. Я призываю каждого разработчика, использующего .NET, загрузить эти бесплатные ресурсы и изучить их. Вы получите лучшее понимание того, как это работает под капотом, и сможете применить эти же знания при написании собственного кода.


Открытость Microsoft в .NET Framework — это то, что помогло создать проект Mono , кросс-платформенную версию .NET Framework. Хотя Mono официально не поддерживается Microsoft, проект был публично признан Microsoft. Моно не уходит; на самом деле, его популярность растет Независимо от того, какая ваша любимая платформа, вы, вероятно, можете использовать .NET Framework и C # для написания приложений для нее (вы даже можете писать приложения для iOS с Mono!).


Наконец, часто утверждается, что ASP.NET не востребован, и это просто не соответствует действительности. Спрос несколько субъективен, потому что разные регионы мира и страны, в которой вы живете, имеют разные рынки труда. За последние десять лет .NET была платформой разработки для сред Microsoft Windows (как для настольных компьютеров, так и для Интернета).

Большая часть программного обеспечения, разработанного для Windows, использует .NET Framework, и поэтому новые разработчики .NET получают огромную возможность найти работу.

Проект Mono также учитывает спрос. Mono огромен, а сообщество только увеличивается. Благодаря широкой поддержке ОС вы можете создавать приложения для любых крупных ОС, включая мобильные устройства. Есть возможность в изобилии, независимо от ОС!


Так, где все это оставляет нас? Что ж, ненавистники и скептики не правы, и ASP.NET — это технология, которую вы должны попробовать и узнать. В конце концов, успешные разработчики — полиглоты, способные писать приложения на разных языках для разных платформ. Так что попробуйте ASP.NET. Что ты говоришь?