Название: Вопросно-ответное программирование человеко-компьютерной деятельности( Соснин П.И.)

Жанр: Информационные системы и технологии

Просмотров: 1874


2.1. содержание программирования

2.1.1. Толкования программированияИнтересы    монографии    требуют    более    детально    разобраться с содержанием, которое вкладывают в понятие «программирование», что позволит выделить в версиях употребления этого понятия его сущность, а значит в версиях деятельностных процессов, называемых«программированием»,           определиться с          обобщённым  базисом          их осуществления.В  предшествующем  тексте  в  п.  1.3  сущность  программирования была связана с деятельностью, нацеленной на построения концептуальных решений задач Z и их подготовку к повторным использованиям, в   которой используется естественный (естественно- профессиональный) язык в его алгоритмическом употреблении.Более того, было приведено известное утверждение о том, что лучший язык программирования – это естественный (естественно- профессиональный) язык.В то же время всё сказанное выше о программировании было связано с задачами типа Z, для решения которых используются прецеденты, доступные субъекту, оказавшемся в задачной ситуации.Приведём        другие            употребления            слова   «программирование»и проведём анализ их связи с тем, что называют «решением задач».

Начнём    с    перечисления    толкования    слова    «программирование»в словарях:1.  Программирование  ‒  процесс  подготовки  задач  для решения их на ЭВМ, состоящий из следующих этапов: составление«плана решения» задачи в виде набора операций (алгоритмическое описание задачи); описание «плана решения» на языке программирования (составление программы); трансляция программы с языка программирования на машинный язык (в виде последовательности команд, реализация которых техническими средствами ЭВМ и есть процесс решения задачи).2.   Программирование  –  это  часть  прикладной  математики и вычислительной техники, разрабатывающая методы составления программ (Толовый словарь русского языка, www.vedu.ru/ExpDic).3. Программирование     –     это     процесс    составления упорядоченной  последовательности  действий  для  ЭВМ; научная дисциплина, изучающая программы для ЭВМ и способы их составления, проверки и улучшения. БСЭ http://slovari.yandex.ru/~книги/БСЭ.4. Математическое    программирование    является    разделом математики,  посвященном  теории  и  методам  решения  задач о нахождении экстремумов функций на множествах, определяемых некоторыми ограничениями (равенствами или неравенствами). Если изучаемая функция линейна (1-й степени) и задана на множестве, заданном  линейными  равенствами  и  неравенствами,  то соответствующий  раздел  математического  программирования называется линейным программированием. Математическое программирование называется также оптимальным программированием.

Следует          отличать         от        программирования   на        ЭВМhttp://slovorus.ru/index.php5. Программированием называют также раздел прикладной математики, изучающий и разрабатывающий методы и средства составления, проверки и улучшения программ для ЭВМ. (Энциклопедия социологии, ЭС, http://slovari.yandex.ru/~книги).6.  Оптимальное  программирование  применяют  в  экономике методов математического программирования (часто эти термины определяют  как  синонимы).  Включает  методы  разработки  планов и программ, регулирования хозяйственной деятельности и др. (http://slovorus.ru/index.php).Программирование – это особая форма организации проблемного мышления и деятельности, предполагающая составление программы. Как гуманитарная технология, программирование представляется мысленной имитацией (проигрыванием) предстоящей работы в целом, которая по мере осуществления переходит непосредственно     в     исполнение     самой     работы     «в     натуре» (т.е. программирование, является гуманитарной технологией «работы с  будущим»,  позволяющей  человеку  обеспечить  процесс  развития). (ЭС, http://slovari.yandex.ru/~книги).Для сравнения с русскоязычными толкованиями приведём (без адресных ссылок) ряд толкований слова «программирования» из англоязычных словарей:  a plan of action to accomplish a specified end;  a framework within which we organize our ideas about things and processes;  a planned, coordinated group of activities, procedures, etc., often for a specific purpose, or a facility offering such a series of activities;

  to set, regulate, or modify so as to produce a specific response or reaction;  an act of formulating a program for a definite course of action;  an act of creating something by thinking;  a planned series of events;  a set of related measures or activities with a long-term aim;  a sheet or booklet detailing items or performers at an event;  a form of artistic expression in the sense that it, too, is ideally about the process of creating something;  setting an order and time for planned events;  an act or process of planning or writing a program;  a  systematic  plan  for  the  automatic  solution  of  a  problem  by a computer;  creating a  sequence of  instructions to  enable the  computer to  do something;  a radio or television broadcast.А также представим совокупность словосочетаний, включающих слово  «программирование»:  компьютерное  программирование (объектно-ориентированное, событийное, аспектно-ориентированное, функциональное, логическое, ..., экстремальное), математическое программирование  (линейное,  нелинейное,  генетическое, эволюционное), психологическое (нейролингвистическое), стохастическое  программирование (стохастическое  программирование с вероятностными ограничениями, стохастическое событийное программирование), нечеткое программирование (нечеткое программирование с возможностными ограничениями, нечеткое событийное       программирование,       нечеткое       программирование с    нечеткими   решениями),   неточное   программирование,   нечетко-

