Что такое код? (перевод)

Специальный выпуск Bloomberg Businessweek, 11.06.2015

Часть 7: Триумф менеджера среднего звена

— В смысле, эта компания сделает всё возможное, лишь бы затормозить релиз? — спрашивает ЧБП, и технический директор морщится.

Ничего страшного; ты и ожидала, что совещание будет напряжённым.

— Сначала мне пришлось согласовывать всё через команду безопасности, а это пять месяцев проверок! — начинает горячиться ЧБП, — А потом у меня ушли недели на то, чтобы получить рабочее окружение для разработки, так чтобы моей команде не приходилось тайком бегать в Starbucks, чтобы закоммитить код…

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

Ты обратила внимание, что ЧБП набрал вес. Технический директор, у которой несколько проектов находятся в похожем положении, наоборот, вес потеряла.

— Мне сказали, что я могу… что я должен сделать это как следует, — говорит ЧБП. — Чтобы через полтора года не пришлось переделывать заново.

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

Одна из ключевых идей, который ЧБП пытался тебе втолковать, главное послание, которое важнее всего для него, — что код никогда не бывает готов. После запуска новой платформы (уже не сайта, это будет платформа!), со всеми её взаимосвязанными компонентами, он и его команда будут работать над ней вечно. Всегда будут новые баги, новые фичи, новые нужды. Такие вещи — побочный эффект любого роста вообще, а эта платформа, настаивает он, спроектирована так, чтобы масштабироваться.

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

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

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

— Я просто хочу выпускать продукт, — говорит ЧБП. Под чем он подразумевает: «Я просто хочу делать то, о чём меня попросили». Но добрая половина компании слышит это как: «Я просто хочу разрушить всё, к чему прикасаюсь. Ибо я Кали, разрушительница лучших практик».

— Хорошо, — говоришь ты. — Я это понимаю. И вот что ты сделаешь для меня…

Ты смотришь на технического директора, и она кивает.

— Первое: никаких больше конференций.

Его рот открывается, затем закрывается.

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

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

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

— В следующем месяце.

Технический директор произносит его имя, качает головой.

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

Время вышло. Технический директор спрашивает ЧБП: «Всё ясно?»

— Да, — говорит ЧБП.

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

— Да, и… можешь выбрать язык? — спрашиваешь ты. Это уже для тебя.

— Мы выбрали, — говорит ЧБП. — Мы используем Node.js. С фреймворком Express.

— Отлично, — говоришь ты. — Жду не дождусь увидеть код.

7.1 Как выбрать язык программирования?

Остерегайся аргументов, связанных со скоростью программирования. При прочих равных быстрее — лучше. Но прочие равные не бывают равными никогда. Тебе нужна скорость, чтобы быстро создать сайт? Или такого, что позволяет вращать несколько тысяч 3D-полигонов в реальном времени? Тебе нужно уметь быстро превращать PDF в текст? Или 10 миллионов PDF в текст за один раз? Это разные задачи. Что нам нужно сделать, сколько раз нам нужно это сделать и какой существующий код мы можем задействовать, чтобы помочь нам сделать это столько раз? Задавай эти вопросы.

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

Скажем, твои программисты разрабатывают огромный сайт, обслуживающий 5 миллионов человек, каждый из которых заходит по пять раз в месяц. Использовать Python, который медленнее, Go, который быстрый, или Node.js, который что-то посередине? Вопрос с подвохом! Двадцать пять миллионов посещений страниц — не такое уж большое дело, если только они не задействуют какие-то сложные запросы к базе данных, сильно различающиеся для каждого пользователя и каждой страницы (хороший пример: Facebook).

Но число посещений и не пустяковое; если на создание страницы уходит минута, тебе понадобилось бы 48 лет, чтобы наделать их столько, — а это чересчур медленно. Если на страницу уходит секунда, это всё равно слишком медленно — в месяце всего 2,6 миллиона секунд. Так что тебе нужно сообразить, как отдавать около 10 страниц в секунду. Тебе, вероятно, захочется больше одного сервера, немного избыточности и хорошую настройку серверов. Это потребует усилий и планирования. Но это можно сделать на любом языке.

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

А что, если ты хочешь встроить в эти страницы живой чат человека с человеком и ожидаешь, что тысячи людей будут пользоваться этим чатом одновременно, переговариваясь между собой? Вот теперь ты запускаешь руку в ту самую богом забытую реку. Но это ровно та задача, которую Go и был создан решать. Это язык для создания высокоскоростных серверов, использующих на полную компьютерные процессоры. У него есть и другие фишки, но именно здесь Go блистает. Собственно, Node.js для сервера такого рода тоже работает вполне неплохо, а у Clojure возможностей уж точно хватает. Ах да, Java тоже работает. Если бы тебе действительно приспичило, ты мог бы сделать это даже на PHP.

Величайшие хиты языков программирования

Ассемблер
Pac-Man, Centipede
C
Unix, ядро Linux, Python, Perl, PHP
C++
Windows, Google Chrome, ПО для истребителей F-35
Python
Instagram, Pinterest, Spotify, YouTube
PHP
Facebook, Wikipedia, WordPress, Drupal
Perl
BuzzFeed
Java
Google, eBay, LinkedIn, Amazon
Ruby
Twitter, GitHub, Groupon, Shopify

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

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

Но выбор основного языка программирования — важнейший сигнальный акт, на который способна технологическая компания. Скажи мне, что программируешь на Java, — и я сделаю вывод, что ты либо серьёзен, либо скучен. На Ruby — и ты хочешь строить вещи быстро. На Clojure — и я думаю, что ты умён, но задаюсь вопросом, деведешь ли проект до релиза. На Python — и я доверяю тебе безоговорочно. На PHP — и мы глубоко вздохнём. На C++ или C — и я смиренно киваю. На C# — и я улыбаюсь и заключаю, что у нас нет ничего общего. На Fortran — и я прошу показать твой допуск к секретности. Эти языки вмещают в себя целые цивилизации.

Ты можешь определить, насколько хорошо организован код, с другого конца комнаты. Или прищурившись, или отдалившись. Форма кода с расстояния в пять метров невероятно информативна. Чистый код идиоматичен, максимально краток, очевиден, даже если не обильно задокументирован. Разговорчив и приветлив. Как было написано в «Структуре и интерпретации компьютерных программ» (она же SICP) — основополагающем учебнике программирования, годами преподававшемся в MIT: «Язык программирования — это не просто способ заставить компьютер выполнять операции… это новая формальная среда для выражения идей о методологии. А значит, программы нужно писать так, чтобы их читали люди, и лишь попутно — чтобы их исполняли машины». Отличная программа — это письмо от нынешнего тебя тебе будущему или тому, кто унаследует твой код. Щедрый гуманистический документ.

Разумеется, всё это красиво и очень вдохновляет. Но оно ещё и работать должно.

7.2 Добро пожаловать на скрам

Однажды ты идёшь в загон, где держат программистов. Их стендап начинается в 10 утра, некоторые пришли с кофе. Они и правда стоят. В основном мужчины, пара женщин. Они начинают говорить по кругу, каждый рассказывает что делал вчера, что планирует делать сегодня и есть ли у него блокеры. Большинство в офисе, так что стендап проводят лично. Когда кто-то в отъезде, делают это через чат. Двое подключены по звонку — новички из Бостона и из Венгрии, оба с сильным акцентом. Они рассказывают ту же историю, что и остальные.

— Вчера я работал над пользовательской историей про удаление аккаунта, — говорит Бостон. — Номер 265. Сегодня я пишу юнит-тесты для кода удаления аккаунта. Я не заблокирован. Предлагаю следующим Иштвана.

Линия выходит из мьюта, и густой венгерский акцент произносит:

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

ЧБП говорит:

— Иштван, ты обновил JIRA? (JIRA — это такой коммерческий сервис для разработчиков, в котором фиксируются задачи и статусы их выполнения.)

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

7.3 Как управлять программистами

На странице Wikipedia «Software development process» есть список ссылок на страницы «TDD BDD FDD DDD MDD»: «разработка через тестирование», «разработка через поведение», «разработка через функциональность», «предметно-ориентированное проектирование» и «разработка на основе моделей». У каждой есть свои сторонники и свои критики. Привожу их исключительно для твоего развлечения. Если захочешь копнуть глубже в методологии менеджмента — дерзай.

