Как развивать problem solving?

Чтобы научиться делать что-то сложное, надо как минимум начать пытаться его сделать:)

problem solving развивается через практику постепенно усложняющихся задачек, чем они универсальнее (чем больше в них программистских паттернов, а не завязок на конкретные технологии), тем продуктивнее. Лучше всего это делать в академическом формате: главная форма обучения программированию и computer science во всех университетах мира -- это практика программирования на сложных структурах данных и алгоритмах, рекомендованная Ассоциацией по вычислительной технике ACM и Институтом инженеров электротехники и электроники IEEE.