случайное  программирование,  случайное-нечеткое  программирование и другие виды.Анализ содержания, которое вкладывается в толкования и различные виды программирования, позволяет сделать вывод о том, что это содержание  явно   или   неявно  связано  с   решением  задач,   причём в условиях, когда доступны определённые множества конструктов для комбинирования  и  определённое  множество  операций  над конструктами.Явно     и     строго     конструкты     и     операции     оговариваются и      предоставляются     для      решения      задач      в      компьютерном и математическом программировании.2.1.2. Точки зрения о программированииДля расширения и детализации содержания, которое в разных условиях   и   с   разными   целями   вкладывают   в   то,   что   называют«программированием»,     приведём     ряд     точек     зрения     учёных и специалистов с прямыми ссылками на авторов. Отбор материала не претендует      на      полноту      различий      в      точках      зрения      на«программирования», но он достаточен для целей монографии.1.   Э. Дейкстра. «Programming Considered as a Human Activity», http://hp.fciencias.unam.mx/~jloa/CC/dijkstra1i.html.«Даже полагая, что машины работают безупречно, мы должны задать себе вопрос: "Когда компьютер выдает результаты, почему мы должны им доверять, если только мы им действительно доверяем?", а затем: "Какие меры мы можем предпринять, чтобы повысить степень нашей уверенности в том, что выданные результаты ‒ это то, что нам нужно на самом деле?".

Ситуация, в которой находятся программисты, очень похожа на ту, в которой находятся чистые математики, которые разрабатывают теорию и доказывают результаты. Долгое время чистые математики думали ‒ а некоторые из них до сих пор думают ‒ что теорема может быть доказана полностью, что вопрос о том, является ли предложенное доказательство теоремы адекватным или нет, допускает абсолютный ответ "да" или "нет". Никто не может гарантировать, что доказательство корректно, в лучшем случае он может сказать: "Я не нашел ни одной ошибки".Проблемы разработки и реализации языка программирования ‒ в основном вопрос компромиссов: каждое новое удобство для пользователя должно быть оплачено при реализации, либо в виде дополнительных проблем при трансляции, либо при выполнении, либо при том и другом процессах. Что ж, мы определенно живем не в раю, и я не собираюсь отрицать возможность конфликта между удобством и эффективностью, но теперь я возражаю, когда этот конфликт подается как закономерный итог ситуации. Я придерживаюсь мнения, что стоило бы разобраться, до какой степени интересы Человека и Машины совпадают, и посмотреть, какие технологии мы можем изобрести на пользу всем нам. Я верю, что это исследование принесет плоды, и если этот рассказ пробудит в вас такую же надежду, он достиг своей цели.»2. Knuth    D.    Computer    Programming    as    an    Art. http://www.paulgraham.com/knuth.html.«В настоящее время предметная область «автоматического программирования» является одной из важных областей исследования искусственного интеллекта. Его сторонникам хотелось бы прочитать лекцию «Программирование как Экспонат прошлого» (подразумевая тем самым, что  программирование стало просто пережитком прошлых

