Несколько лет назад было популярно обсуждать такие понятия, как Programming in Small и Programming in Large. Совсем недавно я натолкнулся на статью фирмы Microsoft “Programming in Large”, но, как оказалось, имелись в виду лишь принципы программирования в большой (large) модели памяти.

 

Вообще Programming обозначает умение, мастерство, способность человека к разработке и написанию программ. Для кого-то это творчество, для кого-то ремесло, и споры по этому поводу будут продолжаться, наверное, вечно. Однако разделение идеологии программирования на два понятия  -  in Small и in Large (кстати, это американские термины)  -  позволяют отчасти выяснить, в каких же областях программирование является преимущественно творчеством, а в каких  -  ремеслом.

 

Программирование “в малом” (in small)  -  это непосредственно кодирование алгоритма. Кодировщиком можно работать и не имея специального образования, если не на СИ или ассемблере, то на Basic или Pascal точно. Хотя, конечно, и кодирование требует незаурядного мастерства, особенно при создании сложных систем анализа и обработки информации, когда даже очень хорошо поставленную задачу не распишешь слишком подробно. Например, в программах распознавания образов, использования нечетких алгоритмов, когда требуется реализация матричных преобразований и оригинальный интерфейс для задания функций распределения, везде, где необходимо обработать большие объемы информации нестандартным образом, да и во множестве других самых разнообразных задач кодировщику приходится изрядно поломать голову над тем, как запрограммировать то, что написано в техническом задании.

 

Кроме того, сюда же можно отнести создание небольших программ массового спроса, требующих преимущественно простого кодирования. При этом отладка занимает, как правило, большую часть времени, отведенного на разработку.

 

Традиционно считается, что в программировании “в малом” в России всегда были отличные специалисты. Действительно, создавалось довольно много специализированных программ, работающих быстро и эффективно, но с никудышным интерфейсом и подчас делающих не совсем то, что от них требовалось. Кроме того, к области Programming in Small вполне можно отнести бывшую с десяток лет назад весьма престижной элитную работу системного программиста, который знал подчас назначение буквально каждого байта операционных систем ЕС ЭВМ.

 

Но в другом  -  в Programming in Large  -  мы значительно отставали от Запада. К этой области относятся разработка больших проектов, продумывание структур данных, оптимального интерфейса, обеспечение надлежащего качества получаемых продуктов, дальнейшая программная поддержка, сопровождение и модернизация. Для этого требовались профессиональные руководители проектов (не начальники секторов!), способные не только организовать работу группы программистов, но также быть специалистами и в программировании “в большом”. Таких людей можно было пересчитать по пальцам.

 

Некоторые считают, что Programming in Large то же самое, что системная интеграция, но это не так. Ближе всего программирование “в большом” лежит к работам по реализации конкретных крупных проектов для вертикального рынка или под заказ, а также не очень объемных, но рассчитанных на высокий массовый спрос программ, когда вопросы качества и удобного интерфейса выходят на первый план. Как правило, настоящие профессионалы используют здесь различные средства разработки сверхвысокого уровня, типа CASE-средств и языков 4-го поколения. При этом получаемые продукты практически невозможно “переносить” в другие области, насколько бы хорошо ни была продумана их внутренняя структура.

 

Однако, учитывая высокий уровень подготовки отечественных программистов, имеющих желание работать и совершенствоваться, можно предположить, что проблема появления высококлассных менеджеров проектов лишь дело времени.

 

Но есть еще одна область программирования, до недавнего времени бывшая не столь актуальной из-за практического отсутствия массовых систем клиент-сервер и возможностей организации глобальных проектов автоматизации предприятий на базе относительно недорогой техники. В соответствии с уже сложившейся терминологией назовем ее Programming in Huge, программирование “в сверхбольшом”.

 

Наиболее точно эту область программирования характеризуют слова Евгения Веселова, автора “Лексикона”. Про свою нынешнюю работу в фирме IBS в интервью нескольким компьютерным изданиям он сказал так: “Это формирование методологии анализа требований заказчика, выработки комплексных решений, их реализации, сопровождения, формализация такой методологии и в конечном итоге построение среды, способной решить эти задачи... В разработке должны присутствовать такие этапы, как системный анализ, консалтинг, администрирование, обучение и лишь 20% чистого программирования... Механизмы замыкания знаний подобного рода в модули имеют совсем другую, нежели в программировании, природу, которую можно назвать объектной системотехникой”. По его же словам, на Западе только-только начинают приступать к таким масштабным задачам. Это и немудрено. Мощное развитие академической науки в СССР стало отличной базой для ряда специалистов, которые благодаря своему таланту смогли перенести ряд системных идей в практическую плоскость. При этом, если подобные проекты воплотятся в жизнь, то российский программный бизнес реально сможет претендовать на первые места в ряде областей, связанных с реализацией сверхбольших проектов, а также в переносимых и легко адаптируемых технологиях глобальной автоматизации предприятий.

 

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

 

Если же вам тема программирования “в различных моделях памяти” действительно интересна, то я обязательно ее продолжу.

 

Сергей Бобровский

Версия для печати