| Blog |

Free PNGs

Где программное обеспечение пошло не так?

Перевод статьи - Where Did Software Go Wrong?

Автор(ы) - Jesse Li

Источник оригинальной статьи:

https://blog.jse.li/posts/software/

27 мая 2020 г.

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

Все обернулось не совсем так. Волшебство исчезло, и с тех пор наш оптимизм угас. Наши веб-сайты медленные и небезопасные; наши стартапы жуткие и убыточные; наш президент пишет в твиттере ненавистнические высказывания; мы не доверяем нашим приложениям для социальных сетей, веб-камерам или машинам для голосования. И в эпоху карантина по коронавирусу мы осознаем, насколько неадекватным оказался Интернет как дом Разума. Где все пошло не так?

SnvvSnvvSnvv/Shutterstock.com

 

## Программное обеспечение для людей

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

Как инженеры-программисты, мы гордимся тем, что пишем «удобочитаемый» или «чистый» код или код, который «решает бизнес-задачи» — синонимы этого свойства адресности .это программное обеспечение, кажется, есть. Возможно, автор вредоносного ПО лучше всех знает это свойство. Как и любое программное обеспечение, вредоносное ПО адресовано людям и только попутно для выполнения машинами. Независимо от того, ворует ли образец вредоносного ПО деньги, взламывает учетные записи социальных сетей или дестабилизирует правительства, оно действует в человеческом домене. Компьютеру нет дела до денег, учетных записей в социальных сетях или правительств; люди делают. И когда автор вредоносного ПО запутывает свой код, он делает это с мыслью о читателе. Компьютеру все равно, запутан ли исполняемый им код; он знает только коды операций, часы и прерывания и точно их обрабатывает. Следовательно, даже вредоносное ПО, особенно вредоносное ПО, чей код намеренно сделан нечитаемым, создается с намерением быть прочитанным.

скриншот запутанного javascript

## Код многоголосый

Советский философ М. Бахтин писал, что «единичное высказывание, при всей его индивидуальности и творчестве, никоим образом не может рассматриваться как вполне свободное сочетание форм языка... слово в языке наполовину чужое» (Вертш 1991, 58-59). ). Любой код, который мы пишем, независимо от того, насколько он экспериментальный или новый, частично обязан своим существованием кому-то другому и участвует в качестве звена в цепочке диалога., один в ответ на другой. Автор вредоносного ПО находится в диалоге с аналитиком вредоносного ПО. Инженер-программист ведет диалог со своими товарищами по команде. Пользователь программного обеспечения находится в диалоге с его создателем. Веб-приложение находится в диалоге с языком и структурой, на которых оно написано, а его структура определяется характеристиками TCP/IP и HTTP. И в физическом акте написания кода мы находимся в диалоге с нашим компьютером и средой разработки.

https://blog.jse.li/software/intellisense.mp4

Верч сформулировал бахтинское понятие диалога в терминах голосов: «Кто говорит?» — спрашивает он, — «по крайней мере два голоса» (1991, 63). В то время как Верч и Бахтин занимались человеческим языком, мы можем так же легко применить их идеи к программному обеспечению: «Двусмысленность человеческого языка присутствует в коде, который никогда полностью не освобождается от своего статуса человеческого письма, даже если он сгенерирован машиной. Мы кодируем наши языковые излишества и двусмысленность семантики, как ее распознает читатель-человек» (Темкин 2017). Чьи голоса мы слышим, когда сталкиваемся с кодом?

На синтаксическом уровне каждое ключевое слово и языковая функция, которые мы используем, взяты в аренду у создателей языка. Эти ключевые слова и грамматики сами по себе часто заимствованы из человеческого языка, такого как английский, и эти голоса тоже присутствуют в нашем коде. JavaScript ifзаимствует значение у английского «if», которое само взято у немецкого, и в любом случае слово нам не принадлежит, не полностью — слово в языке наполовину чужое . Когда мы называем языки программирования, библиотеки и фреймворки «самоуверенными» или «ямами отчаяния/успеха», мы на самом деле имеем в виду «насколько громок голос языка в нашем коде?» комментарий о языке программирования Go от matt_wulfeck на Hacker News освещает преднамеренный дисбаланс между голосом программиста и голосом языка:

Go убирает так много «индивидуальности» кода. В большинстве команд, в которых я работал с Python и Java, я могу открыть файл и сразу сказать, кто написал библиотеку на основе различных стилей и тому подобного. С Go намного сложнее, и это очень хорошо.

Здесь мы видим, как голоса опосредуют наши действия — как Go mediate то, как мы пишем и думаем о коде? Юсси Пакканен, создатель системы сборки Meson, назвал посреднический аспект голосового пастырства:«Важно не то, что делают языки программирования, а то, к чему они вас подталкивают». Пастырство — это «невидимое свойство языка программирования и его экосистемы, которое побуждает людей решать проблемы способами, естественными для самого языка программирования, а не способами, которые считаются «лучшими» в каком-то смысле» (Pakkanen 2020). Мы усваиваем голоса наших социальных отношений, и эти голоса опосредуют наши действия. Каждый раз, когда мы погружаемся в кодовую базу, разговариваем с наставником, проходим курс или смотрим выступление на конференции, мы намеренно добавляем новые голоса в маленький мешок голосов в нашем сознании. Это не просто процесс потребления: интериоризируя голоса, мы формируем контрслова, мысленно спорим с ними, чревовещаем их посредством собственного труда — словом, вступаем в диалог.

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

## Абстракция и труд

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

Эти скрытые цепочки диалогов присутствуют во всем, от цепочек поставок до API, исходного кода и менеджеров пакетов. Запустите git log репозиторий с работы или просмотрите коммиты проекта с открытым исходным кодом — попробуйте Postgres , если у вас его нет под рукой. Читайте сообщения коммитов, ломайте голову над различиями и восхищайтесь слоями отложенной истории. Postgres имеет почти 50 000 коммитов, один в ответ на другой, каждый из которых представляет собой часы или дни труда и жизни накопленных знаний и опыта. Это поверхность для записи этих диалогов, в которую вписан каждый коммит; и именно на уровне коммитов, списков изменений и релизов мы укрощаем непрерывный поток разработки, разрезая, сегментируя и абстрагируя его на блоки, которые мы можем понять.По одному голосу, пожалуйста. Один пресс -секретарь Дейкстра , один талисман Постгрес , чтобы скрыть сложность.

Каждая часть программного обеспечения, с которой мы взаимодействуем, каждая компания, каждый проект, каждый продукт — от операционной системы вашего компьютера до поставщиков SaaS, на которые опирается ваша компания, библиотеки, которые вы используете, и процедуры, работающие на микроконтроллере в вашем холодильнике, скрывает так же восхитительно сложна история производства, и это то, что объединяет всю разработку программного обеспечения. Маркс описывал эту общую субстанцию ​​как «простое загустевание однородного человеческого труда, рабочей силы, затраченной безотносительно к способу ее расходования. Все эти вещи говорят нам теперь о том, что на их производство затрачена человеческая рабочая сила, что в них воплощен человеческий труд. Если рассматривать их как кристаллы этой общей им всем социальной субстанции, то они суть — ценности» (1867, 48).

## NPM не проблема

В 2016 году пакет JavaScript под названием left-pad сломал интернет на один день. Пакет состоял из одиннадцати строк кода, которые дополняли строки до заданной длины, превращая строки типа «5» в строки типа «005». В знак протеста против спора о товарных знаках создатель left-pad Азер Кочулу удалил его из реестра NPM, нанеся ущерб целой экосистеме пакетов, которые от него зависели, прямо или косвенно через транзитивные зависимости до n - й степени — и это были пакеты, на которых работают тысячи веб-сайтов по всему миру (Williams 2016).

Визуализация графика зависимостей для пакета NPM react-scripts. Каждая точка представляет пакет, а линии соединяют пакеты, которые зависят друг от друга. Одна из точек — левая панель; Я не знаю какой.

Согласно дискурсу того времени, это был урок хрупкости сети зависимостей и абстракций, которые мы создали, и это был знак того, что экосистема NPM была фундаментально нарушена. Мы строили карточные домики — длинные цепочки диалогов, звенья которых могли просто исчезнуть, — и все, что понадобилось одному разработчику и его одиннадцати строчкам кода, чтобы разрушить их. Дэвид Хейни, размышляя над инцидентом с левой подушечкой, спросил в своем блоге .

Мы забыли, как программировать? […] У меня складывается впечатление, что участники экосистемы NPM создали склонность к микропакетам. Похоже, что вместо того, чтобы писать какие-либо функции или код, они предпочитают зависеть от того, что написал кто-то другой
(2016).

Но мы уже знаем, что не разучились программировать: мы всегда так программировали. Все, что мы пишем, написано кем-то другим; нам ничего не принадлежит; весь код многоголосый. Эти паутины зависимостей существовали всегда, но, возможно, ни одна система не сделала этот факт столь очевидным, как NPM. Там, где мы видим одно — одно приложение, один скрипт, один пакет — поломки NPM напоминают нам, что их много.

## Программное обеспечение не является творческим

https://youtu.be/V1eYniJ0Rnk

Наблюдайте, как нейронная сеть, созданная из случайного хаоса, обучается играть в Atari Breakout. Наблюдайте за крошечными машинами — узлами сети, их соединениями и соединениями, разрывными потоками и обратными распространениями — и наблюдайте, как они сходятся: сначала случайные непредвиденные обстоятельства, которые в петле обратной связи кристаллизуются в структуру. Это машины, воспроизводящие машины. Это мелкие капиталисты. «Всеобщая история есть история случайностей, а не истории необходимости. Разрывы и ограничения, а не непрерывность» (Делёз и Гваттари, 1983, 140).

Но нейронные сети и программное обеспечение в целом не создают новую реальность — они поглощают данные и отражают реальность, которая представляет собой регургитацию и реконфигурацию того, что они уже потребляли. И эта реальность, что эти машины отражают обратно, немного неверна . Вспомните афоризм статистика «все модели неверны, но некоторые из них полезны». Что происходит, когда мы полагаемся на эти модели для создания новых реальностей и снова загружаем эти немного неправильные реальности обратно в машины? Что происходит, когда мы слушаем Discover Weekly от Spotifyплейлист неделю за неделей, «лайкать» посты, которые нам рекомендует Facebook, и пролистывать TikTok за TikTok? Я виновен во всем этом, и было бы неправильно утверждать, что мой музыкальный вкус и чувство юмора опосредованы этой взаимной рекурсией между алгоритмами и реальным миром.

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

https://blog.jse.li/software/faces.mp4

 

## Кому выгодно программное обеспечение?

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

Через Instacart, Amazon Fresh и другие службы доставки продуктов мы можем использовать приложение, чтобы купить тело водителя доставки на час, чтобы подвергнуть себя вирусу от нашего имени. Неудовлетворенные даже этим, некоторые разработчики написали сценарии для мгновенного резервирования дефицитных слотов доставки на этих сервисах.

Один разработчик написал в Vice's Motherboard : «Я разработал бота для тех, кому в наше время крайне неудобно выходить на улицу или кто считает, что находиться на улице небезопасно. Это мой вклад в то, чтобы выровнять кривую, я очень надеюсь, что это поможет сократить количество людей, выходящих из дома» (Cox 2020). Это правильно? Действительно ли бот уменьшает количество людей, выходящих из дома, или он просто меняет демографический состав тех, кто остается дома, отдавая предпочтение тем, у кого есть ресурсы и технические навыки для запуска скрипта Python и Selenium WebDriver? Джозеф Кокс отмечает, что с постоянным и ограниченным количеством слотов для доставки эти боты создают «технический разрыв между теми, кто может использовать бота для заказа еды, и теми, кто просто должен продолжать попытки во время пандемии» (2020).

Боты Instacart — это лишь самая последняя реинкарнация давней традиции использования скорости программного обеспечения для получения преимущества перед людьми. В 2000-х годах, когда билеты на концерты впервые начали продавать через Интернет, спекулянты создали ботов, автоматически покупающих билеты и перепродающих их по более высокой цене. И капитализм, в своей бесконечной гибкости, адаптировал и приветствовал это развитие с распростертыми объятиями и невидимыми руками, породив такие компании, как TicketMaster, которые институционализировали и узаконили эту практику. Но Instacart и TicketMaster — это всего лишь симптомы проблемы. Мы видели те же закономерности в гонке вооружений высокочастотного трейдинга. Сначала роботы победили людей. Далее роботы стали частью игры, и роботы играли друг против друга. Прибыль от высокочастотной торговли иссякла, но ее использование стало необходимостью просто для того, чтобы не отставать.

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

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

## Фальстарт: стартапы

Стартапы любят спасать мир, но посмотрите на состояние мира сейчас — таково ли это быть спасенным? Стал ли мир хоть немного лучше благодаря таким стартапам, как Instagram, Uber и Peloton? Стартапы — это пространство замечательных инноваций, и они являются экспертами в управлении многоголосием кода — просто посмотрите на сеть голосов, которые транслирует GitLab (показано ниже). Но при капитализме эти голоса искажены и натянуты, и они кричат ​​«рост, рост!» как венчурные капиталисты и учредители требуют привлечения пользователей, доли рынка и доходов — одним словом, они требуют доступа к капиталистическому накоплению.

Диаграмма системы опубликована GitLab