дней). Хотелось бы создать машины, которые пишут программы лучше, чем это бы сделал человек, причём, учитывая, только спецификацию проблемы.     В     этом     смысле     следует     непрерывно     стремиться к преобразованию каждого искусства в науку».«На настоящий момент времени программирование – можно рассматривать и как науку и как   искусство, которые полезным образом дополняют друг друга.»«Когда я говорю о программировании как искусстве, я думаю о нем с позиций художественной формы, в эстетическом смысле. Главная цель моей работы как педагога и автор состоит в том, чтобы программисты знали, как написать красивые программы.Есть много смыслов, в которых программа может быть оценена как "хорошая". Во-первых, особенно хорошо иметь программу, которая работает правильно. Во-вторых, часто хорошо иметь программу, которая не будет аппаратной, чтобы измениться, когда настанет время для адаптации. Обе из этих целей достигнуты, когда программа легко читаема и понятна человеку, который знает соответствующий язык.Другой важный путь для промышленной программы, чтобы быть хорошим продуктом, с которым изящно взаимодействует ее пользователь, оправляясь от человеческих ошибок во входных данных. Это реальное искусство, чтобы составить значимые сообщения об ошибках или проектировать гибкие входные форматы, которые не подвержены ошибкам.Другой   важный   аспект   качества   программы   ‒   эффективность, с которой фактически используются ресурсы компьютера. Я вынужден сказать, что много людей в настоящее время осуждают эффективность программы, говоря нам,  что  это  дурной тон. Причина этого  состоит в  том,  что  мы  помним,  когда  эффективность  была  единственным

общепринятым   критерием совершенства, и программисты в прошлом часто  сталкивались  с  проблемами  создания  неоправданно  сложного кода; результат этой ненужной сложности состоял в том, что сетевая эффективность понизилась, из-за трудностей отладки и обслуживания.»3.     Janice J. Heiss. Richard Gabriel. Поэзия программирования«Создание программного обеспечения должно быть осмыслено как творческая деятельность. Только вдумайтесь – необходимо программное обеспечение, которое очень интересно создать, причём, такое программное обеспечение, которое не существовало прежде. Большинство других технических дисциплин связано с создании вещей, которые уже многократно создавались прежде. Законен и часто повторяется вопрос "Почему мы не можем создавать программное обеспечение также гарантированно и ожидаемо, как создаются, например, мосты?"Положение дел таково, что одни и те же хорошие программисты не всегда создают хорошие программы из-за того, что большая часть их работы является творческой  (в которой мы действительно не знаем то, что мы делаем, особенно, когда мы начинаем), мой взгляд состоит в том, что мы должны обучать разработчиков программ также, как мы обучаем творческих людей, например, как поэтов и художников.Если мы хотим стать хорошими программистами, мы должны практиковаться,    у    нас    должна    быть    критическая    литература и  критический  контекст.  Каждый  программист  должен  стремиться к званию «Мастер Программного Искусства».Я думаю, что разработчики уже знают, но боятся признать, что создание  программного обеспечения является  творческой деятельностью,       которая       требует       большого       взаимодействия с пользователями. Создание программного обеспечения является очень

итерационным, динамическим процессом, требующим пользовательской обратной связи.»4.   G. Weinberg. Психология компьютерного программирования«Есть очень немного книг, связанных с вычислением, которые относятся    к    сущности    программирования.   Аппаратные   средства и программное обеспечение уже не раз изменялись до неузнаваемости. Когда-то само компьютерное время было настолько дорого, что Вы должны были написать программу на бумаге, и, когда Вы были готовы, то  передавали  написанное  оператору,  который  загружал  программу в   компьютер и возвращал Вам результат. Психологические аспекты программирования до сих пор все еще плохо поняты.»5.    Richie O'Bower. Программирование как высшая форма творчества, bugtraq.ru/library/misc/creative.html«Математический анализ и прочая абстрактная математика не дают мне способов написания элегантного и компактного кода программ. Возможно, для людей, поставленных перед необходимостью    программирования    узкоспециальных    задач в области математики, эти знания могли бы пригодиться, но мы всё-таки работаем не над отображением трехмерных графических сцен, а занимаемся задачами другого уровня. Могу честно признаться, что занимаюсь программированием не с точки зрения практикующего математика. Напротив, я выполняю работу лингвиста ‒ переводчика с повседневного языка на компьютерный язык, объясняя компьютеру, что и как нужно выполнить, чтобы прийти к желаемому результату».

