📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Master Cursor in 50 Minutes with Cursor's Head of AI Education (2025) | Lee Robinson

Peter Yang50:22

Transcription

Способ, которым мы создаем программное обеспечение, изменится. ИИ напишет лучший коммит, чем я когда-либо мог. Агент может проверять свои результаты. Он может запустить тест. Если тест не пройдет, он может просто прочитать результат неудачного теста и продолжить, пока тест не пройдет. >> У вас есть какие-нибудь советы для менеджеров по продуктам или людей, которые хотят изучить это? >> ИИ не может волшебным образом думать за вас и принимать все решения. Вам нужно привнести некоторый контекст о типе продукта, который вы хотите создать. Некоторые люди, которые начали использовать некоторые из этих новых инструментов, создают первую версию, выпускают ее, а затем им приходится возвращаться и покупать учебник и изучать основы, прежде чем они смогут продвинуться дальше. Как создать приложение с помощью ИИ от 0 до 1. Итак, здесь есть пара моментов. Хорошо, добро пожаловать всем. Мой сегодняшний гость — Ли Робинсон, который сейчас работает в Cursor. Ранее Ли возглавлял отдел разработчиков в Verscell, где помогал создавать Vzero, и, честно говоря, он своего рода легенда в области отношений с разработчиками. Так что я очень рад, что он расскажет о том, как создать приложение с помощью ИИ от 0 до 1, а также о том, как существующие инженеры могут лучше использовать эти инструменты ИИ. Итак, добро пожаловать, Ли. >> Спасибо. Да, я очень рад это обсудить. >> Да. Хорошо. Итак, прежде чем перейти к части создания, давайте поговорим о том, можете ли вы поделиться, почему вы решили уйти из Verscell и присоединиться к Cursor? >> Да. Примерно полтора года назад я действительно начал больше кодить с помощью ИИ, и в то время это в основном была автозавершение. Я использовал GitHub Copilot и думал, что это неплохо. Но это начало становиться намного лучше, не только в Cursor, но и в других инструментах для следующего поколения или следующего завершения действия в автозавершении, и это, безусловно, было полезно, но я все еще не был полностью убежден. Затем, около шести месяцев назад, я начал относиться к этому серьезно, пробовать множество редакторов и действительно погрузиться в сферу ИИ для кодирования, потому что я много слышал об этом, но все еще был настроен скептически. И когда я начал узнавать больше об ИИ-агентах и ​​позволять агентам писать код, я был очень удивлен, что качество моделей улучшилось, а инструменты стали намного лучше, до такой степени, что я был очень удивлен количеством кода, который мог быть написан ИИ, но мне все еще приходилось его проверять и убеждаться, что он правильный. Но даже этого было достаточно, чтобы я понял, что мне, вероятно, стоит отнестись к этому немного серьезнее. А затем я начал использовать фоновые агенты, запускаемые из Slack, когда это была опечатка в документе или ошибка в пользовательском интерфейсе, или очень-очень мелкие вещи, которые я мог бы переключить контекст, чтобы сделать, но я мог просто спросить через сообщение в Slack, чтобы что-то запустить. И это действительно заставило меня остановиться и подумать: хорошо, способ, которым мы создаем программное обеспечение, изменится. И я хочу помочь научить людей, особенно существующих разработчиков, как пройти этот путь так же, как я проходил этот путь. И это привело меня к вашему Cursor. >> Да. Похоже, что у каждого разработчика теперь есть команда, я не знаю, младших инженеров, или это своего рода инженерный менеджер, который может направлять ИИ, верно? >> Да, именно так. >> Хорошо. Итак, давайте перейдем к практической части. Итак, может быть, сначала поговорим о создании приложения с нуля, верно? Мм. >> И знаете, я думаю, что в наши дни все роли как бы смешиваются. Я PM, но я думаю, что теперь инженеры могут быть сами себе PM. Я думаю, что многие люди не осознают, насколько важен начальный этап настройки для создания хорошего приложения. Так может быть, вы можете показать, как вы используете Cursor для настройки этого? >> Да. Итак, здесь есть пара моментов. Во-первых, я чувствую, что для новичков в разработке программного обеспечения они получают много противоречивых советов о правильном способе начать и создавать приложения, потому что ИИ может сделать это простым, но на самом деле существует большой объем и требуется много технических знаний для создания качественного программного обеспечения. И иногда, если вы попросите модель ИИ составить план, если вы еще не потратили немного времени на изучение основ, она выдаст что-то, и вы кивнете и скажете: "Да, хорошо. База данных Postgress, я думаю, я знаю, что это такое". А затем она опишет схему, и вы скажете: "Да, хорошо". Это как бы имеет смысл. Поэтому я всегда хочу подчеркнуть, что очень важно, даже когда мы обсуждаем эту фазу от нуля до одного, понимать и задавать вопросы по плану, что это такое? Почему нам нужна эта часть? >> Для людей, которые только начинают свой путь в программировании или, возможно, в первые пару лет своего пути в программировании, потому что вы создаете что-то от нуля до одного в одиночку, что означает, что вы выполняете роль нескольких человек. Были фронтенд, бэкенд, DevOps, PM, дизайнер. Есть много ролей для создания качественного программного обеспечения, и вы хотите убедиться, что вы можете хорошо справиться хотя бы с частью из них. Итак, я открою Cursor, и у меня есть промпт, над которым я работал для приложения, которое мы можем создать. Я хочу обсудить, как я его структурировал, а затем посмотрим, что произойдет. >> Это звучит отлично. Да. >> Круто. Хорошо. Итак, у меня открыт Cursor, и я только что вставил промпт в README, чтобы мы могли взглянуть на него, прежде чем мы попросим агента выполнить какую-либо работу. Теперь я хочу пройтись по каждому из этих пунктов по отдельности. И вы заметите, что у меня есть некоторые знания и представление о том, как я хочу, чтобы система работала. Итак, я хочу создать приложение, где мы можем отслеживать прослушивание музыки и сообщать статистику по лучшим исполнителям и песням. Раньше я использовал Last FM, и вы могли отслеживать своих лучших исполнителей и видеть свои самые прослушиваемые песни всех времен. Так что я хотел бы воссоздать что-то подобное для развлечения. И я хочу работать с ИИ как с коллегой, чтобы помочь мне составить план. И вы знаете, вы PM. Наши продуктовые специалисты, которые смотрят, знают все о PRD и структурировании ваших продуктовых требований во что-то связное. Я скажу, что в мире ИИ, где вы являетесь движущей силой управления ИИ-агентами, есть части процесса PRD, которые, возможно, не так актуальны для этого мира. И есть новые части, которые вам нужно привнести, например, иметь немного больше технической основы, чтобы точно понимать, какие требования вы хотите запросить. Например, в требованиях я уже знаю, что этому приложению потребуется некоторая аутентификация, и у меня есть общее представление о типах аутентификации. Так что я знаю об OAUTH. Так что я скажу, давайте просто сделаем Google OAUTH или войдем через Google. Они подключатся к своему аккаунту Spotify. Мы будем использовать API Spotify. Так что мне нужно знать, что такое API. А затем мы возьмем это и сохраним эту информацию в базе данных. Так что это своего рода понимание того, что я раньше создавал приложения: я говорю с API, получаю данные обратно, мне нужно сохранить эти данные и что-то с ними делать в будущем. Так что нам нужна база данных. Критически важно, я также хочу использовать тесты. Так что для моей бизнес-логики или того, как работает приложение, сквозные тесты, которые могут охватывать все приложение и тестировать пользовательские потоки. Причина, по которой это важно, заключается в том, что это позволяет агенту иметь цикл самопроверки. Агент может проверять свои результаты. Он может запустить тест. Если тест не пройдет, он может просто прочитать результат неудачного теста и продолжить, пока тест не пройдет. Так что тесты могли быть устаревшими, но они снова актуальны. А затем еще несколько технологических выборов. Я хочу использовать Git, чтобы мы могли делать снимки с течением времени. И у меня есть мнение о моем менеджере пакетов, и я хочу делать описательные коммиты по мере продвижения. Затем, знаете ли, полезно иметь некоторые идеи о том, что вы хотите использовать заранее и как вы хотите, чтобы приложение ощущалось. У меня инженерный бэкграунд, поэтому у меня уже есть представление о некотором технологическом стеке, который я хочу выбрать, но если бы у меня его не было, я мог бы спросить ИИ и вернуться назад, чтобы понять некоторые из этих вещей. Но это одно из тех мест, где по мере получения большего опыта это очень поможет вам понять, какие инструменты работают для вас, а какие инструменты также хороши для понимания моделями ИИ. Так что у меня есть некоторое представление о том, как я хочу, чтобы дизайн выглядел. Минимальный, функциональный, намеренное использование цвета. Наши дизайнеры, которые смотрят, вероятно, смогут дать моделям гораздо лучшие токены, гораздо лучшие промпты. Что касается фронтенда, я знаю некоторые из технологических стеков, которые я уже хочу использовать. Я хочу использовать React. Я хочу использовать Tailwind для стилизации. Shadcn UI, а затем ESLint, так же, как тесты позволяют вам давать обратную связь агенту. Линтеры также могут давать обратную связь агенту о чем-то, что может не работать хорошо в мире React. Если ИИ генерирует неправильный код, линтер может сказать: "Эй, кстати, это может не работать на бэкенде". Вот что я хочу использовать для нашей базы данных. Вот некоторые из инструментов, которые я хочу использовать для инфраструктуры. И затем я хочу иметь этот план. Но этот план может быть живым документом. Так что мы можем вставить туда задачи. Это своего рода чрезвычайно легкая система управления задачами. Теперь вы также можете интегрироваться с внешними системами через что-то вроде протокола контекста модели MCP. Идите, поговорите с Linear. Идите, поговорите с Notion. Это более продвинутый режим, если вы хотите. Но вы можете зайти довольно далеко на самом деле с помощью простого файла Markdown и нескольких задач, особенно если вы работаете в режиме одиночного игрока. И эта последняя строка, я думаю, очень важна. Если у модели есть вопросы, держите человека в цикле. Спросите моего мнения. Спросите, когда я не дал достаточно ясности. Я уверен, что я что-то упустил. Так что давайте возьмем это. Я просто >> вырежу это. Я открою боковую панель для агента внутри Cursor. Сделаем это немного большим. И я вставлю это сюда и нажму Enter. >> Сделай мой план. Да. И просто, чтобы как бы, приходя от кого-то, кто менее технический, чем вы, может быть, немного больше. Да. Как вы также можете попросить ИИ, очевидно, прийти с требованиями и технологическим стеком, а затем вы можете просмотреть его, и если вы чего-то не понимаете, вы можете просто выделить текст и сказать: "Эй, это имеет смысл или что это вообще значит?" Правильно? Есть способ сделать это тоже. >> Точно. Да. >> Точно. Итак, мы можем видеть сейчас, он как бы начал работать. И одна из вещей, которую может сделать агент Cursor, — это внутренне управлять списком задач, пока он проходит по вашей задаче. Так что у вас есть локальный список задач, которым управляет агент. А затем у вас есть глобальный список задач, который может быть вашим файлом Markdown или внешней системой управления задачами. И мы также можем видеть измененные файлы. Итак, у нас есть наш план. Так что, пока это происходит, я могу открыть план, и мы можем взглянуть на него. И если бы я хотел, он говорит: "Эй, кстати, у нас есть ваш план. У нас есть еще много задач, которые мы хотим выполнить, но прежде чем мы пойдем дальше, давайте проверим и убедимся, что этот план выглядит правильно". Так что этот одиночный чат в нашей истории завершен. И стоит просто вернуться к некоторым основам, а именно: у меня есть этот чат с агентом. Я разговариваю с моделью ИИ. Эту модель ИИ я выбрал здесь, которую вы можете просто использовать автоматический режим или выбрать конкретную модель, когда вы начнете чувствовать, что работает лучше всего для вас. И по мере того, как я добавляю больше контента в этот разговор с ИИ, все сообщения как бы добавляются в историю. Так что он накапливает больше контекста, когда он вызывается, когда вы продолжаете общаться с ИИ. И я вижу здесь с этим процентным индикатором, я использовал около 2% моего доступного контекста или рабочей памяти ИИ. Итак, у нас есть план. Хорошо, мы собираемся создать это веб-приложение. У него есть наш технологический стек. Это выглядит хорошо. Инфраструктура, менеджер пакетов. Хорошо, давайте посмотрим, как он решил разбить мои требования на части. Итак, первое — настройка проекта. Это кажется нормальным. Настройка базы данных, получение таблиц в правильном порядке, и, знаете, имеет смысл, что мы должны сначала настроить проект, прежде чем переходить к настройке базы данных. Хорошо, все это имеет смысл. О, у нас даже есть результаты, которые мы можем проверить, чтобы убедиться, что этот шаг работает правильно. Настройка аутентификации, чтобы мы могли войти через Google, интеграция со Spotify через их API, а затем начало добавления некоторых функций. Теперь некоторые из этих функций, возможно, нам придется разбить их еще дальше. Они довольно широки. Тестирование, мы можем добавить тесты немного раньше, чтобы по мере добавления функций, например, мы могли использовать тесты для проверки того, что все работает правильно. Развертывание, в некоторой степени похоже. Мы можем подождать до конца, если хотим, но мы также можем развернуть раньше и часто пытаться получить URL вживую. И затем, как вы помните, я попросил обратную связь. Итак, вот несколько открытых вопросов, например, как часто синхронизируются данные? Какая статистика нас действительно волнует? Весь этот контекст я не предоставил модели ИИ, поэтому хорошо, что она задает вопросы, потому что это помогает вам разобраться, что я на самом деле хочу, чтобы это приложение делало? Что я на самом деле хочу построить? Нет никакого способа, которым ИИ может волшебным образом думать за вас и принимать все решения. Вам нужно привнести некоторый контекст о типе продукта, который вы хотите создать. Давайте посмотрим. И затем вы, по сути, дадите ему обратную связь для обновления плана, верно? Например, чтобы добавить тестирование и так далее. >> Да. И критерии успеха. Я думаю, это имеет смысл. Я, возможно, захочу переместить критерии успеха в отдельную итерацию. Давайте внесем эти изменения. Давайте переместим критерии успеха в каждую итерацию. Давайте настроим тесты раньше, чтобы мы могли проверять каждый шаг, и, возможно, мы сможем ответить на некоторые из этих вопросов. Данные должны синхронизироваться, давайте сделаем это ежедневно. И забавно, что вы можете допускать опечатки. Это нормально. Модель ИИ понимает, если у вас есть опечатки. Вам не нужно писать идеальным грамматическим языком или иметь идеальное написание, она разберется. >> Да, вы можете пройти план на основе некоторых из этих вещей, которые я предложил. Отлично. >> И мы получаем этот вид диффа, который есть в Cursor, где мы можем сказать: "Да, мы сохраним эти изменения. Это выглядит отлично". И он будет продолжать добавлять больше результатов и критериев успеха к каждой части плана. А затем, когда это закончится, мы сможем фактически запустить его и начать работу над первым шагом или первой итерацией. Итак, прямо сейчас у нас в приложении есть только план. У нас еще нет кода. Мы еще не начали работать над этим. Но именно здесь мы начнем переходить к интересной части, когда мы будем чувствовать себя вполне уверенно в этом плане. Нам нравится, как он разбит. Мы можем попросить агента теперь, чтобы он фактически запустил этот процесс. Теперь стоит остановиться на секунду и поговорить о фоновых и фоновых агентах. Итак, фоновый агент — это то, с чем я работаю сейчас, где я наблюдаю за выводом. Я как бы просматриваю, что он делает. И как вы увидите через минуту, я могу одобрить или отклонить конкретные вещи, которые делает агент. Также есть возможность запускать агентов в фоновом режиме. Так что, когда мы продвинемся немного дальше в этом проекте, например, вы можете увидеть на этапе 2, когда у нас будет работать приложение, и будет несколько списков задач, возможно, мы решим, что один из них мы можем просто запустить в фоновом режиме, и мы можем делать несколько вещей параллельно. Теперь это немного более продвинутая вещь для управления и привыкания, но когда вы к этому привыкнете, это может помочь вам разбить различные задачи. Теперь вы также можете использовать несколько фоновых агентов, но тогда у вас будет несколько ИИ-агентов, пытающихся обновить одну и ту же кодовую базу. Так что вам нужно быть намеренным в том, как вы это делаете. >> Итак, похоже, он закончил. Cursor предложил мне память. Это своего рода долгосрочная память о том, как мы можем управлять этим проектом, которая гласит, что критерии успеха должны быть перемещены в каждую итерацию плана, которую мы можем сохранить, если хотим продолжать обновлять план. На данный момент я просто отброшу ее. Память будет вставлена в контекст вашего разговора. Так что, если вы введете в память, например, я предпочитаю, чтобы ответы были очень краткими, он запомнит это для будущих разговоров. >> Как бы по всем проектам или только в одном и том же проекте? >> Так что это только для этого рабочего пространства, в котором я сейчас нахожусь. Может быть случай, когда вам понадобится что-то для всех ваших проектов. Да, это может быть интересно. Хорошо, так, похоже, он закончил. У нас все еще есть только план, но у нас есть несколько задач, составленных и готовых, и он хочет сделать следующую. Итак, давайте приступим к следующей задаче. Итак, у нас есть план. Кажется нормально. Теперь он начнет фактически проходить по этому списку и запускать вещи. И тогда мы сможем проверить по пути, работают ли вещи или нет. Теперь, что вы заметите, это агент, и я просто уменьшу масштаб на секунду, чтобы мы могли сделать это немного больше. Агент просто работает для меня. И одна из причин, по которой это произошло, заключается в том, что у меня уже был белый список, где я сказал, что агенту разрешено выполнять определенные команды. Так что на моей машине агент использует терминал и выполняет команду для доступа в Интернет, загрузки вещей и установки вещей. Теперь, если бы это была команда, которую я не хотел, мне, возможно, пришлось бы вручную разрешать ее каждый раз, но я уже сделал это в своих глобальных настройках. На самом деле, это нормально. Если вы запускаете npx, это совершенно нормально. >> Мм. >> Итак, он пройдет, он сделает это приложение отличным. Все это выглядит нормально. Он установил все зависимости для меня. Он как бы сделал это в подприложении, а затем переместил его обратно в основное приложение. Раньше он устанавливал его >> так. Это намного лучше, чем дни до ИИ, верно? Просто установка этих зависимостей занимает вечность, чувак. >> Да. И особенно когда что-то идет не так, агент может просто исправить это. Итак, есть и минусы, верно? Где вам приходится вмешиваться и направлять агента. Но иногда, когда вы добавляете зависимости и получаете эту странную ошибку, потому что вы знали, что должны были использовать какой-то аргумент CLI, о котором вы не знали, он может просто сделать это за вас, что очень приятно. Итак, он установил все эти зависимости. Он настраивает тестирование для меня заранее. Он настраивает >> Shadcn для меня. Теперь вы заметите, что мы дошли до места, где это потребовало ввода пользователя. Так что он ждет меня. Так что я скажу, что это выглядит хорошо. Мне нравится этот цвет. Конечно. И этот подтерминал завершился. И он вернулся к агенту и сказал: "Отлично, это выглядит хорошо". Продолжайте. Продолжайте. Итак, он просто устанавливает и настраивает кучу вещей для меня. Теперь, пока это происходит, я просто верну это сюда на секунду. Мы можем начать видеть, что у нас появляется проект. И если вы начинающий разработчик, это может выглядеть пугающе. Так что это также время, когда, пока это работает, я могу вернуться к своему агенту. Я могу сделать >> Command T. Я могу открыть новый чат или новую вкладку, и, возможно, я хочу эту вкладку, возможно, я не хочу эту вкладку. Это дополнительные файлы для включения в контекст, когда я задаю вопрос. Но я могу сказать, например, объясните файлы >> в корне этого проекта. Что это такое и почему они вообще нужны? Это просто вопрос, который мы задаем, чтобы получить больше знаний о том, как работает система. Он прочитает все это и вернется. Так что мы все еще готовим здесь. Агент все еще работает и настраивает вещи. И вы только что увидели что-то действительно интересное, а именно: он настроил и установил все тесты, а затем он знает, как запустить тесты. Так что он создал тест, что страница отобразилась без сбоев, и подтвердил, что тест прошел. Он запустил сервер и убедился, что сервер работает, и теперь есть тест, который не проходит, что хорошо. Это означает, что что-то работало неправильно, и агент исправляет вещи по пути. О, вы видите, что он сказал? Он сказал: "Я вижу проблему. В главной странице отсутствует основной элемент, поэтому его не удалось найти". Все это происходит для вас, что очень приятно, но также генерируется много кода. Так что мы действительно хотим убедиться, что мы остановимся и поймем, что происходит. Конечно, будет сводка всех этих изменений, потому что он просто выдает много всего, что может показаться немного подавляющим. Но давайте вернемся сюда и посмотрим, что он говорит. >> Хорошо, у нас есть package.json, который определяет зависимости. У нас есть файл блокировки. Хорошо, у нас есть файл конфигурации next.js, как мы настраиваем TypeScript и т. д. И это поможет вам, когда вы будете знакомиться и получать контекст некоторых из этих вещей, а также поможет вам принимать лучшие технические решения относительно типов инструментов, которые вы хотите использовать, или типов инструментов, которые вы не хотите использовать. Например, вы можете сказать: "Нет, я раньше использовал Playwright, и я на самом деле хочу использовать другую библиотеку для тестирования". Отлично. Это нормально. Но вы получите эти повторения, чтобы определить, что вы хотите использовать и что вы предпочитаете. >> Да. Я имею в виду, именно так вы становитесь более технически подкованными и изучаете это, верно? >> Да. >> Да. Так что он все еще работает. Похоже, это сработало. И теперь мои сквозные тесты действительно работают. Так что он открыл браузер. Он подтвердил, что браузер может отобразить страницу, а затем вернул результаты. А затем, поскольку я сказал ему в плане делать коммиты, ИИ напишет лучший коммит, чем я когда-либо мог, который гласит: "Вот коммит всего, что было настроено". Отлично. Это выглядит потрясающе. Он коммитит все эти изменения. А затем он также обновляет план. Итак, он выполнил все задачи этапа 1. Приложение работает локально. Линтинг проходит. Базовая структура тестов. Базовый набор тестов пройден. Итак, теперь у нас есть сводка в конце. Этап 1. Что мы сделали? Мы настроили приложение. Мы установили менеджер пакетов. Мы получили всю обвязку для настройки тестов. Мы заставили Git работать. Отлично. И у нас есть сервер, который работает. Линтинг проходит. Тесты проходят. Теперь мы готовы перейти к этапу 2, если захотим. Так что, если я доволен этим, я могу сохранить все изменения или я могу пройти через каждый файл. И проверить их вручную и немного больше понять, с чем я работаю. Итак, поскольку я знаком с этими инструментами, я могу пройти здесь, проверить и выборочно проверить, чтобы убедиться, что все выглядит нормально. Итак, давайте проверим этот, например. Вот наша домашняя страница. У нас есть этот компонент React. Это музыкальный трекер. Отлично. Войти через Google. Подключить Spotify. И вот наш тест. Итак, страница отображается без сбоев? Отображает ли она заголовок музыкального трекера? Показывает ли она вход и подключение? Это кажется >> кажется хорошим тестом. Это кажется правильным. >> Да, я думаю, есть как бы два отличия между тем, как вы это сделали, и тем, как я обычно пытаюсь это сделать. >> Я не включаю инструкцию, чтобы он писал тесты, что является тем, что сделал бы опытный инженер. Так что, похоже, сам факт того, что я написал тесты, означает, что он может фактически исправить кучу вещей и протестировать кучу вещей, верно? >> Да, на 100%. Позвольте мне попробовать найти хороший пример. Кстати, вы можете видеть, что агент Cursor способен запускать и запускать терминал. И терминал может использоваться для запуска приложения локально. Он также может использоваться для запуска тестов. Так что он может выполнять эти две вещи параллельно. Но я также хочу упомянуть, что у нас есть это своего рода длинное изменение. Мы использовали около 24% из 200 000 токенов контекстного окна прямо сейчас. >> Да. >> И полезно помнить, что эта рабочая память агента, все в этом чате, если бы я попросил его сделать, хорошо, теперь сделай следующее. Он возьмет весь этот контекст, который у меня был раньше, и перенесет его в следующий разговор. И нам нужно решить, хотим ли мы этого, или это может отвлекать и быть бесполезным для агента. Теперь вы можете подумать, я имею в виду, я использовал только 24%. Но даже когда вы приближаетесь к верхней границе контекста, были проведены действительно хорошие исследования и ранние исследования, которые показали, что когда вы достигаете верха, у вас возникает эта проблема "иголка в стоге сена", когда вы находитесь на 95% использования контекста, вы даете модели ИИ все это и пытаетесь сказать ей найти эту одну маленькую часть релевантной информации посередине. Это трудно сделать. Я имею в виду, моя любимая аналогия: если мы разговариваем у кулера 30 минут, а затем в конце вы говорите: "О, кстати, что я сказал в первую очередь?" Я говорю: "Э-э, я уже забыл. Что ты сказал еще раз?" Вы знаете, это своего рода похоже на то, как работают и люди. Так что, например, мы уже сделали коммит. Я вижу в панели управления исходным кодом, у меня нет всех этих изменений. На самом деле, я обновлю план, поскольку мы закоммитили эти вещи. Итак, я в этом как бы свежем состоянии. Так что на самом деле я нажму Command N и начну новый чат. Потому что мне не нужен весь предыдущий контекст. Итак, давайте вернемся к плану и посмотрим, сможем ли мы настроить что-то, что будет проверяемым. Что бы здесь было хорошим? Если мы сделаем базу данных, мне придется получить базу данных и настроить ее. И это может занять немного больше времени, чем у нас есть здесь. Может быть, просто создадим фронтенд с какими-нибудь фиктивными данными. >> Простите, повторите. >> Может быть, просто попросим вас создать фронтенд с какими-нибудь фиктивными данными или чем-то вроде этого, знаете. >> Да, давайте добавим страницу настроек, чтобы настроить ваш аккаунт Spotify, даже если мы еще не интегрировали API, и я хочу убедиться, что она работает правильно. Так что добавьте тест. >> Да, может быть, нам стоит просто поместить добавление тестов в системный промпт или, знаете ли. >> Да. То, как я люблю работать, это когда я начинаю говорить >> одни и те же вещи несколько раз. Это своего рода толчок для меня, что, эй, на самом деле, это, вероятно, то, что я хочу поместить в правило Cursor. Правило Cursor — это, по сути, небольшая заметка, которую вы включаете в начало каждого чата, каждого разговора, чтобы поместить ее в контекст при общении с моделью ИИ. Например, он может сказать: "Всегда используйте этот менеджер пакетов, всегда запускайте тесты, всегда используйте определенный стиль коммитов и убедитесь, что вы коммитите рано и часто". Все это может быть способами работы, которые вы, по сути, кодируете в правилах, которые применяются к вашему проекту. Да. И правило Cursor, просто для тех, кто смотрит, это просто заголовки, верно? Cursor говорит заголовки. Вот что такое правила. Да. Так что я просто скажу, давайте сделаем запуск тестов и использование Git правилами Cursor в моем проекте. И я могу просто нажать Enter, и он как бы помещает это в очередь. И если бы я сказал: "На самом деле, я не хочу этого делать", я могу удалить это или я могу также поднять это и прервать чат, если бы я хотел. Итак, у нас есть несколько вещей, которые происходят прямо сейчас. Мы сделали страницу. Мы добавили тесты. Мы собираемся сделать некоторую навигацию. Отлично. Я все еще позволю ему делать все это, потому что почему бы и нет? И затем мы обновим правило Cursor. Но теперь это хороший шанс показать вам поток обзора немного здесь. Так что я могу пройтись. У нас изменено четыре разных файла. И я могу одобрить или отклонить. О, кстати, справа мы видели, что тесты только что прошли. Так что это хорошо. Прогресс. У нас есть ссылка на настройки. Это выглядит нормально. Я нажму "Сохранить" или могу использовать Command Y. Перейдем к следующему файлу. У нас есть страница настроек. Это компонент React. Поскольку сейчас это не имеет большого значения, что он делает, я как бы просто пропущу это, пока у нас не появится больше функциональности. Он как бы просто заглушен сейчас, где он не делает ничего. Конечно. Мы сохраним это. >> Перейдем к следующему. У нас есть тест. Это выглядит нормально. Так что мы сохраним это. И он прошел. Так что это хорошо. О, у нас есть еще один тест. Отлично. Теперь я вижу кое-что еще, а именно: я вижу эту волнистую линию, и волнистая линия выдает ошибку. Она говорит: "Эй, не могу найти эту вещь". Вы, возможно, пропустили установку определений типов, что интересно, потому что когда я >> устанавливал все это в начале, похоже, он просто пропустил настройку некоторых из этих определений типов, которые дают мне больше обратной связи локально, когда я работаю в редакторе. Так что давайте сделаем это. Я добавлю это в чат, и мы можем поставить это в очередь. И, похоже, он мог застрять здесь на этом тесте. На самом деле не вышел. Так что мы можем просто пропустить это. Похоже, это работает, но мы фактически не вышли, или тест не имел выходного сигнала команды терминала. Отлично. Страницы настроек проходят. Есть ошибка линтера. Хорошо, все еще работает. Отлично. Закончено. Так что теперь он может фактически вытаскивать вещи из очереди и продолжать делать то, что я предложил. Так что он сделает некоторые из этих правил Cursor. Я просто просмотрю эти изменения. Они выглядят нормально. И затем я снова открою свой код, и вы увидите здесь мою структуру каталогов для моего проекта. >> И он создаст некоторые правила Cursor. Теперь одна интересная вещь заключается в том, что это хорошее время, чтобы поговорить о том, как работают модели ИИ, а именно: они обучаются на некоторых данных из Интернета до определенной точки, называемой точкой отсечения знаний, а затем после этой точки они не знают об изменениях. Так что то, что вы только что видели, это то, что он сделал правило Cursor, но он сделал это в этом файле правил Cursor, правила Cursor. Теперь для моих пользователей Cursor, которые смотрят, вы знаете, что это своего рода старый способ делать правила Cursor, где вы сваливали все в это одно правило. Что нормально. Это все еще работает, все еще поддерживается. На самом деле есть новый способ, где мы можем разбить его на более мелкие части, и мы можем давать обратную связь, чтобы сказать, хочу ли я включить это в каждый разговор или я хочу включить это только в некоторые разговоры. Так что я могу фактически зайти сюда и сказать: "На самом деле используйте новую версию правил Cursor", где они могут быть в нескольких файлах, и мы можем даже тегировать вещи здесь, например, "веб", чтобы искать в Интернете, если есть какая-либо путаница относительно того, как это работает, или я могу тегировать конкретные документы, такие как документы Cursor. Так что давайте сделаем это вместо веб. Я поставлю это в очередь. Теперь, пока я здесь болтаю, агент делает вещи для меня, которые, как я упомянул, была ошибка в чате, где он не знал, как понять "описать", и он установил зависимости для этих вещей. И теперь, когда я навожу на них курсор, я получаю всю эту информацию из определений типов, которая помогает мне понять, что я здесь смотрю, что приятно. Мм. >> Итак, теперь он удалил этот файл и настроит новые правила Cursor для моего приложения. Так что у меня есть doc Cursor, затем папка правил, а затем у меня есть разные файлы внутри нее. Так что он настроит пару для меня. Отлично. Один — об общих правилах, другой — о рабочем процессе Git, рабочем процессе разработки. Отлично. И я могу пройтись здесь и удалить то, что мне нравится, а что нет. Я бы сказал, что они, вероятно, немного многословны для меня прямо сейчас. Я бы, вероятно, хотел что-то вырезать. >> Но, да, это просто один из способов работы через этот рабочий процесс, где мы можем тестировать и убедиться, что все работает. Кажется нормально. >> И можете ли вы попытаться загрузить это, как будто, как будто, как будто само приложение? >> О да, давайте сделаем это. Позвольте мне >> позвольте мне открыть, я перестану делиться и открою браузер. И мы можем посмотреть, что он построил. Хорошо, это >> это приложение "Привет, мир", которое он сделал. Знаете, если ваше приложение не выглядит так, вы слишком поздно его выпустили. Это самая >> базовая страница "Привет, мир", которую мы имеем. У нас есть кнопки, которые ничего не делают. >> Да. >> О, настройки. На самом деле, это не так уж плохо. Когда я попросил его сделать страницу настроек, это выглядит нормально. Он еще не учел дизайн, который я хотел, но, я полагаю, это нормально. Мне нужно было быть более конкретным относительно того, чего я ищу. Но одна вещь, которую вы видите, которая очень приятна, заключается в том, что, поскольку я сказал ему использовать Shadcn UI, который является моей системой дизайна и сборщиком библиотек компонентов по выбору, я могу получить эти довольно приличные компоненты. Я не уверен, использует ли он их полностью, но я смогу вставить все эти компоненты, что делает вещи, знаете ли, немного проще, немного доступнее, немного более настраиваемыми. Так что >> да, >> это довольно прилично. >> Я имею в виду, знаете ли, на самом деле, Shadcn UI — это любимый интерфейс, который ИИ любит создавать. >> Да. Да, его используют все основные модели ИИ для генерации пользовательского интерфейса. >> Мм. Итак, позвольте мне подвести итог этого примера, который вы сделали, верно? Итак, просто, как бы, номер один, вы вложили много времени в первоначальные инструкции и все такое, как бы, спецификация продукта также содержит детали о технологическом стеке и всем, что вы хотите >> правильно >> и также, что крайне важно, вы включили несколько строк о том, чтобы попросить ИИ делать коммиты по пути, как бы, делать коммиты по пути. >> Да. Да. Это одна из тех вещей, где исторические лучшие практики разработки программного обеспечения, которые, возможно, были скрыты в какой-то книге или просто изучены на работе, теперь выражаются немного яснее в начале того, как вы работаете, потому что агенты действительно хорошо работают таким же образом. Им нужна обратная связь. Им нужны выходные данные, которые будут передаваться обратно, чтобы они могли понять, где они ошиблись. Именно поэтому вы видите типизированные языки, такие как TypeScript, линтеры, компиляторы, запуск тестов в тестах, все эти вещи. Они помогают агенту работать лучше. И приятно настроить их заранее, чтобы вы не оказались в ситуации, когда вы просите ИИ что-то сделать, >> агент идет и пишет код, а затем он не работает. Так что вы просите его с чем-то вроде: "Эй, это не работает, верно?" >> Да. Да. Да. Но агент не знает, как искать дополнительную информацию, больше сигналов, чтобы выяснить, что поместить в контекст, почему это не работает. Типизированные языки, тесты, линтеры дают вам это, что было полезно для программистов, пишущих код вручную, и они также полезны для агентов, когда вы параллелизуете работу, которую вы делаете. >> Да, похоже, что из-за того, что вы пишете тесты, у него был контекст, чтобы просто исправить свою собственную проблему. Так что вам не нужно постоянно говорить, что это не работает. >> Правильно. И прямо сейчас пример, который я показал, не был чем-то диким, но это действительно начинает окупаться, когда у вас есть ошибки во время выполнения. Так что >> когда вы создаете свое приложение, когда вы компилируете свое приложение, вы получите некоторую обратную связь. Более сложная вещь — это когда ваше приложение фактически работает и запущено, и пользователи пытаются его использовать, и они сталкиваются с какой-то ошибкой, и эта ошибка, надеюсь, имеет сообщение об ошибке. Надеюсь, есть трассировка стека, которая является конкретной точкой или указателем на часть кода, где произошла ошибка. >> И если у вас есть эта информация >> и вы можете передать ее обратно агенту, это определенно облегчает жизнь при попытке выяснить, что пошло не так. >> Отлично, чувак. Итак, давайте поговорим немного о том, как настоящие инженеры могут использовать Cursor и инструменты ИИ для существующей кодовой базы, верно? Потому что там слишком много строк кода, чтобы все это поместилось в контекст одновременно. Я думаю, для меня разница между "вибрационным" кодированием первой версии вашего приложения, что примерно я делал здесь, но разница в том, что я накопил контекст и знания, чтобы знать, с какими инструментами я работаю, и знать, какие вопросы задавать. Большая разница в том, что происходит после первого дня, потому что я могу создать это приложение, и я просто создаю его для себя. Это просто своего рода одноразовая вещь. Мне не особо важен код, я просто делаю это, чтобы попробовать какой-то прототип. "Вибрационное" кодирование отлично подходит для этого. Просто выбросьте код, верно? Это нормально. Если это то, что я пытаюсь создать и поддерживать со временем, это бизнес, который я хочу построить, или это код, над которым я работаю со своими товарищами по команде, или это производственное программное обеспечение, которое я пишу для своей компании. Я не могу "вибрационно" кодировать это. Я должен знать, с чем я работаю. Я должен просто заниматься обычным программным инжинирингом. Но этот обычный программный инжиниринг вы можете дополнить с помощью ИИ. И я думаю, что мы видим сейчас здоровый скептицизм по этому поводу. И я думаю, что многие инженеры, которые пишут код очень давно, пытаются понять, что означает для них этот новый смелый мир. И моя цель — помочь показать многим из этих людей, которые скептически настроены, но, возможно, оптимистичны и осторожно оптимистичны относительно того, куда мы движемся, что ИИ может быть очень полезен для автоматизации скучных вещей, работы, которую они все равно не хотели делать. Это не всегда должно быть создание полного приложения с нуля. Хотя вы будете делать это в какой-то момент, верно? Вы всегда будете создавать новые вещи. с первого дня до 100 или тысячи. Есть также много практических применений ИИ даже для мелких вещей, таких как переформатирование или разбор большого объема данных и попытка выяснить определенную часть или суммирование длинной информации, как бы переход из одного формата в другой. Это мелкие вещи, которые действительно могут помочь. >> Да. Например, знаете ли, это не только зависимости, с которыми ИИ может помочь. >> Да. Так что, я полагаю, ваш совет для опытных инженеров — просто не забывать все знания, которые у вас уже есть, как бы, инженерия не мертва как практика или что-то еще. На самом деле, она более востребована, чем когда-либо, но, возможно, попробуйте использовать ИИ, чтобы попытаться оптимизировать некоторые скучные вещи, которые вам приходится делать, верно? Это такой совет. Да, вокруг того, что инженерия закончена, очень много шума, и, знаете ли, я просто думаю, что большая часть этого бесполезна, потому что если вы создаете приложение и не понимаете, как оно на самом деле работает, оно может отлично работать в первый день или первую неделю, но вы достигнете точки, когда вы окажетесь в очень плохом положении. И вы начинаете видеть это сейчас, когда некоторые люди, которые начали использовать некоторые из этих новых инструментов, создают первую версию, выпускают ее, а затем им приходится возвращаться и покупать учебник и изучать основы, прежде чем они смогут продвинуться дальше. И я чувствую себя двояко по этому поводу. С одной стороны, я рад, что это делает программное обеспечение более доступным для большего числа людей. С другой стороны, я хочу, чтобы это были люди, которые увлечены созданием программного обеспечения и тем, как выглядит этот путь. Так что для меня я действительно влюбился в создание программного обеспечения, когда начал заниматься веб-разработкой, потому что я мог это действительно видеть. И есть что-то прекрасное в использовании моделей ИИ для генерации кода и получения работающих приложений, которые я могу использовать и видеть, что, я думаю, вдохновит гораздо больше людей кодировать. >> Так что моя цель — помочь им узнать, что требуется после первого дня, что требуется до 100-го дня, как вы на самом деле создаете реальное программное обеспечение и занимаетесь программным инжинирингом. И ИИ все еще может быть хорошей частью этого. >> У вас есть

