и перспективах российского программирования в условиях стагнации прикладной науки и полунищенского существования фундаментальных отраслей знания.

В объявлениях о найме программистов часто требуется знание претендентами SQL, С++, Power Builder и т. п., что говорит о сложившемся представлении о программисте, исключительно как о носителе инструмента - его продолжении. Если ты знаешь необходимый инструмент - ты программист, если нет, извини. Ясно, что это не главное. От программиста требуется прежде всего другое: способность решать проблему, не теряться в сложных ситуациях, обучаемость, а главное, дисциплинированность. Остановимся на ней.

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

Методы организации работы. Качество проекта - тестирование. Независимая служба тестирования по западным нормам составляет один кодировщик на два тестера, у нас 2:1, что следует из уровня разработчика. У них считается нормой передать тестеру код, прошедший стадию компиляции без ошибок, у нас в руки тестеру попадает система, которая уже "дышит" - работает. Курирует проект администратор - только координация работы, план, отчетность, конфигурация продукта или сборка. Лидер проекта или детальная разработка расписания, буквально по часам. Ясность внутри команды, что делает каждый. Не должно быть неопределенностей типа: "а я так понял, а я так слышал, мне так сказали". Сроки: обсудили, договорились - все, подвели баланс, зафиксировали даты - это уже закон, независимо от того, какие новые идеи могут появиться у разработчика в процессе реализации. Возможно, тем самым откладывается реализация интересных решений, но надо отдавать себе отчет в том, что при любых отклонениях от сроков риск возрастает. Не может быть проекта с изменяемой датой.

В России еще есть откуда черпать высококвалифицированные кадры - на Западе этого уже нет: все либо ушли в консультанты, либо создали свои компании. С другой стороны, это создает некоторые дополнительные проблемы, которые надо решать по принципу "на всякого мудреца довольно простоты". Любое самовыражение вне утвержденного плана реализации проекта не должно нарушать процедуры. Для неординарно мыслящего программиста возможен перевод на другую должность, изменение условий работы, но на каждом этапе действовать нужно строго по плану. Да, новая идея может быть красива, эффектна, но, с точки зрения именно выпуска конечного продукта, она зачастую не выдерживает критики. Чтобы не подавлять инициативы, программистов, отличающихся несвоевременной генерацией оригинальных идей, либо выводят на индивидуальные проекты, либо изолируют от коллектива, либо увольняют - повышенный риск выполнения проекта оказывается выше эфемерных идей.

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

Теперь об инструментах. С точки зрения снижения риска, выбор инструмента не должен влиять на процесс разработки - в нем не должно быть дыр, которые могут развалить проект. Используя инструментарий, можно выиграть, а можно и проиграть. Либо брать с исходным кодом, либо иметь опыт работы с ним, однако это процесс: новая версия инструментария - новые дыры. Надо постоянно быть в курсе и работать, чтобы обойти погрешности инструментария, а это неизбежно ограничивает дизайн разрабатываемого продукта. Выигрыш от использования инструмента может оказаться меньше, чем проигрыш от латания дыр, - всегда трудно найти причины ошибок, особенно в чужом продукте. Опять же перенос на другие платформы. Можно самим разрабатывать, имея под рукой только хороший компилятор С++. Вообще, работа с нестандартными продуктами существенно повышает риск. Именно поэтому на Западе традиционно высок интерес к стандартам и проверенным многолетней практикой продуктам - за изъяны в популярных инструментах разработчики расплачиваются временем, которое при высоких заработках выливается в весьма ощутимые для компании потери.

Какие тенденции будут определять завтрашний день отечественного программирования? Прежде всего произойдет и уже происходит специализация и профессионализация - прошло время "блатных" фирм, работающих под один проект конкретного ведомства под руководством одного человека. Подход типа "решим любую задачу из любой предметной области", реализуемый путем быстрого набора программистов по объявлениям в прессе, неминуемо сойдет на нет. В результате разработка будет стоить дороже, но с гарантированным результатом. Расширяется интеграция и открытость по отношению ко всему компьютерному сообществу. Этому способствует сегодня и работа российских компаний для западном рынке, которая дает даже не столько деньги (появляются российские заказчики, способные самостоятельно оплачивать серьезные проекты), главное - поймать волну технологии, быть на гребне моды. Действительно, с одной стороны - "ах у вас нет клиента Java - вы не джентльмен", а с другой, в России совсем другие проблемы, и промышленную "глубинку" больше волнуют вопросы, как наладить нормальный складской учет или как сохранить базу данных, которая долгое время сидела на мэйнфреймах.

У нас по-прежнему часто можно услышать фразу - "программирование - это искусство", которая впервые прозвучала на заре отечественной компьютеризации, когда в стране отсутствовала информация о новых технологиях, все приходилось открывать заново, например документацию по языку АЛГОЛ переписывали в свое время от руки. Корректнее считать программирование высококвалифицированным ремеслом. По уровню затрат разработка Су-27 куда сложнее, чем создание операционной системы. А фетишизация программирования часто происходит от неумения или нежелания нормальным образом организовать работу над проектом. Тем не менее уровень культуры и образования российских программистов настолько отличается от уровня специалистов остального мира, что мы просто обречены быть высокотехнологичной нацией. Другое дело, удастся ли реализовать этот потенциал?


Дмитрий Волков - главный редактор журнала "Открытые системы". С ним можно связаться по электронной почте: vlk@osp.ru.