«Обычный программист ‒ не столько математик, сколько лингвист и философ в одном лице, активно применяющий положения формальной логики».«Итак,  почему  я  могу  с  уверенностью  заявить,  что программирование        является        творчеством?        Потому,        что в программировании мы используем стратегии, очень схожие со стратегиями литераторов (писателей, переводчиков). Известные НЛП- практики (могу привести в пример книгу "Applications of NLP" by Dilts, в которой есть статья "Creative writing") учат тому, как правильно формировать художественный текст и как оптимизировать (улучшить, упростить) сам процесс написания. Вы задумывались о том, что читающий книгу человек невольно уподобляется компьютеру, последовательно отслеживая мысль автора через все главы и параграфы? И  о  том,  что  записывая  программный  код,  вы  обеспечиваете  на некоторое время компилятор (а чуть позже ‒ и систему) занятным чтивом? Во всяком случае, ваш мозг давно знает и активно использует эту схожесть программирования и писательства».«Программист творит как художник, а спрашивают с него как с ремесленника».6.  Mehta A. Programming as a mathematical discipline. http://www.mathmeth.com/arm/arms/arm0.pdf.«О программе можно думать как о формуле, под управлением которой  компьютер  выполняет  вложенные  в  формулу манипуляции. Для программирования особо важна его целеустремлённость,  в которой текст программы берёт на себя только часть целевой нагрузки. Другую часть обеспечивают требования и их

спецификации,          которые          должны          найти  своё     выражение,    как в построении программ, так и в их использовании».«Программист может  утверждать,  что  выполнил  возложенную на него   работу,   если   он   поставляет   программу,   ее   спецификации и     доказательство,     что     программа     соответствует     требованиям и спецификациям».«Для достижения таких   целей с помощью средств формальной математики лучше всего использовать «исчисления»,  предоставляющие подходящий уровень абстракции таким образом, чтобы программист мог сосредоточиться на сущности проблемы, не теряя связи с задачей».«Манипуляции формулами «исчисления» являются механической деятельностью, правильность которой легко поддаётся проверке. Все, что для проверки   нужно сделать – это убедиться, что манипуляции удовлетворяют определения операций «исчисления»».«В понимании программирования как математической дисциплины есть огромные преимущества. Термин "отладка" становится устаревшим, поскольку формально построенная программа является   правильной конструкцией».7.  Levenchuk A. Программирование – это про деятельность. Программирование – это про грамотность. (Из LiveJournal). http://ailev.livejournal.com/470473.html.«Бесполезно искать программистское мышление в software patterns или языках программирования, или еще чем-то специфически компьютерном. Чтобы понять специфику рыбки, нужно ее вытащить из воды – тогда и станет ясно, чем именно она не птичка и не зайчик».

«Программирование – это не про компьютеры. Программирование – это про деятельность, activity. Деятельность, которая мыслится в будущем, деятельность в сути своей повторяемая, но постепенно приспосабливающаяся к неопределенному будущему в ходе исполнения задумки, фиксированной в виде «плана = программы». В так понимаемом программировании можно выделить совсем другие главные проблемы, нежели традиционно обсуждаемые в предметной области компьютинга, например:1.   Язык,   которым   можно   говорить   (компьютеру   и   человеку) о   деятельности,  рефлексивно  включая  сюда  собственно  говорение о программировании как "деятельности над таким материалом, как деятельность" – включая формальное говорение, т.е. работа с системами программирования с рефлексивностью и интроспекцией).2. Поблему многих деятелей, ибо "одинокий деятель" ‒ нонсенс. В деятельности участвует много разно позиционирующихся по отношению  к  ней  людей,  используется  много  разнородного  софта и  железа,  деятельность  часто  асинхронна,  и  подразумевает "экстремально позднее связывание" в силу своего динамизма. По сути, сегодняшний компьютинг – про опосредованное "компьютерно-сетевой средой" (а не одиноким компьютером) человеко-человечное взаимодействие.      Человеко-машинный      интерфейс,      равно      как и "межпрограммные интерфейсы" в конечном итоге только тонкие прокладки в организации человеко-человечьих интерфейсов.3. Программистское мышление для непрограммистов, ибо планирующее/проектирующее (то есть программистское) мышление может быть полезно для других профессий и тем самым быть элементом общей культуры ‒ "грамотностью конца XXI века", как ее понимал Алан Кей:   человек   XXI   века   может   записывать   свои   идеи   на   таком

