📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Understanding is the new bottleneck — Geoffrey Litt, Notion

AI Engineer19:33

Transcription

[музыка] Привет! Да, спасибо, что пришли на секцию дизайн-инжиниринга на AI. Всем весело? >> Да, я думаю, это будет отличная секция, так что будьте готовы. Хорошо, давайте начнем. Меня зовут Джеффри Лит. Я дизайнер-инженер в Notion и сегодня я хочу поделиться с вами кое-чем интересным. Я думаю, что людям по-прежнему важно понимать, как работает код. [аплодисменты и одобрительные возгласы] Теперь, некоторые из вас могут согласиться, а некоторые — нет. Давайте попробуем провести опрос. Мне интересно, что думает эта аудитория. Поднимите руку, если вы согласны с этим мнением. Хорошо, возможно, некоторая предвзятость выбора. Есть смельчаки? Хорошо, поднимите руку, если вы не согласны с этим мнением. Вау. Хорошо. У нас [смех] возможно, мы устроим дебаты позже. Да. Я надеялся, что мы будем на конференции инженеров ИИ, так что у нас будет больше сторонников. Хорошо. Возможно, я говорю здесь с теми, кто уже убежден. Знаете, я думаю, реальность такова, что мы вступаем в эру, когда это законный вопрос, который люди обсуждают, верно? Агенты пишут для нас тонны кода. Они отправляют PR на 50 000 строк, и становится все труднее успевать. Мы все это чувствуем сейчас. Я думаю, хорошая новость в том, что есть много способов понять... дни, когда просто читали код построчно, это уже не единственный способ, и суть этого выступления в том, что я хочу поделиться с вами множеством практик, которые я использую, чтобы понимать код, который мои агенты пишут для меня. Это включает в себя такие вещи, как объяснительные документы, которые учат меня, как работает мой код, мои агенты пишут для меня тесты, чтобы проверить мое понимание. Нахожусь ли я все еще в курсе? Успеваю ли я? Я заставляю агентов создавать микромиры, в которых я могу обитать, чтобы получить интуитивное представление о том, как работает мой код, которое глубже и богаче, чем просто письменный документ. И я думаю, что все это действительно захватывающие новые возможности, которые открываются для ИИ, чтобы помочь нам лучше понять, а не хуже. И именно об этом будет это выступление. И я надеюсь, что смогу поделиться с вами некоторыми техниками, которые вы сможете взять домой и использовать сами. Кстати, мой таймер не работает. Если вы можете его запустить, это было бы здорово. Так я буду знать, не болтаю ли я. Хорошо, но давайте начнем. Давайте вернемся на секунду. Прежде чем говорить о том, как, давайте поговорим о том, почему. Зачем вообще понимать? Это снова вопрос, верно? И я думаю, многие люди ошибаются в этом тонком моменте. Итак, многие люди думают, почему люди все еще должны понимать? Они думают, что мы понимаем, чтобы проверять. Агенты делают глупые вещи. Мы все это видели. И ваша задача как человека — держать их в узде, верно? Убедитесь, что они не облажаются. Когда люди говорят, что ревью кода — это новая узкое место, я думаю, первое, что приходит на ум людям, — это проверка корректности. Существует такая ментальная модель: агент дает вам что-то, и какова ваша задача? Спросить, правильно ли это? Теперь корректность может иметь множество определений. Соответствует ли это спецификации, которую вы ему дали? Приводит ли это к сбою продакшена? Хорошо ли это спроектировано? Но по сути, все это решения типа «большой палец вверх» или «большой палец вниз», верно? И дело в том, что со временем, мы все это видели, агенты тоже могут задавать эти вопросы, и они становятся лучше в этом. Вы даете им правильный цикл проверки, и со временем это реальность. Роль людей в проверке корректности уменьшается. И знаете что? Мне это даже нравится. Если у меня есть четкое представление о том, что я хочу сделать, и агент делает это правильно, вместо того, чтобы возвращать мне неправильную вещь, это здорово. Я за это. Затем, я думаю, люди расширяют это и говорят: «Знаете что, это означает, что по мере того, как агенты становятся все умнее и умнее, нам вообще не нужно понимать, верно? Выходи из цикла, чувак. Управляй циклом. И вот здесь, я думаю, люди упускают что-то очень важное. Есть более глубокая причина понимать, что происходит, и это понимание для участия. Потому что вот в чем дело, это не просто один цикл. Когда вы просматриваете происходящее и включаетесь в цикл, вы меняетесь. Вы что-то понимаете. И это понимание — то, что вы берете в следующий цикл и следующий, и следующий. Ваше понимание происходящего — это основа для того, чтобы у вас появилась следующая идея и вы стали активным творческим участником проекта. Я думаю, вы все, вероятно, чувствовали это еще до появления ИИ, знаете, разницу между тем, какие идеи может иметь человек, который действительно понимает, что происходит, и тот, кто находится на несколько уровней дальше. Потому что, когда у вас есть богатые концептуальные структуры в голове, которые вы можете быстро и плавно комбинировать, не обращаясь к агенту или человеку, чтобы узнать, как это работает, это дает вам возможность плавно совершать творческие скачки. И это человеческая часть работы — придумывать следующую идею и следующую идею. Так что это на самом деле настоящая причина, по которой, я думаю, понимание имеет значение, и это то, что мы не можем просто смыть лучшими агентами, потому что если мы хотим быть активными участниками, вам все равно придется это делать. Есть отличный термин, возможно, некоторые из вас слышали, — «когнитивный долг», который, я думаю, действительно хорошо отражает этот дух. Это аналогия с техническим долгом, популяризированная ученым Маргарет Стори. Саймон Уиллис также писал об этом. И мне нравится эта идея, потому что, подобно техническому долгу, вы можете избежать этого некоторое время, но в какой-то момент вы пострадаете, если ваше понимание ухудшится. И, возможно, вы это чувствовали. Я знаю, я это чувствовал. Вы занимаетесь кодингом, все идет хорошо, а потом в какой-то момент вы понимаете: «Подождите, я понятия не имею, что происходит. Я, по сути, больше не могу участвовать, верно?» Вы накопили слишком много когнитивного долга. Хорошо, так, возможно, кажется, что все вы уже убеждены. Мы согласны. Нам нужно понимать. Но как? Верно, мы не хотим жить в 2023 году. Мы используем агентов, чтобы двигаться быстро, и становится все труднее успевать. Как нам это сделать? Я думаю, чтобы ответить на этот вопрос, нам следует сделать шаг назад и задать более фундаментальный вопрос: как мы вообще понимаем вещи? Поворот сюжета: это не первый раз, когда кто-либо из людей задавал этот вопрос. Есть область. Она называется образованием. Теперь, когда вы думаете об образовании, вы можете вспомнить плохие воспоминания о сидении на лекциях или что-то в этом роде, но я думаю, мы можем сделать лучше. Мы можем черпать вдохновение из лучших идей, когда-либо изобретенных в образовании, и использовать их, чтобы оставаться в курсе и понимать. Итак, об этом будет это выступление. Мы поговорим о трех техниках. Во-первых, объяснения. Итак, когда агент пишет код, он должен объяснить вам свою работу, верно? И самое наивное объяснение: «Вот разница в коде». Это сырое изменение, материал того, что произошло. Но мы можем сделать, я думаю, гораздо, гораздо лучше. Каким было бы наилучшее возможное объяснение? Как если бы вы отправили команду на год, чтобы они разработали персонализированную учебную программу, чтобы объяснить вам это одно изменение кода, как бы это выглядело? Я думаю, это очень продуктивный вопрос для постановки. Итак, я сделал несколько попыток. Одна из них — это навык, который я написал, под названием «explain diff», который я использую каждый день, как и многие мои коллеги. И я хочу провести вас через него. Итак, мы пройдем небольшой пример. Я работаю над видеоигрой, где вы рисуете дзен-сады, чтобы расслабиться, знаете, всем нам это нужно в наши дни. И мы внесли изменение в код, чтобы изменить перспективу игры с вида сверху вниз на изометрическую. И когда я запускаю свой навык, он генерирует документ-объяснение кода. Это может быть HTML-файл, это может быть markdown. Мне нравится размещать их в Notion, потому что я там работаю, а также потому, что это делает их совместными, так что моя команда может комментировать их и обсуждать их. И вот как это выглядит. Мы начинаем с фона. Мы не начинаем с того, что произошло в этом изменении. Он начинается с обучения меня: «Вот как работает эта система». Очевидно, вы можете пропустить это, если уже знаете. Вы можете персонализировать его под то, что вы уже знаете. Второй важный принцип — интуиция перед деталями. Итак, прежде чем мы начнем, знаете, смотреть на код и все такое, говорится: «Цель этого коммита — сделать сад трехмерным, используя только 2D-трюки рисования». Вы можете думать об этом как о хорошо написанном сообщении коммита, немного глубже. Дайте мне примеры. Дайте мне почувствовать суть, прежде чем вы бросите в меня кучу кода. Верно? Это, кстати, хорошее обучение. Это то, что делают хорошие учителя математики. Третье, интерактивные фигуры. Итак, где это уместно, дайте мне вещи, с которыми можно поиграть и попробовать. Так, с этим изменением, мы меняли то, как мы рисуем камни. Так что я могу перетаскивать камни в этой маленькой симуляции, и она показывает мне координаты, которые происходят, как меняются Z-слои картины. Это, кстати, использует новую функцию, которую Notion запустил буквально сегодня утром — блоки HTML на страницах Notion. Пользователи могут вставлять интерактивные симуляции на ваши страницы Notion. Довольно круто. Я думаю, с интерактивностью нужно быть осторожным. Это может быть просто костыль, и, честно говоря, это может быть просто беспорядок, но при умелом использовании. Это может дать понимание, которого трудно достичь с помощью одних только статичных картинок. Хорошо, тогда мы наконец доходим до кода, верно? Покажите мне код. Но мы не просто бросаем список файлов в порядке. Мы делаем то, что я называю «грамотными различиями кода». Дайте мне прозу. Объясните мне в правильном порядке. Расскажите мне перед каждым файлом, что происходит. И когда вы все это накапливаете, гораздо легче следить, чем просто за сырым различием. Ой. На самом деле, я распечатываю это и иногда беру с собой в кафе и просто читаю. Я нахожу это очень ироничным, что ИИ фактически берет на себя этот процесс, где я раньше был приклеен к своему компьютеру, своей IDE, а теперь я могу пойти в кафе, и это похоже на чтение учебника об этом PR. Это действительно круто. Хорошо, есть одна проблема: чтение — это трудно, а я ленив. Люди ленивы. Знаете, был один раз, когда я отправил PR своему коллеге, который, как я думал, я прочитал. Я думал, что понял, и она задала мне самый простой вопрос, и я сказал: «О нет, я не знаю. Я явно не понял, верно? Я обманул себя». Поэтому я подумал: «Как я могу создать систему, в которой это никогда не повторится?» Для вдохновения я обратился к работе исследователя Энди Матушака, у которого есть такая замечательная фраза: «Книги не работают». Что он имеет в виду, так это то, что очень легко прочитать книгу и не осознать, что вы ее не поняли. Итак, он и его соавтор Майкл Нильсен попробовали такую ​​вещь: в эссе есть интерактивные викторины с интервальным повторением, которые проверяют, действительно ли вы помните то, что только что прочитали. И это здорово, что они действительно отправляют вам викторину по электронной почте, чтобы убедиться, что вы помните ее навсегда. Но это хорошо, потому что вы не можете пройти это эссе, не поняв его или, по крайней мере, не запомнив его. Вот что я делаю со своими объяснителями кода. В самом низу есть викторина, пять вопросов, средней сложности. И мое правило: я не отправляю код другим членам команды на ревью, пока не смогу пройти викторину о том, что написал мой агент. И это может показаться немного глупым, но вы должны попробовать. Это действительно шокирует, сколько раз это меня ловило и заставляло меня осознавать, что я не понял. Я думаю об этом как о своего рода регуляторе скорости. Все, что делает ИИ, — это ускорение, ускорение, ускорение. Есть все эти стимулы двигаться быстрее. Как мы можем убедиться, что мы движемся не только со скоростью корректности, но и с пониманием? И викторина — это тот регулятор скорости. Это система, которую я могу использовать для этого. Я только что выложил навык в интернет. Так что да, момент для фото. Если вам нужен навык «explain diff», возьмите этот QR-код, попробуйте, сделайте его своим. Это на самом деле очень просто. Есть две версии этого QR-кода. Одна выводит HTML, другая — Notion. Хорошо, вторая техника — микромиры. Что это значит? Это черпает вдохновение из работ педагога Сеймура Паперта, настоящего визионера, у которого была идея жить в «математической стране». И это означало: дети учат французский, живя во Франции. Где они учат математику? Есть ли «математическая страна», где можно интуитивно изучать математику, просто находясь там? Поэтому он делал такие замечательные вещи с роботом под названием «черепашка», которого дети программировали для рисования. Но суть не в создании роботов. Суть в том, что они действительно учат математику, занимаясь этим программированием. Суть не в роботе, а в детях, которые меняются. Так как же мы можем применить это к пониманию кода? Вот один пример. В прошлом году я пытался реализовать для собственного обучения интерпретатор языка программирования Prolog, который, можно сказать, немного похож на язык запросов к базе данных, и в нем есть все эти части, которые выглядят так: когда вы читаете их в Википедии, они кажутся очень сложными, а затем, когда вы действительно понимаете, что происходит, вы думаете: «Подождите секунду, это было не так уж сложно понять, просто казалось сложным, когда я читал это так, верно?» Как мы можем сделать так, чтобы это лучше «щелкнуло» в моем мозгу? Поэтому я попросил Claude создать для меня микромир. Это отладчик, эфемерный пользовательский интерфейс, который был создан специально для визуализации внутренней реализации моего языка программирования. Что здесь происходит, так это то, что я прокручиваю временную шкалу, которая работает шаг за шагом. Что делает мой интерпретатор? Он визуализирует все состояние на каждом шаге. Так что я могу как бы открыть капот и увидеть, что происходит, и начать чувствовать это, знаете. И да, я использую это для исправления ошибок. Я даже добавил небольшую, здесь трудно разглядеть, но есть функция комментирования, где я могу оставлять комментарии для себя на временной шкале, чтобы помнить, о чем я думал. И я использовал это для исправления мелких ошибок, но также, исправляя ошибки, я получал представление о машине. Это то, чего вы не получите, если просто дадите агенту исправить ошибку, вы не получите этого периферийного зрения. Если вы живете в микромире, вы его получите. Еще один пример: я переносил свой личный веб-сайт с одного фреймворка на другой. И первое, что я сделал, я попросил Claude написать мне скрипт. Он сделал это. Казалось, это сработало. И я прочитал скрипт и подумал: «Я не знаю». Как будто я просто не чувствую, что он делает. Много файлов переместилось, много куда, кажется, верно? Итак, я сказал: «Эй, Claude, создай мне, по сути, видеоигру, где я сам делаю перенос». И вот как это работает: старый веб-сайт слева, новый веб-сайт. Я просто нажимаю кнопку, далее, далее, далее. И на каждом шаге он говорит: «Вот команды, которые я запускаю. Ваш новый веб-сайт оживает шаг за шагом. Вы видите это? Там даже есть древовидные структуры файлов, где вы можете видеть, как файлы перемещаются». И результат в том, что это похоже на то, если бы я делал это вручную, но я просто нажимаю кнопку. Так что я получаю некоторую пользу от этого, без боли. И я думаю, что главное здесь — агенты могут писать код, чтобы помочь нам понять код, где цель не в создании программного обеспечения для выпуска. Цель — создание этих маленьких микромиров для нас. Это «математическая страна», верно? Это симуляция просто этой вещи. Хорошо, быстро последний пункт — общие пространства. До сих пор все это было обо мне, работающем в одиночку, но часто, я думаю, проблема на самом деле в том, что вы работаете в команде, и всей вашей команде нужно понимать вместе, чтобы вы могли действительно сотрудничать и генерировать творческие идеи вместе. Мы много думаем об этом в Notion. Мы верим, что общее понимание, которое существует между вами и кем-то другим, позволяет вам эффективно общаться. Будь то названия частей системы, названия элементов пользовательского интерфейса или концепции, верно? Поэтому мы много думаем в Notion о том, как создавать инструменты, которые обеспечивают коллективное понимание. Некоторые вещи, которые мы исследуем. Могут ли быть многопользовательские чаты между несколькими людьми и агентами вместе? Итак, здесь я могу спросить менеджера по продукту в моей команде: «Что пользователи просят для этой функции?» И она может сказать: «Я не знаю, давайте спросим другого агента». И этот агент приходит и разговаривает с нами. Что здесь происходит, так это то, что вместо того, чтобы я и мой менеджер по продукту разговаривали со своими агентами, мы находимся в общем пространстве. Мы можем видеть общение друг друга. Это похоже на переход от индивидуальных разговоров к каналам Slack. Вы видите больше поведения, происходящего вместе, и вы понимаете вместе. Также наличие документов, которые вы можете обсуждать вместе, является очень мощным постоянным элементом. Знаете, Claude составил для нас план. Что, если у меня есть вопрос об этом, который я хочу обсудить с моей командой? Я могу просто оставить комментарий, потому что это в общем пространстве, а не локально на моем компьютере. И тогда я могу спросить: «Что вы думаете об этом?» И мой товарищ по команде может вмешаться, и мы можем обсудить это прямо там. Верно? Я думаю, что наличие этих пространств для совместного обсуждения идей с нашими агентами очень важно для построения этого коллективного понимания. Это, кстати, мы запустили на прошлой неделе возможность приносить агентов для кодирования в Notion. Так что Claude и Cursor теперь могут жить в Notion, и наша команда фактически создает большую часть нашего кода в самом Notion. В основном из-за этих преимуществ, потому что наличие общего пространства просто очень ценно. Итак, мы говорили об этих трех техниках, и я хочу вернуться к началу. Знаете, в начале я сказал, что людям по-прежнему важно понимать, как работает код, верно? Но на самом деле я думаю, что это гораздо больше. Я думаю, что людям по-прежнему важно понимать, как все работает. И, возможно, вы все согласны, судя по всему, но я думаю, что это ставится под сомнение сейчас, и это то, за что мы на самом деле должны активно бороться. Дело в том, что это не новая битва. Она на самом деле восходит к самым истокам нашей области. Алан Кей — один из пионеров персональных компьютеров, соизобретатель современного графического интерфейса. И буквально 50 лет назад он написал эссе, которое я считаю очень провидческим, под названием «Персональный компьютер для детей всех возрастов». Это выглядит как двое детей на iPad, смотрящих YouTube или что-то в этом роде. Это как бы безумие. Это было 50 лет назад, его видение. Но это не YouTube на iPad. Что он представлял, так это то, что эти дети играют в видеоигру и модифицируют код во время игры, чтобы изучать физику. Так что суть не в компьютере, а в детях. Цель компьютеров — повысить наш уровень как людей, верно? И Алан много говорил о том, как кажется, что в какой-то момент компьютеры немного отклонились от этого видения. Но я думаю, что самое захватывающее — это то, что, возможно, сейчас время вернуть это. Вот своего рода мем-версия этого. Я думаю, что с ИИ многие люди просыпаются и говорят: «Боже мой, код бесплатен. Мы можем создавать эфемерные пользовательские интерфейсы, динамические симуляции для понимания концепций. Мы можем создавать отладчики, песочницы, и это здорово. И на самом деле это не новая идея. Как будто это была цель с самого начала. И поэтому, я думаю, оптимистично то, что я нахожу очень захватывающим: это по-прежнему очень важно понимать, как все работает. И с правильными инструментами, правильным мышлением и правильной креативностью мы можем понимать лучше, чем когда-либо прежде, а не хуже. С помощью ИИ мы можем расширить свои возможности, не просто выводя себя из циклов, а фактически погружая себя в циклы глубже, чем когда-либо прежде. И я думаю, что это очень захватывающая перспектива, и я надеюсь, что мы все вместе, как индустрия, разберемся с этим. Это все, что я хотел вам сегодня сказать. Большое спасибо. [аплодисменты] >> [музыка]