Основатель стартапа, как бы он ни утверждал, что любит код, любит человечество или любит острые ощущения от суеты (и может даже верить себе, когда говорит это), больше всего любит рост капитала. Основатель технологии — настоящий капиталист, но капитал не любит их в ответ; капитал вообще не может любить, и шансы у нашего героя-капиталиста невелики. «Большие капиталы бьют меньшие… Это всегда кончается разорением многих мелких капиталистов, капиталы которых частью переходят в руки их завоевателей, частью исчезают» (Маркс 1867, 621). Капитал накапливается и концентрируется, и в разгар яростной конкуренции стартап либо умирает, либо приобретается Facebook или Google, не оставляя после себя ничего, кроме маркера на LinkedIn и поста в блоге, означающего невероятное путешествие .. Так много для изменения мира.

## Что делать?

Чтобы вернуться к амбициозному вопросу, на который мы намеревались ответить, где все пошло не так ? Что привело нас к этой неразберихе, к этому инструментальному ускорению накопления и эксплуатации? Хитрость в том, что мы не изучали программное обеспечение само по себе — мы установили, что компьютеры и компьютерный код действительно насыщены человеческим прикосновением, человеческими голосами и человеческими мыслями. Программное обеспечение нельзя отделить от человеческих структур, которые его создают, и для нас этой структурой является капитализм. Цитируя Годфри Реджио, режиссера фильма « Кояанискатси » (1982), «это не эффект , а то, что все существует внутри . Мы не используем технологии, мы живемтехнологии. Технологии стали такими же вездесущими, как воздух, которым мы дышим, поэтому мы больше не осознаем их присутствия» ( Essence of Life 2002).

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

В : Что делает программное обеспечение?

О: Он производит и воспроизводит капитал.

В : Кому выгодно программное обеспечение?

A : Люди, которые владеют капиталом.

В : Что такое программное обеспечение?

А : Капитал.

А : Капитал.

А : Капитал.

А : Капитал.

Но мы можем сломать этот шаблон; мы можем найти свои собственные ответы на эти вопросы, и если это зависит от нас, ответ не обязательно должен быть тем ответом, которому нас учили, капитал . Программное обеспечение — это инструмент с революционным потенциалом, но это все, что оно может нам дать. «Самым своим методом наука демонстрирует, что постоянно разрабатываемые ею средства не более чем воспроизводят извне взаимодействие сил сами по себе без цели и цели , комбинации которых приводят к такому-то и такому-то результату» (Делёз и Гваттари, 1983, 368). ).

Итак, каковы цели и задачи, на достижение которых мы должны направить наше программное обеспечение? Каковы ответы на эти экономические вопросы, если не капитал — или, еще лучше, какие вопросы мы должны задавать, если не экономические?

Я не знаю :)

Подумайте о том, чтобы сделать пожертвование в залоговый фонд местного сообщества .

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

На данный момент это наиболее эффективное средство конвертации вашего капитала в свободу. Если программное обеспечение и годится для чего-то, то это оно .

https://www.communityjusticeexchange.org/nbfn-каталог

 

## Ссылки

Abelson, Harold, Gerald Jay. Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. Cambridge, MA: MIT Press, 1996.

Cox, Joseph. “People Are Making Bots to Snatch Whole Foods Delivery Order Time Slots.” Vice. Vice Media Group, April 21, 2020. https://www.vice.com/en_us/article/n7jaw7/amazon-fresh-whole-foods-delivery-time-slot-bots.

Deleuze, Gilles, and Félix Guattari. Anti-Oedipus: Capitalism and Schizophrenia. Translated by Mark Seem, Robert Hurley, and Helen R. Lane, 1983.

Essence of Life. MGM Home Entertainment Inc., 2002. https://www.youtube.com/watch?v=8oiK4vPLtVw&t=581.

Haney, David. “NPM & Left-Pad: Have We Forgotten How To Program?” David Haney, March 23, 2016. https://www.davidhaney.io/npm-left-pad-have-we-forgotten-how-to-program/.

Marx, Karl. Capital: a Critique of Political Economy. Translated by Ben Fowkes, 1867.

Pakkanen, Jussi. “It’s Not What Programming Languages Do, It’s What They Shepherd You To.” Nibble Stew, March 6, 2020. https://nibblestew.blogspot.com/2020/03/its-not-what-programming-languages-do.html.

Temkin, Daniel. “Sentences on Code Art.” esoteric.codes, December 27, 2017. https://esoteric.codes/blog/sentences-on-code-art.

Weber, Max. The Protestant Ethic and the Spirit of Capitalism. Translated by Stephen Kalberg, 1920.

Wertsch, James V. Voices of the Mind: A Sociocultural Approach to Mediated Action. Cambridge University Press, 1991.

Williams, Chris. “How One Developer Just Broke Node, Babel and Thousands of Projects in 11 Lines of JavaScript.” The Register. Situation Publishing, March 23, 2016. https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/.