продвинутом медиа, как компьютер в сети – но ведь и идеи могут быть достаточно сложными, чтобы не сводиться к тексту!»«Хороший программист пытается получить язык столь же выразительный, сколь естественный, и тем самым снять (сознательно) ограничение на способы собственного выражения ‒ он использует аппарат "создания языка под задачу" (extensible language, язык, на котором пишутся определения других языков)».«А если вам нужно "договориться о терминах", выработать новый язык для обсуждения той или иной предметной области, зафиксировать в пригодном для коллективного обсуждения виде ее структуру? Опять же – это ежедневная работа программиста, который рутинизированно творит миры и дает имена. Именно у программиста "вначале было слово", миры исключительно из слов делает именно программист».8. Бабий А. Программирование как деятельность, http://www.alex.krsk.ru /198_/ 1986/1986_09.htm«Длительный спор о том, что же такое программирование ‒ искусство, наука или производство ‒ не был бы столь отвлечённым, как это может показаться на первый взгляд. Дело в том, что от того, как мы понимаем      свою      деятельность,      зависит      выбор      организации и методологии. Люди, считающие программирование искусством, работают, как вдохновённые одиночки, у которых главная цель ‒ самовыражение. Люди, считающие программирование наукой, используют научные формы общения и фактически ставят целью доказать, что программная система с некоторыми заданными свойствами может существовать. Понятно, что в условиях, когда программные средства признаны продукцией производственно-технического назначения,    такое    неверное    понимание    программирования    как

деятельности будет существенно тормозить развитие производства программ. Р. Гантер считает, что это вызвано тем, что большинство программистов имели математическое, а не инженерное образование».«В     последнее    время     положение    существенно    изменилось. В  литературе стали обсуждаться проблемы промышленного производства программ, появились технологии программирования, ориентированные на инженерный стиль мышления».«Прежде        чем        переносить        промышленные        стандарты в программирование, следует конкретно определить такие понятия, как изделие, инструмент, технология применительно к производству программных средств».«Прежде, чем использовать в программировании промышленные стандарты и методологию изготовления, следует доказать, что деятельность программиста есть именно изготовление, а не транспортировка, например».«Программное изделие ‒ это не текст программы, а совокупность понятий,  которые  во  время  выполнения  программы  «оживают» и существуют как физические объекты. Такая концепция позволяет по-новому взглянуть на деятельность программистов».«Эта   деятельность  состоит  из   двух   частей   –   конструкторской и    технологической.    Конструкторская    деятельность    заканчивается с утверждением спецификаций: понятия составляющие изделие, определены и определены связи между ними. Технологическая деятельность      (собственно      программирование)      заключается в описании технологии изготовления этих понятий.«По своей природе программа (т.е. набор инструкций) гораздо ближе   к    технологии   (точнее,   к    описанию   технологического

процесса), чем к изделию. Если считать её не изделием, а технологией,многие акценты расставляются по-другому:Деятельность программиста не есть изготовление. Он не сборщик, а технолог. В частности, это означает, что для оценки производительности труда не нужно искать способ оценки количества продукции, выпускаемой программистом, поскольку никакая продукция не производится. Нужно установить категории сложности, как это принято у технологов [2]Продукт   труда   коллектива   программистов   ‒   не   изделие, а технологическая схема, и товарные свойства этого продукта ‒ не товарные свойства этого изделия, а товарные свойства технологии. Это, по-видимому, снимает многие правовые проблемы, а также проблемы ценообразования.Собственно   производство   продукции   происходит   не   в   ВЦразработчика, а в ВЦ пользователя».«Программирование есть часть индустрии информации, занимающаяся разработкой и внедрением технологических процессов переработки  информации.  Продукт  труда  коллектива  программистов есть технологическая схема конкретного участка производства, включающая в себя как описание автоматических процессов (программы), так и ручные операции».9.          Окулов  С.  М.  О  понятии  «когнитивная  информатика». http://www.ict.edu.ru/ft/002299/about_cogi.pdf.«Понятие «интеллект» как одну из предельных абстракций трудно определить. Современная точка зрения сводится к тому, что интеллект не является некой единой унитарной конструкцией. Считается, что интеллект есть некая суперпозиция всех его многообразных форм: сенсомоторных,     образных,     вербальных,     знаково-символических,

