четверг, мая 31, 2007

Microsoft Surface

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

Дело тут вовсе не в сложности UI конкретных программ. Компьютер постоянно чего-то требует от человека, задает вопросы, ставит задачи, на которые человек, не до конца понимающий логику работы компьютера или конкретной программы, ответить не в состоянии. Компьютер постоянно пытается выставить человека дураком. Те, кто может победить в этой борьбе, справиться с компьютером, как с диким мустангом, получают от общения с ним истинное наслаждение.  Они становятся гиками (geeks - компьютерщики). Те кто проигрывает, или не желает втягиваться в эту борьбу, стараются  не иметь дела с компьютерами. Представляете сколько потерянных пользователей!

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

P.S. Промо страница  Microsoft Surface сделана просто блестяще. Обязательно посмотрите.

P.P.S Программистам тоже кое-что достанется. Нас ждут новые API и SDK. И совершенно новые приложения ждут пока мы их напишем :)

Интересно, можно будет под Microsoft Surface сделать "кривой UI"? Как вы думаете? :)   

четверг, мая 17, 2007

Знакомтесь - Jasper

В прошлом сообщении я писал о том, как попытка создания внедренного синтаксиса запросов (LINQ) повлияла на язык C#.
И вот заход с другой стороны. На этот раз, со стороны динамических языков. На конференции Mix07 Microsoft анонсировала новую технологию работы с реляционным данными под кодовым названием "Jasper".
Информации пока очень мало:
"Microsoft Codename “Jasper” is a set of components aimed at fulfilling the need for a rapid and iterative development experience for data. With Jasper, you are able to just point at a database and immediately begin coding against its data using intuitive, domain-specific data classes. No configuration and no source code generation are required. Jasper works with existing application frameworks (including ASP.NET, WinForms, and WPF) and existing, real-world databases".

Сами разработчики говорят, что Jasper ориентирован на быструю, итеративную разработку в Agile стиле.
Выглядеть это будет, как надстройка над ADO.NET Entity framework и работать с Jasper можно будет в Visual Basic 9 и Iron Python 1.1.
Работать с данными из БД при помощи Jasper будет очень просто (пример кода на VB):


Dim context = DynamicContext.CreateDynamicContext(connectionString)
For Each customer In context.Customers
Console.WriteLine("Customer " & customer.ContactName & " from " & customer.Region & " has the following orders:")
For Each order In customer.Orders
Console.WriteLine(vbTab & "Order was placed on " & order.OrderDate & "and need to be delivered by " & order.RequiredDate)
Next
Next

Неплохо, особенно "For Each order In customer.Orders". Никаких соединений, никаких команд, и ридеров, никаких ORM и DAL. Указал строку подключения, и сразу можешь работать с сущностями БД в объектных терминах. Запросы. обновления и удаления поддерживаются также. В прочем. маппингом таблиц на классы тоже можно управлять при необходимости. При этом утверждается, что все необходимые классы компилируются на лету в runtime (и тем не менее поддержка Intellisense в студии тоже гарантируется(!)).
Вторая фишка Jasper - это улучшенный UI биндинuнг. Обещают поддержку ASP.NET WinForms и, конечно, WPF.
В общем выглядит Jasper весьма аппетитно.
В презентации разработчиков Jasper Samuel Druker и Shyam Pather на Mix07 (формат Silverlight) есть эффектная демонстрация возможностей Jasper в IronPython shell.
Еще ссылки по теме:
Слайды к презентации Jasper (pdf 5.5M)
CTP release Jasper (уже можно пробовать!)
Блоги разработчиков: Carl Perry, Shyam Pather

среда, мая 16, 2007

Яндекс жжот (или арифметика 2.0).

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

Серый - самый отстойный. Оранжевый - так себе. Зато черный - супер, по всем статьям :)
Честное слово, я эту картинку не в фотошопе сделал :)
Интересно, что же, все таки, эти цифры обозначают?

вторник, мая 15, 2007

LINQ и эволюция C#

