Инструменты пользователя

Инструменты сайта


igor:istoria

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
igor:istoria [2019/04/12 14:06] – [Характеристика эпохи] igorigor:istoria [2019/06/22 01:03] – [Программирование в новое время] igor
Строка 1: Строка 1:
 ===== Нетрадиционный взгляд на историю вычислительной техники ===== ===== Нетрадиционный взгляд на историю вычислительной техники =====
 Почему нетрадиционный? \\ Почему нетрадиционный? \\
-Во-первых, обычно в книгах по истории вычислительной техники рассматриваются только собственно инженерные решения ("железные", а иногда и программные), а я в этой статье рассматриваю их в связке, во-первых, с уровнем развития других отраслей техники в соответствующее время, во-вторых, с уровнем развития научных теорий (поскольку никакое техническое устройство не может появиться раньше той науки, на основании которой оно строится), и в-третьих, с вопросами применения компьютеров и программ в практической человеческой деятельности, а применение - в связке с экономическими и политическими реалиями соответствующей эпохи. \\ +Во-первых, обычно в книгах по истории вычислительной техники рассматриваются только собственно инженерные решения (в основном "железные", реже программные), а я в этой статье рассматриваю их в связке, во-первых, с уровнем развития других отраслей техники в соответствующее время, во-вторых, с уровнем развития научных теорий (поскольку никакое техническое устройство не может появиться раньше той науки, на основании которой оно строится), и в-третьих, с вопросами применения компьютеров и программ в практической человеческой деятельности, а применение - в связке с экономическими и политическими реалиями соответствующей эпохи. \\ 
-Во-вторых, в книгах вся история делится по поколениям компьютеров: первое - ламповое, второе - транзисторное и третье - микроэлектронное. Это неправильно с самого начала, поскольку ламповые машины уже были не первым поколением. Я же делю историю вычислительной техники на эпохи аналогичные тем, которые имели место в общечеловеческой истории. \\+Во-вторых, в книгах вся история делится по поколениям компьютеров соответственно элементной базе, на которой компьютеры строились: первое поколение - ламповое, второе - транзисторное и третье - микроэлектронное. Это неправильно с самого начала, поскольку ламповые машины уже были не первым поколением. Но в этой статье я намерен показать, что, помимо развития элементной базы, в нашей отрасли имели место и другие изменения, как революционные, так и эволюционные, зачастую гораздо более интересные, чем изменения в элементной базе. Изучение этих изменений подтолкнуло меня к делению истории на эпохианалогичные тем, которые имели место в общечеловеческой истории. \\
 Эта статья первоначально была задумана для школьников, но, написав половину, я понял, что это не мой репертуар, и решил перепрофилировать статью в серьезное научное исследование. Если она еще не стала таковой сейчас, то может быть станет в будущем. Но история - это нечто большее чем просто воспоминания о тех годах, когда солнышко было ярче и трава зеленее. История мне видится прежде всего как анализ причинно-следственных связей между событиями. Если вам это кажется неинтересным, ваше право на этом остановиться и дальше не читать, а я продолжу. \\ \\ Эта статья первоначально была задумана для школьников, но, написав половину, я понял, что это не мой репертуар, и решил перепрофилировать статью в серьезное научное исследование. Если она еще не стала таковой сейчас, то может быть станет в будущем. Но история - это нечто большее чем просто воспоминания о тех годах, когда солнышко было ярче и трава зеленее. История мне видится прежде всего как анализ причинно-следственных связей между событиями. Если вам это кажется неинтересным, ваше право на этом остановиться и дальше не читать, а я продолжу. \\ \\
  
Строка 108: Строка 108:
 Однако, если мы хотим изучать историю серьезно, а не просто перечислять даты и факты, то мы должны понять, что такое счастливое положение дел не могло продолжаться бесконечно. \\ Однако, если мы хотим изучать историю серьезно, а не просто перечислять даты и факты, то мы должны понять, что такое счастливое положение дел не могло продолжаться бесконечно. \\
 В нормальном капиталистическом обществе буржуй, кровопийца-эксплуататор - это прежде всего инвестор и организатор производства. Он дает людям ресурс N1, которого все хотят, но на всех не хватает, - рабочие места - и этим оправдывает свое существование. КПСС этих функций не имела и была, таким образом, не просто эксплуататорским, а __чисто паразитическим__ классом. Однако на словах и на бумаге нужно было как-то объяснить народу, для чего Партия нужна, и была придумана формулировка: "КПСС - руководящая и направляющая сила общества". А уж если такие слова сказаны, их нужно было подтверждать делом, так что вмешательство КПСС во все дела в стране, вплоть до самых мелких, было неизбежно. Но одно дело стоять над душой, допустим, у сталевара и каждый день его пилить: "давай больше металла, давай еще больше металла", и совсем другое лезть в сложные инженерные вопросы, тем более в такой отрасли техники, которой каких-то 10 лет назад просто в помине не было. Тогдашние руководители коммунистической партии и советского государства, будучи сами людьми с весьма посредственным уровнем образования, на вычислительную технику и программирование смотрели косо и в лучшем случае терпели их присутствие рядом с собой, но не более того. И то, что произошло в конце 60-х годов XX века, рано или поздно должно было произойти. \\ В нормальном капиталистическом обществе буржуй, кровопийца-эксплуататор - это прежде всего инвестор и организатор производства. Он дает людям ресурс N1, которого все хотят, но на всех не хватает, - рабочие места - и этим оправдывает свое существование. КПСС этих функций не имела и была, таким образом, не просто эксплуататорским, а __чисто паразитическим__ классом. Однако на словах и на бумаге нужно было как-то объяснить народу, для чего Партия нужна, и была придумана формулировка: "КПСС - руководящая и направляющая сила общества". А уж если такие слова сказаны, их нужно было подтверждать делом, так что вмешательство КПСС во все дела в стране, вплоть до самых мелких, было неизбежно. Но одно дело стоять над душой, допустим, у сталевара и каждый день его пилить: "давай больше металла, давай еще больше металла", и совсем другое лезть в сложные инженерные вопросы, тем более в такой отрасли техники, которой каких-то 10 лет назад просто в помине не было. Тогдашние руководители коммунистической партии и советского государства, будучи сами людьми с весьма посредственным уровнем образования, на вычислительную технику и программирование смотрели косо и в лучшем случае терпели их присутствие рядом с собой, но не более того. И то, что произошло в конце 60-х годов XX века, рано или поздно должно было произойти. \\
-В один прекрасный день нашлась умная голова, которая придумала использовать новейшие ЭВМ для прогнозирования экономического развития страны. И какие бы ни использовали методики прогнозирования, результаты получались неутешительные. Мы-то теперь видим, что безрадостные прогнозы сбылись, мы теперь даже можем понять глубинные причины этого... Но тогдашнее правительство и ЦК КПСС во главе с Политбюро ничего такого видеть-слышать не желали, и в итоге (в конце 1960-х годов) было принято преступное (на мой взгляд) решение о прекращении собственных разработок вычислительной техники и об использовании вместо них американских образцов. Это решение не было осуществлено полностью: страна нуждалась в собственных компьютерах военного назначения. А вот "на гражданке" место оригинальных русских машин заняли СМ-4 (американская PDP-11), болгарский ИЗОТ (американский VAX - потомок PDP-11 с увеличенной разрядностью), ЕС ЭВМ (американские IBM/360). Новейшим представителем последнего семейства была ЕС-1060 - мне довелось иметь с ней дело во время обучения в институте. Эта машина занимала зал размером с 3 хороших трехкомнатных квартиры и потребляла электроэнергию, как троллейбус. По этим параметрам ЕС-1060 была близка к БЭСМ-6, но значительно уступала последней по боевым возможностям. К тому же эта машина была почти постоянно неисправна и работала буквально несколько часов в год. Другие "цельнотянутые из США" машины были ничуть не лучше. Но самое плохое было то, что к этим машинам было крайне скудное программное обеспечение, а то, что имелось, было низкого качества. \\ +В один прекрасный день нашлась умная голова, которая придумала использовать новейшие ЭВМ для прогнозирования экономического развития страны. И какие бы ни использовали методики прогнозирования, результаты получались неутешительные. Мы-то теперь видим, что безрадостные прогнозы сбылись, мы теперь даже можем понять глубинные причины этого... Но тогдашнее правительство и ЦК КПСС во главе с Политбюро ничего такого видеть-слышать не желали, и в итоге (в конце 1960-х годов) было принято преступное (на мой взгляд) решение о прекращении собственных разработок вычислительной техники и об использовании вместо них американских образцов. Это решение не было осуществлено полностью: страна нуждалась в собственных компьютерах военного назначения. А вот "на гражданке" место оригинальных русских машин заняли СМ-4 (американская PDP-11), болгарский ИЗОТ (американский VAX - потомок PDP-11 с увеличенной разрядностью), ЕС ЭВМ (американские IBM/360, 1964 г.). Новейшим представителем последнего семейства была ЕС-1060 - мне довелось иметь с ней дело во время обучения в институте. Эта машина занимала зал размером с 3 хороших трехкомнатных квартиры и потребляла электроэнергию, как троллейбус. По этим параметрам ЕС-1060 была близка к БЭСМ-6, но значительно уступала последней по боевым возможностям. К тому же эта машина была почти постоянно неисправна и работала буквально несколько часов в год. Другие "цельнотянутые из США" машины были ничуть не лучше. Но самое плохое было то, что к этим машинам было крайне скудное программное обеспечение, а то, что имелось, было низкого качества. \\ 
-За названиями IBM/360 и PDP/11 стоят не какие-то конкретные машины, а проекты, или, в нашей тогдашней терминологии, - научно-исследовательские и опытно-конструкторские разработки (НИОКР). Целью этих работ было создание //семейств// машин, больших и малых соответственно, программно-совместимых в пределах своего семейства и выполненных на общей конструктивной базе, в отличие от советских ЭВМ того времени. Эти машины имели новую для 60-х годов элементную базу - микросхемы. Имея такое преимущество в "железных" технологиях, американцы, однако, до начала 70-х годов так и не смогли это преимущество полностью реализовать - построить компьютер, радикально превосходящий наши БЭСМ. Не будем наивными и не будем думать, что они из чисто благотворительных побуждений снабжали нас передовыми проектами. Рассматривая их машины с точки зрения архитектуры, мы ничего передового в них не найдем. Если допустить, что американцы знали о БЭСМ-6 (ну англичане-то знали, purquois pas американцам знать?), то приходим к очевидному выводу: они сознательно сливали нам устаревшие и бесперспективные разработки. Они при этом ничего не теряли, более того: получали какие-то копейки там, где уже не надеялись получить прибыль. Если же не ограничиваться только вычислительной техникой и посмотреть шире, то мы увидим, что делали они это далеко не в первый раз. \\+За названиями IBM/360 и PDP/11 стоят не какие-то конкретные машины, а проекты, или, в нашей тогдашней терминологии, - научно-исследовательские и опытно-конструкторские разработки (НИОКР). Целью этих работ было создание //семейств// машин, больших и малых соответственно, программно-совместимых в пределах своего семейства и выполненных на общей конструктивной базе, в отличие от советских ЭВМ того времени. Эти машины имели новую для 60-х годов элементную базу - микросхемы. Имея такое преимущество в "железных" технологиях, американцы, однако, до начала 70-х годов так и не смогли это преимущество полностью реализовать - построить компьютер, радикально превосходящий наши БЭСМ. Не будем наивными и не будем думать, что они из чисто благотворительных побуждений снабжали нас передовыми проектами. Рассматривая их машины с точки зрения архитектуры, мы найдем в них единственную передовую черту: байтовую организацию памяти, которая делала машину равно пригодной для решения как физико-математических, так и народнохозяйственных задач. Если допустить, что американцы знали о БЭСМ-6 (ну англичане-то знали, purquois pas американцам знать?), то приходим к очевидному выводу: они сознательно сливали нам устаревшие и бесперспективные разработки. Они при этом ничего не теряли, более того: получали какие-то копейки там, где уже не надеялись получить прибыль. Если же не ограничиваться только вычислительной техникой и посмотреть шире, то мы увидим, что делали они это далеко не в первый раз. \\
 Несколько слов о ЕС ЭВМ. ЕС расшифровывается: Единая Серия. Предыдущие наши компьютеры, даже те, что имели сходные названия, не образовывали серий. Чаще всего они были несовместимы ни программно, ни хотя бы конструктивно: для каждой новой машины создавались заново все периферийные устройства и даже чисто конструктивные элементы вплоть до последней дверцы шкафа. Это замедляло проектирование и усложняло эксплуатацию. Очевидно назрела задача унификации: для всех машин сделать общий набор периферийных устройств, унифицированные модули оперативной памяти, которые можно было бы подключать по одному или несколько, и ряд процессоров, различающихся только количественно, но программно совместимых и выполненных в едином конструктивном стиле. Тогда, если ранее купленная машина перестанет вас удовлетворять, ее можно будет апгрейдить путем замены процессора или добавления памяти, как мы делаем сейчас с нашими настольными компьютерами. Идея, как мы видим, вполне здравая. Плоха была не идея - плоха была реализация: вместо того чтобы воплотить в новых процессорах все лучшее, что было наработано отечественными специалистами, использовали далеко не лучший американский образец. \\ Несколько слов о ЕС ЭВМ. ЕС расшифровывается: Единая Серия. Предыдущие наши компьютеры, даже те, что имели сходные названия, не образовывали серий. Чаще всего они были несовместимы ни программно, ни хотя бы конструктивно: для каждой новой машины создавались заново все периферийные устройства и даже чисто конструктивные элементы вплоть до последней дверцы шкафа. Это замедляло проектирование и усложняло эксплуатацию. Очевидно назрела задача унификации: для всех машин сделать общий набор периферийных устройств, унифицированные модули оперативной памяти, которые можно было бы подключать по одному или несколько, и ряд процессоров, различающихся только количественно, но программно совместимых и выполненных в едином конструктивном стиле. Тогда, если ранее купленная машина перестанет вас удовлетворять, ее можно будет апгрейдить путем замены процессора или добавления памяти, как мы делаем сейчас с нашими настольными компьютерами. Идея, как мы видим, вполне здравая. Плоха была не идея - плоха была реализация: вместо того чтобы воплотить в новых процессорах все лучшее, что было наработано отечественными специалистами, использовали далеко не лучший американский образец. \\
 Очень важный и интересный вопрос: разрядность древних ЭВМ. У современных машин разрядность принимает значение из ряда: 8, 16, 32 или 64, но так было не всегда. В 50-е годы представление о том, что разрядность должна быть равна целой степени двух, еще не сформировалась. В машинах 50-х годов вся информация была организована в виде //машинных слов//, длина которых (она же разрядность) была достаточна для представления числа с плавающей запятой. Так, например, "Стрела" имела машинное слово длиной 43 бит, из которых 35 - мантисса и 6 - порядок, а БЭСМ-6 - 48 бит. Ни шестнадцатиразрядных, ни тем более восьмиразрядных машин в те времена никто не строил: ведь машины были нужны для научных и инженерных расчетов, а такие расчеты требуют точности. Ячейки памяти имели размер машинного слова, а система команд процессора продумывалась так, чтобы каждая команда также вписывалась в машинное слово. \\ Очень важный и интересный вопрос: разрядность древних ЭВМ. У современных машин разрядность принимает значение из ряда: 8, 16, 32 или 64, но так было не всегда. В 50-е годы представление о том, что разрядность должна быть равна целой степени двух, еще не сформировалась. В машинах 50-х годов вся информация была организована в виде //машинных слов//, длина которых (она же разрядность) была достаточна для представления числа с плавающей запятой. Так, например, "Стрела" имела машинное слово длиной 43 бит, из которых 35 - мантисса и 6 - порядок, а БЭСМ-6 - 48 бит. Ни шестнадцатиразрядных, ни тем более восьмиразрядных машин в те времена никто не строил: ведь машины были нужны для научных и инженерных расчетов, а такие расчеты требуют точности. Ячейки памяти имели размер машинного слова, а система команд процессора продумывалась так, чтобы каждая команда также вписывалась в машинное слово. \\
Строка 118: Строка 118:
 ==== Три поколения цифровых электронных вычислительных машин ==== ==== Три поколения цифровых электронных вычислительных машин ====
 Электронные цифровые вычислительные машины //первого  поколения// (1950-х годов) строились на электронных лампах. Они (и лампы, и машины) были громоздки и нежны и потребляли очень много электроэнергии. Так, например, "Стрела" потребляла мощность 150 кВт (как трамвай на полном ходу), из них ровно половина - 75 кВт - приходилась на вентиляторы, обеспечивавшие охлаждение машины. Это несколько странно, потому что у большинства других компьютеров доля энергозатрат на охлаждение гораздо меньше. Устанавливались они в специально оборудованных зданиях или помещениях - вычислительных центрах (ВЦ). Последняя ламповая машина - "Урал-4" - строилась на Пензенском заводе до 1964 г. \\ Электронные цифровые вычислительные машины //первого  поколения// (1950-х годов) строились на электронных лампах. Они (и лампы, и машины) были громоздки и нежны и потребляли очень много электроэнергии. Так, например, "Стрела" потребляла мощность 150 кВт (как трамвай на полном ходу), из них ровно половина - 75 кВт - приходилась на вентиляторы, обеспечивавшие охлаждение машины. Это несколько странно, потому что у большинства других компьютеров доля энергозатрат на охлаждение гораздо меньше. Устанавливались они в специально оборудованных зданиях или помещениях - вычислительных центрах (ВЦ). Последняя ламповая машина - "Урал-4" - строилась на Пензенском заводе до 1964 г. \\
