Act as a developer with 100 years of experience: как использовать AI в работе на 100%

 Публичный пост
25 января 2024  7557

Всем хой!

Я провел 10 интервью с софтверными инженерами, которые активно используют AI утилиты в работе, начал внедрять AI в работу своей команды, провел 10+ часов пейринг сессий, прочитал множество статей, и сегодня я расскажу, что же я узнал. А узнал я охренеть сколько всего!

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

Потом дам практические советы.

А те, кто дочитают до конца и поставят класс, найдут там 3 детально описаных юзкейса.

TL;DR

Почти половина девелоперов пользуется AI редко или никогда. Те кто говорит, что пользуется активно, по факту используют его, по моим ощущениям, на 20-30% (никто же не читает документацию!).

Джуны пользуются больше сеньоров, это помогает им быть на ступень выше.

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

Call to action

Прежде чем начнем, буквально минуточку вашего внимания

Если вы пишите код или связаны с IT:

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

Если вы руководите IT бизнесом или командой разработки от 5 человек

Давайте пообщаемся, хочу задать вам несколько вопросов, я расскажу о внедрении AI в команду.

Как я проводил исследование

Опрос

Начал я свое исследование с того, что задал вопрос в чате Вастрик.Тех, и уважаемые господа оставили под ним свои голоса.

Больше половины 58% отметило, что пользуется ChatGPT и Copilot, что в целом достаточно много, но потом выяснится, что это использование ограничено только несколькими юзкейсами.

Меня еще удивило то, что только 3% выходят за рамки ChatGPT и Copilot, хотя каждый день выходят все новые и новые утилиты. Позже респонденты подтвердили, что информационный шум слишком сильный, такое колличество продуктов сбивает с толку.

Интервью

Данные обнадеживают, будет легко найти людей пообщаться, подумал я. Но я забыл с кем имею дело - программистами, не самыми общительными ребятами.

Правда, вы чего такие стесняшки? Я вам как нанимающий менеджер говорю - софт скиллы важнее хардовых, начинайте уже общаться. Но мы тут не об этом.

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

Пейринг сессии

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

И о чудо! Инсайты полелись рекой, начали появляться гипотезы и тут же проверяться, вырисовались очень конкретные юзкейсы.

Это тот формат, который я продолжу проводить дальше.

Инсайты

Утилиты

Как уже было понятно из опроса, люди в основном пользуются Copilot(и встроенным в него чатом) и ChatGPT отдельно.

Один респондент рассказал про опенсорс плагин для IDE - Genie, который появился раньше Copilot, в него можно встроить свой токен от OpenAI и делать примерно тоже самое, что с Copilot, только без автокомплита. Плагин поддерживает гораздо больше настроек и кастомный промптинг, чем Copilot, но сейчас проект скорее мертв.

Другой респондент рассказал, что у них в компании запрещено пользоваться публичными моделями, плюс Copilot не дает им необходимой гибкости, и они пилят свое решение для переписывания легаси кода и используют энтерпрайз версию chatGPT от Azure.

У себя в команде мы протестировали еще утилиту CodiumAI для написания тестов. По сравнению с Copilot она гораздо лучше справляется, но об этом позже.

Джуны vs Старички

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

При этом от практикующих синьоров я слышал фразы, что для них Copilot - это "джун, на которого можно скинуть тупую работу"

Я люблю программировать

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

Кстати, многие сказали такую фразу, что они не используют Copilot для написания базовой логики, ее легче написать самому. Имеет место быть, но еще предстоить проверить с лучшим промптингом.

По поводу психологических причин, не хочу говорить за всех, но я рефлексировал на тему "почему меня бесит хайп вокруг AI", и пришел к тому, что я просто боюсь. Боюсь, что он действительно хорош, не устает, не выгорает и очень дешев.

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

Думаю, нам еще предстоит период морального принятия AI.

Обучение

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

Кто-то использует chatGPT как персонального ментора - учится по видео, если что-то не понятно, задает вопрос chatGPT для дальнейших разъяснений.

Или еще можно валидировать собственные мысли и предположения, например архитектурные решения, давая контекст chatGPT и пытаясь получить такой же ответ.

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

Политика компаний

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

Также Microsoft предлагает сервис Azure OpenAI Service с теми же моделями, но гарантирующий 99.9% availability time и дающий больше гарантий по безопасности и конфиденциальности данных.

Одна крупная компания, из тех с кем мне получилось поощаться, пишет свои внутренние утилиты для программистов как раз на Azure моделях.

Стартапы же в своей массе вообще никак не озадачиваются вопросом AI, ни регуляцией, ни внедрением.

Я планирую отдельно пообщаться с юристами по интеллектуальной собственности, чтоб узнать оправданы ли опасения, и как их минимизировать.

Каждый использует по своему

Из-за того, что компании никак не озадачиваются вопросом внедрения, а программисты сами не любят читать документацию, каждый использует тот же Copilot по своему.

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

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

Я субъективно оцениваю утилизацию функций AI в районе 20-30%

Перформанс буст

Несмотря на то, что AI утилизируется не наполную, он дает большой буст к производительности.

Реальные цифры замерить очень сложно, поэтому даю субьективные оценки как есть.