дискурсивных и пр. С интеллектом связаны способности формировать понятия, рассуждать, решать задачи (в том числе и творческие), запоминать и воспринимать (высшие формы познания человеком действительности).   Однако   определять   нечто   через   его   свойства, конечно, допустимо, но, в соответствии с современной трактовкой понятия когнитивными психологами, считаем, что интеллект есть некая психическая реальность и обладает, как нечто целое, определенными связями, структурой, которые не  определяются отдельными свойствами».«Программирование  можно  рассматривать  как  «инструмент»развития интеллекта, т.к.:  присутствует работа в реальном масштабе времени;  присутствует работа с динамическими моделями (программа –это динамическая модель конкретной задачи); создаются  условия  для  реализации  прохождения  любого познавательного процесса по «восходящей спирали» (отладка программы, её последовательное уточнение имитирует этот процесс)».«Программирование является одной из немногих сфер деятельности человека, в которой ему, не вставая из-за рабочего стола, приходится иметь  дело  со  сверхсложными  системами.  Деятельность,  связанная с разработкой сверхсложных систем, принципиально отличается от деятельности, например, математика при решении сложной творческой задачи. Отличие программы от любой даже сложной механической системы в том, что число взаимодействующих частей в программе настолько велико, что не поддается никакому разумному объяснению и проверить работу программы, перебрать все возможные способы взаимодействия ее частей немыслимо даже на сверхбыстродействующих компьютерах в разумные сроки».

10.  Г.П. Щедровицкий. Концепция программирования.«Программирование представляет собой сложный полифонический процесс и в силу этого может быть представлено только          в многомерных          полипроцессуальных          схемах. Полифоничность и многомерность программирования проявляется уже в том,  что  оно  требует  от участников  работы  по программированию включения  сразу  многих  интеллектуальных  функций  и процессов ‒ понимания,   рефлексии,   мышления,   мысли-коммуникации ‒   и в силу этого   может   быть   представлено   только   на базе   полной   схемы мыследеятельности, разделяющей и, одновременно, объединяющей все эти интеллектуальные функции и процессы».«Чтобы попытаться зафиксировать полифоничность процессов программирования на уровне знаний и мысли-коммуникации мы можем воспользоваться многомерными таблицами, сквозь которые, образно говоря,  протекает  сразу  много  разных  процессов,  развертывающихся в разных направлениях.Для   начала,   чтобы   задать   основу,   мы можем   воспользоваться двумерной таблицей, которая развертывается в двух направлениях: слева направо в каждой строке таблицы и сверху вниз по строкам (рис. 2.1).Работая на этой схеме, мы все время должны помнить, что она, во- первых, фиксирует отнюдь не процесс программировании как таковой, а только результат или продукт процесса программирования (хотя и сам этот результат представлен процессуально), можно сказать, что она фиксирует   необходимую   нормативную   форму   этого   процесса, а во-вторых, что поверх двух процессов, заключенных внутрь таблицы, на ней   могут   и должны   развертываться   еще   и другие   процессы, в частности, итеративный процесс возврата с нижних строк в верхние

 

 
и «зашнуровка»         всех     элементов      таблицы         в одно функционально связанное целое».Рис. 2.1. Формальная схема программирования

