Подведем итоги курса. Как же используется человеческий фактор
в корпоративных системах и какие модели, методы и средства для
управления человеческим фактором имеет смысл использовать?
Вспомним, во-первых, что человеческий фактор весьма критичен
для крупномасштабных систем, для корпоративных систем
в первую очередь. Технологические факторы, естественно, значимы,
но факторы менеджериальные, факторы управленческие оказывают
существенно большее влияние на развитие и управление командами
разработки и взаимодействия с заказчиком. Отсутствие
продуктивного взаимодействия приводит к кризисам. И собственно
программная инженерия возникла как средство борьбы с такими
кризисами, как в локальной, так и в глобальной форме. Мы
рассмотрели в ходе данного курса особенности системы
разработчик – клиент. При этом мы использовали различные
подходы, в частности, модель, связанную с теорией передачи
информации Шеннона, и особенности обмена информацией
в целом ряде систем, таких как высоко критичные системы,
инновационные системы. Мы рассмотрели семь принципов
передачи знания — это мастерство, обратная связь, организация
знаний, предыдущие знания и так далее, и целый ряд
моделей — оптимизированная спиральная модель, многослойная
модель корпоративной архитектуры, матрица корпоративной
архитектуры, а так же адаптивное и субъектно-ориентированное
управление разработкой. Вспомним, что кризис — это дисбаланс
в тройке модели – методы – средства, с одной стороны, ресурсы
с другой стороны, и с третьей стороны — ограничения. По сути дела
— это расхождение между ресурсами и возможностями, ресурсами
и ограничениями. При этом разработка программных систем
представляет собой многофакторную оптимизацию и, собственно,
эта сама тройка, которая была названа, и является теми факторами,
которые, прежде всего, и имеет смысл оптимизировать при наличии
соответствующих возможностей, конечно. Естественно,
корпоративные системы позволяют в достаточно большом
диапазоне вести эту оптимизацию, поскольку они отличаются
достаточно высокой управленческой сложностью и относительно
небольшой сложностью технологической. При этом выход
из кризиса как раз и представляется посредством оптимизации,
то есть балансировки ресурсов и ограничений, а также выбором
адекватных моделей, методов и средств. Какие аспекты следует
подчеркнуть, говоря о человеческом факторе? Прежде всего,
если мы говорим о разработке больших программных систем
и о программной инженерии, надо помнить о том, что это не совсем
то же самое, что программирование. Программный инженер — это
не программист, не кодировщик. У него немного другая работа
в том смысле, что он руководит зачастую командой разработчиков,
то есть управляет достаточно большим коллективом с разными
ролями, ожиданиями и предпочтениями. Поэтому, вообще говоря,
для разработки систем крупномасштабных, в том числе
и корпоративных, крайне важен человеческий фактор, то есть
работа в команде, коммуникация и переговоры. И естественно,
управление командой разработчиков является важной сферой
ответственности программного инженера. Что же входит
в управление командой разработчиков и какими компетенциями,
какими навыками должен обладать в этой связи программный
инженер? Прежде всего, нужно обеспечить эффективность,
как индивидуальную каждого участника команды, так и всей
команды в целом, сбалансировав потенциал ее участников.
Какие аспекты при этом важны? Надо сказать, что программный
инженер должен быть отчасти и психологом, то есть он должен
владеть психологией личности, быть способным к лидерству,
повести команду за собой, осуществить или поднять высокую
мотивацию, устранить демотивирующие факторы и планомерно развивать
коммуникацию как внутри команды, так и с заказчиком, избегать
конфликтов, управлять конфликтами, строить, улучшать и делать
более эффективной работу команды при помощи методик,
связанных с командообразованием, подбирать и развивать команду,
организовывать и внедрять стандарты зрелости. Разработка
программных систем является многосторонней задачей.
Здесь взаимодействует целый ряд команд: команда клиента, команда
разработчика и руководство, которое часто тоже представляет
собой команду — это и аналитики и другие лица, принимающие
решения, и топ-менеджмент, и у них, конечно, очень разные
интересы, ожидания и цели. Примерить и соединить эти цели
для достижения общего позитивного эффекта — задача достаточно
сложная, поэтому здесь, как мы уже говорили, имеет смысл
и управлять конфликтами, и учиться вести переговоры,
и воспитывать командный дух и вести вперед команду. Поэтому,
на самом деле, целый ряд таких мягких навыков, о которых
мы упоминали, весьма важен для программного инженера.
Другой взгляд на взаимодействие разработчика и заказчика
в ходе разработки программных систем — это процесс передачи
информации, например, с точки зрения теории информации
Клода Шеннона. Мы рассмотрели эту теорию, представили себе,
как выглядит источник и приемник, каким образом происходит
передача информации, каким образом возможно осуществлять
кодирование или сжатие этой информации для того, чтобы она
могла передаваться без потерь даже при наличие шума, то есть
определенных помех, которые существуют в канале передачи.
Эти помехи, кстати, могут также вызываться как техногенным,
так и человеческим фактором. И наша задача в данном
случае — обеспечить трансляцию информации, передачу знаний
от клиента к разработчику и обратно без помех, без потерь,
как по качеству, так и по времени.