Свои силы оцениваю на уровне джуна.
Когда программирую, ловлю себя на мысли что мой код какой-то невыразительный что-ли. Т.е. видно что писал не синьор. Он получается плохо масштабируемый, каждый новый функционал добавляется все сложней.
Как перейти на новый уровень?
Запомните 2 аксиомы:
1. "Плохие программисты думают о коде, хорошие о архитектуре".
2. "Любой дурак сможет написать код, который поймет машина. Хорошие программисты пишут код, который сможет понять человек."
- Абстрагируйтесь от инструментов и научитесь видеть проблему - отлично помогает в этом написание кода на бумаге, только не слепые попытки вспомнить синтаксис пхп, а решение реальной задачи. Ошибки будут и они не имеют значения, их исправит ваша "среда разработки", но вы привыкните к планированию.
- Возьмите последнюю задачу, которую решали и реализуйте как минимум 10 способов ее решения. Опишите на листке бумаги + / - каждого. Не забывайте о том, что легкость понимания кода в сотни раз важнее производительности (бывают исключения, но когда вы с ними столкнетесь подобных вопросов задавать не будете и ответ будете знать лучше меня.) Найдите оптимальное решение и используйте рефакторинг для того, чтобы внедрить "лучшие" части других решений. Напишите тесты. Делайте рефакторинг и тестируйте регулярно. Начните применять TDD.
p.s. меньше читайте. Разберитесь с тем, что такое "ошибка выжившего" и постарайтесь понять, что пути становления описанные сотни раз на примерах -это не всегда то, что вам нужно. Вы особенный, как и любой человек и вам нужен свой подход. То, что пишут в книгах и статьях "успешные" программисты, это всего лишь часть шагов, многе из которых не являются необходимостью и тем более достаточной, те же шаги, которые описанны выше -необходимость которой будет достаточно для того, чтобы стать "хорошим программистом".