Предисловие
Это пособие основывается на конспектах лекций, которые читались на первых курсах ММФ Новосибирского госуниверситета в течении последних??. Отправной точкой в развитии этого курса являлось пособие «Современные средства и методы программирования», написанное в 19?? году М.М.Бежановой и И.В.Поттосиным, которые в свою очередь стояли у истоков преподавания программирования в НГУ. Понятно, что многое поменялось за это время: появлялись и сходили на нет языки программирования, кардинально повысилась мощность и, что ещё важнее, доступность вычислительных машин, формировались и приобретали первостепенное значение новые области применения. Как следствие, изменялось и представление о профессиональных знаниях, умениях и навыках, которыми должны обладать программисты. Поэтому данный курс не претендует ни на полноту, ни на соответствие последним тенденциям современного программирования, а ставит целью критическое осмысление базовых понятий и их выражение в различных языках программирования. Предполагается, что курс закладывает основу для дальнейшего освоения объектно-ориентированного программирования, методов работы с базами данных, разработки пользовательских интерфейсов, вычислительной математики, машинной графики и многих других областей. С другой стороны, ожидается, что слушатель обладает знаниями в объёме школьного курса «Основы информатики» и соответствующими навыками работы с компьютером и способен самостоятельно написать простые программы.
|
|
Одним из самых спорных вопросов, который возникает при постановке подобного курса, является вопрос о выборе языка программирования. Не вдаваясь в детали этого обсуждения, сразу скажем, что в данном курсе это язык С. Однако, ни в коем случае данное пособие не следует рассматриваеть как справочное руководство по языку. Мы считаем, что осваивать конкретный язык образованный программист должен самостоятельно в процессе решения практических задач, пользуясь соответствующей технической документацией. Нам же язык С требуется для демонстрации конструкций и понятий из «лексикона» программирования, а там, где его окажется недостаточно, мы будем привлекать и другие языки, такие как Паскаль, Алгол-60, Фортран, АПЛ, Алгол-68 и пр. Наша задача не столько в том, чтобы в совершенстве освоить конкретный язык или стать компьютерным полиглотом, а в том, чтобы научиться ставить вопрос: «Почему так и как можно было бы по-другому?».
Введение
Программирование можно определить как способ заставить кого-то достичь поставленной нами цели. Часто в качестве примера программирования приводят кулинарные рецепты, которые описывают пошаговый процесс приготовления из исходных продуктов некоторого блюда. Программой может служить и математический алгоритм. Например, алгоритм Евклида задаёт последовательность операций, которые достаточно выполнить для нахождения наибольшего общего делителя по двум заданным целым числам. Однако следует иметь в виду, что последовательность и пошаговость не является неотъемлемой чертой программирования. Даже в случае с кулинарным рецептом некоторые операции можно выполнять параллельно. Если же мы в качестве примера программы рассмотрим Правила дорожного движения, целью которых является обеспечение безопасности и избежание заторов на дорогах, то мы заметим, что это в большей степени достигается не явным предписанием того, что и в какой последовательности надо делать, а формулировкой ограничений – того, чего делать не надо. Этот пример демонстрирует и то, что исполнителей программы может быть несколько. К программированию можно отнести описание технологических процессов, рекламу, уставы организаций и многое другое. Но нас в рамках данного курса будет интересовать в первую очередь программирование для компьютера (ЭВМ).
|
|
Программирование как вид деятельности может иметь весьма разные аспекты. Условно выделим четыре вида программирования, которые рассмотрим ниже.
Прикладное программирование
Прикладные (или пользовательские) программы составляют конечную и основную цель программирования, поскольку именно они влияют на повседневную жизнь обычных людей. Этим объясняется и огромное многообразие таких программ. Сюда можно отнести, например, текстовые процессоры и электронную почту, игровые программы, бухгалтерские и банковские системы, автомобильные навигаторы, интернет-магазины, встроенные программы управления бытовой техникой и многое-многое другое. Соответственно, основное внимание в прикладном программировании должно уделяться таким вопросам, как
Надёжность, устойчивость: постоянно ломающаяся, «зависающая» программа не представляет никакой ценности для пользователя;
Безопасность, «защита от дурака». Программа может быть не только полезной, но и вредной. Даже если не рассматривать компьютерные вирусы и другое целенаправленное нанесение ущерба, должны быть предусмотрены все возможные пользовательские сценарии, в том числе и «неразумные».
Интуитивность, удобство пользовательского интерфейса. Взаимодействие программы с пользователем должно формулироваться в понятных ему терминах и соответствовать той деятельности, для которой программа используется. Эффективность интерфейса подразумевает, в частности, минимизацию суммарного количества действий, которые необходимы для достижения цели. Понятно, что действия могут различаться по сложности: от простейших – нажатий на клавиши или перемещения курсора, до выбора элемента в длинном неупорядоченном списке.
Эффективность. Программа должна обладать адекватным быстродействием. Адекватность здесь понимается как соответствие времени исполнения и других потребляемых программой ресурсов ожиданиям пользователя. Очевидно, что эти ожидания меняются со временем – по мере развития вычислительной техники там, где раньше пользователи готовы были ждать час, теперь их раздражает задержка в несколько секунд.
Гуманитарные аспекты, к которым можно отнести учёт того, что пользователь может плохо различать цвета, иметь физические проблемы с использованием клавиатуры, не знать иностранных языков и т.п.