Это специфическое понятие и оно будет широко использоваться. Ниже я буду писать "программа" имея в виду компьютерную программу.
Размышляя об этом понятии я пришёл к выводу, что просто его не объяснить. Оно многозначно, в том числе потому что меняется компьютерная практика.
1.программа как определение того что и когда делать компьютеру, и только компьютеру. Это не действия пользователя, а компьютера в конкретном применении. На заре компьютерной эпохи программой назывался набор команд для машины для обработки конкретного материала конкретным образом; результат был одновариантным. Больше ни для чего эта программа не годилась. Если хотя бы одно из этих обстоятельств менялось, то программу в лучшем случае переписывали. То есть программа как одновариантная машинная инструкция. Компьютер не работает без программ – одновариантных или нет. Так было, есть и будет. Таким же образом сейчас управляются станки и пр.
2.затем отошли от написания машинной инструкции и стали создавать довольно обобщенные описания того что должно произойти. Их пришлось переводить в машинные инструкции (компилировать).Такое описание было текстовой программой, уже не являясь машинной инструкцией, однако в компилированном виде также управляло компьютером. Мы рассматриваем разные исторически возникшие понятия. У такого описания появилось два отличия от простой машинной инструкции. Оно могло быть многовариантным. Оно также было на концептуальном уровне приспособлено к понятию пользователя, то есть стало возможным участие человека в работе ЭВМ помимо его работы программистом, а также техником ввода-вывода данных. То есть несмотря на то, что программа по-прежнему управляет компьютером на техническом уровне, управляет и человек.
Простейший (и надуманный) пример такой программы приспособленной к взаимодействию с пользователем: сложение чисел. Числа вводятся человеком и он определяет что с ними делать, а программа принимает всё это и считает; она же выдаёт результат счёта (как - сейчас не важно).
То есть программа как обобщённое текстовое описание, включающее действия людей для выбора того, что должно произойти. Такая программа не требовала конкретного массива данных; данные могли быть разными. Обратите внимание, что тут понятие программы расходится с предыдущим, так как уже нет примитивной предсказуемой ситуации и примитивного набора команд.
3.программа как script (скрипт). Такая программа, являясь текстом, сама не управляет чем-либо, но есть программная среда, которая управляется этой программой и сама управляет компьютером. Скрипт, "скормленный" своей среде выполнения управляет опосредованно. Выполняющая его среда берёт на себя все функции ввода-вывода, записи и изменения данных. В остальном характеристики получающегося процесса те же что и предыдущем пункте или у'же.
4.слово "программа" иногда в обиходе обозначает внешнее выражение работы той машинной инструкции, которой является любая программа (в том числе среда выполнения для скрипта) - интерфейс; обычно под этим понимается дисплейное выражение, существует понятие графического и оконного интерфейса (GUI), который сейчас является обычным и рассматривается ниже.
Само понятие интерфейса шире и обозначает способ и средства взаимодействия. Так, например, если вы пишите письмо то и ручка и язык являются интерфейсом взаимодействия с получателем письма – одно есть физическое средство, второе – общепринятое нефизическое средство; этот пример показателен для компьютерных интерфейсов которые тоже имеют элемент стандарта описывающего нефизические явления.
Историческое и глубокое значение слова «программа» ушло, и значением теперь иногда является тот воображаемый объект, который создаётся и воспринимается с экрана. Если такого объекта нет, то программа - это просто "то, что делает". Это может быть скрипт или обычная программа но без дисплейного выражения.
5.программами называют драйверы (см ниже).
6.программа как директор и условие работы других программ (см ниже).Здесь вы впервые сталкиваетесь с программным взаимодействием.
Итак, основное значение слова "программа" - это нечто связанное, с одной стороны, с компьютером в техническом смысле, с вами - с другой; нечто позволяющее вам что-то делать и обычно имеющее внешнее выражение на дисплее. Оно теоретически может быть разным, практически это почти всегда оконная и унифицированная часть GUI, поэтому возможно написать одну книгу дающую подготовку для работы в разных программах. Вы её читаете. Вот пример простого окна.
С окнами вы познакомитесь ближе потом.
Выражение "работать с компьютером" неверно в причинно-следственном отношении, оно создаёт ошибочное мнение, что вы обращаетесь к компьютеру. С технической стороны это так, но вам будет гораздо легче считать что вы работаете с программой, и на самом деле именно программы определяют что происходит.
Тут я должен предостеречь от убогого впечатления, которое производит техническая раскладка процессов в компьютере. Кроме хранения данных выше сказано об их изменении. Ещё более важно сказать о создании данных. Программы не просто работают с данными, они позволяют видеть и строить воображаемые объекты в соответствии со спецификой их реальных прототипов, и вы часто не сможете отличить одно от другого. Один только вывод данных породил интернет в его сегодняшнем виде, а создание разных дополнительных сервисов делает его ещё более интересным и полезным. Сейчас трудно представить чего технически нельзя сделать с помощью сервисов интернет.
Я написал что обычно программа выражена в оконной части GUI. Однако чтобы привести простой пример я покажу дисплейный интерфейс консольной, а не оконной программы. Для этого опять обратимся к примеру со сложением чисел – из-за его простоты и легкого понимания роли программы. Консольная программа имеет только текстовое выражение на экране.
Чтобы программа выполняла свои функции её надо запустить, как – пока обсуждать не будем. Пусть после запуска такая гипотетическая программа не сразу обрабатывает данные, а ждёт их ввода с клавиатуры (о клавиатуре подробнее поговорим потом).
Программа должна объяснить что ожидается от человека или зачем она нужна – хотя бы в самой примитивной форме, поскольку не факт, что её запустили понимая это. В подобных случаях обычно выводится строка пояснения, которая часто является и строкой ввода, то есть в неё отображается то, что вводится пользователем:
Calculator is ready to work. Enter one number for any ariphmetic operation and press Enter or press Escape for quit: _
Такая строка выдаётся всегда вначале работы программы независимо от того будут ли и как ей пользоваться. Это нетипично длинное и «объясняющее» проявление для консольной программы. Надо сказать что оконные программы тоже обычно не «разговорчивы» в плане объяснений, но это компенсируется их наглядностью. Строка могла бы быть короче и рассчитана на большее знание и догадливость
Calculator3.3
First number or Escape: _
В
первой строке программа «представляется»,
пока не очень понятно для вас, во второй
она тоже ожидает ввода числа, но не
сообщает что нужно нажатие на клавиатуре
Enter
так как это банально и очевидно и не
сообщает зачем надо нажимать Esc
ape
тоже ожидая что вы итак догадаетесь.
Все нажатия в этом примере – это нажатия
на клавиатуре клавиш которые надписаны
как в этом тексте. После того как
пользователь ввёл число и нажал Enter
вид интерфейса пусть будет в этом примере
таким
Calculator3.3
First number or or Escape: 12
Type second number:
Программа
ожидает второго числа и сохранила на
дисплее первое число. То есть нажатие
Enter
в данном случае означало для программы
что первое число введено и можно перейти
к следующему этапу – вводу второго
числа. Не написано что ожидается нажатие
Esc
ape
(как вариант) для выключения программы,
но это не означает что такой возможности
нет. Примитивизм программы и стандартность
нажатий объясняют эту ситуацию. Таких
примитивных программ сейчас почти нет.
После ввода второго числа и нажатия
Enter
интерфейс будет таким
Calculator3.3
First number or or Escape: 12
Type second number: 4
12+4=16
12-4=8
12/4=3
12*4=48
Наш воображаемый калькулятор очень примитивен. Он получил оба числа, что мы так долго разбирали, и вывел все результаты. Прежде чем их вывести он должен был их сосчитать и построить строки с числами, знаками действий и знаком равенства.
Какие полезные наблюдения можно сделать? 1) программа была не готова к работе с обозначенным массивом данных (каковым мог бы быть список арифметических примеров) и требовала последовательного ввода, то есть она не позволяла обозначить материал для работы и уйти 2) программа требовала некоторого внимания и запоминания для правильного ввода 3) программа требовала знания типичного значения клавиш и вела себя неожиданно 4) нельзя было исправить ошибку. В этом примере показаны важные свойства программ.
Теперь рассмотрим вероятный пример с оконной программой. После её запуска вы можете ввести числа для счёта - сразу все, со знаками действий.
Затем, выделив (как – обсуждается в отдельной главе) пример вы можете использовать счётную функцию с помощью оконных, стандартных инструментов или редактировать пример. Если вы сигналите программе чтобы она считала, то она добавляет знак равенства и результат.
Как видите второй пример нагляднее и менее, что называется, сложен, а на самом деле менее загадочен и страшен.
Вывод что оконные программы понятны неверен. Конкретные оконные программы часто ещё более непонятны чем консольный пример.
Чтобы программа выполняла свои функции её надо запустить.
Действия ваши могут быть разными, они ниже называются операциями. При этом ваши действия ограничиваются программой. Чем больше возможностей, тем больше сервис программы, а сама программа считается более мощной.
Программа работает используя какие-либо параметры, которые часто называются в обиходе настройками.
Каждый раз, когда что-то происходит - по указанию пользователя или автоматически (например, заканчивается печать документа), меняется ситуация работы. Это понятие вам потребуется в дальнейшем.
Режим работы программы определяет, как или над чем она работает.
Каждая программа существует для чего - то, имеет практическое значение и назначение. Надо заметить, что возможности современных программ часто используются не в полной мере. Каждая программа имеет название.
Старые программы, да и некоторые новые не работают с кириллическими данными. Этот вопрос не совсем совпадает с вопросом о русификации программы. Типично что не русифицированная программа программа имеет англоязычный интерфейс. Но часто это терпимо. Фактически вопрос о переводе интерфейса часто настолько не важен что вы не заметите с каким языком работали. Практика – отличный способ изучения языка. А вот с документацией ситуация хуже. Англоязычная документация читается гораздо дольше.
С другой стороны документация и программа не искажена.
Часто программа имеет в своём составе несколько подпрограмм. Вместе они образуют комплектацию программы. Этим словом мы будем пользоваться для обозначения набора подпрограмм. Одна из них является главной - программным ядром. Для работы какой-то подпрограммы может быть необходима другая подпрограмма или несколько подпрограмм, и всегда требуется наличие программного ядра. Пользователю не требуется отдельно добывать подпрограммы и собирать из них полный набор. Они распространяются вместе и устанавливаются на компьютер одновременно. Подпрограммы также могут иметь название.
Более крупной единицей является пакет программ - совокупность независимых программ. Программа обычно не входит в пакет, то есть большинство программ не являются частями пакета.
Когда говорится и пишется о «зависании» компьютера, то обычно имеется в виду отсутствие реакции программы. Также вы можете услышать что программа «висит, зависла». Она перестала реагировать – полностью или отчасти. Это понятие надо усвоить, оно часто используется. Имеется в виду не просто медленная реакция а патологическое отсутствие реакции вообще. Отсутствие реакции может быть не патологическим – допустим, когда его и не должно быть. Здесь же оно должно быть но не происходит. Часто при зависании интерфейс программы тоже портится – застывает и стирается с экрана при изменениях изображения. Зависания – серьезный сбой и оставлять его без внимания нельзя. Причины его могут быть самые разные, в том числе не связанные с зависшей программой. Ниже мы будем рассматривать вопросы «лечения» программ. Дефектная в принципе программа не пройдёт этап тестирования.
Хорошей считают программу которая соответствует концептуально представлениям конкретного человека по конкретному вопросу. Например, если вы считаете, что база данных – это китайский дракон, то вам потребуется огнетушитель. Если вы знаете что такое база данных то захотите увидеть её данные и пр. Не удивительно большое раздражение человека, который пробует работать с базой данных с помощью огнетушителя. Он не назовет такую программу хорошей.
Затем важна надёжность программы. Это свойство обратное склонности к выходу из нормального функционирования. Такой «выход с шахматной доски» никогда не угрожает технике, и обычно не обусловлен ею. В обиходе он называется глюком или сбоем.
Дать описание признаков сбоя – дело трудное. Часто его путают с задержкой реакции из-за технической задержки или большой нагрузки на технику. Когда вы поработали с программой то представляете что такое её нормальная работа и обычно отличите её от ненормальной. Вопрос о сбоях рассмотрен в отдельной главе ниже, также связанные с ним замечания рассыпаны по всему тексту. Склонность к зависанию несомненно означает низкую надёжность. Если зависающая программа сама виновата в этом то очень вероятно её следует убрать с компьютера.
Пользователи также очень ценят скорость работы программы. Высокая скорость означает, что вы не испытываете раздражения от ожидания того что программа приходит в нужное состояние. Чем быстрее ваши программы тем больше раздражают другие программы. Разумеется, дисплейный интерфейс - это не кино, но за компьютером часто идёт насыщенная работа, и психологически это трудно совместить с задержками.
Надёжность – это фатальная сторона работы программы. Забегая вперёд скажу что часто сбой обусловлен не дефектом сбившейся программы а ошибками в параметрах системы вообще.
В основном на практике идёт охота за возможностями а не за удобством и пр.
Выдающиеся программы получают виртуальные медали (смотрите рисунок).
По мере роста вашего опыта понятие хорошей программы будет меняться. Начинающим кажется хорошим то что понятно и просто и это должно быть так. Подготовленным видны недостатки простой (а иногда и сложной) программы потому что они лучше знают область работы, хотят новых возможностей и уже прошли этап освоения основ.
Практически получается, что подготовленному пользователю чем сложнее, тем лучше. Сложность сама по себе вредна но мощность программ пока приходит вкупе с соответствующей сложностью работы.
Простую программную среду можно создать и на современном, обладающем массой технических дополнений компьютере.
Когда речь идёт о сложности программы, имеется в виду сложность работы с ней и\или сложность концепции, стоящей за ней. Это две разные вещи, хотя и сильно связанные между собой. Вернёмся к примеру со сложением чисел за неимением другого столь же понятного и простого. Концепция этой программы в том, что есть числа, которые надо ввести вручную и программа выдаст результат счёта. Если вы несогласны с любым из этих высказываний или несогласны на эти действия психологически то вы можете назвать эту программу плохой (сложной, идиотской, трудной и пр). Если вы согласны и готовы так работать, остаётся ещё вопрос о конкретной реализации счёта, который я условно отделю и отнесу в область сложностей и вообще недостатков работы в этой программе. Когда вы это понимаете то можете разобраться что именно является источником проблем. Возможно, это ваше несогласие вписываться в концепцию работы. Может быть, это просто непонимание этой концепции. Возможно, концепция вас устраивает, а вот её реализация – нет. Реализацию иногда можно более-менее поправить настроив программу. Если вас не устраивает стандартная концепция то и другие программы тоже.
Поскольку большинство программ продаются как любой другой товар происходит поиск и заполнение пустых рыночных ниш - в том числе создаются совсем простые в управлении программы, где это возможно. Иногда это несомненно хорошо, но иногда прячут сложность, которую надо бы оставить на виду. Разумеется, одни сапоги не всем впору и я не хочу что-либо навязывать. Но в целом примитивная программа не является лучшей. Цель в том, чтобы она была настолько понятна чтобы не вызвать затруднений, и настолько мощной чтобы удовлетворить запросы пользователя.
На практике нагрузка на ваш мозг не только не уменьшается при использовании компьютера, но обычно возрастает с увеличением мощности программ. Мощность обычно создаёт необходимость бо'льшего количества умственных действий и запоминания бо'льшего количества обстоятельств. Означает ли это, что сильные программы – для избранных, и что делать вам, если вы себя не относите к числу умственных атлетов? Возможно, вы хотите получить простой и категоричный ответ. Но я вам его не дам. Дело в том, что сложность во многом осваивается благодаря новым понятиям. Понятия будут появляться в вашей жизни по мере образования. То есть вы не должны применять своё мнение об умственных способностях само по себе. С этой оговоркой можно сказать что большинство программ посильно большинству людей. Трудность освоения программ в большой степени зависит от знания.
Не существует никакой, а тем более известной заранее связи между определённым родом компьютерной работы и широтой функций программ для этого дела. Для одного дела может потребоваться много программ и возможно много дел в одной программе. До сих пор – хотя редко – используются программы одной функции управляемые командой.
Нет никаких обязательств поддерживать какой-либо стиль работы внутри тематической специализации программы или вообще. Например, есть программы козырем которой выставляется что вы всё сделаете «одним щелчком». Есть такие, где надо более-менее разбираться в терминологии чтобы работать. Есть программы-оригиналы, которые совсем не похожи на своих конкурентов внутри одного дела.
Если вы пользуетесь программой любого типа то со временем привыкаете к ней. Это естественно. Если программа профессиональная или просто довольно сложно сделана то вы получаете в ней массу инструментов и просто не захотите сменять её. Не имея мотива вы можете долго ей пользоваться. Теперь если вас агитировать сменить программу вы этого не захотите делать поскольку придётся ломать автоматизм действий и представлений.
Чем оригинальнее концепция тем труднее освоение и уход из рабочей среды.
Поэтому заставить профессионала сменить программу очень трудно. И поэтому я советую: если вы хотите работать капитально не спешите с выбором. Об освоении есть отдельная глава. Освоение программ в большой степени опирается на документацию которую эта книга не заменяет.
Программы в большинстве своём представляют результат компиляции исходного кода то есть выражений записанных на каком-либо языке программирования. OpenSource — это «открытый код». Неудобное даже для англоязычной среды название прижилось и обозначает доступность исходного кода для потребителя. Он благодаря этому может изменять программу, но не во время её работы а создавая модифицированный выпуск программы. Это механизм позволяющий массе программирующих энтузиастов участвовать в разработке программ.
Обычные программы вы получаете с лицензией которая не позволяет вам менять программный продукт. Лицензия также часто запрещает вам сдавать его в аренду и пр. С opensource ситуация другая — программа считается вашей собственностью в более широком смысле и вы можете даже её продать.
Программы являющиеся сейчас opensource часто бесплатны. Однако не полагайтесь на эти слова а проверьте, является ли ваша программа бесплатной. Смотрите справку программы или её сайт.
Фактически использование opensource-программ капитально уменьшает расходы. Из-за этого в Германии многих бюрократов перевели в другую рабочую среду – на Linux. Некоторые страны рассматривают или утвердили законы требующие применения opensource в государственных органах.
Обычно программа сопровождается лицензией которая определяет что вы можете и должны делать в связи с программой. Это юридический документ так что приобретая программу вы подпадаете под действие закона. Лицензия обычно не переведена с английского языка. Обращайтесь в интернет чтобы лучше разобраться с разными лицензиями. Если вы не хотите разбираться с лицензиями то, возможно, до конца вам это не удастся (строго говоря не может удастся), но можно облегчить себе жизнь используя операционную систему Linux.
Вы столкнётесь с понятием версии программы. Версии программы – это разные её выпуски. Это понятие не пересекается с типом её установки. Так, например, есть версии программ для разноязычных пользователей, называемые в обиходе как русские, английские, немецкие и пр. С другой стороны, версии могут быть профессиональными, облегчёнными, бесплатными и пр. Версии отражают эволюцию программы поэтому используется нумерация версий. Одна и та же фирма выпускает несколько версий. Номер версии косвенно говорит о присутствии программы в массовой эксплуатации, то есть её адекватности запросам текущей рыночной ситуации. Это не следует понимать как свидетельство простоты эксплуатации поскольку многие программы даже изначально задумываются как профессиональные. Обычно последующая версия не отменяет свойств предыдущей, и добавляет новые возможности.