Кулинарные термины в ИТ
easy

Кулинарные термины в ИТ

Программирование в собственном соку

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

Спагетти-код

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

Такой код пишут не только неопытные программисты. Он может появиться, когда нужно что-то быстро протестировать и нет времени продумывать правильную архитектуру. Так в проекте могут копиться «спагетти-куски», которые потом превращаются в макаронного монстра.

Но не любой плохой код — спагетти: изначально так называли запутанную структуру кода из-за злоупотребления оператором goto. В ранние времена программирования оператор goto широко использовался для управления потоком выполнения программы. Оператор goto позволяет программе немедленно перейти к другой строке кода, которая определена меткой. Чрезмерное использование goto приводит к тому, что логику выполнения программы становится трудно отследить.

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

#include <stdio.h>

int main() {
    int x = 0;

start:
    printf("x = %d\n", x);
    x++;
    if (x < 5) {
        goto start;
    }

    return 0;
}

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

Ту же логику можно реализовать проще через цикл while:

#include <stdio.h>
int main() {
    int x = 0;

    // Условие продолжения цикла
    while (x < 5) { 
        printf("x = %d\n", x);
        // Увеличение значения x
        x++; 
    }
    return 0;
}

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

Чтобы избежать «спагетти» в своём коде, важно придерживаться хороших практик написания кода: использовать понятные имена, разделять код на небольшие функции, делать регулярный рефакторинг. Есть много разных стандартов написания кода, и при командной работе нужно следовать принятым соглашениям.

Существуют разновидности спагетти-кода:

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

Печеньки (Cookies)

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

Название происходит от понятия magic cookie. Так в вычислительной технике называется небольшой фрагмент данных, который передаётся между программами и используется для идентификации или подтверждения авторизации. Впервые этот термин появился в 1979 году на странице руководства для процедуры fseek стандартной библиотеки C. Почему там использовалось слово «печенье», до сих пор не вполне ясно.

Когда в 90-х появились первые браузеры, они не хранили информацию о пользователе между сессиями. Каждый раз, когда пользователь заходил на сайт, его нужно было идентифицировать заново. Решение этой проблемы предложил в 1994 году Лу Монтулли, разработчик из Netscape. Он разработал концепцию HTTP cookies — небольших текстовых фрагментов для хранения информации о пользователе. В них может храниться идентификатор пользователя, настройки сайта и другие параметры, которые сохраняются на компьютере пользователя и отправляются на сервер при повторном посещении сайта. Поскольку речь шла о передаче небольших фрагментов данных между сервером и клиентом, для их описания выбрали термин cookie в честь концепции magic cookie.

Посмотреть файлы куки с определённого сайта можно через инструменты разработчика. Для этого нужно зайти в «Приложение» → «Файлы cookie».

Печеньки (Cookies)

Хлебные крошки (Breadcrumbs)

Хлебные крошки — это элемент навигации на сайте или в программе, который показывает путь от главной страницы до текущего раздела. Название происходит от сказки о Гензеле и Гретель: в ней дети оставляли след из хлебных крошек, чтобы не заблудиться в лесу и найти путь домой. 

Термин «хлебные крошки» придумал и популяризовал Якоб Нильсен, датский эксперт по юзабилити и пользовательскому интерфейсу. В 1994 году он опубликовал 10 принципов юзабилити. Первый из них, «Видимость статуса системы», гласит: в любой момент пользователь должен понимать, что сейчас происходит в системе. Если на сайте есть логическая вложенность разделов, то пользователь должен видеть своё местоположение и иметь возможность быстро вернуться к предыдущим разделам. Именно эту задачу и решают хлебные крошки. 

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

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

Хлебные крошки (Breadcrumbs)

То же самое в интерфейсе:

Пример шаблона хлебных крошек в Bootstrap
Пример шаблона хлебных крошек в Bootstrap
Это тоже хлебные крошки
Это тоже хлебные крошки

Луковая архитектура (Onion Architecture)

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

