Интервью с Дмитрием Робсманом, создателем ASP.NET

Дмитрий РобсманДмитрий Робсман работает в главном офисе Microsoft в Редмонде уже 12 лет. Он был первым разработчиком в команде ASP.NET. Был менеджером в команде динамических языков (DLR, IronPython, IronRuby) и в команде Visual Studio, где работал еще и над C#, VB.NET и F#. Среди его известных личных проектов — веб-сервер Cassini, полностью написанный на управляемом коде, и ASP.NET RSS Toolkit.

На «Платформе» его появление началось долгими аплодисментами. Инженер в джинсах и бейсболке, человек, увлеченный своим делом по-настоящему и понимающий его до мельчайших деталей. Я попросил его ответить на вопросы, которые хотели задать ему вы.

Меня просили передать вам благодарность за вашу работу. Люди говорили, что ASP – одна из сильнейших сторон .NET.

Спасибо! Очень приятно такое слышать :)

Вначале особый вопрос: почему вы работаете в Microsoft?

В Microsoft главное – это люди. Здесь всегда есть у кого поучиться чему-то новому. А в небольших компаниях у личного роста есть свой потолок. К тому же, мне нравится, что моя работа приносит пользу миллионам людей. Здесь я могу делать что-то, что на самом деле изменяет мир.

Планирует ли Microsoft сама портировать ASP.NET на другие платформы?

ASP.NET может хоститься где угодно, хоть и был сначала создан для IIS.

На какие существующие технологии опиралась разработка ASP.NET, помимо предшествующих разработок самой Microsoft? Поскольку прослеживаются прямые и близкие аналогии со стандартами мира Java, вроде JSP и JSF, хотелось бы знать, как эти технологии повлияли на развитие ASP.NET, сравнимы ли они сегодня?

JSP начался, насколько я знаю, уже после Classic ASP. По сути, JSP – это как раз Classic ASP+Java. А конкурент ASP.NET – это, безусловно, PHP.

Сложно сказать на что конкретно мы опирались. Но JSP точно не внес большого вклада. Многие идеи циркулируют в воздухе давно. MVC вот был очень давно. А в работе над ASP.NET мы сначала выучили и усвоили уроки Classic ASP, над которым я сам тоже работал. Мы переписали гору кода, сделали кучу итераций с разными идеями и подходами. В начале, это было 9-10 лет назад, язык базировался на XSLT. Над основой — над pipeline’ом, над кэшированием, масштабированием — мы строим MVC, WebForms и т.д.

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

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

Моя команда работает в основном над ASP.NET. ASP.NET Data Services – это уже другая команда, Azure – другая, Silverlight – тоже. Но есть проекты, которые создаются множеством разных команд. Мы общаемся с ними со всеми и вместе движемся вперед. Кроме того, есть продуктовые группы, с которыми мы тоже много общаемся и обмениваемся идеями. Это Sharepoint, например.

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

Один будет защищать плод своего труда и пытаться пропихнуть его любым способом. А другой будет рад, что выяснил – вот это нам не нужно, значит зайдем с другой стороны. Я принадлежу скорее ко второму типу. И если в процессе работы наша команда приходит к результату, который помогает нам понять, что мы что-то где-то сделали не так, мы этому рады.

Существует ли многолетняя концепция развития C# и платформ, или фичи добавляются по мере обстоятельств, которые складываются вокруг веб-разработки?

Языки в Microsoft развиваются не вслед за приложениями. Есть академическая сторона C# — команда развивает его именно как язык программирования. Да, конечно многолетняя концепция существует, но через год она может отличаться от той, что есть сейчас :)

Почему обновления платформы и языков выходят так часто? Стоит ли ждать версии 4.5 через полгода после 4.0?

Изменения в любой технологии сначала происходят в быстром темпе, а потом он замедляется и становится стабильным. Со временем все важнее, чтобы добавление нового не сломало что-то старое.

И я не думаю, что мы опережаем рынок. Конкуренция движется очень быстро. Сколько версий PHP вышло за последнее время? У нас очень большой продукт, наверное поэтому кажется, что выходит слишком много обновлений. Но вот у LINQ проектная стадия длилась 3 года – не так уж и быстро.

О порядке выхода и нумерации будущих версий Framework’a я пока не знаю, но Service Pack точно долго ждать не придется.

Каким вы видите будущее С#? В какую область MS планирует его продвигать: в веб или в настольные приложения? Планируете ли в следующих версиях ввести практику раздельного выпуска релизов платформы для desktop’ов и для веба, например?

В предыдущих версиях C# и VB LINQ был чем-то новым, чего еще не было в языках программирования. В версии 2010 мы добавим больше динамических фич в C#. Еще дальше в будущем мы сделаем что-то по концепции Compiler as a Service.

