вторник, ноября 28, 2006

Читают, что ли?

Стоило написать, что Microsoft - бригада толстожопых уродов, как уважаемый человек оттуда позвонил и сказал, что они получили сертификаты ФСТЭК и ФСБ для Windows и Windows теперь - единственный заморский продукт, имеющий все необходимые сертификаты для использования в госсекторе.

понедельник, ноября 27, 2006

"Par avion"

За "принцип общей пользы" некто Дж. Нэш получил Нобелевскую премию в середине 90х. Про эту история был снят "Прекрасный разум". Это все знают. Но вот не все знают, что Нобелевские премии дают за вещи, которые имеют практический смысл. Лазер - расширение полосы пропускания канала передачи, открытие геликобактера - рак желудка, прецизионные инструменты - для соотв. измерений. Бывает, конечно, что смысл от неподготовленного человека ускользает, но если его видно, то видно. Как в случае с Нэшем. Кратко: "если каждый будет стремиться к пользе для себя и других, то выиграют все". Я это вот к чему.

В сентябре-октябре аэропорт Гумрак (Волгоград) начал войну с "Сибирью". Якобы та занимается демпингом и выживает базовую а/к "Волгаавиаэкспресс". Ну и волгоградские начали гадить: рейсы не выпускать, не принимать, отказываться заправлять и т.п. мелкую подлость. "Сибирь" всё с негодованием отмела и, как несравненно более тяжёлый сумоист, начала разбираться по-крупному. Итог: у аэропорта отняли лицензию на спец. свет. оборудование (самолёты можно принимать/выпускать только в светлое время суток), самолёты "Волгаавиаэкспресс" вообще не летают. Цены на билеты в Москву выросли с минимальных 2900 у Сибири до 3812 у Аэрофлота (туда-обратно). Вот что бывает, когда люди думают, что современная наука сама по себе, а человеки - сами по себе. Не-е-е-е-т!

Ну что, руководству Гумрака было трудно посмотреть "Игры разума" в русском переводе? Фильму, славтехосподи, 5 лет. Можно было бы уже приобщиться. Глядишь, и косяка такого не упороли бы. Да и летать было бы на 25% подешевле.

воскресенье, ноября 26, 2006

Умрёт ли Microsoft?

OS/2 сожрана при помощи Windows'95 и NT 4.0. IBM рассталась с грандиозными планами иметь собственную ОС и устанавливать правила. Это пошло ей на пользу.

Теперь - очередь Microsoft. Вне зависимости от того, сколько умных людей работают внутри этой организации и сколько прекрасных идей воплощаются вот в этот самый момент - этому монстру в том виде, в котором мы его знаем, приходит конец. Это будут безусловно мучительные и длительные судороги. Думаю, они ещё выпустят парочку версий Windows, не считая Vista, но это и всё. Почему? А вот примеры.

Звонят мне: вы хотите заняться распространением (distribution) нашего ПО?
- Да *а у нас в одной из коробок есть большой кусок, использующий Visio 2007*
- О! А вы уже обращались к нам?
- Да
- Каков результат?
- Ваши люди отправили нас в обычные каналы продаж.
- Хм... Я разберусь с этим вопросом и перезвоню
- *лениво* Буду ждать

Перезванивает уже месяц. Заснула, наверное. На такой напряжённой работе.

Ещё одни. Мы "совещались" (просто просиживали штаны и мычали ни о чём - они там не могли врубиться, чего нам надо) раза 3 или 4. Последний раз в середине июня. Скоро полгода, как ждём решения. Если бы я с такой скорость принимал решения, меня бы лишили всех гражданских прав, как полностью недееспособного. А тут - уважаемая, динамичная (хехехе) компания. От слова "динамить", наверное.

четверг, ноября 23, 2006

Открытия чудныя

Сегодня услышал прекрасное. "Если определить view так:

CREATE VIEW v_Abc
AS
SELECT Id, Data FROM Abc

