Тут талант батенька нужен, как и в любой творческой проффессии
Нарабатывается длительным трудом, а самое главное - ЖЕЛАНИЕ и стремление стать лучше (что то вроде самоунижения, вроде "плохо получилось, надо лучше").
Если придерживаться принципа "так сойдёт" - то ничего у тебя не получиться.
Опыт нужен, а для его получения - терпение и стремление, как написали выше.
Решать простые задачи. Биться головой о свои предубеждения, пока не пробьешь. Тут нет общего рецепта - каждый человек наступает на эти грабли по-своему. Просто в какой-то момент почувствуешь, что все вчера сложное сегодня делается очень просто.
Можешь попробовать разобрать разные формы представления алгортимов - естественный язык, блок-схемы, другой ЯП.. . Это помогает.
Мне хорошо помогает декомпозиция: задачу надо разбить на ряд подзадач, каждую из которых - на новые подзадачи, и так, пока каждая задача не станет очевидной. Иногда приходится все забрасывать и писать новую декомпозицию - это нормально; зато хорошо видно, какой участок программы что делает.
Попробовать другой язык программирования, скажем, не императивный, а функциональный или стековый
Опыт. И решение задач каждый день
+ Эти задачи должны быть трудней ваших знаний! Чтобы потом когда столкнетесь с этим могли решить!