В июньском номере MSDN Magazine вышла очередная статья на тему LINQ: "Эволюция LINQ и его влияние на проект C#". Еще один интересный материал на эту тему прочитал в блоге Ivan-а. Даже не один, а целая серия постов:
О бедном LINQ-е замолвите слово...
Слово о бедном LINQ-е 2...
LINQ & C# 3.0 часть третья....
LINQ & C# 3.0 часть четвертая....
К слову, на мой взгляд, материалы в блоге оказались информативнее и интереснее, чем MSDN Magazine. Но я о другом. Оба автора акцентируют внимание на том, что LINQ, это нечто большее, чем просто встроенный в язык механизм запросов. Первоначальная идея облегчить работу с наборами данных и коллекциями привела в движение такие механизмы, которые кардинально изменяют облик языка C#. И эти изменения сами по себе гораздо важнее, чем собственно то, ради чего они создавались.
Инициализаторы объектов и коллекций, неявные типы (type inference), анонимные типы, методы - расширения, ну и наконец, лямбда выражения. И все это ради LINQ? Мне кажется отнюдь нет. C# сегодня бурно эволюционирует в направлении функционального программирования. Новации впечатляющие, и это похоже еще не конец. Пока эволюцию языка сдерживают ограничения платформы CLR (C# 3.0 выходит на CLR версии 2.0) (так, например, применение неявных типов ограничено локальными пременными внутри методов), а что будет дальше?
Чем вызван сегодняшний "эволюционный взрыв" C#? Введение дженериков и анонимных делегатов во второй версии языка казались нам значительными, но это просто цветочки по сравнению с тем, что нас ждет в третьей. Налицо тенденция внедрения элементов функционального программирования в языки общего назначения. Многое из того, что появилось в C# 3.0 можно увидеть и в Java proposed language specifications
Безусловно нововведения усиливают выразительную мощь языка. Но у медали есть обратная строна - язык становится более сложным. C# перестает быть простым языком с необъятной библиотекой и примерами кода в MSDN на все случаи жизни.
Похоже, все только начинается...

понедельник, мая 07, 2007

Имперсонация ASP.NET и SQL Trusted Connection

Возвращаясь к теме Безопасное подключение к SQL серверу. В этой заметке я писал, что одним из препядствий для использоватния SQL Trusted Connection может стать включенный режим ASP.NET имперсонации <identity impersonate=”true”>. Вам пришлось бы открыть доступ к БД для всех пользователей вашего сайта, потому что каждый пользователь будет подключаться к SQL серверу под своей учетной записью. (Если это именно то, что вам надо, можете дальше не читать :).
Оказывается есть способ преодолеть эту проблемму, и обеспечить подключение всех из под учетной записи рабочего процесса ASP.NET. У класса WindowsIdentity есть метод Impersonate(IntPtr), который позволяет проводить имперсонацию в ручную (как его использовать - см. MSDN). Если в этот метод передать IntPtr.Zero, то произойдет имперсонация к исходной учетной записи рабочего процесса ASP.NET. Этим и воспользуемся.


// заметьте, метод возвращает уже открытое соединение
public SqlConnection RevertAndOpenConnection(string connectionString)
{
SqlConnection connection = null;
WindowsImpersonationContext ctx = null;
try
{
// Самый главный трюк. Возвращаемся к identity процесса.
ctx = WindowsIdentity.Impersonate(IntPtr.Zero);
connection = new SqlConnection(connectionString);
// Открываем соединение
connection.Open();
}
finally
{
// Восстанавливаем identity потока
if(ctx != null) ctx.Undo();
}
return connection;
}

// пример использования RevertAndOpenConnection()
public void UsingExample()
{
using(SqlConnection connection = RevertAndOpenConnection("Integrated Security=true;server=."))
{
SqlCommand command = new SqlCommand("select suser_sname()", connection);
// в строке userName будет имя учетной записи рабочего процесса
string userName = command.ExecuteScalar().ToString();
System.Diagnostics.Debug.WriteLine(userName);
}
}

