Пожалуй есть три причины общие для всех видов деятельности где нужно много знать и еще больше уметь:
- вы учитесь не тому и не по тем материалам. Возможно они некачественные, а возможно рассчитаны на уже профессионала осваивающего ну этак 10-20-й по счету свой язык программирования или фреймворк. Также возможно вы пытаетесь "нахвататься" по разрозненным видео или темам на форуме, вместо того чтобы пройти целостный курс или учебник.
- Это вообще не ваше. Не обязательно все программирование вообще. Не исключено что не ваш изучаемый язык или отрасль программирования. Такое бывает и у профессионалов с опытом. Т.е. проект-то напишу. Но медленно и без драйва.
- Все у вас нормально с обучением. Просто вы ожидали что это будет быстрее и сразу выше результаты чем это возможно в реальности. Ну видел я презентации курсов о сказочной жизни программистов. Только они "забывают" сказать что это люди с многолетним опытом разработок на ведущие компании отрасли. Да еще и на редких дорогостоящих технологиях которые мало кто знает, а опыт еще меньше у кого.
Ну а более специфичные вещи именно для программирования: программирование - это инженерная дисциплина. Вам надо придумать "изделие" (пусть в данном случае не аппаратное а программное) которое выполняет поставленные задачи. И при этом реализуемо ограниченными силами и средствами. Скорее всего изделие будет необозримо сложным целиком. Нужно продумать из каких более простых частей оно должно состоять и как эти части взаимодействуют друг с другом. А главное вам должно НРАВИТСЯ этим заниматься.
Программирование - наука о тонкостях, ньюансах и деталях. Что достаточно далеко от навязываемого современной массовой культуры упрощенного, "черно-белого" восприятия информации без ньюансов и полутонов. Придется приучить себя их продумывать. И видеть моменты из области "все было гладко на бумаги, но позабыли про овраги" заранее а не ближе к сроку окончания проекта.
Программирование - практическая наука. Или если угодно ремесло. Узнали что-то новое, сразу постарайтесь придумать этому практически полезное применение. В тех вещах которыми вы занимаетесь или собираетесь заниматься. Иначе забудется очень быстро. А зубрить все - ну так программист (коих многие десятки тысяч) даже весьма в средней сложности проекте использует такое количество информации которое не факт что сможет запомнить гений (коих единицы). Как? А просто! И не помним. Знаем то что встречается постоянно. Но это само собой получается и попугай заговорит если при нем сотни раз повторять одну и ту же пару слов. А остальное помним принципы как это устроено. Для чего это нужно использовать, для чего необязательно но полезно, а для чего больше вреда. Помним подводные камни. А как их не запомнишь, если убил кучу времени и нервов :) А десятки тысяч методов сотни классов сложного фреймворка простом случае подскажет IDE, а в менее очевидных есть мануал. Вроде бы противоречит предыдущему абзацу. Но там я говорил о вещах которые вы сами проектируете. А здесь что вы применяете сделанного до вас.
Текст получился длинным и не особо конкретным поскольку неизвестно какие проблемы и на каком этапе изучения у вас возникли. Успехов вам, будущий коллега.