В настоящее время программирование трансформировалось в целую индустрию производства программных изделий. Основные должности программистов: техник-программист, инженер-программист (третьей, второй и первой категорий). Следовательно, профессиональный разработчик программных изделий должен владеть теорией проектирования, методами активизации мышления.
На ранних этапах принимаются проектные решения, в большой степени определяющие качество и стоимость будущих изделий. Методической основой этих исследований являются методы поиска технических решений, предназначенные для использования человеком и отражающие обобщенный опыт проектирования, методы формализации знаний об объектах проектирования и процедур работы с этими знаниями, опыт и знания проектировщиков.
Ранее и до настоящего времени большая часть нестандартных задач решалась человеком на интуитивном уровне методом проб и ошибок: последовательное выдвижение и рассмотрение идей. Главный недостаток метода проб и ошибок - это, во-первых, медленное генерирование новых идей, а во-вторых, отсутствие защиты от психологической инерции, то есть выдвижение идей тривиальных, обыденных, неоригинальных.
Следующим шагом в совершенствовании технологии явился переход к направленным методам поиска решений, которые базируются: на раскрытии и описании процесса решения; на представлении его в виде некоторого эвристического алгоритма. Направленность эвристических методов - раскачать мышление, помочь по-новому увидеть задачу, преодолеть стереотипы.
При успешном решении какой-либо творческой задачи, человек получает два результата: это само решение поставленной задачи и методический опыт, т.е. уяснение процесса решения данной конкретной задачи. Такие методические правила называют эвристическими приемами. Эвристический прием - способ разрешения определённого противоречия. Но проблема заключается в том, что решение одной задачи нельзя просто перенести на решение другой. Поэтому только после решения определенного числа задач у человека появлялся набор правил, указаний или приемов решения той или иной задачи.
Используя фонд эвристических приемов, Воинов Б.С. и Костерин В.В. успешно синтезировали ряд новых механизмов алгоритма поиска глобального экстремума функций многих переменных на сетке кода Грея [1, 3].
Пример использования метода эвристических приемов для создания алгоритмов описан в книге Д. Пойа [4]. Цитируемая часто, данная книга содержит фонд лишь из 14 эвристических приемов! Фонд из 20 эвристических приемов, полезных для генерации структуры объектно-ориентированных программ, опубликован в книге Б. Страуструпа [5].
Описанный же в учебнике [2], только укороченный фонд включает 200 эвристических приемов для программирования.
Методы аналогий является наиболее популярными методами для программистов. Суть одного из методов состоит в следующем. Совершенствуемую систему держат как бы в фокусе внимания и переносят на нее свойства других, не имеющих к ней никакого отношения программ из коллекции. При этом возникают необычные сочетания, которые стараются развить дальше.
Согласно проведенному опросу, большинство профессиональных программистов именно этим методом генерировали внешний облик своих программных систем и определили способы реализации многих функций программ.
Метод морфологических таблиц является простым и эффективным методом, особенно там, где необходимо найти большое число вариантов достижения цели. В последнее время он используется достаточно широко как средство развития творческого воображения. Примером морфологической таблицы может являться прайс-лист компьютерной фирмы. В прайс-листе содержится информация: о нескольких типов корпусов ЭВМ; о нескольких типах материнских плат; о нескольких типов процессоров и т.д. Каждая часть характеризуется техническими характеристиками и ценой. Не все варианты частей могут быть состыкованы между собой. Главное, что характеризует прайс-лист - это отсутствие критерия качества целого компьютера для конкретного пользователя. Глядя на прайс-лист надо синтезировать данный критерий и выбрать оптимальный состав частей. Как результат синтеза могут быть выявлены варианты построения компьютеров, ориентированных на различные категории пользователей.
Уже в 1983 г. была успешно применена морфологическая таблица для синтеза идей построения алгоритма нелинейного программирования поиска глобального экстремума функций многих переменных на сетке кода Грея [1, 3]. Алгоритмы нелинейного программирования предназначены для поиска экстремумов функций многих переменных. В методах прямого поиска экстремум выявляется путем расчета множества точек функции при аргументах, определяемых самим алгоритмом поиска. В учебнике [2] приведена данная морфологическая таблица, которая содержит классификационные признаки отдельных механизмов алгоритмов нелинейного программирования на уровне основных принципов. Интересно отметить, что число возможных реализаций алгоритмов нелинейного программирования по этой таблице составляет N = 5*6*8*5*7*7*6 = 352800, что значительно превышает число опубликованных методов (около 3000)!
Исходя из принципа аналогии, выдвинута гипотеза, о том, что данная методика может найти применение для создания ряда новых численных методов вычислительной математики.
Методы аналогий, эвристических приемов и морфологического синтеза зарекомендовали себя эффективными методами для генерации идей построения больших программ и программных комплексов. Апробация данных методов была осуществлена на десятках проектах программных систем, выполненных как автором, так и студентами-дипломниками, работающих под руководством автора.
Инструкция пользования каким-либо устройством, описание бизнес-процесса, инструкция вообще или алгоритм программы являются описаниями функционирования. Хорошим функциональным описанием является описание: безошибочное, однозначное для читателя, краткое, суть которого понимается быстро. Согласно методике [2], хорошее функциональное описание составляется от общего к частному с использованием особых конструкций предложений - типовых элементов (типовых структур или просто структур), составляющих семантический скелет будущих инструкций. Главное преимущество изложенной методики состоит в однозначности соответствия функционального описания замыслу, что достигается как оправданной декомпозицией, так и исчерпывающим тестированием.
Оказалось, что обучение методике разработки описаний функционирования систем от общего к частному (составление инструкций вообще, описание бизнес-процессов) вполне доступно студентам второго курса специальности бухгалтерский учет, даже если они не изучали эту методику в курсе программирования. Более того, половина учеников девятого класса обычной школы вполне способна полностью освоить данный материал.
Авторы считают, что в данной работе новыми являются следующие положения и результаты:
- теория проектирования объектов техники и, в частности, теория поискового конструирования перенесена в новую область - теорию программирования;
- теория программирования позволила разработать методику массового обучения функциональному документированию и дедуктивному мышлению, как будущих программистов, так и специалистов непрограммирующих специальностей, например, работающих в областях техники, экономики и даже учащихся среднего образования.
Список литературы
- Воинов Б.С. Информационные технологии и системы: Монография. В 2 кн.
- Книга I. Методология синтеза новых решений. - Нижний Новгород: Изд-во ННГУ им. Н.И. Лобачевского, 2001. - 404с.
- Книга 2. Прикладные системные исследования. - Нижний Новгород: Изд-во ННГУ им. Н.И. Лобачевского, 2001. - 272 c.
- Технологии программирования: Учебник /В.А. Камаев, В.В. Костерин. - М.: Высш. шк., 2005,-359 с.
- Костерин А.В., Костерин В.В. Алгоритм поиска глобального экстремума и его применение для многопараметрического синтеза конструкций СВЧ В кн. Вопросы релятивистской СВЧ электроники (сб. науч. трудов). М.: РТИ АН СССР, 1983, с. 168-185.
- Пойа Д. Математическое открытие. Решение задач / Д. Пойа.- М., Наука, 1976. -389 с.
- Страуструп Б. Язык программирования C++/. В двух частях. Киев: ДиаСофт, 1998.