11 июня

Хакерский фольклор

Блог компании Mail.ru GroupТерминология ITЧитальный залИстория ITНаучно-популярное
Автор оригинала: Matthias Endler

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

Бо́льшая часть статьи взята из Википедии, но найти пояснения не так-то просто, если не знаешь, что искать.

Bike-Shedding


Современное значение: бессмысленный разговор о тривиальных проблемах.

Термин «bike-shed effect» (эффект велосипедного сарая) или «bike-shedding» возник как метафора для обозначения закона тривиальности. Датский разработчик Poul-Henning Kamp, участник сообщества Berkeley Software Distribution, популяризировал словосочетание в 1999-м в почтовой рассылке по FreeBSD. Термин затем распространился по всей индустрии разработки ПО.

Изначально термин был представлен как следствие более общего «закона Паркинсона». Автор драматизирует «закон тривиальности» на примере обсуждений в комитете по атомному реактору, противопоставляя их обсуждениям велосипедного навеса (bike-shed): «Время, потраченное на обсуждение любого пункта повестки, обратно пропорционально размеру бюджета». Обычный человек не способен осознать, насколько дорог и сложен атомный реактор. Поэтому предполагается, что те, кто над ним работают, понимают весь масштаб. С другой стороны, каждый может представить себе дешёвый и простой велосипедный сарай. И планирование его возведения может привести к бесконечным обсуждениям, ведь каждый участник захочет продемонстрировать свой вклад в общее дело.

Источник.

Шаблонный код (Boilerplate)


Современное значение: фрагмент кода, копируемый снова и снова, либо без изменений, либо почти без них.

Изначально термином Boiler plate описывалась согнутая в цилиндры сталь для изготовления водонагревателей. Затем начал применяться в СМИ для банального или неоригинального текста. Также этим термином называли металлические печатные формы с заранее подготовленным текстом, например, с рекламой или синдицированными колонками, которые передавались в небольшие местные газеты. По аналогии сами печатные формы тоже стали называть boilerplates. Одним из крупных поставщиков таких форм была компания Western Newspaper Union. Она предлагала газетам с небольшим географическим покрытием «готовые к печати истории, содержащие национальные или международные новости». Эти «истории» могли содержать рекламные объявления, размещённые рядом с обычным текстом.

Ссылки:



Установка для сгибания стальных заготовок для водонагревателей.


Мужчина держит изогнутую печатную форму. Такие формы различные компании предлагали небольшим газетам.

Баг (Bug)


Современное значение: дефектная часть кода или оборудования.

Происхождение неизвестно! Вопреки распространённому мнению, термин появился ещё до того, как Грейс Хоппер обнаружила насекомое в компьютере Mark II. Инженеры использовали это слово как минимум начиная с 1870-х. То есть «баг» возник задолго до компьютеров и ПО. Например, его использовал в своих заметках Томас Эдисон.

Возврат каретки (Carriage Return) и перевод строки (Line Feed)


Современное значение: перевод курсора в начало следующей строки.

Оба термина взяты из пишущих машинок.

Каретка держит лист бумаги и движется слева направо, меняя позицию печати по мере нажатия кнопок. Возврат каретки — операция перемещения каретки в исходную позицию с левого края листа бумаги.

Однако просто вернуть каретку влево ещё недостаточно для начала новой строки. Ведь каретка останется на той же строке, просто перейдёт в её начало. Поэтому нужно также перевести строку: лист бумаги внутри пишущей машинки прокручивается вверх на одну строку.

Обе операции (возврат каретки и перевод строки) обычно выполнялись одновременно при нажатии рычага возврата каретки.


Механическая пишущая машинка. Слева находится рычаг возврата каретки.

  • В Unix-системах (Linux и macOS), команда \n отвечает за перевод строки (ASCII-символы: LF) или создание новой строки.
  • В CP/M, DOS и Windows используется команда \r\n, где \r — возврат каретки, а \n — перевод строки (CR+LF).

Источник.

А в этом видео показана основная механика возврата каретки и перевода строки:


Символ Command (⌘)


Современное значение: метаклавиша на компьютерах Apple, позволяющая создавать дополнительные клавиатурные комбинации.

Цитата из Википедии:

Символ ⌘ появился на поздней стадии проекта Macintosh. Команда разработчиков сначала применила старую клавишу Apple, но Стиву Джобсу не понравилось, что «яблоки» заполнили меню Мака рядом с клавишей Command. По его мнению, это было избыточным использованием логотипа. Джобс решил использовать другой символ. Графический дизайнер Сюзан Кар (Susan Kare) взялась за разработку всего за несколько дней до дедлайна. Просматривая сборник символов, она наткнулась на знак, похожий на клевер. Он часто используется в северных странах для обозначения культурных объектов и достопримечательностей (это официальный дорожный знак для привлечения туристов в Дании, Финляндии, Исландии, Норвегии и Швеции. Шведские пользователи Маков часто называют эту клавишу Fornminne (древний монумент), а датские пользователи — Seværdighedstegn). Когда Сюзан показала символ другим участникам команды, все его одобрили. Так его и приняли в 1984-м для обозначения клавиши Command. Сюзан утверждает, что позднее ей сообщили, будто этот символ используется в Скандинавии благодаря сходству с планом квадратного замка с угловыми башнями.


Норвежский дорожный знак Severdighet.


Замок Borgholm, который мог стать основой для символа.

Ссылки:


Дамп ядра, дамп памяти (Core Dump)


Современное значение: получение снимка состояния (упавшей) программы с помощью сохранения всей используемой ею памяти для последующего анализа.

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


Память с массивом 32 x 32 ферритовых сердечников, хранящая 1024 бита (128 байт) данных. Первые дампы печатались на бумаге, что вполне разумно, учитывая малый объём байтов.

Курсор


Современное значение: визуальный значок (например, мерцающая вертикальная линия) на дисплее, обозначающий позицию (скажем, для ввода данных).Источник.

Cursor в переводе с латыни — бегун. Этим словом называли прозрачную каретку на логарифмической линейке — бегунок, ползунок. На бегунке была нанесена тончайшая линия для выбора нужной позиции на линейке. Позднее термин «курсор» перекочевал в компьютеры.


Реклама вычислителя IBM 604 Electronic Calculating Punch, вышедшая в декабре 1951-го. Само устройство начали производить в 1948-м. Утверждалось, что вычислитель мог заменить 150 инженеров с логарифмическими линейками. Вы можете видеть прозрачный курсор — бегунок — на линейке посреди картинки.

Информационная панель, дашборд (Dashboard)


Современное значение: пользовательский интерфейс, позволяющий быстро оценить статус системы.

Изначально словом dashboard называли деревянную панель в передней части повозки, которая защищала кучера от грязи, летящей из-под копыт лошадей.

С началом автомобилестроения dashboard‘ом стали называть панель перед водителем. Вполне логично было разместить тут все необходимые индикаторы, чтобы водителю удобно было на них смотреть. Постепенно термин стал больше ассоциироваться с информационными панелями, чем с защитой.


Защитная панель dashboard на повозке.

Файрвол (Firewall)


Современное значение: система сетевой защиты, которая создаёт барьер между доверенной внутренней сетью и недоверенной внешней, например, интернетом.

Противопожарные стены — брандмауэры — применялись, в основном, в таунхаусах, но встречались и в индивидуальных домах. Они предназначались для предотвращения распространения огня и дыма в случае пожара. В вычислительной технике термин «файрвол» используется с 1980-х.


Противопожарная стена, разделяющая здание на две отдельные жилые части.

Прошивка (Firmware)


Современное значение: вид компьютерных программ, которые обеспечивают низкоуровневое управление оборудованием и тесно с ним связаны.

Эшер Оплер (Ascher Opler) применил термин firmware в 1967-ом в статье для журнала Datamation. Изначально firmware отделялась от hardware (самого процессора) и software (обычных инструкций, выполнявшихся процессором). Прошивка существовала на границе между железом и ПО, отсюда и название firmware. Оригинал статьи доступен здесь.

Источник.

Foobar


Современное значение: универсальные заглушки для имён переменных.

Вероятно, термин происходит от военной аббревиатуры FUBAR. Её расшифровывают по-разному, но чаще всего как FUBAR: «f***ed up beyond all recognition» («полная неразбериха»).

В программировании слово foo впервые применили примерно в 1960-м в клубе железнодорожного моделирования Массачусетского технологического. Там создавали сложные системы, в разных местах которых применялись аварийные выключатели. С их помощью можно было корректировать ситуации, если происходило что-то нежелательное — например, когда поезд на полном ходу приближался к препятствию на дороге.

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


Аварийный выключатель (кнопка), который нужно нажать для предотвращения случайного срабатывания. Возможно, кнопки в клубе моделистов-железнодорожников были подписаны как foo.

Ссылки:


Фрилансер (Freelancer)


Современное значение: самозанятый человек, который не связан долгосрочными трудовыми обязательствами.

Впервые термин использовал Вальтер Скотт в своей повести Айвенго. Она повлияла на легенду о Робине Гуде.


Обложка комикса об Айвенго.

В повести лорд предлагает королю Ричарду свою армию наёмников, «свободных копейщиков» (free lances):

I offered Richard the service of my Free Lances, and he refused them — I will lead them to Hull, seize on shipping, and embark for Flanders; thanks to the bustling times, a man of action will always find employment.

Книжный перевод:

Я предлагал Ричарду услуги моей вольной дружины, но он отказался. Отведу своих людей в Гулль, посажу на суда и уеду с ними во Фландрию. В смутные времена военному человеку везде найдётся дело. 

Таким образом, «free lancer» — наёмник, воющий за того, кто больше заплатит. Свободный означает не работающий бесплатно, а имеющий свободу выбирать работодателя (в английском free может означать «свободный» или «бесплатный»).

Источник.

Лог, журнал (Log / Logfile)


Современное значение: файл, в который записываются события компьютерной программы или системы.

Моряки использовали лаг для измерения скорости корабля. Инструмент представлял собой плоский деревянный брусок (log по-английски может означать «полено»), привязанный к длинному канату. На канате через равные промежутки были навязаны узлы. Лаг отставал от корабля за определённый интервал времени на какое-то расстояние, а моряки подсчитывали количество навязанных узлов. Это и была скорость корабля, измеряемая в узлах.

Вычисление скорости было важно для навигации, поэтому её записывали в вахтенный журнал, который по-английски назывался log book. Туда же вносили и другую информацию — погодные условия, береговые ориентиры и т.д. Всё это позволяло точнее определить местоположение корабля. Позднее в вахтенные журналы стали добавлять — журналировать, логгировать — и другую информацию, связанную с кораблём. Например, портовые сборы или слишком быстрое истощение запасов.

Источник.


Моряки с помощью лага измеряют скорость корабля. Источник.


Устройство лага. Источник.


Страница из вахтенного журнала британского корабля Winchelsea. Во второй колонке скорость в узлах, вычисленная с помощью лага. Источник.

Патч (Patch)


Современное значение: часть кода, которую можно применить для исправления или улучшения компьютерной программы.

На заре информатики, если вы делали ошибку в программе, то приходилось исправлять перфоленту или перфокарту, наклеивая заплатки на сделанные отверстия.


Перфолента с заплатками, которые закрывают некоторые отверстия.

Источник.

Пинг (Ping)


Современное значение: способ проверки доступности и длительности ответа от компьютера по сети.

Ping — терминальная программа, созданная Майком Мууссом (Mike Muuss) в 1983-м. Она входила во все версии UNIX, Windows и macOS. Автор назвал её так потому, что «это звук сонара, в котором воплощён принцип эхолокации. [...] ping использует хронометрируемые пакеты IP/ICMP ECHO_REQUEST и ECHO_REPLY для вычисления «расстояния» до целевой машины». Рекомендую прочитать весь текст.

Оболочка (Shell)


Современное значение: интерфейс (часто текстовый) для взаимодействия с компьютерной системой.

Автор термина Луи Пузэн (Louis Pouzin) не объяснил происхождение этого слова в своём эссе The Origins of the Shell. Однако его можно проследить к предшественнику Unix, системе Multics. Вот что говорится в её словаре:

Командная строка передаётся [оболочке] для исполнения слушателем (listener).

В словаре The New Hacker's Dictionary (также известном как Jargon File) Эрика Реймонда (Eric S. Raymond) говорится так:

Историческая справка: очевидно, оболочку в Multics (сноска 1) назвали так потому, что она была оболочкой (сноска 3);

В сноске 3 написано:

Программа-каркас, созданная вручную или сгенерированная другой программой (например, парсер-генератором). Предоставляет необходимые заклинания для настройки каких-то задач и потока управления ими (в качестве синонима используется термин драйвер (driver)). Предполагается, что пользователь введёт какой-то код, чтобы система выполнила нужные действия. Такой подход принят в мире ИИ и Microsoft Windows, и это путает Unix-хакеров.

К сожалению, в книге не приведено доказательств этого утверждения.

Мне нравится (вероятно, исторически неверная) аналогия с орехом: скорлупа — это внешняя оболочка, защищающая ядро.

Источник.

Слэб (Slab)


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

Этот способ изобрёл Джон Бонвик (John Bonwick) в 1994-м. С тех пор она используется, например, в Memcached и ядре Linux.

Кэш для объекта определённого типа или размера состоит из нескольких заранее выделенных участков памяти (слэбов). Каждый слэб состоит из фрагментов фиксированного размера, подходящих для каких-то объектов. (Википедия)

Термин slab (плита, брусок, большой кусок) возник благодаря другу Бонвика, Томми. Вот что Бонвик рассказал в блоге Oracle:

Мы смотрели вместе телевизор, и началась реклама Kellogg, в которой был текст «Can you pinch an inch?» (Сможешь оттянуть хоть дюйм?).

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

Томми, который весил около 113 кг, не моргнув глазом потянулся к животу и ответил на слоган из рекламы: «Чёрт, я могу ухватить слэб!»

Десятилетие спустя Бонвик вспомнил об этом, когда искал слово для описания выделения крупных областей памяти.

А вот та самая реклама:


Спам (Spam)


Современное значение: непрошенные электронные сообщения, например, письма, сообщения на форумах и в чатах.

Термин отсылает нас к телевизионному шоу 1969-го года британской комедийной группы Monty Python. По сюжету, в одном кафе почти в каждое блюдо добавляли Spam (марка консервированной ветчины). Так авторы спародировали повсеместное распространение этого и других импортных мясных продуктов в послевоенной Великобритании. Тогда в стране ещё действовали продуктовые карточки, и так они восстанавливали своё сельское хозяйство. 

Источник.



Радиокнопка (Radio Button)


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

У «радиокнопок» были механические аналоговые прародители, которые использовались в радиоприёмниках. Позднее их применяли в ленточных и кассетных магнитофонах, в аудиоплеерах (вспомните Walkman). А ещё позднее — в видеомагнитофонах и видеокамерах. 

Источник.


Старый автомобильный радиоприёмник и радиокнопки в CSS. В любой момент времени может быть выбран только один вариант. 

Верхний регистр (Uppercase) и нижний регистр (lowercase)


Современное значение: различие между прописными и строчными буквами на клавиатуре.

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


Ящик для типографского набора. Источник.

404


Современное значение: HTTP-код, означающий «Файл не найден».

Есть байка, что происхождение этого числа связано с серверной, где располагалась центральная база данных WWW. Админам приходилось вручную находить запрашиваемые файлы и пересылать их по сети. Если файл отсутствовал, админы писали сообщение: «Комната 404: файл не найден».

Скорее всего, это миф, и число для кода выбрали на основе FTP-кодов.

Источник.

Языки программирования и аббревиатуры


Этимология названий языков программирования и многих аббревиатур заслуживает отдельной статьи. Но я решил кратко рассказать о некоторых из них.

C++


Язык создан Бьёрном Страуструпом на основе языка C. Его название — это программистский каламбур, придуманный Риком Маскитти (Rick Mascitti), коллегой Страуструпа. «++» означает пост-инкрементный оператор, встречающийся во многих C-подобных языках. Он увеличивает значение переменной на 1. Это намёк на то, что С++ является духовным «наследником» С.

Источник.

C Sharp, C#


C-подобный язык, как и С++. Его имя намекает на «инкрементные» улучшения С++: знак # выглядит как четыре плюса. То есть C# == (C++)++. Кроме того, название вдохновлено музыкальной нотацией, в которой # означает, что ноту нужно исполнить на полтона выше.


Нота C#(До-диез).

PNG


Аббревиатура PNG расшифровывается как Portable Network Graphics. Формат возник в ответ на то, что в 1994-м на выставке CompuServe поддержка формата GIF была обложена лицензионными отчислениями. Рабочая группа под руководством хакера Томаса Бутелла (Thomas Boutell) создала .png — свободную от патентных ограничений замену для GIF. Поэтому я предпочитаю неофициальное название формата: PNG's Not GIF. Вот прекрасная статья об истории PNG. 

Источник.

Заключение


Нужно знать прошлое, чтобы понимать настоящее.

— Карл Саган (1980)

Надеюсь, вам понравилась эта подборка. 

Интересные проекты:

Теги:терминыистория терминологииюморникто не читает теги
Хабы: Блог компании Mail.ru Group Терминология IT Читальный зал История IT Научно-популярное
+59
15,6k 91
Комментарии 32
Лучшие публикации за сутки