Когда я только начинал учиться программированию, то для меня даже документация казалась темным лесом, потому что ну почитал я что делает команда, а зачем она это делает - не понятно...
Язык программирования - это инструмент, сродни молотку или топору, только посложнее и нематериальный. Тем не менее, задача всегда стоит при помощи того или иного инструмента, чаще целого набора оных, построить нечто полезное людям, например стул.
Поэтому я бы советовал изучать код более продвинутых товарищей, на предмет сопоставления что делает код и как, и лучшие примеры брать на заметку, воспроизводить. Тут важна наглядность, т.е. чтобы можно было код менять и видеть как меняется результат его действия.
Так же очень полезный навык - декомпозиция. Слона или кита нужно есть частями. Другими словами большую задачу дробим на логически обособленные части, сами части дробим еще, до тех пор, пока каждую маленькую часть не сможем решить кодом размером в 1-2 экрана. Тщательно тестируем на всякие редкие и крайние ситуации. Оформляем этот код в виде модулей, далее собираем как из кубиков "Лего" нужный результат. Тестируем связки компонент, на моем опыте примерно половина времени уходит на продумывание и гугление, от оставшегося времени 90% уходит на дебаггинг и тестирование, и только примерно 5% совокупного времени реально идет на собственно кодинг.