-Электронные лампы были дороги в изготовлении, имели небольшой срок службы и ограниченное быстродействие, так что стоимость каждой вычислительной операции, произведенной с помощью ламп, была высока. Не хотелось бы втравливать читателя в дебри экономики, но придется хотя бы на первоклашечно-промакашечном уровне кое-какие вопросы затронуть. Денег стоит не только сам компьютер - определенных расходов потребует и его повседневная эксплуатация. Компьютер нужно установить в соответствующем здании, которое размещается на соответствующем земельном участке... Здание нужно обеспечить освещением, отоплением, охраной. Компьютер потребляет электроэнергию - это понятно всем, но еще нам потребуется бумага, перфокарты или то, что придет им на смену, и, извините за вульгарные технические подробности, спирт... Мало-мальски грамотному экономисту даже не потребуются подробные расчеты, чтобы прийти к очевидному решению: каков бы ни был наш бюджет, компьютеры нужно строить в минимальном количестве, но максимально мощные. В идеале - один-единственный компьютер, но такой, в котором каждая лампа работала бы с максимальной отдачей (в начале 50-х годов только так и поступали). Дробление бюджета на N компьютеров меньшей мощности привело бы к тому, что суммарный объем работы, которую эти компьютеры могут поднять за все время своей службы, уменьшится, не говоря уж о том, что какие-то задачи им будут просто не по зубам. \\ 
 В 1947 г. был изобретен полупроводниковый прибор - транзистор, способный выполнять функции, аналогичные функциям электронных ламп, но более компактный, надежный и энергоэкономичный. Первые транзисторы (точечные) оказались неудовлетворительными, затем еще несколько лет потребовалось для налаживания массового производства транзисторов, и в итоге ближе к 1960 г. появились ЭВМ //второго поколения// (подчеркиваю: мы говорим о поколениях электронных цифровых машин, а не компьютеров вообще). \\ В 1947 г. был изобретен полупроводниковый прибор - транзистор, способный выполнять функции, аналогичные функциям электронных ламп, но более компактный, надежный и энергоэкономичный. Первые транзисторы (точечные) оказались неудовлетворительными, затем еще несколько лет потребовалось для налаживания массового производства транзисторов, и в итоге ближе к 1960 г. появились ЭВМ //второго поколения// (подчеркиваю: мы говорим о поколениях электронных цифровых машин, а не компьютеров вообще). \\
 +Во времена моей электронно-компьютерной молодости была книга "Введение в теорию транзисторов". Она была примечательна тем, как в ней подавался материал. Книга была разделена на две части: в первой все объяснялось чисто качественно, без каких-либо формул и расчетов, а во второй как бы все то же самое повторялось, но уже как строгая количественная теория. Ну а если физико-математическую теорию можно излагать "на пальцах", то почему бы не попробовать излагать в таком же стиле другую строгую количественную науку - экономику? \\
 +Электронные лампы были дороги в изготовлении, имели небольшой срок службы и ограниченное быстродействие, так что стоимость каждой вычислительной операции, произведенной с помощью ламп, была высока. Но денег стоит не только сам компьютер - определенных расходов потребует и его повседневная эксплуатация. Компьютер нужно установить в соответствующем здании, которое размещается на соответствующем земельном участке... Здание нужно обеспечить освещением, отоплением, охраной. Компьютер потребляет электроэнергию - это понятно всем, но еще нам потребуется бумага, перфокарты или то, что придет им на смену, и, извините за вульгарные технические подробности, спирт... Мало-мальски грамотному экономисту даже не потребуются подробные расчеты, чтобы прийти к очевидному решению: каков бы ни был наш бюджет, компьютеры нужно строить в минимальном количестве, но максимально мощные. В идеале - один-единственный компьютер, но такой, в котором каждая лампа работала бы с максимальной отдачей (в начале 50-х годов только так и поступали). Дробление бюджета на N компьютеров меньшей мощности привело бы к тому, что суммарный объем работы, которую эти компьютеры могут поднять за все время своей службы, уменьшится, не говоря уж о том, что какие-то задачи им будут просто не по зубам. Но это - в идеале. Штучное изготовление компьютеров не могло продолжаться бесконечно - рано или поздно нужно было переходить к серийному производству. Кстати в США первый серийный компьютер UNIVAC I строился в 1951-1958 гг. - почти одновременно с нашей "Стрелой" (построено 46 шт.). Сравним UNIVAC I со "Стрелой": количество ламп 5200 (6200), потребляемая мощность 125 кВт (150), быстродействие 1900 операций в секунду (2000)... Похоже, не так ли? Сходные задачи приводят к сходным решениям. В разработке UNIVAC участвовала Грейс Хоппер - впоследствии (около 1959 г.) создательница языка программирования Кобол. \\
 +Применение транзисторов радикально снизило стоимость вычислительной операции, но переписывать начисто всю ту экономику, которой мы только что коснулись, было еще рано - это произойдет ближе к 70-м годам, с появлением микросхем и особенно больших микросхем. Тем не менее некоторые подвижки в этом направлении начались. Стало возможным разделение двух направлений развития вычислительной техники: с одной стороны, никто не отменял //"больших"// ЭВМ с новыми техническими возможностями, казавшимися немыслимыми всего несколько лет назад, и с другой стороны, был начат выпуск более простых //малых ЭВМ (мини-ЭВМ)//, которые количественно и качественно не уступают большим ЭВМ предыдущего поколения, но при этом компактны и дешевы, так что их можно строить в больших количествах. Примерами малых ЭВМ являются рассмотренные выше "Наири", "Проминь" и МИР. \\
 На следующих фото - платы (типовые элементы замены - ТЭЗ) советских транзисторных ЭВМ, датируемые 1969, 1981 и 1975 годами соответственно. Две последних, очевидно, были изготовлены как запчасти к машинам более раннего выпуска. \\ На следующих фото - платы (типовые элементы замены - ТЭЗ) советских транзисторных ЭВМ, датируемые 1969, 1981 и 1975 годами соответственно. Две последних, очевидно, были изготовлены как запчасти к машинам более раннего выпуска. \\
 {{igor:istoria-plata-drtl.jpg?400}} \\ {{igor:istoria-plata-drtl.jpg?400}} \\
Строка 125: Строка 127:
 Далее перед нами сфотографированная с большим увеличением структура модуля оперативной памяти ("куба") на ферритовых кольцевых сердечниках. Для сравнения в верхней части снимка - сантиметровая линейка. Датировать этот модуль можно лишь приблизительно: 60-е-70-е годы XX века. \\ Далее перед нами сфотографированная с большим увеличением структура модуля оперативной памяти ("куба") на ферритовых кольцевых сердечниках. Для сравнения в верхней части снимка - сантиметровая линейка. Датировать этот модуль можно лишь приблизительно: 60-е-70-е годы XX века. \\
 {{igor:istoria-ram-ferrit.jpg?400}} \\ {{igor:istoria-ram-ferrit.jpg?400}} \\
-Применение транзисторов радикально снизило стоимость вычислительной операции, но переписывать начисто всю ту экономику, которой мы только что коснулисьбыло еще рано - это произойдет в 70-е годы, с появлением больших микросхем. Однако уже на втором поколении ЭВМ стало возможным разделение двух направлений развития вычислительной техники: с одной стороны, никто не отменял //"больших"// ЭВМ с новыми техническими возможностями, казавшимися немыслимыми всего несколько лет назад, и с другой стороныбыл начат выпуск более простых //малых ЭВМ (мини-ЭВМ)//, которые количественно и качественно не уступают большим ЭВМ предыдущего поколения, но при этом компактны и дешевы, так что их можно строить в больших количествах. Примерами малых ЭВМ являются рассмотренные выше "Наири", "Проминь" и МИР. \\ +В начале 60-х годов XX века были изобретены микросхемы, применение которых позволило продолжить тенденцию к уменьшению размеров и стоимости компьютеров, а следовательно и к дальнейшему "расслоению общества" - к появлению //микро-ЭВМ// и микропроцессоров. Так появилось //третье поколение// ЭВМ, но о нем чуть позже, потому что его появление совпало во времени с наступлением средних веков. \\ \\
-В начале 60-х годов XX века были изобретены микросхемы, применение которых позволило продолжить тенденцию к уменьшению размеров и стоимости компьютеров. Так появилось //третье поколение// ЭВМ, но о нем чуть позже, потому что его появление совпало во времени с наступлением средних веков. \\ \\+
 ==== На земле, в небесах и на море ==== ==== На земле, в небесах и на море ====
 Оказывается, еще в 1950-е годы в нашей стране велись опытно-конструкторские работы по теме автоматизации управления поездами. Эти работы закончились неудачей, так что сейчас едва ли кто-либо о них помнит. О причинах неудач нам вряд ли расскажут, но нетрудно построить несколько рабочих версий. \\ Оказывается, еще в 1950-е годы в нашей стране велись опытно-конструкторские работы по теме автоматизации управления поездами. Эти работы закончились неудачей, так что сейчас едва ли кто-либо о них помнит. О причинах неудач нам вряд ли расскажут, но нетрудно построить несколько рабочих версий. \\
Строка 152: Строка 153:
 Так неожиданно для всех возникла профессия программиста. Возникла как будто на пустом месте - и сразу в полный рост. \\ Так неожиданно для всех возникла профессия программиста. Возникла как будто на пустом месте - и сразу в полный рост. \\
 Элементной базой первых компьютеров были, как мы уже знаем, электромагнитные реле и электровакуумные лампы. Они не были придуманы на пустом месте - это были серийные промышленные изделия, использовавшиеся в аппаратуре связи. Стало быть, кто-то эти изделия создавал, и кто-то их применял. То есть первые компьютеростроители были обычными инженерами: электриками и электронщиками. А программистов среди них не было. Программирование не преподавалось в институтах, по нему не было книг. Между тем работа программиста требует специальных знаний, которые мало коррелируются с обычной математикой и практически совсем не коррелируются ни с электротехникой, ни с электроникой. Объем же этих знаний находится на пределе того, что доступно человеку с очень высоко развитым интеллектом! То есть программирование - самостоятельная профессия: ты можешь изучить целенаправленно именно эту профессию и работать в ней много лет, не нуждаясь ни в чем другом. \\ Элементной базой первых компьютеров были, как мы уже знаем, электромагнитные реле и электровакуумные лампы. Они не были придуманы на пустом месте - это были серийные промышленные изделия, использовавшиеся в аппаратуре связи. Стало быть, кто-то эти изделия создавал, и кто-то их применял. То есть первые компьютеростроители были обычными инженерами: электриками и электронщиками. А программистов среди них не было. Программирование не преподавалось в институтах, по нему не было книг. Между тем работа программиста требует специальных знаний, которые мало коррелируются с обычной математикой и практически совсем не коррелируются ни с электротехникой, ни с электроникой. Объем же этих знаний находится на пределе того, что доступно человеку с очень высоко развитым интеллектом! То есть программирование - самостоятельная профессия: ты можешь изучить целенаправленно именно эту профессию и работать в ней много лет, не нуждаясь ни в чем другом. \\
-Теперь вспомним, что мы говорили выше о стоимости вычислительной операции в древние времена. Стояло требование: программа должна содержать как можно меньше операций, а профит (польза, прибыль) от каждой операции должен быть максимальным. Таков был категорический императив древнего программирования (да и в средние века мало что изменилось). Любая попытка игнорировать или обойти этот императив ничем, кроме убытков, закончиться не могла. Но мы-то, конечно, понимаем, что задача извлечь максимум профита из ограниченного ресурса никогда и нигде в мире не была слишком простой. Стало быть, и людей, способных эту задачу решать, никогда и нигде в мире не было слишком много. Отсюда очевидна необходимость налаживать профессиональный отбор и подготовку таких специалистов. А теперь прикиньте: допустим, летом 1951 года, предвидя запуск М-1 и МЭСМ, мы объявим прием абитуриентов по специальности "программирование" - к работе они приступят не раньше 1956-го года, а еще потребуется года три, чтобы понять, насколько они годны и насколько годна методика их подготовки... \\+Теперь вспомним, что мы говорили выше о стоимости вычислительной операции в древние времена. Стояло требование: программа должна содержать как можно меньше операций, а профит (польза, прибыль) от каждой операции должен быть максимальным. Таков был категорический императив древнего программирования (да и в средние века мало что изменилось). Любая попытка игнорировать или обойти этот императив ничем, кроме убытков, закончиться не могла. Но мы-то, конечно, понимаем, что задача извлечь максимум профита из ограниченного ресурса никогда и нигде в мире не была слишком простой. Стало быть, и людей, способных эту задачу решать, никогда и нигде в мире не было слишком много. Отсюда очевидна необходимость налаживать профессиональный отбор и подготовку таких специалистов. А теперь прикиньте: допустим, летом 1951 года, предвидя запуск М-1 и МЭСМ, мы объявим прием абитуриентов по специальности "программирование" - к работе они приступят не раньше 1956-го года, а еще потребуется года три, чтобы понять, насколько они годны и насколько годна методика их подготовки... На дворе 1958 год - закончен выпуск "Стрелы", ей на смену пришли другие машины, притом много и разных... \\
 Программирование в древности было мастерством на грани искусства. Программистов было мало, а для непрограммиста разработка программ представлялась чем-то совершенно запредельным. \\ Программирование в древности было мастерством на грани искусства. Программистов было мало, а для непрограммиста разработка программ представлялась чем-то совершенно запредельным. \\
 === Задачи и особенности применения ЭВМ === === Задачи и особенности применения ЭВМ ===
Строка 190: Строка 191:
 Во-первых, поскольку основные пользователи Фортрана - ученые, то Фортран для них - инструмент научного познания. В науке ни одно достижение не утверждается само собой: оно требует обсуждения, обоснования, доказательств. Соответственно программа должна быть написана так, чтобы была понятна коллегам-ученым. А поскольку большинство коллег - не профессиональные программисты, изучение множества языков для них было бы совершенно непопутно. Нужен такой язык, чтобы один на всех, язык как средство международного общения. Фортран, будучи предельно простым для изучения (в сравнении с другими языками), этому требованию удовлетворял. \\ Во-первых, поскольку основные пользователи Фортрана - ученые, то Фортран для них - инструмент научного познания. В науке ни одно достижение не утверждается само собой: оно требует обсуждения, обоснования, доказательств. Соответственно программа должна быть написана так, чтобы была понятна коллегам-ученым. А поскольку большинство коллег - не профессиональные программисты, изучение множества языков для них было бы совершенно непопутно. Нужен такой язык, чтобы один на всех, язык как средство международного общения. Фортран, будучи предельно простым для изучения (в сравнении с другими языками), этому требованию удовлетворял. \\
 Во-вторых, в те времена каждый новый компьютер отличался от прежних. Такого привычного нам сейчас понятия, как аппаратная платформа, тогда просто не существовало! Запуск любой программы на "неродном" железе почти всегда был авантюрой с шансами фифти\фифти. А теперь вообразите, что еще и каждая новая программа написана на своем языке... Разрабатывать для каждого нового компьютера множество компиляторов было технически сложно и экономически нерентабельно. Поэтому, как только создавали новый компьютер, первым делом создавали для него компилятор Фортрана, и в большинстве случаев этого было достаточно. \\ Во-вторых, в те времена каждый новый компьютер отличался от прежних. Такого привычного нам сейчас понятия, как аппаратная платформа, тогда просто не существовало! Запуск любой программы на "неродном" железе почти всегда был авантюрой с шансами фифти\фифти. А теперь вообразите, что еще и каждая новая программа написана на своем языке... Разрабатывать для каждого нового компьютера множество компиляторов было технически сложно и экономически нерентабельно. Поэтому, как только создавали новый компьютер, первым делом создавали для него компилятор Фортрана, и в большинстве случаев этого было достаточно. \\
