Эволюция программного обеспечения

 

Первые электронные вычислительные машины (ЭВМ) были созданы в середине 40-х гг. XX в. Это были ламповые устройства. Машины были программно несовместимы и каждая задача была уникальна. 100 % программного обеспечения было специальным. В дальнейшем, по мере освоения типовых классов задач и унификации вычислительных систем, всё большее число программ стало переходить в разряд общего (системного или прикладного) ПО. К концу XX в. 90–95 % всего ПО можно считать общим, а следовательно, и общедоступным.

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

В 50-е гг. появляются библиотеки стандартных программ и ассемблеры. Из-за программной несовместимости у каждой ЭВМ были свои уникальные библиотеки. Создание библиотек повысило производительность труда программистов, так как появилась возможность опереться на труд предшественников и не программировать каждую новую задачу с нуля. Мнемоническое кодирование и автоматическое распределение памяти появилось впервые в Кембридже в Великобритании на ЭВМ EDSAC (1949 г.) Вместо того чтобы записывать коды операций двоичными цифрами, программист писал текст программы на символическом языке, пользуясь мнемоническими обозначениями операций и условными адресами, а специальная программа (руководитель проекта Морис Уилкс назвал её собирающей системой (по англ. – assembly system)) автоматически преобразовывала мнемонические коды в понятные машине двоичные и распределяла память для выполнения программы. Языки программирования низкого уровня, в которых коды операций заменены мнемоническими обозначениями, стали называться языками ассемблера или автокодами (мнемокодами), а преобразующие программы – ассемблерами.

С середины 50-х гг. начался новый период в развитии вычислительной техники, связанный с появлением полупроводниковых элементов. В эти годы появились первые алгоритмические языки и первые системные программы – компиляторы. В 1957 г. был создан Fortran, в 1960 – Cobol, Algol и Lisp, в 1964 – Basic, Simula, PL/1, в 1970 – Pascal и Smalltalk. К концу 60-х гг. число языков программирования перевалило за тысячу. Практически все основные концепции – процедурное, логическое, объектно ориентированное программирование – были предложены в это время. В последующие годы прогресс в автоматизации программирования шёл не в сторону создания новых языков, а, наоборот, по пути естественного отбора. Языки программирования рождались и умирали, но только некоторые из них – наиболее стойкие и жизнеспособные – дожили до начала XXI в. и стали стандартными в международном сообществе программистов.

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

В 70-е гг. в технической базе произошёл переход к интегральным микросхемам, что дало большие возможности новому поколению компьютеров. Появились семейства программно-совместимых машин. Первым семейством программно-совместимых машин, построенных на интегральных микросхемах, явилась серия машин IBM/360, значительно превосходивших машины второго поколения по критерию цена/производительность. Вскоре идея программно-совместимых машин стала общепризнанной.

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

Создание крупных информационных систем поставило перед разработчиками общего ПО проблему хранения больших массивов данных и организации их обработки множеством независимых программ. Так возникла концепция систем управления базами данных (СУБД). Разработка эффективных СУБД оказалась задачей не менее трудоёмкой, чем проектирование ОС, первая промышленная СУБД IMS для IBM 360/370 была создана корпорацией IBM в 1969–1970 гг. в рамках проекта полёта человека на Луну «Аполлон» и потребовала очень больших капиталовложений.

Следующий период в эволюции ПО (80-е гг.) связан с появлением больших интегральных схем (БИС). В эти годы произошли резкое возрастание степени интеграции и удешевление микросхем. Компьютер стал доступен отдельному человеку, и наступила эра персональных компьютеров. Поскольку компьютеры стали широко использоваться пользователями-непрограммистами, актуальной стала проблема разработки «дружественного» программного обеспечения. В это время мгновенно возникли тысячи фирм, выбросивших на рынок необъятное море пакетов прикладных программ для деловых применений и развлечений. Они отличались от «тяжёлого» софта 70-х гг. – были простыми, дешёвыми, красочными, упаковывались в яркие коробки и продавались в магазинах как книги или грампластинки.

На рынке операционных систем доминировали две системы: MS DOS и UNIX.

Одновременно с увлечением потребительским «софтом» продолжались работы по совершенствованию серьёзного общего программного обеспечения. Самым большим успехом в этом направлении в 80-е гг. можно считать разработку CASE-технологий, т.е. технологий автоматизированного проектирования программного обеспечения (CASE – Computer Aided Software Design). Их необходимость возникла при создании информационных систем для крупных организаций, объединяющих сотни пользователей и оперирующих с тысячами объектов и экранных форм. Даже применение языков высокого уровня, таких как Cobol, Pascal или C и средств СУБД, не избавляло программиста от рутинной работы по проектированию связанных информационных таблиц и организации диалога. Автоматизированные технологии позволяют отказаться от большинства механической работы. На специальных языках сверхвысокого уровня, символьных или графических (они часто называются языками четвёртого поколения 4GL – 4th Generation Language), описывается содержательная постановка задачи, а система сама, пользуясь встроенными в неё стандартными правилами проектирования, генерирует код на обычном языке программирования.

В середине 90-х гг. стали бурно развиваться сети персональных компьютеров. Миллионы компьютеров, разбросанных по всему свету, оказались связанными всемирной паутиной Интернета. Гигантские объёмы научной, культурной и всякой другой информации сделались доступными любому рядовому пользователю.

Появление «сети сетей» – Интернета – вызвало рождение целой отрасли нематериального производства – сетевого бизнеса. Тысячи фирм делают деньги «из воздуха», занимаясь предоставлением доступа в Интернет (Internet providing) и предоставляя различные услуги по организации электронной почты, публикации и поиску информации в сети, размещению рекламы, электронной торговле и т.д. Развитие сетевых технологий потребовало разработки соответствующего слоя общего программного обеспечения.

Ещё одно важное достижение, которое в 90-х гг. перешло из разряда экспериментальных в общедоступные, – компьютеры стали мультимедийными. Термин «мультимедиа» происходит от английского «multimedia», что можно перевести «многие среды». В прежние времена стандартный компьютер вводил, обрабатывал и выводил только строки символов или неподвижные картинки, на большее не хватало ни мощности процессора, ни объёма памяти, ни возможностей устройств ввода-вывода. Но в последние годы эти характеристики достигли такого уровня, что появилась возможность существенно расширить класс обрабатываемых объектов. Мультимедиатехнология позволяет одновременно использовать различные способы представления информации: числа, текст, графику, анимацию, видео и звук.

Большие успехи были достигнуты в части обработки движущихся изображений. В середине 90-х гг. совместными усилиями математиков, программистов и инженеров-разработчиков видеокарт были созданы методы сжатия и представления изображений, позволившие уменьшить объём вычислений в тысячи раз и сделать видео доступным среднему персональному компьютеру. Тотчас же на рынок ПО хлынул поток видеоигр, других развлекательных и обучающих программ, которые в полной мере использовали новые возможности компьютера.

В настоящее время развитие программного обеспечения, предназначенного для широкого круга пользователей, происходит уже не в состязании индивидуальных программистов, а в процессе ожесточённой конкурентной борьбы между фирмами-производителями программного обеспечения. Только в США более 50 фирм-производителей программного обеспечения имеют объёмы продаж более 10 млн долл., а у десяти из них (в частности Microsoft, Lotus, Novell, Borland, Autodesk, Symantec и Computer Associates) объёмы продаж превышают 100 млн долл. Доля некоммерческого программного обеспечения постоянно снижается и всё более ограничивается программами, создаваемыми в процессе научных исследований или для собственного удовольствия.

При разработке коммерческих программ основной задачей фирм-разработчиков является, естественно, обеспечение их успеха на рынке. Для этого необходимо, чтобы программы обладали следующими качествами:

- функциональность программы, т.е. полнота удовлетворения ею потребностей пользователя;

- наглядный, удобный, интуитивно понятный и привычный для пользователя интерфейс;

- простота освоения программы даже начинающими пользователями, для чего используются информативные подсказки, встроенные справочники и подробная документация;

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