Несколько советов для, знаете ли, продакт-менеджеров или людей, которые хотят изучить эти вещи, например, изучить принципы? Э-э, да, это просто как бы работа над небольшими проектами одновременно или как вы >> начинаете с этим? Пойти почитать книгу или >> Да, я думаю, это и обучение на практике, и также изучение вопросов, которые нужно задавать, потому что я думаю, что инженера учат быть скептичным ко многим вещам, а также знать, где у них нет знаний, и задавать правильные вопросы. Итак, когда вы пытаетесь применить себя к созданию вещей и экспериментировать с новыми технологиями, экспериментировать с ИИ, вы, безусловно, столкнетесь с вещами, которые вы не понимаете. И вы можете учиться, пока вы строите и взламываете с помощью кода, который вы просто выбрасываете. Вы просто пробуете вещи, верно? И в то же время я бы настоятельно рекомендовал всем, кто действительно хочет попробовать, изучить информатику, изучить инженерию. Э-э, есть много вещей, которые могут показаться неочевидными на первый взгляд, например, понимание структур данных и алгоритмов, а также различных видов кода, которые создаются, которые просто будут полезны знать. Например, если вы не очень хорошо знаете, что такое цикл, это, вероятно, будет сложно, когда вы увидите, как ИИ генерирует цикл for, и вы не очень уверены, на что вы смотрите. И опять же, если у вас есть настрой на то, как задавать вопросы, ИИ может помочь вам понять, что такое циклы for. Может дать вам дорожную карту для изучения работы с циклами и работы с условными операторами, а также понимания различных типов переменных. Все эти основные части программирования, которые вы захотите накопить и изучить. Вам просто нужно иметь это любопытство, что я не просто хочу использовать этот инструмент, как какую-то быструю схему получения или быструю схему создания приложения. Это на самом деле так не работает. Это должно быть: я хочу использовать эти инструменты, потому что я хочу научиться создавать программное обеспечение. >> Да. Так что это немного из всего, верно? Это как, знаете ли, создание приложений, попытка спросить ИИ, что это за штука, а также пойти почитать технические учебники, чтобы построить свои фундаментальные знания, это своего рода >> именно так >> да, потому что иначе вы можете просто построить что-то, знаете ли, как мы видели примеры людей, которые пишут код, а затем их API-ключ утекает или что-то в этом роде, это может быть плохо, знаете ли, если вы не знаете, что вы делаете >> да, я имею в виду, если вы никогда не работали ни с чем подобным >> ну, во-первых, вы не знаете, что такое API, поэтому вы определенно не знаете, что такое API-ключ, и вы, вероятно, не знаете разницы между клиентом и сервером. Так что вы не знаете, какой вопрос задать, почему плохо, что API-ключ находится на клиенте. Вы просто не знали бы, как задать этот вопрос. И я думаю, что есть ответственность людей, обучающих новых разработчиков или новых людей, создающих программное обеспечение, отступить и изучить эти вещи, прежде чем мы выведем в продакшн приложения с базами данных. Э-э, и я думаю, что инструменты станут лучше в плане создания некоторых из этих вещей. Я думаю, что прямо сейчас Cursor действительно сосредоточен на помощи профессиональным разработчикам создавать программное обеспечение лучше. Но я также очень воодушевлен многими инструментами, которые пытаются создать для продакт-менеджеров, создать для других людей, которые впервые начинают заниматься программированием. Я хотел бы видеть, как они добавляют больше инструментов для новичков, э-э, для дизайнеров или для продакт-менеджеров, которые просто пытаются разобраться в этом, где, возможно, это подтолкнет вас к обучению в продукте. Я думаю, это было бы здорово. Давайте закончим, поговорив немного о вашем опыте. Э-э, есть несколько вопросов о вашем опыте работы в Versell и теперь в Cursor, как э-э, как вы создаете продукты в этих компаниях, как это э-э, как, знаете ли, есть ли очень четко определенные функции, вы просто пишете PRD Cursor или H, как, как вы создаете новые функции? Да. >> Да. Я думаю, что Verscell и Cursor отличаются тем, что они намного дальше продвинулись в жизненном цикле компании. Verscell — гораздо более устоявшаяся компания, чем Cursor, >> знаете, более новая компания, как по времени существования, так и по степени устоявшегося процесса разработки продукта и того, что на самом деле означает выпуск программного обеспечения. Так что Cursor движется очень быстро. Я имею в виду, мы пробуем много вещей. Мы видим, что работает, а что нет. И я думаю, что мы даем инженерам много свободы для управления этим процессом от начала до конца, как у нас нет, я думаю, может быть, одного продакт-менеджера, или наш первый продакт-менеджер скоро появится. Так что мы все еще как бы наращиваем эту мышечную массу, где у нас есть инженеры, которые являются инженерами, ориентированными на продукт, и я как бы думаю, что это э-э, путь будущего, где инженеры могут расширяться в другие измерения. Вы видели это с инженерами-дизайнерами. Э-э, я э-э, я как бы писал о продуктовом инжиниринге в прошлом. Я думаю, что есть здоровое сочетание или смесь этих типов людей, которые могут выполнять некоторую работу по продукту, некоторую работу по дизайну, некоторую работу по инжинирингу. С учетом сказанного, конечно, отличный продакт-менеджер может оказать огромное влияние на продукт, особенно на устоявшийся продукт, где они как бы знают рычаги и кнопки, которые они оптимизируют, по сравнению с более общим специалистом на более ранней стадии стартапа. Э-э, знаете ли, обе компании движутся очень быстро. Обе компании заботятся о создании отличного программного обеспечения. И, э-э, я многому научился за пять лет в Verscell, и я уже многому учусь всего за несколько недель в Cursor. Да. И я чувствую, что у универсала теперь есть, как раньше, когда стартап масштабируется, много сотрудников, и, во-первых, многие стартапы больше не должны нанимать так много людей, верно? Потому что ИИ может делать много работы. Да. Да, >> но также чувствую, что люди, которые могут носить все шляпы в стартапе, знаете ли, для отсутствия лучшего слова, теперь имеют гораздо более долгий, знаете ли, срок годности, верно? Они могут масштабировать себя и по-прежнему быть очень ценными даже в таких компаниях, как Anthropic или даже, знаете ли, OpenAI, верно? >> Да. У меня есть хорошая история и анекдот из моих первых нескольких недель в Cursor, когда мы хотели отправить возврат средств клиенту или группе клиентов и отправить электронное письмо. Так что поговорите со Stripe, отправьте электронное письмо. И мне пришлось почти удалить часть моего мозга, связанную с программным обеспечением SaaS, потому что я сел с одним из наших инженеров, Эриком. И я наблюдал, как он проходил через эту задачу, и я ожидал, что, знаете ли, он войдет в какой-то инструмент, и инструмент поможет ему как бы оформить возврат средств или пройти и отправить электронное письмо. И он запускал скрипт, и я подумал: хм, нет никакого способа, чтобы это сработало, верно? Ему, вероятно, придется подумать о, знаете ли, проведении пробного запуска скрипта, чтобы мы могли проверить вещи. Что, если возникнет сетевая проблема и что-то пойдет не так? Вам придется как бы записывать состояние по мере прохождения скрипта, чтобы, если вы обработали сто из тысячи записей, вы знали, что не повторяете сто, и о, нам нужно убедиться, что нет проблем с доставляемостью электронных писем, и мы, вероятно, хотим протестировать, как выглядит электронное письмо. Это звучало как много всего. И я просто наблюдал, как он систематически решал все эти вещи и думал об этом с инженерным складом ума и создавал очень надежную часть программного обеспечения. Для меня это выглядело как скрипт, но на самом деле это было специально настроенное программное обеспечение для именно того, что ему было нужно, которое интегрировалось со Stripe. Оно интегрировалось с э-э API для отправки электронных писем. И это сработало очень хорошо. Он протестировал все, провел пробные запуски, протестировал на себе, знаете ли, протестировал состояния сбоев, а затем взял это и закоммитил в репозиторий других скриптов, как пользовательское программное обеспечение, которое было создано и которое он использовал для этих задач. И это как бы давать инженеру эти невероятно мощные инструменты для выполнения любой задачи и подключения к любому сервису. И я нашел это очень интересным. >> Так ему не пришлось кликать по какому-либо пользовательскому интерфейсу или чему-то еще. Он просто запустил скрипт, и все готово. Да. Да. Вау. Да. Я имею в виду, я имею в виду, что мир движется к этому, верно? Как куча э-э скриптов или суб-агентов, которые могут просто выполнять специализированные задачи для вас, а затем вы можете просто, знаете ли, вы можете пойти выпить кофе или что-то еще, пока они это делают. >> Да. И весь этот пример возможен только благодаря отличному инженеру >> который знает, как использовать свои инструменты, знает правильные вопросы, которые нужно задать, имеет большое внимание к тому, как он использует эти инструменты вместе, и он может делать удивительные вещи. Как агент просто умножает их продуктивность. >> Это потрясающе, чувак. Э-э, я надеюсь, мы все станем такими, как Эрик. >> Да, так же. Я учусь у него. >> Да. Так что, э-э, так что, э-э, где люди могут найти ваш э-э, знаете ли, новый обучающий контент Cursor или, знаете ли, он скоро выйдет? >> Да. Мой веб-сайт le.com. Я публикую на xx.comrob. Э-э, в основном там все будет. Я также делаю что-то на YouTube. >> Отлично, Ли. Было так здорово снова поговорить с тобой, чувак. Как я, я думаю, я думаю, ты на самом деле как бы человек эпохи Возрождения. Ты знаешь, как создавать вещи, но ты также знаешь сторону маркетинга разработчиков. Так что сильный, сильный найм от Ker. Им повезло, что они тебя заполучили. >> Спасибо. Я ценю это.