-Рассмотрим процесс решения задачи на древней ЭВМ. Перфокарты, заложенные в лоток считывателя, представляют собой **//поток данных//**. Определение понятия "поток" я дать затрудняюсь, но сейчас нам важно, что (а) поток не имеет определенного конца и начала, не имеет длины, соответственно нужная команда не может быть найдена по ее месту относительно начала потока, (б) все данные, содержащиеся в нем, должны читаться последовательно, в том порядке, как они записаны, и (в) каждый байт из потока можно прочитать только один раз: если упустить его из оперативной памяти, то больше мы его не увидим. Если подготовлено несколько задач, которые нужно решить сегодня, то тексты программ включаются в поток последовательно, а исходные данные для решения каждой задачи либо вставляются прямо в текст программы, либо следуют за ним с соблюдением определенных формальностей. Операционная система читает текст программы и компилирует его. Результат компиляции - машинный код - размещается в оперативной памяти компьютера (больше его размещать, скорее всего, просто негде). По окончании компиляции программа сразу запускается на выполнение. Если какие-то данные нужно вводить, значит, ожидаем увидеть их во входном потоке именно сейчас. Когда задача решена, операционная система читает из входного потока следующие команды. \\+Рассмотрим процесс решения задачи на древней ЭВМ. Перфокарты, заложенные в лоток считывателя, представляют собой **//поток данных//**. Поток представляет собой цепь данных, которая не имеет определенного конца и начала, не имеет длины, соответственно местонахождение каждого "звена" цепи может быть определено только относительно предыдущего и последующего звеньев, но не по его месту относительно начала потока. Все данные, содержащиеся в потоке, должны читаться последовательно, в том порядке, как они записаны, и каждый байт можно прочитать только один раз: если упустить его из оперативной памяти, то больше мы его не увидим. Если подготовлено несколько задач, которые нужно решить сегодня, то тексты программ включаются в поток последовательно, а исходные данные для решения каждой задачи либо вставляются прямо в текст программы, либо следуют за ним с соблюдением определенных формальностей. Операционная система читает текст программы и компилирует его. Результат компиляции - машинный код - размещается в оперативной памяти компьютера (больше его размещать, скорее всего, просто негде). По окончании компиляции программа сразу запускается на выполнение. Если какие-то данные нужно вводить, значит, ожидаем увидеть их во входном потоке именно сейчас. Когда задача решена, операционная система читает из входного потока следующие команды. \\
 При решении научной или инженерной задачи программисту приходится использовать различные функции, например тригонометрические. Встретив в программе упоминание функции, компилятор, очевидно, должен включить в выполняемый код соответствующие команды, а где их взять? Компилятор древней эпохи всегда содержал "джентльменский набор" //встроенных функций//, которые были его неотъемлемой частью: их нельзя было ни перепрограммировать, ни добавить новые. У разных компиляторов набор встроенных функций мог быть более или менее богат, отсюда ошибочный стереотип мышления - сравнение __языков__ по принципу "этот язык лучше, потому что у него больше встроенных функций". На самом деле, как мы понимаем, встроенные функции с языком непосредственной связи не имеют. \\ При решении научной или инженерной задачи программисту приходится использовать различные функции, например тригонометрические. Встретив в программе упоминание функции, компилятор, очевидно, должен включить в выполняемый код соответствующие команды, а где их взять? Компилятор древней эпохи всегда содержал "джентльменский набор" //встроенных функций//, которые были его неотъемлемой частью: их нельзя было ни перепрограммировать, ни добавить новые. У разных компиляторов набор встроенных функций мог быть более или менее богат, отсюда ошибочный стереотип мышления - сравнение __языков__ по принципу "этот язык лучше, потому что у него больше встроенных функций". На самом деле, как мы понимаем, встроенные функции с языком непосредственной связи не имеют. \\
 Если же встроенных функций не хватало, нужно было писать свою, и текст ее вставлять в текст программы. Такой подход в те времена был практически безальтернативен. \\ Если же встроенных функций не хватало, нужно было писать свою, и текст ее вставлять в текст программы. Такой подход в те времена был практически безальтернативен. \\
Строка 199: Строка 200:
 === *** === === *** ===
 Летом 1984 г. мы, студенты, закончившие первый курс, проходили практику на вычислительном центре ЛЭТИ. На ВЦ имелись 3 машины семейства ЕС. Построенные в 70-е-80-е годы, они, однако, представляют собой копию IBM/360, разработанной в 1960-е годы, и по всем инженерным решениям соответствуют древней эпохе. Мы, правда, этих машин так ни разу и не увидели: мы писали тексты программ на бумаге и сдавали их на ВЦ, а потом получали оттуда распечатки с ответами машины. За две недели нам предстояло выполнить 5 выходов на машину и продемонстрировать работоспособность программы на языке Фортран, написанной еще весной в рамках курсового проекта. Однако персонал вычислительного центра к своим обязанностям относился халатно, так что из-за ошибок операторов подготовки данных я за первые три выхода не получил вообще ничего.  Летом 1984 г. мы, студенты, закончившие первый курс, проходили практику на вычислительном центре ЛЭТИ. На ВЦ имелись 3 машины семейства ЕС. Построенные в 70-е-80-е годы, они, однако, представляют собой копию IBM/360, разработанной в 1960-е годы, и по всем инженерным решениям соответствуют древней эпохе. Мы, правда, этих машин так ни разу и не увидели: мы писали тексты программ на бумаге и сдавали их на ВЦ, а потом получали оттуда распечатки с ответами машины. За две недели нам предстояло выполнить 5 выходов на машину и продемонстрировать работоспособность программы на языке Фортран, написанной еще весной в рамках курсового проекта. Однако персонал вычислительного центра к своим обязанностям относился халатно, так что из-за ошибок операторов подготовки данных я за первые три выхода не получил вообще ничего. 
-Преподаватель Тамара Ильинична только руками разводила. И лишь после пятого выхода я наконец увидел на распечатке... только текст своей программы, но без каких-либо выходных данных. У моих товарищей дела шли если лучше, то ненамного. Вычислительный центр, хотя это была целиком их вина, машинного времени нам больше не предоставил, да и срок практики подходил к концу, все хотели на каникулы (Тамара Ильинична не исключение). Практику продолжили уже не на ВЦ, а в лаборатории кафедры вычислительной техники. Там стояла машина СМ-4, но эта машина уже не древняя, а средневековая, так что рассказ о нашей практике на этом прерываю, чтобы продолжить его в следующей главе. \\ +Преподаватель Тамара Ильинична только руками разводила. И лишь после пятого выхода я наконец увидел на распечатке... только текст своей программы, но без каких-либо выходных данных. У моих товарищей дела шли если лучше, то ненамного. Вычислительный центр, хотя это была целиком их вина, машинного времени нам больше не предоставил, да и срок практики подходил к концу, все хотели на каникулы (Тамара Ильинична не исключение). Практику продолжили уже не на ВЦ, а в лаборатории кафедры вычислительной техники. Там стояла машина СМ-4, но эта машина уже не древняя, а средневековая, так что рассказ о нашей практике на этом прерываю, чтобы продолжить его в следующей главе. \\ \\
 ==== Характеристика эпохи ==== ==== Характеристика эпохи ====
-Эпоха древней компьютерной цивилизации пришлась на 50-е-60-е годы XX века и отличается тем, что программируемые цифровые вычислительные машины стали выпускаться на заводах серийно и начали вытеснять технику прежней эпохи, как электромеханическую, так и электронную аналоговую. Введенный мною термин "цивилизация" наверняка вызовет возражения у читателей, особенно у тех, кто интересуется "настоящей" историей. Я настаиваю на этом термине, потому что в рассматриваемую эпоху в СССР, США и Великобритании, а чуть позже и в других странах, сформировалась компьютерно-программная __промышленность__, движущей силой развития которой были уже не энтузиасты-одиночки, работавшие в гаражно-коленочных условиях, а инженерные коллективы, вооруженные научными теориями и имеющие серьезную финансовую поддержку. Несмотря на это, компьютеров было мало, и доступ к ним был __ресурсом__, т. е. чем-то таким, чего все хотели, но на всех не хватало. \\ \\+Эпоха древней компьютерной цивилизации пришлась на 50-е-60-е годы XX века. Отсчет этой эпохи я предлагаю начать с запуска М-1 и МЭСМ: два компьютера вступили в строй почти одновременно - это немало, если сосчитать, сколько всего было в мире до этого. \\ 
 +Древняя эпоха отличается тем, что программируемые цифровые вычислительные машины стали электронными (первоначально - ламповыми), стали выпускаться на заводах серийно и начали вытеснять протокомпьютеры и эокомпьютеры, как электромеханические, так и электронные аналоговые. Введенный мною термин "цивилизация" наверняка вызовет возражения у читателей, особенно у тех, кто интересуется "настоящей" историей. Я настаиваю на этом термине, потому что в рассматриваемую эпоху в СССР, США и Великобритании, а чуть позже и в других странах, сформировалась компьютерно-программная __промышленность__, движущей силой развития которой были уже не энтузиасты-одиночки, работавшие в гаражно-коленочных условиях, а инженерные коллективы, вооруженные научными теориями и имеющие серьезную финансовую поддержку. Несмотря на это, компьютеров было мало, и доступ к ним был __ресурсом__, т. е. чем-то таким, чего все хотели, но на всех не хватало. \\ \\
 ===== 70-е-80-е годы ХХ века - компьютерные средние века ===== ===== 70-е-80-е годы ХХ века - компьютерные средние века =====
 С появлением транзисторов стремление проектировщиков ЭВМ создать небольшое, недорогое и энергоэкономичное изделие не только не остановилось - наоборот, оно еще усилилось. В 1960-е годы была изобретена интегральная микросхема - устройство размером с транзистор (порядка 1 см), содержащее несколько десятков транзисторов и представляющее собой целый блок, реализующий некоторую операцию по обработке данных. В наше время уже никого не удивляют микросхемы с миллионами транзисторов. Микроэлектронная технология (основанная на микросхемах) позволила радикально улучшить все основные параметры компьютеров: уменьшить размеры, вес и стоимость, уменьшить потребление электроэнергии и как следствие - облегчить тепловой режим машины, увеличить быстродействие. Так появились ЭВМ //третьего поколения//, к которому относятся и вся наша нынешняя вычислительная техника. Однако новое поколение само по себе не означало смены исторических эпох: прогресс в деле миниатюризации элементов ЭВМ был и раньше, и позже. Смену исторических эпох я увязываю не с микросхемами, а с внедрением в повседневную практику диалогового режима общения пользователей с ЭВМ. \\ С появлением транзисторов стремление проектировщиков ЭВМ создать небольшое, недорогое и энергоэкономичное изделие не только не остановилось - наоборот, оно еще усилилось. В 1960-е годы была изобретена интегральная микросхема - устройство размером с транзистор (порядка 1 см), содержащее несколько десятков транзисторов и представляющее собой целый блок, реализующий некоторую операцию по обработке данных. В наше время уже никого не удивляют микросхемы с миллионами транзисторов. Микроэлектронная технология (основанная на микросхемах) позволила радикально улучшить все основные параметры компьютеров: уменьшить размеры, вес и стоимость, уменьшить потребление электроэнергии и как следствие - облегчить тепловой режим машины, увеличить быстродействие. Так появились ЭВМ //третьего поколения//, к которому относятся и вся наша нынешняя вычислительная техника. Однако новое поколение само по себе не означало смены исторических эпох: прогресс в деле миниатюризации элементов ЭВМ был и раньше, и позже. Смену исторических эпох я увязываю не с микросхемами, а с внедрением в повседневную практику диалогового режима общения пользователей с ЭВМ. \\
Строка 263: Строка 264:
 На этой лодке эта машина неродная: она датируется концом 1970-х годов, тогда как сама лодка построена в 1950-е. По сути "Клейстер-Н" - это калькулятор, предназначенный в основном для штурманских вычислений. "Клейстер" - ближайший родственник 15-ВСМ-5, о которой мы уже говорили. \\ На этой лодке эта машина неродная: она датируется концом 1970-х годов, тогда как сама лодка построена в 1950-е. По сути "Клейстер-Н" - это калькулятор, предназначенный в основном для штурманских вычислений. "Клейстер" - ближайший родственник 15-ВСМ-5, о которой мы уже говорили. \\
 В 70-е годы в нашей стране построена серия ракетных крейсеров проекта 1164 (в интернете чаще всего можно встретить "Москву" - бывшую "Славу"). На этих кораблях был установлен централизованный вычислительный комплекс, который у моряков получил название БИУС - боевая информационно-управляющая система. "Сердцем" БИУС является ЦВМ "Атака" (строилась серийно на НПО "Агат" в 1976-1990 г., построено 255 шт.). БИУС могла решать несколько десятков типовых задач: как по управлению кораблем, так и по наведению оружия. Круг задач, которые должны были решаться на этой машине, был четко оговорен к началу ее проектирования, поэтому создатели БИУС "заточили" свое изделие под эти задачи, трезво сознавая, что попытка приспособить машину для решения "неродных" задач может оказаться неудачной. Компьютер, проектируемый по такому принципу, называется //специализированным//. Для древней эпохи такие компьютеры были совершенно нехарактерны, а средневековье отмечено их появлением и развитием. С тех давних времен и до наших дней бортовые компьютеры на кораблях и самолетах - всегда специализированные, хотя в наше время они на 3/4 и более собираются из деталей от универсальных компьютеров. \\ В 70-е годы в нашей стране построена серия ракетных крейсеров проекта 1164 (в интернете чаще всего можно встретить "Москву" - бывшую "Славу"). На этих кораблях был установлен централизованный вычислительный комплекс, который у моряков получил название БИУС - боевая информационно-управляющая система. "Сердцем" БИУС является ЦВМ "Атака" (строилась серийно на НПО "Агат" в 1976-1990 г., построено 255 шт.). БИУС могла решать несколько десятков типовых задач: как по управлению кораблем, так и по наведению оружия. Круг задач, которые должны были решаться на этой машине, был четко оговорен к началу ее проектирования, поэтому создатели БИУС "заточили" свое изделие под эти задачи, трезво сознавая, что попытка приспособить машину для решения "неродных" задач может оказаться неудачной. Компьютер, проектируемый по такому принципу, называется //специализированным//. Для древней эпохи такие компьютеры были совершенно нехарактерны, а средневековье отмечено их появлением и развитием. С тех давних времен и до наших дней бортовые компьютеры на кораблях и самолетах - всегда специализированные, хотя в наше время они на 3/4 и более собираются из деталей от универсальных компьютеров. \\
 +Семейство корабельных ЭВМ "Карат" еще даже более интересно, чем "Атака". Разработка была начата еще в 1963 г. в Киевском НИИ радиоэлектроники, но шла небыстро, т. к. требование создать максимально компактную, экономичную и при этом быстродействующую машину было на пределе того, что позволяла тогдашняя элементная база. "Карат" остается едва ли не единственным представителем ЭВМ на больших гибридных микросхемах (нечто похожее было в первых американских IBM/360, но сейчас уже трудно сказать, насколько они были сходны или различны). Машины были 24-разрядные с фиксированной запятой и имели весьма высокое для своего времени быстродействие: позднейшие представители семейства достигали 2.5 миллионов операций в секунду. \\
 Характерная черта средневековых бортовых компьютеров - их программное обеспечение. Операционной системы как таковой в них нет. Вместо ОС может быть небольшая программа - диспетчер, функции которой сводятся к запуску прикладных программ на выполнение по команде пользователя. Все программы, нужные для работы, не хранятся на перфокартах и т. п., а записываются в постоянное запоминающее устройство (ПЗУ), емкость которого (так уж по жизни сложилось) обычно в 4..16 раз больше емкости ОЗУ. Ни редакторов, ни компиляторов, ни линковщиков на таких компьютерах не бывает, так что разработка программ может производиться только на //инструментальной машине//, также как для нынешних микроконтроллеров. Средневековые ПЗУ выполнялись на ферритовых сердечниках, и установка новой программы ("прошивка") выполнялась вручную - это была очень трудоемкая работа, возможная только в заводских условиях. Такое решение, во-первых, гарантирует сохранность программ, и во-вторых, исключает потери времени на загрузку программ в память (на обычных компьютерах при каждом включении, а также после устранения сбоя, производится загрузка ОС, которая может занимать несколько минут). Так обеспечивается готовность машины решать любую задачу немедленно, как только в этом возникнет необходимость. \\ Характерная черта средневековых бортовых компьютеров - их программное обеспечение. Операционной системы как таковой в них нет. Вместо ОС может быть небольшая программа - диспетчер, функции которой сводятся к запуску прикладных программ на выполнение по команде пользователя. Все программы, нужные для работы, не хранятся на перфокартах и т. п., а записываются в постоянное запоминающее устройство (ПЗУ), емкость которого (так уж по жизни сложилось) обычно в 4..16 раз больше емкости ОЗУ. Ни редакторов, ни компиляторов, ни линковщиков на таких компьютерах не бывает, так что разработка программ может производиться только на //инструментальной машине//, также как для нынешних микроконтроллеров. Средневековые ПЗУ выполнялись на ферритовых сердечниках, и установка новой программы ("прошивка") выполнялась вручную - это была очень трудоемкая работа, возможная только в заводских условиях. Такое решение, во-первых, гарантирует сохранность программ, и во-вторых, исключает потери времени на загрузку программ в память (на обычных компьютерах при каждом включении, а также после устранения сбоя, производится загрузка ОС, которая может занимать несколько минут). Так обеспечивается готовность машины решать любую задачу немедленно, как только в этом возникнет необходимость. \\
 На берегу, на гражданской службе более типична несколько другая ситуация: круг задач, которые предстоит решать на компьютере, не определен как исчерпывающий список. Разработчик такого компьютера вынужден "пройти между Сциллой и Харибдой": сосредоточить максимум усилий на нужных задачах и в то же время обеспечить приспосабливаемость машины к решению новых задач, которые могут появиться в будущем. Такой компьютер называется //проблемно-ориентированным//. Малые ЭВМ серии СМ, которые строились в нашей стране в 70-е годы, как и их американские прототипы, относятся к проблемно-ориентированным: они могут решать много разных задач, однако есть такие задачи, которые им не под силу. Структура программного обеспечения проблемно-ориентированных машин практически такая же, как и у "больших", и включает операционную систему и инструментарий для разработки программ. \\ На берегу, на гражданской службе более типична несколько другая ситуация: круг задач, которые предстоит решать на компьютере, не определен как исчерпывающий список. Разработчик такого компьютера вынужден "пройти между Сциллой и Харибдой": сосредоточить максимум усилий на нужных задачах и в то же время обеспечить приспосабливаемость машины к решению новых задач, которые могут появиться в будущем. Такой компьютер называется //проблемно-ориентированным//. Малые ЭВМ серии СМ, которые строились в нашей стране в 70-е годы, как и их американские прототипы, относятся к проблемно-ориентированным: они могут решать много разных задач, однако есть такие задачи, которые им не под силу. Структура программного обеспечения проблемно-ориентированных машин практически такая же, как и у "больших", и включает операционную систему и инструментарий для разработки программ. \\
 Специализированные компьютеры для гражданского применения в средние века тоже существовали: они применялись в промышленных роботах, станках с ЧПУ и автоматизированных системах управления технологическими процессами. \\ Специализированные компьютеры для гражданского применения в средние века тоже существовали: они применялись в промышленных роботах, станках с ЧПУ и автоматизированных системах управления технологическими процессами. \\
