Все просто.
В процессе учебы и работы старайтесь все время развиваться, а не просто делать свою работу. Так через какое-то время ваши решения будут становиться лучше.
Ну и по пунктам
"как научиться проектировать ПО"
Смотреть на архитектуру разных программ и разных проектов, это приходит с опытом. Видеть как налаживаются процессы. Невозможно научиться проектировать ПО, учавствуя в одном маленьком проекте.
стать профессиональным программистом, а не зависеть от опыта, который получил на курсах/ВУЗе/Книгах.
Ну так получать опыт еще где-нибудь.
И очень зря ты считаешь что опыт из книг тебе не нужен. Опыт из книг это грубо говоря уже готовый и внятно сформулированный чужой опыт, который может исчислятся десятками лет.
Как именно думать как программист? Я говорю не об алгоритмах и структурах данных, а о том как проектировать ПО. Независимо от знаний архитектурных паттернов, которые изучил, а научиться создавать свои Архитектурные решения.
Было бы неплохо сперва узнать что такое паттерны - то есть годами выстраданные решения, полученные на чужом опыте. А то потратишь десяток-другой лет на изобретение велосипеда, а потом оказывается это уже изобретено, а у тебя пенсия через 5 лет и ты все еще просто делаешь базовые вещи.
Помогут ли тут такие книги, как "Проектирование ИС"?