"Рефакторинг кода - +20-25% точно"
"Тупая работа с кодом - Очень много, +70-80% точно"
"Скорость написания кода увеличилась в 2 раза, отладка кода в 3 раза"
"На 70% экономит время при переписывании легаси кода на новую архитектуру"

От себя добавлю, что мы проводили эксперимент по написанию документации по существующему коду. Мы потратили 2 часа, из которых 1 час проводили разные эксперименты, написали 3 больших документа. Человек, который выполнял задачу сказал: "Если бы я сам писал доку, за 2 часа я бы еще возился с первой, качество было бы хуже, и, вообще, я терпеть не могу писать доки"

Абьюз

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

Излишние комментарии и "оптимизации" также забивают конктекстное окно. Машине не нужно объяснение, что делает этот if-else, но контекст формируется блоками кода, и излишние комментарии попадут в промпт. А Copilot принимает только 6000 символов.

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

Мы, кстати, тестируем гипотезу, что если в коде уже содержатся осознанные комментарии, то это помогает ассистенту самому писать более осознанные комментарии.

Информационный шум

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

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

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

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

Ниже приведу советы, которые закроют 80% вопросов к копайлоту

Используй промптинг

Читаем для начала оригинальную статью.
How to use GitHub Copilot: Prompts, tips, and use cases

Оказывается, если в начало файла положить детальное описание задачи, что вы делаете, то автокомплит справляется лучше. Тоже касается и чата.

Для сложных задач промптинг особенно важен. Нужно как можно точнее описать задачу. Наш промпт на написание документации по коду в итоге составил 2200 символов.

Особенно работает, если "приправить" промпт бранными словечками типа "Avoid lengthy descriptions and marketing-style bullshit", что сразу заставило его писать по-человечески

Управляй контекстом

Контекст - самый главный ресурс, нужно уметь им управлять.
Для этого сначала нужно прочитать How GitHub Copilot is getting better at understanding your code

Можно принудительно добавлять файлы в контекст чата и держать только нужные вкладки открытыми. И почаще открывать новый чат, чтоб обнулять контекс. В долгих чатах Copilot начинает забывать начало.

Разделяй большие таски на части

Думаешь, что модель сходу за тебя напишет длинную документацию или целый класс? - Нет. Чем короче аутпут, тем он точнее.

Составь описание задачи целиком, а потом разбей на шаги, можно даже попросить chatGPT самой написать за тебя шаги, если очень лень. А потом просишь выполнить конкретный шаг из большой задачи.

Повторяй запрос

Бывает такое, что chatGPT выдает отличный ответ с первого раза, а бывает, что нужно перезапустить 10 раз, не меняя промпт.

Строй цепочки мыслей

Мы протестировали утилиту CodiumAI, которая специализируется на написании тестов, она справляется со своей задачей гораздо лучше, чем Copilot, потому что использует итеративный подход.

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

Мы пошли еще дальше в своей лени.

CodiumAI, как и Copilot, плохо работает, если не дать ему пример теста. Мы сгенерировали первый тест Copilot, привели к нужному нам виду и скормили CodiumAI как пример!

Outro

Спасибо всем, кто дочитал.
Как и обещал, в конце описание 3х юзкейсов, которые мы обкатали и уже внедрили в свой проект.

Написание документации по коду
Написание тестов
Рефакторинг кода

А вообще, мы создаем портал, где структурируем информацию по юзкейсам и разным утилитам, придумываем и тестируем гипотезы.


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

И в особенности, мы ищем бизнесы, которые готовы внедрять у себя проверенные практики.

Присоединяйтесь к нашему чату, чтоб не пропустить обновления

Большое спасибо всем, кто откликнулся и законтрибьютил свои знания в проект.

Ну и конечно же, жду вас в комментариях!

Аватар Roman Kagan
Roman Kagan @roman09
Punk, СТО, IT Project ManagerOmniwire
📍Таллинн, Эстония

Коротко обо мне

Я - Рома. Живу в Эстонии. Последние 5+ лет работаю в роли CTO в финтехе(традиционные финансы) на рынках ЕС и, в последующем, США. Почти запрыгнули на раунд А, прошли технический аудит, не прошли финансовый. Руководил командой из 30 человек. Писал фронтенды, бекенды, авто/нагрузочные тесты, смартконтракты, торговых роботов, криптокошельки, банки и тд.

Мои лучшие воспоминания:
⛰️ Посвятил маму и сестру в хайкинг в Черногории. У всех был полный восторг.
🧊 Лизнул ледник в Норвегии, до того, как они окончательно исчезнут. Получилось только со второй попытки.
🌵 Чуть не умер от жажды в Аризонской пустыне. Если написано по 4,5 литра воды на человека, то это не просто так.

Майню инсайты, веду канал, залетайте

https://t.me/+yVdWxplamTExMDUy

Контакты

TG: @romankaganov
IG: https://www.instagram.com/kaganovroman/
LI: www.linkedin.com/in/roman-kagan-omnibek/

Связанные посты
79 комментариев 👇
Иван Бурнатов градостроительное проектирование 25 января в 16:58

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

Что-то более-менее сложное он может формально накидать, но обычно общую структуру проще накидать самому псевдокодом, чем словами все это многословно описывать и по несколько раз исправлять его.