-Семейство корабельных ЭВМ "Карат" еще даже более интересно, чем "Атака". Разработка была начата еще в 1963 г. в Киевском НИИ радиоэлектроники, но шла небыстро, т. к. требование создать максимально компактную и экономичную машину было на пределе того, что позволяла тогдашняя элементная база. "Карат" остается едва ли не единственным представителем ЭВМ на больших гибридных микросхемах. Машины были 24-разрядные с фиксированной запятой и имели весьма высокое для своего времени быстродействие: позднейшие представители семейства достигали 2.5 миллионов операций в секунду. \\ 
 Я пишу в основном о корабельных ЭВМ, поскольку с ними знаком. На самом деле "Атака" была не первой такой машиной, а ведь были ЭВМ и самолетные, и наземные. \\ \\ Я пишу в основном о корабельных ЭВМ, поскольку с ними знаком. На самом деле "Атака" была не первой такой машиной, а ведь были ЭВМ и самолетные, и наземные. \\ \\
 ==== Программирование в средние века ==== ==== Программирование в средние века ====
-Программирование в средние века, в отличие от древней эпохи, постепенно перестало быть искусством, стало больше похоже на обычную инженерную деятельность. Это обусловлено, во первых, появлением множества языков программирования, так что каждый, кто хотел стать программистом, мог выбрать язык на свой вкус и кошелек. С другой стороны, в США и Англии была создана система профессионального обучения программистов. В СССР такую систему тоже пытались создать, но идеологическая зашоренность мешала, так что качество подготовки программистов оставляло желать лучшего. Я говорю сейчас именно о системе подготовки специалистов, а не об отдельных личностях, которые стали компьютерными гениями помимо этой системы (хорошо если не вопреки ей). \\+Изучая древнюю компьютерную цивилизацию, мы произнесли фразу: "кто имел хороший компьютер, тот имел наше все". С наступлением средних веков ситуация стала меняться. Выпуск транзисторов и микросхем привел к тому, что компьютеров стало много. Задач для них тоже меньше не стало. Но связующим звеном между Задачей и Компьютером была и остается Программа. Кто имел хорошую программу, тот имел наше все, а кто программы не имел, тот был обречен оставаться лузером. \\ 
 +=== Задачи === 
 +В средние века наметилось разделение некогда единой профессии программиста на несколько специальностей. \\ 
 +Прежде всегоразмежевались системные программисты и прикладные. Важнейшее различие между ними в том, что в прикладном программировании господствовали языки высокого уровня, тогда как системное ПО разрабатывалось преимущественно на языках ассемблера. Но и в лагере прикладных программистов единства тоже больше не было. \\ 
 +Выше мы уже неоднократно отмечали, что весь древний компьютерный мир, как "железный", так и программный, был "заточен" под сложные физико-математические задачи. Однако ничто не вечно под луной - в 60-е годы ситуация начала меняться. В средние века Большая Математика была уже в основном перемолота, но на смену ей пришла Большая Экономика. Под этим термином я подразумеваю не только экономическую науку (хотя там тоже есть над чем голову поломать), но вообще весь комплекс задач по управлению народным хозяйством: складской и управленческий учетпланирование и управление производством, логистику и, конечно, бухгалтерию, куда же без нее, родимой? \\ 
 +Мы говорим о типичных для того времени прикладных задачах, но никто не отменял инженерных задач, осталось и некоторое количество научных. Про последние, собственно, сейчас уже трудно сказать, стало ли их меньше: очевидно, что с увеличением общемирового объема вычислительных работ доля науки в этом объеме мало-помалу устремилась к нулю. Под инженерными мы понимаем, с одной стороны, расчетные задачи, близкие к научным (в этой отрасли программирования мало что изменилось по сравнению с древними веками), и с другой стороны, задачи, близкие к экономическим: разработка различной документации, например технологической (на заводах) или сметной (на стройках). \\ 
 +Задачи Большой Экономики отличаются от физико-математических тем, что здесь не бывает сложных алгоритмов. По большому счету основная масса экономических задач сводится к выборке подмножества показателей из некоторого множества и суммированию соответствующих величин. Это операция тотализации, которая еще в первобытные времена успешно решалась с помощью счетно-аналитических машин. Однако отсутствие алгоритма отнюдь не упрощает работу программиста - скорее наоборот. Программы древней эпохи обычно довольно компактны. Грубо говоря, древний программист 360 дней в году размышлял над моделями и методами, а 25 декабря садился-таки за компьютер, и к новому году его размышления воплощались в пару страниц на Фортране или Алголе. Новые задачи часто требовали написания программ непривычно большого объема. Разработка таких программ всегда дело долгое и хлопотное. Однако давайте задумаемся, из каких источников эта работа может финансироваться. \\ 
 +В древние времена программные разработки проводились не сами по себе - обычно они были частью какого-то, как мы теперь сказали бы, приоритетного национального проекта: атомного, космического, оборонного... Деньги на такие проекты не то чтобы никто не считал - считали, конечно, но деньги так или иначе находились. Теперь же заказчиками разработок были частные фирмы, у которых денег в принципе не бесконечно, но даже то, что есть, невозможно вкладывать только в программирование. Скажем иначе: программирование НЕ МОЖЕТ стоить дороже, чем та задача, которую решаем. Что же получается? Объем работы программистам добавили, а денег стало меньше? \\ 
 +Эти "ножницы цен" компенсировались частично за счет налаженной системы подготовки специалистов, а частично за счет коммерческой разработки программ. Разумеется, настоящая коммерческая разработка была возможна только в капиталистических странах. В СССР нечто подобное пытались создать, но получалось не очень удачно. \\ 
 +Как виделась смена задач с точки зрения одного отдельно взятого программиста? Как снижение привлекательности профессии сразу по всем статьям: моральным ("тут тебе не в космос лететь"), интеллектуальным ("не тот уровень высоты полета") и материальным. \\ 
 +Так в средние века, в отличие от древней эпохи, программирование постепенно перестало быть искусством, стало больше похоже на обычную инженерную деятельность. Это обусловлено, во первых, появлением множества языков программирования, так что каждый, кто хотел стать программистом, мог выбрать язык на свой вкус и кошелек. С другой стороны, в США и Англии была создана система профессионального обучения программистов. В СССР такую систему тоже пытались создать, но идеологическая зашоренность мешала, так что качество подготовки программистов оставляло желать лучшего. Я говорю сейчас именно о системе подготовки специалистов, а не об отдельных личностях, которые стали компьютерными гениями помимо этой системы (хорошо если не вопреки ей). \\
 === Операционные системы средних веков === === Операционные системы средних веков ===
 Выше мы говорили о новых, нетипичных для древней эпохи прикладных задачах, а сейчас остановимся на операционных системах. В этой главе рассмотрим ОС крупных компьютеров - мейнфреймов. \\ Выше мы говорили о новых, нетипичных для древней эпохи прикладных задачах, а сейчас остановимся на операционных системах. В этой главе рассмотрим ОС крупных компьютеров - мейнфреймов. \\
Строка 278: Строка 289:
 Идея виртуальных машин позволяет решить проблему переносимости программ с компьютера на компьютер на новом уровне. Представим, что у нас имеется игровая программа, созданная когда-то раньше для эксплуатации на игровой приставке, а теперь мы хотим эксплуатировать ее на обычном компьютере. Теперь мы можем категорически отказаться от переделки самой программы: максимум, что нам грозит, - это написать новый контейнер, но это придется делать, только если не найдем подходящий готовый. Правда, эта задача хорошо решается при условии, что обе "платформы" снабжены хорошей документацией, а это в нашем мире, к сожалению, бывает не всегда. Так появилась идея создать СВМ - операционную систему, в которой прикладная программа обязательно помещается в контейнер и живет только в нем. Стало быть, все, что нужно для плодотворной работы прикладному программисту, - это справочник по тем услугам (сервисам), которые предоставляет контейнер, а программисту, пишущему контейнер, - справочники по системным вызовам обеих ОС. Но ведь контейнер обычно проще, чем большая прикладная программа или чем ОС, да и необходимость в его разработке возникает не так часто, поэтому программистов, разрабатывающих контейнеры, может быть немного, и основные людские силы можно сосредоточить на разработке прикладных программ, что мы и хотим. \\ Идея виртуальных машин позволяет решить проблему переносимости программ с компьютера на компьютер на новом уровне. Представим, что у нас имеется игровая программа, созданная когда-то раньше для эксплуатации на игровой приставке, а теперь мы хотим эксплуатировать ее на обычном компьютере. Теперь мы можем категорически отказаться от переделки самой программы: максимум, что нам грозит, - это написать новый контейнер, но это придется делать, только если не найдем подходящий готовый. Правда, эта задача хорошо решается при условии, что обе "платформы" снабжены хорошей документацией, а это в нашем мире, к сожалению, бывает не всегда. Так появилась идея создать СВМ - операционную систему, в которой прикладная программа обязательно помещается в контейнер и живет только в нем. Стало быть, все, что нужно для плодотворной работы прикладному программисту, - это справочник по тем услугам (сервисам), которые предоставляет контейнер, а программисту, пишущему контейнер, - справочники по системным вызовам обеих ОС. Но ведь контейнер обычно проще, чем большая прикладная программа или чем ОС, да и необходимость в его разработке возникает не так часто, поэтому программистов, разрабатывающих контейнеры, может быть немного, и основные людские силы можно сосредоточить на разработке прикладных программ, что мы и хотим. \\
 Сказанное не означает, что виртуализация нужна только для запуска программ на "чужом" железе. Она уместна и в том случае, если хост-платформа и целевая платформа различаются чисто количественно, например емкостью оперативной памяти. \\ Сказанное не означает, что виртуализация нужна только для запуска программ на "чужом" железе. Она уместна и в том случае, если хост-платформа и целевая платформа различаются чисто количественно, например емкостью оперативной памяти. \\
-**//Виртуальную память//** определим подобно тому, как мы выше определили виртуальную машину: это память, которой нет, но функции ее выполняются. Виртуальная память - важнейший элемент виртуальной машины. Настолько важнейший, что оправдывает существование даже такой ВМ, которая ничего иного не обеспечивает. Представим, что у нас есть модельный ряд машин с емкостью оперативной памяти от 8КБ (ЕС-1010) до 8МБ (ЕС-1060), а нам поставили задачу обработать массив размером 64МБ. Без виртуальной памяти это задача не может быть решена ни на одной из имеющихся машин, но на ЕС есть СВМ, которая позволяет нам писать программы, вообще не задумываясь о том, сколько памяти будет на той машине, на которой эта программа будет работать - и, с другой стороны, нашу программу можно будет эксплуатировать на любой машине, поддерживающей СВМ, причем эксплуатировать с максимальной эффективностью, с использованием всей памяти, которую машина готова нам предоставить, и без необходимости что-либо менять в прикладной программе или в ОС. \\+**//Виртуальную память//** определим подобно тому, как мы выше определили виртуальную машину: это память, которой нет, но функции ее выполняются. Виртуальная память - важнейший элемент виртуальной машины. Настолько важнейший, что оправдывает существование даже такой ВМ, которая ничего иного не обеспечивает. Представим, что у нас есть модельный ряд машин с емкостью оперативной памяти от 8КБ (ЕС-1010) до 8МБ (ЕС-1060), а нам поставили задачу обработать массив размером 64МБ. Без виртуальной памяти эта задача не может быть решена ни на одной из имеющихся машин, но на ЕС есть СВМ, которая позволяет нам писать программы, вообще не задумываясь о том, сколько памяти будет на той машине, на которой эта программа будет работать - и, с другой стороны, нашу программу можно будет эксплуатировать на любой машине, поддерживающей СВМ, причем эксплуатировать с максимальной эффективностью, с использованием всей памяти, которую машина готова нам предоставить, и без необходимости что-либо менять в прикладной программе или в ОС. \\
 По аналогии с виртуальной памятью нетрудно разобраться, что такое виртуальные периферийные устройства. Средневековые ЭВМ чаще всего имели множество однотипных периферийных устройств, например 8 накопителей на магнитных дисках. Который из них будет отведен для нашей задачи? Прикладному программисту было бы крайне желательно работать, не задумываясь над такими вопросами. А в идеале - писать программу так, чтобы устройство ввода-вывода при эксплуатации программы можно было бы переназначить, не переделывая саму программу... Забегая вперед, скажу, что в ОС нового времени, например в DOS и GNU/Linux, имеются механизмы стандартного ввода и стандартного вывода - по большому счету это то же самое, что виртуальные устройства. \\ По аналогии с виртуальной памятью нетрудно разобраться, что такое виртуальные периферийные устройства. Средневековые ЭВМ чаще всего имели множество однотипных периферийных устройств, например 8 накопителей на магнитных дисках. Который из них будет отведен для нашей задачи? Прикладному программисту было бы крайне желательно работать, не задумываясь над такими вопросами. А в идеале - писать программу так, чтобы устройство ввода-вывода при эксплуатации программы можно было бы переназначить, не переделывая саму программу... Забегая вперед, скажу, что в ОС нового времени, например в DOS и GNU/Linux, имеются механизмы стандартного ввода и стандартного вывода - по большому счету это то же самое, что виртуальные устройства. \\
 Очевидно, операционные системы виртуальных машин обещают определенное удобство, но мы должны понимать, что любое удобство в этом мире не бесплатно: СВМ требует определенного времени на выполнение своих обязанностей, поэтому множество прикладных программ в СВМ будет выполняться медленнее (иногда значительно медленнее), чем на реальной машине без СВМ. В древние века, когда машин было мало и их быстродействие оставляло желать лучшего, такие идеи не имели шансов на признание. В средние века они оказались востребованы, а в последующие десятилетия стали практически обязательными. \\ Очевидно, операционные системы виртуальных машин обещают определенное удобство, но мы должны понимать, что любое удобство в этом мире не бесплатно: СВМ требует определенного времени на выполнение своих обязанностей, поэтому множество прикладных программ в СВМ будет выполняться медленнее (иногда значительно медленнее), чем на реальной машине без СВМ. В древние века, когда машин было мало и их быстродействие оставляло желать лучшего, такие идеи не имели шансов на признание. В средние века они оказались востребованы, а в последующие десятилетия стали практически обязательными. \\
