Журнал «Компьютерра» № 29 от 15 августа 2006 года - Компьютерра. Страница 29

Наиболее радикально новые, «потенциально революционные» исследования связаны с попытками повысить эффективность процесса мышления как такового: представить информацию в таком виде, который «натолкнет» на правильную идею или позволит обнаружить неизвестные взаимосвязи. Заметим, что история такого рода исследований почти так же длинна, как история компьютеров вообще (классическая «декларация намерений» за авторством изобретателя мыши Дугласа Энгельбарта, под названием «Augmenting Human Intellect», вышла в 1968 году и была во многом связана с еще более классической статьей Ваневара Буша «As We May Think», 1945), и сегодняшний их вектор направлен в сторону не улучшения жизни единичного пользователя, а роста эффективности работы группы людей (когда группа становится «умнее» суммы ее членов). По сути, именно этому вектору мы обязаны и появлением Web, и Википедией, и многими другими достижениями сегодняшнего computer science [И тот же пресловутый Web2.0 декларирует как одну из своих ценностей «накопление информации через взаимодействие пользователей»] .

Изобретателями технологий, существенно повышающих эффективность работы, чаще всего являются этих технологий основные потребители — талантливые одиночки/небольшие группы, работающие в условиях «куча гениальных идей, побыстрее бы все реализовать!» [Отсюда — довольно распространенное мнение, что в IT все сколько-нибудь стоящее изобретается талантливыми и малоизвестными одиночками; см., например, недавнюю статью Пола Грэма «Сила маргиналов» (Paul Graham, «The Power of the Marginal»; www.paulgraham.com/marginal.html)]: поисковик Google; языки программирования Python, Ruby и менее известный, но подающий большие надежды Nemerle; да и сам Web — дело рук и мозгов отнюдь не транснациональных корпораций. Понятное дело, что судьба технологии, за которой не стоит отдел маркетинга из тысячи отборных специалистов, — зачастую дело случая; принято считать, что «достойное само найдет себе дорогу», к сожалению, это далеко не всегда так. То есть прогресс в этой области характеризуется большой степенью случайности, и какова окажется «next big thing» [Устойчивая идиома, обозначающая грядущую технологию, о которой заговорят буквально все] — предвидеть почти невозможно.

В надежде на надежность

В условиях, когда словом «фирма» называют не трех гениев, меняющих мир из гаража, а тридцать тысяч работников умственного труда, образующих сложновыверенный офисный конвейер, объединенный искусственно (искусно?) созданным духом «Мы — одна команда» (а иначе не «сработают» филигранные распасовки, сорвутся поставки, заверещат недовольно клиенты) — так вот, в таких условиях, приближенных к боевым, самым ненадежным и сомнительным винтиком идеальной машины становится человек.

Повышать надежность этой «детали» (читай: гарантировать достижение результата) можно, вообще говоря, разными способами. Но все они сводятся к двум главным принципам: контролировать, что делает отдельный работник; иметь возможность заменить его другим работником. Причем «контролировать» здесь — вовсе не мрачная квазиметафора Большого Брата: «видеокамеры на каждом углу, отчет о каждой минуте, проведенной в офисе, штрафы за пятиминутное опоздание» (хотя и не без этого, да). У таких методов тоже есть область применения, но она, в общем, довольно узка; намного правильнее — просто дать сотрудникам инструменты с ограниченной степенью свободы, такой себе «ограниченный креатив», «акт творения в заданных рамках».

Хороший инструмент должен гарантировать и среднюю производительность сотрудника, и среднее количество ошибок, и даже «средний» способ реализации идей.

Для того чтобы обеспечить взаимозаменяемость сотрудников, надо выдать всем одни и те же, или хотя бы родственные, инструменты — и тогда, коль скоро инструмент контролирует общность стиля, одна «офисная крыса» легко продолжит работу с того места, где другая сошла с дистанции.

