Частенько мне встречаются хорошие, на первый взгляд, программисты: они говорят правильные вещи, цитируют отцов основателей, критикуют плохие подходы. К сожалению, на практике они нередко оказываются не настолько хороши.
Чаще всего мешают им фанатичность, нетерпимость к альтернативам и полное отсутствие прагматичного подхода. От них часто можно услышать что-то вроде:
- Код надо обязательно покрыть юнит-тестами на 100%. В тестах надо делать моки через мок-фреймворк.
- Ни в коем случае нельзя писать связанный код.
- Всегда без исключений надо следовать SOLID, DRY, GRASP и т.д.
- Абсолютно все приложения надо строить по DDD.
- Для доступа к данным обязательно нужен крутой ORM.
- Писать документацию нет смысла, потому как она всегда отстаёт от кода. Код — лучшая документация.
- Если в коде есть комментарии, код недостаточно отрефакторен. Всегда можно разделить код и назвать методы так, чтобы отразить предметную область.
- Невозможно построить хорошую архитектуру без ООП.
- И так далее.
Знакомо? Всё это выливается в непрактичные решения, реальной целью которых является доказать собственную правоту и крутость сделав «как учат в умных книгах». Реальность при этом частенько не учитывается.
Не следует забывать, для чего на самом деле мы пишем код. А именно:
- Чтобы он работал и решал поставленные задачи.
- Чтобы его могли прочитать, осознать и изменить другие программисты.
Для пункта номер два следует вносить в код как можно меньше сложности. Оправдана она только в том случае, когда другого выхода нет.
Это не означает, что не надо изучать шаблоны проектирования, читать Фаулера и т.д. Надо. Просто во всём надо знать меру и не бросаться применять прочитанное с особым энтузиазмом и уж, тем более, не стоит это делать, если вы не понимаете, для чего это и как оно упростит вам жизнь (и упростит ли вообще).