Какие используешь принципы программирования

Ответ

SOLID, DRY, KISS, YAGNI.

SOLID:

  • Single Responsibility - компонент делает одну вещь.
  • Open/Closed - открыт для расширения, закрыт для изменений.
  • Liskov Substitution - наследники не ломают поведение родителя.
  • Interface Segregation - узкие интерфейсы лучше одного "жирного".
  • Dependency Inversion - зависимости на абстракциях, не на реализациях.

DRY (Don't Repeat Yourself):

// Плохо: дублирование
const ButtonA = () => <button className="primary">Click</button>;
const ButtonB = () => <button className="primary">Submit</button>;

// Хорошо: переиспользуемый компонент
const Button = ({ text }) => <button className="primary">{text}</button>;

KISS (Keep It Simple, Stupid): избегаю избыточной сложности там, где можно решить проще.

YAGNI (You Aren't Gonna Need It): не добавляю функциональность "на будущее".

Ответ 18+ 🔞

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

SOLID, говоришь? Ну ладно, поехали.

  • Single Responsibility — это как в армии, блядь: один солдат — одна задача. Не должен твой компонент и кнопку рисовать, и на сервер данные слать, и чай тебе заваривать. Одна хуйня — одна ответственность. Иначе он превращается в этого мутанта, который всё умеет, но нихуя нормально не делает.
  • Open/Closed — штука хитрая. Твой модуль должен быть как банковское хранилище: чтобы его расширить (новую дверь приделать) — пожалуйста. А чтобы его переделать (стену ломать) — нихуя, забудь. Закрыт для изменений, блядь. Подходи с умом.
  • Liskov Substitution — а это про наследственность, епта. Если у тебя есть функция, которая работает с Птицей, то ты должен суметь подсунуть ей Воробья, Страуса или даже этого ёбанного Пингвина, и ничего не должно разъебаться. Если после Пингвина всё летит к чертям — ты мудак и неправильно наследовался.
  • Interface Segregation — не делай интерфейс-монстра, который знает всё на свете. Лучше двадцать маленьких и точных, чем один жирный, от которого всем тошно. Это как нарезка в магазине: ты же не покупаешь полтуши, если тебе нужен только хуй с горы — стейк, понимаешь?
  • Dependency Inversion — высший пилотаж, блядь. Твои высокоуровневые модули не должны ползать на коленях перед низкоуровневыми. Пусть оба смотрят в небо, на какую-то абстракцию, на интерфейс. Класс Повар не должен зависеть от конкретной СковородкиТефаль, он должен зависеть от интерфейса Сковорода. А там уж хоть тефаль, хоть чугунок бабушкин — похуй.

DRY (Don't Repeat Yourself) — это вообще святое, ёпта. Не повторяйся, а то будешь как этот Герасим, который только "Муму" мычит.

// Плохо: два однохуйственных куска
const ButtonA = () => <button className="primary">Click</button>;
const ButtonB = () => <button className="primary">Submit</button>;

// Хорошо: один компонент, а текст передаёшь, куда хочешь
const Button = ({ text }) => <button className="primary">{text}</button>;

Видишь разницу? В первом случае — пиздец и дублирование. Во втором — красота, один раз написал и юзай, куда влезет.

KISS (Keep It Simple, Stupid) — а это, сука, главный принцип. Не умничай. Не городи восьмиэтажную хуйню с чертежами, если задачу можно решить парой строк. Самый сложный код — это простой код. А самый пиздецовый код — это "гениальный" код, в котором через полгода ни ты, ни кто другой нихуя не понимает.

YAGNI (You Aren't Gonna Need It) — вот это, блядь, бич всех архитекторов-потеряшек. "А вот на будущее сделаем возможность отправлять уведомления голубиной почтой!" Не-а. Не понадобится. Сделаешь — и эта неиспользуемая хуйня будет висеть мёртвым грузом, путаться под ногами и отнимать время на поддержку. Делай только то, что нужно сейчас. Будущее, оно, блядь, ещё не наступило, а вот говнокод — уже здесь.

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