Ну и если ты хорошо разбираешься в вопросе, то проще уже самому доделать, чем 20 раз его поправлять

В малопопулярных сферах (например GIS) или на малопопулярных языках он часто пишет хрень

Так-то конечно полезная штука для своих задач. Мне очень понравилось, нужно было в екселе взять текст из ячейки, убрать мусор и поместить в буффер обмена. Простая задача, но пока вспомнишь как там с буфером на VBA работать...а тут написал запрос в строку, и получил сразу готовый максрос

P.S. я пользуюсь ChatGPT через телеграм бота, там задержка несколько секунд (5-10), иногда быстрее загуглить, чем его спрашивать и дожидаться ответа. А когда напрямую работаешь с ChatGPT там какая скорость отклика?

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

А когда напрямую работаешь с ChatGPT там какая скорость отклика?

@orbit, если всё работает штатно, то почти сразу начинаешь видеть, как он печатает ответ.

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

@orbit, да так же выходит, просто ответ выдается потоком и пока читаешь первые строчки -- чат дописывает остальное.

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

Как опознать человека, пользующегося chatgpt: он сам вам об этом скажет. А если вы тоже пользуетесь, то он скажет, что вы делаете это неправильно.

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

@civilian, не читал, но осуждаю?

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

@roman09, почему, я всё прочитал, и совсем не осуждаю.

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

@civilian, я, кстати, тоже бесился не так давно с этой темы, но потом порефлексировал и понял, что я просто боюсь. Признался себе, и, знаешь, прям хорошо пошло.

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

@civilian,

Как опознать человека, пользующегося chatgpt: он сам вам об этом скажет

ну вообще с учетом того, что всеми продуктами поначалу пользуются энтузиасты, вроде бы разумно получается, что они пытаются и остальных приобщить

  Развернуть 1 комментарий
Yury Kuznetsov DevOps, недорого, самовывоз 25 января в 18:09

А статью руками писал, или тоже чат-ГПТ? А то я думаю, читать полностью или попросить выжимку сделать

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

@FEARmeR, руками, это и так уже выжимка десятков часов работы, думаю, стоит прочитать

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

@FEARmeR, а может автор и есть чат-ГПТ и его не существует?)

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

@candy, я, кстати, еще довольно неплохо умею и в телеграм писать https://t.me/+l3R88RHbpSIyNmVi

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

@roman09, чтобы удостовериться что вы человек, пожалуйста причините вред другому человеку, или допустите, чтобы ваше бездействие причинило вред другому человеку.

  Развернуть 1 комментарий
Oleg Gromov Пишу коды, иногда некоды, предпринимаю 25 января в 18:55

Начал тыкать ChatGPT и Bard где-то в начале прошлого года, из любопытства, был очень впечатлён.

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

Пришёл к выводу, что это "магическое манипулирование текстом" не решает реальных задач. Ну за редкими исключениями.

Примеры: для нормальных ответов на вопросы тебе скорее всего нужен RAG и хорошо подготовленные данные, для осмысленной генерации кода тебе нужно дофига контекста (тот же RAG + нетрививальные алгоритмы выбора правильных кусков). Только для болтовни в чатах поддержки подходит, и то бесит 😁

Да, я изредка использую ChatGPT (в основном API playground и API напрямую), чтобы разобраться в чём-то мне неизвестном. Например, у библиотеки может быть отвратительная документация — и нужный метод иногда можно найти даже без подкладывания исходников в промт. Но иногда и это не работает, достаточно начать его спрашивать про какой-нибудь clojure.

Что касается использования в работе, пришёл к выводу, что как бы круто всё это ни выглядело на поверхности, по факту "AI пишет код вместо меня" — это скорее такой wishful thinking, чем данность.

  1. Сначала ему нужно долго объяснять, что тебе надо ("промтинг"), разбивать задачу на мелкие куски-функции.
  2. Потом думать, какие файлы подсунуть в контекст и как это сделать. А ещё и контекст 6к символов у Copilot — это ошибка, или и вправду такой позор?
  3. Дальше пытаться понять, что за херню он сгенерил, если это не какой-то тривиальный boilerplate вроде списка API-роутов или типового реакт-компонента
  4. Когда оказывается, что сгенерённое работает, но не всегда, а ещё ты не понимаешь, когда оно не работает — т.к. не писал код сам, то начинаешь либо разбираться, либо просить переписать.

Увеличение "производительности", а скорее только скорости генерации текста — она только в начале, и то постараться надо.

Да и вообще-то на 1-м этапе, если и правда хорошо подумать, всё уже можно сделать самому. Да, наверное код будет написан "быстрее", но честно говоря, никогда не встречал проблем со скоростью печати.

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

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

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

@olegka, так а копайлотом пользовался? он как раз и запускает RAG по твоей кодовой базе. И они очень много работают над оптимизацией выбора контекста.

Я приложил несколько юзкейсов, я лично, вместе с программистом через это проходил.

Вот взять кейс написания документации по существующему коду.

Да, мы написали огромный промпт на 2300 символов, но в итоге сгенерили просто охрененную документацию сразу по нескольким процедурам.