то при вызове типа

SELECT * FROM v_Abc WHERE Id = XXX

не будет выполняться полное сканирование таблицы, а планировщик сам поймёт(!!!), что надо выполнить команду SELECT Id, Data FROM Abc WHERE Id = XXX
"

Вот, думаю, куда пойти. В монастырь или за патронами.

* Abc не имеет никаких индексов

вторник, ноября 21, 2006

Не умею отдыхать

На неделю ездил в город-герой Волгоград. Там пытался наладить процесс отдыха: рестораны, стенд, прогулки. Ничего не получилось. До среды удалённо дирижировал и так же удалённо завывал на тему выпуска пилота одного из проектов. В субботу прилетел обратно, проспал сутки и вот - первый день сразу 14 часов.

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

четверг, ноября 09, 2006

Про "гуру"

В одном из комментариев товарищ пейсатель меня подколол (как он думает), что, мол, если уж гуру-Fawler не рассматривает случай cо смертельными блокировками в транзакции, то куда уж практикующим программистам (что, очевидно, надо читать, как "ханурикам"). Меня всегда удивляла страсть людей найти себе идола и ходить за ним, ловя каждое слово. Когда-то я тоже был таким. Купил в 92м году чёрную книжку Буча, изданную в отвратительном переплёте, со странным переводом и отчаянно пытался понять, о чём базар. А летом 93го потратил полтора месяца на то, чтобы разобраться с борландовским Turbo Vision и это рассказало мне об объектном программировании много больше, чем все книжки всех бучей в мире, вместе взятые. Тогда мне показалось, что это случайность, но спустя несколько лет (может, 5, может, 7, я не помню) случилось разбираться с ПО компании Rational. Если вы читаете это, то не можете не знать, что это такое, как выглядит и как работает. А между тем, один из ведущих, если не главный у них был тогда Буч. Первая икона порублена. Дальше. В 93м же, Макконнелл издал свой дидактический труд Code Complete. Это хорошая книжка. Я читал оригинал, я читал перевод, могу сказать, что перевод ничего не потерял. А всякий, кто имеет глаза, может подтвердить, что CC2 (то, что вышло в прошлом году после моего ему письма, между прочим) - это полное собрание компьютерных банальностей. Просто их много и количество переросло в качество. Вот прямо сейчас открываю на произвольной странице этот кирпич, читаю (стр. 397):

чтобы переписать пример, используя подход с try-finally,
поместите код, который должен проверять возможные ошибки, в блок try,а код
очистки - в блок finally.
Гениально и непостижимо! Кто бы мог подумать, что finally именно для этого. Закрываю и открываю снова. Стр. 700
Управление версиями. Справиться с быстро растущим количеством версий ПО
позволяют инструменты управления версиями...
Ниже там же.

Компиляторы преобразуют исходный код в исполняемый

Всякий может это проверить, а кроме того (мне уже лень) - найти нечто подобное, открыв Макконнелловский опус на любой любимой странице. Тем более, что это так нетрудно. Как человек, изрекаюший такие банальности на протяжении 13 лет может считаться гуру? По-моему, никак. Хороший дидактический труд, для студентов, не серьёзней. Там нет ничего такого, до чего любой "практикующий программист" (с которого взять нечего, как мы все уже знаем) не дошёл бы сам через пару лет нормальной работы.

