Организация товарного производства программ. Часть 1.

Специфика разработки программ для собственных нужд знакома большинству программистов по собственному опыту. Но, возможно, не всем известно, как меняются требования к программе, если ее требуется передать в чужие руки и к тому же не даром. Для этого недостаточно, чтобы она как-то работала. Требуется обеспечить качественно новый уровень сервиса в управлении выполнением программы, подготовке исходных данных, оформлении результатов вычислений. Необходимо отладить программу, чтобы потребитель не слишком часто сталкивался с ошибками; предусмотреть защиту от ошибок пользователя и еще не обнаруженных ошибок в программе, чтобы потребитель мог доверять полученным результатам; так документировать программу, чтобы можно было без особых консультаций понять правила ее использования, отличать свои ошибки от ошибок в ПО и сбоев ЭВМ и, в идеале, чтобы некоторые пользователи могли сами устранять ошибки и совершенствовать программу. В дополнение к машинной зависимости необходимо учитывать системную зависимость программ и их зависимость от окружения — используемых потребителем информационных и организационных структур. Надо добиться, чтобы потенциальный пользователь ознакомился с предлагаемой программой и поверил в ее достоинства.

Переход к товарному производству связан с глубокой специализацией и разделением труда, призванными обеспечить оптимизацию использования критических ресурсов, контроль качества и своевременности выполнения работ, уменьшение требований к квалификации персонала и повышение производительности труда при выполнении каждого вида работ. Первоначально такая специализация использовалась в сфере эксплуатации ЭВМ (как при разработке, так и при использовании ПО). В частности, пока критическим ресурсом являлось процессорное время, широко применялся пакетный режим с выделением служб перфорации, операторов, архива, приема и выдачи заданий.

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