Учебное пособие по курсу «Технология программирования»

Введение

Учебное пособие по курсу «Технология программирования» написано на основе одноимённого курса лекций читаемых автором в Ухтинском Государственном Техническом Университете. Следует отметить, что, несмотря на огромное количество книг по программированию, руководства посвящённого именно технологии программирования нет. С одной стороны, элементы курса есть в любой программисткой литературе, с другой стороны, множество вопросов, взаимосвязей и особенностей программирования именно в свете технологии нигде не освещается и каждый программист по мере развития вновь находит всё множество приёмов и методов. Это хорошо, когда он попал в крепкую команду программистов, где есть чему и у кого учиться, но гораздо чаще, начинающий специалист оказывается в положении человека обучаемого плаванию «методом бросания в холодную воду».
Всякий, кто пытался на Basic реализовать серьёзную задачу, а не одноразовую программу, понимает к чему приводит подобное обучение.

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

Для большинства термин «производство программ» (программного обеспечения) звучит достаточно дико, хотя никто не возражает против «производства кино», например. Тем не менее, существует процесс производства программ. Автор ещё раз подчёркивает, что это именно производство. Раз существует процесс производства, то существует и его технология. Таким образом, «технология программирования» изучает методы, способы, приемы, используемые при производстве программ или программного обеспечения. Можно и по-другому: технология программирования изучает процесс производства программного обеспечения.

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

У вдумчивого программиста уже при изучении программирования возникает много вопросов: почему это сделано именно так, а не иначе? Можно ли выполнить это по другому и к чему это приведёт? Большинство подобных вопросов рассматриваются в технологии производства. Можно ли в одиночку реализовать большой комплекс программного обеспечения? Можно! (?) К чему это приведёт? Чем отличается подобный комплекс от комплекса ПО реализованного коллективом программистов? Случайны ли эти отличия или так неотвратимо будет всегда? С одной стороны, ответ лежит на поверхности: все знают отличия кустарного продукта от промышленного. С другой стороны, любому специалисту приходится делать выбор между собственной реализацией поставленной проблемы и приобретением готового программного продукта. Заметим, что окончательный ответ на этот вопрос лежит скорее в области этики программирования, а не технологии, однако, ответы на многие вопросы этики программиста тесно связаны с технологией программирования.

За время своего существования, шестидесятые годы XX века – начало XXI века, программирование сильно изменилось. Автор имеет в своём активе программу, написанную в коде ЭВМ «Минск-22». Сравните программирование в коде с программированием в Visual C++ (или C++ Builder) под Windows. Так ли существенно изменилась сама методология программирования? Неужели автору приходилось учиться «с нуля» каждые десять лет? Если все эти вопросы рассмотреть в контексте технологии программирования, то мы с удивлением обнаружим, что сама основа, распределение в памяти машины и на внешних устройствах ЭВМ команд и данных, осталась, хотя теперь, средний программист стоит значительно дальше от этого процесса, чем раньше. Такая отстранённость программиста от процесса «технической сборки программы» создаёт иллюзию ненужности знания «технических деталей», не говоря уже о понимании сути происходящего. Автор достаточно далёк от позиции обязательного требования досконального знания всех технических деталей. Сегодня это вряд ли возможно. Это в добрые семидесятые прошлого века программисты могли позволить себе быть универсалами. Однако, автор считает, что только понимание сути процесса создания программы позволяет «не знать» некоторых технических деталей. Процесс же изучается только в технологии и нигде более.

Вообще в программировании на сегодня (начало XXI века) сложилась парадоксальная ситуация. Само по себе программирование стало существенно сложнее (ООП – объектно-ориентированное программирование и многокомпонентное программирование), но, благодаря визуальным средствам программирования (а они приходят и в Unix), создалась иллюзия простоты и доступности. Подобная ситуация приводит к широкому появлению «эникейщиков» (press any key) и «программистов», работающих на уровне чуда! Частично такая ситуация создалась стараниями рекламных агентств, представляющих продаваемое ПО, частично фирмами его производящих, сознательно полностью не документирующих производимое ПО. Но в основном, ситуация сложилась стараниями самих программистов предельно упрощающих себе работу и перекладывающих рутинные функции на машину. Увы, прогресс имеет и оборотную сторону. С одной стороны, программист пишет машинно-независимую программу, но с другой стороны, он становится дальше от машины. С одной стороны, программист мыслит в терминах объектов, их свойств и методов, с другой стороны, его программа становится более длинной и менее оптимальной. За всё надо чем-то платить.

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

