Программа. Информатика ключевой предмет современной школы программирование
Скачать 0.53 Mb.
|
Глава 1. ИНФОРМАТИКА - КЛЮЧЕВОЙ ПРЕДМЕТ СОВРЕМЕННОЙ ШКОЛЫ1.1. ПрограммированиеВрач, инженер-строитель и программист спорили о том, чья профессия древнее. Врач заметил: «В Библии сказано, что Бог сотворил Еву из ребра Адама. Такая операция может быть проведена только хирургом, поэтому я по праву могу утверждать, что моя профессия самая древняя в мире». Тут вмешался строитель и сказал: «Но еще раньше Бог сотворил небо и землю из хаоса. Это первое и, несомненно, наиболее выдающееся применение строительной инженерии. Поэтому, дорогой доктор, Вы не правы. Моя профессия самая древняя в мире». Программист при этих словах откинулся в кресле, загадочно улыбнулся и произнес: «Да, но кто, как вы думаете, сотворил хаос?» Бруч Г.Объектно - ориентированное проектирование с примерами применения. - М.: Конкорд, 1992. Вводные замечания. Вопросы: что такое программирование, кто такой программист? Уточним вопрос. Является ли человек, умеющий разрабатывать программы средней сложности, например на языке программирования Бейсик, программистом? В работе [16] определено: «Основными видами человеческой интеллектуальной деятельности, изучаемой в информатике, являются: математическое моделирование (фиксация результатов познавательного процесса в виде математической модели); алгоритмизация (реализация причинно-следственных связей и других закономерностей в виде направленного процесса обработки информации по формальным правилам); программирование (реализация алгоритма на ЭВМ); выполнение вычислительного эксперимента (получение нового знания об изучаемом явлении или объекте с помощью вычисления на ЭВМ); решение конкретных задач, относящихся к кругу объектов и явлений, описываемых исходной моделью». Академик А.П. Ершов говорил «о программировании, как второй грамотности», а вслед за ним практически все авторы современных учебников по информатике вводят разделы программирования. Следовательно, ответ положительный - «да». Итак, получается, что школьник, уверенно пишущий программы на одном, а может быть, и нескольких языках программирования, является программистом. Мы не будем говорить об уровне профессионализма, суть от этого не меняется (главное - ответ положительный). Хочется сказать «нет»и еще раз «нет». Знание математики в объеме школьной программы не говорит о том, что человек является математиком. Знание основ программирования не делает из человека программиста. В этом случае для чего необходимо изучение основ программирования? Может быть, справедлива точка зрения [3], что «изложенная модель постепенного растворения информатики (а у нас все программисты) в других предметах представляется наиболее перспективной», или утверждение о том, что нашему обществу не требуется такое количество программистов, или сведение информатики к изучению только очередных «букетов» стандартного прикладного программного обеспечения. Попытаемся опровергнуть эти точки зрения, и, так как образовательная информатика является определенным временным «срезом» информатики - как науки и, главное, информатики - как отрасли производства, без исторического экскурса не обойтись. Программным проектам присуща сложность, что является отнюдь не случайным свойством, а скорее необходимым. Всю историю развития технологии программирования можно рассматривать под углом преодоления трудностей (хаоса) на пути создания сложных систем. Это развитие, как любое развитие, шло и идет по спирали (более детально об этом в следующем параграфе «Парадигмы программирования»). Каждый виток определен своими принципами декомпозиции, абстрагирования и иерархии. Определимся с тем, какие по сложности бывают программы. Согласно [ 10]:
Вопрос. Есть ли школьники или студенты, написавшие за время обучения программу (хотя бы одну) средней сложности? Есть, но их количество несопоставимо с числом обучаемых. Назовем ли мы человека столяром только по его умению изготавливать ножки для стульев и столов различного типа или по его умению забивать гвозди молотками различной тяжести? Вряд ли. И вряд ли мы доверим свою жизнь летчику, умеющему только поднимать самолет в воздух. В 70-х годах считалось [11], что программный проект должен пройти через следующую цепочку специалистов: конечный пользователь (автор исходной задачи и в ряде случаев заказчик соответствующего программного проекта); системный аналитик (преобразует цели, назначение, технические характеристики и условия правильности решения в общие формальные требования на программный проект); системный аналитик-программист (преобразует общие формальные требования в детальные спецификации на отдельные программы, участвует в разработке логической структуры и т. д.); прикладной программист (преобразует спецификации на программу в логическую структуру программных модулей, а затем в программный код); системный программист (ведет сопровождение операционной системы, разрабатывает инструментальные средства для поддержки процесса разработки программ, обеспечивает сопряжение с операционной системой драйверов нестандартных внешних устройств и т. д.). Динамика структуры трудозатрат по фазам реализации программного проекта в 1970 -1980 гг. имела вид [7]: В настоящее время [7] половина общей численности мирового корпуса программистов - системные аналитики, которые нередко вообще не пишут ни одной строчки программного кода. В таком случае кто такой программист? Если человек, ответственный за все фазы прохождения программного проекта (кроме, разумеется, фазы конечного пользователя), то только 3% своего времени он занимается той деятельностью, которая согласно [16] называется программированием. Итак, видимо, следует считать программистом и специалиста, связанного с реализацией программных проектов, но не знающего языков программирования (утрированный случай с целью подчеркнуть данную мысль). Программирование как интеллектуальная деятельность, как технология в своем развитии прошло различные этапы. Первый этап. Программисты работают на уровне регистров и ячеек памяти ЭВМ (отдельных деталей), программируются, в основном, математические формулы, решаются задачи численного анализа. Второй этап. Рост сложности программ. Невозможность работать по-старому. Развитие языков высокого уровня, структурное проектирование, длительные усилия специалистов по формализации. Например, в [13] сказано, что «программирование как научная дисциплина является частью прикладной математики, а как вид деятельности - разновидностью математической практики, и по своей природе основания программирования являются логико-математическими». Усилиями классиков программирования Э. Дейкстрой [8], Ч. Хоаром[20], Д. Кнутом, Э. Йоданом [10] и др. разрабатываются формальные аспекты науки программирования. Предложена технологическая цепочка, рассмотренная выше. Однако после 10 - 15 лет значительных усилий осознано, что цена этого слишком велика. Невозможно на бумаге создать сложные информационные конструкции, усилиями мысли заставлять их при этом взаимодействовать с реальным миром (во всяком случае так, как этот мир понимается). Процент задач, для которых принципиально можно разработать формально безупречные спецификации, в общем объеме прикладного программного обеспечения снижается с расширением сфер применения ЭВМ. И вслед за Г.Р. Громовым можно сказать, что «было бы столь же трудно ожидать, что воспринимаемые буквально математические приемы, иллюстративные рекомендации и метафорические научные прогнозы классиков программирования могли бы оказаться практически более полезны, чем, например, использование в клинической практике ярких медицинских зарисовок А.П. Чехова». К программированию, по мнению Г. Л. Смоляна [18], «вполне применим тезис Д. Гильберта, утверждавшего, что всякая физическая или математическая теория проходит три фазы развития: наивную, формальную и критическую». Программирование как инженерная деятельность, как отрасль производства находится в последней фазе. Образовательная информатика пытается разродиться от формализма. Явная видимость его недостаточности и отсутствие, в первом приближении, достойной замены, приводит к отчаянным «броскам», например, в направлении чисто прикладного программного обеспечения. Третий этап. Дальнейшее развитие программирования происходило в двух направлениях, связанных между собой: персональные вычисления и разработка инструментальных сред для создания программных проектов, реализующих на новом витке спирали принципы декомпозиции, абстракции и иерархии. Во-первых, это разработка объектно-ориентированного подхода, от его первых версий, например в Турбо - Паскале 5.5, до Object Pascal среды Delphi, который определяет новый уровень развития перечисленных принципов. Во-вторых, создание визуальных сред быстрой разработки проектов (Delphi), основанных на компонентной (элементе иерархии) архитектуре. Разработка, основанная на компонентах, оказывается следующим эволюционным шагом в развитии методов программирования. Delphi по сравнению с другими существующими средами программирования дает возможность исследовать различные варианты программного проекта, делать ошибки прежде, чем будет принято определенное решение. Другими словами, может быть, впервые у программистов появилась возможность начинать разработку не с традиционных попыток составления формальных спецификаций, а с разработки макета. Макет программы - информационный объект, единственное назначение которого дать возможность пользователю и программисту выработать единое понимание того, что должна делать программа, ибо «определить, что хочет пользователь, в отличие от того, что он говорит, что он хочет, - это и есть настоящее искусство». Книга Д. Пойа «Математическое открытие» начинается со следующего утверждения Лейбница: «Метод решения хорош, если с самого начала мы можем предвидеть - и далее подтвердить это, - что, следуя этому методу, мы достигнем цели». В технологии программирования создание макетов средствами визуального программирования - единственный на сегодня метод, удовлетворяющий критерию Лейбница. Программист - это специалист, своей деятельностью охватывающий все циклы (фазы) прохождения программных проектов. При этом доля (процент) времени, когда он занимается кодированием и автономной (программированием) отладкой программ, минимальна (может совсем отсутствовать). Обучение написанию простых программ на одном из языков программирования является не более чем пропедевтикой программирования. Знание языков программирования не делает из человека программиста. |