«Непосредственным         поводом         для          начала         работы по программированию служит постановка задания перед коллективом исполнителей.Это   задание  должно   быть   понято   и соответствующим  образом истолковано.      Это       понимание       и истолкование      производятся исполнителями  на основе   их опыта   практической  работы   и общего мировоззрения     и, следовательно,     зависят     от широты     кругозора и способностей           каждого            индивида,            осуществляющего программирование. Широта кругозора и способности индивида не могут быть     заменены    никакими    методиками    и могут     подкрепляться методологическим образованием только в том случая, если последнее несет  в себе  полное  мировоззрение.  Роль  схемы  программирования, представленной    на рис.    2.1,    является,    таким    образом,    сугубо вспомогательной:     она     фиксирует     форму,     в которой     должны откладываться  и закрепляться  продукты  программирования,  и в этом плане   может   служить   при    определении   и корректировке   целей программирующей работы и материала, к анализу которого мы должны обращаться».«Задачная  организация  работ ‒  путь  достаточно  традиционный. В этом     случае     мы стремимся     закончить     три     первых     строки программирования предельно четким определением целей всей разработки,        и начинаем        переводить        цели        в стандартные и по возможности  уже  хорошо  отработанные  задачи.  Поэтому  само развертывание      целей      и анализ      каждой      из них,      разложение их на составляющие     подцели     продолжается     до тех     пор,     пока мы не выходим  на цели,  которые  можно  будет  отождествлять  с уже известными, стандартными, или, как обычно говорят, корректно сформулированными задачами.

Это   означает,  что   каждую  из полученных  целей   мы связываем с определенными   средствами   и методами   ее достижения,   или,   как принято сейчас говорить, способом действия. Этим, собственно говоря, задача и отличается от цели. Цель, в лучшем случае, достаточно точно указывает   на вид   того   продукта,   который   мы должны   получить в результате  работы.  Задача,  в противоположность  цели,  содержит еще указание на способ действия, или способ мыследействования, посредством которого она обязательно достигается, или, как обычно говорят, решается.«Принципиально  иной  является,  стратегия  проблематизации. Избирая      ее, мы стремимся      закончить      три      первых      строки программирования     уже     не формулировками     унитарных     целей, а восстановлением     такой     ситуации,     в которой     развертываются противоречия   и даже   прямые   конфликты   между   участниками общей   работы   ‒   конфликты   в определении   целей,   в оценке ситуации,  в ответах  на вопросы,  что  надо  делать  и к чему  надо стремиться.  В рамках  этой  стратегии  мы стараемся  предельно  точно восстановить и описать конфликтную или противоречивую ситуацию, и в самих  этих  противоречиях и конфликтах видим  знак,  или  сигнал, стоящих    за ними    проблем.    Сама    квалификация    ситуации    как противоречивой  или   конфликтной   запрещает   нам   сосредоточиться на тех или иных целях, сформулированных действующими участниками, и переводить их в задачи. Вместо этого мы обязаны брать в качестве новых единиц для анализа связки противоречащих (конфликтующих)        целей,        или        позиций,        и объявлять их феноменальными выражениями проблем. Сама ситуация в целом объявляется нами проблемной».

«Ориентация      на работу       в рамках       задачной      организации предопределяет  выбор  стратегии  программирования.  Если  мы можем допустить, что все цели, вытекающие из задания, могут быть переведены в задачи, то мы дальше, получив набор целей в сложившейся ситуации, привлекаем  арсенал  известных  нам  задач  с их способами  решения и путем    перебора    ищем    для    каждой    уточненной    нами    цели соответствующую  ей задачу.  Не получилось  первое  отождествление, мы начинаем  искать  второе,  третье  и т.д.  и при  этом  так  изменяем и трансформируем цели, чтобы обязательно подогнать их под известные нам задачи».«Проблема   не может    быть    отождествлена   с задачей.    Но если мы поняли, что задача отличается от проблемы тем, что имеет способ своего   решения,   то мы можем   конструктивно   перевести   проблему в задачу, если поймем, что надо достроить проблему новыми средствами и методами решения ее как задачи. Само по себе это банально. Но если мы можем сделать это принципом своей мыслительной работы и сможем переходить       от объектов       нашей       мысли       к конструктивному развертыванию     средств     и методов     нашей     мыследеятельности, то мы будем легко и просто решать проблемы».Основные  результаты  и продукты  программирования  выступают в четырех разных формах: (1) в виде иерархированной структуры целей, (2) в виде       иерархированной       структуры       проблем,       (3) в виде иерархированной    структуры    задач    и (4) в виде    иерархированной структуры    работ.    Каждая    из этих    структур    создается ‒    и это определяется в первую очередь логико-методологической организацией процессов   разработки    ‒   как    программа   и предназначается   для использования  в качестве  программы.  Последнее,  конечно,  зависит от отношения пользователей, от того, в какой роли и в каком качестве

