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

История этой технологии уходит корнями в XIX век, далеко предшествуя появлению первых электронных компьютеров. Понимание механики перфокарт необходимо для понимания архитектуры ранних ЭВМ, языков программирования вроде Fortran и COBOL, а также причин, по которым стандартный терминал до сих пор имеет ширину 80 символов. В этой статье мы разберем устройство, кодировку, историческую миссию и неочевидное наследие «дырявого картона».

От ткацкого станка к табулятору: предыстория технологии

Идея управления машиной через дырки в картоне принадлежит французскому изобретателю Жозеф-Мари Жаккар. В 1804 году он представил ткацкий станок, узоры на ткани которого задавались цепочкой перфокарт. Это был первый в истории пример программируемого устройства: меняя карты, можно было получить любой рисунок без перестройки механики станка. Принцип «дырка есть — игла проходит, дырки нет — игла задерживается» лег в основу всех последующих систем.

В 1880-х годах американец Герман Холлерит адаптировал идею для обработки данных переписи населения США. Он разработал карточку стандартного размера (позже ставшую форматом IBM 5081), перфоратор, сортировщик и табулятор — электромеханическую машину, подсчитывающую статистику по дыркам. Успех на переписи 1890 года сделал перфокарту индустриальным стандартом и заложил основу компании, ставшей позже IBM.

⚠️ Внимание: Не путайте перфокарты Холлерита с более ранними картами Жаккара. У Жаккарда карты были длинными лентами с круглыми отверстиями для игл, у Холлерита — прямоугольные карточки с прямоугольными окнами для контактов сенсоров. Это принципиально разные стандарты кодирования.

К 1928 году IBM уточнила формат: карта получила 80 колонок и 12 строк, а углы стали закругленными для предотвращения замятий. Этот стандарт «IBM 5081» (или «Doily») доминировал в мировой вычислительной технике до 1970-х. Параллельно существовал формат Remington Rand (90 колонок, 6 бит на колонку), но он проиграл в конкурентной борьбе.

📊 Какой аспект перфокарт кажется вам самым удивительным?
80-колонковый стандарт, живучий до наших дней
Использование в ткачестве за 100 лет до компьютеров
Объем данных: коробка карт = пару килобайт
Роль в освоении космоса (программы для «Аполлона»)

Анатомия перфокарты: формат IBM и кодировка данных

Стандартная перфокарта размером 7 3/8 × 3 1/4 дюйма (около 187 × 82 мм) изготавливалась из специального картона повышенной плотности и гладкости. Площадь карты разделялась на 12 строк (нумеруемых сверху вниз: 12, 11, 0, 1–9) и 80 колонок (слева направо). Каждая колонка могла представить один символ — цифру, букву или спецзнак.

Кодировка опиралась на двенадцатибитный код Холлерита. В зоне «цифр» (строки 1–9) перфорация одной дырки означала соответствующую цифру. Для букв и спецсимволов использовались комбинации: одна дырка в зоне «зоновых перфораций» (строки 12, 11, 0) плюс одна дырка в цифровой зоне. Например, буква A кодировалась как 12-1, B — 12-2, J — 11-1. Всего так можно было закодировать до 256 комбинаций, что достаточно для EBCDIC.

  • 🔢 Цифры 0–9: одна дырка в строке 0–9 соответственно.
  • 🔠 Буквы A–I: зона 12 + строки 1–9.
  • 🔡 Буквы J–R: зона 11 + строки 1–9.
  • 🔣 Спецсимволы и S–Z: зона 0 + строки 2–9 (S=0-2, Z=0-9).

Верхний край карты часто имел цветную полосу (обычно красную или синюю) для визуальной ориентации при загрузке в ридер. На поле слева или справа иногда печатался номер последовательности карты в колоде — критически важная мера против перемешивания при падении стопки. Именно 80-колонковый формат зафиксировал ширину строки в Fortran (72 значащих + 8 для номера) и стандарт терминала VT100.

Характеристика Стандарт IBM 5081 Формат Remington Rand (90 col) Перфолента (бумажная)
Колонок на карте 80 90 Переменное (поток)
Строк (бит на колонку) 12 6 (2 зоны по 3 бита) 5–8 (Baudot/ASCII)
Материал Картон 0.18 мм Картон Бумага/маляр
Скорость чтения (макс) 2000 карт/мин 1500 карт/мин 1000 знаков/сек
Емкость одной карты 80 байт (символов) 90 байт N/A

Перфокарты как носитель программ и данных

В эпоху мейнфреймов IBM System/360, CDC 6600, BESM-6 и ЕС ЭВМ перфокарты выполняли три ключевые функции: носитель исходного кода, носитель входных данных для задач и носитель исполняемых модулей (объектного кода). Программист писал код на кодировочных бланках, пунчер (или сам программист на клавиатуре перфоратора IBM 029 или 059) наносил дырки, после чего колода карт сдавалась в вычислительный центр.