А потом также отрефакторили.

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

Еще был один юзкейс, о котором я не писал, у IDE Cursor есть фича, от которой у меня отвалилась жопа - получаешь в консоли ошибку, кликаешь кнопку "Auto debug" и он идет цепочкой мыслей по файлам и находит багу. Пока правда не удалось прям плотно поюзать.

Короче, я считаю, что за этим точно будущее, можно воспринимать ее в штыки, а можно пробовать внедрять. Абсолютно точно я скажу, что джуны с копайлотом уже дышат в спину седовласым синьорам, не зависимо от того, что об этом думают последние.

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

@roman09, пользовался, конечно, но вот именно текущая ситуация с поиском необходимого контекста меня вообще не впечатляет.

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

Мне попросту не удаётся так его настроить (что делать надо, файлы открывать, писать длинные комментарии?), чтобы получилось проще, быстрее и корректнее (причём он не может сделать ни одного из 3), чем подумать самому и сделать.

Повторюсь: написать код по сигнатуре функции + комментариям он вроде бы может. Так себе, но может, особенно если дописывать небольшими кусочками. Но решить ту задачу, где мне реально нужна, грубо говоря, вторая голова — нет. А функции я и сам написать могу.

Я допускаю, что я его неправильно готовлю и/или его ещё улучшат. Но пока что у меня меня была идея (вероятно, перекликается с тем, что делаешь ты) научиться весь контекст небольшого проекта загружать в промт и, через колдовство с промт-инженирингом и множество попыток, пытаться получить решение.

Что, опять же, исходя из моего ограниченного опыта, разбивается об необходимость выбирать из предложенных решений, что примерно равнозначно тому, чтобы подумать самому.

Наверное это можно использовать для вдохновения, когда зашёл в тупик, это да. Забыл упомянуть в комментарии верхнего уровня — иногда "галлюцинации" полезны.

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

@roman09, про написание документации — кажется, более валидный аргумент, но я лично мало документации пишу что в своих собственных проектах, что по работе. И точно не в стиле swagger-доков, где вот тебе метод с сигнатурой — сгенерируй-ка мне описание на человеческом языке.

Кажется, что это менее "интеллектуальная" задача, которую LLM решить могут — пускай не очень творчески. Написать хорошую, вдохновляющую, объясняющую основополагающие принципы документацию всё равно сложно.

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

@olegka, ну не, тут ты слишком много от него хочешь. это же джун.

Я думаю тут RAG недостаточно, тут именно должна быть какая то цепочка мыслей, состоящая из множества запросов.

Нечто похожее я видел как раз в автодебаге от Cursor, у меня челюсть упала, если честно.

Кстати, ты же в курсе, что к копайлот чату можно прям принудительно файлы прикреплять в контекст правой кнопкой мыши или через плюсик в чате. У меня вот коллега пол года пользовался и только недавно нашел, когда я начал про контекст говорить?

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

@olegka,

"магическое манипулирование текстом"

В точку. Проблема в том, что LLM преподносятся как разумные машины, в то время как они по определению языковые модели. Штука, которая очень хорошо умеет говорить на основе говорения других людей. Когда она сталкивается с проблемой, про которую не говорил никто — её полномочия всё.

Бард же, после пристального рассмотрения в плане написания кода совсем слаб. Кажется правда он про другое, они собираются им заменить google.com. Посмотрим.

В итоге синьору пока LLM серьёзной помощи и буста предложить не могут, только джунам. Ну либо синьорам в зоне джуновых знаний.

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

@skatromb, Вот статья про то, что математики используют ЛЛМ для решения математических задач, которые не решаются теоретически, а решаются перебором. Они путем миллионов запросов к ллм просят сгенерировать функцию решения на питоне и среди миллиона выбирают лучшую. Помогло значительно продвинуться в решении некоторых проблем, в которых не могли продвинуться десятки лет.

https://habr.com/ru/companies/ods/articles/781138/

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

@roman09, Эм, ок, но какое это имеет отношение к моему реплаю?)

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

@skatromb, прямое, ты говоришь о том, что машина не может придумать то, о чем еще никто не говорил. Вот привожу факт, что может.

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

@roman09, Соснительно, но окэй… все же довольно синтетический пример, имхо

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

@skatromb, не обязательно ведь понимать код который пишешь... Можно его писать итеративно, эволюционным методом, опираясь на сообщения компилятора, гуглеж и результат запуска кода. Я иногда так делаю, хотя потом надо провести рефакторинг.
В принципе ЛЛМ сейчас умеют все это, особенно если можно легко измерить результат выполнения кода по шкале ок/не ок в цифровом виде.

Просто им нужна обвязка в виде анализа вывода компилятора, анализа результата, управление более высокого уровня (как правильно поэтапно выполнять план работ)

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

Только пока наверное это сложнее, чем взять нормального программиста

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

Спасибо большое, выглядит, как знак, который я ждала, чтобы начать в эту сторону лежать))

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

Мы сгенерировали первый тест Copilot, привели к нужному нам виду и скормили CodiumAI как пример!

Так а дальше-то что было?🤔

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

😱 Комментарий удален его автором...

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

@faust, дальше Codium уже сгенерировал отличные тесты по примеру. копайлот/чатжпт работает намного лучше, если дать ему пример.

