О культуре программирования

Ещё Р. Гантер [1] заметил, что программисты с трудом усваивают концепцию программного изделия, поскольку по образованию они, как правило, не инженеры, а математики, и поэтому имеют не производственный стиль мышления, а научный. В результате задача изготовления программного изделия решается зачастую не как производственная задача, а как научная, то есть применяются методы, неадекватные реальной обстановке.

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

Поэтому целью курса технологии программирования должно быть не только изучение конкретных технологий, но и выработка правильного отношения к деятельности программиста; не столько изложение решений проблем, сколько представление самих проблем. И, так же, как в преподавании математики основная цель - не столько накопление знаний, сколько выработка математической культуры, так и в преподавании программирования основной целью должна быть выработка программистской культуры. Поэтому спецкурс, который читается на математическом факультете КрасГУ, называется не "Технология программирования", а "Культура программирования". Такое названия объясняется ещё и тем, что, кроме технологических аспектов программирования, рассматриваются ещё и психологические, этические и эстетические.

Курс читается в три этапа: индивидуальная технология, организация программистских коллективов и Р-технологии.

Основная задача первого этапа - от знакомого студентам понятия программы подняться до понятия комплексного программного продукта. Студенты убеждаются в том, что

- современное программирование - это не написание разовых программ общего пользования.

- программа является не столько средством общения человека с человеком.

- система программ - это не набор программ, а нечто более сложное

- алгоритмизация, кодирование и отладка - это не весь процесс разработки, а лишь часть его.

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

На втором этапе решаются две основные задачи:

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

- убедить студентов в том, что проблемы организации программистских коллективов не менее важны, чем проблемы организации программ.

На этом этапе подробно рассматривается проектная документация, анализируются различные способы распределения ролей в коллективе, разбирается концепция "хирургической бригады", обсуждаются проблемы сопровождения. Важно отметить, что обсуждаются реальные ситуации из практики, проблемы конкретного коллективизма, причём признаётся, что многие проблемы ещё не решены удовлетворительно. Это делается сознательно - студенты должны понимать, что это проблемы живые, насущные и, главное, почти нерешённые, что всё то, что рассказывается на спецкурсе - не абстракция, а реальность, которая их ждёт через несколько лет. К концу второго этапа студенты уже осознают необходимость промышленного подхода и понимают, что центр проблем находится в организации программистских коллективов. Теперь, наконец, они готовы к восприятию Р-технологии.

Третий этап - Р-технология. Оказывается, что она решает многие проблемы, поднятые на первых двух этапах, и особенно - организационные проблемы, что она максимально удовлетворяет требованиям именно промышленного производства программ, что она содержит в себе больше прогрессивных технологий, но здесь они значительно усовершенствованы и объединены на единой основе. Изложение ведётся по [2]. Работа РТК-2 демонстрируется в терминальном классе.

Литература

1. Р. Гантер. Методы управления проектированием программного обеспечения. М.,Мир, 1981

2. И. В. Вельбицкий. Технология программирования. Киев, "Техника", 1984.


© Алексей Бабий 1986