Процесс компиляции выглядел так: колода с исходником (например, Fortran) подавалась в ридер, компилятор генерировал объектную колоду (бинарный код), которую затем передавали загрузчику вместе с библиотеками. Результат работы программы также часто выводился на перфокарты (продукция) или на ленту. Это создавало уникальную логистику: «вчера сдал коробку карт — завтра забираю коробку с результатами».

☑️ Подготовка колоды перфокарт к сдаче в ВЦ

Выполнено: 0 / 4

Специфику работы задавлял жесткий формат фиксированных полей. В Fortran IV колонки 1–5 отводились под метки, 6 — под признак продолжения, 7–72 — под операторы, 73–80 — под идентификацию карты. Ошибка в одной колонке (например, пропуск перфорации в колонке 6) могла изменить смысл всей программы. Отладка требовала перепробивки ошибочных карт и повторной сдачи всей колоды.

⚠️ Внимание: Никогда не скармливайте ридеру смятые, согнутые или загрязненные карты. Механические сенсоры (кисточные или оптические) срабатывают по нажатию/пропуску света; деформация карты приводит к «фантомным» перфорациям или пропуску реальных, а также к замяту механизма подачи — самой частой поломке ВЦ 1960-х.

Эпоха пакетной обработки: как работали вычислительные центры

Архитектура пакетной обработки (batch processing) диктовала организацию труда в ВЦ. Пользователи (программисты, инженеры, ученые) не имели прямого доступа к машине. Они сдавали задания (джобы) оператору, который формировал пакеты из колод разных пользователей, разделяя их специальными контрольными картами — JCL-картами (Job Control Language).

Типовая JCL-колода для OS/360 начиналась с карты //JOBNAME JOB..., шли карты // EXEC PGM=..., определения файлов //DDNAME DD... и, наконец, данные или исходный код. Оператор загружал пакет в ридер, машина обрабатывала задания последовательно, не требуя интерактивного вмешательства. Вывод (листинг компиляции, результаты расчетов) печатался на строковом принтере IBM 1403 и раздавался владельцам.

Что такое «chad» (чад) и почему его боялись?

Чад (chad) — это выткнутый кусочек картона при перфорации. В крупных ВЦ за день накапливались мешки чада. Он был легким, летучим и статичным — загрязнял контакты ридеров, забивал вентиляцию и вызывал аллергию у персонала. Специальные пылесосы и антистатика были обязательными атрибутами перфораторных комнат.

💡

Если найдете старую перфокарту, не пытайтесь разгладить согнутый угол железом — картон ломается. Лучше положите её под пресс (стопку книг) на сутки: влага из воздуха вернет пластичность волокнам.

💡

Пакетная обработка на перфокартах научила индустрию очередям задач, планировщикам ресурсов и разделению доступа — концепции, живущие в Kubernetes и CI/CD пайплайнах сегодня.

Почему перфокарты ушли в прошлое

К концу 1970-х перфокарты начали тесниться с двух сторон. С одной — магнитные ленты и диски (IBM 3340 «Winchester») предложили объемы в мегабайты при скоростях в килобайты/сек против 80 байт на карту и 2000 карт/мин (~26 Кбайт/сек). С другой — интерактивные терминалы (IBM 3270, DEC VT100) позволили программистам вводить код прямо с клавиатуры, видеть ошибки сразу и запускать компиляцию по требованию (TSO, CMS).

Последний масштабный бастион перфокарт — ввод данных для обработки счетов, зарплат, налоговой отчетности — пал с появлением оптического распознавания символов (OCR) и терминалов сбора данных. В СССР переход на магнитные ленты и диски в серии ЕС ЭВМ и СМ ЭВМ завершился к середине 1980-х, хотя в некоторых отраслях (военная, метеорологическая) перфокарты использовали до ранних 1990-х из-за надежности хранения в экстремальных условиях.

  • 💾 Объем: 1 МБ данных = ~12 500 карт = коробка весом ~60 кг.
  • ⚡ Скорость: ридер 2000 карт/мин = 26 КБ/сек; магнитная лента 1970 г. = 800 КБ/сек.
  • 🔧 Надежность: механика ридера (ролики, кисточки) требовала чистки каждые 4 часа работы.
  • 🌱 Экология: миллионы тонн картона в год, проблемы утилизации чада.

Наследие перфокарт в современном коде

