добавил книги и скилл для claude: 2026-03-05 20:22:33

This commit is contained in:
Sergey Krylov 2026-03-05 20:22:33 +03:00
parent 604114facf
commit 585db49681
14 changed files with 889 additions and 29 deletions

View File

@ -0,0 +1,225 @@
---
name: obsidian
description: Use this skill whenever the user asks to create a note, add a book, add a course, create a new entry, organize the vault, format content, commit changes, or work with the Obsidian knowledge base at /Users/ksv741/Obsidian/Knowledges. Trigger on phrases like "добавь книгу", "создай заметку", "добавь курс", "запиши", "сохрани", "оформи", "зафиксируй изменения", "сделай коммит", or any request to modify, add, or structure notes in the vault.
version: 1.0.0
---
# Obsidian Vault Assistant
Vault path: `/Users/ksv741/Obsidian/Knowledges`
## Vault Structure
```
Knowledges/
├── Библиотека/
│ ├── Книги/ ← Book notes + covers/
│ ├── Курсы/ ← Course notes
│ ├── Туториалы/
│ ├── Pet проекты/
│ ├── AI Tools/
│ └── Фильмы/
├── IT/
│ ├── Паттерны/
│ ├── Парадигмы/
│ ├── Принципы/
│ ├── Алгоритмы/
│ ├── Структуры данных/
│ └── Рефакторинг/
├── Шаблоны/ ← Note templates
└── _assets/img/ gif/ ← Media files
```
## Creating Notes
### Book Note (`Библиотека/Книги/<Название>.md`)
```markdown
---
Тип: Книга
Статус: Запланировано
Название: <название>
Автор:
- <автор>
Количество страниц: <число>
Прогресс: 0
Формат: Электронная
Обложка: Библиотека/Книги/covers/<slug>.jpg
Начата:
Закончена:
Оценка:
Сложность:
Теги:
- <тег>
Категории:
- <категория>
Источник:
Ссылка:
---
# <Название>
## 📖 О книге
## 🧠 Ключевые идеи
## 💬 Важные цитаты
## 💡 Как применить в моих проектах
## 🔗 Связанные заметки
```
**Статус values:** `Запланировано` | `В процессе` | `Прочитано` | `Заброшена`
**Формат values:** `Бумажная` | `Электронная` | `Аудио`
---
### Course Note (`Библиотека/Курсы/<Название>.md`)
```markdown
---
Тип: Курс
Статус: Запланировано
Название: <название>
Платформа: YouTube
Автор/Лектор:
- <автор>
Длительность: <N видео / ~N часов / N недель>
Прогресс: 0
Начат:
Закончен:
Оценка:
Сложность:
Теги:
- <тег>
Категория:
- Backend
Технологии:
- <технология>
Ссылка на курс: <url>
Репозиторий с кодом:
---
# <Название>
## 📖 О курсе
## ✅ Что нового я узнал
## 💡 Идеи для применения
## ❌ Что не понравилось
## 🔗 Связанные заметки
```
**Платформа values:** `YouTube` | `Stepik` | `Coursera` | `Udemy` | `Другое`
**Категория values:** `Backend` | `Frontend` | `Data Science` | `DevOps`
---
### General Knowledge Note (`IT/<Раздел>/<Название>.md`)
General notes do NOT use frontmatter. Use inline hashtags and wikilinks:
```markdown
ег1 ег2 ег3
# Заголовок
Текст с [[ссылками на другие заметки]].
## Подраздел
...
```
---
## Formatting Conventions
- **Wikilinks:** `[[Название заметки]]` for cross-references
- **Tags:** In frontmatter use arrays (`- тег`); in regular notes use `#тег` inline
- **Date format:** `DD.MM.YYYY` (e.g. `04.03.2026`)
- **Emojis in section headers:** use the same emoji patterns as in templates
- **Cover images:** store at `Библиотека/Книги/covers/<slug>.jpg`; reference as relative path
### Obsidian Callouts
```markdown
> [!info] Заголовок
> Текст
> [!tip] Совет
> Текст
> [!warning] Важно
> Текст
> [!example] Пример
> Текст
```
### Dataview Queries (when user needs dynamic lists)
```markdown
```dataview
TABLE Статус, Оценка FROM "Библиотека/Книги"
WHERE Тип = "Книга"
SORT Оценка DESC
```
```
---
## Making Commits
After creating or modifying notes, make a git commit if the user requests it or if it's clearly implied.
**Commit message rules:**
- Language: Russian
- Short, imperative form describing what was added/changed
- Examples:
- `добавлена книга: Clean Code`
- `добавлен курс: Тиндер на Java`
- `обновлён прогресс: Рефакторинг JS`
- `добавлены заметки по паттернам`
**Commit workflow:**
```bash
# Stage specific files only — never use git add -A or git add .
git add "Библиотека/Книги/Название.md"
git commit -m "добавлена книга: Название"
```
Always stage specific files by name, never use `git add -A` or `git add .` to avoid accidentally committing sensitive or unintended files.
---
## Workflow: Adding a New Entry
1. Determine the type (book / course / general note)
2. Choose the correct folder based on the structure above
3. Create the `.md` file using the appropriate template
4. Fill in frontmatter fields — use exact Russian field names
5. Write initial content in the body sections
6. If a cover image path is specified in frontmatter, note that the image file should be placed at `Библиотека/Книги/covers/<slug>.jpg`
7. Commit if requested
## Workflow: Organizing the Vault
- Suggest placing notes in the correct folder based on `Тип` field
- Use wikilinks `[[...]]` to connect related notes
- Avoid creating new top-level folders unless clearly necessary
- Tags should be lowercase, use underscores for multi-word: `#структуры_данных`