Проблемы у настольных и веб-приложений общие. Да, какая-то «вилка» была бы логичной, но на самом деле провести границу между desktop и вебом не так просто. Графика, например, может обрабатываться и на клиенте и на сервере, как и другие данные. И там и там это делается одинаково, поэтому разработчик везде может легко применить свои знания и опыт. Разделить эти области так, чтобы не навредить и не сделать лишнего – это сложно…

А есть ли у «фич» авторы? Например, кто предложил лямбда-выражения, экстеншен методы? Кто ввел LINQ?

LINQ придумал Эндерс Хэйлсберг. Лямбда и экстеншены придумали в его команде, которая работала над LINQ.

Каковы основные причины внедрения динамических конструкций в ASP.NET?

Нам бы просто хотелось, чтобы ASP.NET был ответом на все проблемы пользователей. В последнее время динамические конструкции получили второе дыхание. И для интернета их применение в какой-то степени имеет смысл. Да, у них есть как свои плюсы, так и минусы. Но если люди хотят их использовать, мы хотим, чтобы они делали это с помощью ASP.NET.

Когда выйдут релизы IronRuby и IronPython, будут ли они включены в поставку Visual Studio (2010?) или будут отдельным продуктом?

Границы между поставкой «с Visual Studio» и «отдельно от Visual Studio» стираются. Мы будем, например, включать в поставку VS jQuery. Мы просто концентрируемся на том, что нравится людям. IronPython и IronRuby не войдут в бокс с 2010. Хотя Python опережает Ruby и, наверное, положить его в коробку было бы логично. Его используют даже некоторые продукты Microsoft.

Когда планируется выпустить релиз MVC ASP.NET? Существуют ли реальные примеры APS.NET приложений, в которых используется Entity Framework?

Бета уже вышла, а финальный релиз – это дело считанных месяцев. Я очень удивлюсь, если релиз случится позже первого квартала будущего года. Степень готовности мы определяем по отклику пользователей. А они говорят, что уже довольны. Хотя и есть еще кое-какие доработки у нас в планах.

Ну а Entity Framework появился только в SP1, так что ждать каких-то больших проектов пока рано. Но, например, фреймворк был использован компаниями JM Family для разработки большого приложения по работе с информацией об автомобилях и компанией Sunguard для создания компонентов для корпоративных приложений.

Какое место MVC занимает в стратегии развития платформы в целом (эксперимент, альтернатива или перспективная технология)?

На самом деле, многие не знают, что MVC появился не недавно. Ему уже почти 30 лет! Просто в последнее время этот подход стал популярным. Пакеты для ASP.NET, которые делали MVC, существовали, но не были на слуху. ASP.NET начинался с WebForms, который еще живет. Но есть крепкое меньшинство, которое WebForms не любит  – для них мы и делаем MVC. То есть причина его появления в ASP.NET – просто наличие спроса. И люди довольны.

Конечно это больше, чем эксперимент. Это альтернатива WebForms и перспективная технология. Пока мы планируем, что будет и MVC и WebForms, и поможем любителям и того и другого.

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

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

На сегодняшний день мало информации о языке F#. Некоторые вещи из C# не получается сделать просто потому, что соответствующий синтаксис нигде не описан. Единственный работающий путь — задавать вопросы самому Дону на его сайте. Когда более-менее полная документация начнёт появляться в MSDN?

Это не совсем верно, каналы связи с командой есть и писать лично Дону не обязательно. Да и на MSDN есть раздел по F#. Он будет включен в Visual Studio 2010, поэтому информации достаточно. Но если есть какие-то вопросы, на которые нигде нет ответа, пишите мне — на dmitryr @ microsoft.com.

Вопрос про Silverlight. Очень хочется использовать его вместо Flash, но есть проблемы с переносимостью. Понятно, что есть Mono, но он все еще сырой, и, насколько я понимаю, гарантированно будет работать только под Novell'овским Linux'ом. Есть ли какая-то устремленность в сторону расширения переносимости?

Устремленность есть в сторону мобильных платформ – телефонов и т.д. Mono – да, наверное он еще сырой. Но Мигел (Miguel de Icaza) работает над ним очень активно. Мы безусловно хотим, чтобы Silverlight был на всех платформах. И думаю, Мигел для этого сделает все возможное. Мы, честно говоря, даже не думали о том, чтобы делать чтото сверх того, что делает он :)

Будет ли работать ASP.NET на ОС Server Core? Какие СУБД будут доступны на этой ОС, будет ли специальная версия SQL Server? Или все ограничится Compact SQL-ем?

Да, с Server Core работать будет. Это же платформа для веб-приложений. Я не знаю точно какая версия SQL там будет. Но вот .NET будет точно — мы над этим сейчас работаем.

Как будет выглядеть JavaScript через несколько лет?