Он даже может так более сложные задачи решать, например, рефакторить большие куски кода

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

Я плачу долор за копайлот, ни разу не пожалел.
Но.
Всё всегда упирается в контекст. Любой проект обмазан абстракциями, и вот тут все тулзы начинают буксовать. Если нужно что-то выше, чем примитивы, подсказки будут релевантными только если вот в этом же файле чуть повыше есть точно такой же юзкейс. Смысл в помощнике, который в лучшем случае просто перепутает аргументы в вызовах, а скорее всего придумает тебе несуществующих методов? Казалось бы, вот все исходники, индексируй, обучайся - но он даже на путях в импортах галлюцинирует🤷

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

@faust, об этом же пишу выше, согласен.

А если ещё и что-то чуть более редкое используется, чем питон или джаваскрипт и стандартные либы, то это труба.

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

@faust, так а как ты управляешь контекстом? ты научился ему принудительно файлы добавлять?

Я добавил юзкей про рефакторинг кода, сначала один файл отрефакторил человек, потом по аналогии машина - без нареканий. Просто говоришь ему делай по аналогии с файлами A, B, C

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

@roman09, там где рефакторинг реально нужен, контекст строится не из 1 файла, а из N+1 файлов и анализировать перед рефакторингом надо именно N+1.
Если код поделен на файлы по 1000+ строк - да, LLM можно скормить файл и попросить задизайнить это все в требуемом стиле/парадигме.
Но в остальных случаях - контекстного окна LLM мало для вменяемого анализа кодовой базы.
имхо в большинстве ентерпразных сервисов с накопленным техдолгом могут быть сотни файлов с буквами, все они тесно связаны, одни и те же абстракции могут быть протянуты через весь код. LLM тут может помочь только как валидатор гипотез как это говно расчищать.
короч ПОКА не сильвер булет.
Но думаю когда то скоро станет почти сильвер-булет в этом вопросе.

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

@nicolascagelegend, Прошу прочитать оригинал гитхаба, как он строит контекст.

Я не говорю про один файл. У копайлота есть фича, где ты можешь принудительно подцепить сколько угодно файлов.

При чем тут файлы по 1000 строк?

Я в статье пишу, что девелоперы не читают документацию, говорю «гайз, прочитайте вот эти две небольшие статьи в оригинале».

И все равно ты пишешь про какой то один файл…

Если у вас сотни зависимых файлов, то мне очень жаль. Может самое время посмотреть на ИИ для рефакторинга?

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

Мне понравилось использовать гпт при прототипировании, придумал гипотезу, быстро накидал код, убедился что говно/работает - пошел писать стори на разработку. У меня последний год абсолютно менеджерская работа где руки до кода доходят раз в квартал, а то и реже, и вот тут гпт мне помогает быстро что-то написать, но важно понимать, это СТРОГО не продакшен реди код, это чисто прототип который надо переписать, и лучше с нуля.

Еще очень заходит когда надо сделать что-то, что не делал уже давно, например написать средней сложности sql запрос. Даешь чату схему бд, можно в двух словах, пишешь че надо, получаешь запрос который надо слегка поправить. Минус тут, что надо быть в теме и понимать где он галлюцинагирует.

Установил себе гпт в Raycast и использую как стековерфлоу, консоль высрала ошибку которую я вижу первый раз - cmd+space, tab, cmd+v - сразу ответ «чел ну ты еблан pod install сделай але» в 90% случаев решение сразу решает проблему, это буст по времени очень хороший, раньше такая дроч могла отнять часы, а сейчас минуты.

  Развернуть 1 комментарий
Иван Бурнатов градостроительное проектирование 26 января в 05:29

Еще добавлю, с этими ИИ ассистентами часто на первый взгляд "ВАУ, КАК ЖЕ ОФИГЕННО!!!", а когда присмотришься - ну хрень же какая-то :)

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

@orbit, реальная польза наступает, когда проходят эмоции и начинаешь относится к этому спокойно.

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

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

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

@fonbrot, можно попейриться со мной, я на практике расскажу и покажу.

А, вообще, когда припрет, программисты, вроде, умеют читать доки.

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

Copilot - это "джун, на которого можно скинуть тупую работу"

По ощущениям, было больше похоже на «очень тупой джун, которому нужно объяснять по несколько раз, чего именно ты от него хочешь».
Дальше присваивания аргументов к полям data-класса в Kotlin Copilot’а не хватило. Более того, на попытку сделать именно так, как его рекламируют - сделать пустое тело функции + комментарий, что она делает, Copilot немножко подумал, и выдал мне потрясающее тело функции: TODO().

То же и с написанием документации - если я уже знаю, что мне нужно в ней, я быстрее это сделаю сам, чем пытаться заставить ChatGPT написать это так, чтобы это было со смыслом и читаемо. Если я не знаю, то я додумываю, или оставляю блоки TBD.

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

@alexwoodblock, иногда его нужно перезапускать, я об этом и пишу. У копайлота еще есть функция вывода 10 аутпутов на выбор. Пользуешься?

Сам Гитхаб показывает такую статистику принятия автокомплита - 30%

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

