Бьярн Страуструп, изобретатель языка программирования C ++, в 1988 году выступил в Apple с лекцией под простым названием: «Что такое« объектно-ориентированное программирование? »,« Объектно-ориентированное программирование »и« абстракция данных »». В листовке для его выступления отмечалось, что «стали очень распространенными терминами. К сожалению, мало кто согласен с тем, что они имеют в виду ». Абстракция данных - это sine qua non эстетики информатики. Если математики мистически говорят об элегантности (а остальные из нас понятия не имеют, что они имеют в виду), то компьютерные ученые говорят об абстракции. В отличие от математиков, с идеей абстракции легче разобраться.

Программирование, по крайней мере, на таких языках, как C, было связано с абстракцией. Компьютеры на самом базовом уровне манипулируют битами, которые имеют значения 1 или 0, вверх или вниз, включены или выключены. Манипуляции с этими битами - это просто логические операции. Если A = 1 и B = 1, каково значение C, если и A, и B равны единице? Такие вещи. Все остальное построено на этих логических операциях.

Объектно-ориентированное программирование (ООП) - это черный ящик. В нормальном программировании программисту ясно виден каждый шаг алгоритма. Если вы хотите отсортировать числа «9 7 8 6 3 6 5 2 1» в последовательном порядке от наименьшего к наибольшему, вы запишите, как именно вы хотите отсортировать эти числа. Вы можете сделать это простым способом или придумать более умный способ (существует шокирующее количество способов отсортировать список чисел). В будущем может быть изобретен какой-то более эффективный способ, и вам придется начинать и менять каждый раз, когда вы кодируете сортировку. Если кому-то еще придется изменить код в будущем, он должен будет выяснить, какой алгоритм вы реализовали. В ООП у вас есть объект с именем «sort_numbers», и вы даете ему список. Вы можете получить этот объект из другой программы, и это важная часть, вам даже не нужно знать, как на самом деле сортируется "sort_numbers". Он просто выполняет свою работу и возвращает вам правильно отсортированный список «123566789». Вы можете просто использовать и повторно использовать его. Реальный процесс, как говорят программисты, «абстрагируется». Вам не нужно понимать, как это произошло на самом деле. Важно то, чтобы вы получили тот результат, который вам нужен.

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

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

Если вы проводите дни, погруженные в мировоззрение, трудно понять, почему это мировоззрение, идеально подходящее для разработки программного обеспечения, может быть менее подходящим в остальном мире. Технический мир 1980-х годов был построен на субподрядном труде, и чем меньше инженеры слышали о жизни своих поставщиков, тем лучше. Этот субподрядный мир независимых подрядчиков, временных сотрудников и недокументированных сборщиков очень мало походил на комнату для семинаров в Apple, где Стив и Воз, возможно, наслаждались беседой с изобретателем C ++. В то время как ООП создавало стабильность в программном обеспечении, субподряд создавал нестабильность в мире.

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