В развитии Rich Internet Applications есть две тенденции:
— браузеры делают все;
— часть вещей, которые браузер делать не может, делаются на стороне – как в Silverlight и Flash, например.

Какой подход победит – сложно сказать. Мы поддерживаем и JavaScript и Silverlight, нам это все очень важно. Важно, чтобы при любом подходе все работало быстро и стабильно, и мы в это много вкладываем.

Script#. Появится ли Google Web Toolkit от Microsoft?

Интересный вопрос. Вместе с Silverlight мы делаем IronRuby и IronPython, которые каждый может использовать в свое удовольствие. Точно так же, как и некоторые другие языки – внутри браузера с Silverlight вы можете обрабатывать и их. Но вообще транслированный код очень сложно отлаживать. Поэтому сейчас я не могу сказать, что мы планируем что-то подобное GWT…

Чем порадует Visual Studio 2010 с точки зрения разработки client-side?

Еще раз скажу, что пока слишком рано, чтобы уверенно перечислить конкретные вещи, которые войдут в Visual Studio 2010… Но, например, будет WPF Control Toolkit – много всяких разных Controls для WPF.

Вот такое получилось интервью. Живое общение с такими профессионалами, как Дмитрий – на самом деле настоящее удовольствие. И надеюсь, что подобные встречи нам удастся делать регулярно.
+48
12 декабря 2008, 15:30
12
Tigger 70,1

комментарии (47)

+3
gaidar #
Спасибо, Алексей!
–1
mxc #
Дааа, MVC это очень хорошо!
0
iZENfire #
struts.apache.org?
0
John_Cherep #
весельчак )))
+1
jeje #
Интересно было увидеть, что Робсман видит конкурентом именно Php, а не тот же Ror или Python.
А так, мое уважению автору топика и мудрому Робсману.
–2
iZENfire #
ASP.Net не дотягивает до Apache Struts (открыт в мае 2000 года и выведен в top level Apache project в 2005 году), не говоря уже про JSF 1.2.
–2
jeje #
Вы меня озадачили первый раз слышу о таком. А почему не фигурирует нигде с ним вакансии?
0
iZENfire #
Вакансии: Web-программист на Java, разработчик порталов Java EE.
JSP — это базовая технология, вокруг которой наворачиваются фреймворки типа Struts, Tapetry, JSF.
Какие-то фреймворки получают официальное признание (их принимает индустрия), и они вливаются в систему стандартизации Java Community Process. Приобретают свой «номер» JSR (Java Specification Request). В дальнейшем входят в новую версию Java EE и становятся частью платформы:
jcp.org/en/jsr/all
Спецификации JCP.org имеют силу в конечных реализациях библиотек Java, так как все реализации должны быть совместимы между собой на уровне поведения и интерфейсов.

Вот более подробная статья об эволюции технологий Java:
Технологии Java для разработки веб-приложений. Правда, она написана довольно давно, но суть та же.
0
jeje #
Да и чем аргументируете? Тут нужно существенные доводы, asp.net не хухры-мухры
+1
gaidar #
А можете написать чуть-чуть конкретики, чем именно, на Ваш взгляд, Struts так хорош? Про JSF тоже Ваше мнение интересно.
0
iZENfire #
Работа движка ведётся XML-документами. View может быть оттранслирован в любой формат (html, pdf, text) и отдан клиенту. Model представляет собой POJO (Plain Old Java Object) или объект из JDO, EJB (из базы данных).

JSF стандартизировала цикл обработки запроса (request proccessing lifecycle), где на каждом шаге можно встроить собственный валидатор и преобразователь, и обновление View без перезагрузок страниц.
+1
gaidar #
MVC Framework посмотрите, в проекте MVC Contrib много всего интересного www.codeplex.com/MVCContrib
–1
iZENfire #
О, да! Они переписали IoC-контейнер Spring на .Net. :)
(синдром NIH прогрессирует)
0
shai_xylyd #
Да, что-то тырет Microsoft, а что-то у неё, например, ajax. Если IoC это хорошо, то почему бы не внедрить это в ASP.NET.
0
gaus #
IoC — это хорошо, вот только с учетом движения сишарпа к динамической типизации не очень ясно, как этого ужа с ежом скрeстить, и что в итоге получится.
–1
iZENfire #
«Visual Studio — Code Snippets» — это, очевидно, из Eclipse: wiki.eclipse.org/Category:Snippets
0
iZENfire #
+2
shai_xylyd #
Что такое «Compiler as a Service»? API к компилятору?
+1
YuriKashnikov #
Из выступления Эндерса Хейлсберга (Anders Hejlsberg) на PDC2008, компилятор будет managed, соотвественно можно будет использоваться его во время исполнения. Это даст определенные преимущества в области генерации кода и метапрограммировании. Интересно отметить, что в Mono компилятор C# написан на C# :)

