Свежий номер №39 (416) / Процесс программного обеспечения Дата публикации: 15.10.2001 Максим Отставнов, maksim@otstavnov.com Выражение «программное обеспечение» сегодня чаще всего используется как перевод слова software и подразумевает программу или совокупность программ. Однако сама грамматическая форма показывает, что мы имеем дело с превращенной формой понятия, и первоначально «обеспечение» явно указывало на процесс. Программное обеспечение как процесс Рассматривая элементарный акт компьютеризации, мы с неизбежностью находим 1) некоторую деятельность, 2) представление (верное или ошибочное) о том, что ее можно осуществлять с помощью компьютера более эффективно (или, например, приятно), и, как следствие, 3) более или менее оформленную и артикулированную потребность в программе 1, позволяющей реализовать 4) соответствующее приложение (рис. 1). Самый простой пример - это «разовое приложение», когда программно обеспечить нужно один, разовый акт деятельности. Так, значительная часть кода пишется с целью преобразовать определенную совокупность данных в определенный формат, для чего пользователю нужно найти, написать или заказать соответствующую программу. Более сложный случай: регулярное приложение. Например, машинистка в один прекрасный (или несчастный) момент решает, что ей выгоднее или приятнее набирать текст не на пишущей машинке, а на компьютере. Как следствие, у нее возникает потребность в программе - текстовом или словарном редакторе - для постоянного осуществления приложения. Компания хочет компьютеризировать складской учет или бухгалтерию, для чего ищется, разрабатывается или заказывается программная система. Примеров масса. Кооперативная модель и реалии профессии Видимо, из таких примеров и выросла традиция рассматривать сферу программирования в кооперативной парадигме. Кооперация - это индустриальный способ разделения труда, при котором усложнившаяся деятельность разделяется на две, связанные по преимуществу отношением передачи «продукта», каждая из которых, отправляясь в массовом порядке, институционализируется каким-либо способом, например, образуя отрасль. Следуя этой логике, программное обеспечение должны рано или поздно начать осуществлять «софтверные фирмы», «производящие» «программные продукты», должен образоваться «рынок программных продуктов», и сама вычлененность и отчетливость такой (товарно-рыночной, индустриально-отраслевой и корпоративной) организации - и есть мера зрелости профессии. И несомненно, что программирование оказалось частично захвачено этой моделью (рис. 2), и все перечисленные явления имеют место быть. Однако если мы посмотрим на массовые приложения компьютеров и зададимся вопросом: а кто их реально программирует? - мы увидим, что:
Самое интересное, что это отношение не меняется в течение десятилетий. Видимо, программирование упорно не хочет становиться «производством», и любая теория, построенная на таких предположениях, будет ущербной, а основанная на ней практика (и независимая аналитика, и принятие бизнес-решений, и корпоративная, и ведомственная или государственная политика) - порочной. Специфика сферы услуг и коммуникативная модель Сам по себе этот факт совсем не уникален. «Сопротивление» индустриализации оказывают все сервисные по своей сути профессии и сферы деятельности. Профессия, которую приятно сопоставить с программированием, - парикмахерское дело. Мы не наблюдаем превращения парикмахерских в «фабрики причесок», а если бы что-то подобное и происходило, вряд ли бы это вызвало особый энтузиазм. Более того, есть сферы, в крайне высокой степени подвергшиеся индустриализации и переживающие сейчас возрождение сервисной модели (например, стоимость рабочей силы, занятой в швейном производстве, падает - за счет его автоматизации и переноса в страны Третьего мира, - а совокупная стоимость услуг портных - растет; растет производство полуфабрикатов для домашнего шитья и оказание услуг по «кастомизации» готовой продукции). Специфика сферы услуг подсказывает, что, возможно, вместо применения кооперативной модели стоит рассмотреть программное обеспечение как особого рода коммуникацию (рис. 3). Это предполагает, разумеется, не просто смену картинки, а совсем другую категорию, организующую мысль. Эффективность коммуникации зависит совсем от других условий, нежели эффективность кооперации 2. На эффективность коммуникации прежде всего влияет ее инструментарий, включая используемые языки, жанры, стили и форматы обмена информацией и, возможно, технические средства их реализации и поддержки, и, конечно, степень владения этим инструментарием участниками коммуникации. Одним из «естественных» языков общения программистов является исходный код программы, являющейся предметом коммуникации: наряду с функциональностью, выявляемой обычно при использовании исполняемого кода 3, программа, представленная в исходных кодах, обладает также потребной для целей коммуникации экспрессивностью (выразительной силой) и фигуративностью (изобразительной силой), чего исполняемый код почти полностью лишен. Далее, важна также свобода позиционирования участников коммуникации; можно ожидать, что при минимизации издержек на позиционирование мы вместо жесткого противопоставления «программистов» «пользователям» получим континуум, градиент программного обеспечения между «полюсами тяготения»: «разработкой» (где затраты выше выгоды от использования) и «использованием» (где выгода использования превышает затраты). Это в значительной степени соответствует тому, что можно эмпирически наблюдать в сообществе свободного софта: его участники достаточно динамично перемещаются вдоль смоделированного континуума, команды разработчиков не имеют четких границ, и нередки случаи, когда, допустим, программист, отвечающий за внедрение и поддержку какой-то программы в определенной корпорации, постепенно вовлекается в процесс программирования, и даже пытается «перетянуть одеяло на себя» и использовать прочих пользователей программы как тестеров в том числе и функциональности, которая ему интересна. Ресурсы и мотивация Вышесказанное полностью абстрагировано от экономики процесса, и для конкретизации необходимо ввести такой важный компонент коммуникации, как вовлечение в нее материальных ресурсов. Хотя опыт показывает, что нельзя игнорировать «автомотивацию» программистов по внеэкономическим соображениям (профессиональную, академическую, престижную, которая косвенно может также быть экономической), понятно, что, какую бы форму ни приняло движение этих ресурсов, в конце концов, пользователи в совокупности:
«При прочих равных» здесь очень важно, поскольку форма движения ресурсов влияет и на организацию и эффективность коммуникации в целом. Видимо, список всех возможных форм является открытым и расширяемым до бесконечности. Однако из истории профессии известен ряд институционализированных форм вознаграждения:
Коммуникативная неоптимальность индустриалистской практики Коммуникативная модель позволяет «на пальцах» показать наблюдающуюся в ряде сегментов рынка по разработке и поставке программ субоптимальность. Более того, она позволяет предсказать, что любое поощрение «индустриалистских» тенденций в сфере программного обеспечение будет приводить к усугублению такой субоптимальности.
Разумеется, этот потенциал субоптимальности процесса в целом реализуется лишь как тенденция, причем ей противостоят и тенденции противоположные. Так, если пользователи, реализующие определенный класс приложений и нуждающиеся в их программном обеспечении, представляют собой профессиональную группу или отрасль с соответствующими структурами самоорганизации, они могут вполне успешно «продавливать» и стандартизацию/открытость информации, и либеральные условия лицензирования (даже при его общей несвободе) и, таким образом, поддерживать конкурентность. Однако монополистические действия (или, скажем мягче, использование рыночной власти) и на стороне потребления могут, в свою очередь, порождать субоптимальность (например, технический застой и отсутствие инноваций) 11. Но если мы посмотрим на недавнюю историю сегментов рынка, отличающихся раздробленностью пользовательской аудитории, ее ростом (а значит, монотонным снижением компьютерной грамотности среднего пользователя) и массовым характером приложений, мы увидим, что они наиболее сильно «поражены» несвободным лицензированием, и весь букет последствий, предсказанных моделью, можно наблюдать эмпирически. [i41644] 1 (обратно к тексту) - Или программах. 2 (обратно к тексту) - Разумеется, нельзя забывать, что кооперация - это абстракция, реальные кооперативные акты всегда погружены в тот или иной коммуникативный аспект, в частности в рыночную коммуникацию. Однако речь идет о смене акцентов, о том, что контекст становится сутью. 3 (обратно к тексту) - Имеются в виду, разумеется, программы, написанные для компиляции, то есть в предположении, что исполняемый код отличен от исходного. 4 (обратно к тексту) - Как замечено выше, это львиная доля всей потребляемой профессиональной рабочей силы. 5 (обратно к тексту) - Отличие такого посредничества от посредничества на настоящих товарных рынках в том, что независимо от того, какую ценность добавляют (или отнимают) менеджеры «софтверной компании» к ценности услуг программиста, оно оказывается в большей степени на фиктивном рынке «интеллектуальной собственности». По сути своей деятельности посредник скупает исключительные права и эмитирует неисключительные. «Цена» лицензии (пучка неисключительных прав) может на порядки превышать стоимость реально оказываемых услуг по тиражированию и доставке программ пользователю, и из их разницы (если посредник удачлив) оплачивается, в частности, наЈм программиста/покупка у него исключительных прав. 6 (обратно к тексту) - Драйверы, составляющие значительную часть любой операционной среды, обычно разрабатываются, по крайней мере частично, за счет производителя, причем вне зависимости от свободы последующего оборота кода. Разработчики аппаратных платформ оплачивают разработку собственных операционных систем или перенос существующих. 7 (обратно к тексту) - Государствами прямо или косвенно оплачивается разработка большого количества программ, пишущихся в ходе научной и учебной работы. 8 (обратно к тексту) - Законодательство ряда стран, включая Россию, перекрывает некоторое количество возможных злоупотреблений, закрепляя за пользователем право на «адаптацию» программ, в том числе (если говорить о российском «Законе о правовой охране программ для ЭВМ…») «исправление явных ошибок», что, очевидно, можно трактовать весьма широко, учитывая, что программа вполне может из одних ошибок и состоять. Однако утаивание исходных текстов делает осуществление этого права весьма проблематичным. 9 (обратно к тексту) - Обратите внимание, что это выводит инструментарий упомянутой «правовой охраны» за пределы сферы copyright: модификация пользовательского экземпляра программы без последующего его распространения неспособна нанести ущерб интересам владельца исключительных прав даже теоретически. 10 (обратно к тексту) - Все это позволяет ему извлекать дополнительную прибыль (например, «сертифицируя» процессы подготовки пользователей и разработчиков, торгуя сопутствующей информацией описательного характера и т. п.), но, что более важно, наносит совокупный ущерб гораздо больший, чем эта дополнительная прибыль (даже если абстрагироваться от «честности», «справедливости» и прочих моральных категорий); более подробный анализ см., например, в: A. M. Odlyzko, Smart and stupid networks, ACM netWorker, Dec 1998, pp. 38-46. 11 (обратно к тексту) - Характерный пример - издательский бизнес и «типографские» приложения компьютера: несмотря на несвободу большей части используемых программ, рынок по их поставке вполне конкурентен, большинство спецификаций открыты, и не похоже, чтобы отрасль и профессия «переплачивали» программистам.
|