Современные технологии проектирования ПО в контексте теории коммуникации и метода декомпозиции

Использование родного языка для начинающих изучать программирование является традиционной практикой в процессе обучения информатики. Ей оппонирует профессиональная и научная разработка ПО, в которой Английский язык является «лингво франка». Где формальный английский — это тщательным образом выбранные имена ключевых слов и переменных, обращённые к ассоциативному и творческому мышлению на языке оригинала.

Бьерн Страуструп, отмечая близкую связь между языком, на котором мы думаем и программируем, а также между задачами и их решениями, которые можно представить в своем воображении – утверждает, что «ограничивать возможности языка только поиском ошибок программиста — в лучшем случае опасно».[1]

Т.о. современное профессиональное программирование предполагает наличие англоговорящего индивида или билингва – человека одинаково владеющего двумя языками. Здесь, на практике, мы зачастую имеем смешанное двуязычие разной степени, в силу того, что формальный английский имеет очень ограниченный словарный запас.

Социолингвистика определяет 3 степени билингвизма по возростающей: Субординативный билингвизм, Координативный билингвизм и Смешанный билингвизм. [2]

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

В аннотации к одной из известных научных методологий программирования – Литературное Программирование (Literate Programming), Дональд Кнут [3] сравнивает труд программиста с работой эссеиста, основная забота которого — экспозиция и совершенство стиля. «Такой автор, со словарем в руке, заботливо выбирает имена переменных и объясняет для чего нужна каждая из них.» Т.о. происходит усвоение формальных представлений. Клод Шенон в математической теории связи называет подобные действия сжатием, сравнивая два крайних примера избыточности английской прозы, бейсик-инглиш с огромной избыточностью и книги Джеймса Джойса. [4]

К примеру, попытка реализовать Литературное Программирование средствами бейсик-инглиш приведёт к значительному увеличению обьёма программы.

Программная инженерия (software engineering) как специальная область знания, использует формальные и гибкие методологии проектирования информационных систем (ИС) [5] развитие которых продолжается, поэтому представляет интерес описать этот процесс через доступные научные методы для того, что-бы выработать такой подход к методологиям программирования, который в контекстах «группа исследователей – объект» или «исследователь – объект» давал нам наиболее оптимальный способ решения поставленной задачи.

Для этого, абстрагируемся от конкретных реализаций многообразия инженерных методологий с позиции общей теории систем и теории коммуникации (системно-кибернетической методологии), введём 2х основных элемента – Декомпозиция и Коммуникация.
Воспользуемся следующими определениями:
Декомпозиция– это научный метод, использующий структуру задачи и позволяющий заменить решение одной большой задачи решением серии меньших задач. Наиболее часто декомпозиция проводится путем построения дерева целей и дерева функций.[6][7]

В общей теории систем доказано, что большинство систем могут быть декомпозированы на базовые представления подсистем. Таким образом, система может быть отображена в виде иерархической структуры. [6]][7]

Пример декомпозиции в XP(eXtremeProgramming)– Иерархия Пользовательских истории-задач (tasks).

Коммуникация — в теории коммуникации (системно-кибернетической методологии), это специфическая операция, характеризующая исключительно социальные системы, в ходе которой происходит перераспределение знания и незнания. Коммуникация устанавливается через синтез трех различных селекции — а именно: селекции информации, селекции сообщения этой информации и селективного понимания или непонимания сообщения и его информации. [8]
Системная теория предполагает, что Ничто не переносится. Создается избыточность в том смысле, что коммуникация порождает память.[8]

Считается, что объёмы коммуникации в успешном проекте могут занимать до 50% рабочего времени. «Только благодаря эффективным коммуникациям можно достигнуть синергетического эффекта, который отличает команду от просто группы.»[9]

Следует отметить, что эффективная коммуникация (ЭК) устанавливается только тогда, когда хотя бы один раз будет понята дифференциация сообщения и информации. Эффективность коммуникаций в жёсткой иерархической структуре маловероятна. Она напрямую связана с доброжелательностью межличностных отношений. «Не стоит ожидать плодотворного обмена информацией, если участники проекта поставлены в условия конкуренции или разделены барьерами должностной иерархии»[9]
В этом случае можно говорить о наличие сетевого принципа, подразумевающего отсутствие какого-либо подразделения исследуемой системы на вертикально выстроенные уровни. При сетевом взаимодействии активных агентов каждый из них в зависимости от ситуации и решаемой задачи может выступать как в роли управляемого субъекта, так и в роли управляющего органа [10].

Никлас Луман в теории коммуникации (системно-кибернетической методологии), утверждает, что «коммуницировать может только коммуникация и что только в сети таких коммуникаций производится то, что мы понимаем как действие.»[8]

В тоже время – история коммуникаций может быть классифицирована и структуризирована в виде иерархии, где эффективность тех или иных коммуникаций может получить оценку всех участников проекта. ( К примеру коллективная работа над ессе в Википедии )

Можно предположить, что декомпозиции и коммуникации представляют собой нисходящий и восходящий процессы, где Декомпозиция получает порождаемую Коммуникацией избыточность вариантов, что даёт возможность эфективно перенастраивать первоначальную структуру в соответствии с меняющимися требованиями. Декомпозиция воспринимается здесь, как действие, т.о. происходит самоорганизация или аутопойезис — как способ воспроизведения данной системы…

