Примеры абстракций в технике и повседневности

531ec7a07c6d7155ce032130a5551fe2.jpg

Поговорим про абстракциях. Что вообще это за слово такое абстракция?

Абстракция  (отвлечение) про­цесс от­вле­че­ния (абстрагирования) от тех или иных ха­рак­те­ри­стик объекта для их из­би­ра­тель­но­го анализа; при этом на­блю­дае­мый объ­ект за­ме­ща­ет­ся его идеализированным тео­ре­тическим об­ра­зом — аб­стракт­ным объектом. Абстракции являются уни­вер­саль­ным методом на­учного по­зна­ния, они необходимы для фор­ми­ро­ва­ния по­ня­тий, уз­на­ва­ния и клас­си­фи­ка­ции объ­ек­тов исследования на всех уров­нях фор­ми­ро­ва­ния зна­ний.

Синонимами можно считать такие слова как отвлеченный, умозрительный, теоретический.

Противоположное слово это конкретный, фактический.

Абстракция это когда берут какой-то сложный объект и убирают те детали, которые не имеют существенного значения для понимания какого бы то ни было свойства этого объекта.

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

Абстракции в разработке программного обеспечения

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

Виртуальная память это абстракция от физических адресов. Виртуальная машина это абстрагирования от реальной физической машины (будь то телефон, DeskTop, Server). Любой язык программирования это способ отвлечения от безумно сложных и скучных машинных кодов. В каждой программе есть абстрактные структуры данных такие как бинарные деревья, очереди, стеки, циклические массивы, графы, косые деревья, хеш-таблицы. Файл как и файловые системы преобразуют нули и единицы в удобные текстовые файлики. Операционная система это способ отвлечения от конкретного оборудования. POSIX (Portable Operating System Interface) это пример полезного абстрагирования от реализации функций операционных систем. Благодаря POSIX у разных операционных систем появилась совместимость на уровне исходного кода. Гипервизоры нужны чтобы не обращать внимания на то как меняются операционные системы. Байт-код это отвлечение от целевой платформы для которой собрана программа. Язык Python абстрагируется от типов данных. Модель OSI-7 это условное представление того через какие слои проходят данные в интернете. Физический, канальный, сетевой, транспортный, представления, сеансовый, прикладной. DNS адреса удобнее запоминать чем сырые IP адреса. 

В общем абстракции очень полезны в программировании. Для разработки софтвера надо обязательно обладать развитым абстрактным мышлением.

Абстракции в аппаратном обеспечении

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

Вот например автоматическая коробка передач абстрагируется от реальной геометрии переключения положения шестерен очень полезная абстракция воплощенная в железе.  Или драйвер шагового двигателя это способ абстрагироваться от того как на самом деле осуществляется управления вращением вала шагового мотора. Язык Verilog абстрагируется от схемотехники цифровых цепей и описывает цифровую схему как текст. Схемы конечный автоматов это пример отвлечения от физического расположения микросхем триггеров на электронной плате. Принстонская/Гарвардская архитектура микропроцессора это умозрительная модель понимания структуры компьютера.

Вот в схеме топологии печатной платы нет абсолютно никакой абстракции. Топология PCB она максимально конкретная. Поэтому и анализировать топологию всегда трудно. Многое отвлекает.

https://habr.com/ru/articles/655879/

Поэтому люди придумали схемы электрические принципиальные. Схемотехника это абстракция от топологии. Однако и схемотехника современных электронных устройств тоже достигла высокого уровня сложности. Схемотехника в 40…100 страниц это уже вообще сегодня норма жизни. Поэтому люди придумали блок-схемы электронных плат. Блок-схема это абстракция от схемотехники, которая работает на 2 м уровне. Потом делают схемы топологии сети. Это уже, как минимум, 3тий уровень абстракции. 

https://habr.com/ru/articles/667030/

Проследите цепочку получившихся уровней:  

Физика > Полупроводниковые приборы > аналоговые схемы > цифровые схемы > логические элементы > АЛУ > процессор > SoC > PCB > OS (системное ПО) > Прикладное ПО. Минимум 11 умозрительных уровней!

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

Вероятно абстракции появились как побочный эффект познания мироустройства в науке. Например закон всемирного тяготения это абстракция. Реальные силы значительно труднее в понимании. Это доказывают опыты наблюдения смещения перигелия Меркурия. https://ru.wikipedia.org/wiki/Смещение_перигелия_Меркурия

В эпоху Великих Географический Открытий появилась ценность географических карт. Географическая карта это абстракция от реальной формы земной поверхности и береговой линии. Там реки указывают плавной линией хотя на самом деле они извиваются как змеи и через каждые 100—200 метров поворот.

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

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

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

А оut source компании это пресловутый способ абстрагирования от найма и социальных противоречий с этим связанных для продуктовых компаний.
https://habr.com/ru/articles/720464/

У абстракций есть недостатки?

Да. Уровни абстракции отбирают у системы некоторые ресурсы. Java код исполняется медленнее чем С код. Артефакты Java компилятора занимают больше места на диске, чем артефакты от C компилятора. Это плата за упрощение понимания и переносимость программ.

В чем достоинства абстракций?

1--Они помогают понять сложные вещи. Абстракции делают возможным применение формальных методов, и алгоритмов, т.е. в конечном счете логики. (модель атома Бора, абстрактные структуры данных в программировании, закон всемирного тяготения)

2--Они уменьшают время понимания сложных вещей (схема метро, электрические принципиальные схемы)

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

4--Они помогают переносить объекты на другую систему координат (Языки программирования Java, гипервизоры, Doсker контейнеры)

5--Они заменяют сложное на простое (языки программирования, файловые системы, DNS адреса).

6--Они помогают уйти от ответственности (out source компании, модель OSI-7)

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

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

Как научиться абстрактному мышлению раз это так полезно? Как научиться придумывать полезные абстракции?

У меня нет четкого ответа на этот вопрос. Наверно надо пробовать. Далее эксперименты покажут какие абстракции жизнеспособны, а какие нет. Это как в физике. Была модель атома Томсона и модель атома Бора. В результате экспериментов выяснилось, что модель атома Бора оказалась более пригодной к реальности. Многие языки программирования тоже канули в лету. Где сейчас Паскаль, Fortran или Бэйсик? Тут как с языками программирования. Некоторые абстракции будут существовать до поры до времени пока их не заменят более эффективные простые абстракции. И это нормально.

Вывод

У природы же видимо нет абстракций. В природе всё максимально конкретно. Абстрагирование это чисто человеческое свойство. Это люди придумывают абстракции и уровни абстракций для себе подобных. Это и понятно. Смысл абстракции это уменьшение сложности, увеличения скорости понимания, объяснение сути чего-либо, будь-то карта материка или электронная плата. 

Создавайте свои абстракции, господа. В этом нет ничего предосудительного.

Известные мне примеры умозрительных понятий я перечислит тут https://docs.google.com/spreadsheets/d/1JxEuo7bxo2A7J5qksBxekWf3FJVuDCJbXaZKx9IvDnU/edit#gid=0

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

https://habr.com/ru/companies/tiktokcoach/articles/206994/

https://habr.com/ru/companies/skillfactory/articles/508716/

© Habrahabr.ru