Строка 306: Строка 317:
 Про язык Си часто говорят, что он дает очень быстрый машинный код, значительно более быстрый, чем дают другие языки. Что мы вкладываем в слово "значительно"? На 10%? На 20? Никаких исследований на эту тему никто не поводил. Это миф, который рассказывают и слушают люди, не готовые разобраться в подлинных причинно-следственных связях между явлениями. Язык Си принципиально ничем не отличается от Паскаля и более того - от Алгола. Более быстрый код дает не язык как таковой, а компилятор. Почему? - Элементарно: компилятор Алгола в 50-е годы создавали с нуля, с чистого листа, а компилятор языка С в 70-е годы разрабатывался с опорой на 15-летний опыт эксплуатации Алгола и ПЛ-1 (да и Фортрана тоже). А раз так, то было бы вполне логично ожидать, что он будет на четверть или даже на треть быстрее. \\ Про язык Си часто говорят, что он дает очень быстрый машинный код, значительно более быстрый, чем дают другие языки. Что мы вкладываем в слово "значительно"? На 10%? На 20? Никаких исследований на эту тему никто не поводил. Это миф, который рассказывают и слушают люди, не готовые разобраться в подлинных причинно-следственных связях между явлениями. Язык Си принципиально ничем не отличается от Паскаля и более того - от Алгола. Более быстрый код дает не язык как таковой, а компилятор. Почему? - Элементарно: компилятор Алгола в 50-е годы создавали с нуля, с чистого листа, а компилятор языка С в 70-е годы разрабатывался с опорой на 15-летний опыт эксплуатации Алгола и ПЛ-1 (да и Фортрана тоже). А раз так, то было бы вполне логично ожидать, что он будет на четверть или даже на треть быстрее. \\
 Еще один миф: язык Си якобы приближен к архитектуре компьютера. КАКОГО компьютера? Разных архитектур очень много - к какой из них этот язык ближе всего? И вопрос номер следующий: если Си - язык высокого уровня, то правильно ли __в принципе__ приближать его к архитектуре какого-либо компьютера? По идее, такой язык должен быть абстракцией, которая к разным компьютерам подходила бы в равной степени. \\ Еще один миф: язык Си якобы приближен к архитектуре компьютера. КАКОГО компьютера? Разных архитектур очень много - к какой из них этот язык ближе всего? И вопрос номер следующий: если Си - язык высокого уровня, то правильно ли __в принципе__ приближать его к архитектуре какого-либо компьютера? По идее, такой язык должен быть абстракцией, которая к разным компьютерам подходила бы в равной степени. \\
 +=== Статическая и оверлейная линковка ===
 +Выше мы рассмотрели линковщик как новую (в сравнении с древней эпохой) служебную программу, собирающую загрузочный файл из множества объектных файлов, выданных компилятором. В простейшем случае линковщик помещает в загрузочный файл основную программу со всеми нужными подпрограммами - это //статическая линковка//. В средние века наряду со статической была уже освоена //оверлейная линковка//: весь программный код делился на сравнительно небольшой основной загрузочный модуль и несколько оверлейных модулей. При запуске программы на выполнение основной загрузочный модуль загружался в оперативную память, и ему сразу передавалось управление, а оверлейные модули подгружались только тогда, когда нужно было выполнить содержащиеся в них подпрограммы. Разумеется, вопрос о том, какие части программы включить в основной загрузочный модуль и какие в оверлеи, мог решить только программист: "программист решил - линковщик сделал". Оверлейная линковка позволяла (1) уменьшить затраты времени на загрузку программы в оперативную память и (2) эксплуатировать большую и сложную программу на машине с ограниченной емкостью памяти (пусть хотя бы ценой некоторой "задумчивости" при выполнении некоторых операций), но не спасала от того, что разные программы на половину или больше состоят из одних и тех же деталей: каждый оверлейный модуль принадлежал какой-то одной программе. Отсюда вытекает очевидная идея "обобществить" оверлейные модули, но эта идея - более поздняя. Мы ее коснемся в главе "новое время". \\
 === Компиляторы и интерпретаторы === === Компиляторы и интерпретаторы ===
 Мы рассмотрели компиляционную технологию программирования как наследие древнекомпьютерной цивилизации, дожившее с некоторыми изменениями до нашего времени. В 60-е-70-е годы XX века имело место разделение некогда единой технологии программирования на два "рукава": компиляционный и интерпретационный. В 1964 г. был придуман **Бэйсик**, и так вышло, что именно он, а не Паскаль и не Си, стал королем средневековых языков. \\ Мы рассмотрели компиляционную технологию программирования как наследие древнекомпьютерной цивилизации, дожившее с некоторыми изменениями до нашего времени. В 60-е-70-е годы XX века имело место разделение некогда единой технологии программирования на два "рукава": компиляционный и интерпретационный. В 1964 г. был придуман **Бэйсик**, и так вышло, что именно он, а не Паскаль и не Си, стал королем средневековых языков. \\
 Программисты моего поколения вспоминают Бэйсик как кошмар, хотя, если вдуматься, в нем не было ничего такого ужасного. Возвращаюсь к мысли о том, что программа - техническое изделие, а техническим изделиям отнюдь не чужды понятия о красоте. У нас был старый верный Фортран: брутальный, как швейцарский электровоз, и крепкий, как ледокол "Красин". Его раздербанили на запчасти, 80% деталей слегка перекрасили, чтобы создать видимость обновления, еще 10% допилили напильником на коленке для обеспечения работы в режиме интерпретации, и добавили множество подпорок, подставок и подкладок, обеспечивающих работу на абонентских терминалах. Какой же красоты можно было ожидать от такого изделия? \\ Программисты моего поколения вспоминают Бэйсик как кошмар, хотя, если вдуматься, в нем не было ничего такого ужасного. Возвращаюсь к мысли о том, что программа - техническое изделие, а техническим изделиям отнюдь не чужды понятия о красоте. У нас был старый верный Фортран: брутальный, как швейцарский электровоз, и крепкий, как ледокол "Красин". Его раздербанили на запчасти, 80% деталей слегка перекрасили, чтобы создать видимость обновления, еще 10% допилили напильником на коленке для обеспечения работы в режиме интерпретации, и добавили множество подпорок, подставок и подкладок, обеспечивающих работу на абонентских терминалах. Какой же красоты можно было ожидать от такого изделия? \\
-Несмотря на этоБэйсик знаменует собой переход от древней эпохи к средним векамдело в том, что это первый языксоздававшийся с самого начала как диалоговый. И он же был первым широко распространенным **//интерпретационным//** языком. Компиляторы Фортрана, Алгола и других языков преобразовывали исходный текст программы в машинный код, который затем запускался на выполнение. Бэйсик работает иначе. Интерпретатор просматривает исходный текст строка за строкой и сам выполняет описанные в строке действия. Поскольку каждую строку приходится обрабатывать отдельно, выполнение всей программы происходит намного медленнее, чем выполнение машинного кода, зато отпадает необходимость в компиляции как отдельном этапе работы. Что лучше? Если бы что-то было лучше, все поступали бы только так. Большая и сложная программа, особенно если она обрабатывает большие массивы данных, гораздо эффективнее выполняется с участием компилятора. Но в ряде случаев, особенно при выполнении учебных заданий, выполнение программы "на лету", без компиляции, может быть даже быстрее. И еще одно преимущество интерпретатора: поскольку он не вырабатывает никакого машинного кода, а выполняет все действия сам, неправильно написанная прикладная программа ничего не может испортить. Впрочем, в те годы это преимущество никому не казалось существенным. \\ +Мы договорились изучать историю серьезно, а история учит, что все новое в этом мире не возникает просто так: если какая-то вещь появилась, значит она кому-то для чего-то была нужна. Кому и для чего был нужен Бэйсик? Ответ на этот вопрос кроется в названии языка: BASIC - Beginners All-purpose Symbolic Instruction Code - многоцелевой символический командный код для начинающих. То есть Бэйсик не рассматривался как боевой язык - только как учебный, да не просто учебный, а для студентов младших курсов. В те времена еще господствовали перфокарточные технологии. Они были более-менее приемлемы для практикующих программистов, но крайне неудобны для обучения: даже совсем простую программу из 10 строк невозможно было отладить за время одного учебного занятия. Нужен был диалоговый режим. Телетайпы тогда уже существовали, но мейнфреймык которым их можно было бы подключить, если и были, то были большой редкостью. Да и не всякий вычислительный центр предоставил бы машинное время первоклашкам-промакашкам. Еще были маленькие машины в калибре нашей "Наири" - диалоговый режим они могли обеспечить, но полнопрофильный компилятор типа Фортрана или Алгола они бы не потянули. Если же из языка выкинуть по максимуму все то, что изучается на старших курсах, то транслятор можно "укоротить" до 4 КБайт, а то и меньше... Вот вам и решение. \\  
-Поскольку интерпретатор не порождает машинного кода, автор программы, написанной на Бэйсике, может передавать ее другим лицам ТОЛЬКО в виде исходного кода. Это с какой-то стороны хорошо, а с какой-то плохо (это кому как!) - ну не бывает на свете идеальных инженерных решений. Безусловно хорошо то, что такая программа может быть запущена на любом компьютере, на котором имеется соответствующий интерпретатор. В какой-то мере интерпретатор Бэйсика (и любого другого языка из тех, что появились позже) может рассматриваться как виртуальная машина - доступная владельцу мелкого компьютера альтернатива СВМ больших мейнфреймов. В предыдущей главе мы отметили, что разработчики __древних__ компьютеров первым делом оснащали свои детища компилятором Фортрана - точно так же в __средние века__ разработчики 16-разрядных мини-ЭВМ (PDP-11, они же СМ-3, СМ-4) обязательно оснащали свои операционные системы интерпретатором Бэйсика, а разработчики восьмиразрядных домашне-игровых компьютеров без него не мыслили своих машин. На этих компьютерах он был основным и чаще всего единственным языком, потому что написать для такой слабой машины мало-мальски приличный компилятор было весьма непростой задачей, стоимость которой свела бы к нулю всю привлекательность таких машинок. А на советских ПК обычно вообще никакого другого программного обеспечения не было. Более серьезные программисты не жаловали Бэйсик, и теперь мы можем понять, почему. \\ +Чем жертвовали создатели Бэйсика и ради чего? Боевыми возможностями языка? Но поскольку язык для начального обучения, то это не считается. То, что язык получился кривой и некрасивый, - это хуже, потому что отрицательно влияет на интеллектуальное становление будущих специалистов. Зато получили первый в истории диалоговый язык, и он же был первым широко распространенным **//интерпретационным//** языком. Компиляторы Фортрана, Алгола и других языков преобразовывали исходный текст программы в машинный код, который затем запускался на выполнение. Бэйсик работает иначе. Интерпретатор просматривает исходный текст строка за строкой и сам выполняет описанные в строке действия. Поскольку каждую строку приходится обрабатывать отдельно, выполнение всей программы происходит намного медленнее, чем выполнение машинного кода, зато отпадает необходимость в компиляции как отдельном этапе работы. Что лучше? Если бы что-то было лучше, все поступали бы только так. Большая и сложная программа, особенно если она обрабатывает большие массивы данных, гораздо эффективнее выполняется с участием компилятора. Но в ряде случаев, особенно при выполнении учебных заданий, выполнение программы "на лету", без компиляции, может быть даже быстрее. И еще одно преимущество интерпретатора: поскольку он не вырабатывает никакого машинного кода, а выполняет все действия сам, неправильно написанная прикладная программа ничего не может испортить. Впрочем, в те годы это преимущество никому не казалось существенным. \\ 
-На замену Бэйсику был придуман Фокал, но он не обещал ни чудес, ни революций и в итоге оказался мертворожденным. Несмотря на критику, которой Бэйсик подвергался с "молодости", он пережил несколько реинкарнаций. Однако будущего у него нет. \\ +Поскольку интерпретатор не порождает машинного кода, автор программы, написанной на Бэйсике, может передавать ее другим лицам ТОЛЬКО в виде исходного кода. Это с какой-то стороны хорошо, а с какой-то плохо (это кому как!) - ну не бывает на свете идеальных инженерных решений. Безусловно хорошо то, что такая программа может быть запущена на любом компьютере, на котором имеется соответствующий интерпретатор. В какой-то мере интерпретатор Бэйсика (и любого другого языка из тех, что появились позже) может рассматриваться как виртуальная машина - доступная владельцу мелкого компьютера альтернатива СВМ больших мейнфреймов. В предыдущей главе мы отметили, что разработчики __древних__ компьютеров первым делом оснащали свои детища компилятором Фортрана - точно так же в __средние века__ разработчики 16-разрядных мини-ЭВМ (PDP-11, они же СМ-3, СМ-4) оснащали свои операционные системы интерпретатором Бэйсика, хотя для таких машин он уже должен был считаться устаревшим. А разработчики восьмиразрядных домашне-игровых компьютеров своей жизни без Бэйсика не мыслили, потому что написать для такой слабой машины мало-мальски приличный компилятор было весьма непростой задачей, стоимость которой свела бы к нулю всю привлекательность таких машинок. А на советских ПК обычно вообще никакого другого программного обеспечения не было. Более серьезные программисты не жаловали Бэйсик, считали его //суррогатной технологией//. Однако в средние века проблема суррогатных технологий не ощущалась так остропоэтому к ней я надеюсь вернуться, когда наша история дойдет до нового времени\\ 
-=== Статическая и оверлейная линковка === +На замену Бэйсику был придуман Фокал, но он не обещал ни чудесни революций и в итоге оказался мертворожденным. Несмотря на критикукоторой Бэйсик подвергался с "молодости", он пережил несколько реинкарнаций. Однако будущего у него нет. \\ \\
-Выше мы рассмотрели линковщик как новую (в сравнении с древней эпохой) служебную программу, собирающую загрузочный файл из множества объектных файлов, выданных компилятором. В простейшем случае линковщик помещает в загрузочный файл основную программу со всеми нужными подпрограммами - это //статическая линковка//. В средние века наряду со статической была уже освоена //оверлейная линковка//: весь программный код делился на сравнительно небольшой основной загрузочный модуль и несколько оверлейных модулейПри запуске программы на выполнение основной загрузочный модуль загружался в оперативную память, и ему сразу передавалось управлениеа оверлейные модули подгружались только тогда, когда нужно было выполнить содержащиеся в них подпрограммы. Разумеется, вопрос о том, какие части программы включить в основной загрузочный модуль и какие в оверлеи, мог решить только программист: "программист решил - линковщик сделал". Оверлейная линковка позволяла (1) уменьшить затраты времени на загрузку программы в оперативную память и (2) эксплуатировать большую и сложную программу на машине с ограниченной емкостью памяти (пусть хотя бы ценой некоторой "задумчивостипри выполнении некоторых операций), но не спасала от того, что разные программы на половину или больше состоят из одних и тех же деталей: каждый оверлейный модуль принадлежал какой-то одной программе. Отсюда вытекает очевидная идея "обобществить" оверлейные модули, но эта идея - более поздняя. Мы ее коснемся в главе "новое время". \\ \\+
 ==== Немного воспоминаний и размышлений ==== ==== Немного воспоминаний и размышлений ====
 В предыдущей главе я рассказывал вам про свою студенческую практику, но не закончил этот рассказ - теперь, как и обещал, продолжу. \\ В предыдущей главе я рассказывал вам про свою студенческую практику, но не закончил этот рассказ - теперь, как и обещал, продолжу. \\
Строка 330: Строка 342:
 В 80-е годы (в те самые годы, на которые пришлась моя студенческая молодость) дела в отечественной компьютерно-программной отрасли были уже настолько плохи, что нужно было что-то делать. Это вроде бы было очевидно всем, но что КОНКРЕТНО НУЖНО было делать, и более того: что МОЖНО БЫЛО В ПРИНЦИПЕ сделать? Этого никто не знал. Между тем деградационный процесс, как домовый гриб, опутал длинными серыми щупальцами все величественное здание Мировой Социалистической Системы: от промышленного фундамента до краснозвездных идеологических шпилей. Теперь мы, жители XXI века, можем дать этому процессу точное научное название: БАНКРОТСТВО. Проще говоря, народ и государство хотели жить красиво, имея в виду нечто большее чем лозунги на кумаче и многометровые портреты Ленина на зданиях. Но для такой красивой жизни нужно много денег, а где их взять? - Очевидно, выйти на мировой рынок с высококачественным товаром, который кто-то захочет купить. Компьютеры и особенно программы могли бы стать идеальными товарами 80-х годов, да и до нашего времени таковыми остались. Но изготовить такой товар - это сложно, а думать о сложном в жизни в 80-е годы, в отличие от 50-х, никто не хотел. Открытие грандиозных нефтегазовых месторождений в Тюменской области создало иллюзию: вот он, товар, который позволит наконец досыта накормить весь 220-миллионный народ! Компьютеры и программы стали вдруг никому не нужны. \\ \\ В 80-е годы (в те самые годы, на которые пришлась моя студенческая молодость) дела в отечественной компьютерно-программной отрасли были уже настолько плохи, что нужно было что-то делать. Это вроде бы было очевидно всем, но что КОНКРЕТНО НУЖНО было делать, и более того: что МОЖНО БЫЛО В ПРИНЦИПЕ сделать? Этого никто не знал. Между тем деградационный процесс, как домовый гриб, опутал длинными серыми щупальцами все величественное здание Мировой Социалистической Системы: от промышленного фундамента до краснозвездных идеологических шпилей. Теперь мы, жители XXI века, можем дать этому процессу точное научное название: БАНКРОТСТВО. Проще говоря, народ и государство хотели жить красиво, имея в виду нечто большее чем лозунги на кумаче и многометровые портреты Ленина на зданиях. Но для такой красивой жизни нужно много денег, а где их взять? - Очевидно, выйти на мировой рынок с высококачественным товаром, который кто-то захочет купить. Компьютеры и особенно программы могли бы стать идеальными товарами 80-х годов, да и до нашего времени таковыми остались. Но изготовить такой товар - это сложно, а думать о сложном в жизни в 80-е годы, в отличие от 50-х, никто не хотел. Открытие грандиозных нефтегазовых месторождений в Тюменской области создало иллюзию: вот он, товар, который позволит наконец досыта накормить весь 220-миллионный народ! Компьютеры и программы стали вдруг никому не нужны. \\ \\
 ==== Характеристика эпохи ==== ==== Характеристика эпохи ====