Управление программистами — наука сама по себе. Есть поддисциплины, занимающиеся тем, как программисты общаются. Самая заметная — «Agile-методология», которая требует регулярной координации между программистами, предоставляя набор ритуалов и правил, которым они должны следовать, чтобы их код работал с кодом других.

Agile-манифест (да-да, манифест) гласит следующее:

  • Люди и взаимодействие важнее процессов и инструментов;
  • Работающий софт важнее исчерпывающей документации;
  • Сотрудничество с заказчиком важнее согласования условий контракта;
  • Готовность к изменениям важнее следования плану.

У этого документа 17 подписантов. И существует столько же вариаций Agile. В моей жизни бывали кошмарные совещания, когда я сидел между двумя командами и одна из них пространно объясняла, почему Agile с Kanban лучше, чем Agile со Scrum. Всё вокруг пропитывалось запахом горящих денег.

Вот Agile, каким я видел его на практике: ты разбиваешь свой продукт на набор простых для понимания пользовательских историй. Ты заносишь эти истории в систему трекинга задач вроде JIRA.

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

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

Это идеальный случай. Сделанный хорошо, он избавляет от магического мышления типа «Всё заработает, когда мы всё доделаем и свяжем воедино». У него есть свои критики, и у него, кажется, столько же ответвлений (ср. Scrum, Kanban и «Agile с дисциплиной»), сколько у христианства.

Программисты вечно ищут серебряную пулю и, что хуже, вечно думают, что нашли её. Вот почему Фредерик Брукс, самый знаменитый из ранних методологов программирования, написал работу под названием «No Silver Bullet — Essence and Accident in Software Engineering» («Серебряной пули не существует — сущностная и случайная сложность разработки программного обеспечения»). Он написал её в 1986 году. Тогда он очень надеялся, что объектно-ориентированное программирование поможет всё исправить.

7.4 «Мы будем релизить»

К тебе в кабинет входит ЧБП. Он держит какую-то большую бутыль и ноутбук и выглядит заспанным. Ты замечаешь это с улыбкой.

— Мы дошли до релиза, — говорит он. — Слегка засиделись вчера вечером.

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

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

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

— Это настоящее? — спрашиваешь ты.

— Да. Это софт. Он общается с базой данных. Именно это мы и зарелизим.

— А с клиентской поддержкой он общается?

Он на секунду прищуривается.

— В июле, — говорит он.

Боже мой, дата! Ты выудила название месяца — нечто определённо дедлайноподобное.

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

— Значит, это реальный, настоящий сайт?

— Да, — говорит он, отхлёбывая из горла странного ферментированного напитка с этикеткой в стиле мандалы из магазина здорового питания. Наклейка на бутылке гласит «$3,99».

— Теперь мы перешли к следующему спринту, — говорит он. — Дожимаем к июлю. И релизим в середине августа.

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

— Мы, — произносит он наконец, — будем релизить.

Они будут проводить свои стендапы. А после стендапов разойдутся работать в IDE и писать свой серверный JavaScript и свой клиентский JavaScript. Затем они прогонят кое-какие тесты и закоммитят свой код в репозиторий, и сервер непрерывной интеграции выполнит тесты и проверки, и, если всё пройдёт гладко, он задеплоит код — возможно, даже в августе — это будет похоже на готовый продукт. Они настаивают, что будут делать это каждый день, непрерывными релизами.

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

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

Ты решил отказаться от поддержки BlackBerry. Это кольнуло, но у тебя дома в ящике стола лежат три BlackBerry и ни одного в кармане. Жизнь идёт дальше.

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

Ты уже чувствуешь это — надвигающуюся на тебя букву S, там, вдали, пока ещё на горизонте29. Она прибудет в свой срок, и ты прилепишь её своему текущему титулу «VP». И всё будет хорошо. Программисты теперь улыбаются, встречая тебя в коридоре. После того как ты провела несколько десятков часов на код-ревью, обсуждениях фич и даже молча постояла на нескольких стендапах. Ты знаешь имена некоторых из них, хотя и могла бы произносить их без ошибок.

