Любят люди поспорить про образование. То вышка не нужна, то нужна, с книгами вот тоже непонятки, то ли сугубо технарские талмуды читать (Страуструп, Танненбаум итд), то ли про индустрию и подходы к разработке в целом (всю бумагу, что испортили перепечатыванием Agile манифеста + 90% воды), то ли вообще не читать, а бежать в условный боксиум курсы проходить.

Я бы сказал, что КПД в развитии того или иного навыка можно выразить следующей формулой:

КПД = Время * Сообразительность * Эрудиции * Теория * Практика * Самочувствие

в которой сообразительность, самочувствие, теория и практика выражены коэффициентами от 0 до 1. Оптимальной стратегией я считаю параллельное сбалансированное обучение. Небольшие пробелы в теории можно заместить практикой (набитыми шишками), пробелы в практике - теорией (чужими набитыми шишками).

Обойтись целиком чужими набитыми шишками не получится - без практики вы будете оторваны от реальности и получите “а зачем я это всё учил, если это на работе не надо?..”. Понять принцип методом тыка - это хорошо, даже если не получится.

Целиком замещать теорию практикой тоже не стоит - получится, что “вот так делаю - работает, так делаю - не работает, почему - не понимаю”. А понимания нет, потому что нет понимания принципов, модельки стройной в голове нет, которые даются в теории. В итоге “по инструкции могу, без инструкции шаг влево, шаг вправо - не могу”, чужая помощь нужна. Разработчики такие обычно подолгу в джуниорах сидят или в мидлах (формально, за выслугу лет), рутину-то кому-то сгребать надо.

Ну и пару углов за счёт сообразительности или эрудиции срезать можно. Эрудиция поможет быстрее принципы выводить за счёт аналогий.

Ну и учиться с плохим самочувствием тоже неэффективно. Похмелье и недосып очень сильно влияют на способность воспринимать новые знания.