Полезен «красно-зелёный TDD»: то есть стоит не просто «сначала написать все тесты», а действовать по такому циклу:
Новый тест сначала должен падать (иначе что он проверяет?)
Затем требуется сделать минимальное изменение кода, чтобы тест начал проходить.
А дальше надо рефакторить, превращая код из «просто срабатывающего» в «полноценный».
Пример промта:
Build a Python function to extract headers from a markdown string. Use red/green TDD.
❗ИИ нельзя позволять менять тесты (если считает это необходимым, то должен объяснить причину). А на случай, если это всё-таки произойдёт, в CI нужен hook, который блокирует PR с такими изменениями.
Spec-Driven Development (SDD)
Всё значимое требуется фиксировать. При этом можно быстро проверять гипотезы на практике и подстраиваться на ходу: “Сделай тут тремя разными способами, а мы сравним результаты “вживую” и выберем”.
Экономия контекста и токенов при чтениях
Краткий и точный контекст - это самое важное. Нужно давать агенту ровно ту часть системы, которая нужна для конкретного изменения.
Формулировать задачу узко: измени только валидацию в этом методе, работай в пределах этих двух файлов;
Структура проекта понятна и предсказуема: предсказуемые названия файлов, понятное разделение по слоям, внятные README.md;
Карта проекта и ограничения: где находится нужный модуль, что считается точкой входа, где лежит бизнес-логика, а где тесты или вспомогательные части. И можно сразу уточнять, какая часть карты актуальна для текущей задачи: какой модуль трогать, какие директории релевантны, а где не нужно ничего менять;
Фиксировать архитектурные правила отдельно: важные инварианты вроде «этот слой не ходит напрямую в БД», «этот модуль не импортирует этот пакет» или «новую логику добавляем только через такой паттерн» агенту лучше знать заранее;
Разделять поиск, понимание и изменение: сначала дать агенту задачу поиска релевантных файлов и посмотреть, не “увело” ли его. Затем задачу понимания: что именно в них отвечает за нужное поведение. “Если агент плохо справляется с задачей - попробуй её декомпозировать”.
Выбор стека: типизация и “стандартизация”
Cтатическая типизация позволяет поймать ряд ошибок ИИ.
Для LLM “удобнее”, когда что-то часто встречалось в обучающем датасете. Если на GitHub есть тысячи “Тетрисов” на JavaScript, то агенту будет легко сделать ещё один. Хуже обстоят дела с малоизвестными вещами и с совсем новыми, вышедшими уже после даты «knowledge cutoff» ИИ-модели.
Подход к Git
Общий совет: коммитить как можно чаще. Это как сохранения в видеоигре: никогда не знаешь, когда ИИ вдруг пойдёт вразнос, и чем свежее последний коммит, тем меньше прогресса можешь потерять. Плюс по commit messages, ИИ в будущих диалогах сможет понимать по ним много полезного контекста.
При этом ИИ очень помогает со «сложными командами». Даже опытным разработчикам непросто целиком уместить в голове логику и команды Git.
Риск-менеджмент
Когда ИИ быстро генерирует много кода, человеческое ревью становится одновременно “важным местом” и “узким местом”. От его тщательности зависят и качество проекта, и скорость разработки.
При работе с ИИ-кодом требуются:
Компетенции и прилежность тщательно проверить всё, что требуется;
Душевный покой принимать без излишних проверок то, где они не требуются;
Мудрость отличать одно от другого.
Понимание работы ИИ
Знание принцпов как работает ИИ: чем различаются модели? Как измеряют их эффективность? Какие формы обучения к ним сейчас применяют? Как работает кэширование токенов? Как устроен «режим планирования»?
Agent Skills лучше MCP, потому что не загружаются в контекст сразу, а только по необходимости;
для верного выполнения задачи машине нужен весь релевантный контекст;
при этом окно контекста не бесконечное, да и то в середине “проседает”;
поэтому не стоит «закидывать в ИИ всё возможное», надо “не мусорить”;
фича «compaction» может «сжимать имеющийся диалог до главного»;
но модель сама выбирает «а что главное», и может упустить важное.
Понимание программирования
Все абстракции “протекают”. С ИИ, если хочется делать масштабные вещи, необходимость понимать «уровни ниже» совершенно не исчезла. Наоборот, к ним добавился ещё один. Значит, чтобы добиться от ИИ профессионального кода, надо самому быть профессионалом.
Обучение программированию
Главная проблема с LLM — они могут сразу давать правильный ответ, пропуская путь к нему. Значит, обучение должно быть выстроено так, чтобы не пропускать.
ИИ может быть полезен в объяснении «обычного» программирования.
Файл с инструкциями для ИИ глобального уровня или уровня проекта.
Размер: минимальное число строк. При большом размере (>300 строк текста) ИИ начинает игнорировать весь текст.
Команды
Shortcuts
ESCx2 - очистить промпт
Shift+Tab - выбрать режим (с подтверждением действий, planning mode, auto-edit)
ALT+Enter - добавить новую строку, не отправляя промпт на исполнение
Полезные команды
/model - выбор модели (Sonnet, Opus, Haiku)
/clear - очистить контекст
/context - посмотреть на текущий контекст
/compact - запустить процесс суммаризации контекста (Claude делает это и сам на автомате)
/resume - переоткрыть старый контекст, если случайно закрыл сессию с Claude
/mcp - отобразить текущие MCP. Нужно стараться ограничивать их число, чтобы не взрывать контекст лишней инфой
/help - справка по командам
/permissions - список разрешений для Claude Code агента
/chrome - команда для сходить в браузер, сделать скриншот и найти что-то (без API)
Расширение
Skills
Skills = Commands.
Скиллы - это краткое описание для ИИ, как решить задачу.
Технически это .md-файл с текстом, который вызывается также как команда по /
Хорошая привычка: всегда просить Claude самостоятельно обновлять и управлять Skills, не менять их вручную.
Rust Token Compressor (RTK) - https://github.com/rtk-ai/rtk сокращает количество используемых токенов для bash-операций, особенно с git. Подменяет с помощью global hook обращения ИИ и сокращает вывод;
I'm designing a CLI tool that helps developers track TODO comments across their codebase. Create an agent team to explore this from different angles: one teammate on UX will use Haiku model, one on technical architecture using Sonnet, one playing devil's advocate will use Opus.
Настройки teams хранятся:
Team config: ~/.claude/teams/{team-name}/config.json
Задачи информационной безопасности (ИБ) - обеспечить конфиденциальность, целостность, доступность (Confidentiality, Integrity, Availability - CIA triad) в информационной системе (ИС);
Угрозы ИБ (threat) - потенциальные опасности ИС, если нарушитель использует её уязвимости для атак. Угрозы бывают трёх видов: нарушение конфиденциальности, целостности, доступности;
Уязвимости (vulnerability) - недостатки ПО, оборудования или в мерах по обеспечению безопасности с точки зрения человеческого фактора, которые дают возможность злоумышленнику проникнуть в ИС и совершать там противоправные действия (реализация угрозы);
Источник угрозы (threat agent) - хакер, недобросовестный или ошибшийся сотрудник, через которого произошла реализация угрозы, повреждение ИС, утечка данных.
Каждая уязвимость получает ранг на основе факторов:
Какие системы затронуты;
Какие данные в опасности;
Какие бизнес-функции находятся под угрозой;
Насколько легко реализовать атаку и добиться компрометации ИС;
graph LR %% TD = Top->Down, LR = Left->Right etc.
S[Start] --> A;
A(Enter your EMail) --> E{Existing user?};
E -->|No| Create(Enter name)
E -->|Yes| Send(Send a letter to address)
Create --> EULA{Accept conditions}
EULA -->|Yes| Send
EULA -->|No|A
Result:
graph LR
S[Start] --> A;
A(Enter your EMail) --> E{Existing user?};
E -->|No| Create(Enter name)
E -->|Yes| Send(Send a letter to address)
Create --> EULA{Accept conditions}
EULA -->|Yes| Send
EULA -->|No|A
Sequence Diagrams
Example:
sequenceDiagram
autonumber %% action numbers placed on every arrow
actor C as Client
Note left of C: User %% [ right of | left of | over ] supported
participant I as Identity Provider
participant S as Service Provider
Note right of S: Blitz Identity
C->>S: Resource request
activate C
activate S
S-->>C: Redirect to Identity Provider
deactivate S
loop every hour %% loop start
C->>I: Request Access Token
activate C
activate I
I-->>C: Access Token
deactivate C
deactivate I
end %% loop end
C->>S: Access granted
Note over C,S: Browser access
deactivate C
Result:
sequenceDiagram
autonumber
actor C as Client
Note left of C: User
participant I as Identity Provider
participant S as Service Provider
Note right of S: Blitz Identity
C->>S: Resource request
activate C
activate S
S-->>C: Redirect to Identity Provider
deactivate S
loop every hour
C->>I: Request Access Token
activate C
activate I
loop
I->>I: Kerberos cert
end
I-->>C: Access Token
deactivate C
deactivate I
end
C->>S: Access granted
Note over C,S: Browser access
deactivate C
Чтобы немного упростить процесс ведения дневника, можно поставить плагин календаря (Calendar), периодических заметок (Periodic notes) и шаблонов (Templater). Логика думаю тут довольно проста – календарь позволяет лучше ориентироваться во времени, периодические заметки - организуют заметки, а шаблоны упрощают создание самих дневниковых заметок.
Сначала мы быстро читаем какой-то отрывок, главу. Не отвлекаемся, не тормозим, не ходим по ссылкам.
Далее читаем заново и оставляем метки, по которым сформируем впоследствии конспект.
Пишем конспект:
Сначала пишем просто изложение (значит своими словами). Не думаем о ссылках, не думаем о том, как атомизировать. Просто пишем четкое последовательное изложение по прочитанному.
Расширяем и дополняем конспект своими мыслями и наблюдениями, вставляем ссылки и источники.
(при необходимости формируем какой-то сопроводительный текст)
Начинаем атомизировать наш конспект на отдельные заметки.
Связываем заметки с другими, если, конечно, в голову приходят эти связи.
Медитируем
Okular, потому что эта программа открывает pdf и djvu (и многие другие), а также в ней прям очень легко и быстро можно аннотировать текст.
Zotero
Это ультимативная, бесплатная программа для работы с источниками информации
Obsidian to Anki.
Плагины
ReadItLater - способ быстро добавлять статьи и видео в заметки;
Timestamp Notes - смотреть видео и делать заметки по времени;
Кварц позволяет открыть свои markdown-страницы для других людей через веб-сайт.
Есть даже целая концепция learn in public, когда люди открывают аудитории свои незавершённые наработки с целью эффективного обучения. Закон Каннингема гласит:
Лучшим способом получить правильный ответ в Интернете будет не задавать вопрос, а разместить ложный ответ
Кстати, статьи, которые я пишу для своего телеграм канала тоже написаны в Обсидиан и опубликованы через Quartz.
Для того, чтобы их можно было удобно читать, не выходя из приложения, я написал шаблон для telegram instant view.
Top Plugins
Calendar
Позволяет создать календарь и писать в него быстрые заметки по дням.
DataView
Позволяет делать выборки из файлов с SQL Syntax и отображать результат в виде таблицы
Outliner
Создание и управление структурированными списками.
Novel Word Count
Отображение количества страниц и текста в папке.
Style Settings
Изменить стиль Obsidian, сделать Softpaper стиль.
Установить стиль (Theme) = AnuPpuccin
Зайти в настройки плагина Style Settings, выбрать конфиг для AnuPpuccin темы -> Import… и ввести:
The JSON document below is a message history from a Telegram group chat.
I need you to summarize this chat history and yield 5 primary conversation topics.
Each conversation topic mentioned should be accompanied by one-sentence summaries of 2-3 most representative dialogs (not single messages) from the conversation on the given topic including usernames.
For each dialog summary provide the exact keywords with which the message can be found in the history using text search.
IMPORTANT: The output should be provided in the language which prevails in the messages text.
Here's an example of desired output in Russian language (follow the exact structure):
1. <b>Изменения в политике открытия счетов в Испании для россиян по паспорту гражданина РФ без получения ВНЖ. Обсуждаются новые ограничения, введенные в начале 2024</b>.
Примеры сообщений:
- <b>Bolzhedor рассказывает</b> о неудачной попытке открытия счета по паспорту РФ в банке Caixa. Ключевые слова: "<i>завернули с паспортом</i>", "<i>больше никому не открывают :(</i>".
- <b>Александр Сергеевич</b> отмечает, что единственный банк, до сих пор открывающий счета россиянам по паспорту - это BBVA. Ключевые слова: "<i>BBVA пока разрешает</i>", "<i>главное дружить с хестором</i>".
2. <b>Изменения в политике налогообложения России и Испании в 2024 году</b>.
Примеры сообщений:
- <b>Себастьян Перейро</b> и <b>Max</b> обсуждают изменения в налоговом законодательстве и влияние налогового резидентства на обязательства. Ключевые слова: "<i>нерезидентам сейчас хуже всего</i>", "<i>кто попался на непредоставлении?</i>", "<i>зачем вообще об этом сообщать/<i>".
- <b>Akakij M</b> и <b>Олег</b> делятся опытом и советами по вопросам налогообложения и требованиям налоговых органов. Ключевые слова: "<i>Будут спрашивать - скажете</i>", "<i>у меня пока ничего не просили</i>".
3. <b>Судебные приставы и исполнение налоговых требований: пользователи делились опытом взаимодействия с судебными приставами и налоговыми органами, включая случаи неправомерного списания средств</b>.
Примеры сообщений:
- <b>Маша К</b> рассказывает о своем опыте с неправомерным списанием средств и последующим взысканием через суд. Ключевые слова: "<i>по судам затаскают</i>".
- <b>Любитель Бокса</b> упоминает о списании штрафов с нескольких счетов одновременно. Ключевые слова: "<i>уж не знаю как, но нашли</i>".
4. <b>Вопросы по открытию и пополнению счета для получения студенческой визы</b>.
Примеры сообщений:
- <b>Родион Раскольников</b> ищет информацию о том, как показать на счете 1337€ для студенческой визы, учитывая ограничения на пополнение счета в Nickel. Ключевые слова: "<i>студенческая виза</i>", "<i>leet</i>", "<i>1337€</i>".
- <b>Kusswurm</b> предлагает пополнение через Bank для обхода лимитов Nickel. Ключевые слова: "<i>пополнение через Bank</i>", "<i>обход лимитов Nickel</i>".
5. <b>Обсуждение возможности использования банковских услуг для нерезидентов и резидентов с TIE</b>.
Примеры сообщений:
- <b>Александр</b> спрашивает о переводе средств из РФ в Испанию, будучи нерезидентом без резиденции. Ключевые слова: "<i>вывод средств</i>", "<i>РФ в Испанию</i>", "<i>нерезидент</i>".
- <b>Жулик Обманщик</b> предлагает привезти наличные, а также упоминает о наличии людей, заинтересованных в обмене рублей на евро. Ключевые слова: "<i>привезти наличные</i>", "<i>рубли на евро</i>".
Here's the JSON document:
{text_to_summarize}
Habr Channel:
The JSON document attached is a message history from a Telegram channel chat.
I need you to summarize this channel history and for all days yield 4 primary topics for each day connected to DevOps Kubernetes and Linux commands, only Rust language programming from programming languages, DIY topics, network and VPN, Ai LLM, HR and psychology, Data Security, Sysadmin tools topics. Every day must have this summarization separately.
For posts named "Новости к этому часу" provide each news line inside this post as is with an accompanying URL link.
IMPORTANT: For each summary provide the href URL link (in clickable format) and the date connected to the channel post which was summarized. The output should be provided in the language which prevails in the post message text.
Other Channel:
The JSON document attached is a message history from a Telegram channel chat.
I need you to summarize this channel history and for all days primary topics for each day. Every day must have this summarization done separately.
IMPORTANT: If a post has a URL link, then add it to the summarization (in clickable format) and also add the date connected to the channel post which was summarized. The output should be provided in the language which prevails in the post message text.
Метаобучение. Дорожная карта предмета изучения. Как использовать свои текущие навыки, чтобы легче освоить новый. Перед изучением темы, разобраться с предметом изучения:
* Зачем учить, что учить, как учить? Написать в таблице;
* Интервью с экспертом: найти спеца, кто достиг высот в теме, которую планируешь изучать, и пообщаться - насколько ему нравится, помогают знания эти, как он учился;
* Выделить, что надо понимать, что просто запомнить (факты), что надо отработать;
* Закон убывающей ценности: поиск источников знаний - это процесс, ценность начальных источников будет убывать, надо будет искать новые.
* Эталонный сопоставительный анализ: взять программу курса (например, программу ВУЗа), и по ней следовать как по дорожной карте;
* Метод подчеркивания/исключения: учить тему, постоянно взвешивая её ценность. Например, изучение программирования для создания проекта - это учить конкретные языки, но не теорию вычислений;
* Сколько исследовать тему проекта перед его началом - 10% от времени на проект.
Фокус: выделение времени на интенсивное изучение. Способность концентрироваться, бороться с прокрастинацией:
* Определить причину прокрастинации: сопротивление конкретному делу или более привлекательные альтернативы?
* Поток от Михай Чиксентмихайи не годится (согласно Андерсону Эриксону) для обучения сложным навыкам. Потому как в потоке нет места для осознанной рефлексии. Также обучение - это уровень сложности более высокий, чем годится для потока. Человек к потоке занимается обычно делом, которое хорошо знает;
* Техника “я ещё 5 минут поделаю и пойду отдыхать” для начала борьбы с прокрастинацией, далее техника помидорок для концентрации.
Целенаправленность - идти вперёд, не заменять обучение другими проектами попроще. Фокус на практической значимости изучаемого навыка:
* Делать pet-project;
* Погружение в среду (языковую);
* Работа с симулятором (например, у лётчиков);
* Не бояться ставить высокие сложные задачи.
Упражнения. Атаковать свои слабые места безжалостно. Разбить большие задачи на мелкие, освоить их и собрать вместе. В процессе разбора на части и изучения подзадач могут найтись доселе неизвестные вспомогательные навыки. Например, задача изучения языка включает задачи скоростного и эффективного использования словарей, переводчиков. Среди эти под-задач могут быть “бутылочные горлышки”, из-за которых в целом изучение навыка тормозит. На них унужно сфокусироваться до их улучшения;
Самоконтроль. Вспоминать изученное активно через задачи и тесты, а не пассивно, заглянув в источник. Активно вспоминать, в том числа тестировать себя ДО изучения темы;
Обратная связь. Принимать критику на себя, не избегать её (но фильтровать полезную, остальную игнорировать). В том числе тренер/наставник даёт 1-1 обратную свзяь, отчего занятия с ними так эффекктивны;
Запоминание. Учиться помнить инфу навсегда. Метод интервального повторения;
Интуиция. Углубление знаний через игру. Усвоить как работает понимание, не прибегать к дешёвым трюкам запоминания;
Экспериментирование. Исследовать вне своей зоны комфорта.