@roman09, 10 вариантов не пробовал, про перезапуски - я пытался его и так, и так заставлять что-то более полезное генерировать, но полезного было мало по итогу.

ИМХО, чем дальше по шкале "сеньорности", тем меньше от него пользы, т.к. уже просто не пишешь такое количество кода, больше его читаешь, или планируешь, как напишешь, после чего остается просто следовать диздоку. В таком случае конкретно написание кода занимает не настолько большое количество времени, чтобы Copilot или ChatGPT давал какой-то удивительный выигрыш. Больше пользы получается от тренировки скоростной печати.

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

@alexwoodblock, для этого у меня тоже есть картинка.

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

Моя задача как раз найти такие юзкейсы и их описать

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

@roman09, ну, для разработчиков начального уровня да, это хороший инструмент - чуть более умный и отзывчивый поисковик. Но чем дальше, тем меньше он помогает, только если нужно какую-то воду написать, которую тебе самому лень. Дизайн-документы, планирование, технические решения - это все не отдашь AI. А если отдашь, то столько же времени потратишь на то, чтобы проверить, не ерунда ли получилась.

Пожалуй, в чем он может быть хорош за счет того, как он устроен - это когда ты не знаешь, что именно из технологий подобрать. Тут его природа «вобрать в себя кучу всего - замиксовать - выдать наружу» будет очень полезна. Если бы в 2016 году у меня был такой инструмент, мы бы в одном стартапе не делали троллейбус из буханки ржаного трекер геоданных в реальном времени на PostgreSQL + spatial extensions, а взяли бы просто Tile38.

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

Для меня чат GPT является просто Гуглом на стероидах, большинство ответов на вопросы можно найти в несколько раз быстрее, как и ответы на дополнительные вопросы
Раньше нужно было загуглить 1 вопрос, найти какие-то зацепки и ключевые слова и продолжить гуглить уже зацепки и ключевые слова(и так по кругу, пока не найду все ответы, тк редко все ответы в одном месте). В общем приходилось открывать +-15 вкладок и разных сайтов. Сейчас, задаю вопросу чату и почти всегда сразу же нахожу ответ на вопрос. По сути это просто огромная хорошая документация.
В общем просто очень удобно.

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

В итоге продуктивность выросла. Это как перейти с плохого компьютера с слабым интернет, на хороший компьютер с хорошим интернетом. Разница большая, но сверх продуктивным ты не становишься. Становится просто комфортнее и приятнее работать.

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

@RomanGrunin, кстати, про комфортность и приятность пишет сам Github, они Employee satisfaction выводят на первое место оценки продуктивности команд. Писал тут об этом https://vas3k.club/post/22464/

  Развернуть 1 комментарий
Evgeniy Petukhov Фулл-стек TypeScript разработчик 26 января в 09:51

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

И в подавляющем большинстве копайлот-чату не под силу исправление синтаксических ошибок.

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

@evgeniyp, Моя статья как раз о том, что общее впечатление неправильно.

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

Я видел, как люди используют его через одно место, а когда во время пейринг сессии говоришь им делать по другому. Они такие - «ого, нихрена себе», ого, а я пользуюсь копайлотом полгода, но никогда не использовал эту фичу.

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

Вам в спину уже дышат 20 летние джуны, которые не видят программирования без копайлота.

Мне один мидл признался «у меня на работе сеньоры попробовали, им не понравилось, а я втянулся. И я не хочу чтоб они учились, для моего босса я выгляжу как сеньор»

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

@roman09, сеньористость - это не про код, а про коммуникативность, надежность (reliability), ответственность и инициативность

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

Используем AI в EdTech стартапе. В основном для генерации контента и анализа эффективности креативов.

На рынке много классных инструментов. Например, для генерации картинок просто топ Leonardo.ai (есть бесплатная версия)

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

@rawel, что такое и как делается "анализ эффективности креативов"?

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

@skywinder, загружается в AI пул рекламных текстов + расшифррвка картинок, их метрики (ctr, cr, доход и тд).

В итоге:

  1. Находятся лучшие креативы. А также корреляции между метриками.
  2. AI может написать похожие рекламные тексты на успешные и/или сгенерировать картинки.
  Развернуть 1 комментарий

Слушай, а у меня такой вопрос - какие-нибудь тулы умеют загружать в свой контекст какие-то более-менее крупные куски кода? Ну там, например, проект на две тысячи файлов.

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

@ganqqwerty, пока такого не видел. Но они же все используют модели от OpenAI, те имеют одинаковое ограничение по длине инпута. Все используют RAG по проекту. А дальше каждый по своему оптимизирует какие куски добавить в контекст.

Мне кажется следующий шаг - краулеры по проекту. Я такое видел в IDE Cursor, фича автодебаг, когда оно цепочкой мыслей идет из файла в файл, прям как человек, и ищет нужное место в проекте.

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

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

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

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

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

Жаль в исследовании нет ничего про код ревью (code review). Как кодомакака с большим опытом я способен наговнякать рабочее решение в 99.99% случаев без посторонней помощи. При этом хотелось бы получать фидбэк, особенно когда пишешь в соло без команды других разработчиков.

В идеальном мире, у AI есть мудрость всего гитхаба и понимание контекста проекта. Так что он может указывать мне на тупорылые решения, неконсистентный нейминг или уязвимости. Еще было бы здорово бить по рукам в тех местах, где я вместо использования чего-то готового и подключенного в проект, наизобретал своих велосипедов.

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

@petter, Вообще у гитхаба вроде есть такая фича, либо я видел другие решения на эту тему.

Не успели пока протестить.

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

@petter, мне тоже кажется, что писать код любят многие, а вот если бы кто-то за нас код читал, вот это было бы полезно

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

@petter, я часто использую Copilot именно для ревью. Прошу его прочекать код на предмет следования best practices, наличия потенциальных уязвимостей и неоптимальных мест.

Обычно Copilot выдает годное ревью с подробным описанием каждого замечания.

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

Порекламирую несправедливо неизвестный Phind.com. Услышал о нём, как о годной LLM для кодинга на канале «Запуск Завтра».
Отвечает на голову лучше Bard, Perplexity, субъективно, даже лучше OpenAI ChatGPT (в бесплатной версии по крайней мере). Главные фичи:

  • умный! Пока не замечен в том, чтобы писать откровенную фигню
  • редко галлюцинирует, предпочитая горькую правду сладкой лжи
  • даёт ссылки на источники
  • работает в РФ без VPN (по словам канала «Запуск Завтра»)
  • бесплатный
  Развернуть 1 комментарий

@skatromb, а ты регулярно им пользуешься? я просто открыл их блог, там две статьи от осени 23 года, что они бьют Гпт-4 по HumanEval тесту, но после этого и ГПТ-4 улучшил результат.

Пока не пойму проект живой или нет

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

@roman09, нечасто, но последние пару месяцев пару раз в недели заходил: в него, бард и перплексити, задавал одинаковый вопрос. Phind оказался самым полезным (вопросы по разработке были).

Проект живой, недавно у них была 8 версия модели, теперь 9 релизнули

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

@skatromb, Phind оказался максмально удобным для изучения новых фреймворков.

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

@skatromb, занятная штуковина)). До этого опыта с ChatGPT я не имел и решил побаловаться с ним — захотел заставить ИИ нейросеть написать мне лексер и парсер для OrgMode файлов на C с применением flex и bison для простенького случая когда у нас есть только headlin'ы и теги к ним.

Нюанс был в том, что я такой лексер и парсер уже сделал, закопавшись по уши в документацию по flex и bison — так что предметная область была мне уже известна и в какую сторону толкать этот Phind было понятно.

Начало вроде было хорошим — дал нейросети то, с чего сам начинал, и она выдала мне базу которую я и так узнал всего за десяток минут гугления и чтения документации:


А вот потом началось веселье. Такое ощущение, что ты общаешься со студентом, который бухал весь семестр, не появлялся на парах, прочитал за ночь методичку и пытается что-то придумать, чтобы не мытьём так катаньем получить зачет)
Сначала эта штука некорректно понимала где тег в headline расположен, когда я ей это разьяснил — начала генерировать кривые регулярки, которые не матчились на реальный синтаксис OrgMode. Под конец, эта штука вроде наконец смогла выдать что-то похожее на реальность, но зачем-то воткнула лишний символ двойных кавычек в регулярку для тегов:

Попросил его убрать эту кавычку — а он мне обернул всю регулярку в кавычки, что согласно документации на Flex превратит всю регулярку в строковый литерал:

‘"[xyz]\"foo"’
    the literal string: ‘[xyz]"foo’ 

Потребовал исправить это — Phind наглухо повис :-D

Честно говоря, так и не врубился, какая тут может быть польза для программистов. Как по мне, самостоятельное чтение документации и экспериментирование на минимальном тестовом примере (как я и писал этот лексер с парсером) — куда как быстрее (не говоря уже о полезной тренировке для мозга).

Если случайно не изобретут настоящий ИИ, то нейросетями программистов похоже ещё не скоро заменят)

P.S. Хотя, может быть если бы я успел запушить свой код в репозиторий на GitHub, то эта штука могла бы найти мой код и выдать мне его. Других парсеров на C для org-файлов на основе lex/flex/yacc/bison в Интернете нет, я уже искал — вот оно ожидаемо и не справилось🤷‍♂️

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

@evgandr, Возможно, твоя задача достаточно редка и джипити не читал про неё. Мой посыл был не в том, что эта штука умеет решать любую задачу за тебя, а что в сравнении с остальными джипити онв выглядит достойно. Но если пытаться решать ею задачи, которых в интернете никто не решал (или они достаточно редки), все эти модели работают плохонько

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

@evgandr,

она выдала мне базу которую я и так узнал всего за десяток минут гугления и чтения документации

Я думаю ты как минимум на порядок занижаешь время на гугление и чтение документации. Ну или у тебя какая-то мелкая и супер-простая библитека

Мне чатГПТ сильно помог разобраться с GDAL, там сам черт ногу сломит в документации. Мне например даже в голову не приходило, что там можно итерировать по кускам мультиполигонов, а куски по составляющим их линиям, т.к. там есть функция что-то вроде GetPolygon, GetLine

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

Нормальные примеры для моего случая где-то были в интернете, но каких их найдешь через гугл? Я не смог, весь SO пролистал.