Проверял. Трюк работает на IIS 5.0 и IIS6.0 под Windows XP и под Windows2003.
Эту идею мне подкинул коллега Михаил Ознобкин, за что ему от всех нас большой респект.

воскресенье, мая 06, 2007

Золотой век русского программиста

Кто бы мог подумать, что он наступит так скоро, - золотой век русского программиста. В конце 90-х годов прошлого века любой, кто знал, что такое рекурсия и деструктор, а главное, мог объяснить это по-английски, уже паковал чемоданы и стоял в очереди за визой. То был золотой век американского программиста. Надвигающаяся «проблема 2000 года» и бум доткомов требовали тысяч и тысяч новых программистов. Зарплаты росли как на дрожжах. Программистов не хватало, и их заманивали различными бенефитами. Хорошо помню описание одной вакансии на Dice.com году, этак в 2000. Требовался VB или VBA developer. Большая часть описания вакансии была посвящена «творческой атмосфере», удобному расположению офиса, обширной парковке, кондиционированию воздуха, бесплатным обедам, количеству сортов кофе в автомате, свободному графику, удобной мебели и большим мониторам, медицинским и пенсионным страховкам и т.д. и т.п. Только в конце, несколько строчек о том, какие собственно навыки требуются от кандидата. Читать все это по модемной линии 14 400, на 15’’ мониторе, в полуподвальном помещении отдела АСУП механического завода было мучительно больно. Америка, как гигантский пылесос выкачивала кадры из тощего и недоразвитого российского рынка ИКТ.

Все это кончилось ровно в один день - 11 сентября 2001 года. Въехать в Штаты стало практически не реально, 2000 год прошел, доткомы рухнули. Это была знаменательнейшая дата для российского программиста. 11 сентября – это та пробка, которой заткнули огромную сливную горловину, через которую вымывались мозги (и тушки) русских программистов. С этого дня бассейн под названием «рынок труда в сфере ИКТ» начал постепенно заполняться. Русский программист, как карп, неспешно нагуливал жирок опыта и знаний в стоячей воде этого бассейна.

А рынок тем временем рос. Из десятков факторов и тенденций, обеспечивших рост, я бы выделил два. Первый, это рост внутренней экономики. Компьютер из экзотики начал превращаться в обычный офисный инструмент. ERP внедрения «1С», «Паруса», «Галактики», а затем «Аксапты», SAP, Oracle стали исчисляться тысячами. Сменялись поколения систем. На смену поделкам на базе FoxPro и Clipper-а приходили новые поделки на базе SQL Server, Oracle и Delphi, а кое-где и J2EE.
Второй фактор – это outsource. После краха доткомов, уцелевшим, как панацею предлагали идею о снижении издержек путем передачи всего, что можно на аутсорсинг туда, где подешевле руки и мозги. Первая волна русских программистов, заброшенных на запад, сделала свое дело. Они создали брэнд русского программиста: этакого неразговорчивого типа (потому как язык не очень хорошо знает), который посмотрит на код, написанный в Berkeley, и перепишет его по своему, так что никто не поймет, но работать будет на порядок быстрее. Но это еще не все. Русский программист, которого смыло на запад первой волной, проложил мостки, по которым аутсорсинг пробрался в Россию. Поначалу это был не совсем аутсорсинг. Помню, еще в 2001 году я собеседовался в маленькую Новозеландскую фирму I********th на позицию программиста. В Минске, под прикрытием ЧП или кооператива, они открыли центр разработки, в котором было поначалу 6 человек. Через год, вся разработка их продуктов уже велась в Минске. А начиналось все с одного единственного русского эмигранта программиста, которого они взяли к себе на работу в конце 90-х. Таких примеров тысячи.

К 2005 году, практически всем, даже чиновникам, стало, наконец очевидно, что каким то непонятным образом этот чертов ИКТ растет и процветает как на дрожжах. Люди делают деньги абсолютно непонятным для российского бизнеса способом, не имея доступа ни к «телу», ни к трубе.

