Skip to content

Commit 2efe191

Browse files
committed
WIP
1 parent be293bc commit 2efe191

7 files changed

Lines changed: 68 additions & 19 deletions

File tree

content/003-big.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,39 @@
22

33
После прочтения `README` в любом проекте возникает естественное желание оценить масштаб работы.
44
Насколько велика система? Насколько быстро я смогу в ней разобраться и начать вносить изменения?
5+
Эти вопросы важны не только для новичка, но и отражают уровень прозрачности архитектуры и зрелости проекта.
56

67
Во многих экосистемах по умолчанию доминирует монолитный подход.
7-
Это классика, проверенная временем.
8-
Его используют:
8+
Это классика, проверенная временем.
9+
10+
<div style="page-break-after: always;"></div>
911

12+
Его используют:
1013
- Laravel (PHP)
1114
- Django (Python)
1215
- Ruby on Rails (Ruby)
1316
- Phoenix Framework (Elixir)
1417
- Spring (Java)
1518
- Sails (Node.js)
1619

17-
И этот список можно продолжать долго — монолиты надёжны, удобны и, что важно, имеют широкую поддержку в виде инструментов и сообществ.
20+
И этот список можно продолжать долго — монолиты надёжны, удобны и, что важно, имеют широкую поддержку в виде
21+
инструментов и сообществ.
1822
Это безопасная отправная точка практически для любого проекта.
1923

2024
Однако столкнуться с **20 000+** файлов и папок в репозитории — для любого разработчика может стать демотивирующим
2125
шоком.
2226
Это словно стоять перед огромным валуном и пытается его сдвинуть с места.
2327

24-
Даже опытный разработчик теряет мотивацию, когда не видит четкой структуры, границ ответственности, понятных точек входа.
25-
Это не просто психологический барьер — это профессиональная фрустрация: ты не понимаешь, где начать, как не сломать, как внести изменения безопасно.
28+
Даже опытный разработчик теряет мотивацию, когда не видит четкой структуры, границ ответственности, понятных точек
29+
входа.
30+
Это не просто психологический барьер — это профессиональная фрустрация: ты не понимаешь, где начать, как не сломать, как
31+
внести изменения безопасно.
2632

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

3036
Это вовсе не значит, что каждый монолит обязательно нужно дробить на десятки микросервисов. Нет, не стоит
31-
драматизировать.
37+
драматизировать.
3238
Речь о том, что даже внутри монолита обязательно нужно выделять и изолировать компоненты, которые можно вынести в
3339
отдельные репозитории.
3440

@@ -42,11 +48,11 @@ class Temperature
4248
}
4349
```
4450

45-
Этот компонент можно вынести в собственный репозиторий, покрыть тестами,
51+
Этот компонент можно вынести в собственный репозиторий, покрыть тестами,
4652
добавить документацию и подключать через Composer как внешнюю зависимость.
4753

48-
Такой подход упрощает основную кодовую базу и снижает когнитивную нагрузку: вместо тысячи связанных между собой файлов
49-
разработчик имеет дело с чётко очерченным, изолированным модулем.
54+
Такой подход упрощает основную кодовую базу и снижает когнитивную нагрузку: вместо тысячи связанных между собой файлов
55+
разработчик имеет дело с чётко очерченным, изолированным модулем.
5056

5157
Кроме того, переиспользуемые и опубликованные компоненты не просто сокращают дублирование — они создают эффект "внешней
5258
границы", когда ответственность модуля очевидна и проверяется временем.
@@ -55,14 +61,13 @@ class Temperature
5561
«Да, я могу разобраться с этим и внести изменения», — а потом постепенно расширять понимание всего проекта и его частей.
5662
Это сильно снижает тревожность и прокрастинацию. Чем понятнее и локальнее задача — тем выше вовлечённость.
5763

58-
5964
Кроме того, отдельные небольшие пакеты часто можно и нужно выкладывать в open source — это не то, что подпадает под
6065
ограничения или коммерческую тайну. Это чистый, полезный, часто общепринятый код.
6166

6267
Они могут стать отличным инструментом для профессионального роста и демонстрации своих навыков.
6368

6469
Часто можно встретить талантливых разработчиков, которые годами работают внутри одной компании, в огромном монолите,
65-
но не могут продемонстрировать ни одной строчки своего кода.
70+
но не могут продемонстрировать ни одной строчки своего кода.
6671
Почему? Потому что весь их труд спрятан за корпоративным VPN, внутри безликой и плохо структурированной массы.
6772

6873
Поэтому небольшие компоненты и пакеты — это одновременно и технический, и карьерный инструмент, который стоит

content/007-naming.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,7 @@ abstract class AbstractContextHandler
155155
): array
156156
{
157157
return [
158-
'encodedContextualPayloadFragment' => $this->map($contextBoundSemanticUnit),
159-
'componentUnitIntegrityChecksum' => sha1(serialize($contextBoundSemanticUnit)),
160-
'injectedContextualTagToken' => uniqid('module_ctx_unit_', true),
158+
'encodedPayloadFragment' => $this->map($contextBoundSemanticUnit),
161159
'operationalModuleDomain' => $this->moduleNamespaceScopeIdentifier,
162160
];
163161
}

content/008-mysterious-value.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
Разработчик открывает IDE, запускает поиск по имени метода или класса, и — вперёд, прямо в код.
55
Только когда поведение становится неочевидным, когда логика не складывается — он обращается к документации, вики, базе знаний если такая вообще есть или еще хуже к коллеге выпрашивая информацию по чайной ложке.
66

7+
<div style="page-break-after: always;"></div>
8+
79
Рассмотрим классическую ситуацию:
810

911
```php