-Компьютерные средние века наступили около 1970 года, хотя значительная часть человечества жила в древности, а то и в первобытности, чуть ли не до 1990-го года. Характерные черты этого исторического периода: \\ +Компьютерные средние века наступили около 1970 года. Эта дата приблизительна. С одной сторонымногие технические решения (как "железячные", так и программные), знаменующие эту эпоху, появились в 60-е годы. С другой стороны, значительная часть человечества жила в древности, а то и в первобытности, чуть ли не до 1990-х годов. Характерные черты этого исторического периода: \\ 
-* Выражаясь философским языком, имело место отрицание отрицания: то, что в __древнюю__ эпоху виделось как шаг назад, к первобытности, я имею в виду возрождение специализированных компьютеров как класса, теперь воспринималось как прогресс. \\+* Выражаясь философским языком, имело место отрицание отрицания: то, что в древнюю эпоху виделось как шаг назад, к первобытности, я имею в виду возрождение специализированных компьютеров как класса, теперь воспринималось как прогресс. \\
 * И еще одно отрицание отрицания: с одной стороны, дальнейший рост компьютерной промышленности, выполняющей государственные заказы (в том числе военные) и, с другой стороны, подключение к общему делу частных фирм, в т. ч. мелких, производящих компьютеры и особенно программы за свой счет, поставляющих их на открытый рынок и живущих на полной самоокупаемости без какой-либо государственной поддержки. Примером такой компании является ныне всемирно известный "Микрософт", который начинался в 1975 г. с двух работников: Б. Гейтса и П. Аллена. Разумеется, в СССР таких частных фирм быть не могло, и это предопределило последующее отставание нашей страны от США. \\ * И еще одно отрицание отрицания: с одной стороны, дальнейший рост компьютерной промышленности, выполняющей государственные заказы (в том числе военные) и, с другой стороны, подключение к общему делу частных фирм, в т. ч. мелких, производящих компьютеры и особенно программы за свой счет, поставляющих их на открытый рынок и живущих на полной самоокупаемости без какой-либо государственной поддержки. Примером такой компании является ныне всемирно известный "Микрософт", который начинался в 1975 г. с двух работников: Б. Гейтса и П. Аллена. Разумеется, в СССР таких частных фирм быть не могло, и это предопределило последующее отставание нашей страны от США. \\
 * ЭВМ появились во многих научно-исследовательских и учебных заведениях и на технологически развитых заводах, где они все чаще использовались для решения ранее несвойственных им задач, прежде всего в области экономики. Компьютер постепенно перестает быть чисто вычислительной машиной в том строгом смысле, как это понималось в древнюю эпоху: доля численных расчетов в общем объеме работы мирового компьютерного парка сокращается, а увеличивается объем работы с непривычной информацией, например символьной: хранение и обработка текстов, таблиц, баз данных; поиск, выборка, упорядочение... Все эти операции типичны для народно-хозяйственных задач (бухгалтерских и планово-экономических), а также для инженерных, таких как например патентные исследования. \\ * ЭВМ появились во многих научно-исследовательских и учебных заведениях и на технологически развитых заводах, где они все чаще использовались для решения ранее несвойственных им задач, прежде всего в области экономики. Компьютер постепенно перестает быть чисто вычислительной машиной в том строгом смысле, как это понималось в древнюю эпоху: доля численных расчетов в общем объеме работы мирового компьютерного парка сокращается, а увеличивается объем работы с непривычной информацией, например символьной: хранение и обработка текстов, таблиц, баз данных; поиск, выборка, упорядочение... Все эти операции типичны для народно-хозяйственных задач (бухгалтерских и планово-экономических), а также для инженерных, таких как например патентные исследования. \\
Строка 344: Строка 356:
 {{igor:istoria-notebook-1.jpg?400}} \\ {{igor:istoria-notebook-1.jpg?400}} \\
 (на этом фото экспонат Музея связи - "Тошиба Т1600", Япония, около 1990 г.), а также настольные компьютеры типа "моноблок" (в них вся компьютерная "начинка" встроена в корпус монитора, что характерно для продукции фирмы "Эппл"), но в нашей стране практически до конца XX века они были редкостью. \\ (на этом фото экспонат Музея связи - "Тошиба Т1600", Япония, около 1990 г.), а также настольные компьютеры типа "моноблок" (в них вся компьютерная "начинка" встроена в корпус монитора, что характерно для продукции фирмы "Эппл"), но в нашей стране практически до конца XX века они были редкостью. \\
-Процессор 80286 был прямым потомком Intel 8086, который мы рассмотрели в главе "Микропроцессоры, калькуляторы и персональные компьютеры". Этот процессор предлагал несколько новшеств: защищенный режим (который, правда, так и не нашел применения в тогдашних операционных системах) и возможность адресации бОльших пространств памяти по сравнению с предшественником. Сам же процессор остался шестнадцатиразрядным, а вот процессоры 80386 и 80486 были уже 32-разрядными. (такие процессоры, очень похожие на интеловские, выпускались также фирмой "АМД"). Эволюция процессоров шла по пути усложнения, что не могло не отразиться и на их цене, и на энергопотреблении. А последнее не могло не отразиться на температурном режиме процессора. Если 486-й процессор еще мог работать при естественном охлаждении, то следующее поколение - "Пентиум" - уже не обходилось без вентилятора. Усложнялось и программирование компьютеров, и все эти обстоятельства не давали покоя конкурентам "Интела" - они в противовес интеловской архитектуре разрабатывали свои процессоры, свободные от рассмотренных здесь недостатков. В те века уже был известен принцип RISC - Reduced Instruction Set Computer - компьютер с сокращенной системой команд. Фокус RISC отнюдь не сводится к экономии бумаги при печати мануала по системе команд: такие процессоры дешевле, потребляют меньше энергии и соответственно меньше греются, и при этом работают зачастую быстрее обычных процессоров со сложной системой команд. Однако во времена операционной системы ДОС в мире было наработано огромное количество программ для компьютеров на интеловских процессорах, и хотя ДОС давно уже выведена из эксплуатации, эти программы до нашего времени позволяют процессорам "Интел"/"АМД" не только преодолевать конкурентное давление, но и развиваться дальше. \\ \\+Процессор 80286 был прямым потомком Intel 8086, который мы рассмотрели в главе "Микропроцессоры, калькуляторы и персональные компьютеры". Этот процессор предлагал несколько новшеств: защищенный режим (который, правда, так и не нашел применения в тогдашних операционных системах) и возможность адресации бОльших пространств памяти по сравнению с предшественником. Сам же процессор остался шестнадцатиразрядным, а вот процессоры 80386 и 80486 были уже 32-разрядными. (такие процессоры, очень похожие на интеловские, выпускались также фирмой "АМД"). \\ 
 +Как видим, персональный компьютер нового времени сильно отличается от средневекового. Если средневековый ПК был маленькой и дешевой машинкой с ограниченным кругом решаемых задач, то ПК нового времени приобрел все основные архитектурные черты, ранее свойственные мейнфреймам, а по быстродействию даже превосходил их. По цене же такой компьютер быстро сравнялся с ПК прежнего поколения. Неудивительно, что "эйтишки" быстро захватили весь компьютерный рынок, вытеснив с него как мейнфреймы, так и восьмиразрядные машины. Спираль истории завершила круг: деление компьютеров на большие и малые, наметившееся на исходе древней эпохи и достигшее апогея в средние века, сошло на нет: теперь все устройства, называемые компьютерами, были "большими", а малыми остались микропроцессоры и микроконтроллеры - наследники УМ-1-НХ. Термин "управляющая машина" постепенно вышел из употребления, уступив место термину "промышленная автоматика". Впрочем, это различие - не более чем просто терминология. \\ 
 +С другой стороны, выражение "промышленная автоматика" не следует понимать буквально: машины, подразумеваемые под этим названием, работали не только на заводах. Железнодорожная СЦБ, корабельные БИУС, авионика - все это близкородственные отрасли. И микропроцессорная "начинка" тогдашних телевизоров, DVD-плееров, аппаратуры сотовой связи - это все, по большому счету, та же самая техника, в отличие от нынешней, которая гораздо ближе к "большим" компьютерам, чем к малым. \\ 
 +Однако вернемся к персональным компьютерам 90-х годов. Эволюция процессоров шла по пути усложнения, что не могло не отразиться и на их цене, и на энергопотреблении. А последнее не могло не отразиться на температурном режиме процессора. Если 486-й процессор еще мог работать при естественном охлаждении, то следующее поколение - "Пентиум" - уже не обходилось без вентилятора. Усложнялось и программирование компьютеров, и все эти обстоятельства не давали покоя конкурентам "Интела" - они в противовес интеловской архитектуре разрабатывали свои процессоры, свободные от рассмотренных здесь недостатков. В те века уже был известен принцип RISC - Reduced Instruction Set Computer - компьютер с сокращенной системой команд. Фокус RISC отнюдь не сводится к экономии бумаги при печати мануала по системе команд: такие процессоры дешевле, потребляют меньше энергии и соответственно меньше греются, и при этом работают зачастую быстрее обычных процессоров со сложной системой команд. Однако во времена операционной системы ДОС в мире было наработано огромное количество программ для компьютеров на интеловских процессорах, и хотя ДОС давно уже выведена из эксплуатации, эти программы до нашего времени позволяют процессорам "Интел"/"АМД" не только преодолевать конкурентное давление, но и развиваться дальше. \\ 
 +Еще несколько слов про ДОС. Выше мы отмечали, что в древнюю эпоху как пользователь, так и программист общались с компьютером через посредника - оператора подготовки данных, а в средние века преобладающим способом общения стал диалог через видеотерминал. Суть диалогового режима в том, что человек набирает на клавиатуре команды в виде цифробуквенных последовательностей, иногда напоминающих обычные человеческие слова. Каждую команду нужно было "разжевать и в рот компьютеру положить". Новое время - новые порядки: ДОС предлагала //полноэкранный// режим взаимодействия человека с машиной. Теперь, чтобы запустить некоторую прикладную программу, оператор вызывал на экран меню и с помощью клавиш со стрелками (нам всем эти клавиши, конечно, хорошо знакомы) навести подсветку меню на название нужной программы. Эту операцию можно было делать руками, а мозг при этом был занят решаемой задачей и не отвлекался на мелочи - безусловно, такая работа более плодотворна и менее утомительна, чем диалог. Итак, если в древние века пользователь общался с машиной в основном через посредничество оператора подготовки данных, а в средние века преобладал диалоговый режим, то новое компьютерное время - это эпоха общения пользователя с компьютером на языке меню, клавиш "Вверх-вниз" и манипуляторов типа мыши и джойстика. \\ \\
 ==== Компьютерные игры и игровые компьютеры в новое время ==== ==== Компьютерные игры и игровые компьютеры в новое время ====
 Уменьшение стоимости компьютеров и расширение их промышленного выпуска в разных странах (а не только в США, как раньше) привело к пересмотру взглядов на компьютерные игры. Выше, обсуждая компьютерные игры в средние века, я обещал рассказать о пересмотре незыблемых истин - настала пора выполнить это обещание. \\ Уменьшение стоимости компьютеров и расширение их промышленного выпуска в разных странах (а не только в США, как раньше) привело к пересмотру взглядов на компьютерные игры. Выше, обсуждая компьютерные игры в средние века, я обещал рассказать о пересмотре незыблемых истин - настала пора выполнить это обещание. \\
Строка 420: Строка 436:
 Сопоставлять Windows и Linux можно еще очень долго, но я сейчас остановлюсь на том, что эти системы существуют и будут существовать в единстве и борьбе еще долго. Так появившиеся в середине XIX века пароходы в течение целого века сосуществовали и соперничали с парусниками, пока в их взаимоотношения не вмешался Дизель (это быль, и в ней намек - добрым молодцам и красным девицам урок). \\ Сопоставлять Windows и Linux можно еще очень долго, но я сейчас остановлюсь на том, что эти системы существуют и будут существовать в единстве и борьбе еще долго. Так появившиеся в середине XIX века пароходы в течение целого века сосуществовали и соперничали с парусниками, пока в их взаимоотношения не вмешался Дизель (это быль, и в ней намек - добрым молодцам и красным девицам урок). \\
 Заметим, что Linux - не единственный идейный наследник UNIX. Подобных операционных систем в 90-е годы и в начале XXI века было создано очень много - вероятно десятки. Но наибольшее распространение наряду с линуксами получили ОС семейства BSD от Университета Беркли (разрабатывалась в 1978-1994 гг., после чего ей на смену пришла бесплатная OpenBSD), и коммерческая MacOS от фирмы "Эппл". Все они - из США. Эти системы очень похожи: кто освоил MacOS, тот легко перейдет на Linux, и наоборот, и BSD аналогично. \\ Заметим, что Linux - не единственный идейный наследник UNIX. Подобных операционных систем в 90-е годы и в начале XXI века было создано очень много - вероятно десятки. Но наибольшее распространение наряду с линуксами получили ОС семейства BSD от Университета Беркли (разрабатывалась в 1978-1994 гг., после чего ей на смену пришла бесплатная OpenBSD), и коммерческая MacOS от фирмы "Эппл". Все они - из США. Эти системы очень похожи: кто освоил MacOS, тот легко перейдет на Linux, и наоборот, и BSD аналогично. \\
-Заканчивая разговор об операционных системах нового времени, я хотел бы обратить внимание читателей вот на какой аспект. Ни Столлман, ни Торвальдс не были бунтарями или новаторами. Они только хотели сделать программное обеспечение доступным для всех, и они это сделали, но не ставили перед собой амбициозных задач типа перелома исторических эпох - они шли в фарватере UNIX. Так идеология операционной системы, разрабатывавшаяся еще в 70-е годы XX века, оказалась законсервирована в новых изделиях. Чуть позже мы будем рассматривать новейшее компьютерное время, практически совпадающее с XXI веком, но в области операционных систем никакого новейшего времени мы не наблюдаем, и в главе "Новейшее компьютерное время" разговора об операционных системах не будет. \\ \\+Заканчивая разговор об операционных системах нового времени, я хотел бы обратить внимание читателей вот на какой аспект. Ни Столлман, ни Торвальдс не были бунтарями или новаторами. Они только хотели сделать программное обеспечение доступным для всех, и они это сделали, но не ставили перед собой амбициозных задач типа перелома исторических эпох - они шли в кильватере UNIX. Так идеология операционной системы, разрабатывавшаяся еще в 70-е годы XX века, оказалась законсервирована в новых изделиях. Чуть позже мы будем рассматривать новейшее компьютерное время, практически совпадающее с XXI веком, но в области операционных систем никакого новейшего времени мы не наблюдаем, и в главе "Новейшее компьютерное время" разговора об операционных системах не будет. \\ \\
 ==== Программирование в новое время ==== ==== Программирование в новое время ====