Под унылые разговоры о необходимости создания силиконовой долины или на худой конец российского Бангалора, где ни будь в подмосковных или ленинградских болотах, или в сибирской тайге, в Москве, сам по себе, вырос этакий силиконовый муравейник.
Подобно тому, как в конце 90-ых русский программист паковал чемоданы для отлета за океан, в 2005 он снова пакует чемоданы, но в кармане у него билет до Москвы в один конец.
Университеты продолжают обучать русского программиста как разлагать полиномы. А в тысячах больших и маленьких офшоров наконец научили русского программиста делать программы по требованиям, в рамках выделенного бюджета и в срок. И вот маховик закрутился. Вслед за маленькими филиальчиками западных компаний появились настоящие оффшорные «гиганты» типа EPAM и Luxoft. За ними потянулись крупные игроки: Intel, Motorola, Sun, HP начали открывать свои R&D центры в России. Золотой век русского программиста наступил.

Говорить о наступлении золотого века русского программиста позволяет и произошедший сдвиг в общественном создании. Профессия программиста стала престижной, она считается (и не без основания) высокооплачиваемой и перспективной. Дети и подростки мечтают стать программистами, как когда-то предыдущие поколения мечтали стать экономистами - юристами, а еще раньше физиками – космонавтами.
Бурный рост рынка породил жесткий дефицит программистских кадров. Подобно американским компаниям конца 90-ых, московские компании заманивают программистов прелестями своих удобных офисов, гибким графиком и медицинскими страховками. У многих компаний появились специальные релокационные программы. Теперь уже Москва, как гигантский пылесос, начала вытягивать кадры из регионов в свой «силиконовый муравейник».
Сегодня рынок труда в ИКТ это несбалансированный рынок - рынок продавца. Продавец - это программист, он продает свои знания и навыки. Он диктует правила игры. Это дает русскому программисту замечательные возможности. У студента программиста не болит голова о будущем трудоустройстве. Он выбирает из нескольких вариантов, каждому из которых позавидовал бы любой его коллега с другим профилем образования. За последние три года русский программист привык к постоянному повышению зарплаты. Русскому программисту, похоже, удалось в этой области реализовать первый закон Мура - добиться удвоения зарплаты каждые два года. Если его работодатель не способен обеспечить этого, русский программист просто меняет место работы.

Итак, кто же он, типичный русский программист? У него университетский диплом и три года стажа. Он получает около $2000 в месяц и считает, что достоин большего. Он меняет работу каждые 18 месяцев, но он крайне привередлив в выборе работы. Он ориентирован на процесс, а не на результат, и поэтому у него сложные отношения с менеджером проекта или начальником отдела. Он читал Рихтера, Макконела и Фаулера. Он много времени проводит в форумах, где обсуждает способы синхронизации потоков или преимущества новой модели смартфона. У него есть Форд Фокус или Десятка на крайний случай.
Есть, конечно, и другие типажи. Например, программист 1С-ник. Это – низшая каста. Он много работает, но получает обычно меньше других. Он постоянно контачит с пользователями и поэтому знает, что им надо. Он мечтает бросить 1С и начать работать на плюсах или Java, но часто становится менеджером или внедренцем. Есть еще «провинциальный программист». От «типичного» отличается обычно более узкой специализацией, меньшей зарплатой и более скромными амбициями. Есть «эникейщик» - специалист на все руки. Исчезающий вид. Способен делать абсолютно все, но, к сожалению, с весьма посредственным качеством.
Есть студент-программист. Он умеет программировать на нескольких языках, знает алгоритмы сортировки, разлагает полиномы, но абсолютно не знаком с процессом производства ПО и современными архитектурными решениями, что делает его совершенно бесполезным на рабочем месте. Первые пол года зарплату ему платят авансом, в расчете получить от него отдачу в течение второго полугодия, пока он не уйдет искать более денежное место.