Дальше. Икона архитектурных астронавтов - Фоулер. Не поленюсь, открою и его. Увы, не открою. Книжка ушла в макулатуру. Ну, попробую по памяти. Раздел "корпоративные приложения":
вы можете реализовывать шаблоны так и эдак, но вам всё равно придётся их
реализовывать.
А кто в этом сомневался? Когда люди придумывают шаблоны ради того, чтобы попасть в неизвестную мне книгу рекордов, это вызывает смех и раздражение, если некий поклонник хочет научить кого-то. Доведение обычного вызова метода до метафоры некой абстрактной команды - это очень круто, но для меня - совершенно бесполезно. В точности так, как расписывать девиации в реализации фабрики классов. Я ваще-т не первый год в шоу-бизнесе, мне не надо втирать о модных подходах к инстанцированию (почему-то почти все доморощенные переводчики очень любят использовать этот "глагол"). Лучше покажите, что вы написали, где оно работает и насколько им довольны клиенты. Это единственный критерий. И другого нет. А все эти "Банды Четырёх" (из четырёх пузато-близоруких гангстеров) ---.

"Гуру" важны и полезны (если они и в самом деле гуру но выше показано, что по крайней мере - не все), но до тех пор, пока они не лезут в производственный процесс. Как какой-нибудь доктор наук и академик академии цветных металлов. Дедушка полезен, как резервный источник повышения эффективности производства, но повышать эту эффективность путём прихода на завод и вещанием на корпус со среднего пролёта я бы на его месте не стал. На смех подымут в любом случае, и уж точно слушать не станут. А может быть - и зашибут (что не находится в противоречии с тем, что дедушка -- голова и вообще). Там где старичок мыслит понятиями ионообменного процесса, мастер цеха оперирует вольтами и градусами, а работяга - количеством лопат и реек, подброшенных для тушения вспышки на аноде. Я уж не говорю, что дедушка может думать, что он знает, не зная на самом деле.

Люди, которые могут претендовать на техническое превосходство, глубоко законспирированы и чужды публичности. Как правило. Много ли вы слышали про Дэвида Катлера? А в его ОС вы сейчас читаете этот текст. Знакомы ли с мировоззрением и предпочтениями в шаблонах проектирования Алана Купера? Сомневаюсь. А этот человек сделал Visual Basic и всё, что это повлекло за собой. Вот это -люди. Но я что-то сомневаюсь в том, что у них есть какие-то поползновения на "поучить практикующих программистов". Потому что они сами программисты. В отличие от.

Дыбр

Битвы на стенде продолжаются.

Есть таблица A(Id bigint not null identity, Data varchar(max))

Есть процедура sp_Abyrvalg, содержащая строки:
INSERT INTO A(Data) VALUES('Some data')
DECLARE @x bigint
SET @x = SCOPE_IDENTITY()

Вдобавок к этому есть многопроцессорный сервер, на котором процедура sp_Abyrvalg выполняется одновременно сразу на двух процессорах.

Внимание, вопрос.
Если последнее значеие Id в A было X, то чему будут равны значения @x после выполнения вставки на первом и втором процессоре соответственно?

вторник, ноября 07, 2006

Как читать требования

Заказчик на объекте принимает работу у подрядчика. Тот подводит его к выкопанной шахте диаметром 3 метра и глубиной 50 метров, заглядывают туда, на дне горит прожектор.
Заказчик - что за херня???
Подрядчик - вот же чертеж!! по нему и сделали.
Заказчик -



(переворачивая чертеж на 180 градусов) - это маяк!!!

Что ни говори, а требования надо уметь читать.
"Обеспечить формирование произвольных отчётов" - это что значит? Произвольных из списка? Или надо дать возможность конструировать отчёты самостоятельно?
"Работать под управлением любых современных операционных систем". Включая QNX, MorphOS и AmigaOS?
"Не содержать интерпретируемого кода". Компиляция из MSIL в native код во время выполнения считается в вашем клубе за интерпретацию или только reflection? А если я внутри кода сам компилирую вызовы getters и setters, чтобы не связываться с reflection - это тоже интрепретация? Как нет? Я же получаю имена с помощью

GetType().GetProperties()[0].PropertyType
И таких нюансов каждый может придумать с десяток за минуту. Как же быть, чтобы не построить маяк?