29 Буква S здесь — от Senior. Герой (VP, вице-президент) предвкушает повышение до SVP, Senior Vice President — старшего вице-президента.

Возможно, у тебя всё-таки есть будущее в софте.

7.5 Стоит ли учиться программировать?

Я как-то беседовал с друзьями, которым уже за сорок, посвятившими карьеру технологиям. Я жаловался. Я говорю: «Я наставляю нескольких миллениалов, и боже мой. У каждого из них работа — чисто контрактная позиция. Страховка не включена. У каждого куча долгов». Они посмотрели на меня озадаченно. Прошла секунда, и один из них сказал: «У них всё будет хорошо, если они умеют кодить».

Ты, скорее всего, уже кодишь. Даже если делаешь это в Excel или в Google Таблицах. Ты запускаешь маленькие процессы по цепочке или проделываешь серию операций «найти и заменить» в большом документе.

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

Впрочем, индустрия петляет и виляет так резко, что кто знает, что принесут следующие 10 или 20 лет? iPhone, да и мобильные вообще, создали кратковременный ренессанс для тех, кто умел программировать на низкоуровневых языках вроде Objective-C, — для тех, кто способен заботиться о памяти компьютера. Возможно, интернет вещей превратит всё в сенсоры. (Ты уже сегодня гуляешь по Disney World с браслетом, который тебя отслеживает; всё этот парк теперь — большой компьютер.) Это потребует ещё более низкоуровневого мышления. А потом будут сайты, которые нужно делать, приложения, которые нужно строить, и так далее, и так далее.

Работа, скорее всего, будет. Но это глобальная индустрия, и в ней тебе придётся конкурировать с тысячами классных ребят с отличными дипломами из Индии. Некоторые из них раньше работали в Microsoft, Google и IBM. Те самые вещи, что сделали программирование гигантской, охватывающей весь мир суперструктурой, — то, что ты можешь не создавать ничего материального и брать за это деньги, — делают его идеальной глобализированной индустрией. Нет попросту никаких причин, кроме предрассудков, полагать, что Мумбаи или Сеул не могут делать большие, сложные вещи так же хорошо, как Пало-Альто или Сиэтл.

Тебе может захотеться научиться программировать, потому что появилась новая экономика. Хотя она такая же иррациональная, странная и болезненная, как старая. Книги и песни теперь превратились в строки в базах данных, а целые фильмы делаются на видеокартах, без единого настоящего луча света, проникающего сквозь линзу. Может, умение кодить даст тебе кольцо-декодер для будущего. Разрушение какого-то рынка — это всё та же оптимизация, просто под другим именем. SDK — это просто культура, закодированная и сделанная воспроизводимой. Сегодня в индустрии они принимаются с таким же восторгом, с каким десятилетия назад принимались альбомы The Beatles.

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

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

Если не считать периодов болезни и редких вылазок в лес, я пользуюсь компьютером каждый день вот уже 28 лет. Я узнаю о мире через программы. Я узнал об издательском деле, пользуясь системой настольной вёрстки QuarkXPress, а о цвете и искусстве — пользуясь программой под названием Deluxe Paint. Софт научил меня математике и основам статистики. Он научил меня вычислять ортодромию — оценивать расстояние между двумя точками на глобусе. Я узнал об интернете, создавая веб-страницы, а о музыке — через MIDI. И больше всего софт научил меня софту.

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

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

Код атомизировал целые категории существования, которые прежде казались цельными. Умелые практики обратили эту взрывную способность почти целиком себе на пользу. Книжные магазины существуют теперь в противопоставлении Amazon. Со своей стороны, Amazon не столько книготорговец, сколько набор задач оптимизации вокруг цифрового и физического распределения. Microsoft Office определил, что значит работать, породив великий бизнес-потоп из PowerPoint. Uber стремится перекроить транспорт по собственному образу и подобию, и существуют ещё тысячи стартапов горящими глазами и неутолимой волей дизраптить, дизраптить, дизраптить, дизраптить.

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

Оригинал