Что ждет русского программиста завтра? Долго ли продлится его золотой век? Трудно сказать определенно. Некоторые тенденции видны уже сейчас. Так закон Мура для зарплат, видимо будет сломан уже в ближайшее время. Оффшоры, которые занимают значительную долю рынка, практически уперлись в зарплатный потолок. Зарплаты, конечно, будут расти, но значительно медленнее. С другой стороны увеличится дифференциация в оплате труда. Более сложные проекты требуют более опытных и дорогих специалистов, однако, выйти на этот уровень смогут не многие.
То, что Московский «силиконовый муравейник» становится не самым лучшим местом для производства информационных продуктов и услуг, понимают и работодатели и работники. Русский программист, приехавший в Москву в 2004 году, через год купил в кредит квартиру у МКАД. Сегодня такой номер уже не проходит. А бизнес, тем временем, идет в регионы, что не может не радовать.
Крах доткомов оставил без работы многих программистов, и жестоко «подравнял» зарплаты. Крах «оффшоров» нам пока не грозит. Да и если бы грозил, растущий внутренний рынок легко проглотит высвободившиеся ресурсы.
Есть более серьезные угрозы благополучию российского программиста. Например, глубокие диспропорции в характере создаваемого продукта. Российский программист совершенно не производит системного и платформенного ПО. Операционные системы, базы данных, современные языки и платформы разработки создаются отнюдь не в России. Без этих вещей русский программист со своим прикладным ПО рискует превратиться в обычный персонал, обслуживающий бизнес, такой же, как бухгалтер или юрист. И это будет действительно закат золотого века русского программиста.
Возникнут ли силиконовые оазисы в Питере, Дубне или может в деревне Глазово, где уже ничто не будет сдерживать мощный рост отечественных информационных технологий, и золотой век русского программиста продлится вечно в этих постиндустриальных анклавах компьютерной мысли?
А может развитие отрасли ИКТ пойдет путем потребления и адаптации импортных продуктов и сервисов и это станет концом золотого века?
Время покажет.

среда, мая 02, 2007

Собеседование. Вопросы на засыпку.

Техническое интервью (собеседование) при приеме на работу - эта тема интересная всегда и всем. Мне повезло, я могу рассматривать ее с обеих сторон, и как интервьюируемый (при приеме на последнюю работу меня «интервьючили» четыре раза), и как интервьюер. За последние полтора года - пришлось провести около 40 интервью, в основном на позиции .Net developer различной степени крутости (младший, старший, ведущий). Пришлось даже составить специальный вопросник, ну и само собой накопилась определенная статистика. Сегодня перед вами своеобразный хит-парад элементарных вопросов по .Net, которые вызывают наибольшее затруднение у кандидатов:
10. «Какие типы можно использовать в предложении foreach?» - трудности с ответом на этот вопрос были примерно у 20% кандидатов.
9. «В чем различие между классом и структурой?» - из вариантов ответов на этот вопрос можно было бы составить подборку наподобие «цитаты из сочинений пятиклассников».
8. «Что означает модификатор virtual?». Если после стандартного ответа «член класса, помеченный virtual, будет объявлен виртуальным» попросить более развернутый ответ, это повергает в ступор каждого четвертого.
7. «Чем отличается event от delegate?» - о том, что «delegate – это класс, а event – это член класса с типом delegate» не казал вообще никто. Однако большинство сумели объяснить суть различия, что называется на пальцах.
6. «Может ли класс реализовать два интерфейса, у которых объявлены одинаковые методы? Каким образом?» - простой вопрос на explicit interface implementations вызвал сложности примерно у каждого четвертого.
5. «Что такое GAC?» - особые сложности с этим у ASP.NET-чиков.
4. «В чем разница инкапсуляции и сокрытия?» - вопрос из разряда «теоретических» вызывает сложности почти у всех.
3. «Что такое частные и общие сборки?» - с некоторых пор я боюсь задавать этот вопрос. Правильно ответить на него смогли не более 30% кандидатов.
2. «Что такое .Net Framework?» - это настоящий вопрос на засыпку, кто бы мог подумать? О том, что это CLR + class library сказали единицы.
1. «Чем managed code отличается от unmanaged code?» - ответ на этот вопрос в книжках по .Net занимает целую главу. Это обстоятельство делает вопрос очень интересным для оценки глубины знаний. Около половины кандидатов не смогли припомнить более одного отличия.