Мы перепробовали много методик. В том числе и заказчик on-site, как это практикуется в XP. Трудно сказать, каков должен быть идеальный путь выяснения настоящего смысла требований, но я могу рассказать про тот, который работает у нас.

  1. Как это ни смешно, но требования надо получить в письменном виде с расстановкой приоритетов.
  2. Взять таймаут на составление вопросов по требованиям. В зависимости от проекта это может занять как 1, так и 14 дней (говорю о типичных величинах для обычных проектов; если вам заказали написание сервера баз данных или компилятор для операционки новейшего автономного пылесоса с функцией барокамерного холодильника - я пас). Все вопросы, от серьёзных (полное непонимание), до ерундовых (почти всё понятно - и это самое опасное) тщательно запротоколировать.
  3. С блокнотом вопросов, диктофоном, ангельским терпением и колодой визиток выдвинуться в расположение заказчика, заранее предупредив его о том, что есть вопросы. В наши цели не входит беседовать с парнем, который только второй день работает или которого пригнали отдуваться из-за того что он не успел спрятаться.
  4. Объясните, чего вы хотите и непременно убедитесь, что сидящий напротив понимает, о чём идёт речь. А то будет как с полотёром Басова в "Шагаю по Москве". Это сильно портит настроение и плюс к тому это зря потраченное время: придётся то же самое спрашивать повторно.
  5. Делайте, что хотите, но обязательно расположите к себе собеседника. Учтите, что в то время, пока вы выполняете одну работу, интервьюируете, он - две. Отвечает вам и по-прежнему обязан делать то, за что ему платят в организации деньги: заниматься основными средствам, ругаться по поводу капитального ремонта труб или обеспечивать выборы своего директора в местную думу. Нам везло и особых сложностей не возникало - достаточно было за сутки узнать номер телефона выделенного человека, чтобы фазу знакомства сделать менее жёсткой.
  6. Задайте кумулятивный вопрос ("для чего вам нужна эта программа?")и слушайте, включив диктофон. Не перебивайте. Некоторые люди обладают настоящим даром - объяснить сложнейший процесс, такой, как остановка и запуск котельной, своими словами так, что всё поймёт и ребёнок.
  7. Уйдите на перерыв.
  8. Вцепитесь в человека, обрушив на него все вопросы, которые только у вас есть.
  9. Повторяйте пункт 8, пока вопросов больше не останется. Если это длится больше пары дней - дело нечисто. Или требования не соответствуют тому, что нужно сделать, или вы не в состоянии понять, чего от вас хотят. Первое - очень плохо. Второе - ужасно. Попросите в таком случае себя заменить.
  10. Ответы у вас есть, можно согласовывать план реализации требований

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

И ради бога, помните про маяк!

Расползание классов

Однажды на протяжении почти двух лет я участвовал в превращении симпатичного и аккуратного кода в бесформенный ужас. Происходило это медленно и потому незаметно. Только когда код готовился к передаче заказчику (женщина по имени Amber не захотела поднимать ставку), я осознал. COM-компонент с функциональностью однопроходного разбора PST-файла. Несколько потоков для обеспечения асинхронной работы подсистемы уведомлений, элегантные вызовы функций чтения данных из PST (100% reverse engineering, выполненный одним насколько умным, настолько же и странным парнем из Волжского, Волг. обл). При передаче я обнаружил, что этот же самый класс с некогда весьма высокоуровневой функциональностью содержал:

  1. Методы работы со строками
  2. Методы выбора временного имени
  3. Постоянно расширяемый if, в котором определялись имена папок-исключений
  4. Методы формирования сообщений в формате eml

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

Сейчас я больше всего боюсь именно этого эффекта в коде. Если класс начинает расширяться не свойственной ему функциональностью, я начинаю заметно нервничать. Вот только что закончил ревизию пары классов базовой библиотеки, которые ни с того, ни с сего обогатились новыми свойствами и специальной обработкой в методе set свойства, которые используются в одном единственном месте в другом (!!) проекте. Бывает, что устаёшь, пишешь абы как, расставляя комментарии и предупреждения для исправления безобразия завтра же. Я считаю, что это нормально: концепция подтверждена, можно подчистить. Но когда явно временная затычка, появившаяся в результате лени, начинает жить - код начинает умирать.

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