P. S. Рекомендую посмотреть интересное выступление Эндерса Хейлсберга — The Future of C# (на англ. языке).
0
iZENfire #
В Java компилятор кода написан на Java и имеет собственный API (Java Compiler API) для доступа из клиентского кода:
java.sun.com/javase/6/docs/api/javax/tools/package-summary.html
+1
YuriKashnikov #
Вообще говоря, в C# при помощи System.Reflection.Emit можно тоже, насколько я понимаю, Эндерс обещает несколько другое нежели просто компиляция C# кода, вполне возможна будет компиляции DSL, например, ведь весь компилятор будет доступен целиком, со своей объектной моделью, а не как чёрный ящик.

Вообще, именно эта часть, была довольно слабо освещена в ходе рассказа, собственно, как пример Эндерс показал REPL(read-eval-print-loop) консоль.
0
BullDER #
Мда наилюбопытнейше было бы поковыряться в сильверлайте под linux системами
+2
lakb #
Можете попробовать
www.mono-project.com/Moonlight
НЛО прилетело и опубликовало эту надпись здесь
0
Ordos #
Может кто-нибудь в друх словах объяснит, что такое F#, для чего он нужен, какие имеет преимущества и как его использовать? Будьте добры: о)
НЛО прилетело и опубликовало эту надпись здесь
0
YuriKashnikov #
Кстати, на английском языке одним из крупнейших ресурсов является — hubFS.

Если кого-то интересует F# настоятельно рекомендую заглянуть на этот ресурс ;-)
НЛО прилетело и опубликовало эту надпись здесь
0
YuriKashnikov #
Всё-таки он там не один :)

Я всегда думал, что его персональный сайт (блог) — это Don Box's Spoutlet, кстати, тоже рекомендую его почитать ;-)
НЛО прилетело и опубликовало эту надпись здесь
0
chiaroscuro #
Я слышал, что в F# есть кое-какие нововведения в области смешивания чистого функционального кода с нечистым императивным.

Это правда так?
0
shai_xylyd #
Посмотрите nemerle, язык это нечто — сейчас переписываю одну свою прогу с шарпа на него и меня прет:) уже второй день, если думать лень переношу код один в один (синтаксис мало отличается), но когда охота подумать использую алгебраические типы данных, pattern-matching, миксины, локальные функции и хвостовую рекурсию. Его плюс в том, что порог вхождения с шарпа меньше, чем в случае с F#'ом, так как язык гибридный.
0
chiaroscuro #
Не люблю я этот Немерле (и дот-Нет), одно название отпугивает :)

Лучше уж буду дальше колоться Хацкелем. ^_^

Кстати, в Немерле вроде метапрограммирование крутое? Типа Template Haskell?
0
shai_xylyd #
Большинство императивных команд языка, таких как if, while — макросы, то есть написаны с использованием метапрограмминга и не являются частью языка, а являются частью его стандартной библиотеки.
НЛО прилетело и опубликовало эту надпись здесь
0
chiaroscuro #
С OCaml дело не имел, зато пришлось немного попейсать в Standard ML, так там можно писать императивно в доску, никто не запрещает деструктивные присваивания, а еще можно писать statement'ы, которые выполняются последовательно. :)

> Но F#, поскольку входит в .NET, имеет дополнительные средства, чтобы полностью быть совместимым с CLR.

То есть, там можно с комфортом использовать объектно-ориентированные библиотеки? Что-то в голове не укладывается :)
НЛО прилетело и опубликовало эту надпись здесь
0
gaidar #
–10
zmey386 #
Чаке! Ты бог!
–11
dmitry39 #
адин!11адин
0
dmitry_h #
Спасибо, получил ответы на большинство интересовавших меня вопросов.
0
mace #
Спасибо за отличную статью! Узнал много нового и теперь с нетерпением жду новых фич.
0
mordet #
Огромное спасибо, очень интересное итервью. Особенно понравилось описание атмосферы работы команд, от этого на душе теплее становится. Улыбнула следующая версия msvs, т.к. сам сейчас работаю на .NET (2003 года выпуска, кажется)
0
BooBSD #
Правильно ли я понял, что Дмитрий утверждает, что лямда-выражения придумали они?
+1
Tigger #
Лямбда-выражения в LINQ. А лямбда-выражения вообще изобрели еще в 30-х годах, да. Если вы об этом)
+2
shai_xylyd #
Нет, вы не правильно поняли.

В .net'е лямбда-выражения могут иметь две формы: форма анонимной функции (классическая лямбда?) и форма AST. Если метод принимает на вход делегат и ему передать лямбду, то компилятор её передаст в первой форме, но если метод принимает AST, то компилятор передаст лямбду во второй форме. Данный трюк позволяет перевести C# код (лямбду) в SQL код в случае LINQ, иначе пришлось бы выкачивать всю базу и пробегать её делегатом.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.