- •Основы алгоритмизации и языков программирования
- •0. Введение
- •1. Понятие алгоритма и программы. Свойства алгоритма.
- •3. Этапы разработки программы
- •4.1 Язык записи конечного алгоритма и язык разработки алгоритма
- •5. Классификация языков программирования
- •Краткая история языков программирования
- •6.1. Восходящий подход
- •6.3 Объектно-ориентированный подход
- •7. Данные
- •7.2 Понятие типа объекта в программе. Концепция типа данных
Основы алгоритмизации и языков программирования
0. Введение
Несколько замечаний в качестве введения:
1 замечание: методология программирования на ЭВМ по мнению классиков (Турский В. «Методология программирования») включает три компонента, которые почти невозможно отделить друг от друга:
1.наука
2.ремесло
3.фольклор (мифология)
Научный компонент (методики, технологии и обобщения) объясняет, что надо делать и чего надо избегать в программировании, чтобы получать правильные и эффективные программы. Он, показывает (демонстрирует), например, следующее:
пути и способы приведения сложной задачи к набору более простых, для которых решение уже известно или не представляет труда (процесс сведения сложной задачи к набору простых называется декомпозицией);
объясняет, как достичь поставленной цели (решить задачу, написать программу, собрать программу из частей), применяя для сборки (при сборке) строго определенный набор правил к простейшим основным конструктивным элементам языка или программы (процесс сборки называется синтезом).
объясняет, как получить программу с заданными свойствами за счет знаний о том, как свойства программы в целом выводятся из свойств отдельных компонентов, ее составляющих.
Научный компонент - это в настоящее время то, что называется технология программирования (программная инженерия)
Ремесло программирования - это традиции, передаваемые от мастера к ученику, они представляют собой эмпирически найденные (без теоретического обоснования) правила хорошего программирования (какую конструкцию языка когда лучше использовать).
Фольклор описывает ритуалы и мифы, окружающие процесс программирования (то, что мы узнаем на работе из разговоров во время перекуров, от знакомых при встречах и т.д.).
2 замечание: почти всех представителей профессий летчика, хирурга и программиста объединяет общий стиль (характер) их работы: необходимость (и должна быть способность) уверенно действовать при значительной доле неопределенности в исходных спецификациях (требованиях) на задачу (программу у программиста) и резко изменяющихся условий ее решения. Например, при обсуждении новой программы программисту кажется (точнее, он уверен), что заказчику нужно нечто, назовем это первое. При утверждении ТЗ на первое накладываются кое-какие ограничения и допущения, исходная задача переформулируется (чтобы она стала менее неопределенной) и сформулированные к выходному продукту требования уже описывают нечто второе. При написании программы у программиста получается не все из задуманного и на выходе получается нечто третье. При сдаче проекта заказчику, наконец, выясняется, что он хотел получить нечто четвертое (см. рисунок с качелями). Для того, чтобы избежать такой ситуации, необходимо:
- тщательно слушать, анализировать и учитывать пожелания заказчика;
- по завершении каждого этапа проверять, делается ли то, что нужно заказчику.
В бригаде программистов (делающей проект) для работы с заказчиком и определения требований к ПО (спецификаций) к программам (по ним программисты - кодировщики их будут писать) есть аналитик (в нашей стране их называют постановщиками), а для проверки разрабатываемого ПО есть тестировщики.
3 замечание: производительность труда всех людей из коллектива программистов (включая постановщиков) до сих пор часто оценивается числом отлаженных строк кода программы в день. Здесь имеется непонимание: а) «индийский» стиль программирования (индусский код) = писать большое число простых операторов вместо сложных (не использовать подпрограммы, вместо одного Case использовать несколько IF); б) аналитики нередко вообще не пишут ни одной строки кода программы (и не обязаны этого делать).
4 замечание: на этапе проектирования программы от программиста требуется немалая изобретательность, а этому вряд ли можно научить. Но программирование это одновременно и техническая задача, для решения которой можно сформулировать технологические правила и им учить (см. выше – научный компонент = технология программирования).
5 замечание: программирование – это одна из немногих дисциплин, которая заставляет как бы заглядывать в будущее (а) при написании программы; б) при анализе, как будет выполняться программа во времени; в) при ее отладке; г) при разбиении сложной задачи на набор простых).
Рисунок - Как понимают задачу Заказчик, Постановщик и Программист