View File

@ -1,5 +1,6 @@
[ [
"editing-toolbar", "editing-toolbar",
"obsidian-git", "obsidian-git",
"dataview" "dataview",
"terminal"
] ]

View File

@ -0,0 +1,163 @@
{
"addToCommand": true,
"addToContextMenu": true,
"createInstanceNearExistingOnes": true,
"errorNoticeTimeout": 0,
"exposeInternalModules": true,
"focusOnNewInstance": true,
"hideStatusBar": "focused",
"interceptLogging": true,
"language": "",
"newInstanceBehavior": "newHorizontalSplit",
"noticeTimeout": 5,
"openChangelogOnUpdate": true,
"pinNewInstance": true,
"preferredRenderer": "webgl",
"profiles": {
"darwinExternalDefault": {
"args": [
"\"$PWD\""
],
"executable": "/System/Applications/Utilities/Terminal.app/Contents/macOS/Terminal",
"followTheme": true,
"name": "",
"platforms": {
"darwin": true
},
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "external"
},
"darwinIntegratedDefault": {
"args": [
"--login"
],
"executable": "/bin/zsh",
"followTheme": true,
"name": "",
"platforms": {
"darwin": true
},
"pythonExecutable": "python3",
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "integrated",
"useWin32Conhost": true
},
"developerConsole": {
"followTheme": true,
"name": "",
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "developerConsole"
},
"linuxExternalDefault": {
"args": [],
"executable": "xterm",
"followTheme": true,
"name": "",
"platforms": {
"linux": true
},
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "external"
},
"linuxIntegratedDefault": {
"args": [],
"executable": "/bin/sh",
"followTheme": true,
"name": "",
"platforms": {
"linux": true
},
"pythonExecutable": "python3",
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "integrated",
"useWin32Conhost": true
},
"win32ExternalDefault": {
"args": [],
"executable": "C:\\Windows\\System32\\cmd.exe",
"followTheme": true,
"name": "",
"platforms": {
"win32": true
},
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "external"
},
"win32IntegratedDefault": {
"args": [],
"executable": "C:\\Windows\\System32\\cmd.exe",
"followTheme": true,
"name": "",
"platforms": {
"win32": true
},
"pythonExecutable": "python3",
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "integrated",
"useWin32Conhost": true
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,14 @@
{
"author": "polyipseity",
"description": "Integrate consoles, shells, and terminals.",
"fundingUrl": {
"Buy Me a Coffee": "https://buymeacoffee.com/polyipseity",
"GitHub Sponsors": "https://github.com/sponsors/polyipseity"
},
"version": "3.21.0",
"authorUrl": "https://github.com/polyipseity",
"id": "terminal",
"isDesktopOnly": false,
"minAppVersion": "1.4.11",
"name": "Terminal"
}

View File

@ -0,0 +1,32 @@
.obsidian-plugin-library\:icon{fill:none;stroke:currentColor}.obsidian-plugin-library\:await-css{display:unset!important}.obsidian-plugin-library\:hide-status-bar{display:none}/**
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
* https://github.com/chjj/term.js
* @license MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* Originally forked from (with the author's permission):
* Fabrice Bellard's javascript vt100 for jslinux:
* http://bellard.org/jslinux/
* Copyright (c) 2011 Fabrice Bellard
* The original design remains. The terminal itself
* has been extended to include xterm CSI codes, among
* other features.
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{user-select:text;white-space:pre}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.workspace-leaf-content[data-type="terminal:terminal"] .view-content{overflow:clip;display:flex;flex-direction:column}.terminal\:terminal{flex:1;min-width:0;min-height:0}.is-phone .workspace-leaf-content[data-type="terminal:terminal"] .view-content{padding-bottom:max(var(--size-4-4),calc(var(--icon-l) + var(--size-4-2) + max(var(--size-4-2),var(--safe-area-inset-bottom))))}

View File

@ -4,24 +4,81 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "9810f6f0d1999531", "id": "9d3653d1b092bda0",
"type": "tabs", "type": "split",
"children": [ "children": [
{ {
"id": "68de4d224860e518", "id": "00ed27b7e981dd5e",
"type": "leaf", "type": "tabs",
"state": { "dimension": 69.37269372693727,
"type": "markdown", "children": [
"state": { {
"file": "Библиотека/Курсы/Тиндер на Java.md", "id": "5f180c1384d356a5",
"mode": "preview", "type": "leaf",
"source": false "state": {
}, "type": "markdown",
"icon": "lucide-file", "state": {
"title": "Тиндер на Java" "file": "Библиотека/Книги/Профессиональный TypeScript.md",
} "mode": "preview",
"source": true
},
"icon": "lucide-file",
"title": "Профессиональный TypeScript"
}
}
]
},
{
"id": "0765916286c4fc4a",
"type": "tabs",
"dimension": 30.627306273062732,
"children": [
{
"id": "a8a70f482a4ef196",
"type": "leaf",
"pinned": true,
"state": {
"type": "terminal:terminal",
"state": {
"terminal:terminal": {
"cwd": "/Users/ksv741/Obsidian/Knowledges",
"focus": false,
"profile": {
"args": [
"--login"
],
"executable": "/bin/zsh",
"followTheme": true,
"name": "",
"platforms": {
"darwin": true
},
"pythonExecutable": "python3",
"restoreHistory": false,
"rightClickAction": "copyPaste",
"successExitCodes": [
"0",
"SIGINT",
"SIGTERM"
],
"terminalOptions": {
"documentOverride": null
},
"type": "integrated",
"useWin32Conhost": true
},
"serial": null
}
},
"pinned": true,
"icon": "terminal",
"title": "Terminal: ksv741@MacBook-Pro-Sergey:~/Obsidian/Knowledges"
}
}
]
} }
] ],
"direction": "horizontal"
} }
], ],
"direction": "vertical" "direction": "vertical"
@ -166,7 +223,8 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 588.5 "width": 588.5,
"collapsed": true
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
@ -177,18 +235,25 @@
"templates:Вставить шаблон": false, "templates:Вставить шаблон": false,
"command-palette:Открыть палитру команд": false, "command-palette:Открыть палитру команд": false,
"bases:Создать новую базу": false, "bases:Создать новую базу": false,
"obsidian-git:Open Git source control": false "obsidian-git:Open Git source control": false,
"terminal:Open terminal": false
} }
}, },
"active": "68de4d224860e518", "active": "a8a70f482a4ef196",
"lastOpenFiles": [ "lastOpenFiles": [
"Библиотека/Курсы/Микросервисы на практике - сервис продажи билетов.md", "Библиотека/Книги/Профессиональный TypeScript.md",
"Библиотека/Книги/Рефакторинг кода на JavaScript.md",
"Библиотека/Книги/covers/refactoring-js.jpg",
"Библиотека/Книги/Компьютерные сети. Принципы, технологии, протоколы.md",
"Библиотека/Книги/Грокаем алгоритмы.md",
"Библиотека/Книги/covers/professional-typescript.jpg",
"Библиотека/Книги/covers/grokking-algorithms.jpg",
"Библиотека/Курсы/Тиндер на Java.md", "Библиотека/Курсы/Тиндер на Java.md",
"Библиотека/Курсы/Микросервисы на практике - сервис продажи билетов.md",
"Без названия.canvas", "Без названия.canvas",
"Библиотека/Книги/Высоконагруженные приложения. Программирование, масштабирование, поддержка.md", "Библиотека/Книги/Высоконагруженные приложения. Программирование, масштабирование, поддержка.md",
"Библиотека/Книги/Как пасти котов.md", "Библиотека/Книги/Как пасти котов.md",
"Библиотека/Книги/Командная строка Linux.md", "Библиотека/Книги/Командная строка Linux.md",
"Библиотека/Книги/Компьютерные сети. Принципы, технологии, протоколы.md",
"Библиотека/Книги/Совершенный код.md", "Библиотека/Книги/Совершенный код.md",
"Библиотека/Книги/Список книг.md", "Библиотека/Книги/Список книг.md",
"Библиотека/Книги/Чистый код.md", "Библиотека/Книги/Чистый код.md",
@ -200,10 +265,7 @@
"Библиотека/Книги/covers/pro-git.png", "Библиотека/Книги/covers/pro-git.png",
"Библиотека/Книги/covers/code-complete.jpg", "Библиотека/Книги/covers/code-complete.jpg",
"Библиотека/Книги/covers/clean-code.jpg", "Библиотека/Книги/covers/clean-code.jpg",
"Библиотека/Книги/covers/highload.png",
"Библиотека/Книги/covers/computer-networks.png",
"Шаблоны/course_template.md.md", "Шаблоны/course_template.md.md",
"Библиотека/Книги/covers/Pasted image 20260225200640.png",
"Библиотека/AI Tools/System Prompts.md", "Библиотека/AI Tools/System Prompts.md",
"Библиотека/AI Tools/Agents.md", "Библиотека/AI Tools/Agents.md",
"Библиотека/AI Tools/Skills.md", "Библиотека/AI Tools/Skills.md",
@ -225,9 +287,6 @@
"Библиотека/Туториалы", "Библиотека/Туториалы",
"Библиотека/Курсы", "Библиотека/Курсы",
"Библиотека/Фильмы", "Библиотека/Фильмы",
"Библиотека/Книги", "Библиотека/Книги"
"IT/Алгоритмы/Сортировки/Сортировка слиянием (Merge Sort).md",
"IT/Рефакторинг/Запахи кода/Теоретическая общность.md",
"IT/Рефакторинг/Запахи кода/Таинственное имя.md"
] ]
} }

View File

@ -133,4 +133,8 @@
- [[Извлечение суперкласса (Extract Superclass)]] - [[Извлечение суперкласса (Extract Superclass)]]
- [[Свертывание иерархии (Collapse Hierarchy)]] - [[Свертывание иерархии (Collapse Hierarchy)]]
- [[Замена подкласса делегатом (Replace Subclass with Delegate)]] - [[Замена подкласса делегатом (Replace Subclass with Delegate)]]
- [[Замена суперкласса делегатом (Replace Superclass with Delegate)]] - [[Замена суперкласса делегатом (Replace Superclass with Delegate)]]
---
### Литература
- [[Рефакторинг кода на JavaScript]] — Мартин Фаулер

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,7 @@
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

View File

@ -0,0 +1,55 @@
---
Тип: Книга
Статус: Прочитано
Название: Грокаем алгоритмы
Автор:
- Адитья Бхаргава
Количество страниц: 288
Прогресс: 288
Формат: Бумажная
Обложка: Библиотека/Книги/covers/grokking-algorithms.jpg
Начата: "2023"
Закончена: "2023"
Оценка: "9"
Сложность: "6"
Теги:
- it
- algorithms
- programming
Категории:
- алгоритмы
- структуры данных
Источник:
Ссылка:
---
![[covers/grokking-algorithms.jpg]]
# Грокаем алгоритмы
## 📖 О книге
Простое объяснение базовых структур данных (очередь, стек, бинарное дерево и т.д) и алгоритмов (быстрая сортировка, бинарный поиск и т.д)
---
## 🧠 Ключевые идеи
-
-
-
---
## 💬 Важные цитаты
>
---
## 💡 Как применить в моих проектах
-
-
-
---
## 🔗 Связанные заметки
- [[...]]

View File

@ -0,0 +1,43 @@
---
Тип: Книга
Статус: Прочитано
Название: "Профессиональный TypeScript : разработка масштабируемых JavaScript-приложений"
Автор:
- Борис Черный
Количество страниц: 352
Прогресс: 352
Формат: Бумажная
Обложка: Библиотека/Книги/covers/professional-typescript.jpg
Начата:
Закончена: 2024
Оценка:
Сложность:
Теги:
- typescript
- javascript
- типизация
Категории:
- Frontend
- Backend
Источник:
Ссылка:
---
# Профессиональный TypeScript
## 📖 О книге
В книге рассказывается о самой идеи TypeScript, о приведении типизации, использовании дженериков и утилитарных типах
## 🧠 Ключевые идеи
- never - подтип всех типов, any - супертип всех типов
## 💬 Важные цитаты
## 💡 Как применить в моих проектах
- Типизация должна или выводиться самостоятельно, или
## 🔗 Связанные заметки

View File

@ -0,0 +1,57 @@
---
Тип: Книга
Статус: Прочитано
Название: Рефакторинг кода на JavaScript. Улучшение проекта существующего кода
Автор:
- Мартин Фаулер
Количество страниц: 448
Прогресс: 448
Формат: Электронная
Обложка: _assets/img/Pasted image 20241113230057.png
Начата: "2024"
Закончена: "2024"
Оценка: "10"
Сложность: 6/10
Теги:
- it
- programming
- refactoring
- javascript
Категории:
- разработка программного обеспечения
- чистый код
Источник:
Ссылка:
---
![[Pasted image 20241113230057.png]]
# Рефакторинг кода на JavaScript. Улучшение проекта существующего кода
## 📖 О книге
Второе издание классического труда Мартина Фаулера, полностью переписанное под использование JavaScript. Книга является исчерпывающим руководством по улучшению структуры существующего кода без изменения его внешнего поведения.
---
## 🧠 Ключевые идеи
- **Рефакторинг через тесты**: Никогда не начинайте рефакторинг без надежного набора автоматизированных тестов.
- **Малые шаги**: Эффективный рефакторинг состоит из последовательности крошечных изменений, каждое из которых оставляет код в рабочем состоянии.
- **Понимание "Запахов кода"**: Умение идентифицировать проблемные места (Smells), которые сигнализируют о необходимости изменений.
---
## 💬 Важные цитаты
> Любой дурак может написать код, который поймет компьютер. Хорошие программисты пишут код, который понимают люди.
---
## 💡 Как применить в моих проектах
- Использовать каталог методов рефакторинга при ежедневной работе с JS/TS кодом.
- Внедрять практику «Рефакторинг при добавлении функционала».
- Следить за «запахами» в больших React-компонентах.
---
## 🔗 Связанные заметки
- [[Рефакторинг]]
- [[Чистый код]]