они  будут  принимать  эти  структуры.  Но общее  правило  гласит,  что оптимальными  являются  те программы,  которые  создаются  самими будущими  пользователями  или,  во всяком  случае,  при  их активном участии.Вместе   с тем,   можно   сказать,   что   эти   четыре   вида   структур, объединенные общим для всех них процессом разработки, т.е. единым процессом  программирования,  образуют  одну  и единую  программу организации комплексных работ, или коллективной мыследеятельности. Рядом с этими основными продуктами в структуру единой программы входят еще программа тем и иерархированная структура ситуаций. Все названные   структуры   являются   чисто   логическими   и не содержат ни материальных,   ни временных   показателей.   Поэтому   все   схемы, определяющие  способы  реализации  программ  в мыследеятельности, отделяются    от самих    программ    и выносятся    в их реализационное сопровождение».Практическим подтверждением точки зрения на программирование с позиции полифоничности и многомерности его осуществления может служить мастер-методология Rational Unified Process (RUP) [9], созданная для коллективной разработки систем, интенсивно использующих программное обеспечение. Образное представление RUP в виде системы потоков работ, приведено на рис. 2.2.

РеализацияОсновные потоки работ процесса: СТАДИИНачало       Уточнение     Конструирование     Переход

Бизнес моделированиеТребованияАнализ и проектированиеВыполнениеТестированиеРазвёртываниеОсновные потоки работ поддержки:

Управление конфигурац. и изменениямиУправление проектомСреда Итерации       1          2          n n+1      ... m         m+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 
Подпись: -83-ИтерацииРис. 2.2. Управление потоками работ в RUP

2.1.3. Анализ специфики программированияПриведенные       в          предыдущем  параграфе            толкования«программирования» как словоупотребления, его определения как понятия и ряд точек зрения на программирования как особый вид деятельности, позволяют отметить следующее:  программирование является специфическим видом деятельности, в основе которого лежит особая форма организации проблемного мышления и деятельности, нацеленных на построение программ действий;  содержание    программирования    как    деятельности    связано с решениями задач, причём в условиях, когда доступны определённое множество конструктов и определённое множество операций для комбинирования конструктами; в наиболее общем задачная организация работ определяется исходной    задачной    ситуацией,    представление   которой    должно в   обязательном   порядке   раскрыть   потенциальные   противоречия и конфликты целевых ориентиров активности субъекта (учитывая такую особенность, исходную задачную ситуацию часто называют проблемной ситуацией в многозадачных структуризациях деятельности); существенное     место     в     программировании     занимает лингвистический фронт работ, включающий создание подходящего языка задач как для их представления и поиска решения, так и для построения      текстов,       управляющих      исполнением      решения в оговоренных условиях;  в программировании, как и в любой деятельности, используются инструменты,  в  числе  которых  может  быть  задействован компьютерный инструментарий, но это не является обязательным;

 программирование  разнопланово  и  в  его  осуществлении полезны      различные  интерпретации,  в   том   числе   используемые в производстве, науке и искусстве; в аналогиях с наукой и искусством проявляется творческий характер программирования, в том числе близкий к искусству слова; в  производственных  интерпретациях  раскрывается  то,  что продукция программирования имеет сходство с результатами труда технологов, создающих программы действий, исполнение которых приводит к созданию продуктов производства; программирование сложный деятельностный процесс, который развёртывается параллельно или псевдопараллельно по ряду деятельностных    линий    (рис.    2.3),    образующих    согласованноеинтегральное целое.tРис. 2.3. Распараллеливание потоков работЗавершая пункт, отметим, что в оснащении программирования инструментами наблюдается тенденция создании инструментов для расширяющегося круга их пользователей.