ChatGPT для обучения программистов (и других IT-людей)

 Публичный пост
23 февраля 2024  920

В двух словах о себе, чтобы стало понятно как родилась эта статья. Во мне уживаются несколько личностей: .NET developer, English Teacher и Language Coach. Последнее время частенько их миксую - помогаю ITшникам готовиться к job-interview "in English". То есть одновременно улучшать IT-английский и тут же подтягивать hard-skills.

Естественно, чаще всего моими клиентами становятся разработчики. То и дело случается обсуждать с ними технологии, с которыми я на практике не работал. Поэтому приходится максимально быстро разбираться с новыми понятиями. В этом отлично помогает ChatGPT. Ниже приведу 5 промптов (запросов к GPT), которые помогают осваивать новые подходы и инструменты максимально быстро. Кстати, аналогичные запросы, как оказалось, хорошо работают и для обучения других ролей (QA, проджекты, продакты).

Что я понимаю под словом "освоить"? Это значит - научиться использовать на практике (либо приблизиться к этому уровню). И, за одно - понимать, почему в конкретной ситуации лучше использовать именно этот инструмент (или подход), а где стоит выбрать что-то другое.

Принципы

Перед описанием самих промптов, важно распаковать 3 важных принципа "общения" с ChatGPT.

1. Спрашивай в контексте

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

I am preparing for .NET developer job interview. Now I will send you several questions.

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

What are the most commonly used collections in C#?
What is a functional component in React?
What is "retrospective" in Scrum?

2. Задавай уточняющие вопросы-цитаты

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

Понятно, что кроме "What do you mean?" могут быть и более конкретные уточняющие вопросы.

3. Не надо читать "от корки до корки"

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

Я делаю так. Если получаю длинную "простыню" текста, то работаю с ним в 2 этапа. Сначала быстро просматриваю по диагонали (например, бегло читаю первое предложение каждого абзаца). А уже потом внимательно изучаю те блоки текста, которые четко отвечают на мой вопрос, либо, по ощущению - могут мне пригодиться.

Собственно, сами промпты

Теперь, перейдем к запросам. Примеры будут для разработчиков, однако, принципы легко адаптируются для обучения по другим IT профессиям.

1. "Common usecase" в студию!

Связь с реальной задачей здорово помогает переварить новое знание (и главное - научиться его применять на практике). Например, на job interview .NET разработчиков популярны вопросы про структуры данных. Рассмотрим LinkedList (связанный список). Об этой структуре-коллекции элементов далеко не все знают. В то же время, в ряде случаев она работает сильно лучше, чем обычный список (который List). Итак, сразу требуем у GPT типичный кейс использования, то есть в каких случаях актуально использовать LinkedList.

Common usecase for c# linkedlist with code example

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

Describe real project for such usecase

2. Какую проблему решает?

Очень важный момент, которые стоит выудить! Конечно, чаще всего, ответ на этот вопрос получаешь прямо в процессе рассмотрения common usecase. Однако, если он, все-таки, не до конца ясен, то можно спросить в лоб:

What problem does LinkedList solve?

Возможно, в случае с LinkedList ценность этого вопроса не столь очевидна. Другое дело, когда осваиваешь так называемые "design patterns" или SOLID. В двух словах - это принципы и бестпрактики, которые помогают писать высококлассный код. И тут самое главное попросить ChatGPT показать пример "до" и "после" использования (то есть плохой и улучшенный вариант). Например, первый постулат из SOLID - single responsibility principal (SRP = принцип единой ответственности):

Which problem does single responsibility principal solve? Show code before and after using it. Explain the benefits.

В ответ, помимо разъяснения (что поменялось и в чем преимущества применения SRP) получаем 2 куска кода. Собственно, первый (плохой вариант), где вся возможная логика неуклюже утрамбована в один класс UserManager:

public class UserManager
{
    public void AddUser(string username, string email, string password)
    {
        // Add user to the system
    }

    public bool Login(string username, string password)
    {
        // Handle user login
        return true;
    }

    public void LogError(string error)
    {
        // Log an error to a file
    }

    public void SendEmail(string emailContent)
    {
        // Send an email to the user
    }
}

А ниже, второй - исправленный вариант. Здесь сразу видно, как функционал аккуратно разнесен по разным классам.

public class UserManager
{
    private readonly EmailService _emailService;
    private readonly Logger _logger;

    public UserManager(EmailService emailService, Logger logger)
    {
        _emailService = emailService;
        _logger = logger;
    }

    public void AddUser(string username, string email, string password)
    {
        // Add user to the system
    }

    public bool Login(string username, string password)
    {
        // Handle user login
        return true;
    }
}

public class EmailService
{
    public void SendEmail(string emailContent)
    {
        // Send an email
    }
}

public class Logger
{
    public void LogError(string error)
    {
        // Log an error to a file
    }
}

"Code before and after" вообще крутая штука для наработки навыка рефакторинга (улучшения) существующего кода. Но это уже отдельная история. На этапе обучения важно хотя бы понимать чем "плохой вариант" отличается от хорошего.

3. Какие альтернативы? Что выбрать в конкретной ситуации?

Чтобы "объемнее" понимать технологию, полезно знать какие у нее есть альтернативы. То есть как еще можно решить задачу, для которой она предназначена. И, что еще важнее - какие критерии стоит учитывать при выборе того или иного варианта. И снова кейс с LinkedList дает очень наглядный пример:

What are C# LinkedList typical alternatives? Why should I choose it or smth else?

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

4. Как это работает "под капотом"

Сразу важная оговорка. Далеко не всегда при изучении технологии нужно понимать все ее тонкости. Например если вы .NET junior у вас вряд ли кто-то будет спрашивать как "под капотом" работает асинхронный код. Но если вы хотите копнуть глубже в изучаемый концепт, то можно это сделать таким "заклинанием":

How does LinkedList work under the hood?

Еще типичный случай, когда нам нужно лучше понять процесс. Иначе говоря - пошаговую последовательность происходящего. Это особенно полезно, если в процессе фигурирует несколько участников. Например, когда хочешь уловить, какой ритуал происходит между клиентом и сервером при JWT авторизации.

Give step by step outline (or breakdown, or workflow) of client server interaction during jwt authorization

5. Закрепляем знания с помощью "PlayGround"

Ну и наконец - вишенка на торте! Помним, что именно самотестирование (иначе говоря - active recall) "бетонирует" знания в голове. И ChatGPT вполне способен создать нам "тренировочную площадку", где мы сможем применить новые знания на практике (по сути, имитировать кусочек job interview). На примере с теми же структурами-коллекциями в C#:

Generate a playground where I need to choose an appropriate C# collection to use in a particular situation. Lets build it as a dialog, where first you send me the question so that I couldn't see the reply before I answer. And then after getting my reply, you can confirm it or correct me, explaining why my choice is good or bad.

Конечно, такой длинный запрос лень вбивать каждый раз. Чтобы сократить время, юзайте Chrome расширение Text Blaze (сохраняет текстовые шаблоны для последующего быстрого ввода). Не поленитесь потратить 5 минут на то, чтобы его установить и разобраться как работает. Оно вам еще ни раз пригодится (помимо обучения, например, при отправке "cover letter" на вакансии).

Пару мыслей "вдогонку"

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

Важная оговорка! Помните, что нередко ChatGPT даже в платной версии дает не до конца точную информацию (особенно, если речь идет о примерах кода или алгоритмах). Поэтому в идеале, чтобы разобраться в сложных (но важных для нас темах) имеет смысл использовать связку Youtube/Google/Stackoverflow + ChatGPT. Кстати, недавно нашел классную разработку от нашего одноклубника - Tubesum. Она позволяет загонять субтитры Youtube видео прямо в ChatGPT, генерировать саммари и далее уже задавать вопросы чату в контексте информации с видео.

Буду рад, если в комментариях поделитесь своим опытом обучения с помощью ChatGPT, и, конечно же - своими промптами.

7 комментариев 👇

Спасибо, очень крутая тема с обучением с Chat GPT.
Мой опыт такой:

  • Chat GPT может галлюцинировать и тут очень важно проверять его выдачу. Тут еще могут помочь Gemini у которого есть функция "Double-check response" или perplexity , который отдает ссылки на источники

  • Иногда, если что-то не понимаю, то прошу его объяснить как ребенку "explain something like I'm x years old". Часто помогает вкатиться в сложные концепты

  • У моделей вырос контекст - грубо говоря, то, сколько слов можно дать им на вход. Гугл обещает для Gemini 1.5 контекст в 1 млн токенов. Так можно какую-нибудь статью скопировать и вставить чат-боту и просить сделать саммари, задавать какие-то вопросы по содержанию

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

  • Нравятся вот эти гайды по промпингу:

https://learnprompting.org/docs/basic_applications/study_tool
https://www.promptingguide.ai/

  Развернуть 1 комментарий

@srg_za, ваш ответ по емкости на отдельную статью тянет!!!

не знал про Double-check response - завтра поиграюсь

perplexity , который отдает ссылки на источники

кстати да - иногда хочется понимать, откуда GPT вытянул ответ

"explain something like I'm x years old"

отличная мысль! Режим "Ричарда Фейнмана")))

У моделей вырос контекст - грубо говоря, то, сколько слов можно дать им на вход. Гугл обещает для Gemini 1.5 контекст в 1 млн токенов. Так можно какую-нибудь статью скопировать и вставить чат-боту и просить сделать саммари, задавать какие-то вопросы по содержанию

сейчас как раз пилю pet-тулзовинку, чтобы сделать максимално "seamless" вот этот процесс задания куска текста из видоса в качестве контекста

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

подозреваю, что еще и диалоги с ним тематические имитируете. Мне кажется, имитация реальных ситуаций - одна из самых сильных фич! Еще бы превратить это в seamless voice interaction (но скорее всего такие решения уже имеются)

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

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@apris, спасибо!

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

На deeplearning.ai от легенды Andrew Ng там рядом с видео открывается интерактивный редактор кода на Python и можно его менять и запускать сразу же

Большой курс на Coursera с хорошими оценками и отзывами

  Развернуть 1 комментарий

@deFINE, да это было открытие для меня, что на мобилке можно голосом с ним общаться. Я так не только учусь говорить по французски, но и с ребенком просим сгенерировать сказки. Дочка говорит "хочу как щенячий патруль спасает колобка" и он по русски, со смешным акцентом читает сказки 😁
Еще находил вот такой стартап https://www.speak.com/ , но не успел попробовать еще. Но кажется, такого же можно добиться и в обычном приложении Chat GPT с правильными промптами

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@srg_za, мы кстати делали их аналог для Deutsch. Кому понадобится гостевой доступ, дайте знать.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб