Что делать если не получается писать код имея нужные знания?
 я сталкиваюсь с тем, что я не понимаю как его делать, хотя там есть все то, что я уже проходил.
Это нормальная практика, называется она "не набита рука".

Но, если я вижу решение того или иного задания, то я сразу же понимаю почему те или иные действия выполнены при решение.
Всё правильно, так и пишут код и находят решения 80% программистов. Гуглят решения -> компонуют решения под свой проект -> делают рефакторинг кода(если требуется) -> получают деньги. PS: не все крутые дядьки сеньоры-помидоры отличаются от вас мозгами, просто они уже вложили от 2000 до 10 000 часов на изучения материала, на который вы потратили только 100-200 часов. В этом вся разница.

 но как разобраться со своей проблемой я не знаю. 
Очень просто. Решать типовые(и не типовые) задачи(от самых простых, до более сложных) по 5-8 часов в день, и каждый месяц делать breackpoint, анализируя пройденный путь. Если через полгода не будет результата - всё и правда плохо, и скорее всего вам нужно качать не только программирование, но и умение логически и критически мыслить, умение деструктурировать задачи на под задачи.
Мой опыт:
Изучал JS по урокам и официальной документации.
1. Прекрасно знал, что такое переменная, массивы, функции, циклы и пр. Как это применять в практике - ни понятно.
2. Прочитал книгу O'relly для начинающих JS - еще больше стал понимать про переменные, циклы, массивы и пр. - Как это применять на практике - не понятно
3. Записался на продвинутый JS, NodeJS, React - изучил ES6, выучил классы, понял принципы работы React - как это применить на практике - не понятно.
4. Купил несколько англоязычных курсов на udemy (русские в топку), где создаются нормальные реальные проекты, не "туду листы" и повторял все за автором. Первый курс прошел и повторял все один в один, благодаря чему понял взаимодействие React с Нодой, как писать API, как деплоить и все дела. Второй курс уже сразу адаптировал под свои нужды. В итоге сделал свой проект и от проекта в курсе осталась только авторизация и базовые методы создания и чтения. Процентов 70 своего кода.

В итоге, нужна практика и практиковаться нужно на цельном проекте. Тогда приходит понимание для чего тот или иной метод/функция необходимы. А куча теории и хрен пойми для чего это в практике - это прерогатива русскоязычных менторов.