Нарисованная картинка может показаться слишком циничной; тем не менее никакая крупная корпорация просто не сможет выжить, не обеспечив маломальскую заменяемость (а значит — стандартизацию) своих работников. Да, ограничение средств выражения мыслей несколько снижает эффективность процесса — зато повышает его предсказуемость. Крупная корпорация не может полагаться на внезапные озарения, ее плоть — каждодневный, часто рутинный, труд. (Это всё банальности, но необходимые.)

Идеальное (по крайней мере, с точки зрения Корпорации) решение задачи «однообразных работников» зовется Платформа. Платформа — набор решений, охватывающих все области деятельности Корпорации; Платформа — контролируемый набор взаимоинтегрируемых инструментов; Платформа — Единый Набор Кнопок с Самого Верха до Самого Низа.

Будь то Платформа Java, Платформа .Net, Платформа 1С, Axapta, Oracle — цель и смысл один.

Технологии такого уровня создаются и развиваются, естественно, крупными-серьезными корпорациями (никому меньшему задачу такого уровня, растянутую на несколько лет, просто не осилить — как и не выдержать последствий возможного провала). И в отличие от технологий эффективной работы, рассмотренных ранее, прогресс в области технологий-платформ течет не то чтобы совсем стабильно и предсказуемо, но, скажем так, с постоянной скоростью — подпитываемый армией маркетологов, заранее окруженный уже-лояльными-клиентами, «носорог плохо видит — но при его весе это не его проблема».

Другое дело, что «прогресс» такого рода многие и за прогресс-то не считают. Достаточно вспомнить последнюю (в смысле — самую свежую) крупную и громкую платформу, сделанную с нуля, — Microsoft .Net, которую задолго до, во время и еще долго после выхода в свет (да и до сих пор) окружали недоуменные статьи на тему «что-же-здесь-нового-и-зачем-об-этом-так-кричать» [Одну из наиболее характерных статей такого рода, к тому же неплохо написанную и сносно переведенную на русский, можно найти у Джоэля Спольски: russian.joelonsoftware.com/articles/MicrosoftGoesBonkers.html]. Действительно, ни один из компонентов .Net, будучи рассмотрен сам по себе, не был чем-то «новым и особенным»; инновацией была целеустремленность и последовательность, с которой Microsoft охватил весь процесс разработки ПО — для любых условий, на любом языке, с интеграцией (и дифференциацией) всего и вся. Набор не самых передовых технологий, объединенных не самым изящным образом, за несколько прошедших лет изменил индустрию весьма существенно — и кто скажет, что это не прогресс, тот прогресса не видел.

Что это мы такое накреативили?

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

Пользователю (заказчику, потребителю результата) по-прежнему предлагается либо довериться репутации производителя («фирма веников не вяжет уже сорок лет»), либо опробовать его перед покупкой/оплатой — и при «опробовании» приходится ориентироваться в основном на собственный опыт, интуицию, вкус и тому подобные неформализуемые способности. В любом случае, предполагается, что корректность произведенного уже обеспечена производителем (внутри его головы или его фирмы) и является полностью его болью и заботой.

У самого производителя сегодня не намного больше средств обеспечения этой корректности, чем 10-20-30 лет назад, — автоматически проверить что можно (например, орфографию), тестировать автоматически или вручную [Разницу между проверкой и тестированием можно сформулировать так: проверка напрямую сверяет результат с «правильным» (что возможно далеко не всегда), а тестирование рассматривает его как «черный ящик»: на вход подали А — на выходе должно получиться Б] и опять же — полагаться на свой опыт-вкус-интуицию. Прогресс в стане производителей идет в основном не технологический, а методологический: скажем, все в той же разработке ПО — от когдатошнего максимально-формального процесса (определяем требования до начала работы, пишем кучу документации до начала кодирования, ни на йоту не отклоняемся от плана) — к сегодняшним гибким (agile) методологиям (требования могут меняться в процессе разработки, вся функциональность охвачена тестами, код, спецификации, требования непрерывно перерабатываются).