Чем закрыть огромную дыру между теоретическими знаниями и их практическим применением в веб-программировании?
Единственный способ прийти к написанию хорошего кода - писать код. При чем не абы как, а по одному из двух сценариев:
1. Вы должны писать что-то достаточно большое, чем будете пользоваться непосредственно вы. Тогда вы поймете Самую Главную Вещь в работе программиста - код нужно поддерживать. И сразу станет ясно зачем нужны всякие паттерны, фреймворки, тесты и в чем смысл рефакторинга.
2. Вы должны найти кого-то, у кото такой опыт уже есть и тянуть из него знания.
правильно пишут, что практикой, вниманием к мелочам, опытом других людей. а бывает еще такое: у человека просто нет способностей писать такой код. вот просто нет - и все тут. а он мучается (басня про лягушку и вола что ли, как та лопнула, желая походить на вола). небольшая деталь к другим ответам.