Как стать веб-программистом, а не кодировщиком?
Практический опыт и постоянное самообразование.
Все просто.
В процессе учебы и работы старайтесь все время развиваться, а не просто делать свою работу. Так через какое-то время ваши решения будут становиться лучше.
Ну и по пунктам

"как научиться проектировать ПО"
Смотреть на архитектуру разных программ и разных проектов, это приходит с опытом. Видеть как налаживаются процессы. Невозможно научиться проектировать ПО, учавствуя в одном маленьком проекте.

стать профессиональным программистом, а не зависеть от опыта, который получил на курсах/ВУЗе/Книгах.
Ну так получать опыт еще где-нибудь.
И очень зря ты считаешь что опыт из книг тебе не нужен. Опыт из книг это грубо говоря уже готовый и внятно сформулированный чужой опыт, который может исчислятся десятками лет.

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