понедельник, ноября 06, 2006

Какие программисты нам нужны

С годами я заметил, как стал менее нетерпимым к компьютерным болванам. То есть, я по-прежнему отмечают их наличие, но сейчас я склонен их жалеть, а не издеваться. Ну, не дано человеку, тут ничего не поделаешь. Я даже благодарен им за то, что они чётко осознают, что им это не дано и не лезут занимать чужие места (одно время это было очень популярно - я помню "ускоренные курсы подготовки программистов на C++"). Мне пришлось поработать в коллективе, состоящем из практикующего буддиста-битломана, паренька, который любой работе предпочитал разговор о своих галстуках (он был любитель джаза и коллекционировал галстуки диких расцветок) и пары приходящих энтузиастов, которые любили играть в Wolfenstein и не очень любили работать (это было очень давно в одном институте, где я только набирался ума). С тех пор я всегда старался осмотреться перед тем, как сунуть голову в петлю. Сейчас у меня есть возможность самому принимать людей. Я не в восторге от этой обязанности. Во-первых, потому, что это отнимает много времени. Оказывается, очень трудно найти даже час на то, чтобы поговорить с человеком по телефону. Во-вторых, потому что очень трудно выслушивать одни и те же глупости и не подать виду, как это раздражает; некоторые просто не понимают, когда им говоришь, что собеседование окончено - продолжают угадывать, что же я могу захотеть услышать?... В-третьих, начав собеседовать, я внезапно увидел, как мало людей подходят. Я знал, что трудно найти нужного человека, но что настолько! Про указатели я говорил уже как-то... Ощущение, что разговариваешь со стеной. Ну и в-четвёртых, - у ряда товарищей получается, как в фильме "Высота": "Потребности у тебя большие, а способностей совсем нет". Когда человек начинает разговор с денег - это не наш человек, потому что они или ничего не умеет, или очень мало, или точно не то.

Отталкиваясь от того, кто нам не нужен, я могу сказать, кто нам нужен. Пол и возраст значения не имеют.

  1. Человек должен что-то знать достаточно глубоко для того, чтобы во время интервью у меня закончились вопросы по этой теме раньше, чем у него закончатся ответы
  2. Он должен уметь программировать на С.
  3. Он должен уметь объяснить, как работает процессор в деталях, которые я захочу услышать
  4. Этот человек в своей жизни должен написать хотя бы один многопоточный компонент COM
  5. У него должен быть ответ на вопрос, почему, несмотря на компиляцию во время выполнения, Java и C# постоянно увеличивают свою долю рынка.

Вот если всё это будет продемонстрировано, то можно будет побеседовать и по существу вопроса, то есть, о работе.

пятница, ноября 03, 2006

Пара слов об экономике

Первый раз я создал организацию без малого 10 лет назад. Мы успели проработать около двух лет, правда бурно и с успехом: о нас писал и тогдашний PC Week, и отраслевая пресса. Но если занимаешься чем-то одним и не занимаешься другим - накрывается сразу всё. "Главный по тарелочкам" ушёл в структуры Газпрома, а мне одному было не вытянуть и новый web-проект (96й год, напоминаю!) и presale. В итоге, ввиду отсутствия наличия пришлось демонтировать вывеску. Сейчас, кажется, я могу поставить точный диагноз. А поскольку таких, как я - сотни и тысячи, и кто-то, возможно, прямо сейчас марширует под откос, то считаю своим долгом изложить.