Всё развитие технологии программирования можно и нужно рассматривать с точки зрения увеличения производительности труда, как отдельных программистов, так и коллективов программистов. Только тогда, когда происходило увеличение производительности труда, новые методы вытесняли старые. Не следует забывать, что увеличивать можно производительность труда, как программиста, так и пользователя. Последнее сделал купец Билл Гейтс, выпустив свой Office и Windows. Теперь, как бы ни ругали программисты Windows и Office, но фактическим стандартом у чиновников является Word, Excel и Windows. Можно, конечно, ссылаться на безграмотность чиновников (в программировании), но отрицать увеличение производительности труда чиновника невозможно. От себя заметим, что плохо не то, что Microsoft выпустила вышеуказанные продукты, плохо то, что Билл Гейтс их начал продавать полусырыми. Кстати, почти одновременно с указанными событиями в машиностроительном и проектном черчении прошло победное шествие такой программы как AutoCad фирмы AutoDesk и, заметьте, почти полное отсутствие нареканий!

Автор считает, что для студента второкурсника технология программирования трудный предмет. Как правило, у студента нет ни одного реализованного проекта, понимание сути программирования либо отсутствует, либо ещё неразвито. Поэтому многие утверждения и понятия технологии для студента второкурсника достаточно абстрактны. Как это ни парадоксально, но именно технологию программирования, предмет, наполненный эмпирикой, студенты воспринимают как нечто оторванное от жизни. Многие требования технологии совершенно непонятны, тем более, что современные средства программирования позволяют всё делать как раз наоборот. Конечно, лучше всего читать технологию на четвёртом курсе, когда у нормального студента за спиной три – четыре курсовых проекта. На всё это автор напоминает старую истину: «Умные люди учатся на ошибках других». Безусловно, мы сделаем не одну свою ошибку, но давайте стремится следовать этому утверждению.

Существует и прямо противоположное заблуждение: рассматривать технологию программирования как некий свод волшебных правил и заклинаний, применив которые любой получит работоспособную программу. Увы. В математике, литературе, программировании, да и вообще в любой отрасли, конечно же, существуют свои методы и приёмы, а также условия их применения. Достаточно открыть, например, книгу Д.Пойа “Математическое открытие” (1978г.). Однако, прочитав эту замечательную книгу, мы не увидим в ней рецепта математического открытия, по той простой причине, что такого рецепта не существует в реальности. Нет волшебных пассов, слов заклинаний или приёмов позволяющих делать математические открытия. Точно также нет их и в программировании. Какие методы и приёмы использовать при написании конкретной программы решает такой неформализованный ресурс, как программист. Только от его знаний, умения, предпочтений и способностей зависят характеристики программы. Методы технологии могут существенно облегчить и ускорить разработку программы, но сами по себе эти методы не приводят к появлению «правильных» программ.

Автор предполагает, что студент уже знает хотя бы один язык программирования и умеет писать на нём, пусть небольшие, но работающие программы. Невозможно давать технологию программирования без связи с конкретными языками. Наибольшее число ссылок приведено на языках “C” и “C++”. Во-первых, эти языки, де-факто, стали стандартом. Во-вторых, наиболее последовательно идеи объектно-ориентированного программирования (ООП) проводятся именно в “C++”, а без ООП нет совремённой технологии.

В завершении может быть сделана только одна рекомендация:

программист – программируй!

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

1. Краткая история технологии программирования

(О законности термина «технология программирования»)

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

Параллель между кино и программами гораздо более широкая, чем многим может показаться, например: и кино и программы являются уникальными творческими объектами. Можно провести параллели как между самими объектами (кино – программа), так и между технологиями производства. По многим причинам в нашу задачу не входит проведение этой параллели.

Конечно, во введении нет возможности разобраться во множестве вопросов. Но, произнося термин «технология программирования» и утверждая существование производства программ, необходимо ясно представлять, что такое программа и программирование. Нам надо знать, когда собственно появилось производство программ? Мы хотим быть инженерами! Роль ремесленника представляется для нас убогой (не следует забывать, что у многих ремесленников есть чему научиться). Роль свободного художника не всякому по плечу, да и количество необходимых свободных художников исчисляется единицами.

Итак, технология – [гр. techne – искусство, ремесло, наука + logos – понятие, учение] — совокупность знаний о способах и средствах проведения производственных процессов. (сл. “Словарь иностранных слов”, стр. 688, 1955). Подчеркнём: производственных процессов. Естественно слышать “технология обработки металлов”, “технология химических процессов”, однако “технология программирования” – несколько ненормальное сочетание. Никто не преполагает существование “технологии математики” или “технологии литературы”. Обычно, к этим областям знаний понятие “технология” не применяется. Сейчас для нас это очевидно: в этих областях нет производства. Несмотря на то, что вычислительные центры при предприятиях появились более сорока лет назад, термин производство программ обрёл право на жизнь сравнительно недавно. Это было примерно тогда, когда широкий круг пользователей стал спрашивать, где можно приобрести программы? Тем не менее, производство программ существовало уже более тридцати лет.

Определим программирование, как процесс разработки/создания программ.

Программа: также совершенно естественно определяется, как последовательность команд выполняемых центральным процессорным устройством (ЦПУ).