-В главе "Компьютерные средние века" мы рассмотрели целый ряд языков и отметили, что с тех пор и до наших дней в этой области не произошло никаких революционных изменений. Сказанное не означает, что никаких событий вообще не произошло. \\+=== Задачи, языки и технологии программирования=== 
 +В новое время программирование как единая профессия, по большому счету, перестало существовать. Вместо одной мы получили множество профессий, для каждой из которых характерны свои инструменты и свои приемы работы, зачастую настолько различные, что переход из одной области программирования в другую может оказаться весьма затруднительным. \\ 
 +**Программирование мелкокаменное и крупнокаменное**. В обиходе камнем называют процессор, а мелко - по-гречески микро, так что мелкокаменная техника - это микропроцессоры и микроконтроллеры, и мелкокаменное программирование соответственно. \\ 
 +Мелкокаменное программирование в новое время - последний значительный оплот программистов-ассемблерщиков. При всех моих лично-субъективных симпатиях к ассемблеру, должен сказать, что применять его для микропроцессоров и микроконтроллеров - идея не очень удачная по ряду причин. Во-первых, мелкокаменная техника эксплуатируется в заводских цехах и иных подобных местах, и было бы идеально, если бы ее там обслуживали не программисты, а специалисты по соответствующему технологическому оборудованию - слесаря КИПиА (контрольно-измерительных приборов и автоматики) или даже просто электрики. Эти профессии относятся к рабочим, а не к инженерным. Изучение хотя бы основ программирования для этих людей достаточно обременительно (а ассемблер - это отнюдь не основы, это высший пилотаж!). Во-вторых, ассемблер - машинно-зависимый язык, так что в случае замены машины переложение старой программы на новую машину может оказаться весьма непростой задачей. Создать для  
 +киповцев и электриков специальный, притом машино-независимый, язык - идея очевидно вполне здравая... Но чтобы здравая идея получила столь же здравое воплощение в металл, нужны соответствующие научные исследования и опытно-конструкторские разработки, а вот тут у кого-то что-то не сконтачилось. Международная электротехническая комиссия (МЭК), вместо того чтобы разрабатывать стандарт мелкокаменного языка (а разработка стандартов - ее непосредственная трудовая функция), слепила его из того, что было, а потом, как это обычно и бывает в жизни, "что было, то и полюбила": в стандарт вошли не один, а целых 5 языков (мы их рассмотрим чуть подробнее в главе "Микроконтроллеры"). Они появились стихийно в разное время в разных странах, каждый из них имел свои кривоватости и шероховатости, а когда 5 языков попытались объединить в нечто целое, эти шероховатости никуда не исчезли - наоборот, проявились еще сильнее. Неудивительно, что до конца нового времени МЭКовские языки так и не составили скольк-нибудь серьезной альтернативы ассемблеру. И даже в новейшую эпоху, когда все программирующее человечество уже послало ассемблеру последний прощальный поцелуй, МЭКовские языки так и не заняли преобладающего положения на рынке, уступив место языку Си. \\ 
 +Про технологии крупнокаменного программирования буквально пара слов. Новое время отмечено окончательным отказом как от древних технологий, основанных на потоковом вводе данных, так и от средневековых, ориентированных на использование телетайпов и пишущих машинок. На языках остановимся более подробно, но чуть ниже. \\ 
 +**Программирование системное и прикладное**. В главе "Компьютерные средние века" мы рассмотрели целый ряд языков и отметили, что с тех пор и до наших дней в этой области не произошло никаких революционных изменений. Сказанное не означает, что никаких событий вообще не произошло. \\
 В 90-е годы XX века имела место коренная ревизия языкового "арсенала". Если языком N1 в древности был Фортран, а в средние века Бэйсик, то к началу нового времени из всех ранее известных языков остался, по большому счету, только Си. Подчеркиваю: по большому счету, потому что Кобол, Ада и даже Фортран никуда не исчезали, просто их доля в общем объеме разработок программного обеспечения значительно уменьшилась, а ПЛ-1, Паскаль и много других языков практически вышли из употребления. \\ В 90-е годы XX века имела место коренная ревизия языкового "арсенала". Если языком N1 в древности был Фортран, а в средние века Бэйсик, то к началу нового времени из всех ранее известных языков остался, по большому счету, только Си. Подчеркиваю: по большому счету, потому что Кобол, Ада и даже Фортран никуда не исчезали, просто их доля в общем объеме разработок программного обеспечения значительно уменьшилась, а ПЛ-1, Паскаль и много других языков практически вышли из употребления. \\
 В чем секрет долгожительства тех или иных языков? \\ В чем секрет долгожительства тех или иных языков? \\
 Выгляните в окно, посмотрите на улицу. Среди автомобилей, которые по улице едут, каждый второй - классические "Жигули". Которые, кстати, уже много лет как сняты с производства. А "Ладу-Калину" вы вряд ли сейчас увидите, хотя она выпускалась гораздо позже. Язык программирования - техническое устройство, промышленное изделие.  Выгляните в окно, посмотрите на улицу. Среди автомобилей, которые по улице едут, каждый второй - классические "Жигули". Которые, кстати, уже много лет как сняты с производства. А "Ладу-Калину" вы вряд ли сейчас увидите, хотя она выпускалась гораздо позже. Язык программирования - техническое устройство, промышленное изделие. 
-Точно так же, как автомобиль. Техническое устройство может жить долго или не очень в зависимости от того, насколько толково оно сделано, насколько полезно в жизни. \\ +Точно так же, как автомобиль. Техническое устройство может жить долго или не очень в зависимости от того, насколько толково оно сделано, насколько полезно в жизни... Ну и, конечно, нельзя сбрасывать со счетов вопрос о том, в какие руки устройство попало. \\ 
-Если отбросить мифы вроде того, который мы обсудили в главе "Компьютерные средние века", то получаем: Фортран - язык математиков и физиков, Ада - язык авиации и космонавтики, Си - язык разработчиков юниксоидных операционных систем. На этих языках наработано программное обеспечение в миллионы или миллиарды строк. Переписывать это все на какой-то другой язык - работа на миллионы человеко-лет. Кто будет этим заниматься, и на какие шиши? Отсюда очевидный вывод: перечисленные языки будут существовать, как минимум, до тех пор, пока будут нужны написанные на них программы, то есть еще очень долго. А тюльпаны... Что тюльпаны? Как расцвели, так и завяли. \\ +Если отбросить мифы вроде тех, которые мы обсудили в главе "Компьютерные средние века", то получаем: Фортран - язык математиков и физиков, Ада - язык авиации и космонавтики, Си - язык разработчиков юниксоидных операционных систем. На этих языках написано программное обеспечение в миллионы или миллиарды строк. Переписывать это все на какой-то другой язык - колоссальная работа. Кто будет этим заниматься, и на какие шиши? Отсюда очевидный вывод: перечисленные языки будут существовать, как минимум, до тех пор, пока будут нужны написанные на них программы, то есть еще очень долго. А тюльпаны... Что тюльпаны? Как расцвели, так и завяли. \\ 
-Процесс выращивания новых сортов тюльпанов на этомоднако, не остановился он развернулся с новой силой. \\+В системном программировании в новое время язык ассемблера еще применялся, но его доля в общем объеме работы быстро сходит на нет. Используется он в основном там, где приходится плотно работать с "железом": при программировании драйверов, кодеков, прошивок. В остальных областях системного программирования первенство захватывает язык Си. Программисты нового времени его считают языком низкого уровня. \\ 
 +Что касается прикладного программирования, то многообразие задач влечет за собой многообразие инструмента для их решения, в том числе и языков. Так что процесс выращивания новых сортов тюльпанов отнюдь не остановился - он развернулся с новой силой. В этом практически никто не видит ничего плохого, многие даже радуются. На самом деле такое "разнообразие" влечет целый ряд негативных последствий. \\ 
 +Во-первыхоно затрудняет взаимопонимание между программистами, а значит и сотрудничество. \\ 
 +Во-вторых, в мире, где уйма нерешенных задач, люди тратят тысячи человеко-лет на изобретение языков, от которых ждут непонятно каких чудес. А тем временем другие люди тратят нерационально (а то и вовсе теряют) миллионы человеко-лет, пытаясь применить какой-нибудь новомодный язык для решения задач, для которых он, как ПОТОМ выясняется, совершенно не предназначен и не приспособлен. \\ 
 +Впрочем, язык Си и в прикладном программировании используется достаточно широко. \\ 
 +=== *** ===
 В новое время, да и сейчас, обычна такая ситуация, когда программист приходит устраиваться на работу, и ему говорят: нам требуется 5-летний опыт работы на таком-то языке... А потом оказывается, что этот язык изобретен 2 года назад! Спросите такого работодателя, почему он выбрал именно этот язык - и он с апломбом в голосе ответит: "у нас передовая фирма, мы хотим быть на острие технического прогресса!" (это очень похоже на то, как мои одноклассники, вступая в Комсомол, писали заявления по типовой форме: "хочу быть в передовом отряде советской молодежи"). За этой фразой скрывается нежелание и неспособность просчитывать экономическую эффективность принимаемых управленческих решений. Совершенно ясно, что работа на такой фирме ничего, кроме убытков, не принесет. \\ В новое время, да и сейчас, обычна такая ситуация, когда программист приходит устраиваться на работу, и ему говорят: нам требуется 5-летний опыт работы на таком-то языке... А потом оказывается, что этот язык изобретен 2 года назад! Спросите такого работодателя, почему он выбрал именно этот язык - и он с апломбом в голосе ответит: "у нас передовая фирма, мы хотим быть на острие технического прогресса!" (это очень похоже на то, как мои одноклассники, вступая в Комсомол, писали заявления по типовой форме: "хочу быть в передовом отряде советской молодежи"). За этой фразой скрывается нежелание и неспособность просчитывать экономическую эффективность принимаемых управленческих решений. Совершенно ясно, что работа на такой фирме ничего, кроме убытков, не принесет. \\
 Очень интересно читать в интернете прогнозы о том, сколько будет языков и сколько программистов через энное количество лет. В том, что количество языков будет расти, все предсказатели абсолютно единодушны. А вот в прогнозах количества программистов единодушия нет и в помине. Что же получается? Скоро каждый программист будет работать на своем языке, притом не на одном??? \\ Очень интересно читать в интернете прогнозы о том, сколько будет языков и сколько программистов через энное количество лет. В том, что количество языков будет расти, все предсказатели абсолютно единодушны. А вот в прогнозах количества программистов единодушия нет и в помине. Что же получается? Скоро каждый программист будет работать на своем языке, притом не на одном??? \\
Строка 437: Строка 464:
 //процедур// - действий, которые должны выполняться в определенной последовательности. Варка каши или проводка судна из порта А в порт Б, вычисление квадратного корня или точение детали из заготовки на токарном станке, маневры с вагонами на станции или подготовка выстрела из артиллерийского орудия... И сколько люди производили подобные работы, столько же они писали различные руководства или наставления, в которых нужные действия перечислялись строка за строкой в предположении, что исполнитель будет выполнять их в том порядке, как они записаны. Ничего удивительного, что и первые компьютеры работали по этому же принципу, и первые программы писались так и только так. Однако в 80-е-90-е годы люди начали задумываться: а нельзя ли программировать как-то по-другому? \\ //процедур// - действий, которые должны выполняться в определенной последовательности. Варка каши или проводка судна из порта А в порт Б, вычисление квадратного корня или точение детали из заготовки на токарном станке, маневры с вагонами на станции или подготовка выстрела из артиллерийского орудия... И сколько люди производили подобные работы, столько же они писали различные руководства или наставления, в которых нужные действия перечислялись строка за строкой в предположении, что исполнитель будет выполнять их в том порядке, как они записаны. Ничего удивительного, что и первые компьютеры работали по этому же принципу, и первые программы писались так и только так. Однако в 80-е-90-е годы люди начали задумываться: а нельзя ли программировать как-то по-другому? \\
 Чтобы понять, можно ли по-другому, еще чуть-чуть углубимся в тему, как мы бы сейчас сказали, процедурно-ориентированного программирования. \\ Чтобы понять, можно ли по-другому, еще чуть-чуть углубимся в тему, как мы бы сейчас сказали, процедурно-ориентированного программирования. \\
-Традиционное, или процедурно-ориентированное, программирование привычно и естественно, потому что так запрограммирован человеческий мозг. Мозг абсолютно универсален: он способен находить, пусть не сразу, решение любой новой задачи. Как бы ни был написан исходный текст программы на языке высокого уровня, в конечном счете он будет скомпилирован в машинный код, написанный в процедурно-ориентированной парадигме. Или скажем иначе: какова бы ни была задача, она либо может быть запрограммирована в процедурно-ориентированном стиле, либо не может быть запрограммирована совсем. \\+Традиционное, или процедурно-ориентированное, программирование привычно и естественно, потому что так запрограммирован человеческий мозг. Мозг абсолютно универсален: он способен находить, пусть не сразу, решение любой новой задачи. Как бы ни был написан исходный текст программы на языке высокого уровня, в конечном счете он будет скомпилирован в машинный код, написанный в процедурно-ориентированной парадигме. Если этот код декомпилировать, то получим текст программы, также написанный в процедурно-ориентированной парадигме. Или скажем иначе: какова бы ни была задача, она либо может быть запрограммирована в процедурно-ориентированном стиле, либо не может быть запрограммирована совсем. \\
 Традиционное программирование описывает действия исходя из того, что "если все правильно делать, то все правильно и получится". **//Функционально-ориентированное//** программирование исходит из того, что смысл любых действий - в выдаче того или иного __результата__, который зависит от имеющихся исходных данных. А зависимость на языке математики - функция. Если она сложная, то ее раскладывают на множество более простых. Так образуется исходный текст программы, который описывает, как промежуточные результаты вычислений зависят друг от друга. \\ Традиционное программирование описывает действия исходя из того, что "если все правильно делать, то все правильно и получится". **//Функционально-ориентированное//** программирование исходит из того, что смысл любых действий - в выдаче того или иного __результата__, который зависит от имеющихся исходных данных. А зависимость на языке математики - функция. Если она сложная, то ее раскладывают на множество более простых. Так образуется исходный текст программы, который описывает, как промежуточные результаты вычислений зависят друг от друга. \\
 Представим, что конечный результат решения задачи описывается функцией f<sub>0</sub>(x,y), где x и y образуются как результаты других функций: x=f<sub>1</sub>(a), y=f<sub>2</sub>(b), где a и b - исходные данные. Функции f<sub>1</sub> и f<sub>2</sub> взамно независимы, и их тексты в программе могут быть расположены произвольным образом. И выполняться они могут в любом порядке: сначала f<sub>1</sub>, затем f<sub>2</sub> или наоборот. Что это нам дает? Как будто ничего, да? Фокус начинается с того, что они могут вычисляться __одновременно__. А вот это уже очень важно и интересно, если у нас многоядерный компьютер. \\ Представим, что конечный результат решения задачи описывается функцией f<sub>0</sub>(x,y), где x и y образуются как результаты других функций: x=f<sub>1</sub>(a), y=f<sub>2</sub>(b), где a и b - исходные данные. Функции f<sub>1</sub> и f<sub>2</sub> взамно независимы, и их тексты в программе могут быть расположены произвольным образом. И выполняться они могут в любом порядке: сначала f<sub>1</sub>, затем f<sub>2</sub> или наоборот. Что это нам дает? Как будто ничего, да? Фокус начинается с того, что они могут вычисляться __одновременно__. А вот это уже очень важно и интересно, если у нас многоядерный компьютер. \\
 Функционально-ориентированное программирование привлекательно для решения достаточно широкого множества задач, но его универсальность - вопрос, как минимум, дискуссионный. В теории все хорошо, но жива теория, а древо жизни пышно увядает. Попробуйте запрограммировать в таком стиле задачу упорядочения большого массива.  Функционально-ориентированное программирование привлекательно для решения достаточно широкого множества задач, но его универсальность - вопрос, как минимум, дискуссионный. В теории все хорошо, но жива теория, а древо жизни пышно увядает. Попробуйте запрограммировать в таком стиле задачу упорядочения большого массива. 
 Если у вас вообще что-то получится, то программа будет чрезвычайно громоздкой и бестолковой. Если же перед вами положить распечатки двух таких программ, созданных по разным алгоритмам (а чудес на свете не бывает - от описания алгоритмов вам по-любому никуда не деться!), то разобраться, какой алгоритм лучше, будет совершенно нереально. В то же время распечатка __процедуры__ упорядочения занимает полстраницы, и понять ее принцип, оценить преимущества и недостатки будет обычной работой даже для начинающего программиста (упорядочение - алгоритм N2 из тех, которые хороший профессор преподает своим студентам, считая N1 извлечение квадратного корня). \\ Если у вас вообще что-то получится, то программа будет чрезвычайно громоздкой и бестолковой. Если же перед вами положить распечатки двух таких программ, созданных по разным алгоритмам (а чудес на свете не бывает - от описания алгоритмов вам по-любому никуда не деться!), то разобраться, какой алгоритм лучше, будет совершенно нереально. В то же время распечатка __процедуры__ упорядочения занимает полстраницы, и понять ее принцип, оценить преимущества и недостатки будет обычной работой даже для начинающего программиста (упорядочение - алгоритм N2 из тех, которые хороший профессор преподает своим студентам, считая N1 извлечение квадратного корня). \\
