Я начал с курсов (хотя был еще и диплом программиста, но это такое). Хотел писать на пхп - на курсах толково объяснили типичные задачи и методы их реализации. Дальше устраиваешься на работу и пашешь. Не понял правда что значит "что бы не просто кодить, а понимать что, как и зачем ", как же можно написать что-то и не понимать зачем?) Решая задачи переходишь от простого к сложному, и постепенно с опытом будет и какое-то глобальное понимание.