К примеру, в методологии Scrum [5] результат подобной практики называется «готовностью к изменениям».

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

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

2. В гибких методологиях — процесс создания эффективных коммуникаций перестаёт работать, из-за невозможности установить их в географически распределенной среде, больших группах, по всей видимости числом более 15 человек, и в смешанных командах из разработчиков разной квалификации.

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

Поэтому, необходим субстрат коммуникации, где может происходить встреча многих коммуникантов и одновременно — сохраняться память коммуникации и её границы [11]. Такими субстратами в нашем случае является — исходный текст программы, ТЗ, алгоритмы, описание архитектуры проекта и документация.

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

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

Пример таких парадоксов — это документы не синхронизированные с кодом, которые могут превращаться в громоздкие логически противоречивые источники неправдивой информации и вряд ли смогут применяться на практике. [12]

Использование устных обсуждений в XP(eXtremeProgramming) или формальных спецификаций в каскадном методе – это способы достичь снятия парадокса.

В свою очередь существование Английского языка как «лингво франка» вне англоговорящей среды это тоже пример самореферентной системы и удвоения реальности через создание двух ее версий.

К примеру, ТЗ составленное на родном языке заказчика надо перевести в английский язык алгоритма. Для того, чтобы задокументировать алгоритм или исходный код должна быть проделана работа, над переводом и объяснением того, что уже раскрыто в самом алгоритме или исходном коде.[12]

Обобщая сказанное, можно сделать вывод, что тексты проекта, по возможности, должны быть единым субстратом коммуникации, или литературным произведением написанным на «лингво франка» проекта, понятном всем его участникам. В этом случае на любом этапе проектирования мы в состоянии генерировать или изменять или дополнять проект в минимальном количестве раздельных субстратов. Представляется, что оптимальной альтернативой современным инженерным методологиям, таким как, например, Scrum(свалка), должна стать научная методология литературного произведения на «лингво франка» родной речи, в отличии от «лингво франка» английского языка, используемого отдельно взятым сообществом профессионалов.

Эволюция программирования должна выйти за рамки формального подхода, и стать частью родного языка, поскольку:

— для лучшего документирования программ необходимо, чтобы «её идеи были представлены в порядке, который является лучшим для человеческого понимания.»[3];
— научные методологии позволяют решать чрезвычайно сложные задачи, а, следовательно, могут применяться и в процессе обучении программированию;
— в каждом проекте аккумулируется «избыточность коммуникации», в виде истории развития проекта, дающая возможность создать базис для дальнейшей успешной доработки и развития проекта, вне зависимости от времени или первоначальной команды разработчиков.

Для решения поставленной задачи предлагается следующий подход который является совокупностью идей и методов:

1. Использование готовых и проверенных временем, решений, с открытым исходным кодом, как например LLVM GCC или подобные, что позволяет разрабатывать не-английские языки программирования, которые могут быть реализованны для всех существующих вычислительных платформ, в том числе с ограниченными ресурсами, так называемых, встраиваемых систем.
2. Сочетание неизменной модели языков программирования с практическими наработоками в интернационализации програмного обеспечения, в частности — использование обьектов и словарей ключевых слов в процессе компиляции, может рассматриваться как изменяемая грамматика синтаксического анализа.
3. Применение однозначно обратимых систем транслитерации основанных на ASCII символах, для создания механизма перевода исходного кода и документации на английский язык, что служит условием получения конкурентоспособного исходного кода.

Литература:
1. Bjarne Stroustrup. The C++ Programming Language, 4th Edition – Pearson Education, Inc. с-17.
2. Словарь социолингвистических терминов. — М.: Российская академия наук. Институт языкознания. Российская академия лингвистических наук. Ответственный редактор: доктор филологических наук В.Ю. Михальченко. 2006.
3. Literate Programming Donald E. Knuth The Computer Journal September 1983
4. Shannon C. E. A Mathematical Theory of Communication (англ.) // Bell System Technical Journal[en]: журнал. — 1948. — Vol. 27. — P. 379—423.
5. Д.В.Кознов.Введение в программную инженерию. ЧастьI. Изд-во Санкт-Петербургского ун-та, 2005 г., 43 с.
6.Павловский Ю.Н., Смирнова Т.Г. Проблема декомпозиции в математическом моделировании. – М.: ФАЗИС, 1998.
7. Метод декомпозиции в построении адаптивных гидроакустических систем. И.А. Кириченко, И.Б. Старченко. Инженерный Вестник Дона. Номер 4 (часть 1), 2012 г
8.Что такое коммуникация? – Николас Луман.
9.Психология управления программными проектами С.Архипенков
10. Новиков Д.А. Сетевые структуры и организационные системы. – М.: ИПУ РАН, 2003. – С. 4.
11.Назарчук А. В. Теория коммуникации в современной философии. —М.: Прогресс-Традиция, 2009. —С. 186—189.
12.Быстрая разработка программ. Принципы, примеры, практика Автор: Роберт К. Мартин, Джеймс В. Ньюкирк, Роберт С. Косс –Издательский дом Вильямс 2004.

Автор: astrnm

Источник

Оставить комментарий