Призраки перфокарт окружают нас везде. Стандартная ширина терминала 80 колонок — прямое наследие формата IBM 5081. В Fortran и COBOL до сих пор действуют правила фиксированной формы (хотя свободная форма доступна десятилетиями). В JCL мейнфреймов z/OS синтаксис карт управления заданием (// в колонках 1–2) сохранен для обратной совместимости.

Концепция «карты как записи» (record) легла в основу файловых систем: фиксированная длина записи (fixed-block), блокировка записей в блоки. Даже формат PNG и ZIP используют чанки/заголовки фиксированной структуры, отдаленно напоминающие заголовки перфокарт. В Git коммиты — это, по сути, последовательность патчей (diff), нечто вроде перфокарт с инкрементальными изменениями.

⚠️ Внимание: Не пытайтесь считывать старые перфокарты домашними сканерами без подсветки — контраст дырок на картоне слишком мал для OCR. Нужен проходной сканер с инфракрасной подсветкой или специализированный ридер (например, на базе Arduino + фототранзисторы), чтобы получить чистый дамп.

Интересные факты и мифы

Существует легенда, что стандарт 80 колонок выбран из-за ширины долларовой купюры 1862 года (американские банкноты тогда были крупнее), в кассетах для которых хранили карты. На самом деле ширина карты 3.25 дюйма (82.55 мм) подбиралась под стандартные конверты и кассеты библиотечных каталогов того времени, а 80 колонок — компромисс между плотностью перфорации (0.087 дюйма шаг) и надежностью механического считывания.

В 1969 году программа полетов «Аполлон» использовала перфокарты для загрузки корректировок в бортовой компьютер AGC (Apollo Guidance Computer) при подготовке к старту. В 1983 году в фильме «Войновые игры» (WarGames) герой Мэтью Бродикк взламывает систему, вводя команды через акустический модем, но в сценах NORAD показаны реальные стопки перфокарт — к тому времени они уже были музейным экспонатом в кино, но рабочим инструментом в армии.

Миф о «Do not fold, spindle or mutilate»

Надпись «Do not fold, spindle or mutilate» (не гните, не нанизывайте на иглу, не изуродовывайте) печаталась на картах не для красоты. «Spindle» (шпиндель/игла) отсылает к старому офисному привычке нанизывать счета на металлический шпиндель на столе. Для перфокарты это — смерть: деформированные отверстия дают ошибки чтения.

💡

Коллекционерам: ценность перфокарты определяется надписью на лицевой стороне. Карты с логотипом IBM, надписью «Property of...» или рукописными пометками программистов 60-х стоят дороже чистых. Карты с программыми «Аполлона» или ранних Cray — музейные экспонаты.

💡

Перфокарта — это первый в истории стандартизированный, переносимый, машиночитаемый формат данных. Все современные форматы (JSON, XML, Protobuf) решают ту же задачу: как представить структуру так, чтобы её поняла другая машина.

FAQ: Частые вопросы о перфокартах

Сколько информации помещается на одной перфокарте?

Стандартная перфокарта формата IBM 5081 вмещает 80 символов (80 байт в кодировке EBCDIC или Hollerith). Это примерно одна строка кода Fortran или одна запись бухгалтерской ведомости. Для программы в 1000 строк требовалась коробка на 1000–2000 карт (с учетом JCL и комментариев).

Можно ли прочитать перфокарту без специализированного ридера?

Теоретически — да, сфотографировав карту на световом столе или под ярким лампой с высоким разрешением и распознав дырки компьютерным зрением (OpenCV). Практически — для единичных карт проще ввести данные вручную. Для массивов нужен проходной оптический ридер с ИК-подсветкой, исключающей отражения от картона.

Что такое «binary card» (бинарная карта) и чем она отличается от текстовой?

Текстовая карта использует кодировку Холлерита (до 3 дырок на колонку для букв). Бинарная карта (column binary) использует все 12 строк каждой колонки как 12 бит данных. Одна такая карта хранит 80 × 12 = 960 бит = 120 байт чистых данных. Их использовали для загрузки объектного кода и дампов памяти. На глаз они отличаются хаотичным узором дырок без узнаваемых паттернов букв.

Почему в Fortran 77 комментарий начинается с буквы C в первой колонке?

Это наследие перфокарт. Колонка 1 была зарезервирована под признак типа карты: C или * — комментарий, пробел — оператор, цифра — метка. Компилятор считывал колонку 1 первой и сразу решал: парсить ли остальные 71 колонку или пропустить карту. Это ускоряло компиляцию на медленных мейнфреймах.

Есть ли современное производство перфокарт?

Массовое производство остановлено в 2000-х (последним крупным производителем была компания GBS в США). Однако небольшие тиражи карточного картона под старые стандарты выпускают нишевые типографии для коллекционеров, музеев и энтузиастов ретрокомпьютинга, собирающих работающие ридеры IBM 2540 или Documation.