-О функциональном программировании начали говорить достаточно давно: когда именно, сейчас уже вряд ли можно установить с точностью. Во всяком случае, язык программирования РЕФАЛ, реализовавший идеи функционального программирования, создавался еще в 1966 г. Какого-то определенного автора также не назвать. Но до самых последних годов эта парадигма мало кем принималась всерьез. Примером современного языка, реализующего функционально-ориентированную парадигму, является Хаскель. Он создавался большим коллективом разработчиков еще около 1990 г. на основе языка Миранда (Д. Тёрнер, 1985 г., сейчас этот язык в России не в ходу), но в моду вошел по-настоящему только во втором десятилетии XXI в. \\+О функциональном программировании начали говорить достаточно давно: когда именно, сейчас уже вряд ли можно установить с точностью, и какого-то одного определенного автора ФОП также не назвать. Во всяком случае, язык программирования РЕФАЛ, реализовавший идеи функционального программирования, создавался еще в 1966 г., причем это была оригинальная отечественная разработка (ее автор В. Турчин). До самых последних годов эта парадигма мало кем принималась всерьез. Примером современного языка, реализующего функционально-ориентированную парадигму, является Хаскель. Он создавался большим коллективом разработчиков еще около 1990 г. на основе языка Миранда (Д. Тёрнер, 1985 г., сейчас этот язык в России не в ходу), но в моду вошел по-настоящему только во втором десятилетии XXI в. \\
 Следующая парадигма, характерная для нового компьютерного времени, - это **//объектно-ориентированное программирование//**. ООП - это не какой-то новый язык - соответствующие элементы можно внедрить в любой имеющийся язык, например в Паскаль. Я, правда, так и не слышал, чтобы кто-то где-то проворачивал сколько-нибудь значительные проекты на объектно-ориентированном Паскале, но что такой вариант Паскаля существовал (Turbo Pascal 7.0 от фирмы "Борланд") - это факт. \\ Следующая парадигма, характерная для нового компьютерного времени, - это **//объектно-ориентированное программирование//**. ООП - это не какой-то новый язык - соответствующие элементы можно внедрить в любой имеющийся язык, например в Паскаль. Я, правда, так и не слышал, чтобы кто-то где-то проворачивал сколько-нибудь значительные проекты на объектно-ориентированном Паскале, но что такой вариант Паскаля существовал (Turbo Pascal 7.0 от фирмы "Борланд") - это факт. \\
 В чем суть ООП и какого профита от него ожидают? В книгах на эти вопросы отвечают не очень внятно, поэтому попробую изложить "на пальцах". Традиционная ("процедурно-ориентированная") парадигма программирования, как мы только что обсудили, предполагает описание действий, которые должны быть произведены над данными. Но теперь появились такие задачи, порядок действий для решения которых не может быть определен однозначно. Неплохой пример - игра, в которой вы сражаетесь с врагами. Если враг один (как, например, в шахматах, ведь каждая фигура не действует сама по себе - она подчинена замыслу игрока), то процесс обдумывания очередного хода можно представить как единый алгоритм. Если же врагов много, то каждый из них совершает свои действия в ответ на ваши, а вы совершаете действия в ответ. Враги могут появляться и исчезать, их количество может меняться... Игровая программа должна, очевидно, "присматривать" за всеми врагами поочередно, и за вами тоже. Описать все это как единый алгоритм может быть весьма затруднительно, а главное: даже если это удастся, программа получится громоздкой и путаной, а вот это как раз то, чего ни один нормальный программист не любит. Написать ее, допустим, возможно, а внести какие-то изменения в ранее написанную программу и ничего при этом не сломать - это уж совсем вряд ли. Вот здесь-то и видится ООП как решение. При ООП, как в общем-то ясно из названия, программист описывает не действия, а __объекты__. Для каждого объекта он дает описание, что объект собой представляет, и перечисляет действия ("методы"), которые объект может совершать и которые могут совершаться над ним. Как построить программу, чтобы она вовремя "обслуживала" все объекты, - этим занимается компилятор, программисту можно об этом не задумываться. Важно: ООП, как впрочем и ФОП, - это только подход к записи алгоритма и не более того. Стало быть, (1) ни ФОП, ни ООП не обещают красивой жизни тем из нас, кто не хочет обременять себя алгоритмизацией, и (2) машинный код, полученный после компиляции такой программы, будет не так уж сильно отличаться от традиционного. В частности, в нем будут присутствовать все команды, нужные для того, чтобы программа вовремя "вспоминала" про каждый из имеющихся объектов, хотя программист и не указывал этих команд явно. Поэтому не следует ждать от ООП чудес типа уменьшения объема программы в разы или ускорения ее работы - более вероятно как раз наоборот. Все преимущества ФОП и ООП проявляется только на этапе разработки программы, и только в том случае, когда применение этих парадигм действительно оправдано. А вот когда оно оправдано - это один из самых сложных и острых вопросов нынешнего программирования. \\ В чем суть ООП и какого профита от него ожидают? В книгах на эти вопросы отвечают не очень внятно, поэтому попробую изложить "на пальцах". Традиционная ("процедурно-ориентированная") парадигма программирования, как мы только что обсудили, предполагает описание действий, которые должны быть произведены над данными. Но теперь появились такие задачи, порядок действий для решения которых не может быть определен однозначно. Неплохой пример - игра, в которой вы сражаетесь с врагами. Если враг один (как, например, в шахматах, ведь каждая фигура не действует сама по себе - она подчинена замыслу игрока), то процесс обдумывания очередного хода можно представить как единый алгоритм. Если же врагов много, то каждый из них совершает свои действия в ответ на ваши, а вы совершаете действия в ответ. Враги могут появляться и исчезать, их количество может меняться... Игровая программа должна, очевидно, "присматривать" за всеми врагами поочередно, и за вами тоже. Описать все это как единый алгоритм может быть весьма затруднительно, а главное: даже если это удастся, программа получится громоздкой и путаной, а вот это как раз то, чего ни один нормальный программист не любит. Написать ее, допустим, возможно, а внести какие-то изменения в ранее написанную программу и ничего при этом не сломать - это уж совсем вряд ли. Вот здесь-то и видится ООП как решение. При ООП, как в общем-то ясно из названия, программист описывает не действия, а __объекты__. Для каждого объекта он дает описание, что объект собой представляет, и перечисляет действия ("методы"), которые объект может совершать и которые могут совершаться над ним. Как построить программу, чтобы она вовремя "обслуживала" все объекты, - этим занимается компилятор, программисту можно об этом не задумываться. Важно: ООП, как впрочем и ФОП, - это только подход к записи алгоритма и не более того. Стало быть, (1) ни ФОП, ни ООП не обещают красивой жизни тем из нас, кто не хочет обременять себя алгоритмизацией, и (2) машинный код, полученный после компиляции такой программы, будет не так уж сильно отличаться от традиционного. В частности, в нем будут присутствовать все команды, нужные для того, чтобы программа вовремя "вспоминала" про каждый из имеющихся объектов, хотя программист и не указывал этих команд явно. Поэтому не следует ждать от ООП чудес типа уменьшения объема программы в разы или ускорения ее работы - более вероятно как раз наоборот. Все преимущества ФОП и ООП проявляется только на этапе разработки программы, и только в том случае, когда применение этих парадигм действительно оправдано. А вот когда оно оправдано - это один из самых сложных и острых вопросов нынешнего программирования. \\
 Мы рассмотрели две новых парадигмы. На самом деле, как это всегда и бывает, появление даже одной новой парадигмы повлекло за собой лавинообразный рост, так что теперь их десятки, и отнюдь не все в равной степени толковы. И можно не сомневаться, что они будут появляться и исчезать, подобно языкам. Описывать их все - это я оставляю историкам будущих веков. \\ Мы рассмотрели две новых парадигмы. На самом деле, как это всегда и бывает, появление даже одной новой парадигмы повлекло за собой лавинообразный рост, так что теперь их десятки, и отнюдь не все в равной степени толковы. И можно не сомневаться, что они будут появляться и исчезать, подобно языкам. Описывать их все - это я оставляю историкам будущих веков. \\
 +=== Реляционные СУБД ===
 +Слово база у нас ассоциируется с предприятием или учреждением, на которое мы можем обращаться с целью получить некоторый товар (например овощная база, металлобаза...). Соответственно база данных (БД) - хранилище данных, на которое пользователи могут посылать запросы и получать в ответ данные для своей работы. Более ранний термин - банк данных, но сейчас он уже практически вышел из употребления. \\
 +Мне попадались книги по реляционным БД, но термин "реляционная" там объясняется невнятно. Английское слово relation переводят обычно как "отношение", но такой перевод не приближает нас к пониманию, а наоборот, еще больше путает. Все встает на свои места, если это слово перевести не как отношение, а как родство: реляционная БД описывает "родственные" объекты. Вспомним про наши тепловозы: они отличаются __значениями__ мощности, скорости и т. д., но __любой__ локомотив может быть охарактеризован именно такими параметрами. А таких параметров, как толщина брони или калибр пушки, у локомотивов нет в принципе: такие параметры есть у танков. То есть все локомотивы "родственны" между собой, а все танки - между собой, но локомотивы не родственны танкам (если, конечно, мы не говорим про танк-паровозы... вот здесь хочется поставить смайлик, но правилами этого сайта смайлики не приветствуются). Стало быть, реляционная БД может быть представлена в виде таблицы с множеством однотипных строк ("записей"): каждая строка характеризует один объект (действие, событие...), каждая колонка - параметр, применимый ко всем объектам, а каждая ячейка хранит значение соответствующего 
 +параметра для данного объекта. \\
 +Программный инструментарий для обслуживания БД называют системой управления базой данных - СУБД. \\
 +Первые реляционные СУБД появились еще в 60-е годы, но до поры-до времени они оставались явлением локального порядка, не стоящим того, чтобы посвящать им отдельную главу. В средние века, с появлением множества задач из области Большой Экономики, люди начали понимать, что СУБД, и в первую очередь реляционные СУБД, являются весьма удачным инструментом для решения большинства таких задач. В 1980 г. фирма "Эштон-Тейт" выпустила программу с незатейливым названием DBase II. Затем появились DBase III (1986 г.), DBase IV - по большому счету это были усовершенствованные версии того же продукта. \\
 +Программы семейства DBase строились по принципу швейцарского армейского ножа: такая программа содержала набор инструментов для решения достаточно широкого множества типовых задач, так или иначе связанных с реляционными базами данных. Базу можно было просматривать, редактировать, добавлять в нее новые записи, делать выборки, выводить их на экран и печать в виде документов установленного образца... Все это делалось с помощью цифробуквенных команд, близких к тем, которые использовались в операционной системы ДОС. Для пользователя, который с ДОС не дружил, был придуман "Ассистент": вместо того, чтобы вводить команду буквами, можно было выбрать нужные действия из меню. При этом в нижней строке экрана отображалась соответствующая команда в текстовом виде, т. е. пользователь мог формировать команду с помощью "Ассистента" и одновременно изучать ее текстовое представление. Все команды, поданные пользователем, регистрировались в "Истории команд". Историю можно было просмотреть и нужную команду выполнить еще раз, возможно с какими-то вариациями. Отсюда вытекает следующая очевидная идея: выбрать не одну, а несколько команд, записать их в отдельный файл - //скрипт// - и потом запускать скрипт на выполнение. Ну и следующая идея: скрипт скомпилировать и использовать в дальнейшем как обычную программу. \\
 +Важно, что, имея в руках такой инструмент, задачи мог решать непосредственно тот человек, который в решении заинтересован, - //конечный пользователь//. Он по определению не программист, так что о его программистской квалификации вопрос вообще не ставится. С другой стороны, пользователь, обладающий соответствующими способностями, мог такую квалификацию нарабатывать "без отрыва от производства". Ясно, что программы такого типа оказались чрезвычайно удачны, и популярность, которую они приобрели в 90-е годы, была вполне заслуженной. \\
 +По образцу программ семейства DBase фирма "Фокс Софтвэр" выпустила несколько версий программы FoxPro, а фирма "Нантукет Корпорейшн" в 1985 г. - интерпретатор-компилятор языка, практически совпадающего с языком семейства DBase, под маркой "Клиппер". В 90-е годы языки семейства DBase/FoxPro/Clipper приобрели все черты, присущие "взрослым" языкам программирования. Их век оказался недолог (на рубеже нового и новейшего времени все они постепенно вышли из употребления), но, с учетом того что за предшествующие 20-30 лет в области языков не было практически никакого прогресса, эти языки успели оказать большое влияние на всю эволюцию программирования, так что в значительной мере благодаря им программный мир приобрел тот облик, который нам привычен сейчас. \\ \\
 ==== Еще немного воспоминаний и размышлений ==== ==== Еще немного воспоминаний и размышлений ====
 В предыдущей главе я рассказывал о практических и лабораторных работах в институте и размышлял о том, какого уровня специалистов этот институт мог выпускать. Теперь скажу так: уровень специалистов соответствовал тому уровню трудоустройства, который экономика позднего развитого социализма ("застоя") могла нам предложить. \\ В предыдущей главе я рассказывал о практических и лабораторных работах в институте и размышлял о том, какого уровня специалистов этот институт мог выпускать. Теперь скажу так: уровень специалистов соответствовал тому уровню трудоустройства, который экономика позднего развитого социализма ("застоя") могла нам предложить. \\
Строка 456: Строка 492:
 На чем Михалыч программировал? На Бэйсике - это я помню отчетливо. К сожалению, в данной ситуации это нам ничего не говорит, потому что на "коробках из-под ботинок" было аж целых три системы программирования, использовавших язык Бэйсик: GW-Basic, QBasic от фирмы "Микрософт" и TurboBasic от фирмы "Борланд", и все они имели те или иные различия, как в пользовательском интерфейсе, так и в языке. Если GW-Basic еще имел какие-то параллели с "Рафосом" (хотя тоже с поправками на технические возможности персональных компьютеров и ДОС), то две других системы уже были настоящими интегрированными средами разработки программ (Integrated Development Environment - IDE). Выбор для них языка Бэйсик был явно не очень удачным и должен рассматриваться как дань традиции (ведь все эти программные инструменты создавались во второй половине 80-х годов, когда Бэйсик был языком N1 и лишь немногие это оспаривали). В те же годы фирма "Борланд" выпустила TurboPascal - практически ту же самую IDE, перенастроенную на более перспективный для того времени язык Паскаль. Я чуть позже опробовал TurboBasic, очень быстро понял, что это не мой уровень, и перешел на TurboPascal, с которым не расставался несколько лет, пока не открыл для себя TurboAssembler той же фирмы. \\ \\ На чем Михалыч программировал? На Бэйсике - это я помню отчетливо. К сожалению, в данной ситуации это нам ничего не говорит, потому что на "коробках из-под ботинок" было аж целых три системы программирования, использовавших язык Бэйсик: GW-Basic, QBasic от фирмы "Микрософт" и TurboBasic от фирмы "Борланд", и все они имели те или иные различия, как в пользовательском интерфейсе, так и в языке. Если GW-Basic еще имел какие-то параллели с "Рафосом" (хотя тоже с поправками на технические возможности персональных компьютеров и ДОС), то две других системы уже были настоящими интегрированными средами разработки программ (Integrated Development Environment - IDE). Выбор для них языка Бэйсик был явно не очень удачным и должен рассматриваться как дань традиции (ведь все эти программные инструменты создавались во второй половине 80-х годов, когда Бэйсик был языком N1 и лишь немногие это оспаривали). В те же годы фирма "Борланд" выпустила TurboPascal - практически ту же самую IDE, перенастроенную на более перспективный для того времени язык Паскаль. Я чуть позже опробовал TurboBasic, очень быстро понял, что это не мой уровень, и перешел на TurboPascal, с которым не расставался несколько лет, пока не открыл для себя TurboAssembler той же фирмы. \\ \\
 ==== Характеристика эпохи ==== ==== Характеристика эпохи ====
-Скажу в двух словах: новое компьютерное время - это время персональных компьютеров и сетей. \\ \\+Отсчет нового компьютерного времени я предлагаю начать с 1989 г., когда начались массовые поставки персональных компьютеров в СССР. Для наших соотечественников это означало: "забудь все, чему учился раньше - теперь все будет по-другому". Для всего остального мира импорт готовых машин в нашу страну (именно готовых, товарных машин, а не технологий и даже не промышленных образцов) означал выбытие СССР из ряда мировых компьютерных держав. Если же вспомнить, что еще раньше этот ряд покинула Великобритания, то мы поймем, что Соединенные Штаты стали более чем просто лидером - абсолютным законодателем мировой компьютерной моды. \\ 
 +Отличие новой эпохи от предыдущей охарактеризуем в двух словах: новое компьютерное время - это время персональных компьютеров и сетей. \\ \\
 ===== Начало XXI века - новейшее компьютерное время ===== ===== Начало XXI века - новейшее компьютерное время =====
 Очередная смена исторических эпох произошла не одномоментно, а растянулась на период с 1995 по 2005 годы, зато она шла синхронно практически во всех странах мира. И Россия не стала исключением, хотя и не вносила в дело никакого активного вклада. \\ Очередная смена исторических эпох произошла не одномоментно, а растянулась на период с 1995 по 2005 годы, зато она шла синхронно практически во всех странах мира. И Россия не стала исключением, хотя и не вносила в дело никакого активного вклада. \\
igor/istoria.txt · Последнее изменение: 2022/05/01 18:15 — igor