Отметим, что мы говорим не процессор, а центральное процессорное устройство. Во-первых, ранние ЭВМ имели центральное процессорное устройство, а не процессор. Первый процессор появился только в 1970г., а первая ЭВМ работала уже в 1943г. (Марк –1: Говард Эйкен). [Конрад Цузе – 1941]. Во-вторых, под ЦПУ понимается очень широкий класс устройств, основное свойство которых, варьировать тип, сорт, вид выходной продукции в зависимости от настройки или последовательности выполняемых команд. Собственно эта настройка или конкретная последовательность команд и являлась для этого ЦПУ программой. Роль человека при работе с этими устройствами сводилась к «вводу» программы и запуску устройства, ну и, безусловно, был процесс создания программы.

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

Однако появление уникальных технических устройств (1941 – 1943 г.г.) – ещё не появление технологии работы на них. Появление технологии программирования достаточно уникально. В определённом смысле сама «технология программирования» появилась существенно раньше появления ЭВМ! (электронных вычислительных машин).

Ещё в 1808г. Жаккар Жозеф Мари изобрёл способ задания характеристик ткани для ткацких станков. Выполнялось это при помощи особого приспособления для ткацкого станка. Принципиально оно состояло из особой доски с отверстиями. Для каждого вида ткани набиралась своя доска, которая устанавливалась на ткацком станке. Безусловно, жаккардова доска является программой, управляющей работой ткацкого станка. Процесс разработки структуры этой доски, процесс её набора очень сильно напоминает процессы программирования. Саму программу можно было реально потрогать. Конечно, ни у кого не возникал вопрос о правомерности существования термина «технология программирования». В те времена никто не рассматривал жаккардову доску, как программу.

В конце XIX века Холлерит изобрел сортировальные машины и придумал «перфокарту». На перфокартах можно было перфорировать ограниченный круг информации, только цифры и знаки «+»и «». Сортировальные машины могли «считывать» перфокарты, сортировать их, складывать или вычитать заданные колонки. Что и как складывать, сортировать и вообще какие действия с какими колонками выполнять задавалось при помощи коммутационных досок. Сортировальная машина непосредственный предшественник ЭВМ. Она уже была электрической. Коммутационная доска представляла собой рамку с набором гнёзд для подключения штекеров. Программа задавалась при помощи штекеров соединённых проводами.
Разработка схемы коммутационной доски и являлось программированием для расчетов, выполняемых на сортировальных машинах.

Для одной из первых ЭВМ, а именно Марк-1 программа набиралась специальным подключением проводов, что было достаточно трудоёмко и отнимало значительное количество времени. Хотя и здесь программирование существенно напоминало процесс набора коммутационной доски, появилось очень существенное отличие. ЭВМ Марк-1 была первой универсальной машиной. Жаккардовы станки и сортировальные машины использовались в достаточно узкой области. «Программировали» их, как правило, специалисты, ремонтирующие эти устройства,
то есть, по сегодняшним понятиям – инженеры-электроники. Специальности «программист» не могло появиться.

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

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

  1. Учебное пособие по курсу «Основы информатики и программирования» для студентов 1 курса специальности

    Учебное пособие
    Алфавит языка, Ключевые слова, Идентификатор, Типы данных (базовые, модификаторы типов), Константы, Переменная – объявление и инициализация (оператор присваивания, вычисление выражений), выражение.
  2. Учебное пособие по курсу «Организация эвм, комплексов и сетей» часть

    Учебное пособие
    Пособие предназначено для самостоятельной работы студента над курсом “Организация ЭВМ, комплексов и сетей” по первой части курса – Организация ЭВМ и систем.
  3. Учебное пособие по курсу “Распределенные вычисления” для студентов математических специальностей Запорожье 2002

    Учебное пособие
    Учебное пособие по курсу “Распределенные вычисления” для студентов математических специальностей. /Составители Д.П. Бувайло, В.А.Толок – Запорожье: ЗГУ, 2002.
  4. Учебное пособие по курсу “ Проектирование Систем электронного документооборота”

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

    Учебно-методическое пособие
    В современных условиях развития экономики, перехода к рыночным отношениям происходят качественные изменения в организации и ведении бухгалтерского учета, анализа и аудита.
  6. Учебное пособие по курсу: “Общая и возрастная психофизиология” раздел I

    Учебное пособие
    Вероятно, придет день, когда биолог, и не только он, но и физиолог протянут руку психологу и встретятся с ним в туннеле, который они взялись копать с разных сторон горы неизвестного.
  7. Учебное пособие по курсу «Налоговый учет» выполнено в соответствии с госу

    Учебное пособие
    Аннотированный каталог выпуска литературы содержит сведения о выпущенных в издательстве ВГУЭС за период с 2003–2005 гг. учебных пособий, методической, научной литературы, монографий и сборников.
  8. Учебное пособие по курсу «Моделирование электронных устройств и систем» для студентов специальности «Промышленная электроника»

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

    Учебное пособие
    В учебном пособии излагается материал по курсу «Вычислительные системы, сети и телекоммуникации» раздел «Информационно-вычислительные сети». В первой части пособия содержится базовая информация по основам сетевых технологий.

Другие похожие документы..