content/010-no-nonsense.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,47 @@ $city = $user->address->city();
201201
> {notice} Паттерн `Null Object` полезен не только для возврата значений по умолчанию, но и для реализации методов, которые
202202
> не должны выполнять никаких действий.
203203
204+
### Ссылки делают код хрупким
205+
206+
Передавать переменную по ссылке кажется удобным: функция сразу меняет её — меньше кода, меньше присваиваний.
207+
Вот пример:
208+
209+
```php
210+
// Плохо [✗]
211+
function celsiusToFahrenheit(float &$celsius): void
212+
{
213+
$celsius = $celsius * 9 / 5 + 32;
214+
}
215+
216+
$temp = 25;
217+
celsiusToFahrenheit($temp);
218+
echo $temp; // 77 — значение изменилось «внутри» функции
219+
```
220+
221+
На первый взгляд это экономия кода, но есть подвох: после вызова функции уже не понятно, изменится переменная или нет.
222+
Изменения происходят «за кадром», что усложняет чтение и поддержку кода.
223+
224+
Из-за этого код становится хрупким — любое забытое или неожиданное изменение может сломать логику программы.
225+
226+
Лучшей практикой считается писать функции, которые принимают значение и возвращают новый результат, не изменяя исходные
227+
данные:
228+
229+
```php
230+
// Хорошо [✓]
231+
function celsiusToFahrenheit(float $celsius): float
232+
{
233+
return $celsius * 9 / 5 + 32;
234+
}
235+
236+
237+
$temp = 25;
238+
$tempInFahrenheit = celsiusToFahrenheit($temp);
239+
echo $temp; // 25 — значение не изменилось
240+
```
241+
242+
Такой код прозрачный и предсказуемый: переменные не меняются «вдруг», а результат возвращается явно и используется там,
243+
где нужно.
244+
204245
### Место для расширения
205246

206247
Иногда нужно немного изменить поведение класса — добавить одно условие, поменять одну строчку, подставить другую

content/012-conditions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Управляющие конструкции
22

33
Хороший код строится из простых и понятных блоков. Мы уже научились избегать лишней вложенности и выходить из метода как
4-
можно раньше. Но есть ещё одна область, где может скрываться неявная сложность, способная незаметно разрастаться — это *
4+
можно раньше. Но есть ещё одна область, где может скрываться неявная сложность, способная незаметно разрастаться — это
55
**управляющие конструкции**.
66

77
В живом проекте требования неизменно растут. Это нормально: бизнес двигается, пользователи чего-то хотят, а нам

content/014-exceptions.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
Ошибки могут возникать по самым разным причинам: от неправильного ввода данных до сбоев в работе внешних сервисов.
55
Поэтому важно правильно обрабатывать ошибки, чтобы ваш код не падал и не оставлял пользователей в недоумении.
66

7+
<div style="page-break-after: always;"></div>
8+
79
### Исключения
810

911
Как правило, исключения, которые вы ожидаете и планируете обрабатывать заранее, должны наследоваться от `Exception`.

content/020-copilot.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ public function generate(): string
142142

143143
private function canTokenExists(string $token): bool
144144
{
145-
return DB::table('tokens')->where('value', $token)->exists();
145+
return DB::table('tokens')
146+
->where('value', $token)
147+
->exists();
146148
}
147149
```
148150

@@ -184,6 +186,5 @@ LLM не знает, как устроена твоя система. Он пр
184186
AI — это помощник. Он может ускорить работу.
185187
Но он не заменит твой выбор, твой стиль, твоё мышление.
186188

187-
Второй пилот не заменит твоё мышление — он просто помогает писать.
188-
189-
А хороший код начинается с тебя, а не с него!
189+
Второй пилот не заменит твоё мышление — он просто помогает писать.
190+
А хороший код начинается с тебя!

0 commit comments

Comments
 (0)