Как по мне, самостоятельное чтение документации и экспериментирование на минимальном тестовом примере (как я и писал этот лексер с парсером) — куда как быстрее (не говоря уже о полезной тренировке для мозга)

Если ты делаешь что-то сложное и сильно зависящее от этой билиотеки, то возможно. И то, он поможет быстрее разобрать конкретные примеры, объясняя не очевидные места.

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

То, что кавычку тебе не поправил - ну мелкие правки проще руками сделать. Иногда заглючивает этот ИИ, это да
Нужно немного приспособиться, не воспринимать его как интеллект, а как умную систему поиска

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

@orbit,

Я думаю ты как минимум на порядок занижаешь время на гугление и чтение документации. Ну или у тебя какая-то мелкая и супер-простая библитека

Не, flex с bison ни разу не мелкие и супер-простые, заявляю это угрохав пяток-другой вечеров на написание своего парсера)

У меня просто третьей ссылкой на запрос «how to use flex and bison» в duckduckgo вылезла вот эта презентация, которая за десяток минут была пролистана для понимания в какую сторону можно копать и что можно писать в коде (для начала).

Первой ссылкой в поиске шла ссылка на страницу O'Reily, которую я проигнорил потому что там обычно денег хотят). Вторая ссылка была как раз на StackOverflow — но вкладку с ним я достаточно быстро закрыл — там был один-единственный ответ, который не давал понимания базы про токены и описание грамматики. Просто какой-то чувак вывалил свой код, описал как вызывать нужные утилиты и получил отметку ответа на своём комментарии — типичный StackOverflow.

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

Ну, тут есть нюанс. В моём случае это был хобби-проект, на который было не жалко тратить время)

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

@evgandr,

вылезла вот эта презентация,

Ну значит тебе повезло! Это не так уж часто бывает, что такие качественные презентации есть

В моём случае это был хобби-проект, на который было не жалко тратить время)

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

Он мне отлично помог переписать здоровенную процедуру с SQL на питон.

Я умею писать SQL запросы, но там была целая здоровая процедура, половину кода которой я просто не понимал, и местами преобразования в питон было совсем не очевидные.

Но вместе мы справились, без ассистента я бы забил, т.к. результат был не очевиден (не факт, что исходная процедура работала), и убивать кучу времени на разбор нового языка программирования я бы не стал.

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

Я тут написал крутой инструмент используя ЧатГПТ для чистки векторные слоев. В процессе активного использования обнаружили, что в некоторых ситуациях он портит исходные данные. 2 чертовых для я искал в чем дело, оказалось, что в одном месте в функцию передается не 2 координаты, а 3 (3-х мерный случай).

Очень ненадежный инструмент пока, видимо нужно самому код переписывать, а не брать из его вывода

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

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

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

@roman09, вот меня и крючит от того, что такую ошибку человек мог только специально допустить, чтобы гадость сделать. Что-то типа "с" англ заменить на "с" русское

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

@skatromb, проект более чем живой, тоже перекатился в него с опенаи и всем реккомендую. Выпустили 70б модель и обновили текующую 34б

  Развернуть 1 комментарий
Yury Kupriyanov Смотритель ютуба 2 февраля в 14:26

Чем больше я тестирую и читаю про многие ChatGPT и другие "AI" инструменты, тем больше я убеждаюсь в том, что это инструмент в интернете в стиле принеси-подай не более.

А общий хайп и постоянный пиар включает во мне режим конспиролога. Ведь акции Microsoft и nvidia очень хорошо растут на всех этих успешных историях.

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

@Yurecccc, не ну спору нет, но у меня раза в полтора (на знакомых языках) - три (на незнакомых) прирост производительности случается.

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

@ganqqwerty, мне верится не верится про рост в 1,5 раза. Везде где видел я видел, что люди делали замеры и сам дважды участвовал в подобных экспериментах. В итоге получали рост от 20% до 40% и то с нюансами. Либо задач много простых, либо всё в типовых шаблонах ( типовой бизнес функционал). Но я же не против его использования, если есть помощник в стиле принеси подай, пусть будет.

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

@Yurecccc, дык да, типовая задача - это посмотреть как сделано в соседнем модуле и сделать так же, не выебываясь. Не типовая - внести изменения во много мест или найти багу. Совсем интеллектуал раз в два года напишет рекурсию.

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

Одна крупная компания, из тех с кем мне получилось поощаться, пишет свои внутренние утилиты для программистов как раз на Azure моделях.|

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

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

@cdayz, а не слишком ли малые объемы материала для обучения?

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

@ganqqwerty, ну вроде бы как раз нет, ты берешь большую модель типа starcoder'a и делаешь из нее более специфичную модель даже на небольшом количестве примеров. При этом я бы не сказал что у нас мало кода, но и не гитхаб конечно.

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

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

После того как попробовал чатгпт и оно с первого раза мне выдало готовый результат (который скопировать в IDE и запустить и работает), сказать что я удивился - это ничего не сказать.

После этого я ударился в ботостроение и вон написал тг-бота с нуля полностью с помощью чатгпт.

Так что новичкам для обучения, либо для хобби - самое то.

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

😎

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

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


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