Термин придумал программист Джеффри Палермо в 2008 году как альтернативу традиционным стилям архитектуры. Схематично луковая архитектура выглядит так:

Луковая архитектура (Onion Architecture)

В луковой архитектуре каждый слой зависит только от слоёв ниже, но не от слоёв выше:

  • Domain Model (доменная модель) — центральный слой, представляющий ядро приложения. Вся бизнес-логика и правила находятся здесь, и этот слой независим от внешних частей системы. 
  • Domain Services (доменные сервисы) содержит сервисы, которые реализуют бизнес-логику, но не принадлежат ни одной конкретной сущности.
  • App Services (приложения) — слой сервисов приложения, который координирует работу доменных сервисов и других частей системы. Он отвечает за управление процессами приложения и взаимодействие с внешними системами через доменные сервисы.
  • User Interface (пользовательский интерфейс) включает в себя всё, что связано с представлением данных пользователю и взаимодействием с ним. Например, веб-интерфейс или мобильное приложение.
  • Infrastructure (инфраструктура) отвечает за базы данных, файловые системы, внешние API и прочее внешнее взаимодействие. Поддерживает слои выше, обеспечивая доступ к нужным ресурсам.
  • Tests (тесты) — слой, который покрывает все остальные слои и используется для проверки правильности и корректности работы каждого слоя.

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

  • Слой ядра: правила и логика заказа еды (бизнес-логика).
  • Второй слой: интерфейсы и абстракции для взаимодействия с внешними системами.
  • Третий слой — конкретные реализации интерфейсов, например обработка платежей.
  • Внешний слой — код интерфейса для взаимодействия с пользователем.

Если понадобится изменить способ обработки платежей, достаточно будет внести изменения только в третий слой. Эти изменения не затронут бизнес-логику.

Блинная сортировка (Pancake Sorting)

Блинная сортировка — один из алгоритмов сортировки, где нужно упорядочить данные с помощью одной операции. 

Концепцию блинной сортировки предложили Билл Гейтс и ученый-информатик Христос Пападимитриу в 1979 году. Исходная задача была такой: каждый блин в стопке подгорел с одной стороны. Нужно отсортировать блины по возрастанию или убыванию диаметра так, чтобы все они лежали на тарелке подгоревшей стороной вниз. Для этого можно переворачивать верхние части стопки. Алгоритм блинной сортировки использует такую же технику для упорядочивания чисел:

Блинная сортировка (Pancake Sorting)

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

Кофейные зёрна (JavaBeans)

Кофейные зёрна — это вид классов в Java, которые позволяют удобно работать с данными и переиспользовать их. JavaBeans написаны по определённым правилам и используются для объединения нескольких объектов в один для передачи данных между частями программы или между разными программами. Например, есть несколько отдельных данных о пользователе: имя, возраст и адрес. Чтобы не передавать каждое из этих значений отдельно, программист создаёт класс JavaBean, который будет содержать все эти данные вместе.

В графических интерфейсах JavaBeans помогают создавать переиспользуемые элементы: кнопки и текстовые поля. В серверных приложениях «кофейные зёрна» используют для передачи данных между различными компонентами системы. 

Кстати, до сих пор никто точно не знает, почему язык Java называется в честь кофе,. 

Соль (Salt)

Чтобы понять, что такое соль в ИТ, нужно немного вспомнить криптографию, а точнее хеширование. Это процесс шифрования информации до такой степени, что её нельзя воспроизвести в исходном виде. Мы берём часть информации и пропускаем через функцию, использующую математические операции. Функция называется хеш-функцией, а выход — хеш-значением, или дайджестом. Хеш-функция необратима, то есть восстановить исходную информацию из хеш-значения невозможно.

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

Кулинарные термины в ИТ

Что мы пропустили?

О чём мы забыли? Какие ещё кулинарные термины вы сможете вспомнить? Поделитесь с нами в комментариях, а мы добавим их в статью или выпустим новую и расскажем о тех, кто помог их собрать.

Редактор:

Инна Долога

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy