Я всегда считал и считаю, что программисту нужна не собственно логика, а умение формализовать любой процесс - будь то повседневный или на 100% виртуальный. Именно отсутствие у пользователей навыков формализации своих же собственных действий является основной проблемой при согласовании технических заданий с бизнес-подразделениями. Особенно, если разрабатывается что-то новое с нуля, а не модифицируется старое (там хоть как-то худо-бедно можно заставить пользователя оперировать понятиями программиста).
Не спорю - есть люди, которым эта черта (умение формализировать процессы/действия) чужда просто по свойствам характера или, не знаю, темперамента. Встречался с ними не единожды. Плохого наверное в этом ничего нет. Но конструктивно работать с ними очень тяжело.
Для развития этого навыка я бы предложил просто пытаться раскладывать любой встречающийся на Вашем пути процесс на составляющие: субъекты (кто), объекты (над чем), действия (что делает) и причинно-следственные и условные связи между этими действиями (та самая логика, о которой Вы спрашиваете). Постепенно стараться усложнять предметную область и если получится всё больше ее абстрагировать - то есть раскладывать не реальные события, а некие процессы в разрабатываемых программах (как с задействованием GUI так и полностью невизуальные).