Все организации умирают от одного и того же: недостаток средств. Можно писать фантастически эффективный код для задач управления производством и не получать от этого дополнительного притока денег. Можно писать кривой по меркам индустрии код для консалтинговых проектов и сносно при этом существовать. Проблема заключается в том, что редко кто правильно с самого начала выбирает уровень качества. Качество - это другое название для того, что называется трудозатратами. В 97м году мы написали ПО для создания виртуальных институтов. Использовали для этого VC++ 97 (ActiveX для страниц), VB5 (управление) и ASP. Сделано было хорошо. Всё заработало через 4 месяца после начала работы и заработало неплохо. Мы знали, что то, что делается - будет востребовано. Должно быть востребовано. Но - нет. Было сделано всего лишь несколько продаж. В академию СБ РФ, в пару институтов. Эти деньги не покрыли ничего. Мы, кажется, отпразновали первую продажу пиццей с пивом и это всё, ради чего 4 месяца работали, как проклятые. Наша беда тогда была в том, что, понадеявшись на глупую теорию "хороший товар продаёт себя сам", мы вообще не уделяли никакого внимания предпродажной работе. В самом деле. Если мы пишем отличный продукт, который мало кто может сделать - зачем нам все эти глупости толстожопых монстров: реклама там какая-то, переговоры. Да как только они услышат - нас завалят заказами! Но как они услышат?! Мы, кучка полусумасшедших молодых ребят, верили, что технология и качество решают все проблемы. Прошло 10 лет и я понимаю, что это не так.

Как-то сам не заметил, что увлёкся стендовой стрельбой. Пока что полное отсутствие времени мешает заняться этим серьёзно, но когда-нибудь... В начале мая, когда я пошёл на стенд первый раз, у меня случился запоминающийся разговор с инструктором.
- Саша, скажи, а вот прямо сразу надо покупать спортивное ружьё, экипировку?..
- Да ну, ты чё.
- Я просто смотрю - тут люди со специализированными вёслами ходят.
- Вот смотри. У тебя нормальный аппарат. На охоте - самое оно. И тут, чтобы понять смысл этих мероприятий - тоже вполне ничего. С ним ты сможешь стать КМС. А вот когда ты им станешь и твоими соперниками на соревнованиях будут одни и те же 10 человек, я имею в виду - на всех соревнованиях приличного уровня, вот тут тебе потребуется уже скачок в качестве инструмента. Он много не даст. 1-2 дополнительных попадания в серии. Но это та разница, которая отделяет 4е место от 1го. Понял?
- Вполне

Качество того уровня, которое Спольский называет "мастерством", нужно пускать в ход, когда вы уже закрепились в группе: в пятёрке, в десятке, в сотне. Это надо для продвижения наверх. Но чтобы попасть в группу - надо хотя бы дожить до момента перехода из дворовой команды во вторую лигу. Это вопрос денег. Вы будете работать месяцами, ничего не зарабатывая. Если все эти месяцы вы тратите на вылизывание первой версии, вы крайне неэффективно тратите свои средства. Первая версия демонстрирует публике концепцию. А кроме того, со всем уважением, но новый продукт, если он не изобретение, а улучшение существующего - это всегда клон. А у клона всегда есть оригинал. И он работает. Система с номером 1.0 должна быть работоспособна, делать то, что должна, но не больше. Если это программа для низа пирамиды и если повезло угадать, то она даже принесёт какие-то деньги. Но это всегда куда как меньше, чем ожидалось. Первые по-настоящему приличные деньги может принести версия 2.0 А чтобы до неё дожить, нужно иметь одно из двух:

  1. Богатых учредителей, которые могут подождать до оттачивания концепции по результатам продаж первой версии
  2. Понимание необходимости экономии на лишнем качестве.

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

Бета

Похоже, что в течение недели выйдет бета и я со спокойной совестью скатнусь на недельку в отпуск. Осталось:
2 инцидента 2го приоритета
3 - третьего
7 - четвёртого
3 - пятого

Общим временем исправления 33.5 часов