Transcription
Есть больше, чем просто написание кода, написание кода. Мне нужно выяснить, где писать код, как писать код, а затем, как только я действительно закончу, мне нужно документировать все, что я написал. К счастью, GitHub Copilot Enterprise может поддержать меня на протяжении всего процесса. Я хочу изучить, как он может мне помочь, пройдя через относительно распространенный сценарий: было подано обращение. Мне нужно выяснить, куда поместить этот код, как его написать, написать этот код, код, а затем, конечно же, документировать его в конце. Давайте посмотрим, как это работает. У меня есть обращение здесь для веб-сайта конференции, и, как указано в обращении, когда пользователь отправляет или редактирует доклад, нет никакой формы сообщения об успехе, которая отображается. Поэтому первое, что мне нужно выяснить, это где находится код, который управляет отправкой докладов. Обычно в этот момент я бы щелкал по разным папкам, искал по ключевым словам и т. д., но с Copilot я могу просто спросить. Я нажимаю на значок Copilot в правом верхнем углу, а затем просто спрашиваю на естественном языке, где доклады отправляются и редактируются в этом приложении. Вы заметите, что я не использую никаких технических фраз здесь, никаких имен классов, ничего подобного. Я использую естественный язык. Я, по сути, просто набираю небольшую пользовательскую историю о том, что кто-то может сделать внутри моего приложения, и Copilot просматривает мое приложение и дает мне отличную информацию о том, как все это происходит. Так что он сообщает мне, что есть представление отправки доклада (talk submit view) и представление редактирования доклада (talk edit view), и он дает мне ссылки на эти файлы. Так что, если я нажму на ссылку для представления отправки доклада, оно откроется внутри небольшого диалогового окна. Я могу изучить исходный код отсюда, но давайте скажем, что я хочу пойти на шаг дальше, что я теперь хочу копнуть немного глубже в код и посмотреть, что делает этот код. Я нажимаю на ссылку в самом низу, и она открывает файл для меня. Я закрою Copilot на мгновение, потому что я хочу изучить код, который у нас есть, и я вижу это представление отправки доклада и представление редактирования доклада, и все это код Python Django. Теперь давайте предположим, что я новичок в проекте, или, возможно, давайте предположим, что прошло несколько месяцев, и я не совсем помню, что делает этот код. Как вы можете ожидать, я могу спросить Copilot. Я нажму на строку здесь, я выберу строку для моего представления отправки доклада, и я получу значок Copilot здесь, справа. Если я нажму на это выпадающее меню, вы заметите, что у меня есть пара вариантов. Первый, который я выделю, — это "предложить улучшения". Если вы похожи на меня, а я знаю, что я такой, я обычно люблю использовать любую возможность, когда мне приходится возвращаться, возвращаться и изменять какой-то код, чтобы рефакторить его, чтобы попытаться улучшить этот код. Так что наличие этой опции прямо здесь, "предложить улучшения", довольно замечательно. Так что я просто иду к Copilot, нажимаю эту маленькую кнопку, и вы заметите, что он даст мне действительно хорошую информацию. В частности, он указывает на тот факт, что у меня есть некоторое дублирование кода. Так что он дает мне предложение создать базу и затем показывает мне, как я должен обновить это представление отправки доклада и представление редактирования доклада, чтобы теперь использовать эту базу, которую он предлагает. Я не собираюсь беспокоиться о реализации этого прямо сейчас, но очень приятно иметь эту функцию, чтобы просто сказать: "Эй, как мне это улучшить?", и иметь Copilot, дающий мне ответ. Я хочу вместо этого сосредоточиться на добавлении этого сообщения, и для этого мне нужно выяснить, что делает этот код. Так что позвольте мне вернуться и попросить его объяснить это. Объяснение возвращается и дает мне, по сути, всю информацию, которая мне может понадобиться о том, как работает это представление. Оно сообщает мне классы, от которых оно наследуется, оно показывает мне различные свойства, которые устанавливаются, функции, которые реализованы, и т. д. Теперь у меня есть действительно хорошее понимание того, что делает этот код. Позвольте мне переключить свое внимание на реализацию желаемой функциональности. Я снова спрошу Copilot: "Как мне отобразить сообщение об успехе?". Теперь во многих случаях в этом сценарии я бы обнаружил, что ищу в поисковой системе, ищу на форумах программистов и пытаюсь выяснить, как реализовать эту, эту конкретную функциональность, или, возможно, я пойду в документацию, и проблема, которая у меня там есть, заключается в том, что ответы, которые я найду, не обязательно будут напрямую применимы к тому, что я строю, что мне придется копировать этот код, вставлять его, изменять его, как бы надеяться, что я понимаю, что он мне дает, и т. д. Но здесь я могу просто оставаться в зоне. Мне не нужно покидать мой репозиторий, даже, и я получу ответ, который специфичен для моего сценария. Так что вы заметите, что фрагмент кода, который он мне дает, специфичен для представления отправки доклада. Теперь, если я пройдусь по ответу здесь, он говорит мне, что я должен использовать фреймворк сообщений (messages framework) внутри Django. Давайте скажем, что прошло некоторое время, я не знаю, что это за фреймворк сообщений, я спрошу Copilot, и Copilot даст мне ответ. Вы заметите здесь, что я не просто спрашиваю или исключительно спрашиваю о своем репозитории, но я также могу задавать общие вопросы и иметь Copilot, дающий мне информацию об этом. Так что теперь я могу немного больше узнать о том, как работает этот фреймворк сообщений с помощью Copilot. Здесь я смог определить, куда в коде мне следует внести изменения, а также изменения, которые мне следует внести. Последнее, что я хочу изучить, прежде чем я начну фактически писать свой код, — это обеспечить доступность, потому что, в конце концов, я хочу убедиться, что каждый может использовать веб-приложение, которое я строю. Теперь я знаю, что у нас есть много внутренней документации по доступности, но обычно то, что мне приходится делать, это начинать копаться в куче документов, выполнять разные поиски, и это может быть немного проблематично найти. Также иногда документация может быть немного общей, поэтому я хочу убедиться, что когда я просматриваю информацию, я могу задавать вопросы, которые специфичны для моего сценария. Вот где в игру вступают базы знаний. Базы знаний — это наборы репозиториев, которые были проиндексированы администраторами вашей организации, чтобы вы могли выполнять такой тип запросов по этой информации. Я вернусь к своему приложению и начну новый разговор с Copilot, и я переведу его в полноэкранный режим, что, по сути, означает, что он займет всю страницу. Вы заметите этот значок книги здесь, в левом нижнем углу, и когда я нажму на него, он покажет мне все базы знаний, которые были проиндексированы, которые были созданы. Я возьму ту, что для веб-разработки, которая, когда я открою ее, вы заметите, была обучена на двух внутренних репозиториях, связанных с доступностью, а также на двух внешних репозиториях для Django и Bootstrap, которые использует мое приложение. Так что теперь, когда я задаю вопросы, он будет учитывать все это. Так давайте спросим: "Как мне сделать оповещения Bootstrap доступными?", поскольку именно так я буду отображать мои сообщения. Игнорируйте небольшую опечатку, которую я там допустил, он все равно смог понять, что я имел в виду, и дает мне действительно хорошую информацию о том, как обеспечить доступность этих оповещений. Одна большая вещь, которую стоит выделить здесь, — это список ссылок, и что мне действительно нравится в этом, так это то, что это теперь ведет меня к источнику. Это ведет меня к той документации, из которой он смог извлечь этот ответ. Пока я здесь, я также могу начать спрашивать другие вещи. Сейчас я знаю, что мое приложение использует Bootstrap 4. Возможно, я хочу начать смотреть на миграцию. Как я могу мигрировать с Bootstrap 4 на 5? И снова я получу много отличной информации о том, как я могу начать эту миграцию с Bootstrap 4 на Bootstrap 5. Основной вывод из всего этого — тот факт, что я смог интерактивно изучить приложение, изучить фреймворки, которые я использую, и получить всю необходимую информацию в одном месте, чтобы начать писать свой код. Со всем, что у меня есть, я чувствую себя готовым фактически написать этот код. К счастью, я уже открыл репозиторий в Visual Studio Code. Я переключу свое внимание сюда. Итак, у меня есть это представление отправки доклада, и я выделю этот класс. И что это делает, когда я работаю с чатом Copilot внутри Visual Studio Code, это то, что он устанавливает это как точку отсчета. Так что теперь, когда я задаю вопросы, Copilot будет знать, что я говорю именно об этом. Так что давайте откроем чат и зададим вопрос: "Как мне отобразить сообщение об успехе?". И чат даст мне соответствующий код. Я скопирую и вставлю нужные мне части. Итак, я знаю, что мне нужен импорт сообщений. Позвольте мне вставить это, а затем мне нужен этот valid form (форма действительна). Итак, позвольте мне скопировать это, и мы вставим это прямо сюда, если я смогу правильно переместить мышь. Вот, отлично. Итак, позвольте мне убрать чат отсюда, и я хочу взглянуть на код, который он дал мне. Так что хорошо, что он теперь добавляет это сообщение об успехе, но я хочу убедиться, что мы отображаем заголовок доклада здесь. И это одна большая вещь, которую мы всегда хотим помнить, когда используем Copilot, — это тот факт, что это сопилот, а не автопилот. Так что я всегда хочу просматривать код, который он мне дает, потенциально вносить в него улучшения. Так что я буду использовать строку форматирования здесь, чтобы отобразить заголовок доклада. И вы заметите этот серый курсивный текст — это Copilot дает мне это предложение кода. Он видит, что я использую строку форматирования, и он сразу же говорит: "Эй, вы, вероятно, хотите отобразить заголовок". Так что у меня есть мой код, я нажимаю Tab, чтобы принять его, и теперь он даст мне лучшее сообщение. Позвольте мне прокрутить вниз до моего редактирования доклада. Я зайду в мой valid form, и вы заметите, что когда я просто нажму Enter здесь, нажму возврат каретки, он также предложит сообщение об успехе для этого. Причина, по которой он это сделал, заключается в том, что он увидел, что я сделал выше. Мы всегда хотим помнить, что Copilot будет использовать мой текущий файл, а также вкладки, которые у меня открыты в моей IDE, для контекста. Он увидел тот факт, что я добавлял сообщение об успехе для отправки, и сделал предположение, что я хочу одно для редактирования, и автоматически добавил его. Я сохраню свои изменения, открою базовый HTML, который является шаблоном, который я буду использовать для отображения всего, и добавлю комментарий для отображения моих сообщений Django. И Copilot затем предложит поместить это в оповещения Bootstrap. Все это выглядит для меня вполне нормально. Позвольте мне сохранить это, и позвольте мне подготовить все это, и я буду использовать командную строку для этого. Так что позвольте мне сказать `git add .`. Теперь в этот момент мне нужно сообщение коммита. Мне нужно описать, что я сделал. В первый раз мне придется сделать это еще раз, когда мы дойдем до запроса на слияние, мы увидим это через мгновение. Теперь вы заметите, что внутри командной строки у меня есть эти маленькие искорки, и эти маленькие искорки — это Copilot внутри Visual Studio Code. Я увижу их в нескольких разных местах, когда буду писать код. Если я перейду к рабочей области контроля версий, я увижу их прямо здесь. Но в моем случае, поскольку я очень люблю делать вещи в командной строке, я выделю тот, который находится здесь, в командной строке, и когда я нажму на это выпадающее меню, вы заметите, что оно даст мне предложение сгенерировать сообщение коммита. Оно делает это, потому что оно увидело тот факт, что я использовал `git add`, оно знает, что следующим шагом, вероятно, будет коммит. Так что давайте сгенерируем это сообщение коммита для нас. Я выберу этот вариант, и он сгенерирует сообщение коммита: "Добавить сообщения Django в базовый HTML и views.py". Я быстро изменю это. Это приблизило меня к тому, что я хотел. "Добавить сообщения Django в потоки отправки и редактирования". Это будет сообщение коммита, которое я хочу. Я сохранил его, и теперь давайте отправим его. Так что мы скажем `git push`, чтобы отправить его в наш репозиторий. Опять же, я должен описать это не только один раз. Я также должен описать это внутри моего запроса на слияние. Так что давайте вернемся к репозиторию здесь, и я вижу диалоговое окно для создания запроса на слияние. Я нажму свою кнопку, а затем прокручу вниз. У него есть сообщение коммита, а затем прямо здесь оно спрашивает меня о описании. И обычно в этот момент мне придется набирать все, что я построил, и стараться быть максимально описательным. Но скорее всего, после того, как вы потратили всю свою энергию на написание кода, у вас, вероятно, не осталось много сил на придумывание хороших сводок запросов на слияние. Я знаю, что я видел огромное количество сводок запросов на слияние, которые просто "исправления ошибок", и это не очень полезно. К счастью, Copilot может сделать это для меня. Я нажму кнопку здесь, мою маленькую кнопку Copilot. Я выберу "сводка" и позволю Copilot сгенерировать эту сводку для меня. Я создам этот запрос на слияние, и мы заметим много отличной информации об этом запросе на слияние. У меня есть ссылки на все разные файлы и действительно хорошая сводка всего, что было изменено в этом запросе на слияние. Давайте изменим фокус, чтобы закончить эту пользовательскую историю. До сих пор мы видели, как я могу использовать Copilot, чтобы выяснить, где в приложении определена конкретная функциональность. Мы видели, как я мог узнать, как лучше всего написать необходимый код, написать код, конечно, а затем получить помощь от Copilot как с сообщением коммита, так и со сводкой запроса на слияние. Но давайте предположим, что я являюсь сопровождающим этого репозитория, и мне теперь нужно выяснить, какие изменения были внесены. И эта сводка замечательна, но, возможно, я хочу копнуть немного глубже в код. Так что я открываю измененные файлы, и если я прокручу вниз, я могу увидеть все, что было изменено, все различия. И позвольте мне выбрать конкретную строку здесь. Давайте возьмем строку 42 здесь, и вы заметите, что я получаю свой значок Copilot. И если я нажму на выпадающее меню, как и раньше, у меня есть "объяснить". И это "объяснить" разберет, в чем разница между кодом запроса на слияние и кодом, который был там раньше. Так что это действительно поможет моим сопровождающим понять, что было изменено в запросе на слияние. Я надеюсь, что вы нашли все это полезным, и я призываю вас зайти и начать исследовать GitHub Copilot Enterprise. [Музыка]