Люк Такер, владелец продукта

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

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

Для ветерана программного обеспечения это может показаться банальным, но для меня это был мощный новый способ видения. Цитата Марка Андресена «Программное обеспечение пожирает мир» приобрела новый смысл. Загорелась лампочка. «Программное обеспечение пожирает мир», — подумал я. Разве это не было очевидно? Программное обеспечение десятилетиями улучшало нашу жизнь, инкапсулируя сложность мира. Отчасти благодаря абстракции.

Итак, что же изменилось? Почему я теперь понял? Я присоединился к компании-разработчику программного обеспечения, которая занимается абстракцией. Ценность нашей системы зависит от комбинаторной природы ее компонентов. Сотня компонентов, которые не взаимодействуют друг с другом, ничего не создают, а двадцать компонентов создают невероятное количество приложений. Что позволяет им общаться? Правильные абстракции.

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

Недавно у меня хорошо работала диаграмма рассеяния D3, пока я не дал ей дату для значения по оси X. Это должно было сработать. Почему нет? Он был жестко закодирован для поддержки чисел. Изменения для устранения нарушения абстракции были простыми, но это иллюстрирует мою точку зрения. Имея правильные абстракции, мы начинаем ожидать, что все будет работать. Когда их нет, мы замечаем. Когда мы замечаем, мы исправляем их. Когда мы исправляем их, наш мир работает лучше. Повторить цикл.

Погрузившись в примеры абстракции, я не мог не понять.

Правильные абстракции — это то, как набор компонентов из Xap Store…

привыкнуть к этому потоку данных разработчиком. . .

и стать этим приложением данных для ученого данных. . .

и это приложение данных для исследователя. . .

Вы можете заметить, что эти два Xap (веб-приложения для работы с данными, созданные с помощью Exaptive Studio) не совпадают. Один моделирует Послание о положении в стране, другой — документы для слушаний в Конгрессе. Они устроены иначе. Они оформлены по-разному. Но они используют один и тот же алгоритм тематического моделирования и компоненты визуализации и пользовательского интерфейса, модули кода из разных языков и фреймворков, написанные без знания друг друга, которые, тем не менее, являются комбинаторными.

Генеральный директор Exaptive Дэйв Кинг недавно говорил о разнице между модульным и комбинаторным кодом. Различие зависит от правильных абстракций. Я не буду красть гром Дейва, но, если подытожить, модульность — это способность соединиться с чем-то еще, даже с чем-то еще. Комбинаторный — это модульность плюс. Это слабая связь входов и выходов, которая обеспечивает неожиданные комбинации и соединения, возможность повторного использования и перепрофилирования. (Посмотрите выступление Дэйва здесь. Его стоит посмотреть!)

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